<?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>161438</bug_id>
          
          <creation_ts>2016-08-31 08:46:17 -0700</creation_ts>
          <short_desc>[GTK] Move GObject DOM bindings to WebKit2 layer and stop auto generating them</short_desc>
          <delta_ts>2016-08-31 23:48:16 -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 Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>161440</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1224954</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 08:46:17 -0700</bug_when>
    <thetext>For now copy all the generated bindings there as a first step, and remove all scripts related to the auto-generated bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224963</commentid>
    <comment_count>1</comment_count>
      <attachid>287514</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 09:28:22 -0700</bug_when>
    <thetext>Created attachment 287514
Patch

I hope I haven&apos;t forgotten anything</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224967</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 09:37:05 -0700</bug_when>
    <thetext>Patch is rebased to current trunk, I don&apos;t see anything wrong in the EWS output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224975</commentid>
    <comment_count>3</comment_count>
      <attachid>287516</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 09:46:00 -0700</bug_when>
    <thetext>Created attachment 287516
Rebased again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224981</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 09:56:03 -0700</bug_when>
    <thetext>Maybe the problem is that it&apos;s a big patch and others land after it&apos;s started to be processed and before it finishes, even if it applies anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224986</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-08-31 10:08:15 -0700</bug_when>
    <thetext>WebKitDOMAnimatable.[cpp,h] looks like it can be deleted.

Unfortunately a lot of the files have &quot;this file has been generated, DO NOT MODIFY!&quot; and such at the top. You could try removing that and regenerating them all before removing the script again...?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225262</commentid>
    <comment_count>6</comment_count>
      <attachid>287602</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 23:27:27 -0700</bug_when>
    <thetext>Created attachment 287602
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225271</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 23:38:51 -0700</bug_when>
    <thetext>It seems impossible to test this patch with EWS :-( I&apos;ll land and check the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225275</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-08-31 23:48:16 -0700</bug_when>
    <thetext>Committed r205280: &lt;http://trac.webkit.org/changeset/205280&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287514</attachid>
            <date>2016-08-31 09:28:22 -0700</date>
            <delta_ts>2016-08-31 09:46:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkdom-freeze.diff</filename>
            <type>text/plain</type>
            <size>4265834</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzOWE3NzViLi4yNzJkOTdk
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUgQEAK
IDIwMTYtMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CisgICAgICAgIFtHVEtdIE1vdmUgR09iamVjdCBET00gYmluZGluZ3MgdG8gV2ViS2l0MiBsYXll
ciBhbmQgc3RvcCBhdXRvIGdlbmVyYXRpbmcgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNDM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvUGxhdGZvcm1HVEsuY21ha2U6CisgICAg
ICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisKKzIwMTYtMDgtMzEgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFVucmV2aWV3
ZWQuIEJ1bXAgR1RLKyB2ZXJzaW9ucyBudW1iZXJzLgogCiAgICAgICAgICogU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYWY0ZDJlMy4uOGIzZDRkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtNiw3ICs2LDYgQEAgaWYgKEVOQUJMRV9JTlRST1NQRUNUSU9OKQogZW5kaWYgKCkK
IAogbGlzdChBUFBFTkQgRG9jdW1lbnRhdGlvbkRlcGVuZGVuY2llcwotICAgIEdPYmplY3RET01C
aW5kaW5ncwogICAgIFdlYktpdDIKICAgICAiJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIgogICAgICIk
e0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0tc2VjdGlvbnMudHh0IgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDE3Y2M1Y2IuLjZmMDEwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAx
Ni0wOC0zMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gTW92ZSBHT2JqZWN0IERPTSBiaW5kaW5ncyB0byBXZWJLaXQyIGxheWVyIGFu
ZCBzdG9wIGF1dG8gZ2VuZXJhdGluZyB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIHNjcmlwdHMgdG8gZ2VuZXJhdGUgR09iamVj
dCBET00gYmluZGluZ3MgYW5kIHRoZSB0ZXN0cy4gQWxzbyByZW1vdmUgYWxsIEdPYmplY3QgaWZk
ZWZzIGZyb20gdGhlIGlkbCBmaWxlcy4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgor
ICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3Q6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbTogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVTaGVldC5pZGw6CisgICAgICAgICogY3NzL1JHQkNvbG9yLmlkbDoKKyAgICAgICAgKiBkb20v
RE9NQ29yZUV4Y2VwdGlvbi5pZGw6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmlk
bDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFR5
cGUuaWRsOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAgKiBkb20vRXZlbnQu
aWRsOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5pZGw6CisgICAgICAgICogZG9tL0tleWJv
YXJkRXZlbnQuaWRsOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaWRsOgorICAgICAgICAq
IGRvbS9NZXNzYWdlUG9ydC5pZGw6CisgICAgICAgICogZG9tL01vdXNlRXZlbnQuaWRsOgorICAg
ICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaWRsOgorICAgICAgICAqIGRvbS9Ob2RlLmlkbDoKKyAg
ICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAgICAqIGRvbS9TbG90YWJsZS5pZGw6CisgICAg
ICAgICogZG9tL1doZWVsRXZlbnQuaWRsOgorICAgICAgICAqIGZpbGVhcGkvRmlsZUV4Y2VwdGlv
bi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGw6CisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVjdGlv
bi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGw6Cisg
ICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGw6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNlbGxF
bGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsOgorICAg
ICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0ltYWdlRGF0YS5pZGw6CisgICAgICAg
ICogaHRtbC9VUkxVdGlscy5pZGw6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaWRs
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmlkbDoKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5pZGw6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50LmlkbDoKKyAgICAgICAgKiBzdmcv
U1ZHRWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0V4Y2VwdGlvbi5pZGw6CisgICAgICAg
ICogd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGw6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXIuaWRsOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaWRs
OgorICAgICAgICAqIHhtbC9YUGF0aEV4Y2VwdGlvbi5pZGw6CisKIDIwMTYtMDgtMzEgIFJvbWFp
biBCZWxsZXNzb3J0ICA8cm9tYWluLmJlbGxlc3NvcnRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAg
IFtTdHJlYW1zIEFQSV0gQWxpZ24gZ2V0UmVhZGVyKCkgd2l0aCBzcGVjCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9IVE1MTWVkaWFFbGVtZW50TWVkaWFT
ZXNzaW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL0hUTUxNZWRp
YUVsZW1lbnRNZWRpYVNlc3Npb24uaWRsCmluZGV4IGVhNWQ4YmUuLjkzNTdhYmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL0hUTUxNZWRpYUVsZW1lbnRN
ZWRpYVNlc3Npb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9u
L0hUTUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb24uaWRsCkBAIC0yOCw3ICsyOCw1IEBACiBdIHBh
cnRpYWwgaW50ZXJmYWNlIEhUTUxNZWRpYUVsZW1lbnQgewogICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcga2luZDsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9H
T0JKRUNUKQogICAgIGF0dHJpYnV0ZSBNZWRpYVNlc3Npb24/IHNlc3Npb247Ci0jZW5kaWYKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0hUTUxNZWRp
YUVsZW1lbnRNZWRpYVN0cmVhbS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5pZGwKaW5kZXggM2FjZjRkNi4uM2EyOWVj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9IVE1MTWVk
aWFFbGVtZW50TWVkaWFTdHJlYW0uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vSFRNTE1lZGlhRWxlbWVudE1lZGlhU3RyZWFtLmlkbApAQCAtMjcsNyArMjcsNSBA
QAogICAgIENvbmRpdGlvbmFsPVZJREVPJk1FRElBX1NUUkVBTSwKIF0gcGFydGlhbCBpbnRlcmZh
Y2UgSFRNTE1lZGlhRWxlbWVudAogewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAm
JiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtTZXR0ZXJDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBhdHRyaWJ1dGUgTWVkaWFTdHJlYW0/IHNyY09iamVjdDsKLSNlbmRpZgogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZTMyM2RiYS4uZjIxZmMwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UKQEAgLTM3OSw0MDEgKzM3OSwxMyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVz
KAogICAgICR7V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfQogICAgICIke1dFQkNPUkVfRElS
fS9iaW5kaW5ncy9nb2JqZWN0LyIKICAgICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKLSAgICAi
JHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfSIKICkKIAogaW5jbHVk
ZV9kaXJlY3RvcmllcyhTWVNURU0KICAgICAke1dlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNU
T1JJRVN9CiApCiAKLWxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5nc19TT1VSQ0VTCi0gICAg
YmluZGluZ3MvZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcAotICAgIGJpbmRpbmdzL2dv
YmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCi0gICAgYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZl
bnRMaXN0ZW5lci5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAotICAgIGJpbmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5j
cHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5jcHAKLSAgICBiaW5kaW5n
cy9nb2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuY3BwCi0gICAgYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01FdmVudFRhcmdldC5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUhU
TUxQcml2YXRlLmNwcAotICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5j
cHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU9iamVjdC5jcHAKLSAgICBiaW5kaW5n
cy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwCi0gICAgYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01YUGF0aE5TUmVzb2x2ZXIuY3BwCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9E
T01fQklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMuaAotICAgICR7REVSSVZFRF9T
T1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0ZG9tYXV0b2NsZWFudXBzLXVu
c3RhYmxlLmgKLSAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9
L3dlYmtpdGRvbWRlZmluZXMuaAotICAgICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJ
TkRJTkdTX0RJUn0vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oCi0gICAgJHtERVJJVkVEX1NP
VVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb20uaAotKQotCi1saXN0KEFQ
UEVORCBHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfSURMX0ZJTEVTCi0gICAgY3NzL0NTU1J1bGUu
aWRsCi0gICAgY3NzL0NTU1J1bGVMaXN0LmlkbAotICAgIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9u
LmlkbAotICAgIGNzcy9DU1NTdHlsZVNoZWV0LmlkbAotICAgIGNzcy9DU1NWYWx1ZS5pZGwKLSAg
ICBjc3MvTWVkaWFMaXN0LmlkbAotICAgIGNzcy9TdHlsZVNoZWV0LmlkbAotICAgIGNzcy9TdHls
ZVNoZWV0TGlzdC5pZGwKLQotICAgIGRvbS9BdHRyLmlkbAotICAgIGRvbS9DREFUQVNlY3Rpb24u
aWRsCi0gICAgZG9tL0NoYXJhY3RlckRhdGEuaWRsCi0gICAgZG9tL0NvbW1lbnQuaWRsCi0gICAg
ZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbAotICAgIGRvbS9Eb2N1bWVudC5pZGwKLSAgICBkb20v
RG9jdW1lbnRGcmFnbWVudC5pZGwKLSAgICBkb20vRG9jdW1lbnRUeXBlLmlkbAotICAgIGRvbS9F
bGVtZW50LmlkbAotICAgIGRvbS9FdmVudC5pZGwKLSAgICBkb20vS2V5Ym9hcmRFdmVudC5pZGwK
LSAgICBkb20vTW91c2VFdmVudC5pZGwKLSAgICBkb20vTmFtZWROb2RlTWFwLmlkbAotICAgIGRv
bS9Ob2RlLmlkbAotICAgIGRvbS9Ob2RlSXRlcmF0b3IuaWRsCi0gICAgZG9tL05vZGVMaXN0Lmlk
bAotICAgIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsCi0gICAgZG9tL1JhbmdlLmlkbAot
ICAgIGRvbS9UZXh0LmlkbAotICAgIGRvbS9UcmVlV2Fsa2VyLmlkbAotICAgIGRvbS9VSUV2ZW50
LmlkbAotICAgIGRvbS9XaGVlbEV2ZW50LmlkbAotCi0gICAgZmlsZWFwaS9CbG9iLmlkbAotICAg
IGZpbGVhcGkvRmlsZS5pZGwKLSAgICBmaWxlYXBpL0ZpbGVMaXN0LmlkbAotCi0gICAgaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAotICAg
IGh0bWwvSFRNTEFyZWFFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEJSRWxlbWVudC5pZGwKLSAg
ICBodG1sL0hUTUxCYXNlRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxCb2R5RWxlbWVudC5pZGwK
LSAgICBodG1sL0hUTUxCdXR0b25FbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaWRsCi0gICAgaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKLSAgICBodG1sL0hUTUxETGlzdEVs
ZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5pZGwKLSAgICBodG1sL0hU
TUxEaXZFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTERvY3VtZW50LmlkbAotICAgIGh0bWwvSFRN
TEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAotICAgIGh0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxGb250RWxlbWVudC5pZGwKLSAgICBo
dG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxGcmFtZUVsZW1lbnQuaWRsCi0g
ICAgaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEhSRWxlbWVudC5p
ZGwKLSAgICBodG1sL0hUTUxIZWFkRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxIZWFkaW5nRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxIdG1sRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxJRnJh
bWVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwKLSAgICBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTElFbGVtZW50LmlkbAotICAgIGh0bWwv
SFRNTExhYmVsRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmlkbAotICAg
IGh0bWwvSFRNTExpbmtFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTE1hcEVsZW1lbnQuaWRsCi0g
ICAgaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTWVudUVsZW1lbnQu
aWRsCi0gICAgaHRtbC9IVE1MTWV0YUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTW9kRWxlbWVu
dC5pZGwKLSAgICBodG1sL0hUTUxPTGlzdEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaWRsCi0gICAgaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwK
LSAgICBodG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFBhcmFtRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxQcmVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFF1b3Rl
RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmlkbAotICAgIGh0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MU3R5bGVFbGVtZW50LmlkbAotICAgIGh0
bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MVGFibGVDZWxsRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1M
VGFibGVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5pZGwKLSAgICBo
dG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MVUxp
c3RFbGVtZW50LmlkbAotCi0gICAgcGFnZS9ET01XaW5kb3cuaWRsCi0KLSAgICB4bWwvWFBhdGhF
eHByZXNzaW9uLmlkbAotICAgIHhtbC9YUGF0aFJlc3VsdC5pZGwKLSkKLQotbGlzdChBUFBFTkQg
R09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlNYW5hZ2VyLmlkbAotCi0gICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2Ft
ZXBhZC5pZGwKLSAgICBNb2R1bGVzL2dhbWVwYWQvZGVwcmVjYXRlZC9HYW1lcGFkTGlzdC5pZGwK
LQotICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaWRsCi0KLSAgICBNb2R1bGVz
L21lZGlhc291cmNlL1ZpZGVvUGxheWJhY2tRdWFsaXR5LmlkbAotCi0gICAgTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYURldmljZXMuaWRsCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9OYXZpZ2F0
b3JNZWRpYURldmljZXMuaWRsCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrU3Vw
cG9ydGVkQ29uc3RyYWludHMuaWRsCi0KLSAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmlk
bAotICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZVF1b3RhLmlkbAotCi0gICAgTW9kdWxlcy9zcGVl
Y2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmlkbAotICAgIE1vZHVsZXMvc3BlZWNoL1NwZWVj
aFN5bnRoZXNpcy5pZGwKLSAgICBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNFdmVudC5p
ZGwKLSAgICBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaWRsCi0gICAg
TW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2UuaWRsCi0KLSAgICBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlLmlkbAotCi0gICAgY3NzL0RPTUNTU05hbWVzcGFjZS5pZGwKLSAg
ICBjc3MvTWVkaWFRdWVyeUxpc3QuaWRsCi0gICAgY3NzL1N0eWxlTWVkaWEuaWRsCi0KLSAgICBk
b20vRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGwKLSAgICBkb20vRE9NU3RyaW5nTGlzdC5pZGwK
LSAgICBkb20vRE9NU3RyaW5nTWFwLmlkbAotICAgIGRvbS9NZXNzYWdlUG9ydC5pZGwKLSAgICBk
b20vVG91Y2guaWRsCi0gICAgZG9tL1dlYktpdE5hbWVkRmxvdy5pZGwKLQotICAgIGh0bWwvRE9N
VG9rZW5MaXN0LmlkbAotICAgIGh0bWwvSFRNTERldGFpbHNFbGVtZW50LmlkbAotICAgIGh0bWwv
SFRNTEtleWdlbkVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTWVkaWFFbGVtZW50LmlkbAotICAg
IGh0bWwvTWVkaWFDb250cm9sbGVyLmlkbAotICAgIGh0bWwvTWVkaWFFcnJvci5pZGwKLSAgICBo
dG1sL1RpbWVSYW5nZXMuaWRsCi0gICAgaHRtbC9WYWxpZGl0eVN0YXRlLmlkbAotCi0gICAgbG9h
ZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsCi0KLSAgICBwYWdlL0JhclByb3Au
aWRsCi0gICAgcGFnZS9ET01TZWxlY3Rpb24uaWRsCi0gICAgcGFnZS9IaXN0b3J5LmlkbAotICAg
IHBhZ2UvTG9jYXRpb24uaWRsCi0gICAgcGFnZS9OYXZpZ2F0b3IuaWRsCi0gICAgcGFnZS9QZXJm
b3JtYW5jZS5pZGwKLSAgICBwYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCi0gICAgcGFnZS9QZXJm
b3JtYW5jZU5hdmlnYXRpb24uaWRsCi0gICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGwKLSAg
ICBwYWdlL1NjcmVlbi5pZGwKLSAgICBwYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5pZGwKLSAgICBw
YWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCi0gICAgcGFnZS9XZWJLaXROYW1l
c3BhY2UuaWRsCi0gICAgcGFnZS9XZWJLaXRQb2ludC5pZGwKLQotICAgIHBsdWdpbnMvRE9NTWlt
ZVR5cGUuaWRsCi0gICAgcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmlkbAotICAgIHBsdWdpbnMv
RE9NUGx1Z2luLmlkbAotICAgIHBsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaWRsCi0KLSAgICBzdG9y
YWdlL1N0b3JhZ2UuaWRsCi0pCi0KLWlmIChFTkFCTEVfV0VCX0FOSU1BVElPTlMpCi0gICAgbGlz
dChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgICAgIGFu
aW1hdGlvbi9BbmltYXRhYmxlLmlkbAotICAgICAgICBhbmltYXRpb24vQW5pbWF0aW9uRWZmZWN0
LmlkbAotICAgICAgICBhbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCi0gICAgICAgIGFu
aW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbi5pZGwKLSAgICAgICAgYW5pbWF0aW9uL0RvY3VtZW50
VGltZWxpbmUuaWRsCi0gICAgICAgIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5pZGwKLSAgICAg
ICAgYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5pZGwKLSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERP
TUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgICAgIGh0bWwvSFRNTEF1ZGlvRWxlbWVu
dC5pZGwKLSAgICAgICAgaHRtbC9IVE1MVmlkZW9FbGVtZW50LmlkbAotCi0gICAgICAgIGh0bWwv
dHJhY2svQXVkaW9UcmFjay5pZGwKLSAgICAgICAgaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5p
ZGwKLSAgICAgICAgaHRtbC90cmFjay9EYXRhQ3VlLmlkbAotICAgICAgICBodG1sL3RyYWNrL1Rl
eHRUcmFjay5pZGwKLSAgICAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaWRsCi0gICAgICAg
IGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5pZGwKLSAgICAgICAgaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmlkbAotICAgICAgICBodG1sL3RyYWNrL1RyYWNrRXZlbnQuaWRsCi0gICAgICAg
IGh0bWwvdHJhY2svVlRUQ3VlLmlkbAotICAgICAgICBodG1sL3RyYWNrL1ZpZGVvVHJhY2suaWRs
Ci0gICAgICAgIGh0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaWRsCi0gICAgKQotZW5kaWYgKCkK
LQotaWYgKEVOQUJMRV9RVU9UQSkKLSAgICBsaXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NV
bnN0YWJsZV9JRExfRklMRVMKLSAgICAgICAgTW9kdWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5p
ZGwKLSAgICAgICAgTW9kdWxlcy9xdW90YS9OYXZpZ2F0b3JTdG9yYWdlUXVvdGEuaWRsCi0gICAg
ICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZUVycm9yQ2FsbGJhY2suaWRsCi0gICAgICAgIE1vZHVs
ZXMvcXVvdGEvU3RvcmFnZUluZm8uaWRsCi0gICAgICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZVF1
b3RhLmlkbAotICAgICAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VRdW90YUNhbGxiYWNrLmlkbAot
ICAgICAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VVc2FnZUNhbGxiYWNrLmlkbAotICAgICAgICBN
b2R1bGVzL3F1b3RhL1dvcmtlck5hdmlnYXRvclN0b3JhZ2VRdW90YS5pZGwKLSAgICApCi1lbmRp
ZiAoKQotCi1zZXQoR09iamVjdERPTUJpbmRpbmdzX1NUQVRJQ19DTEFTU19MSVNUIEN1c3RvbSBE
ZXByZWNhdGVkIEV2ZW50VGFyZ2V0IE5vZGVGaWx0ZXIgT2JqZWN0IFhQYXRoTlNSZXNvbHZlcikK
LQotc2V0KEdPYmplY3RET01CaW5kaW5nc1N0YWJsZV9DTEFTU19MSVNUICR7R09iamVjdERPTUJp
bmRpbmdzX1NUQVRJQ19DTEFTU19MSVNUfSkKLXNldChHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVf
SU5TVEFMTEVEX0hFQURFUlMKLSAgICAgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklO
RElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMuaAotICAgICAke0RFUklWRURfU09VUkNF
U19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMuaAotICAgICAke0RF
UklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbS5oCi0gICAg
ICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgKLSAgICAg
JHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01EZXByZWNhdGVkLmgKLSAg
ICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5o
Ci0gICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRl
ci5oCi0gICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0
LmgKLSAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0aE5T
UmVzb2x2ZXIuaAotKQotCi1zZXQoR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSU5TVEFMTEVE
X0hFQURFUlMKLSAgICAgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElS
fS93ZWJraXRkb21hdXRvY2xlYW51cHMtdW5zdGFibGUuaAotICAgICAke0RFUklWRURfU09VUkNF
U19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaAot
ICAgICAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbVVuc3Rh
YmxlLmgKLSkKLQotZm9yZWFjaCAoZmlsZSAke0dPYmplY3RET01CaW5kaW5nc1N0YWJsZV9JRExf
RklMRVN9KQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoY2xhc3NuYW1lICR7ZmlsZX0gTkFN
RV9XRSkKLSAgICBsaXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfQ0xBU1NfTElT
VCAke2NsYXNzbmFtZX0pCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzU3RhYmxl
X0lOU1RBTExFRF9IRUFERVJTICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdT
X0RJUn0vV2ViS2l0RE9NJHtjbGFzc25hbWV9LmgpCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERP
TUJpbmRpbmdzVW5zdGFibGVfSU5TVEFMTEVEX0hFQURFUlMgJHtERVJJVkVEX1NPVVJDRVNfR09C
SkVDVF9ET01fQklORElOR1NfRElSfS9XZWJLaXRET00ke2NsYXNzbmFtZX1VbnN0YWJsZS5oKQot
ZW5kZm9yZWFjaCAoKQotCi1mb3JlYWNoIChmaWxlICR7R09iamVjdERPTUJpbmRpbmdzVW5zdGFi
bGVfSURMX0ZJTEVTfSkKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGNsYXNzbmFtZSAke2Zp
bGV9IE5BTUVfV0UpCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVf
Q0xBU1NfTElTVCAke2NsYXNzbmFtZX0pCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRp
bmdzVW5zdGFibGVfSU5TVEFMTEVEX0hFQURFUlMgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9E
T01fQklORElOR1NfRElSfS9XZWJLaXRET00ke2NsYXNzbmFtZX0uaCkKLWVuZGZvcmVhY2ggKCkK
LQotc2V0KEdPQkpFQ1RfRE9NX0JJTkRJTkdTX0ZFQVRVUkVTX0RFRklORVMgIkxBTkdVQUdFX0dP
QkpFQ1Q9MSAke0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRPUn0iKQotc3RyaW5n
KFJFUExBQ0UgIkVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFPTEiICIiIEdPQkpFQ1RfRE9NX0JJTkRJ
TkdTX0ZFQVRVUkVTX0RFRklORVMgJHtHT0JKRUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJ
TkVTfSkKLXN0cmluZyhSRVBMQUNFIFJFR0VYICJFTkFCTEVfU1ZHW0EtWl9dKz0xIiAiIiBHT0JK
RUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJTkVTICR7R09CSkVDVF9ET01fQklORElOR1Nf
RkVBVFVSRVNfREVGSU5FU30pCi0KLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtERVJJVkVEX1NPVVJD
RVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfSkKLQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAg
IE9VVFBVVCAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtp
dGRvbWRlZmluZXMuaAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0
cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtHT2JqZWN0
RE9NQmluZGluZ3NTdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJD
T1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwgZGVm
aW5lcyA+ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0
ZG9tZGVmaW5lcy5oCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb21kZWZpbmVzLXVu
c3RhYmxlLmgKLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvZ29i
amVjdC1nZW5lcmF0ZS1oZWFkZXJzLnBsCi0gICAgQ09NTUFORCBlY2hvICR7R09iamVjdERPTUJp
bmRpbmdzVW5zdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwgZGVmaW5l
cy11bnN0YWJsZSA+ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAg
ICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJr
aXRkb20uaAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2Jq
ZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtHT2JqZWN0RE9NQmlu
ZGluZ3NTdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJ
Un0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwgZ2RvbSA+ICR7
REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0ZG9tLmgKLSkK
LQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19HT0JK
RUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5oCi0gICAgREVQRU5E
UyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVy
cy5wbAotICAgIENPTU1BTkQgZWNobyAke0dPYmplY3RET01CaW5kaW5nc1N0YWJsZV9DTEFTU19M
SVNUfSB8ICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRz
L2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbCBhdXRvY2xlYW51cHMgPiAke0RFUklWRURfU09V
UkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5oCi0p
Ci0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfR09C
SkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMtdW5zdGFibGUuaAot
ICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVy
YXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtHT2JqZWN0RE9NQmluZGluZ3NVbnN0
YWJsZV9DTEFTU19MSVNUfSB8ICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9iaW5k
aW5ncy9zY3JpcHRzL2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbCBhdXRvY2xlYW51cHMgPiAk
e0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9j
bGVhbnVwcy11bnN0YWJsZS5oCi0pCi0KLSMgU29tZSBvZiB0aGUgc3RhdGljIGhlYWRlcnMgYXJl
IGluY2x1ZGVkIGJ5IGdlbmVyYXRlZCBwdWJsaWMgaGVhZGVycyB3aXRoIGluY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01Gb28uaD4uCi0jIFdlIG5lZWQgdGhvc2UgaGVhZGVycyBpbiB0aGUgZGVy
aXZlZCBzb3VyY2VzIHRvIGJlIGluIHdlYmtpdGRvbSBkaXJlY3RvcnkuCi1zZXQoR09iamVjdERP
TUJpbmRpbmdzX1NUQVRJQ19IRUFERVJfTkFNRVMgJHtHT2JqZWN0RE9NQmluZGluZ3NfU1RBVElD
X0NMQVNTX0xJU1R9IEN1c3RvbVVuc3RhYmxlKQotZm9yZWFjaCAoY2xhc3NuYW1lICR7R09iamVj
dERPTUJpbmRpbmdzX1NUQVRJQ19IRUFERVJfTkFNRVN9KQotICAgIGFkZF9jdXN0b21fY29tbWFu
ZCgKLSAgICAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdT
X0RJUn0vV2ViS2l0RE9NJHtjbGFzc25hbWV9LmgKLSAgICAgICAgREVQRU5EUyAke1dFQkNPUkVf
RElSfS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTSR7Y2xhc3NuYW1lfS5oCi0gICAgICAgIENP
TU1BTkQgbG4gLW4gLXMgLWYgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T00ke2NsYXNzbmFtZX0uaCAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19E
SVJ9Ci0gICAgKQotICAgIGxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5nc19TVEFUSUNfR0VO
RVJBVEVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElS
fS9XZWJLaXRET00ke2NsYXNzbmFtZX0uaCkKLWVuZGZvcmVhY2ggKCkKLQotYWRkX2N1c3RvbV90
YXJnZXQoZmFrZS1nZW5lcmF0ZWQtd2Via2l0ZG9tLWhlYWRlcnMKLSAgICBERVBFTkRTICR7R09i
amVjdERPTUJpbmRpbmdzX1NUQVRJQ19HRU5FUkFURURfU09VUkNFU30KLSkKLQotc2V0KEdPYmpl
Y3RET01CaW5kaW5nc19JRExfRklMRVMgJHtHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfSURMX0ZJ
TEVTfSAke0dPYmplY3RET01CaW5kaW5nc1Vuc3RhYmxlX0lETF9GSUxFU30pCi1zZXQoQURESVRJ
T05BTF9CSU5ESU5HU19ERVBFTkRFTkNJRVMKLSAgICAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9n
b2JqZWN0L3dlYmtpdGRvbS5zeW1ib2xzCi0gICAgJHtXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEV9
Ci0gICAgJHtXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRX0KLSAgICAke0RFRElD
QVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfQotKQotR0VORVJBVEVfQklO
RElOR1MoR09iamVjdERPTUJpbmRpbmdzX1NPVVJDRVMKLSAgICAiJHtHT2JqZWN0RE9NQmluZGlu
Z3NfSURMX0ZJTEVTfSIKLSAgICAiJHtXRUJDT1JFX0RJUn0iCi0gICAgIiR7SURMX0lOQ0xVREVT
fSIKLSAgICAiJHtHT0JKRUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJTkVTfSIKLSAgICAk
e0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9Ci0gICAgV2ViS2l0RE9N
IEdPYmplY3QgY3BwCi0gICAgJHtJRExfQVRUUklCVVRFU19GSUxFfQotICAgICR7U1VQUExFTUVO
VEFMX0RFUEVOREVOQ1lfRklMRX0KLSAgICAke0FERElUSU9OQUxfQklORElOR1NfREVQRU5ERU5D
SUVTfSkKLQogYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQotYWRkX2RlZmluaXRp
b25zKC1EV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJKQotCi1hZGRfbGlicmFyeShHT2JqZWN0
RE9NQmluZGluZ3MgU1RBVElDICR7R09iamVjdERPTUJpbmRpbmdzX1NPVVJDRVN9KQotCi1XRUJL
SVRfU0VUX0VYVFJBX0NPTVBJTEVSX0ZMQUdTKEdPYmplY3RET01CaW5kaW5ncykKLQotYWRkX2Rl
cGVuZGVuY2llcyhHT2JqZWN0RE9NQmluZGluZ3MKLSAgICBXZWJDb3JlCi0gICAgZmFrZS1nZW5l
cmF0ZWQtd2Via2l0ZG9tLWhlYWRlcnMKLSkKLQotZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9E
SVJ9L2d0a2RvYy13ZWJraXRkb20uY2ZnCi0gICAgIlt3ZWJraXRkb21ndGstJHtXRUJLSVRHVEtf
QVBJX1ZFUlNJT059XVxuIgotICAgICJwa2djb25maWdfZmlsZT0ke1dlYktpdDJfUEtHQ09ORklH
X0ZJTEV9XG4iCi0gICAgIm5hbWVzcGFjZT13ZWJraXRfZG9tXG4iCi0gICAgImNmbGFncz0tSSR7
Q01BS0VfU09VUkNFX0RJUn0vU291cmNlXG4iCi0gICAgIiAgICAgICAtSSR7V0VCQ09SRV9ESVJ9
L2JpbmRpbmdzXG4iCi0gICAgIiAgICAgICAtSSR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmpl
Y3RcbiIKLSAgICAiICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElO
R1NfRElSfVxuIgotICAgICJkb2NfZGlyPSR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJ
TkRJTkdTX0RJUn0vZG9jc1xuIgotICAgICJzb3VyY2VfZGlycz0ke0RFUklWRURfU09VUkNFU19H
T0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9XG4iCi0gICAgIiAgICAgICAgICAgICR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL2dvYmplY3RcbiIKLSAgICAiaGVhZGVycz0ke0dPYmplY3RET01CaW5kaW5n
c1N0YWJsZV9JTlNUQUxMRURfSEVBREVSU31cbiIKLSAgICAibWFpbl9zZ21sX2ZpbGU9d2Via2l0
ZG9tZ3RrLWRvY3Muc2dtbFxuIgotKQotCi1pbnN0YWxsKEZJTEVTICR7R09iamVjdERPTUJpbmRp
bmdzU3RhYmxlX0lOU1RBTExFRF9IRUFERVJTfQotICAgICAgICBERVNUSU5BVElPTiAiJHtXRUJL
SVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJraXRkb20iCi0pCi0KLSMgTWFrZSB1bnN0YWJs
ZSBoZWFkZXIgb3B0aW9uYWwgaWYgdGhleSBkb24ndCBleGlzdAotaW5zdGFsbChGSUxFUyAke0dP
YmplY3RET01CaW5kaW5nc1Vuc3RhYmxlX0lOU1RBTExFRF9IRUFERVJTfQotICAgICAgICBERVNU
SU5BVElPTiAiJHtXRUJLSVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJraXRkb20iCi0gICAg
ICAgIE9QVElPTkFMCi0pCi0KLSMgU29tZSBpbnN0YWxsZWQgaGVhZGVycyBhcmUgbm90IG9uIHRo
ZSBsaXN0IG9mIGhlYWRlcnMgdXNlZCBmb3IgZ2lyIGdlbmVyYXRpb24uCi1zZXQoR09iamVjdERP
TUJpbmRpbmdzX0dJUl9IRUFERVJTICR7R09iamVjdERPTUJpbmRpbmdzU3RhYmxlX0lOU1RBTExF
RF9IRUFERVJTfSkKLWxpc3QoUkVNT1ZFX0lURU0gR09iamVjdERPTUJpbmRpbmdzX0dJUl9IRUFE
RVJTCi0gICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAotICAgICBi
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuaAotICAgICBiaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTU9iamVjdC5oCi0gICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBh
dGhOU1Jlc29sdmVyLmgKLSkKLQotIyBQcm9wYWdhdGUgdGhpcyB2YXJpYWJsZSB0byB0aGUgcGFy
ZW50IHNjb3BlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIG90aGVyIHBhcnRzIG9mIHRoZSBi
dWlsZC4KLXNldChHT2JqZWN0RE9NQmluZGluZ3NfR0lSX0hFQURFUlMgJHtHT2JqZWN0RE9NQmlu
ZGluZ3NfR0lSX0hFQURFUlN9IFBBUkVOVF9TQ09QRSkKIAogaWYgKEVOQUJMRV9TTU9PVEhfU0NS
T0xMSU5HKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9uLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbi5pZGwKaW5kZXggZGRlMTQ0Yy4uNjlkNmJi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9u
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb24uaWRs
CkBAIC0yOSw4ICsyOSw2IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX0FOSU1BVElPTlMKIF0g
cGFydGlhbCBpbnRlcmZhY2UgRG9jdW1lbnQgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JK
RUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKSAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIEdP
YmplY3QgYmluZGluZyBnZW5lcmF0b3IuCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50
VGltZWxpbmUgdGltZWxpbmU7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRp
b25zKCk7Ci0jZW5kaWYKLX07IAorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiZmRmYTNlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSwzICsw
LDAgQEAKLWdib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9pc19lZGl0
ZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9pc19lZGl0ZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCopCi1n
Ym9vbGVhbiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X21lc3NhZ2VfaGFuZGxlcnNfcG9z
dF9tZXNzYWdlKFdlYktpdERPTURPTVdpbmRvdyosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIq
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01E
ZXByZWNhdGVkLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTURlcHJlY2F0ZWQuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI1
Y2RhZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTURlcHJlY2F0ZWQuc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLXZv
aWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwoV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKQotZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF9vdXRlcl9odG1sKFdlYktpdERPTUhUTUxFbGVtZW50KikKLWdjaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfaHRtbChXZWJLaXRET01IVE1MRWxlbWVudCop
Ci12b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9vdXRlcl9odG1sKFdlYktpdERPTUhU
TUxFbGVtZW50KiwgY29uc3QgZ2NoYXIqLCBHRXJyb3IqKikKLVdlYktpdERPTUhUTUxDb2xsZWN0
aW9uKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfY2hpbGRyZW4oV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqKQotV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRzX2J5X2NsYXNzX25hbWUoV2ViS2l0RE9NRG9jdW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJL
aXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25h
bWUoV2ViS2l0RE9NRG9jdW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCog
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfbnMoV2ViS2l0RE9N
RG9jdW1lbnQqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKikKLVdlYktpdERPTU5vZGVMaXN0
KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKFdlYktpdERPTUVs
ZW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9ucyhXZWJLaXRET01FbGVtZW50KiwgY29uc3Qg
Z2NoYXIqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKFdlYktpdERPTUVsZW1lbnQqLCBjb25zdCBn
Y2hhciopCi1HVHlwZSB3ZWJraXRfZG9tX2VudGl0eV9yZWZlcmVuY2VfZ2V0X3R5cGUodm9pZCkK
LWdib29sZWFuIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X2V4cGFuZF9lbnRpdHlfcmVmZXJl
bmNlcyhXZWJLaXRET01UcmVlV2Fsa2VyKikKLVdlYktpdERPTUVudGl0eVJlZmVyZW5jZSogd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZShXZWJLaXRET01Eb2N1bWVu
dCosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX25vZGVfaXRl
cmF0b3JfZ2V0X2V4cGFuZF9lbnRpdHlfcmVmZXJlbmNlcyhXZWJLaXRET01Ob2RlSXRlcmF0b3Iq
KQotR1R5cGUgd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X2dldF90eXBlKHZvaWQp
Ci1nY2hhciogd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X2dldF9jb2xvcihXZWJL
aXRET01IVE1MQmFzZUZvbnRFbGVtZW50KikKLWdjaGFyKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9m
b250X2VsZW1lbnRfZ2V0X2ZhY2UoV2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudCopCi1nbG9u
ZyB3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRN
TEJhc2VGb250RWxlbWVudCopCi12b2lkIHdlYmtpdF9kb21faHRtbF9iYXNlX2ZvbnRfZWxlbWVu
dF9zZXRfY29sb3IoV2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudCosIGNvbnN0IGdjaGFyKikK
LXZvaWQgd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X3NldF9mYWNlKFdlYktpdERP
TUhUTUxCYXNlRm9udEVsZW1lbnQqLCBjb25zdCBnY2hhciopCi12b2lkIHdlYmtpdF9kb21faHRt
bF9iYXNlX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MQmFzZUZvbnRFbGVtZW50
KiwgZ2xvbmcpCi1XZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZShXZWJL
aXRET01Ob2RlKiwgZ2Jvb2xlYW4pCi1nY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVm
YXVsdF9jaGFyc2V0KFdlYktpdERPTURvY3VtZW50KikKLVdlYktpdERPTVRleHQqIHdlYmtpdF9k
b21fdGV4dF9yZXBsYWNlX3dob2xlX3RleHQoV2ViS2l0RE9NVGV4dCosIGNvbnN0IGdjaGFyKiwg
R0Vycm9yKiopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2Fw
dHVyZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KikKLXZvaWQgd2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50X3NldF9kZXNpZ25fbW9kZShXZWJLaXRET01IVE1MRG9jdW1lbnQqLCBjb25zdCBnY2hh
ciopCi1nY2hhciogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9kZXNpZ25fbW9kZShXZWJL
aXRET01IVE1MRG9jdW1lbnQqKQotZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRf
Y29tcGF0X21vZGUoV2ViS2l0RE9NSFRNTERvY3VtZW50KikKLVdlYktpdERPTUhUTUxDb2xsZWN0
aW9uKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3NjcmlwdHMoV2ViS2l0RE9NSFRNTERv
Y3VtZW50KikKLVdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1l
bnRfZ2V0X2VtYmVkcyhXZWJLaXRET01IVE1MRG9jdW1lbnQqKQotV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24qIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfcGx1Z2lucyhXZWJLaXRET01IVE1M
RG9jdW1lbnQqKQotZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9nZXRfbmFtZXNwYWNlX3VyaShXZWJL
aXRET01Ob2RlKikKLWdjaGFyKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZWZpeChXZWJLaXRET01O
b2RlKikKLXZvaWQgd2Via2l0X2RvbV9ub2RlX3NldF9wcmVmaXgoV2ViS2l0RE9NTm9kZSosIGNv
bnN0IGdjaGFyKiwgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV9ub2RlX2dldF9sb2NhbF9u
YW1lKFdlYktpdERPTU5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3YzU3NTU4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuc3ltYm9scworKysgL2Rldi9udWxs
CkBAIC0xLDYgKzAsMCBAQAotR1R5cGUgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZ2V0X3R5cGUo
dm9pZCkKLXZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqLCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqKQotZ2Jvb2xl
YW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqLCBHQ2FsbGJhY2ssIGdib29sZWFuLCBncG9p
bnRlcikKLWdib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNoYXIqLCBHQ2FsbGJhY2ssIGdib29s
ZWFuKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVy
X3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNoYXIqLCBHQ2xvc3Vy
ZSosIGdib29sZWFuKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNo
YXIqLCBHQ2xvc3VyZSosIGdib29sZWFuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9scwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkZDNmNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9scworKysgL2Rldi9u
dWxsCkBAIC0xLDE4ICswLDAgQEAKLUdUeXBlIHdlYmtpdF9kb21fbm9kZV9maWx0ZXJfZ2V0X3R5
cGUodm9pZCkKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfQUNDRVBUCi1XRUJLSVRfRE9NX05PREVf
RklMVEVSX1JFSkVDVAotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FMTAotV0VCS0lUX0RP
TV9OT0RFX0ZJTFRFUl9TSE9XX0FUVFJJQlVURQotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9X
X0NEQVRBX1NFQ1RJT04KLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19DT01NRU5UCi1XRUJL
SVRfRE9NX05PREVfRklMVEVSX1NIT1dfRE9DVU1FTlQKLVdFQktJVF9ET01fTk9ERV9GSUxURVJf
U0hPV19ET0NVTUVOVF9GUkFHTUVOVAotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0RPQ1VN
RU5UX1RZUEUKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19FTEVNRU5UCi1XRUJLSVRfRE9N
X05PREVfRklMVEVSX1NIT1dfRU5USVRZCi1XRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRU5U
SVRZX1JFRkVSRU5DRQotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX05PVEFUSU9OCi1XRUJL
SVRfRE9NX05PREVfRklMVEVSX1NIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTgotV0VCS0lUX0RP
TV9OT0RFX0ZJTFRFUl9TSE9XX1RFWFQKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0tJUAotZ3No
b3J0IHdlYmtpdF9kb21fbm9kZV9maWx0ZXJfYWNjZXB0X25vZGUoV2ViS2l0RE9NTm9kZUZpbHRl
ciosIFdlYktpdERPTU5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01PYmplY3Quc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJmNDZkMjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01PYmplY3Quc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUdUeXBlIHdlYmtpdF9kb21fb2JqZWN0X2dldF90eXBlKHZvaWQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5zeW1i
b2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXIuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYzNTBjZi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRo
TlNSZXNvbHZlci5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1HVHlwZSB3
ZWJraXRfZG9tX3hwYXRoX25zX3Jlc29sdmVyX2dldF90eXBlKHZvaWQpCi1nY2hhciogd2Via2l0
X2RvbV94cGF0aF9uc19yZXNvbHZlcl9sb29rdXBfbmFtZXNwYWNlX3VyaShXZWJLaXRET01YUGF0
aE5TUmVzb2x2ZXIqLCBjb25zdCBnY2hhciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTJmNTg0OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyAvZGV2L251bGwKQEAgLTEs
MjAzNSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExl
aWdodG9uIDxsa2NsQGxrY2wubmV0PgotIyBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8g
PHNvdG9AZnJlZWRlc2t0b3Aub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KLSMgQ29weXJpZ2h0IChDKSAyMDA5IEFkYW0gRGluZ2xlIDxhZGFtQHlv
cmJhLm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA5IEppbSBOZWxzb24gPGppbUB5b3JiYS5vcmc+
Ci0jIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotIwotIyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0jIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgotCi1wYWNrYWdlIENvZGVHZW5lcmF0b3JHT2JqZWN0OwotCi11c2UgY29u
c3RhbnQgRmlsZU5hbWVQcmVmaXggPT4gIldlYktpdERPTSI7Ci11c2UgRmlsZTo6QmFzZW5hbWU7
Ci11c2UgRmluZEJpbjsKLQotIyBHbG9iYWwgVmFyaWFibGVzCi1teSAlaW1wbEluY2x1ZGVzID0g
KCk7Ci1teSAlaGRySW5jbHVkZXMgPSAoKTsKLQotbXkgQHN0YWJsZVN5bWJvbHMgPSAoKTsKLQot
bXkgJGRlZmluZVR5cGVNYWNybyA9ICJHX0RFRklORV9UWVBFIjsKLW15ICRkZWZpbmVUeXBlSW50
ZXJmYWNlSW1wbGVtZW50YXRpb24gPSAiKSI7Ci1teSBAdHh0RXZlbnRMaXN0ZW5lcnMgPSAoKTsK
LW15IEB0eHRJbnN0YWxsUHJvcHMgPSAoKTsKLW15IEB0eHRTZXRQcm9wcyA9ICgpOwotbXkgQHR4
dEdldFByb3BzID0gKCk7Ci0KLW15ICRjbGFzc05hbWUgPSAiIjsKLQotIyBGSVhNRTogdGhpcyBz
aG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGZ1bmN0aW9uIHRoYXQgcmVjdXJzZXMgdXAgdGhlIHRy
ZWUKLSMgdG8gZmluZCB0aGUgYWN0dWFsIGJhc2UgdHlwZS4KLW15ICViYXNlVHlwZUhhc2ggPSAo
Ik9iamVjdCIgPT4gMSwgIk5vZGUiID0+IDEsICJOb2RlTGlzdCIgPT4gMSwgIk5hbWVkTm9kZU1h
cCIgPT4gMSwgIkRPTUltcGxlbWVudGF0aW9uIiA9PiAxLAotICAgICAgICAgICAgICAgICAgICAi
RXZlbnQiID0+IDEsICJDU1NSdWxlIiA9PiAxLCAiQ1NTVmFsdWUiID0+IDEsICJTdHlsZVNoZWV0
IiA9PiAxLCAiTWVkaWFMaXN0IiA9PiAxLAotICAgICAgICAgICAgICAgICAgICAiQ291bnRlciIg
PT4gMSwgIlJlY3QiID0+IDEsICJSR0JDb2xvciIgPT4gMSwgIlhQYXRoRXhwcmVzc2lvbiIgPT4g
MSwgIlhQYXRoUmVzdWx0IiA9PiAxLAotICAgICAgICAgICAgICAgICAgICAiTm9kZUl0ZXJhdG9y
IiA9PiAxLCAiVHJlZVdhbGtlciIgPT4gMSwgIkJsb2IiID0+IDEsICJET01Ub2tlbkxpc3QiID0+
IDEsCi0gICAgICAgICAgICAgICAgICAgICJIVE1MQ29sbGVjdGlvbiIgPT4gMSwgIlRleHRUcmFj
a0N1ZSIgPT4gMSwgIkFuaW1hdGlvblRpbWVsaW5lIiA9PiAxLCAiQW5pbWF0aW9uRWZmZWN0IiA9
PiAxKTsKLQotIyBPbmx5IG9iamVjdHMgZGVyaXZlZCBmcm9tIE5vZGUgYXJlIHJlbGVhc2VkIGJ5
IHRoZSBET00gb2JqZWN0IGNhY2hlIGFuZCBjYW4gYmUKLSMgdHJhbnNmZXIgbm9uZS4gSWRlYWxs
eSB3ZSBjb3VsZCB1c2UgR2V0QmFzZUNsYXNzIHdpdGggdGhlIHBhcmVudCB0eXBlIHRvIGNoZWNr
Ci0jIHdoZXRoZXIgaXQncyBOb2RlLCBidXQgdW5mb3J0dW5hdGVseSB3ZSBvbmx5IGhhdmUgdGhl
IG5hbWUgb2YgdGhlIHJldHVybiB0eXBlLAotIyBhbmQgd2UgY2FuJ3Qga25vdyBpdHMgcGFyZW50
IGJhc2UgY2xhc3MuIFNpbmNlIHRoZXJlIGFyZSBmZXdlciBjbGFzc2VzIGluIHRoZQotIyBBUEkg
dGhhdCBhcmUgbm90IGRlcml2ZWQgZnJvbSBOb2RlLCB3ZSB3aWxsIGxpc3QgdGhlbSBoZXJlIHRv
IGRlY2lkZSB0aGUKLSMgdHJhbnNmZXIgdHlwZS4KLW15ICV0cmFuc2ZlckZ1bGxUeXBlSGFzaCA9
ICgiQXVkaW9UcmFjayIgPT4gMSwgIkF1ZGlvVHJhY2tMaXN0IiA9PiAxLCAiQmFyUHJvcCIgPT4g
MSwgIkJhdHRlcnlNYW5hZ2VyIiA9PiAxLAotICAgICJDU1NSdWxlTGlzdCIgPT4gMSwgIkNTU1N0
eWxlRGVjbGFyYXRpb24iID0+IDEsICJDU1NTdHlsZVNoZWV0IiA9PiAxLCAiRG9jdW1lbnRUaW1l
bGluZSIgPT4gMSwKLSAgICAiRE9NQXBwbGljYXRpb25DYWNoZSIgPT4gMSwgIkRPTU1pbWVUeXBl
IiA9PiAxLCAiRE9NTWltZVR5cGVBcnJheSIgPT4gMSwgIkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24i
ID0+IDEsCi0gICAgIkRPTVBsdWdpbiIgPT4gMSwgIkRPTVBsdWdpbkFycmF5IiA9PiAxLAotICAg
ICJET01TZWxlY3Rpb24iID0+IDEsICJET01TZXR0YWJsZVRva2VuTGlzdCIgPT4gMSwgIkRPTVN0
cmluZ0xpc3QiID0+IDEsCi0gICAgIkRPTVdpbmRvdyIgPT4gMSwgIkRPTVdpbmRvd0NTUyIgPT4g
MSwgIkV2ZW50VGFyZ2V0IiA9PiAxLAotICAgICJGaWxlIiA9PiAxLCAiRmlsZUxpc3QiID0+IDEs
ICJHYW1lcGFkIiA9PiAxLCAiR2FtZXBhZExpc3QiID0+IDEsCi0gICAgIkdlb2xvY2F0aW9uIiA9
PiAxLCAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uIiA9PiAxLCAiSGlzdG9yeSIgPT4gMSwKLSAgICAi
S2V5Ym9hcmRFdmVudCIgPT4gMSwgIktleWZyYW1lRWZmZWN0IiA9PiAxLCAiTWVkaWFFcnJvciIg
PT4gMSwgIk1lZGlhQ29udHJvbGxlciIgPT4gMSwKLSAgICAiTW91c2VFdmVudCIgPT4gMSwgIk1l
ZGlhUXVlcnlMaXN0IiA9PiAxLCAiTmF2aWdhdG9yIiA9PiAxLCAiTm9kZUZpbHRlciIgPT4gMSwK
LSAgICAiUGVyZm9ybWFuY2UiID0+IDEsICJQZXJmb3JtYW5jZUVudHJ5IiA9PiAxLCAiUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uIiA9PiAxLCAiUGVyZm9ybWFuY2VUaW1pbmciID0+IDEsCi0gICAgIlJh
bmdlIiA9PiAxLCAiU2NyZWVuIiA9PiAxLCAiU3BlZWNoU3ludGhlc2lzIiA9PiAxLCAiU3BlZWNo
U3ludGhlc2lzVm9pY2UiID0+IDEsCi0gICAgIlN0b3JhZ2UiID0+IDEsICJTdHlsZU1lZGlhIiA9
PiAxLCAiVGV4dFRyYWNrIiA9PiAxLCAiVGV4dFRyYWNrQ3VlTGlzdCIgPT4gMSwKLSAgICAiVGlt
ZVJhbmdlcyIgPT4gMSwgIlRvdWNoIiA9PiAxLCAiVUlFdmVudCIgPT4gMSwgIlVzZXJNZXNzYWdl
SGFuZGxlciIgPT4gMSwgIlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UiID0+IDEsCi0gICAg
IlZhbGlkaXR5U3RhdGUiID0+IDEsICJWaWRlb1RyYWNrIiA9PiAxLCAiV2ViS2l0TmFtZWRGbG93
IiA9PiAxLAotICAgICJXZWJLaXROYW1lc3BhY2UiID0+IDEsICJXZWJLaXRQb2ludCIgPT4gMSwg
IldoZWVsRXZlbnQiID0+IDEsICJYUGF0aE5TUmVzb2x2ZXIiID0+IDEpOwotCi0jIExpc3Qgb2Yg
ZnVuY3Rpb24gcGFyYW1ldGVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIE5VTEwKLW15ICRjYW5C
ZU51bGxQYXJhbXMgPSB7Ci0gICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0
ZV9ucycgPT4gWyduYW1lc3BhY2VVUkknXSwKLSAgICAnd2Via2l0X2RvbV9kb2N1bWVudF9jcmVh
dGVfZWxlbWVudF9ucycgPT4gWyduYW1lc3BhY2VVUkknXSwKLSAgICAnd2Via2l0X2RvbV9kb2N1
bWVudF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZScgPT4gWyduYW1lJ10sCi0gICAgJ3dlYmtpdF9k
b21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3InID0+IFsnZmlsdGVyJ10sCi0gICAgJ3dl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVfd2Fsa2VyJyA9PiBbJ2ZpbHRlciddLAotICAg
ICd3ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlJyA9PiBbJ2luUmVzdWx0JywgJ3Jlc29sdmVy
J10sCi0gICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X292ZXJyaWRlX3N0eWxlJyA9PiBbJ3Bz
ZXVkb0VsZW1lbnQnXSwKLSAgICAnd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRl
X2RvY3VtZW50JyA9PiBbJ25hbWVzcGFjZVVSSScsICdkb2N0eXBlJ10sCi0gICAgJ3dlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUnID0+IFsncHNldWRvRWxlbWVudCddLAot
ICAgICd3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ucycgPT4gWyduYW1lc3BhY2VV
UkknXSwKLSAgICAnd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUnID0+IFsncmVmQ2hpbGQn
XSwKLX07Ci0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldyB7Ci0gICAgbXkgJG9iamVj
dCA9IHNoaWZ0OwotICAgIG15ICRyZWZlcmVuY2UgPSB7IH07Ci0KLSAgICAkY29kZUdlbmVyYXRv
ciA9IHNoaWZ0OwotCi0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci19Ci0KLW15ICRs
aWNlbmNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci1FT0YKLQotc3ViIFNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlIHsKLSAgICBteSAkaW50ZXJm
YWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJGludGVyZmFjZSBlcSAiRXZlbnRUYXJnZXQiOwot
fQotCi1zdWIgR2V0UGFyZW50Q2xhc3NOYW1lIHsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7
Ci0gICAgbXkgJHBhcmVudCA9ICRpbnRlcmZhY2UtPnBhcmVudDsKLQotICAgIHJldHVybiAiV2Vi
S2l0RE9NT2JqZWN0IiB1bmxlc3MgJHBhcmVudCBhbmQgIVNob3VsZEJlRXhwb3NlZEFzSW50ZXJm
YWNlKCRwYXJlbnQpOwotICAgIHJldHVybiAiV2ViS2l0RE9NIiAuICRwYXJlbnQ7Ci19Ci0KLXN1
YiBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1lIHsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0g
ICAgbXkgJHBhcmVudCA9ICRpbnRlcmZhY2UtPnBhcmVudDsKLQotICAgIHJldHVybiAiT2JqZWN0
IiB1bmxlc3MgJHBhcmVudCBhbmQgIVNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlKCRwYXJlbnQp
OwotICAgIHJldHVybiAkcGFyZW50OwotfQotCi1zdWIgSXNCYXNlVHlwZQotewotICAgIG15ICR0
eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gMSBpZiAkYmFzZVR5cGVIYXNoeyR0eXBlfTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotc3ViIEdldEJhc2VDbGFzcwotewotICAgICRwYXJlbnQgPSBzaGlm
dDsKLSAgICAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJHBhcmVudCBpZiAkcGFy
ZW50IGVxICJPYmplY3QiIG9yIElzQmFzZVR5cGUoJHBhcmVudCk7Ci0gICAgcmV0dXJuICJPYmpl
Y3QiIGlmIFNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlKCRwYXJlbnQpOwotICAgIHJldHVybiAi
RXZlbnQiIGlmICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAi
RXZlbnQiKTsKLSAgICByZXR1cm4gIkNTU1ZhbHVlIiBpZiAkcGFyZW50IGVxICJTVkdDb2xvciIg
b3IgJHBhcmVudCBlcSAiQ1NTVmFsdWVMaXN0IjsKLSAgICByZXR1cm4gIk5vZGUiOwotfQotCi0K
LSMgRnJvbSBTdHJpbmc6OkNhbWVsQ2FzZSAwLjAxCi1zdWIgY2FtZWxpemUKLXsKLSAgICAgICAg
bXkgJHMgPSBzaGlmdDsKLSAgICAgICAgam9pbignJywgbWFweyB1Y2ZpcnN0ICRfIH0gc3BsaXQo
Lyg/PD1bQS1aYS16XSlfKD89W0EtWmEtel0pfFxiLywgJHMpKTsKLX0KLQotc3ViIGRlY2FtZWxp
emUKLXsKLSAgICAgICAgbXkgJHMgPSBzaGlmdDsKLSAgICAgICAgJHMgPX4gc3soW15hLXpBLVpd
PykoW0EtWl0qKShbQS1aXSkoW2Etel0/KX17Ci0gICAgICAgICAgICAgICAgbXkgJGZjID0gcG9z
KCRzKT09MDsKLSAgICAgICAgICAgICAgICBteSAoJHAwLCRwMSwkcDIsJHAzKSA9ICgkMSxsYyQy
LGxjJDMsJDQpOwotICAgICAgICAgICAgICAgIG15ICR0ID0gJHAwIHx8ICRmYyA/ICRwMCA6ICdf
JzsKLSAgICAgICAgICAgICAgICAkdCAuPSAkcDMgPyAkcDEgPyAiJHtwMX1fJHAyJHAzIiA6ICIk
cDIkcDMiIDogIiRwMSRwMiI7Ci0gICAgICAgICAgICAgICAgJHQ7Ci0gICAgICAgIH1nZTsKLQot
ICAgICAgICAjIFNvbWUgc3RyaW5ncyBhcmUgbm90IGNvcnJlY3RseSBkZWNhbWVsaXplZCwgYXBw
bHkgZml4IHVwcwotICAgICAgICBmb3IgKCRzKSB7Ci0gICAgICAgICAgICBzL2RvbWNzcy9kb21f
Y3NzLzsKLSAgICAgICAgICAgIHMvZG9taHRtbC9kb21faHRtbC87Ci0gICAgICAgICAgICBzL2Rv
bWRvbS9kb21fZG9tLzsKLSAgICAgICAgICAgIHMvZG9tY2RhdGEvZG9tX2NkYXRhLzsKLSAgICAg
ICAgICAgIHMvZG9tdWkvZG9tX3VpLzsKLSAgICAgICAgICAgIHMveF9wYXRoL3hwYXRoLzsKLSAg
ICAgICAgICAgIHMvd2ViX2tpdC93ZWJraXQvOwotICAgICAgICAgICAgcy9odG1saV9mcmFtZS9o
dG1sX2lmcmFtZS87Ci0gICAgICAgICAgICBzL2h0bWxici9odG1sX2JyLzsKLSAgICAgICAgICAg
IHMvaHRtbGxpL2h0bWxfbGkvOwotICAgICAgICAgICAgcy9odG1saHIvaHRtbF9oci87Ci0gICAg
ICAgICAgICBzL2h0bWxkL2h0bWxfZC87Ci0gICAgICAgICAgICBzL2h0bWxvL2h0bWxfby87Ci0g
ICAgICAgICAgICBzL2h0bWx1L2h0bWxfdS87Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICRz
OwotfQotCi1zdWIgSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsIHsKLSAgICBteSBAY29uZGl0aW9u
YWwgPSBzcGxpdCgnXycsIHNoaWZ0KTsKLSAgICBteSBAdXBwZXJDYXNlRXhjZXB0aW9ucyA9ICgi
U1FMIiwgIkFQSSIpOwotICAgIG15IEBodW1hblJlYWRhYmxlOwotCi0gICAgZm9yICRwYXJ0IChA
Y29uZGl0aW9uYWwpIHsKLSAgICAgICAgaWYgKCFncmVwIHskXyBlcSAkcGFydH0gQHVwcGVyQ2Fz
ZUV4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgICRwYXJ0ID0gY2FtZWxpemUobGMoJHBhcnQpKTsK
LSAgICAgICAgfQotICAgICAgICBwdXNoKEBodW1hblJlYWRhYmxlLCAkcGFydCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGpvaW4oJyAnLCBAaHVtYW5SZWFkYWJsZSk7Ci19Ci0KLXN1YiBHZXRQYXJl
bnRHT2JqVHlwZSB7Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRwYXJlbnQg
PSAkaW50ZXJmYWNlLT5wYXJlbnQ7Ci0KLSAgICByZXR1cm4gIldFQktJVF9ET01fVFlQRV9PQkpF
Q1QiIHVubGVzcyAkcGFyZW50IGFuZCAhU2hvdWxkQmVFeHBvc2VkQXNJbnRlcmZhY2UoJHBhcmVu
dCk7Ci0gICAgcmV0dXJuICJXRUJLSVRfRE9NX1RZUEVfIiAuIHVjKGRlY2FtZWxpemUoKCRwYXJl
bnQpKSk7Ci19Ci0KLXN1YiBHZXRDbGFzc05hbWUgewotICAgIG15ICRuYW1lID0gc2hpZnQ7Ci0K
LSAgICByZXR1cm4gIldlYktpdERPTSRuYW1lIjsKLX0KLQotc3ViIFNraXBBdHRyaWJ1dGUgewot
ICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKLQotICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifQotICAgICAgICB8fCAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifSkgewotICAg
ICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBteSAkcHJvcFR5cGUgPSAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGU7Ci0gICAgaWYgKCRwcm9wVHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMSBpZiAkYXR0cmlidXRlLT5p
c1N0YXRpYzsKLSAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlw
ZSgkcHJvcFR5cGUpOwotICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNl
T3JGcm96ZW5BcnJheVR5cGUoJHByb3BUeXBlKTsKLQotICAgIGlmICgkY29kZUdlbmVyYXRvci0+
SXNFbnVtVHlwZSgkcHJvcFR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAg
ICMgVGhpcyBpcyBmb3IgRE9NV2luZG93LmlkbCBsb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICBpZiAo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICJsb2NhdGlvbiIpIHsKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgfQotCi0gICAgIyBUaGlzIGlzIGZvciBIVE1MSW5wdXQuaWRsIHZhbHVlQXNE
YXRlCi0gICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSBlcSAidmFsdWVBc0RhdGUi
KSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICMgVGhpcyBpcyBmb3IgRE9NV2lu
ZG93LmlkbCBDcnlwdG8gYXR0cmlidXRlCi0gICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZSBlcSAiQ3J5cHRvIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50SGFuZGxlciI7Ci0K
LSAgICByZXR1cm4gMSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIlN5bWJvbCI7
Ci0KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAjIFNraXAgaW5k
ZXhlZCBkYXRhYmFzZSBhdHRyaWJ1dGVzIGZvciBub3csIHRoZXkgYXJlbid0IHlldCBzdXBwb3J0
ZWQgZm9yIHRoZSBHT2JqZWN0IGdlbmVyYXRvci4KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5uYW1lID1+IC9eKD86d2Via2l0KT9bSWldbmRleGVkREIvIG9yICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+bmFtZSA9fiAvXig/OndlYmtpdCk/SURCLykgewotICAgICAgICByZXR1cm4gMTsK
LSAgICB9Ci0KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNCdWlsdGluIn0pIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN1YiBTa2lwRnVuY3Rpb24gewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsK
LSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAgICBteSAkcGFyZW50Tm9kZSA9IHNoaWZ0Owot
ICAgIG15ICRkZWNhbWVsaXplID0gc2hpZnQ7Ci0gICAgbXkgJHByZWZpeCA9IHNoaWZ0OwotCi0g
ICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICJ3ZWJraXRfZG9tXyIgLiAkZGVjYW1lbGl6ZSAuICJfIiAu
ICRwcmVmaXggLiBkZWNhbWVsaXplKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLSAgICBt
eSAkZnVuY3Rpb25SZXR1cm5UeXBlID0gJHByZWZpeCBlcSAic2V0XyIgPyAidm9pZCIgOiAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+dHlwZTsKLSAgICBteSAkaXNDdXN0b21GdW5jdGlvbiA9ICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn07Ci0gICAgbXkg
JGNhbGxXaXRoID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
YWxsV2l0aCJ9OwotICAgIG15ICRpc1Vuc3VwcG9ydGVkQ2FsbFdpdGggPSAkY29kZUdlbmVyYXRv
ci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJTY3JpcHRBcmd1bWVudHMi
KSB8fCAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgs
ICJDYWxsU3RhY2siKSB8fCAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlu
cygkY2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpIHx8ICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0
dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIpOwotCi0gICAgIyBTdGF0
aWMgbWV0aG9kcyBhcmUgdW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMSBpZiAkZnVuY3Rpb24tPmlz
U3RhdGljOwotCi0gICAgaWYgKCgkaXNDdXN0b21GdW5jdGlvbiB8fCAkaXNVbnN1cHBvcnRlZENh
bGxXaXRoKSAmJgotICAgICAgICAkZnVuY3Rpb25OYW1lIG5lICJ3ZWJraXRfZG9tX25vZGVfcmVw
bGFjZV9jaGlsZCIgJiYKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSBuZSAid2Via2l0X2RvbV9ub2Rl
X2luc2VydF9iZWZvcmUiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUgIndlYmtpdF9kb21f
bm9kZV9yZW1vdmVfY2hpbGQiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUgIndlYmtpdF9k
b21fbm9kZV9hcHBlbmRfY2hpbGQiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUgIndlYmtp
dF9kb21faHRtbF9jb2xsZWN0aW9uX2l0ZW0iICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUg
IndlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX25hbWVkX2l0ZW0iKSB7Ci0gICAgICAgIHJldHVy
biAxOwotICAgIH0KLQotICAgICMgU2tpcCBmdW5jdGlvbnMgdGhhdCBoYXZlIGNhbGxiYWNrIHBh
cmFtZXRlcnMsIGJlY2F1c2UgdGhpcyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IGtub3cKLSAgICAj
IGhvdyB0byBhdXRvLWdlbmVyYXRlIGNhbGxiYWNrcy4gIFNraXAgZnVuY3Rpb25zIHRoYXQgaGF2
ZSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIgb3IKLSAgICAjIHNlcXVlbmNlPFQ+IHBhcmFtZXRl
cnMsIGJlY2F1c2UgdGhpcyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IGtub3cgaG93IHRvIGF1dG8t
Z2VuZXJhdGUKLSAgICAjIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgb3Igc2VxdWVuY2U8VD4uIFNr
aXAgRXZlbnRMaXN0ZW5lcnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIGVsc2V3aGVyZS4KLSAg
ICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Ci0gICAgICAg
IHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0Z1bmN0aW9uT25seUNhbGxiYWNrSW50ZXJm
YWNlKCRwYXJhbS0+dHlwZSk7Ci0gICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNsYW1wIn07Ci0gICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+dHlwZSBl
cSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciI7Ci0gICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+
dHlwZSBlcSAiRXZlbnRMaXN0ZW5lciI7Ci0gICAgICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJh
dG9yLT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHBhcmFtLT50eXBlKTsKLSAgICB9Ci0K
LSAgICAjIFRoaXMgaXMgZm9yIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmlkbCBhZGQoRmlsZSkgbWV0
aG9kCi0gICAgaWYgKCRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZGF0YV90cmFuc2Zlcl9p
dGVtX2xpc3RfYWRkIiAmJiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gPT0gMSkgewotICAgICAg
ICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAjIFNraXAgQ29uc29sZTo6cHJvZmlsZSgpIGFuZCBD
b25zb2xlOjpwcm9maWxlRW5kKCkgYXMgdGhleSdyZSBub3QgY29ycmVjdGx5IGdlbmVyYXRlZCBm
b3IgdGhlIG1vbWVudC4KLSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9jb25z
b2xlX3Byb2ZpbGUiIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fY29uc29sZV9wcm9m
aWxlX2VuZCIpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSkgewot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWUgZXEgInNldCIgYW5kICRwYXJlbnROb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlw
ZWRBcnJheSJ9KSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkb2JqZWN0
IGVxICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgImdldFNWR0RvY3VtZW50
IikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWUgZXEgImdldENTU0NhbnZhc0NvbnRleHQiKSB7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIH0KLQotICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAic2V0UmFu
Z2VUZXh0IiAmJiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gPT0gMSkgewotICAgICAgICByZXR1
cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgInRp
bWVFbmQiKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCRmdW5jdGlvblJldHVyblR5cGUpKSB7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+bmFtZSBlcSAic3VwcG9ydHMiICYmIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSA9PSAxKSB7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJldHVybiAxIGlmICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT50eXBlIGVxICJQcm9taXNlIjsKLQotICAgIHJldHVybiAxIGlmICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT50eXBlIGVxICJTeW1ib2wiOwotCi0gICAgcmV0dXJuIDEgaWYgJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgIkRhdGUiOwotCi0gICAgcmV0dXJuIDEgaWYgJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW4ifTsKLQotICAg
IHJldHVybiAxIGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
UHJpdmF0ZUlkZW50aWZpZXIifSBhbmQgbm90ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiUHVibGljSWRlbnRpZmllciJ9OwotICAgIHJldHVybiAwOwotfQotCi0j
IE5hbWUgdHlwZSB1c2VkIGluIHRoZSBnX3ZhbHVlX3tzZXQsZ2V0fV8qIGZ1bmN0aW9ucwotc3Vi
IEdldEdWYWx1ZVR5cGVOYW1lIHsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotCi0gICAgbXkgJXR5
cGVzID0gKCJET01TdHJpbmciLCAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgIlVTVlN0cmlu
ZyIsICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAiRE9NVGltZVN0YW1wIiwgInVpbnQiLAot
ICAgICAgICAgICAgICAgICAiZmxvYXQiLCAiZmxvYXQiLAotICAgICAgICAgICAgICAgICAidW5y
ZXN0cmljdGVkIGZsb2F0IiwgImZsb2F0IiwKLSAgICAgICAgICAgICAgICAgImRvdWJsZSIsICJk
b3VibGUiLAotICAgICAgICAgICAgICAgICAidW5yZXN0cmljdGVkIGRvdWJsZSIsICJkb3VibGUi
LAotICAgICAgICAgICAgICAgICAiYm9vbGVhbiIsICJib29sZWFuIiwKLSAgICAgICAgICAgICAg
ICAgImNoYXIiLCAiY2hhciIsCi0gICAgICAgICAgICAgICAgICJsb25nIiwgImxvbmciLAotICAg
ICAgICAgICAgICAgICAibG9uZyBsb25nIiwgImludDY0IiwKLSAgICAgICAgICAgICAgICAgImJ5
dGUiLCAiaW50OCIsCi0gICAgICAgICAgICAgICAgICJvY3RldCIsICJ1aW50OCIsCi0gICAgICAg
ICAgICAgICAgICJzaG9ydCIsICJpbnQiLAotICAgICAgICAgICAgICAgICAidWNoYXIiLCAidWNo
YXIiLAotICAgICAgICAgICAgICAgICAidW5zaWduZWQiLCAidWludCIsCi0gICAgICAgICAgICAg
ICAgICJpbnQiLCAiaW50IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGludCIsICJ1aW50
IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIsICJ1aW50NjQiLCAKLSAg
ICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmciLCAidWxvbmciLAotICAgICAgICAgICAgICAg
ICAidW5zaWduZWQgc2hvcnQiLCAidWludCIpOwotCi0gICAgcmV0dXJuICR0eXBlc3skdHlwZX0g
PyAkdHlwZXN7JHR5cGV9IDogIm9iamVjdCI7Ci19Ci0KLSMgTmFtZSB0eXBlIHVzZWQgaW4gQyBk
ZWNsYXJhdGlvbnMKLXN1YiBHZXRHbGliVHlwZU5hbWUgewotICAgIG15ICR0eXBlID0gc2hpZnQ7
Ci0gICAgbXkgJG5hbWUgPSBHZXRDbGFzc05hbWUoJHR5cGUpOwotCi0gICAgbXkgJXR5cGVzID0g
KCJET01TdHJpbmciLCAiZ2NoYXIqIiwKLSAgICAgICAgICAgICAgICAgIlVTVlN0cmluZyIsICJn
Y2hhcioiLAotICAgICAgICAgICAgICAgICAiRE9NVGltZVN0YW1wIiwgImd1aW50MzIiLAotICAg
ICAgICAgICAgICAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiwgImdjaGFyKiIsCi0gICAgICAg
ICAgICAgICAgICJmbG9hdCIsICJnZmxvYXQiLAotICAgICAgICAgICAgICAgICAidW5yZXN0cmlj
dGVkIGZsb2F0IiwgImdmbG9hdCIsCi0gICAgICAgICAgICAgICAgICJkb3VibGUiLCAiZ2RvdWJs
ZSIsCi0gICAgICAgICAgICAgICAgICJ1bnJlc3RyaWN0ZWQgZG91YmxlIiwgImdkb3VibGUiLAot
ICAgICAgICAgICAgICAgICAiYm9vbGVhbiIsICJnYm9vbGVhbiIsCi0gICAgICAgICAgICAgICAg
ICJjaGFyIiwgImdjaGFyIiwKLSAgICAgICAgICAgICAgICAgImxvbmciLCAiZ2xvbmciLAotICAg
ICAgICAgICAgICAgICAibG9uZyBsb25nIiwgImdpbnQ2NCIsCi0gICAgICAgICAgICAgICAgICJi
eXRlIiwgImdpbnQ4IiwKLSAgICAgICAgICAgICAgICAgIm9jdGV0IiwgImd1aW50OCIsCi0gICAg
ICAgICAgICAgICAgICJzaG9ydCIsICJnc2hvcnQiLAotICAgICAgICAgICAgICAgICAidWNoYXIi
LCAiZ3VjaGFyIiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIiwgImd1aW50IiwKLSAgICAg
ICAgICAgICAgICAgImludCIsICJnaW50IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGlu
dCIsICJndWludCIsCi0gICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBsb25nIiwgImd1bG9uZyIs
Ci0gICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBsb25nIGxvbmciLCAiZ3VpbnQ2NCIsCi0gICAg
ICAgICAgICAgICAgICJ1bnNpZ25lZCBzaG9ydCIsICJndXNob3J0IiwKLSAgICAgICAgICAgICAg
ICAgInZvaWQiLCAidm9pZCIpOwotCi0gICAgcmV0dXJuICR0eXBlc3skdHlwZX0gPyAkdHlwZXN7
JHR5cGV9IDogIiRuYW1lKiI7Ci19Ci0KLXN1YiBJc0dET01DbGFzc1R5cGUgewotICAgIG15ICR0
eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gMCBpZiAkY29kZUdlbmVyYXRvci0+SXNOb25Qb2lu
dGVyVHlwZSgkdHlwZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkgfHwg
JHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN1
YiBJc1Byb3BlcnR5UmVhZGFibGUgewotICAgIG15ICRwcm9wZXJ0eSA9IHNoaWZ0OwotICAgIHJl
dHVybiAhU2tpcEF0dHJpYnV0ZSgkcHJvcGVydHkpOwotfQotCi1zdWIgSXNQcm9wZXJ0eVdyaXRl
YWJsZSB7Ci0gICAgbXkgJHByb3BlcnR5ID0gc2hpZnQ7Ci0KLSAgICBpZiAoIUlzUHJvcGVydHlS
ZWFkYWJsZSgkcHJvcGVydHkpKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlm
ICgkcHJvcGVydHktPmlzUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgbXkgJGd0eXBlID0gR2V0R1ZhbHVlVHlwZU5hbWUoJHByb3BlcnR5LT5zaWduYXR1cmUtPnR5
cGUpOwotICAgIG15ICRoYXNHdHlwZVNpZ25hdHVyZSA9ICRndHlwZSBlcSAiYm9vbGVhbiIgfHwg
JGd0eXBlIGVxICJmbG9hdCIgfHwgJGd0eXBlIGVxICJkb3VibGUiIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJGd0eXBlIGVxICJpbnQ2NCIgfHwgJGd0eXBlIGVxICJ1aW50NjQiIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGd0eXBlIGVxICJsb25nIiB8fCAkZ3R5cGUg
ZXEgInVsb25nIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRndHlwZSBlcSAiaW50
IiB8fCAkZ3R5cGUgZXEgInVpbnQiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGd0
eXBlIGVxICJzaG9ydCIgfHwgJGd0eXBlIGVxICJ1c2hvcnQiIHx8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJGd0eXBlIGVxICJpbnQ4IiB8fCAkZ3R5cGUgZXEgInVpbnQ4IiB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICRndHlwZSBlcSAiY2hhciIgfHwgJGd0eXBlIGVxICJ1
Y2hhciIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3R5cGUgZXEgInN0cmluZyI7
Ci0gICAgaWYgKCEkaGFzR3R5cGVTaWduYXR1cmUpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgIyBGSVhNRTogV2UgYXJlIG5vdCBnZW5lcmF0aW5nIHNldHRlcnMgZm9yICdSZXBs
YWNlYWJsZScgYXR0cmlidXRlcyBub3csIGJ1dCB3ZSBzaG91bGQgc29tZWhvdy4KLSAgICBpZiAo
JHByb3BlcnR5LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9
KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICgkcHJvcGVydHktPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9KSB7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAwIGlmICRwcm9wZXJ0eS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSB8fCAkcHJvcGVydHktPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlNldHRlckNhbGxXaXRoIn07Ci0KLSAgICByZXR1cm4gMTsK
LX0KLQotc3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxXYXJuaW5nCi17Ci0gICAgbXkgJG5vZGUgPSBz
aGlmdDsKLSAgICBteSAkaW5kZW50U2l6ZSA9IHNoaWZ0OwotICAgIGlmICghJGluZGVudFNpemUp
IHsKLSAgICAgICAgJGluZGVudFNpemUgPSA0OwotICAgIH0KLQotICAgIG15ICRjb25kaXRpb25h
bCA9ICRub2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKLSAgICBteSBA
d2FybjsKLQotICAgIGlmICgkY29uZGl0aW9uYWwpIHsKLSAgICAgICAgaWYgKCRjb25kaXRpb25h
bCA9fiAvJi8pIHsKLSAgICAgICAgICAgIG15IEBzcGxpdENvbmRpdGlvbmFscyA9IHNwbGl0KC8m
LywgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgICAgIGZvcmVhY2ggJGNvbmRpdGlvbiAoQHNwbGl0
Q29uZGl0aW9uYWxzKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAd2FybiwgIiNpZiAhRU5BQkxF
KCRjb25kaXRpb24pXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEB3YXJuLCAnICcgeCAkaW5k
ZW50U2l6ZSAuICJXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKFwiIiAuIEh1bWFuUmVh
ZGFibGVDb25kaXRpb25hbCgkY29uZGl0aW9uKSAuICJcIilcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQHdhcm4sICIjZW5kaWZcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2lm
ICgkY29uZGl0aW9uYWwgPX4gL1x8LykgewotICAgICAgICAgICAgZm9yZWFjaCAkY29uZGl0aW9u
IChzcGxpdCgvXHwvLCAkY29uZGl0aW9uYWwpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAd2Fy
biwgJyAnIHggJGluZGVudFNpemUgLiAiV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVChc
IiIgLiBIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwoJGNvbmRpdGlvbikgLiAiXCIpXG4iKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQHdhcm4sICcg
JyB4ICRpbmRlbnRTaXplIC4gIldFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoXCIiIC4g
SHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRjb25kaXRpb25hbCkgLiAiXCIpXG4iKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBAd2FybjsKLX0KLQotc3ViIEdlbmVyYXRlUHJvcGVy
dHkgewotICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKLSAgICBteSAkaW50ZXJmYWNlTmFtZSA9
IHNoaWZ0OwotICAgIG15IEB3cml0ZWFibGVQcm9wZXJ0aWVzID0gQHtzaGlmdCBAX307Ci0gICAg
bXkgJHBhcmVudE5vZGUgPSBzaGlmdDsKLQotICAgIG15ICRoYXNHZXR0ZXJFeGNlcHRpb24gPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZXR0ZXJSYWlzZXNF
eGNlcHRpb24ifTsKLSAgICBteSAkaGFzU2V0dGVyRXhjZXB0aW9uID0gJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU2V0dGVyUmFpc2VzRXhjZXB0aW9uIn07Ci0K
LSAgICBteSAkZGVjYW1lbGl6ZUludGVyZmFjZU5hbWUgPSBkZWNhbWVsaXplKCRpbnRlcmZhY2VO
YW1lKTsKLSAgICBteSAkcHJvcE5hbWUgPSBkZWNhbWVsaXplKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+bmFtZSk7Ci0gICAgbXkgJHByb3BGdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvblNpZ25hdHVy
ZU5hbWUoJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgIG15ICRwcm9wTmFtZUNhcHMg
PSB1YygkcHJvcE5hbWUpOwotICAgIG15ICR7cHJvcEVudW19ID0gIlBST1BfJHtwcm9wTmFtZUNh
cHN9IjsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgJHtwcm9wRW51bX0sXG4iKTsK
LQotICAgIG15ICRwcm9wVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKLSAgICBt
eSAke3Byb3BHVHlwZX0gPSBkZWNhbWVsaXplKCRwcm9wVHlwZSk7Ci0gICAgbXkgJHt1Y1Byb3BH
VHlwZX0gPSB1YygkcHJvcEdUeXBlKTsKLQotICAgIG15ICRndHlwZSA9IEdldEdWYWx1ZVR5cGVO
YW1lKCRwcm9wVHlwZSk7Ci0gICAgbXkgJGdwYXJhbWZsYWcgPSAiV0VCS0lUX1BBUkFNX1JFQURB
QkxFIjsKLSAgICBteSAkd3JpdGVhYmxlID0gSXNQcm9wZXJ0eVdyaXRlYWJsZSgkYXR0cmlidXRl
KTsKLQotICAgIG15ICRtdXRhYmxlU3RyaW5nID0gInJlYWQtb25seSI7Ci0gICAgbXkgJGhhc0N1
c3RvbVNldHRlciA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbVNldHRlciJ9OwotICAgIGlmICgkd3JpdGVhYmxlICYmICRoYXNDdXN0b21TZXR0ZXIp
IHsKLSAgICAgICAgJG11dGFibGVTdHJpbmcgPSAicmVhZC1vbmx5IChkdWUgdG8gY3VzdG9tIGZ1
bmN0aW9ucyBuZWVkZWQgaW4gd2Via2l0ZG9tKSI7Ci0gICAgfSBlbHNpZiAoJHdyaXRlYWJsZSkg
ewotICAgICAgICAkZ3BhcmFtZmxhZyA9ICJXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIjsKLSAgICAg
ICAgJG11dGFibGVTdHJpbmcgPSAicmVhZC13cml0ZSI7Ci0gICAgfQotCi0gICAgbXkgJGdldHRl
ckZ1bmN0aW9uTmFtZSA9IEdldEVmZmVjdGl2ZUZ1bmN0aW9uTmFtZSgid2Via2l0X2RvbV8ke2Rl
Y2FtZWxpemVJbnRlcmZhY2VOYW1lfV9nZXRfIiAuICRwcm9wRnVuY3Rpb25OYW1lKTsKLSAgICBp
ZiAoRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbigkZ2V0dGVyRnVuY3Rpb25OYW1lKSkg
ewotICAgICAgICAkZ2V0dGVyRnVuY3Rpb25OYW1lID0gJGdldHRlckZ1bmN0aW9uTmFtZSAuICJf
d2l0aF9lcnJvciI7Ci0gICAgfQotICAgIG15IEBnZXR0ZXJBcmd1bWVudHMgPSAoKTsKLSAgICBw
dXNoKEBnZXR0ZXJBcmd1bWVudHMsICJzZWxmIik7Ci0gICAgcHVzaChAZ2V0dGVyQXJndW1lbnRz
LCAibnVsbHB0ciIpIGlmICRoYXNHZXR0ZXJFeGNlcHRpb24gfHwgRnVuY3Rpb25Vc2VkVG9SYWlz
ZUV4Y2VwdGlvbigkZ2V0dGVyRnVuY3Rpb25OYW1lKTsKLQotICAgIGlmIChncmVwIHskXyBlcSAk
YXR0cmlidXRlfSBAd3JpdGVhYmxlUHJvcGVydGllcykgewotICAgICAgICBteSAkc2V0dGVyRnVu
Y3Rpb25OYW1lID0gR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1lKCJ3ZWJraXRfZG9tXyR7ZGVjYW1l
bGl6ZUludGVyZmFjZU5hbWV9X3NldF8iIC4gJHByb3BGdW5jdGlvbk5hbWUpOwotICAgICAgICBp
ZiAoRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbigkc2V0dGVyRnVuY3Rpb25OYW1lKSkg
ewotICAgICAgICAgICAgJHNldHRlckZ1bmN0aW9uTmFtZSA9ICRzZXR0ZXJGdW5jdGlvbk5hbWUg
LiAiX3dpdGhfZXJyb3IiOwotICAgICAgICB9Ci0gICAgICAgIG15IEBzZXR0ZXJBcmd1bWVudHMg
PSAoKTsKLSAgICAgICAgcHVzaChAc2V0dGVyQXJndW1lbnRzLCAic2VsZiwgZ192YWx1ZV9nZXRf
JGd0eXBlKHZhbHVlKSIpOwotICAgICAgICBwdXNoKEBzZXR0ZXJBcmd1bWVudHMsICJudWxscHRy
IikgaWYgJGhhc1NldHRlckV4Y2VwdGlvbiB8fCBGdW5jdGlvblVzZWRUb1JhaXNlRXhjZXB0aW9u
KCRzZXR0ZXJGdW5jdGlvbk5hbWUpOwotCi0gICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAiICAg
IGNhc2UgJHtwcm9wRW51bX06XG4iKTsKLSAgICAgICAgcHVzaChAdHh0U2V0UHJvcHMsICIgICAg
ICAgICIgLiAkc2V0dGVyRnVuY3Rpb25OYW1lIC4gIigiIC4gam9pbigiLCAiLCBAc2V0dGVyQXJn
dW1lbnRzKSAuICIpO1xuIik7Ci0gICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAiICAgICAgICBi
cmVhaztcbiIpOwotICAgIH0KLQotICAgIHB1c2goQHR4dEdldFByb3BzLCAiICAgIGNhc2UgJHtw
cm9wRW51bX06XG4iKTsKLQotICAgIG15ICRwb3N0Q29udmVydEZ1bmN0aW9uID0gIiI7Ci0gICAg
aWYgKCRndHlwZSBlcSAic3RyaW5nIikgewotICAgICAgICBwdXNoKEB0eHRHZXRQcm9wcywgIiAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgIiAuICRnZXR0ZXJGdW5jdGlvbk5hbWUg
LiAiKCIgLiBqb2luKCIsICIsIEBnZXR0ZXJBcmd1bWVudHMpIC4gIikpO1xuIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgcHVzaChAdHh0R2V0UHJvcHMsICIgICAgICAgIGdfdmFsdWVfc2V0XyRn
dHlwZSh2YWx1ZSwgIiAuICRnZXR0ZXJGdW5jdGlvbk5hbWUgLiAiKCIgLiBqb2luKCIsICIsIEBn
ZXR0ZXJBcmd1bWVudHMpIC4gIikpO1xuIik7Ci0gICAgfQotCi0gICAgcHVzaChAdHh0R2V0UHJv
cHMsICIgICAgICAgIGJyZWFrO1xuIik7Ci0KLSAgICBteSAlcGFyYW1ldGVyU3BlY09wdGlvbnMg
PSAoImludCIgPT4gICAgIFsgIkdfTUlOSU5UIiwgIkdfTUFYSU5UIiwgIjAiIF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQ4IiA9PiAgICBbICJHX01JTklOVDgiLCAiR19N
QVhJTlQ4IiwgIjAiIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib29sZWFu
IiA9PiBbICJGQUxTRSIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
IiA9PiAgIFsgIi1HX01BWEZMT0FUIiwgIkdfTUFYRkxPQVQiLCAiMCIgXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRvdWJsZSIgPT4gIFsgIi1HX01BWERPVUJMRSIsICJHX01B
WERPVUJMRSIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidWludDY0
IiA9PiAgWyAiMCIsICJHX01BWFVJTlQ2NCIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibG9uZyIgPT4gICAgWyAiR19NSU5MT05HIiwgIkdfTUFYTE9ORyIsICIwIiBd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50NjQiID0+ICAgWyAiR19NSU5J
TlQ2NCIsICJHX01BWElOVDY0IiwgIjAiIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ1bG9uZyIgPT4gICBbICIwIiwgIkdfTUFYVUxPTkciLCAiMCIgXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInVpbnQiID0+ICAgIFsgIjAiLCAiR19NQVhVSU5UIiwgIjAi
IF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1aW50OCIgPT4gICBbICIwIiwg
IkdfTUFYVUlOVDgiLCAiMCIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVz
aG9ydCIgPT4gIFsgIjAiLCAiR19NQVhVSU5UMTYiLCAiMCIgXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInVjaGFyIiA9PiAgIFsgIkdfTUlOSU5UOCIsICJHX01BWElOVDgiLCAi
MCIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXIiID0+ICAgIFsgIjAi
LCAiR19NQVhVSU5UOCIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c3RyaW5nIiA9PiAgWyAnIiInLCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
b2JqZWN0IiA9PiAgWyAiV0VCS0lUX0RPTV9UWVBFXyR7dWNQcm9wR1R5cGV9IiBdKTsKLQotICAg
IG15ICRleHRyYVBhcmFtZXRlcnMgPSBqb2luKCIsICIsIEB7JHBhcmFtZXRlclNwZWNPcHRpb25z
eyRndHlwZX19KTsKLSAgICBteSAkZ2xpYlR5cGVOYW1lID0gR2V0R2xpYlR5cGVOYW1lKCRwcm9w
VHlwZSk7Ci0gICAgJHByb3BOYW1lID1+IHMvXy8tL2c7Ci0gICAgbXkgJHR4dEluc3RhbGxQcm9w
ID0gPDwgIkVPRiI7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAg
ICAgZ29iamVjdENsYXNzLAotICAgICAgICAkcHJvcEVudW0sCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y18kZ3R5cGUoCi0gICAgICAgICAgICAiJHByb3BOYW1lIiwKLSAgICAgICAgICAgICIkaW50ZXJm
YWNlTmFtZTokcHJvcE5hbWUiLAotICAgICAgICAgICAgIiRtdXRhYmxlU3RyaW5nICRnbGliVHlw
ZU5hbWUgJGludGVyZmFjZU5hbWU6JHByb3BOYW1lIiwKLSAgICAgICAgICAgICRleHRyYVBhcmFt
ZXRlcnMsCi0gICAgICAgICAgICAkZ3BhcmFtZmxhZykpOwotCi1FT0YKLSAgICBwdXNoKEB0eHRJ
bnN0YWxsUHJvcHMsICR0eHRJbnN0YWxsUHJvcCk7Ci19Ci0KLXN1YiBHZW5lcmF0ZVByb3BlcnRp
ZXMgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSkgPSBAXzsK
LQotICAgIG15ICRkZWNhbWVsaXplID0gZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSk7Ci0gICAg
bXkgJGNsc0NhcHMgPSB1YygkZGVjYW1lbGl6ZSk7Ci0gICAgbXkgJGxvd2VyQ2FzZUlmYWNlTmFt
ZSA9ICJ3ZWJraXRfZG9tXyRkZWNhbWVsaXplIjsKLSAgICBteSAkcGFyZW50SW1wbENsYXNzTmFt
ZSA9IEdldFBhcmVudEltcGxDbGFzc05hbWUoJGludGVyZmFjZSk7Ci0KLSAgICBteSAkY29uZGl0
aW9uR3VhcmRTdGFydCA9ICIiOwotICAgIG15ICRjb25kaXRpb25HdWFyZEVuZCA9ICIiOwotICAg
IG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgIGlmICgkY29uZGl0aW9uYWxTdHJpbmcpIHsKLSAg
ICAgICAgJGNvbmRpdGlvbkd1YXJkU3RhcnQgPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9IjsK
LSAgICAgICAgJGNvbmRpdGlvbkd1YXJkRW5kID0gIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3Ry
aW5nfSI7Ci0gICAgfQotCi0gICAgIyBQcm9wZXJ0aWVzCi0gICAgbXkgJGltcGxDb250ZW50ID0g
IiI7Ci0gICAgbXkgQHJlYWRhYmxlUHJvcGVydGllcyA9IGdyZXAgeyBJc1Byb3BlcnR5UmVhZGFi
bGUoJF8pIH0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKLSAgICBteSBAd3JpdGVhYmxlUHJv
cGVydGllcyA9IGdyZXAgeyBJc1Byb3BlcnR5V3JpdGVhYmxlKCRfKSB9IEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc307Ci0gICAgbXkgJG51bVByb3BlcnRpZXMgPSBzY2FsYXIgQHJlYWRhYmxlUHJv
cGVydGllczsKLQotICAgICMgUHJvcGVydGllcwotICAgIGlmICgkbnVtUHJvcGVydGllcyA+IDAp
IHsKLSAgICAgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1lbnVtIHsKLSAgICBQUk9QXzAs
Ci1FT0YKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwotCi0g
ICAgICAgIHB1c2goQHR4dEdldFByb3BzLCAic3RhdGljIHZvaWQgJHtsb3dlckNhc2VJZmFjZU5h
bWV9X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKVxuIik7Ci0gICAgICAgIHB1c2goQHR4dEdldFBy
b3BzLCAie1xuIik7Ci0gICAgICAgIHB1c2goQHR4dEdldFByb3BzLCAiICAgICR7Y2xhc3NOYW1l
fSogc2VsZiA9IFdFQktJVF9ET01fJHtjbHNDYXBzfShvYmplY3QpO1xuIik7Ci0gICAgICAgIHB1
c2goQHR4dEdldFByb3BzLCAiXG4iKTsKLSAgICAgICAgcHVzaChAdHh0R2V0UHJvcHMsICIgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7XG4iKTsKLQotICAgICAgICBpZiAoc2NhbGFyIEB3cml0ZWFi
bGVQcm9wZXJ0aWVzID4gMCkgewotICAgICAgICAgICAgcHVzaChAdHh0U2V0UHJvcHMsICJzdGF0
aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAie1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEB0eHRTZXRQcm9wcywgIiAgICAke2NsYXNzTmFtZX0qIHNlbGYgPSBXRUJLSVRf
RE9NXyR7Y2xzQ2Fwc30ob2JqZWN0KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAdHh0U2V0UHJv
cHMsICJcbiIpOwotICAgICAgICAgICAgcHVzaChAdHh0U2V0UHJvcHMsICIgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7XG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvcmVhY2ggbXkgJGF0dHJp
YnV0ZSAoQHJlYWRhYmxlUHJvcGVydGllcykgewotICAgICAgICAgICAgR2VuZXJhdGVQcm9wZXJ0
eSgkYXR0cmlidXRlLCAkaW50ZXJmYWNlTmFtZSwgXEB3cml0ZWFibGVQcm9wZXJ0aWVzLCAkaW50
ZXJmYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIn07
XG5cbiIpOwotCi0gICAgICAgICR0eHRHZXRQcm9wID0gPDwgIkVPRiI7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVy
dHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci1FT0YKLSAgICAgICAgcHVz
aChAdHh0R2V0UHJvcHMsICR0eHRHZXRQcm9wKTsKLQotICAgICAgICBpZiAoc2NhbGFyIEB3cml0
ZWFibGVQcm9wZXJ0aWVzID4gMCkgewotICAgICAgICAgICAgJHR4dFNldFByb3BzID0gPDwgIkVP
RiI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci1FT0YKLSAgICAgICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAkdHh0U2V0UHJvcHMpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgIyBEbyBub3QgaW5zZXJ0IGV4dHJhIHNwYWNlcyB3aGVuIGlu
dGVycG9sYXRpbmcgYXJyYXkgdmFyaWFibGVzCi0gICAgJCIgPSAiIjsKLQotICAgIGlmICgkcGFy
ZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICAkaW1wbENvbnRlbnQgPSA8
PCAiRU9GIjsKLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgJHtjbGFzc05hbWV9UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fJHtjbHNDYXBzfV9HRVRfUFJJVkFURShvYmplY3QpOwotJGNvbmRpdGlvbkd1YXJkU3RhcnQK
LSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSk7Ci0kY29uZGl0aW9uR3VhcmRFbmQKLSAgICBwcml2LT5+JHtjbGFzc05hbWV9UHJpdmF0ZSgp
OwotICAgIEdfT0JKRUNUX0NMQVNTKCR7bG93ZXJDYXNlSWZhY2VOYW1lfV9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1FT0YKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0
aWVzLCAkaW1wbENvbnRlbnQpOwotICAgIH0KLQotICAgIGlmICgkbnVtUHJvcGVydGllcyA+IDAp
IHsKLSAgICAgICAgaWYgKHNjYWxhciBAd3JpdGVhYmxlUHJvcGVydGllcyA+IDApIHsKLSAgICAg
ICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQHR4dFNldFByb3BzKTsKLSAgICAgICAgICAg
IHB1c2goQGNCb2R5UHJvcGVydGllcywgIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCBAdHh0R2V0UHJvcHMpOwotICAgICAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICJcbiIpOwotICAgIH0KLQotICAgICMgQWRkIGEgY29uc3RydWN0b3IgaW1wbGVtZW50
YXRpb24gb25seSBmb3IgZGlyZWN0IHN1YmNsYXNzZXMgb2YgT2JqZWN0IHRvIG1ha2Ugc3VyZQot
ICAgICMgdGhhdCB0aGUgV2ViQ29yZSB3cmFwcGVkIG9iamVjdCBpcyBhZGRlZCBvbmx5IG9uY2Ug
dG8gdGhlIERPTSBjYWNoZS4gVGhlIERPTSBnYXJiYWdlCi0gICAgIyBjb2xsZWN0b3Igd29ya3Mg
YmVjYXVzZSBOb2RlIGlzIGEgZGlyZWN0IHN1YmNsYXNzIG9mIE9iamVjdCBhbmQgdGhlIHZlcnNp
b24gb2YKLSAgICAjIERPTU9iamVjdENhY2hlOjpwdXQoKSB0aGF0IHJlY2VpdmVzIGEgTm9kZSAo
d2hpY2ggaXMgdGhlIG9uZSBzZXR0aW5nIHRoZSBmcmFtZSkgaXMKLSAgICAjIGFsd2F5cyBjYWxs
ZWQgZm9yIERPTSBvYmplY3RzIGRlcml2ZWQgZnJvbSBOb2RlLgotICAgIGlmICgkcGFyZW50SW1w
bENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9G
IjsKLXN0YXRpYyBHT2JqZWN0KiAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1MoJHtsb3dlckNhc2VJZmFjZU5hbWV9X3BhcmVudF9jbGFzcyktPmNvbnN0cnVj
dG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7
Ci0kY29uZGl0aW9uR3VhcmRTdGFydAotICAgICR7Y2xhc3NOYW1lfVByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NXyR7Y2xzQ2Fwc31fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9E
T01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotJGNvbmRpdGlvbkd1YXJk
RW5kCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotRU9GCi0gICAgICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgJGltcGxDb250ZW50KTsKLSAgICB9Ci0KLSAgICAkaW1wbENvbnRlbnQgPSA8PCAi
RU9GIjsKLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9jbGFzc19pbml0KCR7Y2xh
c3NOYW1lfUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci1FT0YKLSAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJHBhcmVudEltcGxDbGFzc05hbWUgZXEg
Ik9iamVjdCIgfHwgJG51bVByb3BlcnRpZXMgPiAwKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgIiAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7XG4iKTsKLQotICAgICAgICBpZiAoJHBhcmVudEltcGxDbGFzc05hbWUg
ZXEgIk9iamVjdCIpIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoJHtjbGFzc05hbWV9
UHJpdmF0ZSkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9ICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9jb25zdHJ1
Y3RvcjtcbiIpOwotICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZmluYWxpemU7XG4iKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkbnVtUHJvcGVydGllcyA+IDApIHsKLSAgICAgICAg
ICAgIGlmIChzY2FsYXIgQHdyaXRlYWJsZVByb3BlcnRpZXMgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5
ID0gJHtsb3dlckNhc2VJZmFjZU5hbWV9X3NldF9wcm9wZXJ0eTtcbiIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gJHtsb3dlckNhc2VJZmFjZU5hbWV9X2dldF9wcm9wZXJ0eTtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiXG4iKTsKLSAgICAgICAgICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgQHR4dEluc3RhbGxQcm9wcyk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3RDbGFzcyk7XG4iKTsKLSAgICB9Ci0gICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7
Ci19Ci0KLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9pbml0KCR7Y2xhc3NOYW1l
fSogcmVxdWVzdCkKLXsKLUVPRgotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgJGltcGxDb250
ZW50KTsKLQotICAgIGlmICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAg
ICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKLSAgICAke2NsYXNzTmFtZX1Qcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV8ke2Nsc0NhcHN9X0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAgIG5l
dyAocHJpdikgJHtjbGFzc05hbWV9UHJpdmF0ZSgpOwotRU9GCi0gICAgICAgIHB1c2goQGNCb2R5
UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpO1xuIik7Ci0gICAgfQot
ICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwotfQotCi1FT0YKLSAgICBwdXNoKEBjQm9keVBy
b3BlcnRpZXMsICRpbXBsQ29udGVudCk7Ci19Ci0KLXN1YiBHZW5lcmF0ZUNvbnN0YW50cyB7Ci0g
ICAgbXkgKCRpbnRlcmZhY2UsICRwcmVmaXgpID0gQF87Ci0KLSAgICBteSAkaXNTdGFibGVDbGFz
cyA9IHNjYWxhcihAc3RhYmxlU3ltYm9scyk7Ci0KLSAgICBpZiAoQHskaW50ZXJmYWNlLT5jb25z
dGFudHN9KSB7Ci0gICAgICAgIG15IEBjb25zdGFudHMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0YW50
c307Ci0gICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50IChAY29uc3RhbnRzKSB7Ci0gICAgICAg
ICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25k
aXRpb25hbFN0cmluZygkY29uc3RhbnQpOwotICAgICAgICAgICAgbXkgJGNvbnN0YW50TmFtZSA9
ICRwcmVmaXggLiAkY29uc3RhbnQtPm5hbWU7Ci0gICAgICAgICAgICBteSAkY29uc3RhbnRWYWx1
ZSA9ICRjb25zdGFudC0+dmFsdWU7Ci0gICAgICAgICAgICBteSAkc3RhYmxlU3ltYm9sID0gZ3Jl
cCB7JF8gPX4gL15cUSRjb25zdGFudE5hbWUvfSBAc3RhYmxlU3ltYm9sczsKLSAgICAgICAgICAg
IG15ICRzdGFibGVTeW1ib2xWZXJzaW9uOwotICAgICAgICAgICAgaWYgKCRzdGFibGVTeW1ib2wp
IHsKLSAgICAgICAgICAgICAgICAoJGR1bW15LCAkc3RhYmxlU3ltYm9sVmVyc2lvbikgPSBzcGxp
dCgnQCcsICRzdGFibGVTeW1ib2wsIDIpOwotICAgICAgICAgICAgICAgIHB1c2goQHN5bWJvbHMs
ICIkY29uc3RhbnROYW1lXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbXkgQGNv
bnN0YW50SGVhZGVyID0gKCk7Ci0gICAgICAgICAgICBwdXNoKEBjb25zdGFudEhlYWRlciwgIiNp
ZiAke2NvbmRpdGlvbmFsU3RyaW5nfSIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAg
ICAgIHB1c2goQGNvbnN0YW50SGVhZGVyLCAiLyoqIik7Ci0gICAgICAgICAgICBwdXNoKEBjb25z
dGFudEhlYWRlciwgIiAqICR7Y29uc3RhbnROYW1lfToiKTsKLSAgICAgICAgICAgIGlmICgkc3Rh
YmxlU3ltYm9sVmVyc2lvbikgewotICAgICAgICAgICAgICAgIHB1c2goQGNvbnN0YW50SGVhZGVy
LCAiICogU2luY2U6ICR7c3RhYmxlU3ltYm9sVmVyc2lvbn0iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHB1c2goQGNvbnN0YW50SGVhZGVyLCAiICovIik7Ci0gICAgICAgICAgICBwdXNo
KEBjb25zdGFudEhlYWRlciwgIiNkZWZpbmUgJGNvbnN0YW50TmFtZSAkY29uc3RhbnRWYWx1ZSIp
OwotICAgICAgICAgICAgcHVzaChAY29uc3RhbnRIZWFkZXIsICIjZW5kaWYgLyogJHtjb25kaXRp
b25hbFN0cmluZ30gKi8iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgICAgICAgICBwdXNo
KEBjb25zdGFudEhlYWRlciwgIlxuIik7Ci0KLSAgICAgICAgICAgIGlmICgkc3RhYmxlU3ltYm9s
IG9yICEkaXNTdGFibGVDbGFzcykgewotICAgICAgICAgICAgICAgIHB1c2goQGhCb2R5LCBqb2lu
KCJcbiIsIEBjb25zdGFudEhlYWRlcikpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBoQm9keVVuc3RhYmxlLCBqb2luKCJcbiIsIEBjb25zdGFudEhlYWRlcikp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdWIgR2VuZXJhdGVIZWFk
ZXIgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJHBhcmVudENsYXNzTmFtZSwg
JGludGVyZmFjZSkgPSBAXzsKLQotICAgIG15ICRpbXBsQ29udGVudCA9ICIiOwotCi0gICAgIyBB
ZGQgdGhlIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCi0gICAgQGhQcmVmaXggPSBzcGxpdCgiXHIi
LCAkbGljZW5jZVRlbXBsYXRlKTsKLSAgICBwdXNoKEBoUHJlZml4LCAiXG4iKTsKLQotICAgIG15
ICRpc1N0YWJsZUNsYXNzID0gc2NhbGFyKEBzdGFibGVTeW1ib2xzKTsKLQotICAgIGlmICgkaXNT
dGFibGVDbGFzcykgewotICAgICAgICAjIEZvcmNlIHNpbmdsZSBoZWFkZXIgaW5jbHVkZS4KLSAg
ICAgICAgbXkgJGhlYWRlckNoZWNrID0gPDwgIkVPRiI7Ci0jaWYgIWRlZmluZWQoX19XRUJLSVRE
T01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQotI2Vycm9yICJPbmx5
IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCi0jZW5k
aWYKLQotRU9GCi0gICAgICAgIHB1c2goQGhQcmVmaXgsICRoZWFkZXJDaGVjayk7Ci0gICAgfQot
Ci0gICAgIyBIZWFkZXIgZ3VhcmQKLSAgICBteSAkZ3VhcmQgPSAkY2xhc3NOYW1lIC4gIl9oIjsK
LQotICAgIEBoUHJlZml4R3VhcmQgPSA8PCAiRU9GIjsKLSNpZm5kZWYgJGd1YXJkCi0jZGVmaW5l
ICRndWFyZAotCi1FT0YKLSAgICBpZiAoISRpc1N0YWJsZUNsYXNzKSB7Ci0gICAgICAgIHB1c2go
QGhQcmVmaXhHdWFyZCwgIiNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUElcblxuIik7
Ci0gICAgfQotCi0gICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1HX0JFR0lOX0RFQ0xTCi0K
LUVPRgotCi0gICAgcHVzaChAaEJvZHlQcmUsICRpbXBsQ29udGVudCk7Ci0KLSAgICBteSAkZGVj
YW1lbGl6ZSA9IGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpOwotICAgIG15ICRjbHNDYXBzID0g
dWMoJGRlY2FtZWxpemUpOwotICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUgPSAid2Via2l0X2Rv
bV8kZGVjYW1lbGl6ZSI7Ci0KLSAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKLSNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFXyR7Y2xzQ2Fwc30gICAgICAgICAgICAoJHtsb3dlckNhc2VJZmFjZU5h
bWV9X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fJHtjbHNDYXBzfShvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
JHtjbHNDYXBzfSwgJHtjbGFzc05hbWV9KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV8ke2Nsc0NhcHN9
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1DbGFzcykKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU18ke2Nsc0NhcHN9KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9KSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9JU18ke2Nsc0NhcHN9X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV8k
e2Nsc0NhcHN9X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1DbGFzcykpCi0KLUVP
RgotCi0gICAgcHVzaChAaEJvZHksICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJGlzU3RhYmxl
Q2xhc3MpIHsKLSAgICAgICAgcHVzaChAc3ltYm9scywgIkdUeXBlICR7bG93ZXJDYXNlSWZhY2VO
YW1lfV9nZXRfdHlwZSh2b2lkKVxuIik7Ci0gICAgfQotCi0gICAgR2VuZXJhdGVDb25zdGFudHMo
JGludGVyZmFjZSwgIldFQktJVF9ET01fJHtjbHNDYXBzfV8iKTsKLQotICAgICRpbXBsQ29udGVu
dCA9IDw8ICJFT0YiOwotc3RydWN0IF8ke2NsYXNzTmFtZX0gewotICAgICR7cGFyZW50Q2xhc3NO
YW1lfSBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1zdHJ1Y3QgXyR7Y2xhc3NOYW1lfUNsYXNzIHsK
LSAgICAke3BhcmVudENsYXNzTmFtZX1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1FT0YKLQot
ICAgIHB1c2goQGhCb2R5LCAkaW1wbENvbnRlbnQpOwotCi0gICAgcHVzaChAaEJvZHksICJXRUJL
SVRfQVBJIEdUeXBlXG4ke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZ2V0X3R5cGUodm9pZCk7XG4iKTsK
LSAgICBwdXNoKEBoQm9keSwgIlxuIik7Ci19Ci0KLXN1YiBHZXRHUmV0dXJuTWFjcm8gewotICAg
IG15ICgkcGFyYW1OYW1lLCAkcGFyYW1JRExUeXBlLCAkcmV0dXJuVHlwZSwgJGZ1bmN0aW9uTmFt
ZSkgPSBAXzsKLQotICAgIG15ICRjb25kaXRpb247Ci0gICAgaWYgKCRwYXJhbUlETFR5cGUgZXEg
IkdFcnJvciIpIHsKLSAgICAgICAgJGNvbmRpdGlvbiA9ICIhJHBhcmFtTmFtZSB8fCAhKiRwYXJh
bU5hbWUiOwotICAgIH0gZWxzaWYgKElzR0RPTUNsYXNzVHlwZSgkcGFyYW1JRExUeXBlKSkgewot
ICAgICAgICBteSAkcGFyYW1UeXBlQ2FwcyA9IHVjKGRlY2FtZWxpemUoJHBhcmFtSURMVHlwZSkp
OwotICAgICAgICAkY29uZGl0aW9uID0gIldFQktJVF9ET01fSVNfJHtwYXJhbVR5cGVDYXBzfSgk
cGFyYW1OYW1lKSI7Ci0gICAgICAgIGlmIChQYXJhbUNhbkJlTnVsbCgkZnVuY3Rpb25OYW1lLCAk
cGFyYW1OYW1lKSkgewotICAgICAgICAgICAgJGNvbmRpdGlvbiA9ICIhJHBhcmFtTmFtZSB8fCAk
Y29uZGl0aW9uIjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChQYXJhbUNh
bkJlTnVsbCgkZnVuY3Rpb25OYW1lLCAkcGFyYW1OYW1lKSkgewotICAgICAgICAgICAgcmV0dXJu
ICIiOwotICAgICAgICB9Ci0gICAgICAgICRjb25kaXRpb24gPSAiJHBhcmFtTmFtZSI7Ci0gICAg
fQotCi0gICAgbXkgJG1hY3JvOwotICAgIGlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKLSAg
ICAgICAgJGRlZmF1bHRSZXR1cm4gPSAkcmV0dXJuVHlwZSBlcSAiZ2Jvb2xlYW4iID8gIkZBTFNF
IiA6IDA7Ci0gICAgICAgICRtYWNybyA9ICIgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoJGNvbmRp
dGlvbiwgJGRlZmF1bHRSZXR1cm4pO1xuIjsKLSAgICB9IGVsc2UgewotICAgICAgICAkbWFjcm8g
PSAiICAgIGdfcmV0dXJuX2lmX2ZhaWwoJGNvbmRpdGlvbik7XG4iOwotICAgIH0KLQotICAgIHJl
dHVybiAkbWFjcm87Ci19Ci0KLXN1YiBQYXJhbUNhbkJlTnVsbCB7Ci0gICAgbXkoJGZ1bmN0aW9u
TmFtZSwgJHBhcmFtTmFtZSkgPSBAXzsKLQotICAgIGlmIChkZWZpbmVkKCRmdW5jdGlvbk5hbWUp
KSB7Ci0gICAgICAgIHJldHVybiBzY2FsYXIoZ3JlcCB7JF8gZXEgJHBhcmFtTmFtZX0gQHskY2Fu
QmVOdWxsUGFyYW1zLT57JGZ1bmN0aW9uTmFtZX19KTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN1YiBHZXRGdW5jdGlvblNpZ25hdHVyZU5hbWUgewotICAgIG15ICgkaW50ZXJmYWNlTmFt
ZSwgJGZ1bmN0aW9uKSA9IEBfOwotCi0gICAgbXkgJHNpZ25hdHVyZU5hbWUgPSBkZWNhbWVsaXpl
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLQotICAgIHJldHVybiAkc2lnbmF0dXJlTmFt
ZSBpZiAkc2lnbmF0dXJlTmFtZSBuZSAidHlwZSI7Ci0KLSAgICAjIEZvciBIVE1MIHR5cGUgYXR0
cmlidXRlIHVzZSB0eXBlX2F0dHIuCi0gICAgIyBFeGFtcGxlOiB3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X2dldF90eXBlX2F0dHIoKQotICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9
ICRjb2RlR2VuZXJhdG9yLT5Db250ZW50QXR0cmlidXRlTmFtZShcJWltcGxJbmNsdWRlcywgJGlu
dGVyZmFjZU5hbWUsICRmdW5jdGlvbik7Ci0gICAgaWYgKCRjb250ZW50QXR0cmlidXRlTmFtZSkg
ewotICAgICAgICByZXR1cm4gInR5cGVfYXR0ciIgaWYgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lIGVx
ICJXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyIjsKLSAgICB9Ci0KLSAgICAjIEZvciBtZXRo
b2RzIHJldHVybmluZyBhIE1JTUUgdHlwZSB1c2UgY29udGVudF90eXBlLgotICAgICMgRXhhbXBs
ZXM6IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2NvbnRlbnRfdHlwZSgpLCB3ZWJraXRfZG9t
X2RvbV9taW1lX3R5cGVfZ2V0X2NvbnRlbnRfdHlwZSgpCi0gICAgaWYgKCRpbnRlcmZhY2VOYW1l
IGVxICJTdHlsZVNoZWV0IiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NTWltZVR5cGUiKSB7Ci0g
ICAgICAgIHJldHVybiAiY29udGVudF90eXBlIjsKLSAgICB9Ci0KLSAgICAjIEZvciBIVE1MRmll
bGRTZXQgdXNlIGZpZWxkX3NldF90eXBlLgotICAgICMgRXhhbXBsZTogd2Via2l0X2RvbV9odG1s
X2ZpZWxkX3NldF9lbGVtZW50X2dldF9maWVsZF9zZXRfdHlwZSgpCi0gICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJIVE1MRmllbGRTZXQiKSB7Ci0gICAgICAgIHJldHVybiAiZmllbGRfc2V0X3R5
cGUiOwotICAgIH0KLQotICAgICMgRm9yIGFueSBvdGhlciBjYXNlcyB1c2UgdGhlIGxhc3Qgd29y
ZCBvZiB0aGUgaW50ZXJmYWNlIG5hbWUuCi0gICAgIyBFeGFtcGxlczogd2Via2l0X2RvbV9ibG9i
X2dldF9ibG9iX3R5cGUoKSwgd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfdHlwZSgpCi0gICAg
bXkgQG5hbWVUb2tlbnMgPSBzcGxpdCgnXycsIGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpKTsK
LSAgICBteSAkbmFtZSA9ICRuYW1lVG9rZW5zWy0xXTsKLQotICAgICMgSWYgdGhlIGxhc3Qgd29y
ZCBpcyBlbGVtZW50IGFuZCB0aGVyZSBhcmUgbW9yZSB3b3JkcywgdXNlIHRoZSBwcmV2aW91cyBv
bmUuCi0gICAgIyBFeGFtcGxlOiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2J1
dHRvbl90eXBlKCkKLSAgICBpZiAoc2NhbGFyKEBuYW1lVG9rZW5zKSA+IDEgJiYgJG5hbWUgZXEg
ImVsZW1lbnQiKSB7Ci0gICAgICAgICRuYW1lID0gJG5hbWVUb2tlbnNbLTJdOwotICAgIH0KLQot
ICAgIHJldHVybiAiJHtuYW1lfV90eXBlIjsKLX0KLQotc3ViIEdldFRyYW5zZmVyVHlwZUZvclJl
dHVyblR5cGUgewotICAgIG15ICRyZXR1cm5UeXBlID0gc2hpZnQ7Ci0KLSAgICAjIE5vZGUgaXMg
YWx3YXlzIHRyYW5zZmVyIG5vbmUuCi0gICAgcmV0dXJuICJub25lIiBpZiAkcmV0dXJuVHlwZSBl
cSAiTm9kZSI7Ci0KLSAgICAjIEFueSBiYXNlIGNsYXNzIGJ1dCBOb2RlIGlzIHRyYW5zZmVyIGZ1
bGwuCi0gICAgcmV0dXJuICJmdWxsIiBpZiBJc0Jhc2VUeXBlKCRyZXR1cm5UeXBlKTsKLQotICAg
ICMgQW55IG90aGVyIGNsYXNzIG5vdCBkZXJpdmVkIGZyb20gTm9kZSBpcyB0cmFuc2ZlciBmdWxs
LgotICAgIHJldHVybiAiZnVsbCIgaWYgJHRyYW5zZmVyRnVsbFR5cGVIYXNoeyRyZXR1cm5UeXBl
fTsKLSAgICByZXR1cm4gIm5vbmUiOwotfQotCi1zdWIgR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1l
IHsKLSAgICBteSAkZnVuY3Rpb25OYW1lID0gc2hpZnQ7Ci0KLSAgICAjIFJlbmFtZSB3ZWJraXRf
ZG9tX1tkb2N1bWVudHxlbGVtZW50XV9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUqIGFuZCB3ZWJr
aXRfZG9tX1tkb2N1bWVudHxlbGVtZW50XV9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZQotICAg
ICMgZnVuY3Rpb25zIHNpbmNlIHRoZXkgd2VyZSBjaGFuZ2VkIHRvIHJldHVybiBhIFdlYktpdERP
TUhUTUxDb2xsZWN0aW9uIGluc3RlYWQgb2YgYSBXZWJLaXRET01Ob2RlTGlzdCBpbgotICAgICMg
cjE4ODgwOSBhbmQgcjE4ODczNS4gVGhlIG9sZCBtZXRob2RzIGFyZSBub3cgbWFudWFsbHkgYWRk
ZWQgYXMgZGVwcmVjYXRlZC4KLSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5h
bWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zIgot
ICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV9jbGFzc19uYW1lIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lIgotICAgICAgICB8fCAkZnVuY3Rp
b25OYW1lIGVxICJ3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25z
IgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2Vs
ZW1lbnRzX2J5X2NsYXNzX25hbWUiKSB7Ci0gICAgICAgIHJldHVybiAkZnVuY3Rpb25OYW1lIC4g
Il9hc19odG1sX2NvbGxlY3Rpb24iOwotICAgIH0KLQotICAgICMgUmVuYW1lIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlIGFzIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X2dldF9jYXB0dXJlX3R5cGUgc2luY2UKLSAgICAjIGl0IGNoYW5nZWQgdGhlIHJldHVy
biB2YWx1ZSBpbiByMjA0MzEyLgotICAgIGlmICgkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVyZSIpIHsKLSAgICAgICAgcmV0dXJuICRmdW5j
dGlvbk5hbWUgLiAiX3R5cGUiOwotICAgIH0KLQotICAgIHJldHVybiAkZnVuY3Rpb25OYW1lOwot
fQotCi1zdWIgRnVuY3Rpb25Vc2VkVG9SYWlzZUV4Y2VwdGlvbiB7Ci0gICAgbXkgJGZ1bmN0aW9u
TmFtZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21f
YXR0cl9zZXRfdmFsdWUiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21f
Y2hhcmFjdGVyX2RhdGFfYXBwZW5kX2RhdGEiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEg
IndlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc2V0X2RhdGEiCi0gICAgICAgIHx8ICRmdW5jdGlv
bk5hbWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3IiCi0gICAg
ICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVf
d2Fsa2VyIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX25vZGVfaXRl
cmF0b3JfbmV4dF9ub2RlIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9t
X25vZGVfaXRlcmF0b3JfcHJldmlvdXNfbm9kZSIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFtZSBl
cSAid2Via2l0X2RvbV9yYW5nZV9jbG9uZV9yYW5nZSIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFt
ZSBlcSAid2Via2l0X2RvbV9yYW5nZV9jb2xsYXBzZSIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFt
ZSBlcSAid2Via2l0X2RvbV9yYW5nZV9kZXRhY2giCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUg
ZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbW1vbl9hbmNlc3Rvcl9jb250YWluZXIiCi0gICAg
ICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0X2VuZF9jb250YWlu
ZXIiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0
YXJ0X2NvbnRhaW5lciIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9y
YW5nZV9nZXRfY29sbGFwc2VkIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRf
ZG9tX3JhbmdlX2dldF9lbmRfb2Zmc2V0IgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3
ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9vZmZzZXQiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5h
bWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfdG9fc3RyaW5nIgotICAgICAgICB8fCAkZnVuY3Rpb25O
YW1lIGVxICJ3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3NldF9jdXJyZW50X25vZGUiOwotfQotCi1z
dWIgRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbiB7Ci0gICAgbXkgJGZ1bmN0aW9uTmFt
ZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fbm9k
ZV9jbG9uZV9ub2RlIjsKLX0KLQotc3ViIEdlbmVyYXRlRnVuY3Rpb24gewotICAgIG15ICgkb2Jq
ZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAkcHJlZml4LCAkcGFyZW50Tm9kZSkgPSBA
XzsKLQotICAgIG15ICRkZWNhbWVsaXplID0gZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSk7Ci0K
LSAgICBpZiAoU2tpcEZ1bmN0aW9uKCRvYmplY3QsICRmdW5jdGlvbiwgJHBhcmVudE5vZGUsICRk
ZWNhbWVsaXplLCAkcHJlZml4KSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbXkg
JGZ1bmN0aW9uU2lnVHlwZSA9ICRwcmVmaXggZXEgInNldF8iID8gInZvaWQiIDogJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGU7Ci0gICAgbXkgJGZ1bmN0aW9uU2lnTmFtZSA9IEdldEZ1bmN0aW9u
U2lnbmF0dXJlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uKTsKLSAgICBteSAkZnVuY3Rp
b25OYW1lID0gR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1lKCJ3ZWJraXRfZG9tXyIgLiAkZGVjYW1l
bGl6ZSAuICJfIiAuICRwcmVmaXggLiAkZnVuY3Rpb25TaWdOYW1lKTsKLSAgICBteSAkcmV0dXJu
VHlwZSA9IEdldEdsaWJUeXBlTmFtZSgkZnVuY3Rpb25TaWdUeXBlKTsKLSAgICBteSAkcmV0dXJu
VmFsdWVJc0dET01UeXBlID0gSXNHRE9NQ2xhc3NUeXBlKCRmdW5jdGlvblNpZ1R5cGUpOwotICAg
IG15ICRyYWlzZXNFeGNlcHRpb24gPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlJhaXNlc0V4Y2VwdGlvbiJ9OwotCi0gICAgIyBJZiBhIG1ldGhvZCB1c2VkIHRv
IHJhaXNlIGFuIGV4Y2VwdGlvbiwgYnV0IHdhcyBjaGFuZ2VkIHRvIG5vdCByYWlzZSBpdCBhbnlt
b3JlLCB0aGUKLSAgICAjIEFQSSBjaGFuZ2VzIGJlY2F1c2Ugd2UgdXNlIGEgZXhwbGljaXQgR0Vy
cm9yIHBhcmFtZXRlciB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbnMuCi0gICAgIyBJbiB0aGlzIGNh
c2UsIGl0J3MgYmV0dGVyIHRvIGtlZXAgdGhlIEdFcnJvciBwYXJhbWV0ZXIgZXZlbiBpZiBpdCdz
IHVudXNlZCB0byBrZWVwCi0gICAgIyB0aGUgQVBJIGNvbXBhdGliaWxpdHkuCi0gICAgbXkgJHVz
ZWRUb1JhaXNlRXhjZXB0aW9uID0gRnVuY3Rpb25Vc2VkVG9SYWlzZUV4Y2VwdGlvbigkZnVuY3Rp
b25OYW1lKTsKLQotICAgICMgSWYgYSBtZXRob2QgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBi
dXQgd2FzIGNoYW5nZWQgdG8gcmFpc2UgZXhjZXB0aW9ucywgdGhlIEFQSQotICAgICMgY2hhbmdl
cyBiZWNhdXNlIHdlIHVzZSBhIGV4cGxpY2l0IEdFcnJvciBwYXJhbWV0ZXIgdG8gaGFuZGxlIHRo
ZSBleGNlcHRpb25zLgotICAgICMgSW4gdGhpcyBjYXNlLCB3ZSBhZGQgX3dpdGhfZXJyb3Igc3Vm
Zml4IGFuZCB0aGUgcHJldmlvdXMgdmVyc2lvbiBzaW1wbHkgaWdub3JlcyB0aGUgZXJyb3IuCi0g
ICAgaWYgKEZ1bmN0aW9uVXNlZFRvTm90UmFpc2VFeGNlcHRpb24oJGZ1bmN0aW9uTmFtZSkpIHsK
LSAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbk5hbWUgLiAiX3dpdGhfZXJyb3IiOwot
ICAgIH0KLQotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsKLSAgICBteSAkcGFy
ZW50Q29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZygkcGFyZW50Tm9kZSk7Ci0gICAgbXkgQGNvbmRpdGlvbmFsV2FybiA9IEdlbmVyYXRl
Q29uZGl0aW9uYWxXYXJuaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsKLSAgICBteSBAcGFyZW50
Q29uZGl0aW9uYWxXYXJuID0gR2VuZXJhdGVDb25kaXRpb25hbFdhcm5pbmcoJHBhcmVudE5vZGUp
OwotCi0gICAgbXkgJGZ1bmN0aW9uU2lnID0gIiR7Y2xhc3NOYW1lfSogc2VsZiI7Ci0gICAgbXkg
JHN5bWJvbFNpZyA9ICIke2NsYXNzTmFtZX0qIjsKLQotICAgIG15ICRoYXNWYXJpYWRpYyA9IDA7
Ci0gICAgbXkgQGNhbGxJbXBsUGFyYW1zOwotICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5j
dGlvbi0+cGFyYW1ldGVyc30pIHsKLSAgICAgICAgbXkgJHBhcmFtSURMVHlwZSA9ICRwYXJhbS0+
dHlwZTsKLSAgICAgICAgbXkgJHNlcXVlbmNlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTZXF1
ZW5jZUlubmVyVHlwZSgkcGFyYW1JRExUeXBlKTsKLSAgICAgICAgJHBhcmFtSURMVHlwZSA9ICRz
ZXF1ZW5jZVR5cGUgaWYgJHNlcXVlbmNlVHlwZSBuZSAiIjsKLSAgICAgICAgbXkgJHBhcmFtVHlw
ZSA9IEdldEdsaWJUeXBlTmFtZSgkcGFyYW1JRExUeXBlKTsKLSAgICAgICAgbXkgJGNvbnN0ID0g
JHBhcmFtVHlwZSBlcSAiZ2NoYXIqIiA/ICJjb25zdCAiIDogIiI7Ci0gICAgICAgIG15ICRwYXJh
bU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0KLSAgICAgICAgaWYgKCRwYXJhbS0+aXNWYXJpYWRpYykg
ewotICAgICAgICAgICAgJGhhc1ZhcmlhZGljID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICRmdW5jdGlvblNpZyAuPSAiLCAke2NvbnN0fSRwYXJhbVR5cGUgJHBhcmFtTmFtZSI7
Ci0gICAgICAgICAgICAkc3ltYm9sU2lnIC49ICIsICR7Y29uc3R9JHBhcmFtVHlwZSI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBteSAkcGFyYW1Jc0dET01UeXBlID0gSXNHRE9NQ2xhc3NUeXBlKCRw
YXJhbUlETFR5cGUpOwotICAgICAgICBpZiAoJHBhcmFtSXNHRE9NVHlwZSkgewotICAgICAgICAg
ICAgaWYgKCRwYXJhbUlETFR5cGUgbmUgImFueSIpIHsKLSAgICAgICAgICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJXZWJLaXRET00ke3BhcmFtSURMVHlwZX1Qcml2YXRlLmgifSA9IDE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCRwYXJhbUlzR0RPTVR5cGUgfHwgJGNvZGVH
ZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkcGFyYW1JRExUeXBlKSB8fCAkcGFyYW0tPmlzVmFyaWFk
aWMpIHsKLSAgICAgICAgICAgICRwYXJhbU5hbWUgPSAiY29udmVydGVkIiAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRwYXJhbU5hbWUpOwotICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICIq
JHBhcmFtTmFtZSIgaWYgJGNvZGVHZW5lcmF0b3ItPlNob3VsZFBhc3NXcmFwcGVyQnlSZWZlcmVu
Y2UoJHBhcmFtLCAkcGFyZW50Tm9kZSk7Ci0gICAgICAgICAgICAkcGFyYW1OYW1lID0gIldURk1v
dmUoJHBhcmFtTmFtZSkiIGlmICRwYXJhbS0+aXNWYXJpYWRpYzsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoJHBhcmFtSURMVHlwZSBlcSAiTm9kZUZpbHRlciIgfHwgJHBhcmFtSURMVHlwZSBlcSAi
WFBhdGhOU1Jlc29sdmVyIikgewotICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICJXVEY6OmdldFB0
cigiIC4gJHBhcmFtTmFtZSAuICIpIjsKLSAgICAgICAgfQotICAgICAgICBpZiAoJHBhcmFtSURM
VHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewotICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7Ci0gICAgICAgICAgICAkcGFyYW1O
YW1lID0gIldlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCgiIC4gJHBhcmFtTmFtZSAuICIpKSI7Ci0gICAgICAgIH0KLSAgICAgICAgcHVz
aChAY2FsbEltcGxQYXJhbXMsICRwYXJhbU5hbWUpOwotICAgIH0KLQotICAgIGlmICgkcmV0dXJu
VHlwZSBuZSAidm9pZCIgJiYgJHJldHVyblZhbHVlSXNHRE9NVHlwZSAmJiAkZnVuY3Rpb25TaWdU
eXBlIG5lICJhbnkiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IldlYktpdERPTSR7ZnVuY3Rp
b25TaWdUeXBlfVByaXZhdGUuaCJ9ID0gMTsKLSAgICB9Ci0KLSAgICAkZnVuY3Rpb25TaWcgLj0g
IiwgR0Vycm9yKiogZXJyb3IiIGlmICRyYWlzZXNFeGNlcHRpb24gfHwgJHVzZWRUb1JhaXNlRXhj
ZXB0aW9uOwotICAgICRzeW1ib2xTaWcgLj0gIiwgR0Vycm9yKioiIGlmICRyYWlzZXNFeGNlcHRp
b24gfHwgJHVzZWRUb1JhaXNlRXhjZXB0aW9uOwotCi0gICAgaWYgKCRoYXNWYXJpYWRpYykgewot
ICAgICAgICBteSAkcGFyYW0gPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc31bLTFdOwotICAgICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHBhcmFtLT50eXBlKSkgewot
ICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFtZTsKLSAgICAgICAgICAgICRm
dW5jdGlvblNpZyAuPSAiLCBndWludCBuXyRwYXJhbU5hbWUiOwotICAgICAgICAgICAgJHN5bWJv
bFNpZyAuPSAiLCBndWludCI7Ci0gICAgICAgIH0KLSAgICAgICAgJGZ1bmN0aW9uU2lnIC49ICIs
IC4uLiI7Ci0gICAgICAgICRzeW1ib2xTaWcgLj0gIiwgLi4uIjsKLSAgICB9Ci0KLSAgICBteSAk
c3ltYm9sID0gIiRyZXR1cm5UeXBlICRmdW5jdGlvbk5hbWUoJHN5bWJvbFNpZykiOwotICAgIG15
ICRpc1N0YWJsZUNsYXNzID0gc2NhbGFyKEBzdGFibGVTeW1ib2xzKTsKLSAgICBteSAoJHN0YWJs
ZVN5bWJvbCkgPSBncmVwIHskXyA9fiAvXlxRJHN5bWJvbC99IEBzdGFibGVTeW1ib2xzOwotICAg
IG15ICRzdGFibGVTeW1ib2xWZXJzaW9uOwotICAgIGlmICgkc3RhYmxlU3ltYm9sIGFuZCAkaXNT
dGFibGVDbGFzcykgewotICAgICAgICAoJGR1bW15LCAkc3RhYmxlU3ltYm9sVmVyc2lvbikgPSBz
cGxpdCgnQCcsICRzdGFibGVTeW1ib2wsIDIpOwotICAgICAgICBwdXNoKEBzeW1ib2xzLCAiJHN5
bWJvbFxuIik7Ci0gICAgfQotCi0gICAgbXkgQGZ1bmN0aW9uSGVhZGVyID0gKCk7Ci0gICAgIyBJ
bnNlcnQgaW50cm9zcGVjdGlvbiBhbm5vdGF0aW9ucwotICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVy
LCAiLyoqIik7Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiAke2Z1bmN0aW9uTmFtZX06
Iik7Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiBcQHNlbGY6IEEgIyR7Y2xhc3NOYW1l
fSIpOwotCi0gICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkg
ewotICAgICAgICBpZiAoJHBhcmFtLT5pc1ZhcmlhZGljKSB7Ci0gICAgICAgICAgICBsYXN0Owot
ICAgICAgICB9Ci0gICAgICAgIG15ICRwYXJhbUlETFR5cGUgPSAkcGFyYW0tPnR5cGU7Ci0gICAg
ICAgIG15ICRzZXF1ZW5jZVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U2VxdWVuY2VJbm5lclR5
cGUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgICRwYXJhbUlETFR5cGUgPSAkc2VxdWVuY2VUeXBl
IGlmICRzZXF1ZW5jZVR5cGUgbmUgIiI7Ci0gICAgICAgIG15ICRwYXJhbVR5cGUgPSBHZXRHbGli
VHlwZU5hbWUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgICMgJHBhcmFtVHlwZSBjYW4gaGF2ZSBh
IHRyYWlsaW5nICogaW4gc29tZSBjYXNlcwotICAgICAgICAkcGFyYW1UeXBlID1+IHMvXCokLy87
Ci0gICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgIG15ICRwYXJh
bUFubm90YXRpb25zID0gIiI7Ci0gICAgICAgIGlmIChQYXJhbUNhbkJlTnVsbCgkZnVuY3Rpb25O
YW1lLCAkcGFyYW1OYW1lKSkgewotICAgICAgICAgICAgJHBhcmFtQW5ub3RhdGlvbnMgPSAiIChh
bGxvdy1ub25lKToiOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAi
ICogXEAke3BhcmFtTmFtZX06JHtwYXJhbUFubm90YXRpb25zfSBBICMke3BhcmFtVHlwZX0iKTsK
LSAgICB9Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiBcQGVycm9yOiAjR0Vycm9yIikg
aWYgJHJhaXNlc0V4Y2VwdGlvbiB8fCAkdXNlZFRvUmFpc2VFeGNlcHRpb247Ci0gICAgaWYgKCRo
YXNWYXJpYWRpYykgewotICAgICAgICBteSAkcGFyYW0gPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c31bLTFdOwotICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwotICAgICAgICBt
eSAkcGFyYW1UeXBlID0gR2V0R2xpYlR5cGVOYW1lKCRwYXJhbS0+dHlwZSk7Ci0gICAgICAgICRw
YXJhbVR5cGUgPX4gcy9cKiQvLzsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBv
aW50ZXJUeXBlKCRwYXJhbS0+dHlwZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uSGVh
ZGVyLCAiICogXEBuXyR7cGFyYW1OYW1lfTogbnVtYmVyIG9mICR7cGFyYW1OYW1lfSB0aGF0IHdp
bGwgYmUgcGFzc2VkIik7Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkhlYWRlciwgIiAqIFxA
Li4uOiBsaXN0IG9mICMke3BhcmFtVHlwZX0iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiICogXEAuLi46IGxpc3Qgb2YgIyR7cGFyYW1UeXBl
fSBlbmRlZCBieSAlTlVMTC4iKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdXNoKEBmdW5jdGlv
bkhlYWRlciwgIiAqIik7Ci0gICAgbXkgJHJldHVyblR5cGVOYW1lID0gJHJldHVyblR5cGU7Ci0g
ICAgbXkgJGhhc1JldHVyblRhZyA9IDA7Ci0gICAgJHJldHVyblR5cGVOYW1lID1+IHMvXCokLy87
Ci0gICAgaWYgKCRyZXR1cm5WYWx1ZUlzR0RPTVR5cGUpIHsKLSAgICAgICAgbXkgJHRyYW5zZmVy
VHlwZSA9IEdldFRyYW5zZmVyVHlwZUZvclJldHVyblR5cGUoJGZ1bmN0aW9uU2lnVHlwZSk7Ci0g
ICAgICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiICogUmV0dXJuczogKHRyYW5zZmVyICR0cmFu
c2ZlclR5cGUpOiBBICMke3JldHVyblR5cGVOYW1lfSIpOwotICAgICAgICAkaGFzUmV0dXJuVGFn
ID0gMTsKLSAgICB9IGVsc2lmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKLSAgICAgICAgcHVz
aChAZnVuY3Rpb25IZWFkZXIsICIgKiBSZXR1cm5zOiBBICMke3JldHVyblR5cGVOYW1lfSIpOwot
ICAgICAgICAkaGFzUmV0dXJuVGFnID0gMTsKLSAgICB9Ci0gICAgaWYgKCEkc3RhYmxlU3ltYm9s
KSB7Ci0gICAgICAgIGlmICgkaGFzUmV0dXJuVGFnKSB7Ci0gICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbkhlYWRlciwgIiAqIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZnVuY3Rpb25IZWFk
ZXIsICIgKiBTdGFiaWxpdHk6IFVuc3RhYmxlIik7Ci0gICAgfSBlbHNpZiAoJHN0YWJsZVN5bWJv
bFZlcnNpb24pIHsKLSAgICAgICAgaWYgKCRoYXNSZXR1cm5UYWcpIHsKLSAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uSGVhZGVyLCAiICoiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5j
dGlvbkhlYWRlciwgIiAqIFNpbmNlOiAke3N0YWJsZVN5bWJvbFZlcnNpb259Iik7Ci0gICAgfQot
ICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiKiovIik7Ci0KLSAgICBwdXNoKEBmdW5jdGlvbkhl
YWRlciwgIldFQktJVF9BUEkgJHJldHVyblR5cGVcbiRmdW5jdGlvbk5hbWUoJGZ1bmN0aW9uU2ln
KTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbkhlYWRlciwgIlxuIik7Ci0gICAgaWYgKCRzdGFibGVT
eW1ib2wgb3IgISRpc1N0YWJsZUNsYXNzKSB7Ci0gICAgICAgIHB1c2goQGhCb2R5LCBqb2luKCJc
biIsIEBmdW5jdGlvbkhlYWRlcikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGhCb2R5
VW5zdGFibGUsIGpvaW4oIlxuIiwgQGZ1bmN0aW9uSGVhZGVyKSk7Ci0gICAgfQotCi0gICAgcHVz
aChAY0JvZHksICIkcmV0dXJuVHlwZSAkZnVuY3Rpb25OYW1lKCRmdW5jdGlvblNpZylcbntcbiIp
OwotICAgIHB1c2goQGNCb2R5LCAiI2lmICR7cGFyZW50Q29uZGl0aW9uYWxTdHJpbmd9XG4iKSBp
ZiAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChAY0JvZHksICIjaWYgJHtjb25k
aXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLQotICAgIHB1c2goQGNC
b2R5LCAiICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTtcbiIpOwotCi0g
ICAgIyBnX3JldHVybiBtYWNyb3MgdG8gY2hlY2sgcGFyYW1ldGVycyBvZiBwdWJsaWMgbWV0aG9k
cy4KLSAgICAkZ1JldHVybk1hY3JvID0gR2V0R1JldHVybk1hY3JvKCJzZWxmIiwgJGludGVyZmFj
ZU5hbWUsICRyZXR1cm5UeXBlKTsKLSAgICBwdXNoKEBjQm9keSwgJGdSZXR1cm5NYWNybyk7Ci0K
LSAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Ci0gICAg
ICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgIG15ICRwYXJhbUlETFR5
cGUgPSAkcGFyYW0tPnR5cGU7Ci0gICAgICAgIG15ICRwYXJhbVR5cGVJc1BvaW50ZXIgPSAhJGNv
ZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgIGlm
ICgkcGFyYW1UeXBlSXNQb2ludGVyICYmICEkcGFyYW0tPmlzVmFyaWFkaWMpIHsKLSAgICAgICAg
ICAgICRnUmV0dXJuTWFjcm8gPSBHZXRHUmV0dXJuTWFjcm8oJHBhcmFtTmFtZSwgJHBhcmFtSURM
VHlwZSwgJHJldHVyblR5cGUsICRmdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgcHVzaChAY0Jv
ZHksICRnUmV0dXJuTWFjcm8pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCRyYWlzZXNF
eGNlcHRpb24pIHsKLSAgICAgICAgJGdSZXR1cm5NYWNybyA9IEdldEdSZXR1cm5NYWNybygiZXJy
b3IiLCAiR0Vycm9yIiwgJHJldHVyblR5cGUpOwotICAgICAgICBwdXNoKEBjQm9keSwgJGdSZXR1
cm5NYWNybyk7Ci0gICAgfSBlbHNpZiAoJHVzZWRUb1JhaXNlRXhjZXB0aW9uKSB7Ci0gICAgICAg
IHB1c2goQGNCb2R5LCAiICAgIFVOVVNFRF9QQVJBTShlcnJvcik7XG4iKTsKLSAgICB9Ci0KLSAg
ICAjIFRoZSBXZWJLaXQ6OmNvcmUgaW1wbGVtZW50YXRpb25zIGNoZWNrIGZvciBudWxsIGFscmVh
ZHk7IG5vIG5lZWQgdG8gZHVwbGljYXRlIGVmZm9ydC4KLSAgICBwdXNoKEBjQm9keSwgIiAgICBX
ZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpO1xuIik7
Ci0KLSAgICAkcmV0dXJuUGFyYW1OYW1lID0gIiI7Ci0gICAgbXkgJGN1cnJlbnRQYXJhbWV0ZXJJ
bmRleCA9IDA7Ci0gICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
fSkgewotICAgICAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBlOwotICAgICAgICBt
eSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwotICAgICAgICBteSAkcGFyYW1UeXBlID0gR2V0
R2xpYlR5cGVOYW1lKCRwYXJhbUlETFR5cGUpOwotICAgICAgICBteSAkcGFyYW1Jc0dET01UeXBl
ID0gSXNHRE9NQ2xhc3NUeXBlKCRwYXJhbUlETFR5cGUpOwotICAgICAgICBteSAkcGFyYW1UeXBl
SXNQb2ludGVyID0gISRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCRwYXJhbUlETFR5
cGUpOwotICAgICAgICBteSAkY29udmVydGVkUGFyYW1OYW1lID0gImNvbnZlcnRlZCIgLiAkY29k
ZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkcGFyYW1OYW1lKTsKLQotICAgICAgICBteSAkcGFyYW1D
b3JlVHlwZSA9ICRwYXJhbVR5cGU7Ci0gICAgICAgIG15ICRwYXJhbUNvbnZlcnNpb25GdW5jdGlv
biA9ICIiOwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkcGFyYW1J
RExUeXBlKSkgewotICAgICAgICAgICAgJHBhcmFtQ29yZVR5cGUgPSAiV1RGOjpTdHJpbmciOwot
ICAgICAgICAgICAgJHBhcmFtQ29udmVyc2lvbkZ1bmN0aW9uID0gIldURjo6U3RyaW5nOjpmcm9t
VVRGOCI7Ci0gICAgICAgIH0gZWxzaWYgKCRwYXJhbUlETFR5cGUgZXEgIk5vZGVGaWx0ZXIiIHx8
ICRwYXJhbUlETFR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKLSAgICAgICAgICAgICRwYXJh
bUNvcmVUeXBlID0gIlJlZlB0cjxXZWJDb3JlOjokcGFyYW1JRExUeXBlPiI7Ci0gICAgICAgICAg
ICAkcGFyYW1Db252ZXJzaW9uRnVuY3Rpb24gPSAiV2ViS2l0Ojpjb3JlIgotICAgICAgICB9IGVs
c2lmICgkcGFyYW1Jc0dET01UeXBlKSB7Ci0gICAgICAgICAgICAkcGFyYW1Db3JlVHlwZSA9ICJX
ZWJDb3JlOjoke3BhcmFtSURMVHlwZX0qIjsKLSAgICAgICAgICAgICRwYXJhbUNvbnZlcnNpb25G
dW5jdGlvbiA9ICJXZWJLaXQ6OmNvcmUiCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoJHBhcmFt
LT5pc1ZhcmlhZGljKSB7Ci0gICAgICAgICAgICBteSAkcHJldmlvdXNQYXJhbU5hbWU7Ci0gICAg
ICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICRwcmV2aW91
c1BhcmFtTmFtZSA9ICJlcnJvciI7Ci0gICAgICAgICAgICB9IGVsc2lmICgkY3VycmVudFBhcmFt
ZXRlckluZGV4ID09IDApIHsKLSAgICAgICAgICAgICAgICAkcHJldmlvdXNQYXJhbU5hbWUgPSAi
c2VsZiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRwcmV2aW91c1Bh
cmFtTmFtZSA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfVskY3VycmVudFBhcmFtZXRlckluZGV4
IC0gMV0tPm5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAg
ICB2YV9saXN0IHZhcmlhZGljUGFyYW1ldGVyTGlzdDtcbiIpOwotICAgICAgICAgICAgcHVzaChA
Y0JvZHksICIgICAgVmVjdG9yPCRwYXJhbUNvcmVUeXBlPiAkY29udmVydGVkUGFyYW1OYW1lO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICB2YV9zdGFydCh2YXJpYWRpY1BhcmFt
ZXRlckxpc3QsICRwcmV2aW91c1BhcmFtTmFtZSk7XG4iKTsKLSAgICAgICAgICAgIGlmICgkcGFy
YW1UeXBlSXNQb2ludGVyKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgd2hp
bGUgKCRwYXJhbVR5cGUgdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9hcmcodmFyaWFkaWNQYXJhbWV0
ZXJMaXN0LCAkcGFyYW1UeXBlKSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGNCb2R5LCAi
ICAgICAgICAke2NvbnZlcnRlZFBhcmFtTmFtZX0uYXBwZW5kKCR7cGFyYW1Db252ZXJzaW9uRnVu
Y3Rpb259KHZhcmlhZGljUGFyYW1ldGVyKSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgJHtjb252ZXJ0ZWRQYXJhbU5hbWV9LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobl8kcGFyYW1OYW1lKTtcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGNCb2R5LCAiICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuXyRwYXJhbU5hbWU7
ICsraSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgICAgICR7Y29u
dmVydGVkUGFyYW1OYW1lfS51bmNoZWNrZWRBcHBlbmQodmFfYXJnKHZhcmlhZGljUGFyYW1ldGVy
TGlzdCwgJHBhcmFtVHlwZSkpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNo
KEBjQm9keSwgIiAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTtcbiIpOwotICAgICAg
ICB9IGVsc2lmICgkcGFyYW1Db3JlVHlwZSBuZSAkcGFyYW1UeXBlKSB7Ci0gICAgICAgICAgICBw
dXNoKEBjQm9keSwgIiAgICAkcGFyYW1Db3JlVHlwZSAkY29udmVydGVkUGFyYW1OYW1lID0gJHtw
YXJhbUNvbnZlcnNpb25GdW5jdGlvbn0oJHBhcmFtTmFtZSk7XG4iKTsKLSAgICAgICAgfQotICAg
ICAgICAkcmV0dXJuUGFyYW1OYW1lID0gJGNvbnZlcnRlZFBhcmFtTmFtZSBpZiAkcGFyYW0tPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21SZXR1cm4ifTsKLSAgICAgICAgJGN1cnJlbnRQYXJh
bWV0ZXJJbmRleCsrOwotICAgIH0KLQotICAgIG15ICRhc3NpZ24gPSAiIjsKLSAgICBteSAkYXNz
aWduUHJlID0gIiI7Ci0gICAgbXkgJGFzc2lnblBvc3QgPSAiIjsKLQotICAgICMgV2UgbmVlZCB0
byBzcGVjaWFsLWNhc2UgdGhlc2UgTm9kZSBtZXRob2RzIGJlY2F1c2UgdGhlaXIgQysrCi0gICAg
IyBzaWduYXR1cmUgaXMgZGlmZmVyZW50IGZyb20gd2hhdCB3ZSdkIGV4cGVjdCBnaXZlbiB0aGVp
ciBJREwKLSAgICAjIGRlc2NyaXB0aW9uOyBzZWUgTm9kZS5oLgotICAgIG15ICRmdW5jdGlvbkhh
c0N1c3RvbVJldHVybiA9ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fbm9kZV9hcHBlbmRf
Y2hpbGQiIHx8Ci0gICAgICAgICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fbm9kZV9pbnNl
cnRfYmVmb3JlIiB8fAotICAgICAgICAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX25vZGVf
cmVwbGFjZV9jaGlsZCIgfHwKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9u
b2RlX3JlbW92ZV9jaGlsZCI7Ci0gICAgICAgICAKLSAgICBpZiAoJHJldHVyblR5cGUgbmUgInZv
aWQiICYmICEkZnVuY3Rpb25IYXNDdXN0b21SZXR1cm4pIHsKLSAgICAgICAgaWYgKCRyZXR1cm5W
YWx1ZUlzR0RPTVR5cGUpIHsKLSAgICAgICAgICAgICRhc3NpZ24gPSAiUmVmUHRyPFdlYkNvcmU6
OiR7ZnVuY3Rpb25TaWdUeXBlfT4gZ29iamVjdFJlc3VsdCA9ICI7Ci0gICAgICAgICAgICAkYXNz
aWduUHJlID0gIldURjo6Z2V0UHRyKCI7Ci0gICAgICAgICAgICAkYXNzaWduUG9zdCA9ICIpIjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRhc3NpZ24gPSAiJHtyZXR1cm5UeXBlfSBy
ZXN1bHQgPSAiOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5pc051bGxh
YmxlKSB7Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogUmV0dXJuaW5nIDAgaXMgcHJvYmFibHkg
bm90IHJpZ2h0IGZvciBhbGwgbnVsbGFibGUgYXR0cmlidXRlIHZhbHVlcy4KLSAgICAgICAgICAg
ICAgICAjIFdlIG1heSB3YW50IHRvIGhhbmRsZSB0aGlzIHRoZSB3YXkgd2UgZG8gaW4gdGhlIE9i
amVjdGl2ZS1DIGJpbmRpbmdzOiBub3QKLSAgICAgICAgICAgICAgICAjIGhhbmRsZSBpdCBhdCBh
bGwsIGFuZCBub3QgZXhwb3NlIGFueSBudWxsYWJsZXMuCi0gICAgICAgICAgICAgICAgJGFzc2ln
blBvc3QgPSAiLnZhbHVlT3IoMCkiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCRmdW5jdGlvblNpZ1R5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKLSAg
ICAgICAgICAgICRhc3NpZ25QcmUgPSAiY29udmVydFRvVVRGOFN0cmluZygiOwotICAgICAgICAg
ICAgJGFzc2lnblBvc3QgPSAiLT50b1N0cmluZygpKSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOwotICAgICAgICBwdXNoKEBjYWxsSW1wbFBh
cmFtcywgImVjIik7Ci0gICAgfQotCi0gICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1l
ID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRl
ZEFzIn0gfHwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0KLSAgICBpZiAoJGZ1bmN0aW9u
SGFzQ3VzdG9tUmV0dXJuKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIGJvb2wgb2sgPSBp
dGVtLT4ke2Z1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAY2FsbElt
cGxQYXJhbXMpIC4gIik7XG4iKTsKLSAgICAgICAgbXkgJGN1c3RvbU5vZGVBcHBlbmRDaGlsZCA9
IDw8ICJFT0YiOwotICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6a2l0KCRyZXR1
cm5QYXJhbU5hbWUpOwotRU9GCi0gICAgICAgIHB1c2goQGNCb2R5LCAkY3VzdG9tTm9kZUFwcGVu
ZENoaWxkKTsKLSAgICAKLSAgICAgICAgaWYoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICAg
ICAgbXkgJGV4Y2VwdGlvbkhhbmRsaW5nID0gPDwgIkVPRiI7Ci0KLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7Ci1FT0YKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAkZXhjZXB0aW9uSGFu
ZGxpbmcpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiAwO1xu
Iik7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAifVxuXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGZ1bmN0aW9uU2lnVHlwZSkp
IHsKLSAgICAgICAgbXkgJGdldHRlckNvbnRlbnRIZWFkOwotICAgICAgICBpZiAoJHByZWZpeCkg
ewotICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5l
cmF0b3ItPkdldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAk
ZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCBAY2FsbEltcGxQYXJhbXMp
OwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0gICAgICAgICAgICAgICAgbXkgJGltcGxlbWVudGVk
QnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVu
dGVkQnkifTsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9
LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCAiaXRlbSIpOwot
ICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiV2ViQ29yZTo6JHtpbXBsZW1lbnRlZEJ5
fTo6JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgJGZ1bmN0aW9uTmFtZSA9ICJpdGVtLT4ke2Z1bmN0aW9uTmFtZX0iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIiR7YXNzaWdufWNvbnZlcnRUb1VU
RjhTdHJpbmcoJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikp
O1xuIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG15IEBhcmd1bWVudHMgPSBAY2Fs
bEltcGxQYXJhbXM7Ci0gICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKLSAgICAgICAgICAgICAgICBteSAk
aW1wbGVtZW50ZWRCeSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW1wbGVtZW50ZWRCeSJ9OwotICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7aW1w
bGVtZW50ZWRCeX0uaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMs
ICJpdGVtIik7Ci0gICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIiR7YXNzaWdu
fWNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6JHtpbXBsZW1lbnRlZEJ5fTo6JHtmdW5jdGlv
bkltcGxlbWVudGF0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSk7XG4i
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhl
YWQgPSAiJHthc3NpZ259Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT4ke2Z1bmN0aW9uSW1wbGVt
ZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpKTtcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIgICAgJHtnZXR0ZXJD
b250ZW50SGVhZH0iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBteSAkY29udGVudEhlYWQ7Ci0g
ICAgICAgIGlmICgkcHJlZml4IGVxICJnZXRfIikgewotICAgICAgICAgICAgbXkgKCRmdW5jdGlv
bk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4cHJlc3Npb24oXCVp
bXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVz
aChAYXJndW1lbnRzLCBAY2FsbEltcGxQYXJhbXMpOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0g
ICAgICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifTsKLSAgICAgICAgICAgICAgICAk
aW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAg
dW5zaGlmdChAYXJndW1lbnRzLCAiKml0ZW0iKTsKLSAgICAgICAgICAgICAgICAkZnVuY3Rpb25O
YW1lID0gIldlYkNvcmU6OiR7aW1wbGVtZW50ZWRCeX06OiR7ZnVuY3Rpb25OYW1lfSI7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaXRlbS0+
JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRjb250ZW50SGVh
ZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX0ke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwg
QGFyZ3VtZW50cykgLiAiKSR7YXNzaWduUG9zdH07XG4iOwotICAgICAgICB9IGVsc2lmICgkcHJl
Zml4IGVxICJzZXRfIikgewotICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVu
dHMpID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRp
bnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCBA
Y2FsbEltcGxQYXJhbXMpOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0gICAgICAgICAgICAgICAg
bXkgJGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkltcGxlbWVudGVkQnkifTsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIk
e2ltcGxlbWVudGVkQnl9LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1l
bnRzLCAiKml0ZW0iKTsKLSAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gIldlYkNvcmU6
OiR7aW1wbGVtZW50ZWRCeX06OiR7ZnVuY3Rpb25OYW1lfSI7Ci0gICAgICAgICAgICAgICAgJGNv
bnRlbnRIZWFkID0gIiR7YXNzaWdufSR7YXNzaWduUHJlfSR7ZnVuY3Rpb25OYW1lfSgiIC4gam9p
bigiLCAiLCBAYXJndW1lbnRzKSAuICIpJHthc3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaXRlbS0+JHtmdW5jdGlv
bk5hbWV9IjsKLSAgICAgICAgICAgICAgICAkY29udGVudEhlYWQgPSAiJHthc3NpZ259JHthc3Np
Z25QcmV9JHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikke2Fz
c2lnblBvc3R9O1xuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG15IEBhcmd1bWVudHMgPSBAY2FsbEltcGxQYXJhbXM7Ci0gICAgICAgICAgICBpZiAoJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0p
IHsKLSAgICAgICAgICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9OwotICAgICAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IiR7aW1wbGVtZW50ZWRCeX0uaCJ9ID0gMTsKLSAgICAgICAgICAg
ICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsICIqaXRlbSIpOwotICAgICAgICAgICAgICAgICRjb250
ZW50SGVhZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX1XZWJDb3JlOjoke2ltcGxlbWVudGVkQnl9
Ojoke2Z1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRz
KSAuICIpJHthc3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICRjb250ZW50SGVhZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX1pdGVtLT4ke2Z1bmN0
aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpJHth
c3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChA
Y0JvZHksICIgICAgJHtjb250ZW50SGVhZH0iKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCRyYWlz
ZXNFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIG15ICRleGNlcHRpb25IYW5kbGluZyA9IDw8ICJF
T0YiOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OwotICAgIH0KLUVPRgotICAgICAgICAgICAgcHVzaChAY0JvZHksICRleGNlcHRpb25IYW5kbGlu
Zyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiICYm
ICEkZnVuY3Rpb25IYXNDdXN0b21SZXR1cm4pIHsKLSAgICAgICAgaWYgKCRmdW5jdGlvblNpZ1R5
cGUgbmUgImFueSIpIHsKLSAgICAgICAgICAgIGlmICgkcmV0dXJuVmFsdWVJc0dET01UeXBlKSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVy
biAwOyAvLyBUT0RPOiByZXR1cm4gY2FudmFzIG9iamVjdFxuIik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoJGNvbmRpdGlvbmFsU3RyaW5nKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAi
I2Vsc2VcbiIpOwotCi0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIFVOVVNFRF9QQVJBTShzZWxm
KTtcbiIpOwotICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9KSB7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBVTlVTRURfUEFSQU0oIiAuICRw
YXJhbS0+bmFtZSAuICIpO1xuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247Ci0KLSAgICAg
ICAgcHVzaChAY0JvZHksIEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxX
YXJuKTsKLSAgICAgICAgaWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lkIikgewotICAgICAgICAgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCRmdW5jdGlvblNpZ1R5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7
cmV0dXJuVHlwZX0+KDApO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiAwO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIjZW5kaWYgLyogJHtjb25kaXRpb25hbFN0cmlu
Z30gKi9cbiIpOwotICAgIH0KLQotICAgIGlmICgkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmcpIHsK
LSAgICAgICAgcHVzaChAY0JvZHksICIjZWxzZVxuIik7Ci0KLSAgICAgICAgcHVzaChAY0JvZHks
ICIgICAgVU5VU0VEX1BBUkFNKHNlbGYpO1xuIik7Ci0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAi
ICAgIFVOVVNFRF9QQVJBTSgiIC4gJHBhcmFtLT5uYW1lIC4gIik7XG4iKTsKLSAgICAgICAgfQot
ICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBVTlVTRURfUEFSQU0oZXJyb3IpO1xuIikgaWYgJHJh
aXNlc0V4Y2VwdGlvbjsKLQotICAgICAgICBwdXNoKEBjQm9keSwgQHBhcmVudENvbmRpdGlvbmFs
V2FybikgaWYgc2NhbGFyKEBwYXJlbnRDb25kaXRpb25hbFdhcm4pOwotICAgICAgICBpZiAoJHJl
dHVyblR5cGUgbmUgInZvaWQiKSB7Ci0gICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklz
Tm9uUG9pbnRlclR5cGUoJGZ1bmN0aW9uU2lnVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBwdXNo
KEBjQm9keSwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtyZXR1cm5UeXBlfT4oMCk7XG4iKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAg
cmV0dXJuIDA7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwdXNoKEBj
Qm9keSwgIiNlbmRpZiAvKiAke3BhcmVudENvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIik7Ci0gICAg
fQotCi0gICAgcHVzaChAY0JvZHksICJ9XG5cbiIpOwotfQotCi1zdWIgQ2xhc3NIYXNGdW5jdGlv
biB7Ci0gICAgbXkgKCRjbGFzcywgJG5hbWUpID0gQF87Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5j
dGlvbiAoQHskY2xhc3MtPmZ1bmN0aW9uc30pIHsKLSAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lIGVxICRuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdWIgR2VuZXJhdGVGdW5jdGlvbnMgewot
ICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSkgPSBAXzsKLQotICAg
IGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pIHsKLSAgICAg
ICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAi
IiwgJGludGVyZmFjZSk7Ci0gICAgfQotCi0gICAgVE9QOgotICAgIGZvcmVhY2ggbXkgJGF0dHJp
YnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICBpZiAoU2tpcEF0dHJp
YnV0ZSgkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgbmV4dCBUT1A7Ci0gICAgICAgIH0KLQot
ICAgICAgICBteSAkYXR0ck5hbWVVcHBlciA9ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgIG15ICRnZXRuYW1lID0gImdldCR7
YXR0ck5hbWVVcHBlcn0iOwotICAgICAgICBteSAkc2V0bmFtZSA9ICJzZXQke2F0dHJOYW1lVXBw
ZXJ9IjsKLSAgICAgICAgaWYgKENsYXNzSGFzRnVuY3Rpb24oJGludGVyZmFjZSwgJGdldG5hbWUp
IHx8IENsYXNzSGFzRnVuY3Rpb24oJGludGVyZmFjZSwgJHNldG5hbWUpKSB7Ci0gICAgICAgICAg
ICAjIFZlcnkgb2NjYXNpb25hbGx5IGFuIElETCBmaWxlIGRlZmluZXMgZ2V0dGVyL3NldHRlciBm
dW5jdGlvbnMgZm9yIG9uZSBvZiBpdHMKLSAgICAgICAgICAgICMgYXR0cmlidXRlczsgaW4gdGhp
cyBjYXNlIHdlIGRvbid0IG5lZWQgdG8gYXV0b2dlbmVyYXRlIHRoZSBnZXR0ZXIvc2V0dGVyLgot
ICAgICAgICAgICAgbmV4dCBUT1A7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICMgR2Vu
ZXJhdGUgYW4gYXR0cmlidXRlIGdldHRlci4gIEZvciBhbiBhdHRyaWJ1dGUgImZvbyIsIHRoaXMg
aXMgYSBmdW5jdGlvbiBuYW1lZAotICAgICAgICAjICJnZXRfZm9vIiB3aGljaCBjYWxscyBhIERP
TSBjbGFzcyBtZXRob2QgbmFtZWQgZm9vKCkuCi0gICAgICAgIG15ICRmdW5jdGlvbiA9IG5ldyBk
b21GdW5jdGlvbigpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzKHsleyRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzfX0pOwotICAg
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2V0
dGVyUmFpc2VzRXhjZXB0aW9uIn0pIHsKLSAgICAgICAgICAgICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uIn0gPSAiVkFMVUVfSVNfTUlT
U0lORyI7Ci0gICAgICAgIH0KLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50
ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAiZ2V0XyIsICRpbnRlcmZhY2UpOwotCi0gICAgICAgICMg
RklYTUU6IFdlIGFyZSBub3QgZ2VuZXJhdGluZyBzZXR0ZXJzIGZvciAnUmVwbGFjZWFibGUnCi0g
ICAgICAgICMgYXR0cmlidXRlcyBub3csIGJ1dCB3ZSBzaG91bGQgc29tZWhvdy4KLSAgICAgICAg
bXkgJGN1c3RvbSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbVNldHRlciJ9OwotICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+aXNSZWFkT25seSB8fCAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9
Ci0gICAgICAgICAgICB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDYWxsV2l0aCJ9Ci0gICAgICAgICAgICB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJTZXR0ZXJDYWxsV2l0aCJ9IHx8ICRjdXN0b20pIHsKLSAgICAg
ICAgICAgIG5leHQgVE9QOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAjIEdlbmVyYXRl
IGFuIGF0dHJpYnV0ZSBzZXR0ZXIuICBGb3IgYW4gYXR0cmlidXRlLCAiZm9vIiwgdGhpcyBpcyBh
IGZ1bmN0aW9uIG5hbWVkCi0gICAgICAgICMgInNldF9mb28iIHdoaWNoIGNhbGxzIGEgRE9NIGNs
YXNzIG1ldGhvZCBuYW1lZCBzZXRGb28oKS4KLSAgICAgICAgJGZ1bmN0aW9uID0gbmV3IGRvbUZ1
bmN0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZShuZXcgZG9t
U2lnbmF0dXJlKCkpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPm5hbWUpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlw
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKHsleyRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzfX0pOwotICAgICAgICAKLSAgICAgICAgbXkgJHBhcmFtID0gbmV3IGRvbVNp
Z25hdHVyZSgpOwotICAgICAgICAkcGFyYW0tPm5hbWUoInZhbHVlIik7Ci0gICAgICAgICRwYXJh
bS0+dHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwotICAgICAgICAkcGFyYW0tPmlz
TnVsbGFibGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKTsKLSAgICAgICAgbXkg
JWF0dHJpYnV0ZXMgPSAoKTsKLSAgICAgICAgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMoXCVh
dHRyaWJ1dGVzKTsKLSAgICAgICAgbXkgJGFycmF5UmVmID0gJGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
OwotICAgICAgICBwdXNoKEAkYXJyYXlSZWYsICRwYXJhbSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU2V0dGVyUmFp
c2VzRXhjZXB0aW9uIn0pIHsKLSAgICAgICAgICAgICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uIn0gPSAiVkFMVUVfSVNfTUlTU0lORyI7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWxldGUgJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSYWlzZXNFeGNlcHRpb24ifTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFt
ZSwgJGZ1bmN0aW9uLCAic2V0XyIsICRpbnRlcmZhY2UpOwotICAgIH0KLX0KLQotc3ViIEltcGxl
bWVudHNJbnRlcmZhY2UgewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkaW1w
bGVtZW50SW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJGNvZGVHZW5lcmF0b3ItPklu
aGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRpbXBsZW1lbnRJbnRlcmZhY2UpOwotfQotCi1z
dWIgR2VuZXJhdGVDRmlsZSB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2VOYW1lLCAkcGFy
ZW50Q2xhc3NOYW1lLCAkcGFyZW50R09ialR5cGUsICRpbnRlcmZhY2UpID0gQF87Ci0KLSAgICBp
ZiAoSW1wbGVtZW50c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAiRXZlbnRUYXJnZXQiKSkgewotICAg
ICAgICAkb2JqZWN0LT5HZW5lcmF0ZUV2ZW50VGFyZ2V0SWZhY2UoJGludGVyZmFjZSk7Ci0gICAg
fQotCi0gICAgbXkgJGltcGxDb250ZW50ID0gIiI7Ci0KLSAgICBteSAkZGVjYW1lbGl6ZSA9IGRl
Y2FtZWxpemUoJGludGVyZmFjZU5hbWUpOwotICAgIG15ICRjbHNDYXBzID0gdWMoJGRlY2FtZWxp
emUpOwotICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUgPSAid2Via2l0X2RvbV8kZGVjYW1lbGl6
ZSI7Ci0gICAgbXkgJHBhcmVudEltcGxDbGFzc05hbWUgPSBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1l
KCRpbnRlcmZhY2UpOwotICAgIG15ICRiYXNlQ2xhc3NOYW1lID0gR2V0QmFzZUNsYXNzKCRwYXJl
bnRJbXBsQ2xhc3NOYW1lLCAkaW50ZXJmYWNlKTsKLQotICAgICMgQWRkIGEgcHJpdmF0ZSBzdHJ1
Y3Qgb25seSBmb3IgZGlyZWN0IHN1YmNsYXNzZXMgb2YgT2JqZWN0IHNvIHRoYXQgd2UgY2FuIHVz
ZSBSZWZQdHIKLSAgICAjIGZvciB0aGUgV2ViQ29yZSB3cmFwcGVkIG9iamVjdCBhbmQgbWFrZSBz
dXJlIHdlIG9ubHkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRlciBvbmNlLgotICAgIGlm
ICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygk
aW50ZXJmYWNlKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIjZGVmaW5lIFdFQktJVF9E
T01fJHtjbHNDYXBzfV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShvYmosIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1Qcml2YXRlKVxu
XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICJ0eXBlZGVmIHN0cnVjdCBfJHtjbGFz
c05hbWV9UHJpdmF0ZSB7XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIjaWYgJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAgcHVz
aChAY1N0cnVjdFByaXYsICIgICAgUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IGNv
cmVPYmplY3Q7XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIjZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAgcHVz
aChAY1N0cnVjdFByaXYsICJ9ICR7Y2xhc3NOYW1lfVByaXZhdGU7XG5cbiIpOwotICAgIH0KLQot
ICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwotJHtkZWZpbmVUeXBlTWFjcm99KCR7Y2xhc3NO
YW1lfSwgJHtsb3dlckNhc2VJZmFjZU5hbWV9LCAke3BhcmVudEdPYmpUeXBlfSR7ZGVmaW5lVHlw
ZUludGVyZmFjZUltcGxlbWVudGF0aW9ufQotCi1FT0YKLSAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJHBhcmVudEltcGxDbGFzc05hbWUgZXEgIk9i
amVjdCIpIHsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiJHtjbGFzc05hbWV9KiBraXQoV2Vi
Q29yZTo6JGludGVyZmFjZU5hbWUqIG9iailcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYs
ICJ7XG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgIGlmICghb2JqKVxuIik7Ci0g
ICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICAgICAgcmV0dXJuIDA7XG5cbiIpOwotICAgICAg
ICBwdXNoKEBjQm9keVByaXYsICIgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSlcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgICAgIHJldHVy
biBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ocmV0KTtcblxuIik7Ci0gICAgICAgIGlmIChJc1BvbHlt
b3JwaGljKCRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICAgICAgcHVzaChAY0JvZHlQcml2LCAi
ICAgIHJldHVybiB3cmFwKG9iaik7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHB1c2goQGNCb2R5UHJpdiwgIiAgICByZXR1cm4gd3JhcCR7aW50ZXJmYWNlTmFtZX0ob2JqKTtc
biIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIn1cblxuIik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiJHtjbGFzc05hbWV9KiBraXQoV2Vi
Q29yZTo6JGludGVyZmFjZU5hbWUqIG9iailcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYs
ICJ7XG4iKTsKLSAgICAgICAgaWYgKCFJc1BvbHltb3JwaGljKCRiYXNlQ2xhc3NOYW1lKSkgewot
ICAgICAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgIGlmICghb2JqKVxuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgICAgIHJldHVybiAwO1xuXG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2Fj
aGU6OmdldChvYmopKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgICAg
IHJldHVybiBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ocmV0KTtcblxuIik7Ci0gICAgICAgICAgICBw
dXNoKEBjQm9keVByaXYsICIgICAgcmV0dXJuIHdyYXAke2ludGVyZmFjZU5hbWV9KG9iaik7XG4i
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICBy
ZXR1cm4gV0VCS0lUX0RPTV8ke2Nsc0NhcHN9KGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjokYmFz
ZUNsYXNzTmFtZSo+KG9iaikpKTtcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5
UHJpdiwgIn1cblxuIik7Ci0gICAgfQotCi0gICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1X
ZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlKCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkKLXsK
LSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFt
ZX0qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi0k
e2NsYXNzTmFtZX0qIHdyYXAke2ludGVyZmFjZU5hbWV9KFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFt
ZX0qIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBX
RUJLSVRfRE9NXyR7Y2xzQ2Fwc30oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV8ke2Nsc0Nh
cHN9LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLUVPRgotICAg
IHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKLQotICAgICRvYmplY3QtPkdlbmVyYXRl
UHJvcGVydGllcygkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSk7Ci0gICAgJG9iamVjdC0+R2Vu
ZXJhdGVGdW5jdGlvbnMoJGludGVyZmFjZU5hbWUsICRpbnRlcmZhY2UpOwotfQotCi1zdWIgR2Vu
ZXJhdGVFbmRIZWFkZXIgewotICAgIG15ICgkb2JqZWN0KSA9IEBfOwotCi0gICAgbXkgJGlzU3Rh
YmxlQ2xhc3MgPSBzY2FsYXIoQHN0YWJsZVN5bWJvbHMpOwotICAgIGlmICghJGlzU3RhYmxlQ2xh
c3MpIHsKLSAgICAgICAgcHVzaChAaFByZWZpeEd1YXJkRW5kLCAiI2VuZGlmIC8qIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSSAqL1xuIik7Ci0gICAgfQotCi0gICAgI0hlYWRlciBndWFyZAot
ICAgIG15ICRndWFyZCA9ICRjbGFzc05hbWUgLiAiX2giOwotCi0gICAgcHVzaChAaEJvZHksICJH
X0VORF9ERUNMU1xuXG4iKTsKLSAgICBwdXNoKEBoUHJlZml4R3VhcmRFbmQsICIjZW5kaWYgLyog
JGd1YXJkICovXG4iKTsKLX0KLQotc3ViIElzUG9seW1vcnBoaWMgewotICAgIG15ICR0eXBlID0g
c2hpZnQ7Ci0KLSAgICByZXR1cm4gc2NhbGFyKGdyZXAgeyRfIGVxICR0eXBlfSBxdyhCbG9iIEV2
ZW50IEhUTUxDb2xsZWN0aW9uIE5vZGUgU3R5bGVTaGVldCBUZXh0VHJhY2tDdWUpKTsKLX0KLQot
c3ViIEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSB7Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0Owot
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLQotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGlu
dGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemUoJGludGVyZmFj
ZU5hbWUpOwotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgIG15IEBjb25kaXRpb25hbFdh
cm4gPSBHZW5lcmF0ZUNvbmRpdGlvbmFsV2FybmluZygkaW50ZXJmYWNlKTsKLQotICAgICRpbXBs
SW5jbHVkZXN7IkdPYmplY3RFdmVudExpc3RlbmVyLmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRl
c3siV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJXZWJL
aXRET01FdmVudFByaXZhdGUuaCJ9ID0gMTsKLQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywg
InN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJy
b3IqKiBlcnJvcilcbntcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNpZiAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBpZiAoIWNv
cmVFdmVudClcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICAgICAgcmV0dXJu
IGZhbHNlO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFdlYkNvcmU6OiR7
aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVy
ZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7XG5cbiIp
OwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwg
ZWMpO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGlmIChlYykge1xuICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpO1xu
Iik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKFwiV0VCS0lUX0RPTVwiKSwgZGVzY3JpcHRp
b24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7XG4gICAgfVxuIik7Ci0gICAgcHVzaChAY0JvZHlQ
cm9wZXJ0aWVzLCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICBpZiAoJGNvbmRpdGlvbmFs
U3RyaW5nKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbHNlXG4iKTsKLSAg
ICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpO1xu
Iik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0oZXZl
bnQpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFS
QU0oZXJyb3IpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQGNvbmRpdGlv
bmFsV2FybikgaWYgc2NhbGFyKEBjb25kaXRpb25hbFdhcm4pOwotICAgICAgICBwdXNoKEBjQm9k
eVByb3BlcnRpZXMsICIgICAgcmV0dXJuIGZhbHNlO1xuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxT
dHJpbmd9XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAifVxuXG4iKTsK
LQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
XyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpXG57XG4iKTsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIjaWYgJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGll
cywgIiAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTtcbiIpOwotICAgIGlmICgkY29uZGl0aW9uYWxTdHJpbmcpIHsKLSAgICAgICAg
cHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vsc2VcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVBy
b3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7XG4iKTsKLSAgICAgICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpO1xuIik7Ci0gICAg
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7XG4i
KTsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTSh1c2VD
YXB0dXJlKTtcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsIEBjb25kaXRpb25h
bFdhcm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxXYXJuKTsKLSAgICAgICAgcHVzaChAY0JvZHlQ
cm9wZXJ0aWVzLCAiICAgIHJldHVybiBmYWxzZTtcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3Ry
aW5nfVxuIik7Ci0gICAgfQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIn1cblxuIik7Ci0K
LSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV8k
e2RlY2FtZWxpemV9X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKVxue1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2lmICR7
Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAiICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7XG4iKTsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICIgICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7XG4iKTsKLSAgICBpZiAoJGNvbmRpdGlvbmFsU3RyaW5nKSB7Ci0gICAg
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbHNlXG4iKTsKLSAgICAgICAgcHVzaChAY0Jv
ZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpO1xuIik7Ci0gICAgICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTtcbiIpOwot
ICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIp
O1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0o
dXNlQ2FwdHVyZSk7XG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCBAY29uZGl0
aW9uYWxXYXJuKSBpZiBzY2FsYXIoQGNvbmRpdGlvbmFsV2Fybik7Ci0gICAgICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgIiAgICByZXR1cm4gZmFsc2U7XG4jZW5kaWYgLy8gJHtjb25kaXRpb25h
bFN0cmluZ31cbiIpOwotICAgIH0KLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJ9XG5cbiIp
OwotCi0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAic3RhdGljIHZvaWQgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSlcbntcbiIp
OwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQg
PSB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQ7XG4iKTsKLSAgICBwdXNo
KEBjQm9keVByb3BlcnRpZXMsICIgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21fJHtkZWNhbWVsaXplfV9hZGRfZXZlbnRfbGlzdGVuZXI7XG4iKTsKLSAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7XG59XG5cbiIpOwotCi0g
ICAgJGRlZmluZVR5cGVNYWNybyA9ICJHX0RFRklORV9UWVBFX1dJVEhfQ09ERSI7Ci0gICAgJGRl
ZmluZVR5cGVJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbiA9ICIsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkiOwotfQotCi1zdWIgR2VuZXJhdGUgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNl
KSA9IEBfOwotCi0gICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVudENsYXNzTmFtZSgk
aW50ZXJmYWNlKTsKLSAgICBteSAkcGFyZW50R09ialR5cGUgPSBHZXRQYXJlbnRHT2JqVHlwZSgk
aW50ZXJmYWNlKTsKLSAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0g
ICAgbXkgJHBhcmVudEltcGxDbGFzc05hbWUgPSBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1lKCRpbnRl
cmZhY2UpOwotICAgIG15ICRiYXNlQ2xhc3NOYW1lID0gR2V0QmFzZUNsYXNzKCRwYXJlbnRJbXBs
Q2xhc3NOYW1lLCAkaW50ZXJmYWNlKTsKLQotICAgICMgQWRkIHRoZSBkZWZhdWx0IGltcGwgaGVh
ZGVyIHRlbXBsYXRlCi0gICAgQGNQcmVmaXggPSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRl
KTsKLSAgICBwdXNoKEBjUHJlZml4LCAiXG4iKTsKLQotICAgICRpbXBsSW5jbHVkZXN7IkRPTU9i
amVjdENhY2hlLmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRlc3siV2ViS2l0RE9NUHJpdmF0ZS5o
In0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7ImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5o
In0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfVByaXZhdGUuaCJ9ID0gMTsK
LSAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVudC5oIn0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7
IkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIn0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7IkV4Y2Vw
dGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJDU1NJbXBvcnRSdWxlLmgifSA9IDE7
Ci0gICAgaWYgKCRwYXJlbnRJbXBsQ2xhc3NOYW1lIG5lICJPYmplY3QiIGFuZCBJc1BvbHltb3Jw
aGljKCRiYXNlQ2xhc3NOYW1lKSkgewotICAgICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET00k
e2Jhc2VDbGFzc05hbWV9UHJpdmF0ZS5oIn0gPSAxOwotICAgIH0KLQotICAgICRoZHJJbmNsdWRl
c3sid2Via2l0ZG9tLyR7cGFyZW50Q2xhc3NOYW1lfS5oIn0gPSAxOwotCi0gICAgJG9iamVjdC0+
R2VuZXJhdGVIZWFkZXIoJGludGVyZmFjZU5hbWUsICRwYXJlbnRDbGFzc05hbWUsICRpbnRlcmZh
Y2UpOwotICAgICRvYmplY3QtPkdlbmVyYXRlQ0ZpbGUoJGludGVyZmFjZU5hbWUsICRwYXJlbnRD
bGFzc05hbWUsICRwYXJlbnRHT2JqVHlwZSwgJGludGVyZmFjZSk7Ci0gICAgJG9iamVjdC0+R2Vu
ZXJhdGVFbmRIZWFkZXIoKTsKLX0KLQotc3ViIEhhc1Vuc3RhYmxlQ3VzdG9tQVBJIHsKLSAgICBt
eSAkZG9tQ2xhc3NOYW1lID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gc2NhbGFyKGdyZXAgeyRfIGVx
ICRkb21DbGFzc05hbWV9IHF3KFdlYktpdERPTURPTVdpbmRvdyBXZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXJzTmFtZXNwYWNlIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCkpOwotfQotCi1zdWIg
V3JpdGVEYXRhIHsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OwotICAgIG15ICRvdXRwdXREaXIgPSBzaGlmdDsKLSAgICBta2RpciAkb3V0cHV0RGly
OwotCi0gICAgbXkgJGlzU3RhYmxlQ2xhc3MgPSBzY2FsYXIoQHN0YWJsZVN5bWJvbHMpOwotCi0g
ICAgIyBXcml0ZSBhIHByaXZhdGUgaGVhZGVyLgotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGlu
dGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZmlsZW5hbWUgPSAiJG91dHB1dERpci8iIC4gJGNsYXNz
TmFtZSAuICJQcml2YXRlLmgiOwotICAgIG15ICRndWFyZCA9ICIke2NsYXNzTmFtZX1Qcml2YXRl
X2giOwotCi0gICAgIyBBZGQgdGhlIGd1YXJkIGlmIHRoZSAnQ29uZGl0aW9uYWwnIGV4dGVuZGVk
IGF0dHJpYnV0ZSBleGlzdHMKLSAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVy
YXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKLQotICAgIG9wZW4o
UFJJVkhFQURFUiwgIj4kZmlsZW5hbWUiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkZmls
ZW5hbWUgZm9yIHdyaXRpbmciOwotCi0gICAgcHJpbnQgUFJJVkhFQURFUiBzcGxpdCgiXHIiLCAk
bGljZW5jZVRlbXBsYXRlKTsKLSAgICBwcmludCBQUklWSEVBREVSICJcbiI7Ci0KLSAgICBteSAk
dGV4dCA9IDw8ICJFT0YiOwotI2lmbmRlZiAkZ3VhcmQKLSNkZWZpbmUgJGd1YXJkCi0KLSNpbmNs
dWRlICIke2ludGVyZmFjZU5hbWV9LmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tLyR7Y2xhc3NOYW1l
fS5oPgotRU9GCi0KLSAgICBwcmludCBQUklWSEVBREVSICR0ZXh0OwotICAgIHByaW50IFBSSVZI
RUFERVIgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
Ci0gICAgcHJpbnQgUFJJVkhFQURFUiAiXG4iOwotICAgICR0ZXh0ID0gPDwgIkVPRiI7Ci1uYW1l
c3BhY2UgV2ViS2l0IHsKLSR7Y2xhc3NOYW1lfSogd3JhcCR7aW50ZXJmYWNlTmFtZX0oV2ViQ29y
ZTo6JHtpbnRlcmZhY2VOYW1lfSopOwotJHtjbGFzc05hbWV9KiBraXQoV2ViQ29yZTo6JHtpbnRl
cmZhY2VOYW1lfSopOwotV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZSgke2NsYXNzTmFt
ZX0qKTsKLUVPRgotCi0gICAgcHJpbnQgUFJJVkhFQURFUiAkdGV4dDsKLQotICAgICR0ZXh0ID0g
PDwgIkVPRiI7Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotRU9GCi0KLSAgICBwcmludCBQUklW
SEVBREVSICR0ZXh0OwotICAgIHByaW50IFBSSVZIRUFERVIgIiNlbmRpZiAvKiAke2NvbmRpdGlv
bmFsU3RyaW5nfSAqL1xuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICBwcmludCBQUklW
SEVBREVSICIjZW5kaWYgLyogJHtndWFyZH0gKi9cbiI7Ci0KLSAgICBjbG9zZShQUklWSEVBREVS
KTsKLQotICAgIG15ICRiYXNlbmFtZSA9IEZpbGVOYW1lUHJlZml4IC4gJGludGVyZmFjZU5hbWU7
Ci0gICAgJGJhc2VuYW1lID1+IHMvXy8vZzsKLQotICAgICMgV3JpdGUgcHVibGljIGhlYWRlci4K
LSAgICBteSAkZnVsbEhlYWRlckZpbGVuYW1lID0gIiRvdXRwdXREaXIvIiAuICRiYXNlbmFtZSAu
ICIuaCI7Ci0gICAgbXkgJGluc3RhbGxlZEhlYWRlckZpbGVuYW1lID0gIiR7YmFzZW5hbWV9Lmgi
OwotICAgIG9wZW4oSEVBREVSLCAiPiRmdWxsSGVhZGVyRmlsZW5hbWUiKSBvciBkaWUgIkNvdWxk
bid0IG9wZW4gZmlsZSAkZnVsbEhlYWRlckZpbGVuYW1lIjsKLQotICAgIHByaW50IEhFQURFUiBA
aFByZWZpeDsKLSAgICBwcmludCBIRUFERVIgQGhQcmVmaXhHdWFyZDsKLSAgICBwcmludCBIRUFE
RVIgIiNpbmNsdWRlIDxnbGliLW9iamVjdC5oPlxuIjsKLSAgICBwcmludCBIRUFERVIgbWFwIHsg
IiNpbmNsdWRlIDwkXz5cbiIgfSBzb3J0IGtleXMoJWhkckluY2x1ZGVzKTsKLSAgICBpZiAoJGlz
U3RhYmxlQ2xhc3MpIHsKLSAgICAgICAgcHJpbnQgSEVBREVSICIjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD5cblxuIjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoSGFz
VW5zdGFibGVDdXN0b21BUEkoJGNsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgIHByaW50IEhFQURF
UiAiI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DdXN0b21VbnN0YWJsZS5oPlxuIjsKLSAg
ICAgICAgfQotICAgICAgICBwcmludCBIRUFERVIgIiNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPlxuXG4iOwotICAgIH0KLSAgICBwcmludCBIRUFERVIgQGhC
b2R5UHJlOwotICAgIHByaW50IEhFQURFUiBAaEJvZHk7Ci0gICAgcHJpbnQgSEVBREVSIEBoUHJl
Zml4R3VhcmRFbmQ7Ci0KLSAgICBjbG9zZShIRUFERVIpOwotCi0gICAgIyBXcml0ZSB0aGUgdW5z
dGFibGUgaGVhZGVyIGlmIG5lZWRlZC4KLSAgICBpZiAoJGlzU3RhYmxlQ2xhc3MgYW5kIHNjYWxh
cihAaEJvZHlVbnN0YWJsZSkpIHsKLSAgICAgICAgbXkgJGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVu
YW1lID0gIiRvdXRwdXREaXIvIiAuICRjbGFzc05hbWUgLiAiVW5zdGFibGUuaCI7Ci0gICAgICAg
IG9wZW4oVU5TVEFCTEUsICI+JGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVuYW1lIikgb3IgZGllICJD
b3VsZG4ndCBvcGVuIGZpbGUgJGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVuYW1lIjsKLQotICAgICAg
ICBwcmludCBVTlNUQUJMRSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKLSAgICAgICAg
cHJpbnQgVU5TVEFCTEUgIlxuIjsKLQotICAgICAgICAkZ3VhcmQgPSAiJHtjbGFzc05hbWV9VW5z
dGFibGVfaCI7Ci0gICAgICAgICR0ZXh0ID0gPDwgIkVPRiI7Ci0jaWZuZGVmICRndWFyZAotI2Rl
ZmluZSAkZ3VhcmQKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi1FT0YK
LSAgICAgICAgcHJpbnQgVU5TVEFCTEUgJHRleHQ7Ci0gICAgICAgIGlmIChIYXNVbnN0YWJsZUN1
c3RvbUFQSSgkY2xhc3NOYW1lKSkgewotICAgICAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUuaD5cbiI7Ci0gICAgICAgIH0K
LSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVm
aW5lcy11bnN0YWJsZS5oPlxuXG4iOwotCi0gICAgICAgIHByaW50IFVOU1RBQkxFICIjaWYgJHtj
b25kaXRpb25hbFN0cmluZ31cblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgICAgIHBy
aW50IFVOU1RBQkxFICJHX0JFR0lOX0RFQ0xTXG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSAi
XG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSBAaEJvZHlVbnN0YWJsZTsKLSAgICAgICAgcHJp
bnQgVU5TVEFCTEUgIlxuIjsKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIkdfRU5EX0RFQ0xTXG4i
OwotICAgICAgICBwcmludCBVTlNUQUJMRSAiXG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSAi
I2VuZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG5cbiIgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwotICAgICAgICBwcmludCBVTlNUQUJMRSAiI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqL1xuIjsKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNlbmRpZiAvKiAke2d1
YXJkfSAqL1xuIjsKLQotICAgICAgICBjbG9zZShVTlNUQUJMRSk7Ci0gICAgfQotCi0gICAgIyBX
cml0ZSB0aGUgaW1wbGVtZW50YXRpb24gc291cmNlcwotICAgIG15ICRpbXBsRmlsZU5hbWUgPSAi
JG91dHB1dERpci8iIC4gJGJhc2VuYW1lIC4gIi5jcHAiOwotICAgIG9wZW4oSU1QTCwgIj4kaW1w
bEZpbGVOYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGltcGxGaWxlTmFtZSI7Ci0K
LSAgICBwcmludCBJTVBMIEBjUHJlZml4OwotICAgIHByaW50IElNUEwgIiNpbmNsdWRlIFwiY29u
ZmlnLmhcIlxuIjsKLSAgICBwcmludCBJTVBMICIjaW5jbHVkZSBcIiRpbnN0YWxsZWRIZWFkZXJG
aWxlbmFtZVwiXG5cbiI7Ci0KLSAgICAjIFJlbW92ZSB0aGUgaW1wbGVtZW50YXRpb24gaGVhZGVy
IGZyb20gdGhlIGxpc3Qgb2YgaW5jbHVkZWQgZmlsZXMuCi0gICAgJWluY2x1ZGVzQ29weSA9ICVp
bXBsSW5jbHVkZXM7Ci0gICAgcHJpbnQgSU1QTCBtYXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0g
c29ydCBrZXlzKCVpbmNsdWRlc0NvcHkpOwotICAgIGlmICgkaXNTdGFibGVDbGFzcyBhbmQgc2Nh
bGFyKEBoQm9keVVuc3RhYmxlKSkgewotICAgICAgICBwcmludCBJTVBMICIjaW5jbHVkZSBcIiR7
Y2xhc3NOYW1lfVVuc3RhYmxlLmhcIlxuIjsKLSAgICB9Ci0KLSAgICBwcmludCBJTVBMICIjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPlxuIjsKLSAgICBwcmludCBJTVBMICIjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPlxuXG4iOwotICAgIHByaW50IElNUEwgQGNTdHJ1Y3RQcml2OwotICAgIHByaW50IElN
UEwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsK
LQotICAgIHByaW50IElNUEwgIm5hbWVzcGFjZSBXZWJLaXQge1xuXG4iOwotICAgIHByaW50IElN
UEwgQGNCb2R5UHJpdjsKLSAgICBwcmludCBJTVBMICJ9IC8vIG5hbWVzcGFjZSBXZWJLaXRcblxu
IjsKLSAgICBwcmludCBJTVBMICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cblxuIiBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0KLSAgICBwcmludCBJTVBMIEBjQm9keVByb3BlcnRpZXM7
Ci0gICAgcHJpbnQgSU1QTCBAY0JvZHk7Ci0KLSAgICBjbG9zZShJTVBMKTsKLQotICAgICMgV3Jp
dGUgYSBzeW1ib2xzIGZpbGUuCi0gICAgaWYgKCRpc1N0YWJsZUNsYXNzKSB7Ci0gICAgICAgIG15
ICRzeW1ib2xzRmlsZU5hbWUgPSAiJG91dHB1dERpci8iIC4gJGJhc2VuYW1lIC4gIi5zeW1ib2xz
IjsKLSAgICAgICAgb3BlbihTWU0sICI+JHN5bWJvbHNGaWxlTmFtZSIpIG9yIGRpZSAiQ291bGRu
J3Qgb3BlbiBmaWxlICRzeW1ib2xzRmlsZU5hbWUiOwotICAgICAgICBwcmludCBTWU0gQHN5bWJv
bHM7Ci0gICAgICAgIGNsb3NlKFNZTSk7Ci0gICAgfQotCi0gICAgJWltcGxJbmNsdWRlcyA9ICgp
OwotICAgICVoZHJJbmNsdWRlcyA9ICgpOwotICAgIEBoUHJlZml4ID0gKCk7Ci0gICAgQGhCb2R5
ID0gKCk7Ci0gICAgQGhCb2R5VW5zdGFibGUgPSAoKTsKLQotICAgIEBjUHJlZml4ID0gKCk7Ci0g
ICAgQGNCb2R5ID0gKCk7Ci0gICAgQGNCb2R5UHJpdiA9ICgpOwotICAgIEBjQm9keVByb3BlcnRp
ZXMgPSAoKTsKLSAgICBAY1N0cnVjdFByaXYgPSAoKTsKLQotICAgIEBzeW1ib2xzID0gKCk7Ci0g
ICAgQHN0YWJsZVN5bWJvbHMgPSAoKTsKLX0KLQotc3ViIElzSW50ZXJmYWNlU3ltYm9sIHsKLSAg
ICBteSAoJGxpbmUsICRsb3dlckNhc2VJZmFjZU5hbWUpID0gQF87Ci0KLSAgICAjIEZ1bmN0aW9u
LgotICAgIHJldHVybiAxIGlmICRsaW5lID1+IC9eW2EtekEtWjAtOVwqXStccyR7bG93ZXJDYXNl
SWZhY2VOYW1lfV8uKyQvOwotCi0gICAgIyBDb25zdGFudC4KLSAgICBteSAkcHJlZml4ID0gdWMo
JGxvd2VyQ2FzZUlmYWNlTmFtZSk7Ci0gICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL14ke3ByZWZp
eH1fW0EtWl9dKyQvOwotICAgIHJldHVybiAwOwotfQotCi1zdWIgUmVhZFN0YWJsZVN5bWJvbHMg
ewotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7Ci0KLSAgICBAc3RhYmxlU3ltYm9scyA9
ICgpOwotCi0gICAgbXkgJGJpbmRpbmdzRGlyID0gZGlybmFtZSgkRmluZEJpbjo6QmluKTsKLSAg
ICBteSAkZmlsZU5hbWUgPSAiJGJpbmRpbmdzRGlyL2dvYmplY3Qvd2Via2l0ZG9tLnN5bWJvbHMi
OwotICAgIG9wZW4gRklMRSwgIjwiLCAkZmlsZU5hbWUgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAk
ZmlsZU5hbWUiOwotICAgIG15IEBsaW5lcyA9IDxGSUxFPjsKLSAgICBjbG9zZSBGSUxFOwotCi0g
ICAgbXkgJGRlY2FtZWxpemUgPSBkZWNhbWVsaXplKCRpbnRlcmZhY2VOYW1lKTsKLSAgICBteSAk
bG93ZXJDYXNlSWZhY2VOYW1lID0gIndlYmtpdF9kb21fJGRlY2FtZWxpemUiOwotCi0gICAgZm9y
ZWFjaCAkbGluZSAoQGxpbmVzKSB7Ci0gICAgICAgICRsaW5lID1+IHMvXG4kLy87Ci0KLSAgICAg
ICAgbXkgKCRzeW1ib2wpID0gc3BsaXQoJ0AnLCAkbGluZSwgMik7Ci0KLSAgICAgICAgaWYgKCRz
eW1ib2wgZXEgIkdUeXBlICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9nZXRfdHlwZSh2b2lkKSIpIHsK
LSAgICAgICAgICAgIHB1c2goQHN0YWJsZVN5bWJvbHMsICRsaW5lKTsKLSAgICAgICAgICAgIG5l
eHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NhbGFyKEBzdGFibGVTeW1ib2xzKSBhbmQg
SXNJbnRlcmZhY2VTeW1ib2woJHN5bWJvbCwgJGxvd2VyQ2FzZUlmYWNlTmFtZSkgYW5kICRzeW1i
b2wgIX4gL15HVHlwZS8pIHsKLSAgICAgICAgICAgIHB1c2goQHN0YWJsZVN5bWJvbHMsICRsaW5l
KTsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NhbGFyKEBz
dGFibGVTeW1ib2xzKSBhbmQgJHN5bWJvbCAhfiAvXkdUeXBlLykgewotICAgICAgICAgICAgd2Fy
biAiU3ltYm9sICVsaW5lIGZvdW5kLCBidXQgYSBnZXRfdHlwZSB3YXMgZXhwZWN0ZWQiOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbGFzdCBpZiBzY2FsYXIoQHN0YWJsZVN5bWJvbHMpOwotICAgIH0K
LX0KLQotc3ViIEdlbmVyYXRlSW50ZXJmYWNlIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFj
ZSwgJGRlZmluZXMpID0gQF87Ci0KLSAgICAjIFNldCB1cCBzb21lIGdsb2JhbCB2YXJpYWJsZXMK
LSAgICAkY2xhc3NOYW1lID0gR2V0Q2xhc3NOYW1lKCRpbnRlcmZhY2UtPm5hbWUpOwotCi0gICAg
UmVhZFN0YWJsZVN5bWJvbHMoJGludGVyZmFjZS0+bmFtZSk7Ci0KLSAgICAkb2JqZWN0LT5HZW5l
cmF0ZSgkaW50ZXJmYWNlKTsKLX0KLQotMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L0dPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L0dPYmplY3RUZXN0
U3VwcGxlbWVudGFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxOGNlNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9HT2JqZWN0VGVzdFN1cHBsZW1lbnRhbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAg
QEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2Ny
aXB0cyB0aGF0IEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmggYW5kCi0gICAgR09iamVjdFRlc3RT
dXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5k
IHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVy
YXRlIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmggYW5kCi0gICAgR09iamVjdFRlc3RTdXBwbGVt
ZW50YWwuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8g
Y29tcGlsZS4KLSovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9HT2JqZWN0VGVzdFN1cHBsZW1lbnRhbC5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvR09iamVjdFRlc3RTdXBwbGVtZW50YWwuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxOGNlNS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9HT2JqZWN0VGVzdFN1cHBs
ZW1lbnRhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vKgotICAgIFRoaXMgZmls
ZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBHT2JqZWN0VGVz
dFN1cHBsZW1lbnRhbC5oIGFuZAotICAgIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNwcCBhcmUg
Y3JlYXRlZCBmb3IgVGVzdFN1cHBsZW1lbnRhbC5pZGwsIGFuZCB0aHVzCi0gICAgcHJldmVudCB0
aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBHT2JqZWN0VGVzdFN1cHBs
ZW1lbnRhbC5oIGFuZAotICAgIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBi
dWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NRmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUzOTJkOTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTUZsb2F0NjRBcnJheS5oIgotCi0jaW5jbHVk
ZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgot
I2luY2x1ZGUgIldlYktpdERPTUZsb2F0MzJBcnJheVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NSW50MzJBcnJh
eVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgotI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiBraXQoV2ViQ29y
ZTo6RmxvYXQ2NEFycmF5KiBvYmopCi17Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fRkxPQVQ2NEFS
UkFZKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOwotfQotCi1XZWJDb3Jl
OjpGbG9hdDY0QXJyYXkqIGNvcmUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiByZXF1ZXN0KQotewot
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RmxvYXQ2NEFycmF5Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKLX0KLQotV2ViS2l0
RE9NRmxvYXQ2NEFycmF5KiB3cmFwRmxvYXQ2NEFycmF5KFdlYkNvcmU6OkZsb2F0NjRBcnJheSog
Y29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJ
VF9ET01fRkxPQVQ2NEFSUkFZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRkxPQVQ2NEFS
UkFZLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTUZsb2F0NjRBcnJheSwgd2Via2l0
X2RvbV9mbG9hdDY0YXJyYXksIFdFQktJVF9ET01fVFlQRV9BUlJBWV9CVUZGRVJfVklFVykKLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfY2xhc3NfaW5pdChXZWJLaXRET01G
bG9hdDY0QXJyYXlDbGFzcyogcmVxdWVzdENsYXNzKQotewotfQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2Zsb2F0NjRhcnJheV9pbml0KFdlYktpdERPTUZsb2F0NjRBcnJheSogcmVxdWVzdCkK
LXsKLX0KLQotV2ViS2l0RE9NSW50MzJBcnJheSoKLXdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2Zv
byhXZWJLaXRET01GbG9hdDY0QXJyYXkqIHNlbGYsIFdlYktpdERPTUZsb2F0MzJBcnJheSogYXJy
YXkpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRkxPQVQ2NEFSUkFZKHNlbGYpLCAwKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJBUlJBWShhcnJh
eSksIDApOwotICAgIFdlYkNvcmU6OkZsb2F0NjRBcnJheSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkqIGNvbnZlcnRlZEFycmF5ID0gV2ViS2l0
Ojpjb3JlKGFycmF5KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW50MzJBcnJheT4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvbyhjb252ZXJ0ZWRBcnJheSkpOwotICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2
NEFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01GbG9hdDY0QXJyYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdm
MGQwNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICsw
LDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmICFkZWZpbmVkKF9fV0VCS0lURE9N
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKLSNlcnJvciAiT25seSA8
d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgotI2VuZGlm
Ci0KLSNpZm5kZWYgV2ViS2l0RE9NRmxvYXQ2NEFycmF5X2gKLSNkZWZpbmUgV2ViS2l0RE9NRmxv
YXQ2NEFycmF5X2gKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUFycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfRkxPQVQ2NEFSUkFZICAgICAgICAgICAgKHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2dldF90
eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9GTE9BVDY0
QVJSQVksIFdlYktpdERPTUZsb2F0NjRBcnJheSkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2
NEFSUkFZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9GTE9BVDY0QVJSQVksIFdlYktpdERPTUZsb2F0NjRBcnJheUNsYXNz
KQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX0ZMT0FUNjRBUlJBWShvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRkxPQVQ2NEFSUkFZ
KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19GTE9BVDY0QVJSQVlfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0ZMT0FUNjRBUlJB
WSkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9GTE9BVDY0QVJS
QVksIFdlYktpdERPTUZsb2F0NjRBcnJheUNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01GbG9h
dDY0QXJyYXkgewotICAgIFdlYktpdERPTUFycmF5QnVmZmVyVmlldyBwYXJlbnRfaW5zdGFuY2U7
Ci19OwotCi1zdHJ1Y3QgX1dlYktpdERPTUZsb2F0NjRBcnJheUNsYXNzIHsKLSAgICBXZWJLaXRE
T01BcnJheUJ1ZmZlclZpZXdDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdU
eXBlCi13ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9nZXRfdHlwZSAodm9pZCk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfZm9vOgotICogQHNlbGY6IEEgI1dlYktpdERPTUZsb2F0
NjRBcnJheQotICogQGFycmF5OiBBICNXZWJLaXRET01GbG9hdDMyQXJyYXkKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6Ci0gKgotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTUludDMy
QXJyYXkqCi13ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9mb28oV2ViS2l0RE9NRmxvYXQ2NEFycmF5
KiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkqIGFycmF5KTsKLQotR19FTkRfREVDTFMKLQot
I2VuZGlmIC8qIFdlYktpdERPTUZsb2F0NjRBcnJheV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJy
YXlQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGNlZWMyOTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IFdlYktpdERPTUZsb2F0NjRBcnJheVByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01GbG9hdDY0
QXJyYXlQcml2YXRlX2gKLQotI2luY2x1ZGUgIkZsb2F0NjRBcnJheS5oIgotI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01GbG9hdDY0QXJyYXkuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1X
ZWJLaXRET01GbG9hdDY0QXJyYXkqIHdyYXBGbG9hdDY0QXJyYXkoV2ViQ29yZTo6RmxvYXQ2NEFy
cmF5Kik7Ci1XZWJLaXRET01GbG9hdDY0QXJyYXkqIGtpdChXZWJDb3JlOjpGbG9hdDY0QXJyYXkq
KTsKLVdlYkNvcmU6OkZsb2F0NjRBcnJheSogY29yZShXZWJLaXRET01GbG9hdDY0QXJyYXkqKTsK
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NRmxvYXQ2NEFycmF5
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01JbnRlcmZhY2VOYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVyZmFjZU5hbWUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGIwZjUxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVy
ZmFjZU5hbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01JbnRlcmZhY2VOYW1lLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01J
bnRlcmZhY2VOYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNp
bmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fSU5U
RVJGQUNFX05BTUVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNFX05BTUUsIFdlYktpdERPTUludGVyZmFjZU5h
bWVQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSW50ZXJmYWNlTmFtZVByaXZh
dGUgewotICAgIFJlZlB0cjxXZWJDb3JlOjpJbnRlcmZhY2VOYW1lPiBjb3JlT2JqZWN0OwotfSBX
ZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdl
YktpdERPTUludGVyZmFjZU5hbWUqIGtpdChXZWJDb3JlOjpJbnRlcmZhY2VOYW1lKiBvYmopCi17
Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
SU5URVJGQUNFX05BTUUocmV0KTsKLQotICAgIHJldHVybiB3cmFwSW50ZXJmYWNlTmFtZShvYmop
OwotfQotCi1XZWJDb3JlOjpJbnRlcmZhY2VOYW1lKiBjb3JlKFdlYktpdERPTUludGVyZmFjZU5h
bWUqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpJbnRlcmZhY2VOYW1lKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKLX0KLQotV2ViS2l0RE9NSW50ZXJmYWNlTmFtZSogd3JhcEludGVyZmFjZU5hbWUoV2Vi
Q29yZTo6SW50ZXJmYWNlTmFtZSogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVj
dCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fSU5URVJGQUNFX05BTUUoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShX
ZWJLaXRET01JbnRlcmZhY2VOYW1lLCB3ZWJraXRfZG9tX2ludGVyZmFjZV9uYW1lLCBXRUJLSVRf
RE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2ludGVyZmFjZV9uYW1l
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01JbnRlcmZhY2VOYW1l
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fSU5URVJGQUNFX05BTUVfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZSgp
OwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21faW50ZXJmYWNlX25hbWVfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21f
aW50ZXJmYWNlX25hbWVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Ci17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9pbnRl
cmZhY2VfbmFtZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NSW50ZXJm
YWNlTmFtZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0lOVEVSRkFDRV9OQU1FX0dFVF9QUklW
QVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkludGVyZmFjZU5hbWUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsK
LSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwg
b2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21faW50ZXJmYWNlX25hbWVfY2xhc3NfaW5pdChXZWJLaXRET01JbnRlcmZhY2VOYW1lQ2xhc3Mq
IHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdv
YmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUludGVyZmFjZU5hbWVQcml2YXRlKSk7Ci0gICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21faW50ZXJmYWNlX25hbWVfY29u
c3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21faW50ZXJm
YWNlX25hbWVfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21faW50ZXJmYWNl
X25hbWVfaW5pdChXZWJLaXRET01JbnRlcmZhY2VOYW1lKiByZXF1ZXN0KQotewotICAgIFdlYktp
dERPTUludGVyZmFjZU5hbWVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9JTlRFUkZBQ0VfTkFN
RV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTUludGVyZmFj
ZU5hbWVQcml2YXRlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Zjg4
NjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjUgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuaCIKLQot
I2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RBY3RpdmVET01PYmpl
Y3RQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9BQ1RJVkVf
RE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUpCi0KLXR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSB7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3Q+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmpl
Y3QqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAo
Z3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4g
V0VCS0lUX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNUKHJldCk7Ci0KLSAgICByZXR1cm4gd3Jh
cFRlc3RBY3RpdmVET01PYmplY3Qob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9i
amVjdCogY29yZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQotewotICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVj
dCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdl
YktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdlYkNv
cmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVP
YmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0FDVElWRV9ET01fT0JKRUNULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QsIHdlYmtpdF9k
b21fdGVzdF9hY3RpdmVfZG9tX29iamVjdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotZW51
bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfRVhDSVRJTkdfQVRUUiwKLX07Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9maW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsK
LQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSgp
OwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0g
ICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9B
Q1RJVkVfRE9NX09CSkVDVChvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0g
ICAgY2FzZSBQUk9QX0VYQ0lUSU5HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVz
dF9hY3RpdmVfZG9tX29iamVjdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQUNU
SVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCo+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVj
dDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2Ns
YXNzX2luaXQoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzKiByZXF1ZXN0Q2xhc3Mp
Ci17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSkpOwotICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfY29u
c3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfcHJvcGVydHk7Ci0KLSAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgIFBST1BfRVhDSVRJTkdfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
Ci0gICAgICAgICAgICAiZXhjaXRpbmctYXR0ciIsCi0gICAgICAgICAgICAiVGVzdEFjdGl2ZURP
TU9iamVjdDpleGNpdGluZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVGVz
dEFjdGl2ZURPTU9iamVjdDpleGNpdGluZy1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywg
R19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2luaXQoV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0
QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9N
X09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
c3RBY3RpdmVET01PYmplY3RQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3QqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5leHRDaGlsZCkKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OT0RFKG5leHRDaGlsZCkpOwotICAgIFdlYkNvcmU6OlRlc3RBY3Rp
dmVET01PYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6Tm9k
ZSogY29udmVydGVkTmV4dENoaWxkID0gV2ViS2l0Ojpjb3JlKG5leHRDaGlsZCk7Ci0gICAgaXRl
bS0+ZXhjaXRpbmdGdW5jdGlvbigqY29udmVydGVkTmV4dENoaWxkKTsKLX0KLQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKFdlYktpdERPTVRlc3RB
Y3RpdmVET01PYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChzZWxmKSk7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChtZXNzYWdlKTsKLSAgICBXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lc3NhZ2Ug
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSk7Ci0gICAgaXRlbS0+cG9zdE1lc3NhZ2Uo
Y29udmVydGVkTWVzc2FnZSk7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9t
X29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBz
ZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qo
c2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+ZXhjaXRpbmdBdHRyKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEFjdGl2ZURPTU9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDQ2
N2E2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdF9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3RfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3Qu
aD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1H
X0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9P
QkpFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2dldF90
eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9BQ1RJVkVfRE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCkp
Ci0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9BQ1RJVkVfRE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzKQot
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
QUNUSVZFX0RPTV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RP
TV9PQkpFQ1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9PQkpF
Q1QsIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdCB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzIHsK
LSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJ
IEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X3R5cGUodm9pZCk7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5nX2Z1
bmN0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QKLSAqIEBu
ZXh0Q2hpbGQ6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4
Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIFdlYktp
dERPTU5vZGUqIG5leHRDaGlsZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X3Bvc3RfbWVzc2FnZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0QWN0aXZl
RE9NT2JqZWN0Ci0gKiBAbWVzc2FnZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2Jq
ZWN0X3Bvc3RfbWVzc2FnZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBzZWxmLCBjb25z
dCBnY2hhciogbWVzc2FnZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21f
b2JqZWN0X2dldF9leGNpdGluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RBY3Rp
dmVET01PYmplY3QKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X2dldF9leGNpdGluZ19hdHRyKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3Qq
IHNlbGYpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0LnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0LnN5
bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmN2FjMWEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEFjdGl2ZURPTU9iamVjdC5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBA
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlv
bihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiwgV2ViS2l0RE9NTm9kZSopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9wb3N0X21lc3NhZ2UoV2ViS2l0RE9NVGVz
dEFjdGl2ZURPTU9iamVjdCosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2ViMzhkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFj
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRl
c3RDYWxsYmFjay5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUuaCIKLSNpbmNs
dWRlICJXZWJLaXRET01GbG9hdDMyQXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01UZXN0Tm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0Nv
bnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDS19HRVRfUFJJ
VkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQ
RV9URVNUX0NBTExCQUNLLCBXZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlKQotCi10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCi0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDYWxsYmFjaz4gY29yZU9iamVj
dDsKLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLX0gV2ViS2l0RE9NVGVzdENh
bGxiYWNrUHJpdmF0ZTsKLQotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBraXQoV2ViQ29yZTo6VGVzdENh
bGxiYWNrKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0
dXJuIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDSyhyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0
Q2FsbGJhY2sob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlKFdlYktpdERP
TVRlc3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlRlc3RDYWxsYmFjayo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RDYWxsYmFjayogd3JhcFRlc3RDYWxs
YmFjayhXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNv
cmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0soZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLLCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENh
bGxiYWNrLCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2ssIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qp
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVTVF9DQUxMQkFDS19HRVRfUFJJVkFURShvYmplY3QpOwotI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
LSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0
cnVjdFByb3BlcnRpZXMpOwotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYktp
dERPTVRlc3RDYWxsYmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tf
R0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGVzdENhbGxiYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9i
amVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCksIG9iamVjdCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAg
cmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNr
X2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsK
LSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NvbnN0cnVjdG9yOwotICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZmluYWxpemU7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19pbml0KFdlYktpdERPTVRl
c3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0dFVF9QUklWQVRFKHJlcXVlc3QpOwot
ICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSgpOwotfQotCi1nYm9v
bGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbShXZWJL
aXRET01UZXN0Q2FsbGJhY2sqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDSyhzZWxmKSwgRkFMU0UpOwot
ICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhOb1BhcmFtKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193
aXRoX2FycmF5X3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NRmxv
YXQzMkFycmF5KiBhcnJheVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiksIEZBTFNFKTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJBUlJBWShhcnJheVBh
cmFtKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkqIGNvbnZlcnRlZEFycmF5UGFy
YW0gPSBXZWJLaXQ6OmNvcmUoYXJyYXlQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+Y2FsbGJhY2tXaXRoQXJyYXlQYXJhbSgqY29udmVydGVkQXJyYXlQYXJhbSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9Q
QVJBTShhcnJheVBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJT
cGVlY2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOwot
I2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9vbGVhbiB3ZWJr
aXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIGNvbnN0IGdjaGFyKiBzcnpQYXJh
bSwgY29uc3QgZ2NoYXIqIHN0ckFyZykKLXsKLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLKHNlbGYpLCBGQUxTRSk7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3J6UGFyYW0sIEZBTFNFKTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzdHJBcmcsIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJn
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+Y2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNyelBhcmFt
KSksIGNvbnZlcnRlZFN0ckFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzcnpQYXJhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0ckFyZyk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3Bl
ZWNoIFN5bnRoZXNpcyIpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNl
bmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2xvbmcgd2Via2l0X2Rv
bV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0
RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKQotewotI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJB
Q0soc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJBcmcp
OwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBl
KGNvbnZlcnRlZFN0ckFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICov
Ci19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0
cmluZ19saXN0KFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5n
TGlzdCogbGlzdFBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiksIEZBTFNFKTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElTVChsaXN0UGFyYW0p
LCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGNvbnZlcnRlZExpc3RQYXJhbSA9
IFdlYktpdDo6Y29yZShsaXN0UGFyYW0pOwotICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNh
bGxiYWNrV2l0aFN0cmluZ0xpc3QoKmNvbnZlcnRlZExpc3RQYXJhbSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShs
aXN0UGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBT
eW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYg
LyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW4oV2ViS2l0RE9NVGVzdENhbGxiYWNr
KiBzZWxmLCBnYm9vbGVhbiBib29sUGFyYW0pCi17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDSyhzZWxmKSwgRkFMU0Up
OwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhCb29sZWFuKGJvb2xQYXJh
bSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFVOVVNFRF9QQVJBTShib29sUGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9v
bGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdi
b29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja19yZXF1aXJlc190aGlzX3Rv
X3Bhc3MoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBnbG9uZyBsb25nUGFyYW0sIFdlYktp
dERPTVRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiksIEZBTFNF
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9ERSh0ZXN0
Tm9kZVBhcmFtKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogY29udmVydGVkVGVzdE5v
ZGVQYXJhbSA9IFdlYktpdDo6Y29yZSh0ZXN0Tm9kZVBhcmFtKTsKLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5jYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhsb25nUGFyYW0sICpjb252ZXJ0
ZWRUZXN0Tm9kZVBhcmFtKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKGxvbmdQYXJhbSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRlc3ROb2RlUGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7
Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZlOTM5ZGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJL
aXRET01UZXN0Q2FsbGJhY2tfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q2FsbGJhY2tfaAotCi0j
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0K
LSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0FMTEJBQ0sgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9D
QUxMQkFDSyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDSywgV2ViS2l0RE9NVGVzdENhbGxiYWNrKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNL
LCBXZWJLaXRET01UZXN0Q2FsbGJhY2tDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X0NBTExCQUNLKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX0NBTExCQUNLX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0NBTExCQUNLX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLLCBXZWJLaXRET01UZXN0Q2FsbGJh
Y2tDbGFzcykpCi0KLS8qKgotICogV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0NPTlNUQU5UMToK
LSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfQ09OU1RBTlQxIDEKLQotLyoq
Ci0gKiBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfQ09OU1RBTlQyOgotICovCi0jZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9DQUxMQkFDS19DT05TVEFOVDIgMgotCi1zdHJ1Y3QgX1dlYktpdERPTVRl
c3RDYWxsYmFjayB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MgewotICAgIFdlYktpdERPTU9iamVj
dENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
Y2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0Q2FsbGJhY2sKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2Nh
bGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9fcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9hcnJh
eV9wYXJhbToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2sKLSAqIEBhcnJheVBh
cmFtOiBBICNXZWJLaXRET01GbG9hdDMyQXJyYXkKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVh
bgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgot
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfYXJyYXlfcGFyYW0oV2ViS2l0
RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkqIGFycmF5UGFyYW0p
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX3BhcmFtOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxs
YmFjawotICogQHNyelBhcmFtOiBBICNnY2hhcgotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqCi0g
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dp
dGhfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBz
ZWxmLCBjb25zdCBnY2hhciogc3J6UGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJBcmcpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVy
bl90eXBlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFjawotICogQHN0ckFyZzog
QSAjZ2NoYXIKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Nh
bGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBz
ZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2Fs
bGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0Q2FsbGJhY2sKLSAqIEBsaXN0UGFyYW06IEEgI1dlYktpdERPTURPTVN0cmluZ0xpc3QKLSAq
Ci0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNr
X3dpdGhfc3RyaW5nX2xpc3QoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01E
T01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19jYWxsYmFja193aXRoX2Jvb2xlYW46Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENh
bGxiYWNrCi0gKiBAYm9vbFBhcmFtOiBBICNnYm9vbGVhbgotICoKLSAqIFJldHVybnM6IEEgI2di
b29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29s
ZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ib29sZWFuKFdlYktp
dERPTVRlc3RDYWxsYmFjayogc2VsZiwgZ2Jvb2xlYW4gYm9vbFBhcmFtKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfcmVxdWlyZXNfdGhpc190b19wYXNzOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFjawotICogQGxvbmdQYXJhbTogQSAjZ2xv
bmcKLSAqIEB0ZXN0Tm9kZVBhcmFtOiBBICNXZWJLaXRET01UZXN0Tm9kZQotICoKLSAqIFJldHVy
bnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfcmVxdWlyZXNf
dGhpc190b19wYXNzKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgZ2xvbmcgbG9uZ1BhcmFt
LCBXZWJLaXRET01UZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNl
bmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRE
T01UZXN0Q2FsbGJhY2tfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLnN5bWJvbHMgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2Fs
bGJhY2suc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwZmE5NS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2FsbGJhY2suc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBA
QAotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9fcGFy
YW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKikKLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19jYWxsYmFja193aXRoX2FycmF5X3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayosIFdl
YktpdERPTUZsb2F0MzJBcnJheSopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Y2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9wYXJhbShXZWJLaXRET01UZXN0
Q2FsbGJhY2sqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBjb25zdCBnY2hhciop
Ci1nbG9uZyB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub25fYm9vbF9y
ZXR1cm5fdHlwZShXZWJLaXRET01UZXN0Q2FsbGJhY2sqLCBjb25zdCBnY2hhciopCi1nYm9vbGVh
biB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJL
aXRET01UZXN0Q2FsbGJhY2sqLCBXZWJLaXRET01ET01TdHJpbmdMaXN0KikKLWdib29sZWFuIHdl
YmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW4oV2ViS2l0RE9NVGVz
dENhbGxiYWNrKiwgZ2Jvb2xlYW4pCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Y2FsbGJhY2tfcmVxdWlyZXNfdGhpc190b19wYXNzKFdlYktpdERPTVRlc3RDYWxsYmFjayosIGds
b25nLCBXZWJLaXRET01UZXN0Tm9kZSopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU0NWU1MjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlv
bi5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENh
Y2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
Ci0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0j
aW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01GbG9hdDMyQXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgIldlYktpdERPTVRlc3ROb2RlUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29u
dmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9O
X0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT04sIFdlYktpdERPTVRlc3RDYWxsYmFja0Z1
bmN0aW9uUHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RDYWxsYmFja0Z1
bmN0aW9uUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uPiBjb3JlT2JqZWN0OwotI2VuZGlmIC8vIEVO
QUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotfSBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvblBy
aXZhdGU7Ci0KLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLVdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBraXQoV2ViQ29yZTo6VGVzdENh
bGxiYWNrRnVuY3Rpb24qIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OKHJldCk7Ci0KLSAg
ICByZXR1cm4gd3JhcFRlc3RDYWxsYmFja0Z1bmN0aW9uKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRl
c3RDYWxsYmFja0Z1bmN0aW9uKiBjb3JlKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBy
ZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dENhbGxiYWNrRnVuY3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVj
dCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogd3JhcFRlc3RDYWxs
YmFja0Z1bmN0aW9uKFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uKiBjb3JlT2JqZWN0KQot
ewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NB
TExCQUNLX0ZVTkNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFD
S19GVU5DVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uLCB3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLXN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25Qcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OX0dFVF9QUklWQVRFKG9i
amVjdCk7Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotI2VuZGlmIC8vIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5j
dGlvblByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2tfZnVuY3Rpb25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGlj
IEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jb25zdHJ1Y3RvcihH
VHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1
Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLSAgICBXZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0FM
TEJBQ0tfRlVOQ1RJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qPihXRUJLSVRfRE9N
X09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
OjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2xhc3NfaW5pdChXZWJLaXRET01UZXN0
Q2FsbGJhY2tGdW5jdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q2Fs
bGJhY2tGdW5jdGlvblByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0g
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NvbnN0cnVjdG9yOwotICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fZmlu
YWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlv
bl9pbml0KFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiByZXF1ZXN0KQotewotICAgIFdl
YktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9DQUxMQkFDS19GVU5DVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYp
IFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSgpOwotfQotCi1nYm9vbGVhbiB3
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9ub19wYXJhbShX
ZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZikKLXsKLSNpZiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLX0ZVTkNU
SU9OKHNlbGYpLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2Fs
bGJhY2tXaXRoTm9QYXJhbSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVl
Y2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOwotI2Vu
ZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9vbGVhbiB3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9hcnJheV9wYXJhbShXZWJL
aXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRmxvYXQzMkFycmF5KiBh
cnJheVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJBUlJBWShhcnJheVBhcmFt
KSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkZsb2F0MzJBcnJheSogY29udmVydGVkQXJy
YXlQYXJhbSA9IFdlYktpdDo6Y29yZShhcnJheVBhcmFtKTsKLSAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT5jYWxsYmFja1dpdGhBcnJheVBhcmFtKCpjb252ZXJ0ZWRBcnJheVBhcmFtKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5V
U0VEX1BBUkFNKGFycmF5UGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4o
MCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFu
IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX3NlcmlhbGl6
ZWRfc2NyaXB0X3ZhbHVlX3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxm
LCBjb25zdCBnY2hhciogc3J6UGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJBcmcpCi17Ci0jaWYgRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxM
QkFDS19GVU5DVElPTihzZWxmKSwgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNy
elBhcmFtLCBGQUxTRSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCBGQUxTRSk7
Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHN0ckFyZyk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tXaXRo
U2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNyelBhcmFtKSksIGNvbnZlcnRlZFN0ckFy
Zyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFVOVVNFRF9QQVJBTShzcnpQYXJhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7Ci0g
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1
bmN0aW9uX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENh
bGxiYWNrRnVuY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcpCi17Ci0jaWYgRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFD
S19GVU5DVElPTihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCAw
KTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2tGdW5jdGlvbiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJBcmcgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhO
b25Cb29sUmV0dXJuVHlwZShjb252ZXJ0ZWRTdHJBcmcpOwotICAgIHJldHVybiByZXN1bHQ7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0oc3RyQXJnKTsK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8qIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
ZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2tG
dW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKQotewotI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
Q0FMTEJBQ0tfRlVOQ1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElTVChsaXN0UGFyYW0pLCBGQUxTRSk7Ci0gICAg
V2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogY29udmVydGVkTGlzdFBhcmFtID0gV2ViS2l0
Ojpjb3JlKGxpc3RQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tX
aXRoU3RyaW5nTGlzdCgqY29udmVydGVkTGlzdFBhcmFtKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKGxpc3RQYXJh
bSk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNp
cyIpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNlbmRpZiAvKiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2Nh
bGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfYm9vbGVhbihXZWJLaXRET01UZXN0Q2FsbGJh
Y2tGdW5jdGlvbiogc2VsZiwgZ2Jvb2xlYW4gYm9vbFBhcmFtKQotewotI2lmIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0tfRlVO
Q1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2tGdW5jdGlvbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5j
YWxsYmFja1dpdGhCb29sZWFuKGJvb2xQYXJhbSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShib29sUGFyYW0pOwot
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19mdW5jdGlvbl9jYWxsYmFja19yZXF1aXJlc190aGlzX3RvX3Bhc3MoV2ViS2l0RE9NVGVzdENh
bGxiYWNrRnVuY3Rpb24qIHNlbGYsIGdsb25nIGxvbmdQYXJhbSwgV2ViS2l0RE9NVGVzdE5vZGUq
IHRlc3ROb2RlUGFyYW0pCi17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDS19GVU5DVElPTihzZWxmKSwgRkFMU0UpOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT0RFKHRlc3ROb2Rl
UGFyYW0pLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6VGVzdE5vZGUqIGNvbnZlcnRlZFRl
c3ROb2RlUGFyYW0gPSBXZWJLaXQ6OmNvcmUodGVzdE5vZGVQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MobG9uZ1BhcmFtLCAqY29u
dmVydGVkVGVzdE5vZGVQYXJhbSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShsb25nUGFyYW0pOwotICAgIFVOVVNF
RF9QQVJBTSh0ZXN0Tm9kZVBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJTcGVlY2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+
KDApOwotI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5YTc4MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5j
dGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25faAot
I2RlZmluZSBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbl9oCi0KLSNpZmRlZiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDS19GVU5DVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0NBTExCQUNLX0ZVTkNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OLCBX
ZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9D
QUxMQkFDS19GVU5DVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDS19GVU5DVElPTiwgV2ViS2l0
RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25DbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X0NBTExCQUNLX0ZVTkNUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OKSkKLSNkZWZp
bmUgV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLX0ZVTkNUSU9OX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExC
QUNLX0ZVTkNUSU9OKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9O
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OLCBXZWJLaXRET01UZXN0Q2FsbGJhY2tG
dW5jdGlvbkNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiB7
Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2Vi
S2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25DbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xh
c3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0
X2NhbGxiYWNrX2Z1bmN0aW9uX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vX3BhcmFtOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uCi0gKgotICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2Jvb2xl
YW4KLXdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vX3Bh
cmFtKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9hcnJheV9wYXJhbToK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgotICogQGFycmF5UGFy
YW06IEEgI1dlYktpdERPTUZsb2F0MzJBcnJheQotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFu
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9hcnJheV9wYXJh
bShXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRmxvYXQzMkFy
cmF5KiBhcnJheVBhcmFtKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVu
Y3Rpb25fY2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9wYXJhbToKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgotICogQHNyelBhcmFtOiBBICNn
Y2hhcgotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24qIHNlbGYsIGNv
bnN0IGdjaGFyKiBzcnpQYXJhbSwgY29uc3QgZ2NoYXIqIHN0ckFyZyk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0
dXJuX3R5cGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24KLSAq
IEBzdHJBcmc6IEEgI2djaGFyCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9j
YWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKFdlYktp
dERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKTsKLQot
LyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9z
dHJpbmdfbGlzdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgot
ICogQGxpc3RQYXJhbTogQSAjV2ViS2l0RE9NRE9NU3RyaW5nTGlzdAotICoKLSAqIFJldHVybnM6
IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0
aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0
RE9NRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
Y2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9ib29sZWFuOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uCi0gKiBAYm9vbFBhcmFtOiBBICNnYm9vbGVhbgot
ICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rp
b25fY2FsbGJhY2tfd2l0aF9ib29sZWFuKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBz
ZWxmLCBnYm9vbGVhbiBib29sUGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19mdW5jdGlvbl9jYWxsYmFja19yZXF1aXJlc190aGlzX3RvX3Bhc3M6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24KLSAqIEBsb25nUGFyYW06IEEgI2dsb25n
Ci0gKiBAdGVzdE5vZGVQYXJhbTogQSAjV2ViS2l0RE9NVGVzdE5vZGUKLSAqCi0gKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3Jl
cXVpcmVzX3RoaXNfdG9fcGFzcyhXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwg
Z2xvbmcgbG9uZ1BhcmFtLCBXZWJLaXRET01UZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSk7Ci0KLUdf
RU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNl
bmRpZiAvKiBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbl9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4YWQwZC4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSB7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gY29yZU9i
amVjdDsKLX0gV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvciogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVy
biBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKHJldCk7
Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihvYmop
OwotfQotCi1XZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUo
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiByZXF1ZXN0KQotewot
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29y
ZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxU
SU5fQ09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJ
VEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9j
bGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3IsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qp
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29u
c3RydWN0b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RF
U1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7
Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jbGFz
c193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pz
X2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3Bl
cnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09O
U1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1
cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9q
c19idWlsdGluX2NvbnN0cnVjdG9yX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25z
dHJ1Y3Rvcl9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZTsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25z
dHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
cmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERP
TVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUoKTsKLX0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4NmRkYS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLSNkZWZp
bmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLQotI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
LSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RP
UiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0
cnVjdG9yX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pT
X0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ip
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVD
VE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpCi0jZGVmaW5lIFdF
QktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKSkKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQotI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NM
QVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yQ2xhc3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07
Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0
aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAv
KiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFj
OWJiNmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmgiCi0KLSNpbmNsdWRl
ICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUu
aCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZS5oIgotI2luY2x1
ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NV
U1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1RfR0VUX1BSSVZBVEUob2Jq
KSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9D
VVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNULCBXZWJLaXRET01UZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcml2YXRlKQotCi10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdD4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLVdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVj
dCoga2l0KFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVj
dCogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVD
VChyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3Qob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdCogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0K
LVdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCogd3Jh
cFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdChXZWJDb3JlOjpUZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0g
ICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9N
X0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVD
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QsIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0
b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dpdGhfbm9faW50
ZXJmYWNlX29iamVjdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9DVVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JK
RUNUX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpm
b3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSgpOwotICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0b3Jfd2l0aF9ub19p
bnRlcmZhY2Vfb2JqZWN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0
YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dpdGhfbm9f
aW50ZXJmYWNlX29iamVjdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGll
cykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rl
c3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dpdGhfbm9faW50ZXJmYWNlX29iamVjdF9wYXJlbnRfY2xh
c3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVj
dFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DVVNUT01fQ09O
U1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0g
ICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCkt
PmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1Y3Rvcl93aXRoX25vX2ludGVyZmFj
ZV9vYmplY3RfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9J
bnRlcmZhY2VPYmplY3RDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSkpOwotICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dp
dGhfbm9faW50ZXJmYWNlX29iamVjdF9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1Y3Rvcl93aXRoX25vX2ludGVy
ZmFjZV9vYmplY3RfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9j
dXN0b21fY29uc3RydWN0b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0X2luaXQoV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KiByZXF1ZXN0KQotewot
ICAgIFdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9f
SU5URVJGQUNFX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdl
YktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGUo
KTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjNGNhMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICsw
LDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0X2gKLSNkZWZpbmUgV2Vi
S2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0X2gKLQotI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0j
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lO
VEVSRkFDRV9PQkpFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1
Y3Rvcl93aXRoX25vX2ludGVyZmFjZV9vYmplY3RfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1Qob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVCwg
V2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFD
RV9PQkpFQ1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJG
QUNFX09CSkVDVCwgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0Q2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DVVNUT01fQ09OU1RSVUNU
T1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9DT05TVFJVQ1RP
Ul9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1Rf
Q1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVF9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9D
VVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1Rf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVD
VCwgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q2xh
c3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZmFjZU9iamVjdCB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0Q2xhc3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0K
LVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0b3Jfd2l0
aF9ub19pbnRlcmZhY2Vfb2JqZWN0X2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0j
ZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0
RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlZDQ3MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzMyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdl
YktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGVf
aAotI2RlZmluZSBXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VP
YmplY3RQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdC5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0Q3VzdG9t
Q29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci1XZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIHdy
YXBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoV2ViQ29yZTo6VGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Kik7Ci1XZWJLaXRET01UZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIGtpdChXZWJDb3JlOjpUZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqKTsKLVdlYkNvcmU6OlRlc3RD
dXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCogY29yZShXZWJLaXRET01UZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqKTsKLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGEzOWE0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUg
IkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
LSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmgiCi0jaW5j
bHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1Rf
Q1VTVE9NX05BTUVEX0dFVFRFUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIsIFdl
YktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiBjb3JlT2JqZWN0OwotfSBXZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBraXQoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdw
b2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdF
QktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKHJldCk7Ci0KLSAgICByZXR1cm4gd3Jh
cFRlc3RDdXN0b21OYW1lZEdldHRlcihvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqIGNvcmUoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiByZXF1ZXN0KQot
ewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEN1c3RvbU5h
bWVkR2V0dGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
LX0KLQotV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB3cmFwVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogY29yZU9iamVjdCkKLXsKLSAg
ICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DVVNUT01f
TkFNRURfR0VUVEVSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DVVNUT01fTkFN
RURfR0VUVEVSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RDdXN0b21O
YW1lZEdldHRlciwgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXIsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFt
ZWRfZ2V0dGVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9O
QU1FRF9HRVRURVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJL
aXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9jdXN0b21f
bmFtZWRfZ2V0dGVyX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQot
ewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9j
dXN0b21fbmFtZWRfZ2V0dGVyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NV
U1RPTV9OQU1FRF9HRVRURVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oV0VCS0lU
X0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RD
YWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4g
b2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dl
dHRlcl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlckNsYXNzKiByZXF1
ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0
Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKSk7Ci0g
ICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFt
ZWRfZ2V0dGVyX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9maW5hbGl6ZTsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfaW5pdChXZWJLaXRET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VU
VEVSX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZSgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0
b21fbmFtZWRfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0
cik7Ci0gICAgV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPmFub3RoZXJGdW5jdGlvbihjb252ZXJ0ZWRTdHIpOwot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODU2YzEwLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDdXN0b21OYW1lZEdldHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoK
LSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
Ci0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAot
Ci0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xT
Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUiAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9nZXRfdHlwZSgpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DVVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DVVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDbGFz
cykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUikpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9D
VVNUT01fTkFNRURfR0VUVEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIpKQotI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9D
VVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDbGFzcykp
Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyIHsKLSAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1l
ZF9nZXR0ZXJfZ2V0X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2N1c3Rv
bV9uYW1lZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9jdXN0b21f
bmFtZWRfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RD
dXN0b21OYW1lZEdldHRlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuc3lt
Ym9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZWMzYWQxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5zeW1ib2xz
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9t
X25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdl
dHRlciosIGNvbnN0IGdjaGFyKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYy
ZTYyYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgi
Ci0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVj
dC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RS
VUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3JQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3Ry
dWN0b3I+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9y
KiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIG9iaikKLXsKLSAgICBpZiAoIW9i
aikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0
Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NP
TlNUUlVDVE9SKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKG9i
aik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0RXZlbnRDb25z
dHJ1Y3Rvciogd3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1
cm4gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2Nv
bnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAs
Ci0gICAgUFJPUF9BVFRSMSwKLSAgICBQUk9QX0FUVFIyLAotICAgIFBST1BfQVRUUjMsCi19Owot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9HRVRfUFJJVkFU
RShvYmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RFdmVudENvbnN0cnVj
dG9yUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9j
b25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYgPSBXRUJL
SVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1Iob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9BVFRSMToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSMjoKLSAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9y
X2dldF9hdHRyMihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSMzoK
LSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50
X2NvbnN0cnVjdG9yX2dldF9hdHRyMyhzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09i
amVjdCogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBl
IHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBh
cmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFBy
b3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVj
dCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RFdmVu
dENvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0g
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9i
amVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0RXZlbnRDb25z
dHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3RvclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmluYWxpemU7Ci0g
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29u
c3RydWN0b3JfZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FUVFIxLAotICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImF0dHIxIiwKLSAgICAgICAgICAg
ICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMSIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IGdj
aGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMSIsCi0gICAgICAgICAgICAiIiwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FUVFIy
LAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImF0dHIyIiwKLSAg
ICAgICAgICAgICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMiIsCi0gICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMiIsCi0gICAgICAgICAgICAi
IiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQ
Uk9QX0FUVFIzLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImF0
dHIzIiwKLSAgICAgICAgICAgICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMyIsCi0gICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMyIsCi0gICAg
ICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RF
dmVudENvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05T
VFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSgpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0
X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VWRU5UX0NPTlNUUlVD
VE9SKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyMSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJLaXRET01UZXN0RXZl
bnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VW
RU5UX0NPTlNUUlVDVE9SKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1
Y3RvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMyhXZWJL
aXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSNpZiBFTkFCTEUoU1BFQ0lBTF9F
VkVOVCkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VWRU5UX0NPTlNUUlVDVE9SKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hdHRyMygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlY2lhbCBF
dmVudCIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUNJQUxfRVZFTlQpICov
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGEyMGQ0Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JfaAotCi0j
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0K
LSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IgICAgICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCi0jZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9D
T05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IpKQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRfQ09OU1RS
VUNUT1IsIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xhc3MpCi0jZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJV
Q1RPUikpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVO
VF9DT05TVFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9N
VGVzdEV2ZW50Q29uc3RydWN0b3JDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3IgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19Owot
Ci1zdHJ1Y3QgX1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xhc3MgewotICAgIFdlYktp
dERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdl
YmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yCi0gKgotICogUmV0dXJuczogQSAjZ2No
YXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxKFdlYktpdERPTVRlc3RF
dmVudENvbnN0cnVjdG9yKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRf
Y29uc3RydWN0b3JfZ2V0X2F0dHIyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29u
c3RydWN0b3JfZ2V0X2F0dHIyKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIzOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yCi0gKgotICogUmV0dXJu
czogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIzKFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBzZWxmKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLnN5
bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMmI3MTdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLnN5bWJvbHMK
KysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXZl
bnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKikK
LWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIyKFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0RXZlbnRUYXJnZXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWVhNzIx
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIg
KzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudFRhcmdldC5oIgotCi0jaW5jbHVkZSAi
Q1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIK
LSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01F
dmVudFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgotI2luY2x1
ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUuaCIKLSNpbmNsdWRl
ICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVO
VF9UQVJHRVRfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2Jq
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9UQVJHRVQsIFdlYktpdERPTVRlc3RFdmVudFRh
cmdldFByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQ
cml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0PiBjb3JlT2JqZWN0
OwotfSBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFy
Z2V0KiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVQocmV0KTsKLQotICAgIHJldHVybiB3cmFwVGVz
dEV2ZW50VGFyZ2V0KG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShX
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0RXZlbnRUYXJn
ZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBjb3JlT2Jq
ZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9U
RVNUX0VWRU5UX1RBUkdFVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRf
VEFSR0VULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2V2ZW50
X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJL
aXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkV2ZW50
KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOwotICAgIGlmICghY29yZUV2ZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2
ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwotICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2V2ZW50
X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKLXsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21fdGVzdF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0gICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkdP
YmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV90
ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudDsKLSAgICBpZmFjZS0+YWRkX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXI7
Ci0gICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ldmVu
dF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOwotfQotCi1HX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQsIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJn
ZXQsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRf
RE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVRfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsK
LQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlKCk7Ci0gICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsK
LSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZXZl
bnRfdGFyZ2V0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0RXZl
bnRUYXJnZXRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVF9HRVRf
UFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0RXZlbnRU
YXJnZXRDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJp
dmF0ZSkpOwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rf
ZXZlbnRfdGFyZ2V0X2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
KiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAg
IG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZSgpOwotfQotCi1XZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0KiBzZWxmLCBndWxvbmcgaW5kZXgpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9FVkVOVF9UQVJHRVQoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RFdmVu
dFRhcmdldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKLSAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RFdmVudFRhcmdldC5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LnN5bWJvbHMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYjQ3MzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
LnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1XZWJLaXRET01Ob2RlKiB3ZWJr
aXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0Kiwg
Z3Vsb25nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhNTlkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0
aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdEV4Y2VwdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlLmgiCi0jaW5jbHVk
ZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVhD
RVBUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfRVhDRVBUSU9OLCBXZWJLaXRET01UZXN0RXhjZXB0aW9uUHJp
dmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlIHsK
LSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV4Y2VwdGlvbj4gY29yZU9iamVjdDsKLX0gV2ViS2l0
RE9NVGVzdEV4Y2VwdGlvblByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJLaXRE
T01UZXN0RXhjZXB0aW9uKiBraXQoV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiogb2JqKQotewotICAg
IGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBE
T01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1Rf
RVhDRVBUSU9OKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RFeGNlcHRpb24ob2JqKTsKLX0K
LQotV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiogY29yZShXZWJLaXRET01UZXN0RXhjZXB0aW9uKiBy
ZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dEV4Y2VwdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Ci19Ci0KLVdlYktpdERPTVRlc3RFeGNlcHRpb24qIHdyYXBUZXN0RXhjZXB0aW9uKFdlYkNvcmU6
OlRlc3RFeGNlcHRpb24qIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwot
ICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfVEVTVF9FWENFUFRJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0
RE9NVGVzdEV4Y2VwdGlvbiwgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbiwgV0VCS0lUX0RPTV9U
WVBFX09CSkVDVCkKLQotZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfTkFNRSwKLX07Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25fZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9URVNUX0VYQ0VQVElPTl9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAg
cHJpdi0+fldlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RFeGNlcHRpb24qIHNlbGYgPSBX
RUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKLSAgICBjYXNlIFBST1BfTkFNRToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9nZXRfbmFtZShzZWxmKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0RXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9FWENFUFRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV4Y2VwdGlvbio+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJu
IG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9jbGFz
c19pbml0KFdlYktpdERPTVRlc3RFeGNlcHRpb25DbGFzcyogcmVxdWVzdENsYXNzKQotewotICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NVGVzdEV4Y2VwdGlvblByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVj
dG9yID0gd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9maW5hbGl6ZTsKLSAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25f
Z2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAg
ICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05BTUUsCi0gICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCi0gICAgICAgICAgICAibmFtZSIsCi0gICAgICAgICAgICAiVGVzdEV4Y2Vw
dGlvbjpuYW1lIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RFeGNlcHRpb246
bmFtZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25faW5pdChX
ZWJLaXRET01UZXN0RXhjZXB0aW9uKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RFeGNl
cHRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VYQ0VQVElPTl9HRVRfUFJJVkFU
RShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRl
KCk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF9uYW1lKFdlYktp
dERPTVRlc3RFeGNlcHRpb24qIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9FWENFUFRJT04oc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RFeGNlcHRpb24qIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+bmFtZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0RXhjZXB0aW9uLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDA4ODg5NTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbi5zeW1ib2xz
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9leGNl
cHRpb25fZ2V0X25hbWUoV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbiopCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMWZhMDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVs
ZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5o
IgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFURShv
YmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRSwgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+
IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KiBraXQoV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIG9iaikKLXsKLSAgICBpZiAo
IW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0dFTkVS
QVRFX0lTX1JFQUNIQUJMRShyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZShvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogY29y
ZShXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogcmVxdWVzdCkKLXsKLSAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKLX0KLQotV2Vi
S2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIHdyYXBUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZShXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogY29yZU9iamVjdCkKLXsKLSAgICBB
U1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9HRU5FUkFURV9J
U19SRUFDSEFCTEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0dFTkVSQVRFX0lT
X1JFQUNIQUJMRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSwgd2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZSwgV0VC
S0lUX0RPTV9UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2dlbmVy
YXRlX2lzX3JlYWNoYWJsZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0
RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAg
cHJpdi0+fldlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZSgpOwotICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9nZW5lcmF0ZV9pc19yZWFjaGFibGVfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9k
b21fdGVzdF9nZW5lcmF0ZV9pc19yZWFjaGFibGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3Vp
bnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0
cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9wYXJlbnRfY2xhc3MpLT5jb25z
dHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRp
ZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFURShvYmpl
Y3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZSkpOwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0
b3IgPSB3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2NvbnN0cnVjdG9yOwot
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNf
cmVhY2hhYmxlX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2Vu
ZXJhdGVfaXNfcmVhY2hhYmxlX2luaXQoV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUq
IHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFU
RShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJpdmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0
OThkYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCi0jZGVmaW5lIFdlYktpdERPTVRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRSAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJh
dGVfaXNfcmVhY2hhYmxlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HRU5F
UkFURV9JU19SRUFDSEFCTEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFLCBX
ZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9HRU5FUkFURV9JU19SRUFDSEFCTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hB
QkxFLCBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNsYXNzKQotI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0dFTkVSQVRF
X0lTX1JFQUNIQUJMRSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9HRU5FUkFURV9JU19S
RUFDSEFCTEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9HRU5FUkFU
RV9JU19SRUFDSEFCTEUsIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ2xhc3MpKQot
Ci1zdHJ1Y3QgX1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIHsKLSAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZUNsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVf
aXNfcmVhY2hhYmxlX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
c3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNGQ1Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgotI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiB3cmFw
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUq
KTsKLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBraXQoV2ViQ29yZTo6VGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUqKTsKLVdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBj
b3JlKFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7Ci19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTFjNDA4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RH
bG9iYWxPYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAgQEAKLS8qCi0gKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
ZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0LmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgi
Ci0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZh
dGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCwgV2Vi
S2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RHbG9i
YWxPYmplY3Q+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCoga2l0
KFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1QocmV0
KTsKLQotICAgIHJldHVybiB3cmFwVGVzdEdsb2JhbE9iamVjdChvYmopOwotfQotCi1XZWJDb3Jl
OjpUZXN0R2xvYmFsT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHJlcXVl
c3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0R2xv
YmFsT2JqZWN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
LX0KLQotV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogd3JhcFRlc3RHbG9iYWxPYmplY3QoV2Vi
Q29yZTo6VGVzdEdsb2JhbE9iamVjdCogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9i
amVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9HTE9CQUxfT0JKRUNULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RF
RklORV9UWVBFKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QsIHdlYmtpdF9kb21fdGVzdF9nbG9i
YWxfb2JqZWN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAs
Ci0gICAgUFJPUF9SRUdVTEFSX0FUVFJJQlVURSwKLSAgICBQUk9QX1BVQkxJQ19BTkRfUFJJVkFU
RV9BVFRSSUJVVEUsCi0gICAgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09ORElUSU9OQUxfQVRU
UklCVVRFLAotICAgIFBST1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURSwKLX07Ci0KLXN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUoKTsKLSAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2xv
YmFsX29iamVjdF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1Qo
b2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9SRUdV
TEFSX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0
X3JlZ3VsYXJfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFVCTElDX0FORF9QUklWQVRFX0FUVFJJQlVURToK
LSAgICAgICAgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19hbmRfcHJp
dmF0ZV9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09ORElUSU9OQUxfQVRU
UklCVVRFOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfcHVibGlj
X2FuZF9wcml2YXRlX2NvbmRpdGlvbmFsX2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VOQUJMRURfQVRfUlVO
VElNRV9BVFRSSUJVVEU6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3Nl
dF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEds
b2JhbE9iamVjdCogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUKG9iamVjdCk7
Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfUkVHVUxBUl9BVFRS
SUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X2dldF9yZWd1bGFyX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQVRUUklCVVRFOgotICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVj
dF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09ORElUSU9OQUxfQVRUUklCVVRF
OgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfZ2xv
YmFsX29iamVjdF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2NvbmRpdGlvbmFsX2F0dHJpYnV0ZShz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTkFCTEVEX0FUX1JVTlRJTUVf
QVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShzZWxm
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGll
c0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0g
ICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTVRlc3RHbG9i
YWxPYmplY3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1RfR0VU
X1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdEdsb2JhbE9iamVjdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVP
YmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0
LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0R2xv
YmFsT2JqZWN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RHbG9iYWxPYmpl
Y3RQcml2YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21f
dGVzdF9nbG9iYWxfb2JqZWN0X2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9maW5hbGl6ZTsKLSAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9w
cm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X2dldF9wcm9wZXJ0eTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUdVTEFS
X0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJy
ZWd1bGFyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdEdsb2JhbE9iamVjdDpyZWd1bGFy
LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEdsb2JhbE9i
amVjdDpyZWd1bGFyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9QVUJMSUNfQU5EX1BS
SVZBVEVfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAg
ICAgInB1YmxpYy1hbmQtcHJpdmF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RHbG9i
YWxPYmplY3Q6cHVibGljLWFuZC1wcml2YXRlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogVGVzdEdsb2JhbE9iamVjdDpwdWJsaWMtYW5kLXByaXZhdGUtYXR0cmli
dXRlIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29i
amVjdENsYXNzLAotICAgICAgICBQUk9QX1BVQkxJQ19BTkRfUFJJVkFURV9DT05ESVRJT05BTF9B
VFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAicHVi
bGljLWFuZC1wcml2YXRlLWNvbmRpdGlvbmFsLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVz
dEdsb2JhbE9iamVjdDpwdWJsaWMtYW5kLXByaXZhdGUtY29uZGl0aW9uYWwtYXR0cmlidXRlIiwK
LSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0R2xvYmFsT2JqZWN0OnB1YmxpYy1h
bmQtcHJpdmF0ZS1jb25kaXRpb25hbC1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIiIsCi0gICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfRU5B
QkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
LSAgICAgICAgICAgICJlbmFibGVkLWF0LXJ1bnRpbWUtYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJUZXN0R2xvYmFsT2JqZWN0OmVuYWJsZWQtYXQtcnVudGltZS1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RHbG9iYWxPYmplY3Q6ZW5hYmxlZC1hdC1ydW50
aW1lLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFs
X29iamVjdF9pbml0KFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHJlcXVlc3QpCi17Ci0gICAg
V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1Rf
R0xPQkFMX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktp
dERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVj
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh0ZXN0UGFy
YW0pOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGVzdFBhcmFtID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHRlc3RQYXJhbSk7Ci0gICAgaXRlbS0+cmVndWxhck9wZXJhdGlvbihjb252ZXJ0
ZWRUZXN0UGFyYW0pOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2Vu
YWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKLXsKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNUKHNlbGYpKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHRlc3RQYXJhbSk7Ci0gICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXN0
UGFyYW0gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGVzdFBhcmFtKTsKLSAgICBpdGVtLT5lbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uKGNvbnZlcnRlZFRlc3RQYXJhbSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFtKTsKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVO
QUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9v
YmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbihXZWJLaXRET01UZXN0R2xvYmFsT2Jq
ZWN0KiBzZWxmLCBnbG9uZyB0ZXN0UGFyYW0pCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7Ci0gICAgV2Vi
Q29yZTo6VGVzdEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBp
dGVtLT5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKHRlc3RQYXJhbSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFtKTsKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVO
QUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFs
X29iamVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
cmVndWxhckF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9yZWd1bGFyX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldFJlZ3VsYXJBdHRyaWJ1dGUoY29udmVy
dGVkVmFsdWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0
X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
cHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVf
YXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9i
amVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0UHVi
bGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJr
aXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2NvbmRpdGlv
bmFsX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmKQotewotI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxf
T0JKRUNUKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0dXJlIikKLSAgICByZXR1cm4gMDsK
LSNlbmRpZiAvKiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0
cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKLXsKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9HTE9CQUxfT0JKRUNUKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKLSAgICBpdGVtLT5zZXRQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUo
Y29udmVydGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJU
ZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLWdj
aGFyKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1l
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmKQotewotI2lmIEVOQUJM
RShURVNUX0ZFQVRVUkUpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JK
RUNUKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlRlc3QgRmVhdHVyZSIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5B
QkxFKFRFU1RfRkVBVFVSRSkgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29i
amVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFs
T2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVj
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZShjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlRlc3QgRmVhdHVyZSIpCi0jZW5kaWYgLyogRU5BQkxFKFRFU1Rf
RkVBVFVSRSkgKi8KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdsb2JhbE9i
amVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI2Yzc1Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RHbG9iYWxPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RHbG9iYWxP
YmplY3RfaAotI2RlZmluZSBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0X2gKLQotI2lmZGVmIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QgICAgICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNU
X0dMT0JBTF9PQkpFQ1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCwgV2ViS2l0RE9NVGVz
dEdsb2JhbE9iamVjdCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QsIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RDbGFz
cykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
R0xPQkFMX09CSkVDVCkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNU
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfR0xP
QkFMX09CSkVDVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9HTE9CQUxfT0JKRUNULCBXZWJLaXRET01UZXN0R2xv
YmFsT2JqZWN0Q2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3Qgewot
ICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3RHbG9iYWxPYmplY3RDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfZ2V0X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEds
b2JhbE9iamVjdAotICogQHRlc3RQYXJhbTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmpl
Y3RfcmVndWxhcl9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiwgY29u
c3QgZ2NoYXIqIHRlc3RQYXJhbSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9v
YmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0Ci0gKiBAdGVzdFBhcmFtOiBBICNnY2hhcgotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfZ2xv
YmFsX29iamVjdF9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktpdERPTVRlc3RHbG9i
YWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0ZXN0UGFyYW0pOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb246Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICogQHRlc3RQYXJhbTogQSAj
Z2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlv
bihXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBnbG9uZyB0ZXN0UGFyYW0pOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9yZWd1bGFyX2F0dHJpYnV0
ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0gKgotICogUmV0dXJu
czogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxP
YmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGU6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICoKLSAqIFJldHVybnM6IEEgI2dj
aGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgot
d2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRy
aWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGU6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICogQHZhbHVlOiBBICNn
Y2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfcHVibGljX2FuZF9wcml2YXRlX2F0dHJp
YnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9wdWJsaWNfYW5k
X3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RHbG9iYWxPYmplY3QKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9nbG9i
YWxfb2JqZWN0X2dldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0cmlidXRlKFdl
YktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0cmli
dXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QKLSAqIEB2YWx1ZTog
QSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9j
b25kaXRpb25hbF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVj
dF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0Ci0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rf
Z2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0KiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFs
X29iamVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9n
bG9iYWxfb2JqZWN0X3NldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlKFdlYktpdERPTVRl
c3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xT
Ci0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBX
ZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbXBsZW1lbnRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RJbXBsZW1lbnRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhZTU1
MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0SW1wbGVtZW50cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ICsw
LDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQg
c2NyaXB0cyB0aGF0IFdlYktpdERPTVRlc3RJbXBsZW1lbnRzLmggYW5kCi0gICAgV2ViS2l0RE9N
VGVzdEltcGxlbWVudHMuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0SW1wbGVtZW50cy5pZGwsIGFu
ZCB0aHVzCi0gICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5l
cmF0ZSBXZWJLaXRET01UZXN0SW1wbGVtZW50cy5oIGFuZAotICAgIFdlYktpdERPTVRlc3RJbXBs
ZW1lbnRzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRv
IGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbXBsZW1lbnRzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYWU1NTAuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdElt
cGxlbWVudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZp
bGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9N
VGVzdEltcGxlbWVudHMuaCBhbmQKLSAgICBXZWJLaXRET01UZXN0SW1wbGVtZW50cy5jcHAgYXJl
IGNyZWF0ZWQgZm9yIFRlc3RJbXBsZW1lbnRzLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRo
ZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RJbXBs
ZW1lbnRzLmggYW5kCi0gICAgV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuY3BwIGF0IGV2ZXJ5IGJ1
aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KLSovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiNjMxN2UxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0SW50ZXJmYWNlLmgi
Ci0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0j
aW5jbHVkZSAiV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01UZXN0T2JqUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0
cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFDRV9HRVRfUFJJVkFURShvYmopIEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0lOVEVS
RkFDRSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0SW50ZXJmYWNlPiBj
b3JlT2JqZWN0OwotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKLX0gV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGU7Ci0KLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1X
ZWJLaXRET01UZXN0SW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqKQot
ewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X1RFU1RfSU5URVJGQUNFKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RJbnRlcmZhY2Uob2Jq
KTsKLX0KLQotV2ViQ29yZTo6VGVzdEludGVyZmFjZSogY29yZShXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6VGVzdEludGVyZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHdyYXBUZXN0SW50ZXJmYWNlKFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRFUkZBQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLUdfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSwgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZSwgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCkKLQotZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfSU1QTEVNRU5U
U19TVFIxLAotICAgIFBST1BfSU1QTEVNRU5UU19TVFIyLAotICAgIFBST1BfSU1QTEVNRU5UU19O
T0RFLAotICAgIFBST1BfU1VQUExFTUVOVEFMX1NUUjEsCi0gICAgUFJPUF9TVVBQTEVNRU5UQUxf
U1RSMiwKLSAgICBQUk9QX1NVUFBMRU1FTlRBTF9OT0RFLAotfTsKLQotc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
V2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRl
KCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfaW50ZXJmYWNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktp
dERPTVRlc3RJbnRlcmZhY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iamVj
dCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5U
U19TVFIyOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9pbXBsZW1lbnRz
X3N0cjIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUFJPUF9TVVBQTEVNRU5UQUxfU1RSMjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50
ZXJmYWNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RJbnRl
cmZhY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iamVjdCk7Ci0KLSAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5UU19TVFIxOgotICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNl
X2dldF9pbXBsZW1lbnRzX3N0cjEoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfSU1QTEVNRU5UU19TVFIyOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoc2VsZikpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5UU19OT0RFOgotICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxl
bWVudHNfbm9kZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVVBQTEVN
RU5UQUxfU1RSMToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEoc2VsZikpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfU1VQUExFTUVOVEFMX1NUUjI6Ci0gICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1l
bnRhbF9zdHIyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NVUFBMRU1F
TlRBTF9OT0RFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
dGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0g
ICAgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1Rf
SU5URVJGQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RJbnRl
cmZhY2VDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZh
dGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3Byb3BlcnR5OwotICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfcHJv
cGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBn
b2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfSU1QTEVNRU5UU19TVFIxLAotICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImltcGxlbWVudHMtc3RyMSIsCi0gICAgICAg
ICAgICAiVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLXN0cjEiLAotICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLXN0cjEiLAotICAgICAgICAgICAg
IiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAg
UFJPUF9JTVBMRU1FTlRTX1NUUjIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAiaW1wbGVtZW50cy1zdHIyIiwKLSAgICAgICAgICAgICJUZXN0SW50ZXJmYWNlOmlt
cGxlbWVudHMtc3RyMiIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEludGVy
ZmFjZTppbXBsZW1lbnRzLXN0cjIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfSU1QTEVNRU5UU19OT0RF
LAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAgICAgICAgImltcGxlbWVudHMt
bm9kZSIsCi0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLW5vZGUiLAotICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBUZXN0SW50ZXJmYWNlOmltcGxlbWVu
dHMtbm9kZSIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NVUFBMRU1FTlRB
TF9TVFIxLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInN1cHBs
ZW1lbnRhbC1zdHIxIiwKLSAgICAgICAgICAgICJUZXN0SW50ZXJmYWNlOnN1cHBsZW1lbnRhbC1z
dHIxIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RJbnRlcmZhY2U6c3VwcGxl
bWVudGFsLXN0cjEiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAg
ICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVVBQTEVNRU5UQUxfU1RSMiwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdXBwbGVtZW50YWwtc3RyMiIs
Ci0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtc3RyMiIsCi0gICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtc3RyMiIs
Ci0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
LQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RD
bGFzcywKLSAgICAgICAgUFJPUF9TVVBQTEVNRU5UQUxfTk9ERSwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKLSAgICAgICAgICAgICJzdXBwbGVtZW50YWwtbm9kZSIsCi0gICAgICAgICAg
ICAiVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtbm9kZSIsCi0gICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTU5vZGUqIFRlc3RJbnRlcmZhY2U6c3VwcGxlbWVudGFsLW5vZGUiLAotICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNl
X2luaXQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01U
ZXN0SW50ZXJmYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9JTlRFUkZBQ0VfR0VU
X1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0SW50ZXJmYWNl
UHJpdmF0ZSgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50
c19tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotI2lmIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZB
Q0Uoc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+aW1wbGVtZW50c01ldGhvZDEoKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjIyIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yMyIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZh
Y2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywg
R0Vycm9yKiogZXJyb3IpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpLCAwKTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzdHJBcmcsIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkoob2JqQXJnKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2Uq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3Ry
QXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0Ojpjb3JlKG9iakFyZyk7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbXBsZW1lbnRzTWV0aG9kMihjb252ZXJ0ZWRT
dHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFVOVVNFRF9QQVJBTShvYmpBcmcpOwotICAg
IFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMjIiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjIzIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYp
OwotICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFVOVVNFRF9QQVJBTShvYmpBcmcpOwot
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDEoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikK
LXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxNZXRob2QxKCppdGVtKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNl
bGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZiwg
Y29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqQXJnLCBHRXJyb3IqKiBl
cnJvcikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0j
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJy
b3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJBcmcgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0
ZWRPYmpBcmcgPSBXZWJLaXQ6OmNvcmUob2JqQXJnKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhv
ZDIoKml0ZW0sIGNvbnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZywgZWMpKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7Ci0gICAgVU5VU0VE
X1BBUkFNKG9iakFyZyk7Ci0gICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7Ci0gICAgVU5V
U0VEX1BBUkFNKG9iakFyZyk7Ci0gICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLWdjaGFy
KiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjEoV2ViS2l0RE9N
VGVzdEludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwot
ICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aW1wbGVtZW50c1N0
cjEoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYp
OwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikKLSAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0gICAgcmV0
dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLWdjaGFyKiB3ZWJr
aXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoV2ViS2l0RE9NVGVzdElu
dGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aW1wbGVtZW50c1N0cjIoKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpICov
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZhY2Uq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0SW1wbGVtZW50
c1N0cjIoY29udmVydGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24yMiIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMjMiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKSAqLwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
Ci19Ci0KLVdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxl
bWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lO
VEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmltcGxlbWVudHNOb2RlKCkpOwotICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNl
bGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0gICAg
cmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19ub2RlKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHZhbHVlKQotewotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8
IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNF
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERSh2YWx1ZSkp
OwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUp
OwotICAgIGl0ZW0tPnNldEltcGxlbWVudHNOb2RlKCpjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9p
bnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNl
bGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0
SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0cjEoaXRlbSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIi
KQotICAgIHJldHVybiAwOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKSAqLwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpdGVtKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRf
c3VwcGxlbWVudGFsX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBw
bGVtZW50YWxTdHIyKCppdGVtLCBjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KLX0KLQotV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikK
LXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRl
cmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxOb2RlKCppdGVtKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQotICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKLSAgICByZXR1cm4gMDsKLSNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIkNvbmRpdGlvbjIiKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBz
ZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUodmFsdWUpKTsKLSAgICBXZWJD
b3JlOjpUZXN0SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6Ok5vZGUqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBXZWJD
b3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxOb2RlKCppdGVtLCAqY29udmVy
dGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIi
KQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAq
LwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTE2NmY3Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMzMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBXZWJLaXRET01UZXN0SW50ZXJmYWNlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEludGVy
ZmFjZV9oCi0KLSNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgot
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRFUkZBQ0UgICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0lOVEVSRkFDRSwgV2ViS2l0RE9N
VGVzdEludGVyZmFjZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JTlRFUkZBQ0VfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfSU5URVJGQUNFLCBXZWJLaXRET01UZXN0SW50ZXJmYWNlQ2xhc3MpCi0jZGVmaW5l
IFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSU5URVJGQUNFKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRFUkZBQ0Up
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0lOVEVS
RkFDRSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZUNsYXNzKSkKLQotI2lmIEVOQUJMRShDb25kaXRp
b24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFX0lNUExFTUVOVFNDT05TVEFOVDE6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNU
X0lOVEVSRkFDRV9JTVBMRU1FTlRTQ09OU1RBTlQxIDEKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0
aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLQotI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfSU5URVJG
QUNFX0lNUExFTUVOVFNDT05TVEFOVDI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lO
VEVSRkFDRV9JTVBMRU1FTlRTQ09OU1RBTlQyIDIKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNF
X1NVUFBMRU1FTlRBTENPTlNUQU5UMToKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFX1NVUFBMRU1FTlRBTENPTlNUQU5UMSAxCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKLS8qKgotICogV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFD
RV9TVVBQTEVNRU5UQUxDT05TVEFOVDI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lO
VEVSRkFDRV9TVVBQTEVNRU5UQUxDT05TVEFOVDIgMgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RJ
bnRlcmZhY2UgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3RJbnRlcmZhY2VDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX2ltcGxlbWVudHNfbWV0aG9kMToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
SW50ZXJmYWNlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QxKFdlYktpdERP
TVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfaW1wbGVtZW50c19tZXRob2QyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZh
Y2UKLSAqIEBzdHJBcmc6IEEgI2djaGFyCi0gKiBAb2JqQXJnOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVt
ZW50c19tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBz
dHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDE6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBs
ZW1lbnRhbF9tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDI6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBv
YmpBcmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0
X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMihXZWJLaXRET01UZXN0SW50
ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpB
cmcsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNl
X2dldF9pbXBsZW1lbnRzX3N0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFj
ZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfaW1w
bGVtZW50c19zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxlbWVudHNfc3RyMjoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0SW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9t
X3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFj
ZSogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVt
ZW50c19zdHIyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UKLSAqIEB2YWx1
ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
dm9pZAotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19zdHIyKFdlYktp
dERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfaW1wbGVtZW50c19ub2RlOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2lt
cGxlbWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9pbXBsZW1lbnRzX25vZGU6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICogQHZhbHVlOiBBICNXZWJLaXRET01Ob2RlCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2Vfc2V0X2ltcGxlbWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2Vs
Zik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFs
X3N0cjI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFJldHVy
bnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIo
V2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdEludGVyZmFjZQotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3Nl
dF9zdXBwbGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1
cHBsZW1lbnRhbF9ub2RlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UKLSAq
Ci0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKLXdlYmtp
dF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0
X3N1cHBsZW1lbnRhbF9ub2RlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UK
LSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NTm9kZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBw
bGVtZW50YWxfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiB2YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0SW50ZXJmYWNlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RJbnRlcmZhY2Uuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2Uuc3ltYm9scwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmZjBlOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLnN5
bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi12b2lkIHdlYmtpdF9kb21fdGVz
dF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQot
V2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9pbXBsZW1lbnRzX21l
dGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIGNvbnN0IGdjaGFyKiwgV2ViS2l0RE9NVGVz
dE9iaiosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2ltcGxlbWVu
dHNfbWV0aG9kNChXZWJLaXRET01UZXN0SW50ZXJmYWNlKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKikK
LVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFs
X21ldGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIGNvbnN0IGdjaGFyKiwgV2ViS2l0RE9N
VGVzdE9iaiosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBs
ZW1lbnRhbF9tZXRob2Q0KFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxlbWVudHNfc3RyMShXZWJLaXRET01UZXN0SW50ZXJm
YWNlKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0
cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2Vfc2V0X2ltcGxlbWVudHNfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiwgY29uc3QgZ2No
YXIqKQotV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfaW1wbGVt
ZW50c19ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX3NldF9pbXBsZW1lbnRzX25vZGUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIFdl
YktpdERPTU5vZGUqKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBs
ZW1lbnRhbF9zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotZ2NoYXIqIHdlYmtpdF9kb21f
dGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZh
Y2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxfc3Ry
MihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiwgY29uc3QgZ2NoYXIqKQotV2ViS2l0RE9NTm9kZSog
d2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUoV2ViS2l0RE9N
VGVzdEludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1cHBs
ZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqLCBXZWJLaXRET01Ob2RlKikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RJdGVyYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SXRlcmFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0MjRiMjQ0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJdGVyYWJsZS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RJdGVyYWJsZS5o
IgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUg
IldlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZl
cnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JVEVSQUJMRV9HRVRfUFJJVkFU
RShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9U
RVNUX0lURVJBQkxFLCBXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlKQotCi10eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OlRlc3RJdGVyYWJsZT4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RJdGVyYWJsZSoga2l0KFdl
YkNvcmU6OlRlc3RJdGVyYWJsZSogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
Ci0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSVRFUkFCTEUocmV0KTsKLQotICAgIHJl
dHVybiB3cmFwVGVzdEl0ZXJhYmxlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RJdGVyYWJsZSog
Y29yZShXZWJLaXRET01UZXN0SXRlcmFibGUqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVl
c3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SXRlcmFibGUqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0SXRlcmFibGUq
IHdyYXBUZXN0SXRlcmFibGUoV2ViQ29yZTo6VGVzdEl0ZXJhYmxlKiBjb3JlT2JqZWN0KQotewot
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0lURVJB
QkxFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9JVEVSQUJMRSwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SXRlcmFibGUsIHdlYmtpdF9kb21fdGVzdF9p
dGVyYWJsZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2l0ZXJhYmxlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRE
T01UZXN0SXRlcmFibGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0lURVJBQkxFX0dF
VF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQo
cHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdEl0ZXJh
YmxlUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pdGVyYWJs
ZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCog
d2Via2l0X2RvbV90ZXN0X2l0ZXJhYmxlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fdGVzdF9pdGVyYWJsZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0
RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9JVEVSQUJMRV9H
RVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXN0SXRlcmFibGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9pdGVyYWJsZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RJdGVyYWJsZUNs
YXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlKSk7Ci0g
ICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9pdGVyYWJsZV9j
b25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0
X2l0ZXJhYmxlX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaXRl
cmFibGVfaW5pdChXZWJLaXRET01UZXN0SXRlcmFibGUqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0
RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9JVEVSQUJMRV9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RJdGVyYWJs
ZVByaXZhdGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQwNzRmNTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIgot
I2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9KU19CVUlMVElOX0NPTlNU
UlVDVE9SLCBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSB7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gY29yZU9iamVjdDsK
LX0gV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcioga2l0KFdlYkNv
cmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogb2JqKQotewotICAgIGlmICghb2JqKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6
Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9DT05T
VFJVQ1RPUihyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Io
b2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktp
dERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERP
TVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcihX
ZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNT
RVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SlNCdWls
dGluQ29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9U
RVNUX0FUVFJJQlVURSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc19idWls
dGluX2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRE
T01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNU
X0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAg
IHByaXYtPn5XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKCk7Ci0gICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBzZWxmID0gV0VC
S0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqZWN0KTsKLQotICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9URVNUX0FUVFJJQlVURToKLSAgICAgICAg
d2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Rlc3RfYXR0cmlidXRl
KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
c2VsZiA9IFdFQktJVF9ET01fVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKG9iamVjdCk7Ci0K
LSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfVEVTVF9BVFRSSUJVVEU6
Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9qc19i
dWlsdGluX2NvbnN0cnVjdG9yX2dldF90ZXN0X2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09i
amVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5f
Y29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTVRlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJ
TFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVy
biBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2Nv
bnN0cnVjdG9yX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xh
c3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
aXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0
X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFsaXpl
OwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2pzX2J1
aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3Byb3Bl
cnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29i
amVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAgICJ0ZXN0LWF0dHJpYnV0ZSIsCi0gICAgICAgICAg
ICAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOnRlc3QtYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdib29sZWFuIFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjp0ZXN0LWF0dHJp
YnV0ZSIsCi0gICAgICAgICAgICBGQUxTRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfanNfYnVpbHRpbl9j
b25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVz
dCkKLXsKLSAgICBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUocmVx
dWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQ
cml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfdGVzdF9mdW5jdGlvbihXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT50ZXN0RnVuY3Rpb24oKTsKLX0KLQotZ2Jvb2xlYW4g
d2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3Rlc3RfYXR0cmlidXRl
KFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2VsZiksIEZBTFNFKTsK
LSAgICBXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dGVzdEF0dHJpYnV0ZSgpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5f
Y29uc3RydWN0b3Jfc2V0X3Rlc3RfYXR0cmlidXRlKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvciogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5z
ZXRUZXN0QXR0cmlidXRlKHZhbHVlKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWQ1MGM4Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLSNkZWZp
bmUgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLQotI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJ
TFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9KU19CVUlMVElOX0NPTlNUUlVD
VE9SKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQotI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RS
VUNUT1JfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
LX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3Mgewot
ICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkg
R1R5cGUKLXdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90eXBlKHZv
aWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3Rl
c3RfZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3Rlc3RfZnVuY3Rpb24oV2ViS2l0
RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3RfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9nZXRfdGVzdF9hdHRyaWJ1dGU6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yCi0gKgotICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90ZXN0
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3NldF90ZXN0X2F0
dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IK
LSAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jf
c2V0X3Rlc3RfYXR0cmlidXRlKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDAzOWRhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
aXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRl
X2gKLQotI2luY2x1ZGUgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHdyYXBUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Ci1X
ZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IqKTsKLVdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29y
ZShXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqKTsKLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZDRi
MDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIldlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oIgot
I2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVJfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9M
SVNUX0xJU1RFTkVSLCBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUp
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
aXZhdGUgewotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4g
Y29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqIGtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogb2JqKQotewot
ICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RF
U1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUihyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciogY29yZShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciog
cmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIq
IHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAg
cmV0dXJuIFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LCB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lciwgV0VCS0lUX0RPTV9U
WVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xp
c3RfbGlzdGVuZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9N
RURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAg
ICBwcml2LT5+V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlKCk7Ci0g
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVu
ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2NvbnN0cnVjdG9yKEdU
eXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVj
dFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX3Bh
cmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
Y29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9M
SVNURU5FUl9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVj
dDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlz
dGVuZXJfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNsYXNz
KiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
aXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0
X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfY29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2Zp
bmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlz
dF9saXN0ZW5lcl9pbml0KFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiByZXF1
ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSX0dFVF9QUklW
QVRFKHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcml2YXRlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3N2M3ZjRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKLSNk
ZWZpbmUgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaAotCi0jaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiAgICAgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9nZXRfdHlwZSgpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUihvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLCBXZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNU
X0xJU1RFTkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIsIFdlYktp
dERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX01FRElBX1FVRVJZ
X0xJU1RfTElTVEVORVIpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfTUVESUFfUVVFUllf
TElTVF9MSVNURU5FUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVJfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiwgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2xhc3MgewotICAgIFdl
YktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUK
LXdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2dldF90eXBlKHZvaWQp
OwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuc3ltYm9scyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRl
MjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUyZTk3MjYxNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCi0j
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIqIHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciopOwotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGtp
dChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciopOwotV2ViQ29yZTo6VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2IyYTM2My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNs
dWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlLmgiCi0j
aW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RF
U1RfTkFNRURfQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
VGVzdE5hbWVkQ29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIG9iaikK
LXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIg
cmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RP
TV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3ROYW1l
ZENvbnN0cnVjdG9yKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBj
b3JlKFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3Rvciogd3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6
OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciwgd2Via2l0X2Rv
bV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmpl
Y3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJp
dmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1
Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5
cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFt
KiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7
Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROYW1lZENv
bnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVj
dCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfbmFtZWRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1
Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
clByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90
ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmluYWxpemU7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktp
dERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05T
VFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
c3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvci5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iuc3ltYm9scwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTU5NzQwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3ROb2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdE5vZGUuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCi0jaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRE
T01UZXN0Tm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdE5vZGUqIGtpdChXZWJDb3JlOjpU
ZXN0Tm9kZSogb2JqKQotewotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfTk9ERShraXQoc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKLX0KLQotV2ViQ29yZTo6VGVzdE5vZGUq
IGNvcmUoV2ViS2l0RE9NVGVzdE5vZGUqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3ROb2RlKiB3cmFwVGVzdE5v
ZGUoV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfTk9ERShnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX1RFU1RfTk9ERSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21fdGVzdF9ub2RlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6
RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Ci0gICAgaWYgKCFjb3JlRXZl
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROb2RlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmlu
ZGluZ3MoKmNvcmVFdmVudCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwotICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRl
c2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfYWRkX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0gICAgV2Vi
Q29yZTo6VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9k
ZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJldHVybiBX
ZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0gICAgV2ViQ29yZTo6
VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9kZSo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJldHVybiBXZWJDb3Jl
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJn
ZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9k
b21fdGVzdF9ub2RlX2Rpc3BhdGNoX2V2ZW50OwotICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9hZGRfZXZlbnRfbGlzdGVuZXI7Ci0gICAgaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ub2RlX3JlbW92ZV9ldmVu
dF9saXN0ZW5lcjsKLX0KLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVGVzdE5v
ZGUsIHdlYmtpdF9kb21fdGVzdF9ub2RlLCBXRUJLSVRfRE9NX1RZUEVfTk9ERSwgR19JTVBMRU1F
TlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQpKQotCi1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9OQU1FLAot
fTsKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYgPSBXRUJLSVRfRE9N
X1RFU1RfTk9ERShvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2Fz
ZSBQUk9QX05BTUU6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub2RlX3NldF9uYW1lKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X25vZGVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2Vi
S2l0RE9NVGVzdE5vZGUqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfTk9ERShvYmplY3QpOwotCi0g
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9QX05BTUU6Ci0gICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9ub2RlX2dldF9uYW1lKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ub2RlX2Ns
YXNzX2luaXQoV2ViS2l0RE9NVGVzdE5vZGVDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
LSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9ub2RlX3Nl
dF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
dGVzdF9ub2RlX2dldF9wcm9wZXJ0eTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OQU1FLAotICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgIm5hbWUiLAotICAgICAgICAgICAg
IlRlc3ROb2RlOm5hbWUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb2Rl
Om5hbWUiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfaW5pdChXZWJL
aXRET01UZXN0Tm9kZSogcmVxdWVzdCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Ci19
Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShXZWJLaXRET01UZXN0Tm9k
ZSogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PREUoc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3ROb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9zZXRfbmFtZShX
ZWJLaXRET01UZXN0Tm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9OT0RFKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7Ci0gICAgaXRlbS0+c2V0TmFtZShjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3ROb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Tm9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYThjZWQ2
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3ROb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0v
KgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3ROb2Rl
X2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE5vZGVfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01Ob2RlLmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVNUX05PREUgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X25vZGVfZ2V0X3R5cGUoKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX05PREUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9ERSwgV2ViS2l0
RE9NVGVzdE5vZGUpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTk9ERV9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9OT0RFLCBXZWJLaXRET01UZXN0Tm9kZUNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RF
U1RfTk9ERShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9OT0RFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX05P
REVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfTk9ERSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT0RFX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01f
VFlQRV9URVNUX05PREUsIFdlYktpdERPTVRlc3ROb2RlQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3ROb2RlIHsKLSAgICBXZWJLaXRET01Ob2RlIHBhcmVudF9pbnN0YW5jZTsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdE5vZGVDbGFzcyB7Ci0gICAgV2ViS2l0RE9NTm9kZUNsYXNz
IHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9u
b2RlX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ub2RlX2dldF9u
YW1lOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICogUmV0dXJuczogQSAj
Z2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIq
Ci13ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShXZWJLaXRET01UZXN0Tm9kZSogc2VsZik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X25hbWU6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE5vZGUKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0
X25hbWUoV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLUdf
RU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNl
bmRpZiAvKiBXZWJLaXRET01UZXN0Tm9kZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5zeW1ib2xz
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5vZGUuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4u
MDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjJkMDcwLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCww
IEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuaCIKLQotI2luY2x1ZGUg
IkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VU
RjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklTVElDX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfTk9OREVURVJNSU5JU1RJQywgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNQcml2
YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNQcml2
YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWM+IGNvcmVPYmpl
Y3Q7Ci19IFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBraXQoV2ViQ29yZTo6
VGVzdE5vbmRldGVybWluaXN0aWMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmop
KQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUMocmV0KTsK
LQotICAgIHJldHVybiB3cmFwVGVzdE5vbmRldGVybWluaXN0aWMob2JqKTsKLX0KLQotV2ViQ29y
ZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGNvcmUoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiB3cmFwVGVz
dE5vbmRldGVybWluaXN0aWMoV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGNvcmVPYmpl
Y3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RF
U1RfTk9OREVURVJNSU5JU1RJQyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9O
REVURVJNSU5JU1RJQywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYywgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWMsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX05PTkRFVEVS
TUlOSVNUSUNfUkVBRE9OTFlfQVRUUiwKLSAgICBQUk9QX05PTkRFVEVSTUlOSVNUSUNfV1JJVEVB
QkxFX0FUVFIsCi0gICAgUFJPUF9OT05ERVRFUk1JTklTVElDX0VYQ0VQVElPTl9BVFRSLAotICAg
IFBST1BfTk9OREVURVJNSU5JU1RJQ19HRVRURVJfRVhDRVBUSU9OX0FUVFIsCi0gICAgUFJPUF9O
T05ERVRFUk1JTklTVElDX1NFVFRFUl9FWENFUFRJT05fQVRUUiwKLX07Ci0KLXN0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKLXsKLSAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQ19HRVRfUFJJVkFURShvYmplY3QpOwotCi0g
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSgpOwot
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewot
ICAgIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmID0gV0VCS0lUX0RPTV9URVNU
X05PTkRFVEVSTUlOSVNUSUMob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewot
ICAgIGNhc2UgUFJPUF9OT05ERVRFUk1JTklTVElDX1dSSVRFQUJMRV9BVFRSOgotICAgICAgICB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0
ZWFibGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfRVhDRVBUSU9OX0FUVFI6Ci0gICAg
ICAgIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGlj
X2V4Y2VwdGlvbl9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19HRVRURVJfRVhDRVBUSU9O
X0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25k
ZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25fYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNU
SUNfU0VUVEVSX0VYQ0VQVElPTl9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0
ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHIoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiA9
IFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklTVElDKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19SRUFET05MWV9B
VFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfbm9u
ZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19yZWFkb25seV9hdHRyKHNlbGYpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfV1JJVEVBQkxF
X0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3dyaXRlYWJsZV9hdHRyKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfRVhD
RVBUSU9OX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9h
dHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNU
SUNfR0VUVEVSX0VYQ0VQVElPTl9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3Rp
Y19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoc2VsZiwgbnVsbHB0cikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19TRVRURVJfRVhDRVBUSU9OX0FUVFI6Ci0g
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9ub25kZXRl
cm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihzZWxm
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X25vbmRl
dGVybWluaXN0aWNfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17
Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X25v
bmRldGVybWluaXN0aWNfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTVRl
c3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9OT05ERVRF
Uk1JTklTVElDX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKj4oV0VCS0lUX0RPTV9PQkpF
Q1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0Owot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19jbGFzc19p
bml0KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsK
LSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSkpOwotICAgIGdvYmplY3RDbGFz
cy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19jb25zdHJ1
Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X25vbmRl
dGVybWluaXN0aWNfZmluYWxpemU7Ci0gICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfcHJvcGVydHk7Ci0gICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19n
ZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAg
ICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfTk9OREVURVJNSU5JU1RJQ19SRUFET05M
WV9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJub25kZXRl
cm1pbmlzdGljLXJlYWRvbmx5LWF0dHIiLAotICAgICAgICAgICAgIlRlc3ROb25kZXRlcm1pbmlz
dGljOm5vbmRldGVybWluaXN0aWMtcmVhZG9ubHktYXR0ciIsCi0gICAgICAgICAgICAicmVhZC1v
bmx5IGdsb25nIFRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtcmVhZG9ubHkt
YXR0ciIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05PTkRFVEVSTUlO
SVNUSUNfV1JJVEVBQkxFX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAibm9uZGV0ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0gICAgICAgICAgICAi
VGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0g
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0
ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OT05ERVRFUk1J
TklTVElDX0VYQ0VQVElPTl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAg
ICAgICAgICAgIm5vbmRldGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAotICAgICAgICAgICAg
IlRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAot
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRl
dGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfTk9OREVURVJN
SU5JU1RJQ19HRVRURVJfRVhDRVBUSU9OX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCi0gICAgICAgICAgICAibm9uZGV0ZXJtaW5pc3RpYy1nZXR0ZXItZXhjZXB0aW9uLWF0dHIi
LAotICAgICAgICAgICAgIlRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtZ2V0
dGVyLWV4Y2VwdGlvbi1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0
Tm9uZGV0ZXJtaW5pc3RpYzpub25kZXRlcm1pbmlzdGljLWdldHRlci1leGNlcHRpb24tYXR0ciIs
Ci0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
LQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RD
bGFzcywKLSAgICAgICAgUFJPUF9OT05ERVRFUk1JTklTVElDX1NFVFRFUl9FWENFUFRJT05fQVRU
UiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJub25kZXRlcm1p
bmlzdGljLXNldHRlci1leGNlcHRpb24tYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE5vbmRldGVy
bWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy1zZXR0ZXItZXhjZXB0aW9uLWF0dHIiLAotICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWlu
aXN0aWMtc2V0dGVyLWV4Y2VwdGlvbi1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2luaXQoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUNfR0VUX1BSSVZBVEUocmVx
dWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZh
dGUoKTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfbm9u
ZGV0ZXJtaW5pc3RpY196ZXJvX2FyZ19mdW5jdGlvbihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlO
SVNUSUMoc2VsZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5u
b25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWlu
aXN0aWNfcmVhZG9ubHlfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm5vbmRldGVybWluaXN0aWNSZWFk
b25seUF0dHIoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nY2hhciogd2Via2l0X2RvbV90
ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHIo
V2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9OT05ERVRFUk1JTklTVElDKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ub25kZXRlcm1pbmlzdGljV3Jp
dGVhYmxlQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX3dyaXRlYWJsZV9hdHRy
KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZikpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1p
bmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRO
b25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFy
KiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19l
eGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9y
KiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT05ERVRFUk1JTklT
VElDKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJv
ciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bm9uZGV0ZXJtaW5pc3RpY0V4
Y2VwdGlvbkF0dHIoZWMpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9h
dHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRl
cm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5z
ZXROb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdj
aGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3Rp
Y19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNl
bGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9O
REVURVJNSU5JU1RJQyhzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5vbmRldGVy
bWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5p
c3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
Tk9OREVURVJNSU5JU1RJQyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOwotICAgIGl0ZW0tPnNldE5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRl
cm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RO
b25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5vbmRldGVybWluaXN0aWNTZXR0ZXJF
eGNlcHRpb25BdHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNfc2V0dGVyX2V4Y2Vw
dGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9O
T05ERVRFUk1JTklTVElDKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKLSAgICBXZWJDb3JlOjpUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0Tm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWY4MjMxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRl
cm1pbmlzdGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoKLSAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y19oCi0jZGVmaW5lIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljX2gKLQotI2lmZGVmIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9URVNUX05PTkRFVEVSTUlOSVNUSUMgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9URVNUX05PTkRFVEVSTUlOSVNUSUMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9OREVURVJNSU5JU1RJQywg
V2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1Rf
Tk9OREVURVJNSU5JU1RJQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT05ERVRFUk1JTklTVElDLCBXZWJLaXRE
T01UZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1Rf
Tk9OREVURVJNSU5JU1RJQyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT05ERVRFUk1JTklTVElDKSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUNfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9OREVURVJN
SU5JU1RJQykpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklTVElDX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01f
VFlQRV9URVNUX05PTkRFVEVSTUlOSVNUSUMsIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
Q2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljIHsKLSAgICBX
ZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0
ZXJtaW5pc3RpY19nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfbm9u
ZGV0ZXJtaW5pc3RpY19ub25kZXRlcm1pbmlzdGljX3plcm9fYXJnX2Z1bmN0aW9uOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCi0gKgotICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2Jv
b2xlYW4KLXdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRldGVybWluaXN0aWNf
emVyb19hcmdfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1p
bmlzdGljX3JlYWRvbmx5X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVy
bWluaXN0aWMKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWlu
aXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfcmVhZG9ubHlfYXR0cihXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X25vbmRldGVy
bWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hh
cgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3dyaXRl
YWJsZV9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193
cml0ZWFibGVfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
YwotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9u
ZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yyogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
bm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICogQGVycm9yOiAjR0Vy
cm9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3Rp
Y19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCi0gKiBAdmFsdWU6
IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGlj
X2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlz
dGljX2dldF9ub25kZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25fYXR0cjoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICogQGVycm9yOiAjR0Vycm9yCi0g
KgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRf
bm9uZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRl
dGVybWluaXN0aWMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0
aW9uX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAq
IEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVy
bWluaXN0aWNfZ2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlz
dGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25f
YXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICoKLSAq
IFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRl
dGVybWluaXN0aWNfc2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1p
bmlzdGljKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3Rp
Y19zZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAq
IEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJt
aW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOwotCi1HX0VORF9E
RUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYg
LyogV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRl
dGVybWluaXN0aWMuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLnN5bWJvbHMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjk0ZTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWlu
aXN0aWMuc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWdib29sZWFuIHdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRldGVybWluaXN0aWNfemVyb19hcmdf
ZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQotZ2xvbmcgd2Via2l0X2Rv
bV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfcmVhZG9ubHlfYXR0
cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0
X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHIoV2Vi
S2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0
ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cihXZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rl
c3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cihX
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0
cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19nZXR0
ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqLCBHRXJyb3Iq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWlu
aXN0aWNfZ2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
KiwgY29uc3QgZ2NoYXIqKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGlj
X2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpYyopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGlj
X3NldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2ViZTYxLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25k
ZXRlcm1pbmlzdGljUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoK
LSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
Ci0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0Tm9uZGV0
ZXJtaW5pc3RpY1ByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y1ByaXZhdGVfaAotCi0jaW5jbHVkZSAiVGVzdE5vbmRldGVybWluaXN0aWMuaCIKLSNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogd3JhcFRlc3ROb25kZXRl
cm1pbmlzdGljKFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKik7Ci1XZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpYyoga2l0KFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKik7Ci1X
ZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY29yZShXZWJLaXRET01UZXN0Tm9uZGV0ZXJt
aW5pc3RpYyopOwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvKiBXZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2N2U4ZC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0T2JqLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMTEgKzAsMCBAQAotLyoKLSAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YktpdERPTVRlc3RPYmouaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgot
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTURp
Y3Rpb25hcnlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9pbnRQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdERpY3Rpb25hcnlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdEVudW1UeXBlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3ROb2RlUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RPYmpQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0RE9NWFBhdGhOU1Jlc29sdmVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVy
dFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShvYmop
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX09C
SiwgV2ViS2l0RE9NVGVzdE9ialByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01U
ZXN0T2JqUHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGNvcmVPYmplY3Q7
Ci19IFdlYktpdERPTVRlc3RPYmpQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2Vi
S2l0RE9NVGVzdE9iaioga2l0KFdlYkNvcmU6OlRlc3RPYmoqIG9iaikKLXsKLSAgICBpZiAoIW9i
aikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0
Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09CSihyZXQp
OwotCi0gICAgcmV0dXJuIHdyYXBUZXN0T2JqKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RPYmoq
IGNvcmUoV2ViS2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPYmoqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3cmFwVGVzdE9iaihX
ZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsK
LSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX1RFU1RfT0JKLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RPYmos
IHdlYmtpdF9kb21fdGVzdF9vYmosIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewot
ICAgIFBST1BfMCwKLSAgICBQUk9QX1JFQURfT05MWV9MT05HX0FUVFIsCi0gICAgUFJPUF9SRUFE
X09OTFlfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKLSAg
ICBQUk9QX0JZVEVfQVRUUiwKLSAgICBQUk9QX09DVEVUX0FUVFIsCi0gICAgUFJPUF9TSE9SVF9B
VFRSLAotICAgIFBST1BfQ0xBTVBFRF9TSE9SVF9BVFRSLAotICAgIFBST1BfRU5GT1JDRV9SQU5H
RV9TSE9SVF9BVFRSLAotICAgIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUiwKLSAgICBQUk9QX0xP
TkdfQVRUUiwKLSAgICBQUk9QX0xPTkdfTE9OR19BVFRSLAotICAgIFBST1BfVU5TSUdORURfTE9O
R19MT05HX0FUVFIsCi0gICAgUFJPUF9TVFJJTkdfQVRUUiwKLSAgICBQUk9QX1RFU1RfT0JKX0FU
VFIsCi0gICAgUFJPUF9URVNUX05VTExBQkxFX09CSl9BVFRSLAotICAgIFBST1BfTEVOSUVOVF9U
RVNUX09CSl9BVFRSLAotICAgIFBST1BfVU5GT1JHRUFCTEVfQVRUUiwKLSAgICBQUk9QX1NUUklO
R19BVFRSX1RSRUFUSU5HX05VTExfQVNfRU1QVFlfU1RSSU5HLAotICAgIFBST1BfWE1MX09CSl9B
VFRSLAotICAgIFBST1BfQ1JFQVRFLAotICAgIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSLAot
ICAgIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfVU5T
SUdORURfSU5URUdSQUxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFIsCi0g
ICAgUFJPUF9SRUZMRUNURURfVVJMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FU
VFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9S
RUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01f
VVJMX0FUVFIsCi0gICAgUFJPUF9FTkFCTEVEX0FUX1JVTlRJTUVfQVRUUklCVVRFLAotICAgIFBS
T1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVS
X0VYQ0VQVElPTl9XSVRIX01FU1NBR0UsCi0gICAgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQ
VElPTiwKLSAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OX1dJVEhfTUVTU0FHRSwK
LSAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX1NU
UklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX1NU
QVRFX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfQ0FMTF9XSVRIX0FORF9TRVRURVJfQ0FMTF9X
SVRIX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FU
VFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCi0g
ICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRSSUJVVEVfUkFJU0VTLAot
ICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9B
VFRSSUJVVEUsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NS
SVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJ
T05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhfU1BBQ0VTX0FUVFJJQlVURSwKLSAgICBQ
Uk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEUsCi0gICAg
UFJPUF9DT05ESVRJT05BTF9BVFRSMSwKLSAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIyLAotICAg
IFBST1BfQ09ORElUSU9OQUxfQVRUUjMsCi0gICAgUFJPUF9BTllfQVRUUklCVVRFLAotICAgIFBS
T1BfQ09OVEVOVF9ET0NVTUVOVCwKLSAgICBQUk9QX01VVEFCTEVfUE9JTlQsCi0gICAgUFJPUF9J
TU1VVEFCTEVfUE9JTlQsCi0gICAgUFJPUF9TVFJBV0JFUlJZLAotICAgIFBST1BfREVTQ1JJUFRJ
T04sCi0gICAgUFJPUF9JRCwKLSAgICBQUk9QX0hBU0gsCi0gICAgUFJPUF9SRVBMQUNFQUJMRV9B
VFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9ET1VCTEVfQVRUUklCVVRFLAotICAgIFBST1Bf
TlVMTEFCTEVfTE9OR19BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9CT09MRUFOX0FUVFJJ
QlVURSwKLSAgICBQUk9QX05VTExBQkxFX1NUUklOR19BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxM
QUJMRV9MT05HX1NFVFRBQkxFX0FUVFJJQlVURSwKLSAgICBQUk9QX05VTExBQkxFX1NUUklOR19T
RVRUQUJMRV9BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9TVFJJTkdfVkFMVUUsCi0gICAg
UFJPUF9BVFRSSUJVVEUsCi0gICAgUFJPUF9QVVRfRk9SV0FSRFNfQVRUUklCVVRFLAotICAgIFBS
T1BfUFVUX0ZPUldBUkRTX05VTExBQkxFX0FUVFJJQlVURSwKLSAgICBQUk9QX1NUUklOR0lGSUVS
X0FUVFJJQlVURSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RPYmpQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAg
cHJpdi0+fldlYktpdERPTVRlc3RPYmpQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQotewotICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfT0JK
KG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfQllU
RV9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9ieXRlX2F0dHIoc2VsZiwg
Z192YWx1ZV9nZXRfaW50OCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
T0NURVRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfb2N0ZXRfYXR0cihz
ZWxmLCBnX3ZhbHVlX2dldF91aW50OCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFBST1BfU0hPUlRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRf
YXR0cihzZWxmLCBnX3ZhbHVlX2dldF9pbnQodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0NMQU1QRURfU0hPUlRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfY2xhbXBlZF9zaG9ydF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRU5GT1JDRV9SQU5HRV9TSE9SVF9BVFRSOgot
ICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHIo
c2VsZiwgZ192YWx1ZV9nZXRfaW50KHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF91bnNpZ25lZF9zaG9ydF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfQVRUUjoKLSAgICAgICAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfbG9uZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgotICAgICAgICB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9p
bnQ2NCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVU5TSUdORURfTE9O
R19MT05HX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xv
bmdfbG9uZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1ZSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3N0cmluZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfVFJFQVRJTkdfTlVMTF9B
U19FTVBUWV9TVFJJTkc6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19h
dHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1JFQVRFOgotICAgICAg
ICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklO
R19BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5n
X2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoKLSAgICAgICAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRf
bG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VO
U0lHTkVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Jl
ZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZh
bHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9B
VFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9h
dHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX3VybF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRS
OgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihzZWxmLCBnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZM
RUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RP
TV9VUkxfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1
c3RvbV91cmxfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VOQUJMRURfQVRfUlVOVElNRV9BVFRSSUJVVEU6Ci0gICAg
ICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2VsZiwgZ192YWx1ZV9nZXRf
bG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dF
VFRFUl9FWENFUFRJT05fV0lUSF9NRVNTQUdFOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2Uoc2VsZiwgZ192YWx1
ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9X
SVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0
dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJf
RVhDRVBUSU9OX1dJVEhfTUVTU0FHRToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
YXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKHNlbGYsIGdfdmFsdWVfZ2V0
X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRS
X1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lU
SF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJp
bmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05ESVRJT05B
TF9BVFRSMToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0
cjEoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2NvbmRpdGlvbmFsX2F0dHIyKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIzOgotICAgICAgICB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyhzZWxmLCBnX3ZhbHVlX2dl
dF9sb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJBV0JFUlJZ
OgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJhd2JlcnJ5KHNlbGYsIGdfdmFs
dWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lEOgot
ICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChzZWxmLCBnX3ZhbHVlX2dldF9sb25n
KHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVUxMQUJMRV9MT05HX1NF
VFRBQkxFX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFi
bGVfbG9uZ19zZXR0YWJsZV9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfU1RSSU5HX1NFVFRBQkxF
X0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVfc3Ry
aW5nX3NldHRhYmxlX2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxFX1NUUklOR19WQUxVRToKLSAg
ICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVfc3RyaW5nX3ZhbHVlKHNlbGYs
IGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X1NUUklOR0lGSUVSX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c3RyaW5naWZpZXJfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRET01UZXN0T2JqKiBzZWxmID0gV0VCS0lUX0RP
TV9URVNUX09CSihvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2Fz
ZSBQUk9QX1JFQURfT05MWV9MT05HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHIoc2VsZikpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSOgotICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWFkX29ubHlfc3RyaW5nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfUkVBRF9PTkxZX1RFU1RfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoc2Vs
ZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQllURV9BVFRSOgotICAgICAgICBn
X3ZhbHVlX3NldF9pbnQ4KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9ieXRlX2F0dHIo
c2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfT0NURVRfQVRUUjoKLSAgICAg
ICAgZ192YWx1ZV9zZXRfdWludDgodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X29jdGV0
X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoK
LSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
aG9ydF9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMQU1QRURf
U0hPUlRfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9jbGFtcGVkX3Nob3J0X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfRU5GT1JDRV9SQU5HRV9TSE9SVF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Nl
dF9pbnQodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2VuZm9yY2VfcmFuZ2Vfc2hvcnRf
YXR0cihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9TSE9S
VF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0xPTkdfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHIoc2VsZikpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5z
aWduZWRfbG9uZ19sb25nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfU1RSSU5HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX1RFU1RfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpfYXR0cihzZWxmKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9URVNUX05VTExBQkxFX09CSl9BVFRSOgotICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Rlc3Rf
bnVsbGFibGVfb2JqX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
TEVOSUVOVF9URVNUX09CSl9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0cihzZWxmKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VTkZPUkdFQUJMRV9BVFRSOgotICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bmZvcmdl
YWJsZV9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19B
VFRSX1RSRUFUSU5HX05VTExfQVNfRU1QVFlfU1RSSU5HOgotICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGlu
Z19udWxsX2FzX2VtcHR5X3N0cmluZyhzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9YTUxfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX0NSRUFURToKLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKLSAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmlu
Z19hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9J
TlRFR1JBTF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihzZWxmKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUjoKLSAg
ICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Jl
ZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFu
X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VS
TF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0
dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RP
TV9JTlRFR1JBTF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoc2VsZikpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9CT09MRUFOX0FU
VFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFI6Ci0gICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3Rl
ZF9jdXN0b21fdXJsX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
RU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJp
YnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfR0VU
VEVSX0VYQ0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2VsZiwgbnVsbHB0cikp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJ
T05fV0lUSF9NRVNTQUdFOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2Uo
c2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9F
WENFUFRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OX1dJVEhfTUVTU0FH
RToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElP
TjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIG51bGxwdHIpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VY
Q0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToK
LSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX1dJVEhfQ0FMTF9XSVRIX0FORF9TRVRURVJfQ0FMTF9XSVRIX0FUVFJJQlVURToK
LSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9jYWxsX3dpdGhfYW5kX3NldHRlcl9jYWxsX3dpdGhfYXR0cmlidXRlKHNlbGYpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhU
X0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUoc2Vs
ZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRU
UklCVVRFX1JBSVNFUzoKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKHNlbGYs
IG51bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VY
RUNVVElPTl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVM6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9u
X2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhzZWxmLCBudWxscHRyKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBU
X1NUQVRFX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2Ny
aXB0X3N0YXRlX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJP
UF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVU
RV9SQUlTRVM6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0
ZV9hdHRyaWJ1dGVfcmFpc2VzKHNlbGYsIG51bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVf
V0lUSF9TUEFDRVNfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGVfd2l0aF9zcGFjZXNfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19B
VFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfYXJndW1lbnRzX2FuZF9jYWxsX3N0YWNrX2F0dHJpYnV0
ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRS
MToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfY29uZGl0aW9uYWxfYXR0cjEoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfQ09ORElUSU9OQUxfQVRUUjI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIyKHNlbGYpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIzOgotICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRy
MyhzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BTllfQVRUUklCVVRFOgot
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2FueV9hdHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09O
VEVOVF9ET0NVTUVOVDoKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KHNlbGYpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX01VVEFCTEVfUE9JTlQ6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbXV0YWJsZV9wb2ludChzZWxmKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTU1VVEFCTEVfUE9JTlQ6Ci0gICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW1tdXRhYmxl
X3BvaW50KHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUkFXQkVSUlk6
Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3N0cmF3YmVycnkoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVTQ1JJ
UFRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2Rlc2NyaXB0aW9uKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X0lEOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9pZChzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9IQVNIOgotICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9o
YXNoKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFUExBQ0VBQkxFX0FU
VFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX05VTExBQkxFX0RPVUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVf
c2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfZG91Ymxl
X2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVUxMQUJM
RV9MT05HX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfbG9uZ19hdHRyaWJ1dGUoc2VsZikpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfQk9PTEVBTl9BVFRSSUJVVEU6Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251
bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQUk9QX05VTExBQkxFX1NUUklOR19BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19hdHRy
aWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfTE9O
R19TRVRUQUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxFX1NUUklOR19TRVRU
QUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19zZXR0YWJsZV9hdHRyaWJ1dGUoc2Vs
ZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfU1RSSU5HX1ZBTFVF
OgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoc2VsZiwgbnVsbHB0cikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfUFVUX0ZPUldBUkRTX0FUVFJJQlVURToKLSAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2Fy
ZHNfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BVVF9G
T1JXQVJEU19OVUxMQUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJp
YnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJJTkdJRklFUl9B
VFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3N0cmluZ2lmaWVyX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5
cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAg
ICBXZWJLaXRET01UZXN0T2JqUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PQkpfR0VU
X1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdE9iaio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwot
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBv
YmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9jbGFzc19pbml0KFdlYktpdERPTVRlc3RPYmpDbGFzcyogcmVxdWVzdENsYXNz
KQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVx
dWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBz
aXplb2YoV2ViS2l0RE9NVGVzdE9ialByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X29ial9maW5hbGl6ZTsKLSAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5Owot
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAg
ICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVBRF9PTkxZX0xPTkdfQVRUUiwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAgICAgICAicmVhZC1vbmx5LWxvbmctYXR0ciIs
Ci0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktbG9uZy1hdHRyIiwKLSAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgVGVzdE9iajpyZWFkLW9ubHktbG9uZy1hdHRyIiwKLSAgICAgICAg
ICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAg
ICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJlYWQtb25seS1zdHJpbmct
YXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktc3RyaW5nLWF0dHIiLAotICAg
ICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdE9iajpyZWFkLW9ubHktc3RyaW5nLWF0dHIi
LAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
LQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RD
bGFzcywKLSAgICAgICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKLSAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJyZWFkLW9ubHktdGVzdC1vYmotYXR0ciIs
Ci0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktdGVzdC1vYmotYXR0ciIsCi0gICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRlc3RPYmoqIFRlc3RPYmo6cmVhZC1vbmx5LXRlc3Qt
b2JqLWF0dHIiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfQllURV9B
VFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfaW50OCgKLSAgICAgICAgICAgICJieXRlLWF0dHIi
LAotICAgICAgICAgICAgIlRlc3RPYmo6Ynl0ZS1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdpbnQ4IFRlc3RPYmo6Ynl0ZS1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOSU5UOCwgR19N
QVhJTlQ4LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAot
ICAgICAgICBQUk9QX09DVEVUX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY191aW50OCgKLSAg
ICAgICAgICAgICJvY3RldC1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm9jdGV0LWF0dHIi
LAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3VpbnQ4IFRlc3RPYmo6b2N0ZXQtYXR0ciIsCi0g
ICAgICAgICAgICAwLCBHX01BWFVJTlQ4LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAg
ICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NIT1JUX0FUVFIsCi0gICAgICAgIGdfcGFy
YW1fc3BlY19pbnQoCi0gICAgICAgICAgICAic2hvcnQtYXR0ciIsCi0gICAgICAgICAgICAiVGVz
dE9iajpzaG9ydC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdzaG9ydCBUZXN0T2Jq
OnNob3J0LWF0dHIiLAotICAgICAgICAgICAgR19NSU5JTlQsIEdfTUFYSU5ULCAwLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NMQU1Q
RURfU0hPUlRfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKLSAgICAgICAgICAgICJj
bGFtcGVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6Y2xhbXBlZC1zaG9ydC1h
dHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdzaG9ydCBUZXN0T2JqOmNsYW1wZWQtc2hv
cnQtYXR0ciIsCi0gICAgICAgICAgICBHX01JTklOVCwgR19NQVhJTlQsIDAsCi0gICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfRU5GT1JDRV9S
QU5HRV9TSE9SVF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAotICAgICAgICAgICAg
ImVuZm9yY2UtcmFuZ2Utc2hvcnQtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajplbmZvcmNl
LXJhbmdlLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Nob3J0IFRlc3RP
Ymo6ZW5mb3JjZS1yYW5nZS1zaG9ydC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOSU5ULCBHX01B
WElOVCwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAg
ICAgICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfdWlu
dCgKLSAgICAgICAgICAgICJ1bnNpZ25lZC1zaG9ydC1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0
T2JqOnVuc2lnbmVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3VzaG9y
dCBUZXN0T2JqOnVuc2lnbmVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgMCwgR19NQVhVSU5U
LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0xPTkdfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAgICAg
ICAibG9uZy1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOmxvbmctYXR0ciIsCi0gICAgICAg
ICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmxvbmctYXR0ciIsCi0gICAgICAgICAgICBH
X01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdv
YmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX2ludDY0KAotICAgICAgICAgICAgImxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAg
ICJUZXN0T2JqOmxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdpbnQ2
NCBUZXN0T2JqOmxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOSU5UNjQsIEdfTUFY
SU5UNjQsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0g
ICAgICAgIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y191aW50NjQoCi0gICAgICAgICAgICAidW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6dW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ3VpbnQ2NCBUZXN0T2JqOnVuc2lnbmVkLWxvbmctbG9uZy1hdHRyIiwKLSAgICAg
ICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NUUklOR19BVFRSLAotICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICJU
ZXN0T2JqOnN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0
T2JqOnN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
LSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfT0JKX0FUVFIsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAidGVzdC1vYmotYXR0ciIsCi0g
ICAgICAgICAgICAiVGVzdE9iajp0ZXN0LW9iai1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp0ZXN0LW9iai1hdHRyIiwKLSAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfTlVMTEFCTEVfT0JKX0FUVFIsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAidGVzdC1udWxsYWJsZS1vYmot
YXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajp0ZXN0LW51bGxhYmxlLW9iai1hdHRyIiwKLSAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp0ZXN0LW51bGxh
YmxlLW9iai1hdHRyIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0xF
TklFTlRfVEVTVF9PQkpfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAg
ICAgICAgICJsZW5pZW50LXRlc3Qtb2JqLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6bGVu
aWVudC10ZXN0LW9iai1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVz
dE9iaiogVGVzdE9iajpsZW5pZW50LXRlc3Qtb2JqLWF0dHIiLAotICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0
Q2xhc3MsCi0gICAgICAgIFBST1BfVU5GT1JHRUFCTEVfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKLSAgICAgICAgICAgICJ1bmZvcmdlYWJsZS1hdHRyIiwKLSAgICAgICAgICAg
ICJUZXN0T2JqOnVuZm9yZ2VhYmxlLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hh
ciogVGVzdE9iajp1bmZvcmdlYWJsZS1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfU1RSSU5HX0FU
VFJfVFJFQVRJTkdfTlVMTF9BU19FTVBUWV9TVFJJTkcsCi0gICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCi0gICAgICAgICAgICAic3RyaW5nLWF0dHItdHJlYXRpbmctbnVsbC1hcy1lbXB0eS1z
dHJpbmciLAotICAgICAgICAgICAgIlRlc3RPYmo6c3RyaW5nLWF0dHItdHJlYXRpbmctbnVsbC1h
cy1lbXB0eS1zdHJpbmciLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6
c3RyaW5nLWF0dHItdHJlYXRpbmctbnVsbC1hcy1lbXB0eS1zdHJpbmciLAotICAgICAgICAgICAg
IiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfWE1MX09CSl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAg
ICAgICAgInhtbC1vYmotYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajp4bWwtb2JqLWF0dHIi
LAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOnhtbC1v
YmotYXR0ciIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PQkosCi0gICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9DUkVBVEUs
Ci0gICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAotICAgICAgICAgICAgImNyZWF0ZSIsCi0g
ICAgICAgICAgICAiVGVzdE9iajpjcmVhdGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jv
b2xlYW4gVGVzdE9iajpjcmVhdGUiLAotICAgICAgICAgICAgRkFMU0UsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVGTEVDVEVEX1NU
UklOR19BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJl
ZmxlY3RlZC1zdHJpbmctYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQtc3Ry
aW5nLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6cmVmbGVj
dGVkLXN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
LSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RFRF9JTlRFR1JBTF9B
VFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJyZWZsZWN0ZWQt
aW50ZWdyYWwtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQtaW50ZWdyYWwt
YXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOnJlZmxlY3RlZC1p
bnRlZ3JhbC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JF
RkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JBTF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfdWxv
bmcoCi0gICAgICAgICAgICAicmVmbGVjdGVkLXVuc2lnbmVkLWludGVncmFsLWF0dHIiLAotICAg
ICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVkLXVuc2lnbmVkLWludGVncmFsLWF0dHIiLAotICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIFRlc3RPYmo6cmVmbGVjdGVkLXVuc2lnbmVkLWlu
dGVncmFsLWF0dHIiLAotICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUZMRUNURURf
Qk9PTEVBTl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAg
ICJyZWZsZWN0ZWQtYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOnJlZmxlY3Rl
ZC1ib29sZWFuLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gVGVzdE9i
ajpyZWZsZWN0ZWQtYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgIEZBTFNFLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RF
RF9VUkxfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJy
ZWZsZWN0ZWQtdXJsLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVkLXVybC1h
dHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0T2JqOnJlZmxlY3RlZC11
cmwtYXR0ciIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAg
IGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAicmVmbGVjdGVkLXN0cmluZy1h
dHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOnJlZmxlY3RlZC1zdHJpbmctYXR0ciIsCi0gICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE9iajpyZWZsZWN0ZWQtc3RyaW5nLWF0dHIi
LAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0
Q2xhc3MsCi0gICAgICAgIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJyZWZsZWN0ZWQtY3VzdG9tLWlu
dGVncmFsLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVkLWN1c3RvbS1pbnRl
Z3JhbC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6cmVmbGVj
dGVkLWN1c3RvbS1pbnRlZ3JhbC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhM
T05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAg
ICAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9BVFRSLAotICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAgICJyZWZsZWN0ZWQtY3VzdG9tLWJvb2xlYW4tYXR0
ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQtY3VzdG9tLWJvb2xlYW4tYXR0ciIs
Ci0gICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBUZXN0T2JqOnJlZmxlY3RlZC1jdXN0
b20tYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgIEZBTFNFLAotICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01f
VVJMX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAicmVm
bGVjdGVkLWN1c3RvbS11cmwtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQt
Y3VzdG9tLXVybC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0T2Jq
OnJlZmxlY3RlZC1jdXN0b20tdXJsLWF0dHIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfRU5BQkxFRF9B
VF9SVU5USU1FX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAg
ICAgICAgICJlbmFibGVkLWF0LXJ1bnRpbWUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJUZXN0
T2JqOmVuYWJsZWQtYXQtcnVudGltZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIFRlc3RPYmo6ZW5hYmxlZC1hdC1ydW50aW1lLWF0dHJpYnV0ZSIsCi0gICAgICAg
ICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAg
ICAgICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCi0gICAgICAgICAgICAiYXR0ci13aXRoLWdldHRlci1leGNlcHRpb24iLAotICAg
ICAgICAgICAgIlRlc3RPYmo6YXR0ci13aXRoLWdldHRlci1leGNlcHRpb24iLAotICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbiIs
Ci0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVS
X0VYQ0VQVElPTl9XSVRIX01FU1NBR0UsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAg
ICAgICAgICAgImF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uLXdpdGgtbWVzc2FnZSIsCi0gICAg
ICAgICAgICAiVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbi13aXRoLW1lc3NhZ2Ui
LAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVy
LWV4Y2VwdGlvbi13aXRoLW1lc3NhZ2UiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAg
ICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKAotICAgICAgICAgICAgImF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAg
ICAgICAgICJUZXN0T2JqOmF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1leGNlcHRpb24iLAot
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9F
WENFUFRJT05fV0lUSF9NRVNTQUdFLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAg
ICAgICAgICJhdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbi13aXRoLW1lc3NhZ2UiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1leGNlcHRpb24td2l0aC1tZXNzYWdlIiwK
LSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1l
eGNlcHRpb24td2l0aC1tZXNzYWdlIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05H
LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdHJpbmctYXR0ci13aXRoLWdldHRlci1leGNl
cHRpb24iLAotICAgICAgICAgICAgIlRlc3RPYmo6c3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhj
ZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0T2JqOnN0cmluZy1h
dHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVFJJTkdfQVRU
Ul9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0g
ICAgICAgICAgICAic3RyaW5nLWF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAg
ICAgICJUZXN0T2JqOnN0cmluZy1hdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE9iajpzdHJpbmctYXR0ci13aXRoLXNldHRlci1l
eGNlcHRpb24iLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAg
ICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRF
LAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1z
dGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtc3RhdGUt
YXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVGVzdE9iajp3aXRoLXNj
cmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAg
UFJPUF9XSVRIX0NBTExfV0lUSF9BTkRfU0VUVEVSX0NBTExfV0lUSF9BVFRSSUJVVEUsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAgIndpdGgtY2FsbC13aXRoLWFuZC1z
ZXR0ZXItY2FsbC13aXRoLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajp3aXRoLWNh
bGwtd2l0aC1hbmQtc2V0dGVyLWNhbGwtd2l0aC1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJl
YWQtb25seSBnbG9uZyBUZXN0T2JqOndpdGgtY2FsbC13aXRoLWFuZC1zZXR0ZXItY2FsbC13aXRo
LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1dJVEhf
U0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hdHRy
aWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRl
eHQtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiog
VGVzdE9iajp3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAg
ICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklC
VVRFX1JBSVNFUywKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3
aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJUZXN0T2Jq
OndpdGgtc2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LXN0YXRlLWF0dHJpYnV0
ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9T
Q1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JBSVNFUywKLSAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4
dC1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJUZXN0T2JqOndpdGgtc2NyaXB0LWV4
ZWN1dGlvbi1jb250ZXh0LWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgInJlYWQtb25s
eSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0
LWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JK
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9BVFRSSUJV
VEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAid2l0aC1zY3Jp
cHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1z
dGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2Jq
KiBUZXN0T2JqOndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWFuZC1zY3JpcHQtc3RhdGUt
YXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1dJVEhf
U0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNF
UywKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlw
dC1leGVjdXRpb24tY29udGV4dC1hbmQtc2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAot
ICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNj
cmlwdC1zdGF0ZS1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NVGVzdE9iaiogVGVzdE9iajp3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hbmQt
c2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9T
VEFURV9XSVRIX1NQQUNFU19BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
Ci0gICAgICAgICAgICAid2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1z
dGF0ZS13aXRoLXNwYWNlcy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1z
Y3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1zdGF0ZS13aXRoLXNwYWNlcy1hdHRy
aWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2Jq
OndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWFuZC1zY3JpcHQtc3RhdGUtd2l0aC1zcGFj
ZXMtYXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1dJ
VEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEUsCi0gICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAid2l0aC1zY3JpcHQtYXJndW1lbnRzLWFu
ZC1jYWxsLXN0YWNrLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajp3aXRoLXNjcmlw
dC1hcmd1bWVudHMtYW5kLWNhbGwtc3RhY2stYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp3aXRoLXNjcmlwdC1hcmd1bWVudHMtYW5k
LWNhbGwtc3RhY2stYXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNU
X09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAg
ICAgICAgICAgICJjb25kaXRpb25hbC1hdHRyMSIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb25k
aXRpb25hbC1hdHRyMSIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmNv
bmRpdGlvbmFsLWF0dHIxIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAot
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9Q
X0NPTkRJVElPTkFMX0FUVFIyLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAg
ICAgICJjb25kaXRpb25hbC1hdHRyMiIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb25kaXRpb25h
bC1hdHRyMiIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmNvbmRpdGlv
bmFsLWF0dHIyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NPTkRJ
VElPTkFMX0FUVFIzLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJj
b25kaXRpb25hbC1hdHRyMyIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb25kaXRpb25hbC1hdHRy
MyIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmNvbmRpdGlvbmFsLWF0
dHIzIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FOWV9BVFRSSUJV
VEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAiYW55LWF0dHJp
YnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajphbnktYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NYW55KiBUZXN0T2JqOmFueS1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0FOWSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQsCi0gICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAiY29udGVudC1kb2N1bWVudCIsCi0gICAg
ICAgICAgICAiVGVzdE9iajpjb250ZW50LWRvY3VtZW50IiwKLSAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRG9jdW1lbnQqIFRlc3RPYmo6Y29udGVudC1kb2N1bWVudCIsCi0gICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAg
ICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9NVVRBQkxFX1BPSU5ULAotICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAgICAgICAgIm11dGFibGUtcG9pbnQiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6bXV0YWJsZS1wb2ludCIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTVNWR1BvaW50KiBUZXN0T2JqOm11dGFibGUtcG9pbnQiLAotICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX1NWR19QT0lOVCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29i
amVjdENsYXNzLAotICAgICAgICBQUk9QX0lNTVVUQUJMRV9QT0lOVCwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJpbW11dGFibGUtcG9pbnQiLAotICAgICAgICAg
ICAgIlRlc3RPYmo6aW1tdXRhYmxlLXBvaW50IiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmo6aW1tdXRhYmxlLXBvaW50IiwKLSAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9TVkdfUE9JTlQsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdv
YmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVFJBV0JFUlJZLAotICAgICAgICBnX3BhcmFtX3Nw
ZWNfbG9uZygKLSAgICAgICAgICAgICJzdHJhd2JlcnJ5IiwKLSAgICAgICAgICAgICJUZXN0T2Jq
OnN0cmF3YmVycnkiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajpzdHJh
d2JlcnJ5IiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0RFU0NSSVBU
SU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biIsCi0gICAgICAgICAgICAiVGVzdE9iajpkZXNjcmlwdGlvbiIsCi0gICAgICAgICAgICAicmVh
ZC1vbmx5IGdsb25nIFRlc3RPYmo6ZGVzY3JpcHRpb24iLAotICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFz
cywKLSAgICAgICAgUFJPUF9JRCwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAg
ICAgICAiaWQiLAotICAgICAgICAgICAgIlRlc3RPYmo6aWQiLAotICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2xvbmcgVGVzdE9iajppZCIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAg
ICAgUFJPUF9IQVNILAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAg
Imhhc2giLAotICAgICAgICAgICAgIlRlc3RPYmo6aGFzaCIsCi0gICAgICAgICAgICAicmVhZC1v
bmx5IGdjaGFyKiBUZXN0T2JqOmhhc2giLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRVBMQUNFQUJMRV9B
VFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAgInJlcGxh
Y2VhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZXBsYWNlYWJsZS1hdHRy
aWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUZXN0T2JqOnJlcGxhY2VhYmxl
LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05VTExB
QkxFX0RPVUJMRV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCi0gICAg
ICAgICAgICAibnVsbGFibGUtZG91YmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9i
ajpudWxsYWJsZS1kb3VibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Rv
dWJsZSBUZXN0T2JqOm51bGxhYmxlLWRvdWJsZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgLUdf
TUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05VTExBQkxFX0xPTkdfQVRUUklCVVRFLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJudWxsYWJsZS1sb25nLWF0dHJp
YnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpudWxsYWJsZS1sb25nLWF0dHJpYnV0ZSIsCi0g
ICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRlc3RPYmo6bnVsbGFibGUtbG9uZy1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OVUxMQUJMRV9CT09M
RUFOX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCi0gICAgICAgICAg
ICAibnVsbGFibGUtYm9vbGVhbi1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6bnVs
bGFibGUtYm9vbGVhbi1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVh
biBUZXN0T2JqOm51bGxhYmxlLWJvb2xlYW4tYXR0cmlidXRlIiwKLSAgICAgICAgICAgIEZBTFNF
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfTlVMTEFCTEVfU1RSSU5HX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKLSAgICAgICAgICAgICJudWxsYWJsZS1zdHJpbmctYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJUZXN0T2JqOm51bGxhYmxlLXN0cmluZy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogVGVzdE9iajpudWxsYWJsZS1zdHJpbmctYXR0cmlidXRlIiwKLSAgICAgICAg
ICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAg
ICAgIFBST1BfTlVMTEFCTEVfTE9OR19TRVRUQUJMRV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFy
YW1fc3BlY19sb25nKAotICAgICAgICAgICAgIm51bGxhYmxlLWxvbmctc2V0dGFibGUtYXR0cmli
dXRlIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm51bGxhYmxlLWxvbmctc2V0dGFibGUtYXR0cmli
dXRlIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6bnVsbGFibGUtbG9u
Zy1zZXR0YWJsZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfTlVMTEFCTEVfU1RSSU5HX1NFVFRBQkxFX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJudWxsYWJsZS1zdHJpbmctc2V0dGFibGUtYXR0
cmlidXRlIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm51bGxhYmxlLXN0cmluZy1zZXR0YWJsZS1h
dHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6bnVsbGFi
bGUtc3RyaW5nLXNldHRhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OVUxMQUJM
RV9TVFJJTkdfVkFMVUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAg
Im51bGxhYmxlLXN0cmluZy12YWx1ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpudWxsYWJsZS1z
dHJpbmctdmFsdWUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajpudWxs
YWJsZS1zdHJpbmctdmFsdWUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAg
ImF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajphdHRyaWJ1dGUiLAotICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogVGVzdE9iajphdHRyaWJ1dGUiLAotICAgICAgICAgICAgIiIs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJP
UF9QVVRfRk9SV0FSRFNfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAot
ICAgICAgICAgICAgInB1dC1mb3J3YXJkcy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RP
Ymo6cHV0LWZvcndhcmRzLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTVRlc3ROb2RlKiBUZXN0T2JqOnB1dC1mb3J3YXJkcy1hdHRyaWJ1dGUiLAotICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9ERSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAg
ICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1BVVF9GT1JXQVJEU19OVUxMQUJMRV9BVFRS
SUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAicHV0LWZv
cndhcmRzLW51bGxhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpwdXQtZm9y
d2FyZHMtbnVsbGFibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NVGVzdE5vZGUqIFRlc3RPYmo6cHV0LWZvcndhcmRzLW51bGxhYmxlLWF0dHJpYnV0ZSIsCi0g
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT0RFLAotICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfU1RSSU5HSUZJRVJfQVRUUklC
VVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInN0cmluZ2lm
aWVyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpzdHJpbmdpZmllci1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6c3RyaW5naWZpZXIt
YXR0cmlidXRlIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfaW5pdChX
ZWJLaXRET01UZXN0T2JqKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RPYmpQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVRlc3RPYmpQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGNvbnN0IGdjaGFyKiB0ZXN0UGFyYW0pCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVS
RSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKHRlc3RQYXJhbSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXN0UGFyYW0gPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodGVzdFBhcmFtKTsKLSAgICBpdGVtLT5lbmFibGVkQXRSdW50aW1lT3Bl
cmF0aW9uKGNvbnZlcnRlZFRlc3RQYXJhbSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRV
UkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9lbmFibGVkX2F0X3J1bnRpbWVf
b3BlcmF0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHRlc3RQYXJhbSkKLXsKLSNp
ZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbih0ZXN0UGFyYW0pOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHRlc3RQYXJhbSk7Ci0gICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0dXJlIikKLSNlbmRpZiAv
KiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
dm9pZF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnZvaWRNZXRob2QoKTsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBv
YmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzdHJBcmcpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihvYmpBcmcpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJBcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZE9i
akFyZyA9IFdlYktpdDo6Y29yZShvYmpBcmcpOwotICAgIGl0ZW0tPnZvaWRNZXRob2RXaXRoQXJn
cyhsb25nQXJnLCBjb252ZXJ0ZWRTdHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcpOwotfQotCi1naW50
OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2ludDggcmVz
dWx0ID0gaXRlbS0+Ynl0ZU1ldGhvZCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWdpbnQ4
IHdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdpbnQ4IGJ5dGVBcmcsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRl
c3RPYmoqIG9iakFyZykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCAwKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iakFyZyksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0Ojpjb3JlKG9iakFyZyk7
Ci0gICAgZ2ludDggcmVzdWx0ID0gaXRlbS0+Ynl0ZU1ldGhvZFdpdGhBcmdzKGJ5dGVBcmcsIGNv
bnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotZ3VpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9kKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9jdGV0TWV0aG9kKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotZ3VpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9kX3dpdGhfYXJncyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDggb2N0ZXRBcmcsIGNvbnN0IGdjaGFyKiBzdHJB
cmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCAw
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iakFy
ZyksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0ckFyZyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0
Ojpjb3JlKG9iakFyZyk7Ci0gICAgZ3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9jdGV0TWV0aG9kV2l0
aEFyZ3Mob2N0ZXRBcmcsIGNvbnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZyk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9sb25nX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmxvbmdNZXRob2QoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2xvbmdfbWV0aG9k
X3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBn
Y2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihvYmpBcmcpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzdHJBcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZE9iakFy
ZyA9IFdlYktpdDo6Y29yZShvYmpBcmcpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmxvbmdN
ZXRob2RXaXRoQXJncyhsb25nQXJnLCBjb252ZXJ0ZWRTdHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21f
dGVzdF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kKCkpOwotICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotV2ViS2l0RE9NVGVz
dE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRE
T01UZXN0T2JqKiBvYmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJBcmcpOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZE9iakFyZyA9IFdlYktpdDo6Y29yZShvYmpB
cmcpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+b2JqTWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgY29udmVydGVkU3RyQXJnLCAq
Y29udmVydGVkT2JqQXJnKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3VuZm9yZ2VhYmxlX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnVuZm9yZ2VhYmxlTWV0aG9kKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX2FyZ190cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogYXJnKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9P
Qkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZEFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChhcmcpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhB
cmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKGNvbnZlcnRlZEFyZyk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZlcl9wYXJhbWV0ZXIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZl
cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfTlNfUkVTT0xWRVIocmVzb2x2ZXIpKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI+IGNvbnZlcnRlZFJlc29sdmVyID0gV2ViS2l0Ojpj
b3JlKHJlc29sdmVyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1l
dGVyKFdURjo6Z2V0UHRyKCpjb252ZXJ0ZWRSZXNvbHZlcikpOwotfQotCi1nY2hhciogd2Via2l0
X2RvbV90ZXN0X29ial9udWxsYWJsZV9zdHJpbmdfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bnVsbGFibGVTdHJpbmdNZXRob2Qo
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpf
bnVsbGFibGVfc3RyaW5nX3NwZWNpYWxfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1
bG9uZyBpbmRleCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwg
MCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5udWxsYWJsZVN0cmlu
Z1NwZWNpYWxNZXRob2QoaW5kZXgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZW51bV9hcmcoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX0VOVU1fVFlQRShlbnVtQXJnKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0RW51bVR5cGUqIGNvbnZlcnRl
ZEVudW1BcmcgPSBXZWJLaXQ6OmNvcmUoZW51bUFyZyk7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aEVu
dW1BcmcoY29udmVydGVkRW51bUFyZyk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9lbnVtX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0RW51bVR5cGUqIGVudW1BcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfRU5V
TV9UWVBFKGVudW1BcmcpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RFbnVtVHlwZSogY29udmVydGVkRW51bUFyZyA9
IFdlYktpdDo6Y29yZShlbnVtQXJnKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxFbnVt
QXJnKGNvbnZlcnRlZEVudW1BcmcpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9hcmdfYW5kX2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVNUX0VOVU1fVFlQRShlbnVtQXJnKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0RW51bVR5cGUqIGNv
bnZlcnRlZEVudW1BcmcgPSBXZWJLaXQ6OmNvcmUoZW51bUFyZyk7Ci0gICAgaXRlbS0+bWV0aG9k
V2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRFbnVtQXJnKTsKLX0K
LQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1
aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJBcmcgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0
ZWRPYmpBcmcgPSBXZWJLaXQ6OmNvcmUob2JqQXJnKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29u
dmVydGVkU3RyQXJnLCAqY29udmVydGVkT2JqQXJnLCBlYykpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFy
KiBzZXJpYWxpemVkQXJnKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZEFyZyk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXJpYWxpemVkVmFs
dWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHNlcmlhbGl6ZWRBcmcpKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9v
cHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01EaWN0aW9uYXJ5
KiBvbywgV2ViS2l0RE9NRGljdGlvbmFyeSogb29vKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ESUNU
SU9OQVJZKG9vKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RJQ1RJT05B
Ulkob29vKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5KiBjb252ZXJ0ZWRPbyA9IFdlYktpdDo6Y29yZShv
byk7Ci0gICAgV2ViQ29yZTo6RGljdGlvbmFyeSogY29udmVydGVkT29vID0gV2ViS2l0Ojpjb3Jl
KG9vbyk7Ci0gICAgaXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRPbywgY29udmVydGVkT29v
KTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAh
KmVycm9yKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPm1ldGhvZFdp
dGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNl
cHRpb25XaXRoTWVzc2FnZSgpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9wdWJs
aWNfYW5kX3ByaXZhdGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFy
KiBhcmd1bWVudCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwg
MCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYXJndW1lbnQsIDApOwotICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkQXJndW1lbnQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnQpOwotICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnB1YmxpY0FuZFByaXZhdGVN
ZXRob2QoY29udmVydGVkQXJndW1lbnQpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
d2l0aFNjcmlwdFN0YXRlVm9pZCgpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlw
dFN0YXRlT2JqKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRl
bS0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1XZWJLaXRET01U
ZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZSgpOwotfQotCi1XZWJLaXRE
T01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250
ZXh0X2FuZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RP
Ymo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaiog
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2Ny
aXB0X3N0YXRlX3dpdGhfc3BhY2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RP
Ymo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcygpKTsKLSAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial93
aXRoX2RvY3VtZW50X2FyZ3VtZW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoRG9jdW1lbnRBcmd1bWVudCgp
OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9jYWxsZXJfZG9jdW1lbnRfYXJn
dW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGl0ZW0tPndpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KCk7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl93aW5kb3dfYXJndW1lbnQoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGl0ZW0tPndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCgpOwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIG9wdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0t
Pm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3ZhbHVlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShvcHQpOwot
fQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2Fy
Z19hbmRfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbk9wdCwg
Z2xvbmcgb3B0KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19h
bmRfdHdvX29wdGlvbmFsX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgbm9uT3B0
LCBnbG9uZyBvcHQxLCBnbG9uZyBvcHQyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9P
Qkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdz
KG5vbk9wdCwgb3B0MSwgb3B0Mik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2No
YXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoY29u
dmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29w
dGlvbmFsX2F0b21pY19zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIq
IHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmco
Y29udmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBjb25zdCBnY2hhciogc3RyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0FuZERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19hbmRfZGVmYXVs
dF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c3RyKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIp
OwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1
ZShjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dp
dGhfb3B0aW9uYWxfc3RyaW5nX2lzX251bGwoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJ
c051bGwoY29udmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmdJc1VuZGVmaW5lZChjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+
bWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKGNvbnZlcnRlZFN0cik7Ci19Ci0K
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNf
ZW1wdHlfc3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzdHIpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0cik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhj
b252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhf
b3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19lbXB0eV9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRT
dHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKGNvbnZlcnRlZFN0cik7Ci19Ci0KLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9kb3VibGVfaXNfbmFfbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZG91YmxlIG51bWJlcikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlzTmFO
KG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRp
b25hbF9mbG9hdF9pc19uYV9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdmbG9hdCBudW1iZXIp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5tZXRob2RXaXRo
T3B0aW9uYWxGbG9hdElzTmFOKG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2ludDY0IG51bWJlcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnaW50NjQgbnVtYmVyKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8o
bnVtYmVyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlv
bmFsX3Vuc2lnbmVkX2xvbmdfbG9uZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDY0IG51
bWJlcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhv
ZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcobnVtYmVyKTsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZ19pc196
ZXJvKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1aW50NjQgbnVtYmVyKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsVW5zaWdu
ZWRMb25nTG9uZ0lzWmVybyhudW1iZXIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
bWV0aG9kX3dpdGhfb3B0aW9uYWxfYm9vbGVhbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9v
bGVhbiBiKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0
aG9kV2l0aE9wdGlvbmFsQm9vbGVhbihiKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX2Jvb2xlYW5faXNfZmFsc2UoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2Jvb2xlYW4gYikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKGIpOwotfQotCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYW55KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTWFueSogYSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQU5ZKGEpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdl
YkNvcmU6OmFueSogY29udmVydGVkQSA9IFdlYktpdDo6Y29yZShhKTsKLSAgICBpdGVtLT5tZXRo
b2RXaXRoT3B0aW9uYWxBbnkoY29udmVydGVkQSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9udWxsYWJsZV93cmFwcGVyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIG9iaikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkoob2JqKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0ZWRPYmogPSBXZWJLaXQ6OmNvcmUo
b2JqKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIoY29udmVy
dGVkT2JqKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlv
bmFsX251bGxhYmxlX3dyYXBwZXJfaXNfbnVsbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0T2JqKiBvYmopCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iaikpOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqID0gV2ViS2l0Ojpjb3JlKG9iaik7Ci0gICAgaXRl
bS0+bWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsKGNvbnZlcnRlZE9iaik7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF94cGF0
aF9uc19yZXNvbHZlcihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXIqIHJlc29sdmVyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9OU19SRVNPTFZFUihy
ZXNvbHZlcikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlcj4gY29udmVydGVkUmVzb2x2
ZXIgPSBXZWJLaXQ6OmNvcmUocmVzb2x2ZXIpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25h
bFhQYXRoTlNSZXNvbHZlcihXVEY6OmdldFB0cihjb252ZXJ0ZWRSZXNvbHZlcikpOwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QxKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Y29uZGl0aW9uYWxNZXRob2QxKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFs
X21ldGhvZDIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDIoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHNlbGYpOwotI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSNlbmRpZgotI2lmICFFTkFCTEUoQ29uZGl0aW9u
MikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNl
bmRpZgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikg
Ki8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5j
b25kaXRpb25hbE1ldGhvZDMoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX2VuZm9yY2VfcmFuZ2UoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ3VzaG9ydCBvYmpBcmdzU2hvcnQsIGd1bG9uZyBvYmpBcmdzTG9uZykKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmNsYXNzTWV0aG9kV2l0
aEVuZm9yY2VSYW5nZShvYmpBcmdzU2hvcnQsIG9iakFyZ3NMb25nKTsKLX0KLQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVRlc3ROb2RlKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT0RFKHZhbHVlKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBX
ZWJDb3JlOjpUZXN0Tm9kZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwot
ICAgIGl0ZW0tPmNvbnZlcnQxKCpjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0
Tm9kZSogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9ERSh2YWx1ZSkpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6VGVzdE5vZGUqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBp
dGVtLT5jb252ZXJ0Mihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0MyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+Y29udmVydDMoY29udmVydGVkVmFsdWUpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPmNvbnZlcnQ0
KGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3Jl
OjpTVkdQb2ludD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm11dGFibGVQb2lu
dEZ1bmN0aW9uKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqIHdlYmtpdF9kb21fdGVzdF9vYmpfaW1tdXRhYmxl
X3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnRGdW5jdGlvbigp
KTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmJhbmFuYSgpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21ldGhvZChXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogaGVhZCwgLi4uKQotewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoaGVhZCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRIZWFkID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGhlYWQpOwotICAg
IHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OwotICAgIFZlY3RvcjxXVEY6OlN0cmluZz4g
Y29udmVydGVkVGFpbDsKLSAgICB2YV9zdGFydCh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIGhlYWQp
OwotICAgIHdoaWxlIChnY2hhciogdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9hcmcodmFyaWFkaWNQ
YXJhbWV0ZXJMaXN0LCBnY2hhciopKQotICAgICAgICBjb252ZXJ0ZWRUYWlsLmFwcGVuZChXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFyaWFkaWNQYXJhbWV0ZXIpKTsKLSAgICB2YV9lbmQodmFyaWFk
aWNQYXJhbWV0ZXJMaXN0KTsKLSAgICBpdGVtLT52YXJpYWRpY1N0cmluZ01ldGhvZChjb252ZXJ0
ZWRIZWFkLCBXVEZNb3ZlKGNvbnZlcnRlZFRhaWwpKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3ZhcmlhZGljX2RvdWJsZV9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Rv
dWJsZSBoZWFkLCBndWludCBuX3RhaWwsIC4uLikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OwotICAgIFZlY3Rvcjxn
ZG91YmxlPiBjb252ZXJ0ZWRUYWlsOwotICAgIHZhX3N0YXJ0KHZhcmlhZGljUGFyYW1ldGVyTGlz
dCwgaGVhZCk7Ci0gICAgY29udmVydGVkVGFpbC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5fdGFp
bCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fdGFpbDsgKytpKSB7Ci0gICAgICAg
IGNvbnZlcnRlZFRhaWwudW5jaGVja2VkQXBwZW5kKHZhX2FyZyh2YXJpYWRpY1BhcmFtZXRlckxp
c3QsIGdkb3VibGUpKTsKLSAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTsKLSAgICBp
dGVtLT52YXJpYWRpY0RvdWJsZU1ldGhvZChoZWFkLCBXVEZNb3ZlKGNvbnZlcnRlZFRhaWwpKTsK
LX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX25vZGVfbWV0aG9kKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTU5vZGUqIGhlYWQsIC4uLikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTk9ERShoZWFkKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRIZWFkID0gV2ViS2l0
Ojpjb3JlKGhlYWQpOwotICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpOb2RlKj4gY29udmVydGVkVGFpbDsKLSAgICB2YV9zdGFydCh2YXJpYWRp
Y1BhcmFtZXRlckxpc3QsIGhlYWQpOwotICAgIHdoaWxlIChXZWJLaXRET01Ob2RlKiB2YXJpYWRp
Y1BhcmFtZXRlciA9IHZhX2FyZyh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIFdlYktpdERPTU5vZGUq
KSkKLSAgICAgICAgY29udmVydGVkVGFpbC5hcHBlbmQoV2ViS2l0Ojpjb3JlKHZhcmlhZGljUGFy
YW1ldGVyKSk7Ci0gICAgdmFfZW5kKHZhcmlhZGljUGFyYW1ldGVyTGlzdCk7Ci0gICAgaXRlbS0+
dmFyaWFkaWNOb2RlTWV0aG9kKCpjb252ZXJ0ZWRIZWFkLCBXVEZNb3ZlKGNvbnZlcnRlZFRhaWwp
KTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2FueShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnZmxvYXQgYSwgZ2xvbmcgYikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPmFueShhLCBiKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2F0
dGFjaF9zaGFkb3dfcm9vdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0RGlj
dGlvbmFyeSogaW5pdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9ESUNUSU9OQVJZKGluaXQp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFdlYkNvcmU6OlRlc3REaWN0aW9uYXJ5KiBjb252ZXJ0ZWRJbml0ID0gV2ViS2l0Ojpjb3JlKGlu
aXQpOwotICAgIGl0ZW0tPmF0dGFjaFNoYWRvd1Jvb3QoY29udmVydGVkSW5pdCk7Ci19Ci0KLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5yZWFkT25seUxvbmdBdHRyKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVz
dF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKLSAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLWdpbnQ4IHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2J5dGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdpbnQ4IHJlc3VsdCA9
IGl0ZW0tPmJ5dGVBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9ieXRlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDgg
dmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRC
eXRlQXR0cih2YWx1ZSk7Ci19Ci0KLWd1aW50OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9vY3Rl
dF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9jdGV0QXR0cigpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfb2N0
ZXRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDggdmFsdWUpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRPY3RldEF0dHIodmFsdWUpOwot
fQotCi1nc2hvcnQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2hvcnRfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdzaG9ydCByZXN1bHQgPSBpdGVtLT5zaG9ydEF0dHIoKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgaXRlbS0+c2V0U2hvcnRBdHRyKHZhbHVlKTsKLX0KLQotZ3Nob3J0IHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2NsYW1wZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdzaG9y
dCByZXN1bHQgPSBpdGVtLT5jbGFtcGVkU2hvcnRBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jbGFtcGVkX3Nob3J0X2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q2xhbXBlZFNob3J0QXR0cih2YWx1ZSk7Ci19Ci0K
LWdzaG9ydCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnc2hvcnQgcmVzdWx0ID0gaXRlbS0+ZW5mb3JjZVJhbmdlU2hvcnRBdHRy
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0
IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0
RW5mb3JjZVJhbmdlU2hvcnRBdHRyKHZhbHVlKTsKLX0KLQotZ3VzaG9ydCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VzaG9ydCByZXN1
bHQgPSBpdGVtLT51bnNpZ25lZFNob3J0QXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBndXNob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRTaG9ydEF0dHIodmFsdWUpOwotfQotCi1n
bG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5sb25nQXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdsb25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
aXRlbS0+c2V0TG9uZ0F0dHIodmFsdWUpOwotfQotCi1naW50NjQgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnaW50NjQgcmVzdWx0ID0gaXRlbS0+
bG9uZ0xvbmdBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50
NjQgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5z
ZXRMb25nTG9uZ0F0dHIodmFsdWUpOwotfQotCi1ndWludDY0IHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ2NCByZXN1bHQg
PSBpdGVtLT51bnNpZ25lZExvbmdMb25nQXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ2NCB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKHZhbHVlKTsK
LX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0
cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNvbnZlcnRlZFZhbHVl
KTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9v
YmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVz
dE9iaiogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHZhbHVlKSk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgaXRl
bS0+c2V0VGVzdE9iakF0dHIoKmNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9i
aiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9udWxsYWJsZV9vYmpfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+dGVzdE51bGxhYmxlT2JqQXR0cigpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
dGVzdF9udWxsYWJsZV9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01U
ZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoodmFsdWUpKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBp
dGVtLT5zZXRUZXN0TnVsbGFibGVPYmpBdHRyKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0
RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbGVuaWVudF90ZXN0X29ial9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5sZW5pZW50VGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoodmFsdWUp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsK
LSAgICBpdGVtLT5zZXRMZW5pZW50VGVzdE9iakF0dHIoKmNvbnZlcnRlZFZhbHVlKTsKLX0KLQot
Z2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3VuZm9yZ2VhYmxlX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT51bmZvcmdlYWJs
ZUF0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3N0cmluZ19hdHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxs
X2FzX2VtcHR5X3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoY29udmVydGVkVmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnhtbE9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkoodmFsdWUpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0
Ojpjb3JlKHZhbHVlKTsKLSAgICBpdGVtLT5zZXRYTUxPYmpBdHRyKCpjb252ZXJ0ZWRWYWx1ZSk7
Ci19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc0NyZWF0ZSgpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY3JlYXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q3JlYXRlKHZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0
cikpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVt
LT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVn
cmFsYXR0ckF0dHIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBp
dGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGlu
dGVncmFsYXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ3Vsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3Vsb25n
IHJlc3VsdCA9IGl0ZW0tPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3Vuc2ln
bmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vsb25nIHZhbHVlKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRl
c3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50
ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIEZBTFNFKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ2No
YXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
dXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgY29udmVydGVkVmFsdWUp
OwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1
c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVj
dGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZh
bHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxB
dHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCBGQUxTRSk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9t
X2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCB2
YWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3Vz
dG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudFVSTEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3Vz
dG9tQ29udGVudFVSTEF0dHJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotICAgIHJldHVybiAwOwotI2Vu
ZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKGNvbnZlcnRl
ZFZhbHVlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0
dXJlIikKLSNlbmRpZiAvKiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi1nbG9uZyB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2xvbmcgcmVz
dWx0ID0gaXRlbS0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewot
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0
ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0QXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24odmFsdWUpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRy
X3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyBy
ZXN1bHQgPSBpdGVtLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dp
dGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVt
LT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKHZhbHVlKTsKLX0KLQotZ2xv
bmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
YXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcg
dmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24odmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0
dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJf
d2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UodmFsdWUpOwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihjb252ZXJ0
ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0
cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0
cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KGNvbnZlcnRlZFZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1
bHQgPSBpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9hbmRf
c2V0dGVyX2NhbGxfd2l0aF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYykpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJp
YnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMo
ZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwot
fQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3Njcmlw
dF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgp
KTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdl
YktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1
dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3RPYmo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAg
fQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotV2Vi
S2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3Bh
Y2VzQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0
cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5jb25kaXRpb25hbEF0dHIxKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IkNvbmRpdGlvbjEiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUp
Ci17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIxKHZhbHVlKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0jZW5kaWYgLyogRU5BQkxFKENv
bmRpdGlvbjEpICovCi19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlv
bmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNvbmRpdGlvbmFsQXR0cjIoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0jaWYgIUVO
QUJMRShDb25kaXRpb24xKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjEiKQotI2VuZGlmCi0jaWYgIUVOQUJMRShDb25kaXRpb24yKQotICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdsb25nPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYg
RU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
Y29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMih2YWx1
ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSNlbmRpZgotI2lmICFFTkFCTEUoQ29uZGl0aW9uMikK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRp
ZgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
LX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMygpOwotICAgIHJldHVybiByZXN1
bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDAp
OwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
LX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIzKHZhbHVlKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi1XZWJLaXRET01hbnkqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
YW55PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YW55QXR0cmlidXRlKCkpOwot
ICAgIHJldHVybiAwOyAvLyBUT0RPOiByZXR1cm4gY2FudmFzIG9iamVjdAotfQotCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NYW55KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQU5ZKHZhbHVlKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBX
ZWJDb3JlOjphbnkqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBp
dGVtLT5zZXRBbnlBdHRyaWJ1dGUoY29udmVydGVkVmFsdWUpOwotfQotCi1XZWJLaXRET01Eb2N1
bWVudCogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmNvbnRlbnREb2N1bWVudCgpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNWR1Bv
aW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bXV0YWJsZVBvaW50KCkpOwot
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1ZHX1BP
SU5UKHZhbHVlKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpTVkdQb2ludCogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNv
cmUodmFsdWUpOwotICAgIGl0ZW0tPnNldE11dGFibGVQb2ludChjb252ZXJ0ZWRWYWx1ZSk7Ci19
Ci0KLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbW11dGFibGVf
cG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbW11dGFibGVQb2ludCgpKTsKLSAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVNWR1BvaW50KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1ZHX1BPSU5UKHZhbHVlKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBX
ZWJDb3JlOjpTVkdQb2ludCogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwot
ICAgIGl0ZW0tPnNldEltbXV0YWJsZVBvaW50KGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcg
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyYXdiZXJyeShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJl
c3VsdCA9IGl0ZW0tPmJsdWViZXJyeSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyYXdiZXJyeShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPnNldEJsdWViZXJyeSh2YWx1ZSk7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2Rlc2NyaXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+ZGVzY3Jp
cHRpb24oKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmlkKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldElkKHZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5oYXNoKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlcGxhY2VhYmxlX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnJlcGxhY2VhYmxlQXR0cmlidXRlKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotZ2RvdWJsZSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxs
YWJsZV9kb3VibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVt
LT5udWxsYWJsZURvdWJsZUF0dHJpYnV0ZSgpLnZhbHVlT3IoMCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfbG9uZ19hdHRy
aWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5udWxsYWJsZUxvbmdBdHRy
aWJ1dGUoKS52YWx1ZU9yKDApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWdib29sZWFuIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0
ZSgpLnZhbHVlT3IoMCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5udWxsYWJsZVN0cmluZ0F0
dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9udWxsYWJsZV9sb25nX3NldHRhYmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAw
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdsb25nIHJlc3VsdCA9IGl0ZW0tPm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkudmFs
dWVPcigwKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+c2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUodmFsdWUpOwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5nX3NldHRhYmxlX2F0
dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9zdHJpbmdf
c2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXROdWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfbnVsbGFibGVfc3RyaW5nX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJv
cioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAw
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5udWxsYWJs
ZVN0cmluZ1ZhbHVlKGVjKS52YWx1ZU9yKDApOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ192YWx1ZShXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldE51bGxhYmxlU3RyaW5nVmFsdWUodmFsdWUpOwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cmlidXRlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlKCkpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3ROb2RlKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3ROb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cHV0Rm9y
d2FyZHNBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOwotfQotCi1XZWJLaXRET01UZXN0Tm9kZSogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpUZXN0Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnB1dEZvcndh
cmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5n
aWZpZXJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+c3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdpZmllcl9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOwotICAgIGl0ZW0tPnNldFN0cmluZ2lmaWVyQXR0cmlidXRlKGNvbnZlcnRlZFZhbHVlKTsK
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0YWZhOWEzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgL2Rldi9udWxsCkBAIC0x
LDIxMjUgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBX
ZWJLaXRET01UZXN0T2JqX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE9ial9oCi0KLSNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PQkogICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNU
X09CSiwgV2ViS2l0RE9NVGVzdE9iaikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfT0JKLCBXZWJLaXRET01UZXN0T2JqQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9PQkoob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9PQkopKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9URVNUX09CSiwgV2ViS2l0RE9NVGVzdE9iakNsYXNzKSkKLQotI2lmIEVOQUJMRShD
b25kaXRpb24xKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTkRJVElPTkFMX0NPTlNU
OgotICovCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ09ORElUSU9OQUxfQ09OU1QgMAot
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwotCi0vKioKLSAqIFdFQktJVF9ET01fVEVT
VF9PQkpfQ09OU1RfVkFMVUVfMDoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NP
TlNUX1ZBTFVFXzAgMAotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVf
MToKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzEgMQotCi0v
KioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMjoKLSAqLwotI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzIgMgotCi0vKioKLSAqIFdFQktJVF9ET01f
VEVTVF9PQkpfQ09OU1RfVkFMVUVfNDoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JK
X0NPTlNUX1ZBTFVFXzQgNAotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFM
VUVfODoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzggOAot
Ci0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfOToKLSAqLwotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzkgLTEKLQotLyoqCi0gKiBXRUJLSVRf
RE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzExOgotICovCi0jZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9PQkpfQ09OU1RfVkFMVUVfMTEgMHhmZmZmZmZmZgotCi0vKioKLSAqIFdFQktJVF9ET01fVEVT
VF9PQkpfQ09OU1RfVkFMVUVfMTI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09CSl9D
T05TVF9WQUxVRV8xMiAweDAxCi0KLS8qKgotICogV0VCS0lUX0RPTV9URVNUX09CSl9DT05TVF9W
QUxVRV8xMzoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzEz
IDBYMjAKLQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzE0OgotICov
Ci0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMTQgMHgxYWJjCi0KLS8q
KgotICogV0VCS0lUX0RPTV9URVNUX09CSl9DT05TVF9KQVZBU0NSSVBUOgotICovCi0jZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfSkFWQVNDUklQVCAxNQotCi0vKioKLSAqIFdFQktJ
VF9ET01fVEVTVF9PQkpfcmVhZG9ubHk6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09C
Sl9yZWFkb25seSAwCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE9iaiB7Ci0gICAgV2ViS2l0RE9N
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE9iakNs
YXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJL
SVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90eXBlKHZvaWQpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdGVzdFBhcmFtOiBBICNnY2hhcgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqIEB0ZXN0UGFyYW06IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZW5hYmxlZF9h
dF9ydW50aW1lX29wZXJhdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB0ZXN0UGFy
YW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Q6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRo
b2Rfd2l0aF9hcmdzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBsb25nQXJn
OiBBICNnbG9uZwotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpBcmc6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgbG9uZ0FyZywgY29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9N
VGVzdE9iaiogb2JqQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0
aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
aW50OAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnaW50OAot
d2Via2l0X2RvbV90ZXN0X29ial9ieXRlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0aG9kX3dpdGhfYXJnczoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAYnl0ZUFyZzogQSAjZ2ludDgKLSAqIEBz
dHJBcmc6IEEgI2djaGFyCi0gKiBAb2JqQXJnOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICog
UmV0dXJuczogQSAjZ2ludDgKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgZ2ludDgKLXdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ4IGJ5dGVBcmcsIGNvbnN0IGdjaGFyKiBzdHJBcmcs
IFdlYktpdERPTVRlc3RPYmoqIG9iakFyZyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9vY3RldF9tZXRob2Q6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJl
dHVybnM6IEEgI2d1aW50OAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBndWludDgKLXdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9kKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9k
X3dpdGhfYXJnczoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2N0ZXRBcmc6
IEEgI2d1aW50OAotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpBcmc6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNndWludDgKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ4Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX29jdGV0
X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ4IG9jdGV0QXJn
LCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbG9uZ19tZXRob2Q6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2xvbmdf
bWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbG9uZ19tZXRob2Rfd2l0aF9hcmdzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBsb25nQXJnOiBBICNnbG9uZwotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpB
cmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X29ial9sb25nX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgbG9uZ0FyZywgY29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqQXJn
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Q6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfb2Jq
X21ldGhvZF93aXRoX2FyZ3M6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGxv
bmdBcmc6IEEgI2dsb25nCi0gKiBAc3RyQXJnOiBBICNnY2hhcgotICogQG9iakFyZzogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBX
ZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kX3dpdGhfYXJn
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3Ry
QXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfdW5mb3JnZWFibGVfbWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial91bmZvcmdlYWJsZV9tZXRo
b2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9hcmdfdHJlYXRpbmdfbnVsbF9hc19lbXB0eV9zdHJpbmc6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGFyZzogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9hcmdfdHJlYXRpbmdfbnVsbF9hc19lbXB0eV9zdHJpbmcoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIGFyZyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZlcl9wYXJhbWV0ZXI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICogQHJlc29sdmVyOiBBICNXZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZlcl9wYXJhbWV0
ZXIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNv
bHZlcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9udWxsYWJsZV9zdHJpbmdfbWV0
aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
Y2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfbnVsbGFibGVfc3RyaW5nX21ldGhvZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX251bGxhYmxlX3N0cmlu
Z19zcGVjaWFsX21ldGhvZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAaW5k
ZXg6IEEgI2d1bG9uZwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9u
dWxsYWJsZV9zdHJpbmdfc3BlY2lhbF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vs
b25nIGluZGV4KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2Vu
dW1fYXJnOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlbnVtQXJnOiBBICNX
ZWJLaXRET01UZXN0RW51bVR5cGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9lbnVtX2FyZyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0RW51bVR5cGUqIGVudW1BcmcpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9h
cmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGVudW1Bcmc6IEEgI1dlYktp
dERPTVRlc3RFbnVtVHlwZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2VudW1f
YXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RFbnVtVHlwZSogZW51bUFy
Zyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9l
bnVtX2FyZ19hbmRfZGVmYXVsdF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAZW51bUFyZzogQSAjV2ViS2l0RE9NVGVzdEVudW1UeXBlCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9hcmdfYW5kX2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJv
d3M6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0ckFyZzogQSAjZ2NoYXIK
LSAqIEBvYmpBcmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoK
LSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgot
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhy
b3dzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERP
TVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAc2VyaWFsaXplZEFyZzogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3Zh
bHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZXJpYWxpemVkQXJnKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0OgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvbzogQSAjV2ViS2l0RE9NRGljdGlvbmFyeQotICog
QG9vbzogQSAjV2ViS2l0RE9NRGljdGlvbmFyeQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTURpY3Rpb25hcnkqIG9vLCBXZWJLaXRE
T01EaWN0aW9uYXJ5KiBvb28pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJv
cjogI0dFcnJvcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb25fd2l0aF9tZXNzYWdlOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9B
UEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb25fd2l0aF9t
ZXNzYWdlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfcHVibGljX2FuZF9wcml2YXRlX21ldGhvZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCi0gKiBAYXJndW1lbnQ6IEEgI2djaGFyCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3B1YmxpY19hbmRfcHJpdmF0ZV9tZXRob2QoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgY29uc3QgZ2NoYXIqIGFyZ3VtZW50KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0
ZV9vYmo6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0
X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmooV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlv
bjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial93aXRo
X3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJv
cioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4
ZWN1dGlvbl9jb250ZXh0OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dChXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9j
b250ZXh0X2FuZF9zY3JpcHRfc3RhdGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3Rh
dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX29ial9leGNl
cHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGVycm9yOiAjR0Vycm9y
Ci0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RP
YmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJy
b3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZG9jdW1l
bnRfYXJndW1lbnQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3dpdGhfZG9jdW1lbnRfYXJndW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl9kb2N1bWVudF9hcmd1bWVudDoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9jYWxsZXJfZG9j
dW1lbnRfYXJndW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl93aW5kb3dfYXJndW1lbnQ6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfY2FsbGVyX3dpbmRvd19hcmd1bWVu
dChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX2FyZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAb3B0OiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2Fy
ZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBvcHQpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3ZhbHVlOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvcHQ6IEEgI2dsb25nCi0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3ZhbHVlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF9vcHRpb25hbF9hcmc6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQG5vbk9wdDogQSAjZ2xvbmcKLSAqIEBvcHQ6IEEg
I2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19hbmRfb3B0
aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbk9wdCwgZ2xvbmcgb3B0
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25h
bF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBub25PcHQ6IEEgI2dsb25nCi0gKiBAb3B0MTogQSAjZ2xvbmcKLSAqIEBvcHQyOiBB
ICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX3R3
b19vcHRpb25hbF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbk9wdCwgZ2xv
bmcgb3B0MSwgZ2xvbmcgb3B0Mik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9zdHJpbmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHN0cjogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJp
bmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZToKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2F0b21pY19zdHJpbmdfYW5kX2RlZmF1bHRfdmFsdWU6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nX2FuZF9kZWZhdWx0X3Zh
bHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX251bGw6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfbnVsbChXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQ6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfdW5kZWZpbmVkKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dp
dGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX2VtcHR5X3N0cmluZzoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3N0cmluZ19pc19lbXB0eV9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHN0cik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nX2lzX2VtcHR5X3N0cmluZzoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX2F0b21pY19zdHJpbmdfaXNfZW1wdHlfc3RyaW5nKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfZG91YmxlX2lzX25hX246Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICogQG51bWJlcjogQSAjZ2RvdWJsZQotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX2RvdWJsZV9pc19uYV9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdkb3VibGUgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93
aXRoX29wdGlvbmFsX2Zsb2F0X2lzX25hX246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICogQG51bWJlcjogQSAjZ2Zsb2F0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9u
YWxfZmxvYXRfaXNfbmFfbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZmxvYXQgbnVtYmVyKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2xvbmdf
bG9uZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNnaW50
NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmcoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2ludDY0IG51bWJlcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybzoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNnaW50NjQKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybyhXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnaW50NjQgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNndWludDY0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dp
dGhfb3B0aW9uYWxfdW5zaWduZWRfbG9uZ19sb25nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1
aW50NjQgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZ19pc196ZXJvOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RPYmoKLSAqIEBudW1iZXI6IEEgI2d1aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9vcHRpb25hbF91bnNpZ25lZF9sb25nX2xvbmdfaXNfemVybyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBndWludDY0IG51bWJlcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9ib29sZWFuOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBiOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFs
X2Jvb2xlYW4oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gYik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9ib29sZWFuX2lzX2ZhbHNl
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBiOiBBICNnYm9vbGVhbgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2Jvb2xlYW5faXNfZmFsc2UoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gYik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9vcHRpb25hbF9hbnk6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICogQGE6IEEgI1dlYktpdERPTWFueQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlv
bmFsX2FueShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01hbnkqIGEpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfbnVsbGFibGVfd3Jh
cHBlcjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2JqOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfbnVsbGFibGVfd3Jh
cHBlcihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiBvYmopOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfbnVsbGFibGVf
d3JhcHBlcl9pc19udWxsOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvYmo6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9u
dWxsYWJsZV93cmFwcGVyX2lzX251bGwoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
VGVzdE9iaiogb2JqKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3hwYXRoX25zX3Jlc29sdmVyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEByZXNvbHZlcjogQSAjV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfeHBhdGhfbnNfcmVzb2x2ZXIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlcik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QxOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Y29uZGl0aW9uYWxfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDI6Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25h
bF9tZXRob2QzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9j
b25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfZW5mb3JjZV9yYW5nZToKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2JqQXJnc1Nob3J0OiBBICNndXNob3J0Ci0g
KiBAb2JqQXJnc0xvbmc6IEEgI2d1bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRo
X2VuZm9yY2VfcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCBvYmpBcmdzU2hv
cnQsIGd1bG9uZyBvYmpBcmdzTG9uZyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9j
b252ZXJ0MToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dl
YktpdERPTVRlc3ROb2RlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NVGVzdE5vZGUqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NvbnZlcnQyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1
ZTogQSAjV2ViS2l0RE9NVGVzdE5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0Tm9kZSogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfY29udmVydDM6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0NDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFi
bGVfcG9pbnRfZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFibGVfcG9pbnRf
ZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29yYW5nZToKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21ldGhv
ZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAaGVhZDogQSAjZ2NoYXIKLSAq
IEAuLi46IGxpc3Qgb2YgI2djaGFyIGVuZGVkIGJ5ICVOVUxMLgotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3Zhcmlh
ZGljX3N0cmluZ19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIGhl
YWQsIC4uLik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial92YXJpYWRpY19kb3VibGVf
bWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBoZWFkOiBBICNnZG91
YmxlCi0gKiBAbl90YWlsOiBudW1iZXIgb2YgdGFpbCB0aGF0IHdpbGwgYmUgcGFzc2VkCi0gKiBA
Li4uOiBsaXN0IG9mICNnZG91YmxlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfZG91YmxlX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZG91YmxlIGhlYWQsIGd1aW50IG5fdGFpbCwgLi4u
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX25vZGVfbWV0aG9kOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBoZWFkOiBBICNXZWJLaXRET01Ob2Rl
Ci0gKiBALi4uOiBsaXN0IG9mICNXZWJLaXRET01Ob2RlIGVuZGVkIGJ5ICVOVUxMLgotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3ZhcmlhZGljX25vZGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTU5vZGUqIGhlYWQsIC4uLik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9hbnk6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGE6IEEgI2dmbG9hdAotICogQGI6
IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfYW55KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdmbG9h
dCBhLCBnbG9uZyBiKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2F0dGFjaF9zaGFk
b3dfcm9vdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAaW5pdDogQSAjV2Vi
S2l0RE9NVGVzdERpY3Rpb25hcnkKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9hdHRhY2hfc2hhZG93X3Jvb3QoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdERpY3Rpb25hcnkqIGluaXQpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHI6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0
cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2No
YXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5
X3Rlc3Rfb2JqX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYnl0ZV9hdHRyOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnaW50OAot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnaW50OAotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfYnl0ZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5dGVfYXR0cjoKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dpbnQ4Ci0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5
dGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50OCB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfb2N0ZXRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ3VpbnQ4Ci0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGd1aW50OAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
b2N0ZXRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9vY3RldF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqIEB2YWx1ZTogQSAjZ3VpbnQ4Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X29jdGV0X2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ4IHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9zaG9ydF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
Ci0gKiBSZXR1cm5zOiBBICNnc2hvcnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ3Nob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBB
ICNnc2hvcnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnc2hvcnQgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2Ns
YW1wZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICog
UmV0dXJuczogQSAjZ3Nob3J0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIGdzaG9ydAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY2xhbXBlZF9zaG9ydF9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2NsYW1wZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KiBAdmFsdWU6IEEgI2dzaG9ydAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jbGFtcGVkX3Nob3J0X2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dzaG9ydAotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnc2hvcnQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2VuZm9yY2VfcmFuZ2Vfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0
dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnc2hvcnQK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfZW5mb3JjZV9yYW5nZV9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdzaG9ydCB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfdW5zaWduZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KgotICogUmV0dXJuczogQSAjZ3VzaG9ydAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBndXNob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9z
aG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3Vuc2lnbmVkX3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICogQHZhbHVlOiBBICNndXNob3J0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVk
X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCB2YWx1ZSk7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19hdHRyOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2xvbmdfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFJldHVybnM6IEEgI2dpbnQ2NAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnaW50NjQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2xvbmdfbG9uZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
IEB2YWx1ZTogQSAjZ2ludDY0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ2NCB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2d1aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ2NAotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNndWludDY0Ci0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGd1aW50NjQgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5z
OiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBn
Y2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X29i
al9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cjoKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01U
ZXN0T2JqKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9u
dWxsYWJsZV9vYmpfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X251bGxhYmxlX29ial9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3RfbnVsbGFi
bGVfb2JqX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3RfbnVsbGFibGVfb2JqX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0cjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9s
ZW5pZW50X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfbGVuaWVudF90ZXN0X29ial9hdHRyOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9sZW5pZW50X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3VuZm9yZ2VhYmxlX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5mb3JnZWFibGVf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZzoKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZzoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3N0cmluZ19hdHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfeG1sX29ial9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
Ci0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF94bWxfb2JqX2F0dHI6Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfY3JlYXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1
cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NyZWF0ZToK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dib29sZWFuCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmlu
Z19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hh
cioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZs
ZWN0ZWRfc3RyaW5nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZh
bHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cjoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2xvbmcKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Jl
ZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNndWxvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgZ3Vsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZs
ZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQot
LyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdy
YWxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2d1
bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWxvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHI6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnYm9vbGVhbgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9yZWZsZWN0ZWRfdXJsX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoK
LSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3VybF9h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3JlZmxlY3RlZF91cmxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91cmxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cjoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVm
bGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxf
YXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25n
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9t
X2Jvb2xlYW5fYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3Rv
bV91cmxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEg
I2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfZW5hYmxlZF9hdF9ydW50
aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1
cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2xvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0
aF9nZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4
Y2VwdGlvbl93aXRoX21lc3NhZ2U6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICog
QHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2Vw
dGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0
aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0
RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0
cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHZhbHVlOiBBICNnbG9uZwotICogQGVycm9yOiAjR0Vycm9yCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0
aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9u
ZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
IEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdf
YXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdf
YXR0cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0
dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2Vw
dGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFy
Ci0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dp
dGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0
X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9hbmRfc2V0dGVyX2NhbGxfd2l0aF9h
dHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6
IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGds
b25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9hbmRfc2V0dGVyX2Nh
bGxfd2l0aF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmli
dXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3Nj
cmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9z
Y3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJy
b3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlczoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3Rh
dGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRf
c3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlczoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2Ny
aXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Njcmlw
dF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9i
agotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01U
ZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9u
YWxfYXR0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6
IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGds
b25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRp
b25hbF9hdHRyMToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEg
I2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9jb25kaXRpb25hbF9hdHRyMjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgot
ICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2NvbmRpdGlvbmFsX2F0dHIyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
IEB2YWx1ZTogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0
aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjM6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICogQHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25h
bF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfYW55X2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01hbnkKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0
RE9NYW55Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYW55X2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hbnlfYXR0
cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjV2Vi
S2l0RE9NYW55Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgV2ViS2l0RE9NYW55KiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfY29udGVudF9kb2N1bWVudDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVudAot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1
bWVudCoKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbXV0YWJs
ZV9wb2ludDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01TVkdQb2ludAotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01TVkdQb2ludCoKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludDoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dlYktpdERPTVNWR1BvaW50Ci0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0
RE9NU1ZHUG9pbnQqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9p
bW11dGFibGVfcG9pbnQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
Zik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRhYmxlX3BvaW50Ogot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NU1ZH
UG9pbnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfc3RyYXdiZXJyeToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmF3YmVycnkoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c3RyYXdiZXJyeToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEg
I2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmF3YmVycnkoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2Rlc2Ny
aXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9u
Zwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQ6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9pZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFs
dWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9oYXNoOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2RvdWJsZV9hdHRy
aWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEg
I2dkb3VibGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2Rv
dWJsZQotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfZG91YmxlX2F0dHJpYnV0ZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9udWxsYWJsZV9sb25nX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xv
bmdfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfbnVsbGFibGVfYm9vbGVhbl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5n
X2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJu
czogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfYXR0cmlidXRl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
bnVsbGFibGVfbG9uZ19zZXR0YWJsZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVfbG9uZ19zZXR0YWJs
ZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBB
ICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9sb25nX3NldHRhYmxlX2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5nX3NldHRhYmxlX2F0dHJpYnV0ZToKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251
bGxhYmxlX3N0cmluZ19zZXR0YWJsZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9z
dHJpbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVf
c3RyaW5nX3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjog
I0dFcnJvcgotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxs
YWJsZV9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3Ip
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ192YWx1
ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25nCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ192YWx1ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0
cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hh
cioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0
cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3ROb2RlKgotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfbnVsbGFi
bGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3ROb2RlKgotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJp
bmdpZmllcl9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5naWZpZXJfYXR0cmli
dXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3N0cmluZ2lmaWVyX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ2lmaWVyX2F0
dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi1H
X0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0j
ZW5kaWYgLyogV2ViS2l0RE9NVGVzdE9ial9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLnN5bWJvbHMg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkN2YxMzIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZChXZWJLaXRET01UZXN0T2JqKikK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9N
VGVzdE9iaiosIGdsb25nLCBjb25zdCBnY2hhciosIFdlYktpdERPTVRlc3RPYmoqKQotZ2ludDgg
d2Via2l0X2RvbV90ZXN0X29ial9ieXRlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKikKLWdpbnQ4
IHdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RP
YmoqLCBnaW50OCwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikKLWd1aW50OCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX29jdGV0X21ldGhvZChXZWJLaXRET01UZXN0T2JqKikKLWd1aW50OCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX29jdGV0X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9i
aiosIGd1aW50OCwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdlYmtp
dF9kb21fdGVzdF9vYmpfbG9uZ19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiopCi1nbG9uZyB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2xvbmdfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiwg
Z2xvbmcsIGNvbnN0IGdjaGFyKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2Jq
KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJL
aXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdzKFdl
YktpdERPTVRlc3RPYmoqLCBnbG9uZywgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9lbnVtX2FyZyhXZWJLaXRET01U
ZXN0T2JqKiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyhX
ZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKiwgR0Vycm9y
KiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01U
ZXN0T2JqKiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKikKLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NRGlj
dGlvbmFyeSosIFdlYktpdERPTURpY3Rpb25hcnkqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiwgR0Vycm9yKiopCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChXZWJLaXRET01UZXN0
T2JqKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
c3RhdGVfb2JqKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dp
dGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3Iq
KikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3Rh
dGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiwgR0Vycm9yKiopCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHQoV2ViS2l0RE9NVGVz
dE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZShXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVRlc3RP
YmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5k
X3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikK
LVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyhXZWJLaXRET01UZXN0T2Jq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcoV2Vi
S2l0RE9NVGVzdE9iaiosIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93
aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiwg
Z2xvbmcsIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9v
cHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdlYktpdERPTVRlc3RPYmoqLCBnbG9u
ZywgZ2xvbmcsIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29w
dGlvbmFsX3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqKQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQo
V2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfbnVsbF9zdHJpbmcoV2ViS2l0RE9NVGVz
dE9iaiosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlv
bmFsX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
Y29uZGl0aW9uYWxfbWV0aG9kMihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZChXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdl
YmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfb3B0aW9uYWwoV2ViS2l0RE9NVGVz
dE9iaiosIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX292ZXJsb2FkZWRfbWV0aG9k
MShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfb3Zl
cmxvYWRlZF9tZXRob2QxKFdlYktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktpdERPTVRl
c3ROb2RlKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRET01UZXN0
T2JqKiwgV2ViS2l0RE9NVGVzdE5vZGUqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZl
cnQ0KFdlYktpdERPTVRlc3RPYmoqLCBXZWJLaXRET01UZXN0Tm9kZSopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfY29udmVydDUoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktpdERPTVRlc3ROb2Rl
KikKLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFibGVfcG9pbnRf
ZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01TVkdQb2ludCogd2Via2l0X2Rv
bV90ZXN0X29ial9pbW11dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktpdERPTVRlc3RPYmoqKQotV2ViS2l0
RE9NYm9vbCogd2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24oV2ViS2l0RE9NVGVz
dE9iaiosIGNvbnN0IGdjaGFyKiwgZ2Zsb2F0LCBnbG9uZywgR0Vycm9yKiopCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiwg
Y29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFy
aWFkaWNfZG91YmxlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiwgZ2RvdWJsZSwgZ2RvdWJsZSkK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92YXJpYWRpY19ub2RlX21ldGhvZChXZWJLaXRET01U
ZXN0T2JqKiwgV2ViS2l0RE9NTm9kZSosIFdlYktpdERPTU5vZGUqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2FueShXZWJLaXRET01UZXN0T2JqKiwgZ2Zsb2F0LCBnbG9uZykKLWdsb25nIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3N0cmluZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqKQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi1naW50OCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9ieXRlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5dGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgZ2lu
dDgpCi1ndWludDggd2Via2l0X2RvbV90ZXN0X29ial9nZXRfb2N0ZXRfYXR0cihXZWJLaXRET01U
ZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfb2N0ZXRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiwgZ3VpbnQ4KQotZ3Nob3J0IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Nob3J0
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3No
b3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGdzaG9ydCkKLWd1c2hvcnQgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0
T2JqKiwgZ3VzaG9ydCkKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqLCBnbG9uZykKLWdpbnQ2NCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGdpbnQ2NCkKLWd1aW50
NjQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdf
bG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqLCBndWludDY0KQotZ2NoYXIqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2No
YXIqKQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpf
YXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVz
dF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRE
T01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJL
aXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2Jvb2xlYW4pCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RP
YmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiwgZ2xvbmcpCi1ndWxvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVk
X3Vuc2lnbmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqLCBndWxvbmcpCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZs
ZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqLCBnYm9v
bGVhbikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqKQotZ2NoYXIqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdl
YktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiosIGdib29sZWFuKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0
dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0
cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqLCBnbG9uZywgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3Ry
aW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3Iq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi1nY2hhciogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktp
dERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93
aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKiwgR0Vy
cm9yKiopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1X
ZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVj
dXRpb25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShX
ZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2Vz
KFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiwg
V2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktp
dERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0
T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRl
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktpdERPTVRlc3RPYmoqKQotV2ViS2l0RE9NVGVzdE9i
aiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRf
YW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqLCBHRXJy
b3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9u
X2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RP
YmoqLCBXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVf
d2l0aF9zcGFjZXNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0
YXRlX3dpdGhfc3BhY2VzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVz
dE9iaiopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShX
ZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9u
YWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqLCBn
bG9uZykKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdl
YktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25h
bF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1XZWJLaXRET01hbnkqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiosIFdl
YktpdERPTWFueSopCi1XZWJLaXRET01Eb2N1bWVudCogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
Y29udGVudF9kb2N1bWVudChXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVNWR1BvaW50KiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqKQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RP
YmoqLCBXZWJLaXRET01TVkdQb2ludCopCi1XZWJLaXRET01TVkdQb2ludCogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiosIFdl
YktpdERPTVNWR1BvaW50KikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmF3YmVy
cnkoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmF3
YmVycnkoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2Zsb2F0IHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfc3RyaWN0X2Zsb2F0KFdlYktpdERPTVRlc3RPYmoqLCBnZmxvYXQpCi1nbG9u
ZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9kZXNjcmlwdGlvbihXZWJLaXRET01UZXN0T2JqKikK
LWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2lkKFdlYktpdERPTVRlc3RPYmoqKQotdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01UZXN0T2JqKikKLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlcGxhY2VhYmxlX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKikKLWdkb3VibGUgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfZG91
YmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X251bGxhYmxlX2xvbmdfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqKQotZ2Jvb2xl
YW4gd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfYm9vbGVhbl9hdHRyaWJ1dGUoV2Vi
S2l0RE9NVGVzdE9iaiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVf
c3RyaW5nX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RP
YmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9sb25nX3NldHRhYmxl
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1nbG9uZyB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiosIEdFcnJv
cioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUo
V2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNGM0ZDllOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRS
dWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfR0VUX1BS
SVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SUywgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTKHJldCk7Ci0KLSAg
ICByZXR1cm4gd3JhcFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKG9iaik7Ci19Ci0KLVdlYkNv
cmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBjb3JlKFdlYktpdERPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyogd3JhcFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKFdlYkNvcmU6
OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RS
VUNUT1JTKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNU
UlVDVE9SUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycywgd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3Zl
cmxvYWRlZF9jb25zdHJ1Y3RvcnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19HRVRfUFJJVkFURShvYmplY3QpOwotCi0g
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0
ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0
cnVjdG9yc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09i
amVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc19w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RS
VUNUT1JTX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3Rv
cnNfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZh
dGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X292
ZXJsb2FkZWRfY29uc3RydWN0b3JzX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfZmluYWxpemU7
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9y
c19pbml0KFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiByZXF1ZXN0KQotewot
ICAgIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19HRVRfUFJJVkFURShyZXF1ZXN0
KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJp
dmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIw
Y2Q4Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19oCi0jZGVmaW5lIFdlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNF
X1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTICAgICAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc19nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURF
RF9DT05TVFJVQ1RPUlMsIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9U
RVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTLCBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUkxPQURFRF9DT05T
VFJVQ1RPUlMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMpKQotI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZF
UkxPQURFRF9DT05TVFJVQ1RPUlMpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURF
RF9DT05TVFJVQ1RPUlNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMsIFdl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIHsKLSAgICBXZWJLaXRET01PYmplY3QgcGFy
ZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19
OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1
Y3RvcnNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5z
eW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZhdGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3NDRhMi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAg
QEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHdyYXBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhXZWJD
b3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyopOwotV2ViS2l0RE9NVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMqIGtpdChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyop
OwotV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGNvcmUoV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLyogV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDU5ODU0MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgiCi0KLSNpbmNs
dWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3Rh
dGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZF
UkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRV9HRVRfUFJJVkFURShvYmopIEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX09WRVJMT0FE
RURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZSB7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPiBjb3Jl
T2JqZWN0OwotfSBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZVByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSoga2l0KFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2Jq
KSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9S
U19XSVRIX1NFUVVFTkNFKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiBjb3JlKFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1X
ZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSogd3JhcFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKFdlYkNvcmU6OlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNU
T1JTX1dJVEhfU0VRVUVOQ0UoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX09WRVJM
T0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5FX1RZ
UEUoV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UsIHdlYmtp
dF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlLCBXRUJLSVRf
RE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRl
ZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhf
U0VRVUVOQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRE
T01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUoKTsKLSAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfd2l0
aF9zZXF1ZW5jZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMg
R09iamVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dpdGhfc2Vx
dWVuY2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAg
R09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X292ZXJsb2Fk
ZWRfY29uc3RydWN0b3JzX3dpdGhfc2VxdWVuY2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQot
ICAgIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NF
UVVFTkNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKj4o
V0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICBy
ZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRl
ZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZSkpOwot
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRl
ZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dp
dGhfc2VxdWVuY2VfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9v
dmVybG9hZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlX2luaXQoV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0
RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0VfR0VU
X1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzOGJkNTQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VfaAotI2RlZmluZSBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZV9oCi0KLSNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgot
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNU
UlVDVE9SU19XSVRIX1NFUVVFTkNFICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vdmVybG9h
ZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsIFdlYktpdERPTVRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0VfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRSwgV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RP
TV9JU19URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0Uob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRSkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UpKQotI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFLCBXZWJLaXRE
T01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNsYXNzKSkKLQotc3RydWN0
IF9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSB7Ci0gICAg
V2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9N
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDbGFzcyB7Ci0gICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Vi
a2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dpdGhfc2VxdWVuY2VfZ2V0X3R5
cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T3ZlcnJpZGVCdWlsdGlucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMDA2
YmYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTE2ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oIgot
Ci0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVp
bHRpbnNQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgi
Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlNfR0VUX1BSSVZBVEUob2JqKSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVS
UklERV9CVUlMVElOUywgV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlKQotCi10
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlIHsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnM+IGNvcmVPYmplY3Q7Ci19IFdl
YktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJy
aWRlQnVpbHRpbnMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TKHJldCk7Ci0KLSAgICBy
ZXR1cm4gd3JhcFRlc3RPdmVycmlkZUJ1aWx0aW5zKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RP
dmVycmlkZUJ1aWx0aW5zKiBjb3JlKFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiByZXF1
ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92
ZXJyaWRlQnVpbHRpbnMqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOwotfQotCi1XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucyogd3JhcFRlc3RPdmVycmlk
ZUJ1aWx0aW5zKFdlYkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKiBjb3JlT2JqZWN0KQotewot
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJS
SURFX0JVSUxUSU5TKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSUklERV9C
VUlMVElOUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0T3ZlcnJpZGVC
dWlsdGlucywgd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zLCBXRUJLSVRfRE9NX1RZ
UEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRp
bnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RPdmVycmlk
ZUJ1aWx0aW5zUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PVkVSUklERV9CVUlMVElO
U19HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9y
Z2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RP
dmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF9vdmVycmlkZV9idWlsdGluc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwot
fQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9idWlsdGlu
c19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVp
bHRpbnNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TX0dF
VF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNfY2xhc3NfaW5pdChXZWJLaXRE
T01UZXN0T3ZlcnJpZGVCdWlsdGluc0NsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01U
ZXN0T3ZlcnJpZGVCdWlsdGluc1ByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVj
dG9yID0gd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX2NvbnN0cnVjdG9yOwotICAg
IGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRp
bnNfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9i
dWlsdGluc19pbml0KFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiByZXF1ZXN0KQotewot
ICAgIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fVEVTVF9PVkVSUklERV9CVUlMVElOU19HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcg
KHByaXYpIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSgpOwotfQotCi1XZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNfbmFtZWRfaXRlbShX
ZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucyogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PVkVSUklERV9CVUlMVElOUyhzZWxmKSwg
MCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVz
dE92ZXJyaWRlQnVpbHRpbnMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpT
dHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5h
bWVkSXRlbShjb252ZXJ0ZWROYW1lKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJyaWRlQnVpbHRpbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY5NTRiNC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUg
KzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRE
T01UZXN0T3ZlcnJpZGVCdWlsdGluc19oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1
aWx0aW5zX2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19C
RUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX09WRVJSSURFX0JVSUxU
SU5TICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9idWlsdGluc19nZXRfdHlw
ZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMsIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNU
X09WRVJSSURFX0JVSUxUSU5TLCBXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGluc0NsYXNzKQot
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
T1ZFUlJJREVfQlVJTFRJTlMpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUlJJREVf
QlVJTFRJTlNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUlJJREVfQlVJTFRJ
TlMsIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zIHsKLSAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGluc0NsYXNz
IHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRf
QVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNfZ2V0X3R5cGUodm9p
ZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX25hbWVkX2l0
ZW06Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMKLSAqIEBuYW1l
OiBBICNnY2hhcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9N
Tm9kZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRE
T01Ob2RlKgotd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX25hbWVkX2l0ZW0oV2Vi
S2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsKLQot
R19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwot
I2VuZGlmIC8qIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNWNhNTIuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJyaWRlQnVpbHRpbnNQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0v
KgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RPdmVy
cmlkZUJ1aWx0aW5zUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0
aW5zUHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJUZXN0T3ZlcnJpZGVCdWlsdGlucy5oIgotI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiB3cmFwVGVzdE92ZXJy
aWRlQnVpbHRpbnMoV2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqKTsKLVdlYktpdERPTVRl
c3RPdmVycmlkZUJ1aWx0aW5zKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqKTsK
LVdlYkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKiBjb3JlKFdlYktpdERPTVRlc3RPdmVycmlk
ZUJ1aWx0aW5zKik7Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8qIFdlYktpdERP
TVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzNiM2QzLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjgwICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUuaCIKLSNpbmNsdWRlICJn
b2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9TRVJJQUxJ
WkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVEX1NDUklQ
VF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUgewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZT4gY29yZU9iamVjdDsKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi19IFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcml2YXRlOwotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQot
ICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lO
VEVSRkFDRShyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiB3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlT2JqZWN0
KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNU
X1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFLCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi1H
X0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Us
IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2UsIFdFQktJ
VF9ET01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX1ZBTFVF
LAotICAgIFBST1BfUkVBRE9OTFlfVkFMVUUsCi0gICAgUFJPUF9DQUNIRURfVkFMVUUsCi0gICAg
UFJPUF9DQUNIRURfUkVBRE9OTFlfVkFMVUUsCi19OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxV
RV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJp
YWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17
Ci0gICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiA9
IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uob2JqZWN0
KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9WQUxVRToKLSAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9SRUFET05MWV9WQUxVRToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2dldF9yZWFkb25seV92YWx1ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9DQUNIRURfVkFMVUU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVk
X3ZhbHVlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBQ0hFRF9SRUFE
T05MWV9WQUxVRToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9u
bHlfdmFsdWUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVy
ZmFjZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLSAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQ
VF9WQUxVRV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwot
I2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBy
ZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZSkpOwotICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFs
dWVfaW50ZXJmYWNlX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2ZpbmFsaXpl
OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfVkFMVUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAi
dmFsdWUiLAotICAgICAgICAgICAgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6
dmFsdWUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTp2YWx1ZSIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU0VS
SUFMSVpFRF9TQ1JJUFRfVkFMVUUsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUFET05MWV9WQUxVRSwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKLSAgICAgICAgICAgICJyZWFkb25seS12YWx1ZSIsCi0gICAgICAgICAgICAi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTpyZWFkb25seS12YWx1ZSIsCi0gICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOnJlYWRvbmx5LXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TRVJJQUxJ
WkVEX1NDUklQVF9WQUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwot
Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENs
YXNzLAotICAgICAgICBQUk9QX0NBQ0hFRF9WQUxVRSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKLSAgICAgICAgICAgICJjYWNoZWQtdmFsdWUiLAotICAgICAgICAgICAgIlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVkLXZhbHVlIiwKLSAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVk
LXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TRVJJQUxJWkVEX1NDUklQVF9W
QUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0NBQ0hFRF9SRUFET05MWV9WQUxVRSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKLSAgICAgICAgICAgICJjYWNoZWQtcmVhZG9ubHktdmFsdWUiLAotICAgICAgICAgICAgIlRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVkLXJlYWRvbmx5LXZhbHVlIiwK
LSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6Y2FjaGVkLXJlYWRvbmx5LXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfaW5pdChXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX1NFUklB
TElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2
YXRlKCk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFs
dWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRURfU0NSSVBU
X1ZBTFVFX0lOVEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWx1ZSgpLT50b1N0cmluZygp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0g
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwot
fQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZh
Y2Vfc2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRURf
U0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRWYWx1ZShXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpKSk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUp
OwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotZ2NoYXIq
IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3Jl
YWRvbmx5X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5U
RVJGQUNFKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnJlYWRvbmx5VmFsdWUoKS0+dG9TdHJpbmcoKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotICAgIHJldHVybiAwOwot
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0K
LQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZh
Y2VfZ2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRURfU0NSSVBUX1ZB
TFVFX0lOVEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jYWNoZWRWYWx1ZSgpLT50b1N0cmlu
ZygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7
Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJu
IDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAq
LwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9T
RVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uoc2VsZikpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q2FjaGVkVmFs
dWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJD
b25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
ICovCi19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVf
aW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9TRVJJ
QUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y2FjaGVk
UmVhZG9ubHlWYWx1ZSgpLT50b1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjZhNjkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICsw
LDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZV9oCi0jZGVmaW5lIFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFICAgICAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3R5
cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lO
VEVSRkFDRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Us
IFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpKQotI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRSwgV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lT
X1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX1NFUklB
TElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVT
VF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpF
RF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1NFUklB
TElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVEX1ND
UklQVF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07
Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNs
YXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJL
SVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50
ZXJmYWNlX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hh
cioKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0
X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2Vfc2V0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6
ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9zZXRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoq
Ci0gKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dl
dF9yZWFkb25seV92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZShXZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9j
YWNoZWRfdmFsdWU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92
YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2Nh
Y2hlZF9yZWFkb25seV92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlf
dmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZik7
Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkg
Ki8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uuc3ltYm9s
cyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uuc3ltYm9scwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjE1ZjE3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVdl
YktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRf
c2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Nj
cmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqKQotV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZShXZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKikKLVdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9n
ZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX3NldF9jYWNoZWRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSosIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopCi1XZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWY1MGNiLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRl
X2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
aXZhdGVfaAotCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5o
IgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmg+Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIHdyYXBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqKTsKLVdlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7Ci1XZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBjb3JlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dFN1cHBsZW1lbnRhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDA1MmMwNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVk
IGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRh
bC5oIGFuZAotICAgIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZv
ciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBz
Y3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwu
aCBhbmQKLSAgICBXZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBidWlsZC4g
VGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dFN1cHBsZW1lbnRhbC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDUyYzA1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3Qg
dG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRhbC5oIGFu
ZAotICAgIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0
U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRz
IGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuaCBhbmQK
LSAgICBXZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBm
aWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RUeXBlZGVmcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1
OTc0ODUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5
NCArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgiCi0KLSNpbmNsdWRlICJD
U1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIK
LSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9pbnRQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29u
dmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1RZUEVERUZTX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfVFlQRURFRlMsIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUpCi0KLXR5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdFR5cGVkZWZzPiBjb3JlT2JqZWN0OwotfSBXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2
YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBraXQo
V2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2Jq
KSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9UWVBFREVGUyhyZXQpOwotCi0gICAg
cmV0dXJuIHdyYXBUZXN0VHlwZWRlZnMob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdFR5cGVkZWZz
KiBjb3JlKFdlYktpdERPTVRlc3RUeXBlZGVmcyogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RUeXBlZGVmcyo+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RUeXBlZGVm
cyogd3JhcFRlc3RUeXBlZGVmcyhXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGNvcmVPYmplY3QpCi17
Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfVFlQ
RURFRlMoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTLCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RUeXBlZGVmcywgd2Via2l0X2RvbV90ZXN0
X3R5cGVkZWZzLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAs
Ci0gICAgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKLSAgICBQUk9QX0lNTVVUQUJMRV9T
RVJJQUxJWkVEX1NDUklQVF9WQUxVRSwKLSAgICBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBU
SU9OLAotICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9TVFJJ
TkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9TVFJJTkdfQVRUUl9XSVRI
X1NFVFRFUl9FWENFUFRJT04sCi19OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlw
ZWRlZnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RUeXBl
ZGVmc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfVFlQRURFRlNfR0VUX1BSSVZBVEUo
b2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRl
KCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF90eXBlZGVmc19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRE
T01UZXN0VHlwZWRlZnMqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfVFlQRURFRlMob2JqZWN0KTsK
LQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9MT05H
X0xPTkdfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25l
ZF9sb25nX2xvbmdfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF91aW50NjQodmFsdWUpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgotICAg
ICAgICB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAgICB3ZWJraXRfZG9t
X3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFs
dWVfZ2V0X2xvbmcodmFsdWUpLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQ
Uk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgICAgIHdlYmtpdF9k
b21fdGVzdF90eXBlZGVmc19zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQotewotICAgIFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZiA9IFdFQktJVF9ET01fVEVT
VF9UWVBFREVGUyhvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2Fz
ZSBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF91aW50
NjQodmFsdWUsIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfdW5zaWduZWRfbG9uZ19sb25n
X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU1NVVRBQkxFX1NF
UklBTElaRURfU0NSSVBUX1ZBTFVFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfaW1tdXRhYmxlX3NlcmlhbGl6ZWRfc2NyaXB0
X3ZhbHVlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9H
RVRURVJfRVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIG51
bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJf
RVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3RfdHlwZWRlZnNfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElP
TjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2VsZiwgbnVsbHB0
cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRU
RVJfRVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF90eXBlZGVm
c19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9UWVBFREVGU19HRVRfUFJJVkFURShvYmplY3Qp
OwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0VHlwZWRl
ZnMqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQot
ICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF90eXBl
ZGVmc19jbGFzc19pbml0KFdlYktpdERPTVRlc3RUeXBlZGVmc0NsYXNzKiByZXF1ZXN0Q2xhc3Mp
Ci17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5j
b25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19jb25zdHJ1Y3RvcjsKLSAgICBn
b2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2ZpbmFsaXpl
OwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fdGVzdF90eXBlZGVmc19nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfVU5T
SUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCi0gICAg
ICAgICAgICAidW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RUeXBl
ZGVmczp1bnNpZ25lZC1sb25nLWxvbmctYXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBn
dWludDY0IFRlc3RUeXBlZGVmczp1bnNpZ25lZC1sb25nLWxvbmctYXR0ciIsCi0gICAgICAgICAg
ICAwLCBHX01BWFVJTlQ2NCwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgUFJPUF9JTU1VVEFCTEVfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUUs
Ci0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAiaW1tdXRhYmxlLXNl
cmlhbGl6ZWQtc2NyaXB0LXZhbHVlIiwKLSAgICAgICAgICAgICJUZXN0VHlwZWRlZnM6aW1tdXRh
YmxlLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2No
YXIqIFRlc3RUeXBlZGVmczppbW11dGFibGUtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUiLAotICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfQVRUUl9X
SVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAg
ICAgICAgImF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJUZXN0VHlw
ZWRlZnM6YXR0ci13aXRoLWdldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2xvbmcgVGVzdFR5cGVkZWZzOmF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAg
ICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAg
ICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBU
SU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJhdHRyLXdpdGgt
c2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiVGVzdFR5cGVkZWZzOmF0dHItd2l0aC1z
ZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RUeXBl
ZGVmczphdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICBHX01JTkxPTkcs
IEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFz
cywKLSAgICAgICAgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAic3RyaW5nLWF0dHItd2l0aC1n
ZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJUZXN0VHlwZWRlZnM6c3RyaW5nLWF0dHIt
d2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBU
ZXN0VHlwZWRlZnM6c3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAg
ICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAg
ICAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdHJpbmctYXR0ci13aXRoLXNldHRlci1l
eGNlcHRpb24iLAotICAgICAgICAgICAgIlRlc3RUeXBlZGVmczpzdHJpbmctYXR0ci13aXRoLXNl
dHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RUeXBl
ZGVmczpzdHJpbmctYXR0ci13aXRoLXNldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgIiIs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2luaXQoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBy
ZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RFU1RfVFlQRURFRlNfR0VUX1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2
KSBXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X3R5cGVkZWZzX3NldF9zaGFkb3coV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBnZmxv
YXQgd2lkdGgsIGdmbG9hdCBoZWlnaHQsIGdmbG9hdCBibHVyLCBjb25zdCBnY2hhciogY29sb3Is
IGdmbG9hdCBhbHBoYSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2Vs
ZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29sb3IpOwotICAgIFdlYkNvcmU6OlRlc3RUeXBl
ZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRDb2xvciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb2xvcik7Ci0gICAgaXRlbS0+c2V0U2hh
ZG93KHdpZHRoLCBoZWlnaHQsIGJsdXIsIGNvbnZlcnRlZENvbG9yLCBhbHBoYSk7Ci19Ci0KLVdl
YktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfaW1tdXRhYmxlX3BvaW50
X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX1RZUEVERUZTKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlw
ZWRlZnMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNW
R1BvaW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnRG
dW5jdGlvbigpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX21ldGhvZF93aXRoX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotZ3VpbnQ2NCB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERP
TVRlc3RUeXBlZGVmcyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZ
UEVERUZTKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT51bnNpZ25lZExvbmdM
b25nQXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X3R5cGVkZWZzX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0VHlwZWRl
ZnMqIHNlbGYsIGd1aW50NjQgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZ
UEVERUZTKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodmFsdWUpOwot
fQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9pbW11dGFibGVfc2VyaWFs
aXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6
OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWUoKS0+dG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2ltbXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZShXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUo
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKSkpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2F0
dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZiwgR0Vy
cm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhz
ZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9hdHRyX3dpdGhfZ2V0dGVy
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGdsb25nIHZhbHVlKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgV2ViQ29yZTo6
VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKHZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0
X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlw
ZWRlZnMqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhz
ZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRl
ZnNfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyog
c2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvcik7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNl
dEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZUEVERUZTKHNlbGYpLCAwKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFR5
cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dp
dGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVm
cyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0U3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oY29udmVydGVkVmFsdWUpOwotfQotCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfVFlQRURFRlMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc3Ry
aW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNvcmU6
OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RUeXBlZGVmcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQwMDUyMjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwy
MTggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJL
aXRET01UZXN0VHlwZWRlZnNfaAotI2RlZmluZSBXZWJLaXRET01UZXN0VHlwZWRlZnNfaAotCi0j
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0K
LSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfVFlQRURFRlMgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X3R5cGVkZWZzX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9U
WVBFREVGUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9UWVBFREVGUywgV2ViS2l0RE9NVGVzdFR5cGVkZWZzKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1RZUEVERUZTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZT
LCBXZWJLaXRET01UZXN0VHlwZWRlZnNDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X1RZUEVERUZTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX1RZUEVERUZTX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX1RZUEVERUZTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTLCBXZWJLaXRET01UZXN0VHlwZWRl
ZnNDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFR5cGVkZWZzIHsKLSAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0VHlw
ZWRlZnNDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsK
LQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF90eXBlKHZv
aWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc2hhZG93OgotICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQHdpZHRoOiBBICNnZmxvYXQKLSAq
IEBoZWlnaHQ6IEEgI2dmbG9hdAotICogQGJsdXI6IEEgI2dmbG9hdAotICogQGNvbG9yOiBBICNn
Y2hhcgotICogQGFscGhhOiBBICNnZmxvYXQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9zaGFkb3co
V2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBnZmxvYXQgd2lkdGgsIGdmbG9hdCBoZWlnaHQs
IGdmbG9hdCBibHVyLCBjb25zdCBnY2hhciogY29sb3IsIGdmbG9hdCBhbHBoYSk7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0VHlwZWRlZnMKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTVNWR1BvaW50Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNl
bGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19tZXRob2Rfd2l0aF9leGNl
cHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFR5cGVkZWZzCi0gKiBAZXJyb3I6ICNH
RXJyb3IKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3RfdHlwZWRlZnNfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RUeXBlZGVmcwotICoKLSAqIFJldHVybnM6IEEgI2d1aW50NjQKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ2NAotd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX2dldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0
VHlwZWRlZnMqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRf
dW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzCi0gKiBAdmFsdWU6IEEgI2d1aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25l
ZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGd1aW50NjQgdmFs
dWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfaW1tdXRhYmxlX3Nl
cmlhbGl6ZWRfc2NyaXB0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVm
cwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9pbW11
dGFibGVfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2ltbXV0YWJsZV9zZXJp
YWxpemVkX3NjcmlwdF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0VHlwZWRlZnMK
LSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9pbW11dGFibGVfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfYXR0
cl93aXRoX2dldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfdHlw
ZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVm
cyogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVm
c19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdFR5cGVkZWZzCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF90eXBlZGVm
c19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICog
QHZhbHVlOiBBICNnbG9uZwotICogQGVycm9yOiAjR0Vycm9yCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19z
ZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxm
LCBnbG9uZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF90eXBlZGVmc19nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQGVycm9yOiAjR0Vycm9yCi0gKgotICog
UmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmluZ19hdHRyX3dp
dGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioq
IGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19h
dHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0VHlw
ZWRlZnMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9zdHJpbmdf
YXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19n
ZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RUeXBlZGVmcwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dFR5cGVkZWZzKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0
X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0VHlwZWRlZnMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqIEBlcnJvcjogI0dFcnJvcgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiog
ZXJyb3IpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdFR5cGVkZWZzX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RUeXBlZGVmcy5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJiOTU4NzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLnN5bWJvbHMK
KysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBl
ZGVmc19mdW5jKFdlYktpdERPTVRlc3RUeXBlZGVmcyosIFdlYktpdERPTWxvbmdbXSopCi12b2lk
IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc2hhZG93KFdlYktpdERPTVRlc3RUeXBlZGVm
cyosIGdmbG9hdCwgZ2Zsb2F0LCBnZmxvYXQsIGNvbnN0IGdjaGFyKiwgZ2Zsb2F0KQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfbnVsbGFibGVfYXJyYXlfYXJnKFdlYktpdERPTVRlc3RU
eXBlZGVmcyosIFdlYktpdERPTURPTVN0cmluZ1tdKikKLVdlYktpdERPTVNWR1BvaW50KiB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfaW1tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRl
c3RUeXBlZGVmcyopCi1XZWJLaXRET01ET01TdHJpbmdbXSogd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX3N0cmluZ19hcnJheV9mdW5jdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqLCBXZWJLaXRE
T01ET01TdHJpbmdbXSosIEdFcnJvcioqKQotV2ViS2l0RE9NRE9NU3RyaW5nW10qIHdlYmtpdF9k
b21fdGVzdF90eXBlZGVmc19zdHJpbmdfYXJyYXlfZnVuY3Rpb24yKFdlYktpdERPTVRlc3RUeXBl
ZGVmcyosIFdlYktpdERPTURPTVN0cmluZ1tdKiwgR0Vycm9yKiopCi12b2lkIHdlYmtpdF9kb21f
dGVzdF90eXBlZGVmc19tZXRob2Rfd2l0aF9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZz
KiwgR0Vycm9yKiopCi1ndWludDY0IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfdW5zaWdu
ZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKikKLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0
VHlwZWRlZnMqLCBndWludDY0KQotV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2ltbXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZShXZWJLaXRET01UZXN0VHlwZWRlZnMqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNf
c2V0X2ltbXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZShXZWJLaXRET01UZXN0VHlwZWRl
ZnMqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqKQotZ2xvbmcgd2Via2l0X2RvbV90
ZXN0X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
VHlwZWRlZnMqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9h
dHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqLCBnbG9uZykK
LWdsb25nIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNl
cHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX3NldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMq
LCBnbG9uZywgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9z
dHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiwg
R0Vycm9yKiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc3RyaW5nX2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyosIGNvbnN0IGdjaGFy
KikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmluZ19hdHRyX3dpdGhf
c2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0VHlwZWRlZnMqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NYXR0
cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTWF0dHJpYnV0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJi
NjlkMTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NYXR0cmlidXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyAr
MCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NYXR0cmlidXRlLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBv
cnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NYXR0cmlidXRlUHJp
dmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VC
S0lUX0RPTV9BVFRSSUJVVEVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQVRUUklCVVRFLCBXZWJLaXRET01hdHRyaWJ1dGVQ
cml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NYXR0cmlidXRlUHJpdmF0ZSB7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OmF0dHJpYnV0ZT4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NYXR0
cmlidXRlUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTWF0dHJpYnV0
ZSoga2l0KFdlYkNvcmU6OmF0dHJpYnV0ZSogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0
KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFJJQlVURShyZXQpOwotCi0gICAg
cmV0dXJuIHdyYXBhdHRyaWJ1dGUob2JqKTsKLX0KLQotV2ViQ29yZTo6YXR0cmlidXRlKiBjb3Jl
KFdlYktpdERPTWF0dHJpYnV0ZSogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OmF0dHJpYnV0ZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTWF0dHJpYnV0ZSogd3JhcGF0dHJpYnV0
ZShXZWJDb3JlOjphdHRyaWJ1dGUqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFJJQlVURShnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX0FUVFJJQlVURSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01h
dHRyaWJ1dGUsIHdlYmtpdF9kb21fYXR0cmlidXRlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQot
Ci1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9SRUFET05MWSwKLX07Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9kb21fYXR0cmlidXRlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAg
ICBXZWJLaXRET01hdHRyaWJ1dGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BVFRSSUJVVEVf
R0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01hdHRyaWJ1
dGVQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hdHRyaWJ1dGVfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2V4Y2VwdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRE
T01UZXN0RXhjZXB0aW9uKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0VYQ0VQVElPTihvYmplY3Qp
OwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9QX05BTUU6Ci0gICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25f
Z2V0X25hbWUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXR0
cmlidXRlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTWF0dHJpYnV0
ZSogc2VsZiA9IFdFQktJVF9ET01fQVRUUklCVVRFKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfUkVBRE9OTFk6Ci0gICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9yZWFkb25seShzZWxmKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9hdHRyaWJ1dGVfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hdHRyaWJ1dGVfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0FUVFJJQlVURV9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjphdHRyaWJ1dGUqPihXRUJLSVRfRE9NX09CSkVDVChv
YmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXR0cmlidXRlX2NsYXNzX2luaXQoV2ViS2l0RE9NYXR0
cmlidXRlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUp
KTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9hdHRyaWJ1dGVf
Y29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fYXR0
cmlidXRlX2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9hdHRyaWJ1dGVfZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05BTUUsCi0g
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAibmFtZSIsCi0gICAgICAg
ICAgICAiVGVzdEV4Y2VwdGlvbjpuYW1lIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IFRlc3RFeGNlcHRpb246bmFtZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFQURPTkxZLAotICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJlYWRvbmx5IiwKLSAgICAgICAg
ICAgICJhdHRyaWJ1dGU6cmVhZG9ubHkiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
YXR0cmlidXRlOnJlYWRvbmx5IiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdHRyaWJ1
dGVfaW5pdChXZWJLaXRET01hdHRyaWJ1dGUqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NYXR0
cmlidXRlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQVRUUklCVVRFX0dFVF9QUklWQVRFKHJl
cXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NYXR0cmlidXRlUHJpdmF0ZSgpOwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3JlYWRvbmx5KFdlYktpdERPTWF0dHJp
YnV0ZSogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSSUJVVEUoc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OmF0dHJpYnV0ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5yZWFkb25seSgp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1dGUuc3ltYm9scyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTWF0
dHJpYnV0ZS5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGE4MmFhLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTWF0dHJpYnV0ZS5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
Z2NoYXIqIHdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9yZWFkb25seShXZWJLaXRET01hdHRyaWJ1
dGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyOWNlOWE4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NcmVhZG9ubHkuaCIKLQotI2lu
Y2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRE
T01yZWFkb25seVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci0jZGVmaW5lIFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfUkVBRE9OTFksIFdlYktpdERP
TXJlYWRvbmx5UHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTXJlYWRvbmx5UHJp
dmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OnJlYWRvbmx5PiBjb3JlT2JqZWN0OwotfSBXZWJL
aXRET01yZWFkb25seVByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJLaXRET01y
ZWFkb25seSoga2l0KFdlYkNvcmU6OnJlYWRvbmx5KiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fUkVBRE9OTFkocmV0KTsKLQot
ICAgIHJldHVybiB3cmFwcmVhZG9ubHkob2JqKTsKLX0KLQotV2ViQ29yZTo6cmVhZG9ubHkqIGNv
cmUoV2ViS2l0RE9NcmVhZG9ubHkqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpyZWFkb25seSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTXJlYWRvbmx5KiB3cmFwcmVhZG9ubHko
V2ViQ29yZTo6cmVhZG9ubHkqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3Qp
OwotICAgIHJldHVybiBXRUJLSVRfRE9NX1JFQURPTkxZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9N
X1RZUEVfUkVBRE9OTFksICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NcmVhZG9u
bHksIHdlYmtpdF9kb21fcmVhZG9ubHksIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fcmVhZG9ubHlfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewot
ICAgIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlf
R0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01yZWFkb25s
eVByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3JlYWRvbmx5X3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX3JlYWRvbmx5X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQot
ewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fcmVhZG9u
bHlfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBw
cml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6cmVhZG9ubHkqPihXRUJLSVRf
RE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBv
YmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fcmVhZG9ubHlfY2xhc3NfaW5pdChX
ZWJLaXRET01yZWFkb25seUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01yZWFkb25s
eVByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9y
ZWFkb25seV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV9yZWFkb25seV9maW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV9yZWFk
b25seV9pbml0KFdlYktpdERPTXJlYWRvbmx5KiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTXJl
YWRvbmx5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUocmVx
dWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01yZWFkb25seVByaXZhdGUoKTsKLX0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NcmVhZG9ubHkuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5LnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNo
ZWV0LmlkbAppbmRleCA1NjJiNWRhLi44NmQ4NzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuaWRsCkBAIC0yMyw5ICsyMyw3IEBAIGludGVyZmFjZSBDU1NTdHlsZVNoZWV0IDogU3R5
bGVTaGVldCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU1J1bGVMaXN0IGNzc1J1bGVzOwog
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBpbnNlcnRSdWxlKERPTVN0cmlu
ZyBydWxlLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhjZXB0aW9uLCBJbXBsZW1l
bnRlZEFzPWRlcHJlY2F0ZWRJbnNlcnRSdWxlXSB1bnNpZ25lZCBsb25nIGluc2VydFJ1bGUoRE9N
U3RyaW5nIHJ1bGUpOyAvLyBEZXByZWNhdGVkLgotI2VuZGlmCiAKICAgICBbUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIGRlbGV0ZVJ1bGUodW5zaWduZWQgbG9uZyBpbmRleCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9SR0JDb2xvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUkdC
Q29sb3IuaWRsCmluZGV4IDVhYzRhYjcuLmI2MDJmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9SR0JDb2xvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1JHQkNvbG9yLmlk
bApAQCAtMjYsNyArMjYsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVW
YWx1ZSBncmVlbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTUHJpbWl0aXZlVmFsdWUgYmx1
ZTsKIAotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVWYWx1ZSBhbHBoYTsKLSNlbmRpZgog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmlkbAppbmRleCA0YTQyOTNiLi4z
NGQxNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQ29yZUV4Y2VwdGlvbi5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRsCkBAIC0zOCw5
ICszOCw3IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtZXNzYWdlOwogCi0jaWYg
IShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW05v
dEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAgICAvLyBFeGNl
cHRpb25Db2RlCiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5ERVhfU0laRV9FUlIgPSAxOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwKaW5kZXggMzMwMDVkYS4uZGEy
NmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaWRsCkBAIC0yOCwx
MyArMjgsNyBAQAogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudFR5
cGUgY3JlYXRlRG9jdW1lbnRUeXBlKERPTVN0cmluZyBxdWFsaWZpZWROYW1lLCBET01TdHJpbmcg
cHVibGljSWQsIERPTVN0cmluZyBzeXN0ZW1JZCk7CiAKLSAgICBbTmV3T2JqZWN0LCBSYWlzZXNF
eGNlcHRpb25dCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JK
RUNUCi0gICAgICAgIERvY3VtZW50Ci0jZWxzZQotICAgICAgICBYTUxEb2N1bWVudAotI2VuZGlm
Ci0gICAgY3JlYXRlRG9jdW1lbnQoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIFtUcmVhdE51bGxB
cz1FbXB0eVN0cmluZ10gRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUsIG9wdGlvbmFsIERvY3VtZW50
VHlwZT8gZG9jdHlwZSA9IG51bGwpOworICAgIFtOZXdPYmplY3QsIFJhaXNlc0V4Y2VwdGlvbl0g
WE1MRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIFtUcmVh
dE51bGxBcz1FbXB0eVN0cmluZ10gRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUsIG9wdGlvbmFsIERv
Y3VtZW50VHlwZT8gZG9jdHlwZSA9IG51bGwpOwogCiAgICAgLy8gRklYTUU6IFVzaW5nICJ1bmRl
ZmluZWQiIGFzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGlzIHdyb25nLgogICAgIFtSYWlzZXNF
eGNlcHRpb25dIENTU1N0eWxlU2hlZXQgY3JlYXRlQ1NTU3R5bGVTaGVldChvcHRpb25hbCBET01T
dHJpbmcgdGl0bGUgPSAidW5kZWZpbmVkIiwgb3B0aW9uYWwgRE9NU3RyaW5nIG1lZGlhID0gInVu
ZGVmaW5lZCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggOTU1NTYyMS4uYzhlMDYxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC01NywzNyArNTcsMTggQEAKIAogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIE5vZGUgYWRvcHROb2RlKE5vZGUgc291cmNlKTsKIAotI2lmIGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIC8vIGRvY3VtZW50LmRv
Y3VtZW50VVJJIHdhcyB3cml0YWJsZSBpbiBET00zIENvcmUsIGJ1dCBpcyByZWFkLW9ubHkgaW4g
RE9NNAotICAgIC8vIChzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1kb20tMjAxMTA5
MTUvI2RvY3VtZW50KS4gV2UgbmVlZCB0byBrZWVwCi0gICAgLy8gdGhlIHdyaXRhYmxlIHZlcnNp
b24gYXJvdW5kIGZvciBHT2JqZWN0IGNsaWVudHMsIGJ1dCBhcmUgbW92aW5nIHRvCi0gICAgLy8g
cmVhZC1vbmx5IGZvciBvdGhlciBjbGllbnRzLgotICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGRv
Y3VtZW50VVJJOwotI2Vsc2UKICAgICBbSW1wbGVtZW50ZWRBcz11cmxGb3JCaW5kaW5nc10gcmVh
ZG9ubHkgYXR0cmlidXRlIFVTVlN0cmluZyBkb2N1bWVudFVSSTsKLSNlbmRpZgogCiAgICAgW1Jh
aXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBFdmVudCBjcmVhdGVFdmVudChET01TdHJpbmcgZXZl
bnRUeXBlKTsKIAogICAgIFtOZXdPYmplY3RdIFJhbmdlIGNyZWF0ZVJhbmdlKCk7CiAKLSNpZiBk
ZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBOb2RlSXRl
cmF0b3IgY3JlYXRlTm9kZUl0ZXJhdG9yKE5vZGUgcm9vdCwKLSAgICAgICAgb3B0aW9uYWwgdW5z
aWduZWQgbG9uZyB3aGF0VG9TaG93ID0gMHhGRkZGRkZGRiwKLSAgICAgICAgb3B0aW9uYWwgTm9k
ZUZpbHRlcj8gZmlsdGVyLAotICAgICAgICBvcHRpb25hbCBib29sZWFuIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpOwotICAgIFRyZWVXYWxrZXIgY3JlYXRlVHJlZVdhbGtlcihOb2RlIHJvb3QsCi0g
ICAgICAgIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCi0g
ICAgICAgIG9wdGlvbmFsIE5vZGVGaWx0ZXI/IGZpbHRlciwKLSAgICAgICAgb3B0aW9uYWwgYm9v
bGVhbiBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSNlbHNlCiAgICAgW05ld09iamVjdF0gTm9k
ZUl0ZXJhdG9yIGNyZWF0ZU5vZGVJdGVyYXRvcihOb2RlIHJvb3QsCiAgICAgICAgIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCiAgICAgICAgIG9wdGlvbmFs
IE5vZGVGaWx0ZXI/IGZpbHRlciA9IG51bGwpOwogICAgIFtOZXdPYmplY3RdIFRyZWVXYWxrZXIg
Y3JlYXRlVHJlZVdhbGtlcihOb2RlIHJvb3QsCiAgICAgICAgIG9wdGlvbmFsIHVuc2lnbmVkIGxv
bmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCiAgICAgICAgIG9wdGlvbmFsIE5vZGVGaWx0ZXI/
IGZpbHRlciA9IG51bGwpOwotI2VuZGlmCiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NV2lu
ZG93IGRlZmF1bHRWaWV3OwogCkBAIC0xMjAsMTEgKzEwMSw3IEBACiAgICAgYXR0cmlidXRlIERP
TVN0cmluZyBkZXNpZ25Nb2RlOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFVTVlN0cmluZyBy
ZWZlcnJlcjsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09C
SkVDVCkKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGRv
bWFpbjsKLSNlbHNlCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkb21haW47Ci0j
ZW5kaWYKICAgICBbSW1wbGVtZW50ZWRBcz11cmxGb3JCaW5kaW5nc10gcmVhZG9ubHkgYXR0cmli
dXRlIFVTVlN0cmluZyBVUkw7CiAKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uLCBTZXR0ZXJS
YWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgY29va2llOwpAQCAtMTQ0LDMzICsx
MjEsMjEgQEAKIAogICAgIE5vZGVMaXN0IGdldEVsZW1lbnRzQnlOYW1lKFtBdG9taWNTdHJpbmdd
IERPTVN0cmluZyBlbGVtZW50TmFtZSk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVD
VCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUHV0Rm9yd2FyZHM9aHJlZiwgVW5mb3JnZWFi
bGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBMb2NhdGlvbj8gbG9jYXRpb247Ci0jZW5kaWYKIAotI2lm
IGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgY2hhcnNldDsKLSNlbHNlCiAgICAgW0ltcGxlbWVudGVkQXM9Y2hhcmFj
dGVyU2V0V2l0aFVURjhGYWxsYmFja10gcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBjaGFy
c2V0OwotI2VuZGlmCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWFkeVN0YXRl
OwogCiAgICAgRWxlbWVudCBlbGVtZW50RnJvbVBvaW50KG9wdGlvbmFsIGxvbmcgeCA9IDAsIG9w
dGlvbmFsIGxvbmcgeSA9IDApOwogICAgIFJhbmdlIGNhcmV0UmFuZ2VGcm9tUG9pbnQob3B0aW9u
YWwgbG9uZyB4ID0gMCwgb3B0aW9uYWwgbG9uZyB5ID0gMCk7CiAKICAgICAvLyBNb3ppbGxhIGV4
dGVuc2lvbnMKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09C
SkVDVCkKICAgICBET01TZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCk7Ci0jZW5kaWYKICAgICBbSW1w
bGVtZW50ZWRBcz1jaGFyYWN0ZXJTZXRXaXRoVVRGOEZhbGxiYWNrXSByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGNoYXJhY3RlclNldDsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmc/IHByZWZlcnJlZFN0eWxlc2hlZXRTZXQ7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8g
c2VsZWN0ZWRTdHlsZXNoZWV0U2V0OwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAm
JiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBjcmVhdGVDU1NTdHls
ZURlY2xhcmF0aW9uKCk7Ci0jZW5kaWYKLQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBzdGFu
ZGFyZCBhbmQgaGFzIGJlZW4gZHJvcHBlZCBmcm9tIEJsaW5rIGFscmVhZHkuCiAgICAgW0N1c3Rv
bV0gKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KSBnZXRDU1NDYW52YXNDb250ZXh0KERPTVN0cmluZyBjb250ZXh0SWQsIERPTVN0cmluZyBuYW1l
LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCk7CiAKQEAgLTE5Nyw3ICsxNjIsNiBAQAogICAgIFtD
b25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHZvaWQgZXhpdFBvaW50ZXJMb2NrKCk7CiAgICAgW0Nv
bmRpdGlvbmFsPVBPSU5URVJfTE9DS10gcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQ/IHBvaW50
ZXJMb2NrRWxlbWVudDsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5H
VUFHRV9HT0JKRUNUKQogICAgIFtDb25kaXRpb25hbD1DU1NfUkVHSU9OU10gRE9NTmFtZWRGbG93
Q29sbGVjdGlvbiB3ZWJraXRHZXROYW1lZEZsb3dzKCk7CiAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRm9udEZhY2VTZXQgZm9udHM7CkBAIC0yMTMsOCArMTc3LDYgQEAKICAgICBbTmV3T2JqZWN0
LCBDdXN0b21dIFRvdWNoTGlzdCBjcmVhdGVUb3VjaExpc3QoVG91Y2guLi4gdG91Y2hlcyk7CiAj
ZW5kaWYKIAotI2VuZGlmCi0KICAgICAvLyBQYWdlIHZpc2liaWxpdHkgQVBJLgogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmlzaWJpbGl0eVN0YXRlOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBib29sZWFuIGhpZGRlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudFR5cGUuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5pZGwKaW5k
ZXggZTY4NzQ1Yi4uZTFlYTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50VHlwZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5pZGwKQEAg
LTIyLDEzICsyMiw2IEBACiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKIF0gaW50ZXJmYWNlIERv
Y3VtZW50VHlwZSA6IE5vZGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKLQotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAot
ICAgIFtJbXBsZW1lbnRlZEFzPWVudGl0aWVzRm9yQmluZGluZ3NdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBOYW1lZE5vZGVNYXAgZW50aXRpZXM7Ci0gICAgW0ltcGxlbWVudGVkQXM9bm90YXRpb25zRm9y
QmluZGluZ3NdIHJlYWRvbmx5IGF0dHJpYnV0ZSBOYW1lZE5vZGVNYXAgbm90YXRpb25zOwotICAg
IFtJbXBsZW1lbnRlZEFzPWludGVybmFsU3Vic2V0Rm9yQmluZGluZ3NdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmc/IGludGVybmFsU3Vic2V0OwotI2VuZGlmCi0KICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHB1YmxpY0lkOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc3lzdGVtSWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCmluZGV4IDcxYjYwNDMuLjg0
NzBlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKQEAgLTc4LDExICs3OCw2IEBACiAKICAgICBb
SW1wbGVtZW50ZWRBcz1iaW5kaW5nc09mZnNldFBhcmVudF0gcmVhZG9ubHkgYXR0cmlidXRlIEVs
ZW1lbnQgb2Zmc2V0UGFyZW50OwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBM
QU5HVUFHRV9HT0JKRUNUCi0gICAgdm9pZCBmb2N1cygpOwotICAgIHZvaWQgYmx1cigpOwotI2Vu
ZGlmCi0KICAgICB2b2lkIHNjcm9sbEludG9WaWV3KG9wdGlvbmFsIGJvb2xlYW4gYWxpZ25XaXRo
VG9wID0gdHJ1ZSk7CiAKICAgICBzZXF1ZW5jZTxET01TdHJpbmc+IGdldEF0dHJpYnV0ZU5hbWVz
KCk7CkBAIC0xMDIsMTEgKzk3LDkgQEAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBFbGVtZW50IGNs
b3Nlc3QoRE9NU3RyaW5nIHNlbGVjdG9ycyk7ICAgIAogICAgIFtJbXBsZW1lbnRlZEFzPW1hdGNo
ZXMsIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiB3ZWJraXRNYXRjaGVzU2VsZWN0b3IoRE9NU3Ry
aW5nIHNlbGVjdG9ycyk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFO
R1VBR0VfR09CSkVDVCkKICAgICAvLyBDU1NPTSBWaWV3IE1vZHVsZSBBUEkKICAgICBDbGllbnRS
ZWN0TGlzdCBnZXRDbGllbnRSZWN0cygpOwogICAgIENsaWVudFJlY3QgZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAm
JiBFTkFCTEVfRlVMTFNDUkVFTl9BUEkKICAgICAvLyBNb3ppbGxhIHZlcnNpb24KQEAgLTEzMSwx
MiArMTI0LDEwIEBACiAgICAgW0NvbmRpdGlvbmFsPUNTU19SRUdJT05TXSByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHdlYmtpdFJlZ2lvbk92ZXJzZXQ7CiAgICAgW0NvbmRpdGlvbmFsPUNT
U19SRUdJT05TXSBzZXF1ZW5jZTxSYW5nZT4gd2Via2l0R2V0UmVnaW9uRmxvd1JhbmdlcygpOwog
Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAg
ICAgLy8gU2hhZG93IERPTSBBUEkKICAgICBbRW5hYmxlZEF0UnVudGltZT1TaGFkb3dET00sIFJh
aXNlc0V4Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdEluaXQgaW5p
dCk7CiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1lbnRlZEFzPXNoYWRv
d1Jvb3RGb3JCaW5kaW5ncywgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTaGFkb3dSb290IHNoYWRvd1Jvb3Q7CiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9N
LCBSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNsb3Q7Ci0jZW5kaWYKIAogICAgIC8vIEV2
ZW50IEhhbmRsZXJzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCmluZGV4IGQzYjY0Y2YuLmZkODJhMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50LmlkbApAQCAtNzIsNyArNzIsNSBAQAogICAgIFtJbXBsZW1lbnRlZEFzPWxl
Z2FjeVJldHVyblZhbHVlXSBhdHRyaWJ1dGUgYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICBhdHRy
aWJ1dGUgYm9vbGVhbiBjYW5jZWxCdWJibGU7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1
dGUgRGF0YVRyYW5zZmVyIGNsaXBib2FyZERhdGE7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmlkbAppbmRleCBkMDEzYjBiLi4zMzZhNDJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAgICBKU0N1c3RvbUhlYWRlciwKICAgICBK
U0N1c3RvbVRvTmF0aXZlT2JqZWN0LAogXSBpbnRlcmZhY2UgRXZlbnRUYXJnZXQgewotI2lmICEo
ZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIC8vIEZJ
WE1FOiBTaG91bGQgYmU6CiAgICAgLy8gdm9pZCBhZGRFdmVudExpc3RlbmVyKERPTVN0cmluZyB0
eXBlLCBFdmVudExpc3RlbmVyPyBjYWxsYmFjaywgb3B0aW9uYWwgKEFkZEV2ZW50TGlzdGVuZXJP
cHRpb25zIG9yIGJvb2xlYW4pIG9wdGlvbnMpOwogICAgIC8vIHZvaWQgcmVtb3ZlRXZlbnRMaXN0
ZW5lcihET01TdHJpbmcgdHlwZSwgRXZlbnRMaXN0ZW5lcj8gY2FsbGJhY2ssIG9wdGlvbmFsIChF
dmVudExpc3RlbmVyT3B0aW9ucyBvciBib29sZWFuKSBvcHRpb25zKTsKQEAgLTMyLDcgKzMxLDYg
QEAKICAgICBbSW1wbGVtZW50ZWRBcz1hZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3NdIHZvaWQg
YWRkRXZlbnRMaXN0ZW5lcihbQXRvbWljU3RyaW5nXSBET01TdHJpbmcgdHlwZSwgRXZlbnRMaXN0
ZW5lcj8gbGlzdGVuZXIsIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIG9wdGlvbnMpOwogICAgIFtJ
bXBsZW1lbnRlZEFzPXJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5nc10gdm9pZCByZW1vdmVF
dmVudExpc3RlbmVyKFtBdG9taWNTdHJpbmddIERPTVN0cmluZyB0eXBlLCBFdmVudExpc3RlbmVy
PyBsaXN0ZW5lcik7CiAgICAgW0ltcGxlbWVudGVkQXM9cmVtb3ZlRXZlbnRMaXN0ZW5lckZvckJp
bmRpbmdzXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoW0F0b21pY1N0cmluZ10gRE9NU3RyaW5n
IHR5cGUsIEV2ZW50TGlzdGVuZXI/IGxpc3RlbmVyLCBFdmVudExpc3RlbmVyT3B0aW9ucyBvcHRp
b25zKTsKLSNlbmRpZgogCiAgICAgW0ltcGxlbWVudGVkQXM9YWRkRXZlbnRMaXN0ZW5lckZvckJp
bmRpbmdzXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoW0F0b21pY1N0cmluZ10gRE9NU3RyaW5nIHR5
cGUsIEV2ZW50TGlzdGVuZXI/IGxpc3RlbmVyLCBib29sZWFuIHVzZUNhcHR1cmUpOwogICAgIFtJ
bXBsZW1lbnRlZEFzPXJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5nc10gdm9pZCByZW1vdmVF
dmVudExpc3RlbmVyKFtBdG9taWNTdHJpbmddIERPTVN0cmluZyB0eXBlLCBFdmVudExpc3RlbmVy
PyBsaXN0ZW5lciwgYm9vbGVhbiB1c2VDYXB0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9LZXlib2FyZEV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2
ZW50LmlkbAppbmRleCBlNDM4M2ZhLi44NTJlNWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJk
RXZlbnQuaWRsCkBAIC0yMywyMCArMjMsMTAgQEAKICAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPUV2
ZW50LAogXSBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudCA6IFVJRXZlbnQgewogCi0jaWYgZGVmaW5l
ZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgLy8gS2V5TG9jYXRp
b25Db2RlCi0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBLRVlfTE9DQVRJT05fU1RBTkRBUkQgPSAw
eDAwOwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgS0VZX0xPQ0FUSU9OX0xFRlQgPSAweDAxOwot
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgS0VZX0xPQ0FUSU9OX1JJR0hUID0gMHgwMjsKLSAgICBj
b25zdCB1bnNpZ25lZCBsb25nIEtFWV9MT0NBVElPTl9OVU1QQUQgPSAweDAzOwotI2VuZGlmCi0K
LSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIERPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQgPSAweDAwOwog
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9MRUZUID0gMHgwMTsKICAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIERPTV9LRVlfTE9DQVRJT05fUklHSFQgPSAweDAyOwogICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgPSAweDAzOwotI2Vu
ZGlmCiAKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcga2V5SWRlbnRpZmllcjsKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29u
c3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvY2F0aW9uOwpAQCAt
NDcsMTAgKzM3LDYgQEAKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRv
bmx5IGF0dHJpYnV0ZSBib29sZWFuIG1ldGFLZXk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJv
b2xlYW4gYWx0R3JhcGhLZXk7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExB
TkdVQUdFX0dPQkpFQ1QKLSAgICBib29sZWFuIGdldE1vZGlmaWVyU3RhdGUob3B0aW9uYWwgRE9N
U3RyaW5nIGtleUlkZW50aWZpZXJBcmcpOwotI2VuZGlmCi0KICAgICAvLyBGSVhNRTogdGhpcyBk
b2VzIG5vdCBtYXRjaCB0aGUgdmVyc2lvbiBpbiB0aGUgRE9NIHNwZWMuCiAgICAgLy8gRklYTUU6
IFVzaW5nICJ1bmRlZmluZWQiIGFzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGlzIHdyb25nLgog
ICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQob3B0aW9uYWwgRE9NU3RyaW5nIHR5cGUgPSAidW5k
ZWZpbmVkIiwgb3B0aW9uYWwgYm9vbGVhbiBjYW5CdWJibGUgPSBmYWxzZSwgb3B0aW9uYWwgYm9v
bGVhbiBjYW5jZWxhYmxlID0gZmFsc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVzc2FnZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaWRsCmlu
ZGV4IGYxNTI3OGEuLjRiNmU1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaWRsCkBA
IC0zMyw3ICszMyw2IEBACiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9yXSByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhc3RFdmVudElkOwogICAgIFtJbml0aWFsaXplZEJ5
RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9ubHkgYXR0cmlidXRlIEV2ZW50VGFyZ2V0IHNvdXJjZTsg
Ly8gTWF5IGJlIGEgRE9NV2luZG93IG9yIGEgTWVzc2FnZVBvcnQuCiAKLSNpZiAhKGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbSW5pdGlhbGl6ZWRC
eUV2ZW50Q29uc3RydWN0b3IsIENhY2hlZEF0dHJpYnV0ZSwgQ3VzdG9tR2V0dGVyXSByZWFkb25s
eSBhdHRyaWJ1dGUgYW55IGRhdGE7CiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9y
XSByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8TWVzc2FnZVBvcnQ+IHBvcnRzOwogCkBAIC00
NCwxMSArNDMsNCBAQAogICAgIFtDdXN0b21dIHZvaWQgd2Via2l0SW5pdE1lc3NhZ2VFdmVudChv
cHRpb25hbCBET01TdHJpbmcgdHlwZUFyZywgb3B0aW9uYWwgYm9vbGVhbiBjYW5CdWJibGVBcmcs
IG9wdGlvbmFsIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywKICAgICAgICAgb3B0aW9uYWwgYW55IGRh
dGFBcmcsIG9wdGlvbmFsIFVTVlN0cmluZyBvcmlnaW5BcmcsIG9wdGlvbmFsIERPTVN0cmluZyBs
YXN0RXZlbnRJZEFyZywgb3B0aW9uYWwgRE9NV2luZG93IHNvdXJjZUFyZywKICAgICAgICAgb3B0
aW9uYWwgQXJyYXkgdHJhbnNmZXJhYmxlcyk7Ci0jZWxzZQotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0YTsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVz
c2FnZVBvcnQgbWVzc2FnZVBvcnQ7Ci0gICAgdm9pZCBpbml0TWVzc2FnZUV2ZW50KG9wdGlvbmFs
IERPTVN0cmluZyB0eXBlQXJnLCBvcHRpb25hbCBib29sZWFuIGNhbkJ1YmJsZUFyZywgb3B0aW9u
YWwgYm9vbGVhbiBjYW5jZWxhYmxlQXJnLAotICAgICAgICBvcHRpb25hbCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU/IGRhdGFBcmcsIG9wdGlvbmFsIERPTVN0cmluZyBvcmlnaW5BcmcsIG9wdGlvbmFs
IERPTVN0cmluZyBsYXN0RXZlbnRJZEFyZywgb3B0aW9uYWwgRE9NV2luZG93PyBzb3VyY2VBcmcs
Ci0gICAgICAgIG9wdGlvbmFsIE1lc3NhZ2VQb3J0PyBtZXNzYWdlUG9ydCk7Ci0jZW5kaWYKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAppbmRleCBjYWU4MzUyLi5iNTcyZDk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwKQEAgLTMxLDEyICszMSwxMCBAQAogICAgIEdlbmVy
YXRlSXNSZWFjaGFibGU9SW1wbCwKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJm
YWNlIE1lc3NhZ2VQb3J0IDogRXZlbnRUYXJnZXQgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9H
T0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtDdXN0b20sIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgQXJyYXkgbWVzc2FnZVBv
cnRzKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICBhdHRy
aWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2FnZTsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmlkbAppbmRleCA1NWZhNzI2Li44NTlhMGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZl
bnQuaWRsCkBAIC0yMiwxMCArMjIsOCBAQAogICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9RXZlbnQs
CiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKIF0gaW50ZXJmYWNlIE1vdXNlRXZlbnQgOiBVSUV2
ZW50IHsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVD
VCkKICAgICBbQ29uZGl0aW9uYWw9TU9VU0VfRk9SQ0VfRVZFTlRTXSBjb25zdCBkb3VibGUgV0VC
S0lUX0ZPUkNFX0FUX01PVVNFX0RPV04gPSAxOwogICAgIFtDb25kaXRpb25hbD1NT1VTRV9GT1JD
RV9FVkVOVFNdIGNvbnN0IGRvdWJsZSBXRUJLSVRfRk9SQ0VfQVRfRk9SQ0VfTU9VU0VfRE9XTiA9
IDI7Ci0jZW5kaWYKIAogICAgIFtJbml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9u
bHkgYXR0cmlidXRlIGxvbmcgc2NyZWVuWDsKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3Ry
dWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHNjcmVlblk7CkBAIC0zOSw5ICszNyw3IEBA
CiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1dGUg
RXZlbnRUYXJnZXQ/IHJlbGF0ZWRUYXJnZXQ7CiAgICAgW0NvbmRpdGlvbmFsPVBPSU5URVJfTE9D
S10gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbW92ZW1lbnRYOwogICAgIFtDb25kaXRpb25hbD1Q
T0lOVEVSX0xPQ0tdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIG1vdmVtZW50WTsKLSNpZiAhKGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0
aW9uYWw9TU9VU0VfRk9SQ0VfRVZFTlRTLCBJbXBsZW1lbnRlZEFzPWZvcmNlXXJlYWRvbmx5IGF0
dHJpYnV0ZSBkb3VibGUgd2Via2l0Rm9yY2U7Ci0jZW5kaWYKIAogICAgIC8vIEZJWE1FOiBVc2lu
ZyAidW5kZWZpbmVkIiBhcyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBpcyB3cm9uZy4KICAgICB2
b2lkIGluaXRNb3VzZUV2ZW50KG9wdGlvbmFsIERPTVN0cmluZyB0eXBlID0gInVuZGVmaW5lZCIs
IG9wdGlvbmFsIGJvb2xlYW4gY2FuQnViYmxlID0gZmFsc2UsICBvcHRpb25hbCBib29sZWFuIGNh
bmNlbGFibGUgPSBmYWxzZSwKQEAgLTU2LDggKzUyLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgbG9uZyB5OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlPyBmcm9tRWxlbWVudDsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZT8gdG9FbGVtZW50OwotCi0jaWYgIShkZWZpbmVkKExB
TkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERhdGFUcmFuc2ZlciBkYXRhVHJhbnNmZXI7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuaWRsCmluZGV4IDE1MDRiMDcuLmM2NzI2NzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuaWRsCkBAIC0yNSw3ICsyNSw2IEBACiBdIGludGVyZmFjZSBOYW1lZE5vZGVN
YXAgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKIAotI2lm
ICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIGdl
dHRlciBBdHRyPyBnZXROYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwogICAgIFtSYWlzZXNFeGNl
cHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOwogICAgIFtSYWlzZXNFeGNlcHRp
b25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKQEAgLTMzLDEzICszMiw0
IEBACiAgICAgQXR0cj8gZ2V0TmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERP
TVN0cmluZyBsb2NhbE5hbWUpOwogICAgIFtSYWlzZXNFeGNlcHRpb24sIEltcGxlbWVudGVkQXM9
c2V0TmFtZWRJdGVtXSBBdHRyPyBzZXROYW1lZEl0ZW1OUyhBdHRyIGF0dHIpOwogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VV
UkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotI2Vsc2UKLSAgICBnZXR0ZXIgTm9kZT8gZ2V0TmFt
ZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBOb2RlPyBzZXRO
YW1lZEl0ZW0oTm9kZSBub2RlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBOb2RlIHJlbW92ZU5h
bWVkSXRlbShET01TdHJpbmcgbmFtZSk7Ci0gICAgZ2V0dGVyIE5vZGU/IGl0ZW0odW5zaWduZWQg
bG9uZyBpbmRleCk7Ci0gICAgTm9kZT8gZ2V0TmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3Bh
Y2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotICAgIFtSYWlzZXNFeGNlcHRpb24sIEltcGxl
bWVudGVkQXM9c2V0TmFtZWRJdGVtXSBOb2RlPyBzZXROYW1lZEl0ZW1OUyhOb2RlIG5vZGUpOwot
ICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBu
YW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aWRsCmluZGV4IDdjOTI1ZTMuLmZlZTIxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwKQEAgLTY2LDEwICs2
Niw2IEBACiAKICAgICB2b2lkIG5vcm1hbGl6ZSgpOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9H
T0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9aXNTdXBwb3J0
ZWRGb3JCaW5kaW5nc10gYm9vbGVhbiBpc1N1cHBvcnRlZChvcHRpb25hbCBET01TdHJpbmcgZmVh
dHVyZSwgb3B0aW9uYWwgRE9NU3RyaW5nIHZlcnNpb24pOwotI2VuZGlmCi0KICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGJhc2VVUkk7CiAKICAgICAvLyBGSVhNRTogdGhlIHNwZWMg
c2F5cyB0aGlzIGNhbiBhbHNvIHJhaXNlIG9uIHJldHJpZXZhbC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCmlu
ZGV4IDY5NjI0OWMuLmY0YTNjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbApAQCAtMzMsMTMgKzMzLDgg
QEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xsYXBzZWQ7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWluZXI7CiAKLSNpZiAhKGRlZmlu
ZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHNldFN0YXJ0KE5vZGUgcmVmTm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQp
OwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0RW5kKE5vZGUgcmVmTm9kZSwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotI2Vsc2UKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFN0
YXJ0KE5vZGUgcmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZv
aWQgc2V0RW5kKE5vZGUgcmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotI2VuZGlmCiAKICAgICBbUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHNldFN0YXJ0QmVmb3JlKE5vZGUgcmVmTm9kZSk7CiAgICAgW1Jh
aXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRTdGFydEFmdGVyKE5vZGUgcmVmTm9kZSk7CkBAIC02Nywx
MCArNjIsOCBAQAogCiAgICAgdm9pZCBkZXRhY2goKTsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFH
RV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIENsaWVudFJlY3RMaXN0IGdldENs
aWVudFJlY3RzKCk7CiAgICAgQ2xpZW50UmVjdCBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSNl
bmRpZgogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50
IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChET01TdHJpbmcgaHRtbCk7CiAKQEAgLTg0LDE4ICs3
Nyw5IEBACiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGludGVyc2VjdHNOb2RlKE5v
ZGUgcmVmTm9kZSk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VB
R0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBzaG9ydCBjb21wYXJlUG9pbnQoTm9k
ZSByZWZOb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0g
Ym9vbGVhbiBpc1BvaW50SW5SYW5nZShOb2RlIHJlZk5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSNlbHNlCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZVBvaW50KE5vZGUg
cmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaXNQ
b2ludEluUmFuZ2UoTm9kZSByZWZOb2RlLCBsb25nIG9mZnNldCk7Ci0jZW5kaWYKIAogICAgIC8v
IEZJWE1FOiBVc2luZyAidW5kZWZpbmVkIiBhcyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBpcyB3
cm9uZy4KICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJp
bmcgdW5pdCA9ICJ1bmRlZmluZWQiKTsKLQotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkg
JiYgTEFOR1VBR0VfR09CSkVDVAotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdGV4
dDsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TbG90YWJsZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2xvdGFibGUuaWRsCmluZGV4IDJhYTJjNzkuLjEzMmVh
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TbG90YWJsZS5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1Nsb3RhYmxlLmlkbApAQCAtMjgsNyArMjgsNSBAQAogICAgIE5vSW50
ZXJmYWNlT2JqZWN0LAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLAogXSBpbnRlcmZh
Y2UgU2xvdGFibGUgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFH
RV9HT0JKRUNUKQogICAgIFtJbXBsZW1lbnRlZEFzPWFzc2lnbmVkU2xvdEZvckJpbmRpbmdzXSBy
ZWFkb25seSBhdHRyaWJ1dGUgSFRNTFNsb3RFbGVtZW50PyBhc3NpZ25lZFNsb3Q7Ci0jZW5kaWYK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5pZGwKaW5kZXggNjUzZWU0Zi4uODE2YjE3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmlkbApAQCAtNDAsMTUgKzQwLDggQEAKIAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBib29sZWFuIHdlYmtpdERpcmVjdGlvbkludmVydGVkRnJvbURldmljZTsK
IAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQog
ICAgIHZvaWQgaW5pdFdlYktpdFdoZWVsRXZlbnQob3B0aW9uYWwgbG9uZyB3aGVlbERlbHRhWCA9
IDAsIG9wdGlvbmFsIGxvbmcgd2hlZWxEZWx0YVkgPSAwLCBvcHRpb25hbCBET01XaW5kb3c/IHZp
ZXcgPSBudWxsLAogICAgICAgICBvcHRpb25hbCBsb25nIHNjcmVlblggPSAwLCBvcHRpb25hbCBs
b25nIHNjcmVlblkgPSAwLCBvcHRpb25hbCBsb25nIGNsaWVudFggPSAwLCBvcHRpb25hbCBsb25n
IGNsaWVudFkgPSAwLAogICAgICAgICBvcHRpb25hbCBib29sZWFuIGN0cmxLZXkgPSBmYWxzZSwg
b3B0aW9uYWwgYm9vbGVhbiBhbHRLZXkgPSBmYWxzZSwKICAgICAgICAgb3B0aW9uYWwgYm9vbGVh
biBzaGlmdEtleSA9IGZhbHNlLCBvcHRpb25hbCBib29sZWFuIG1ldGFLZXkgPSBmYWxzZSk7Ci0j
ZWxzZQotICAgIHZvaWQgaW5pdFdoZWVsRXZlbnQob3B0aW9uYWwgbG9uZyB3aGVlbERlbHRhWCA9
IDAsIG9wdGlvbmFsIGxvbmcgd2hlZWxEZWx0YVkgPSAwLCBvcHRpb25hbCBET01XaW5kb3c/IHZp
ZXcgPSBudWxsLAotICAgICAgICBvcHRpb25hbCBsb25nIHNjcmVlblggPSAwLCBvcHRpb25hbCBs
b25nIHNjcmVlblkgPSAwLCBvcHRpb25hbCBsb25nIGNsaWVudFggPSAwLCBvcHRpb25hbCBsb25n
IGNsaWVudFkgPSAwLAotICAgICAgICBvcHRpb25hbCBib29sZWFuIGN0cmxLZXkgPSBmYWxzZSwg
b3B0aW9uYWwgYm9vbGVhbiBhbHRLZXkgPSBmYWxzZSwKLSAgICAgICAgb3B0aW9uYWwgYm9vbGVh
biBzaGlmdEtleSA9IGZhbHNlLCBvcHRpb25hbCBib29sZWFuIG1ldGFLZXkgPSBmYWxzZSk7Ci0j
ZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVFeGNlcHRp
b24uaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmlkbAppbmRleCAy
ZTE2ZGMzLi40MTZlMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVF
eGNlcHRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZUV4Y2VwdGlvbi5p
ZGwKQEAgLTM3LDkgKzM3LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5h
bWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOwogCi0jaWYgIShk
ZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW05vdEVu
dW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAgICAvLyBGaWxlRXhj
ZXB0aW9uQ29kZQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9GT1VORF9FUlIgPSAxOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAppbmRleCBiMjg5YzU5Li5j
NTRiZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbApAQCAt
MjksMTcgKzI5LDkgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBjb2RlOwog
ICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGNvZGVCYXNlOwogICAgIFtSZWZsZWN0
XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhlaWdodDsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0
cmluZyBoc3BhY2U7Ci0jZWxzZQotICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgbG9uZyBoc3BhY2U7
Ci0jZW5kaWYKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIFtS
ZWZsZWN0XSBhdHRyaWJ1dGUgVVNWU3RyaW5nIG9iamVjdDsKLSNpZiAhKGRlZmluZWQoTEFOR1VB
R0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmVmbGVjdF0gYXR0cmlidXRl
IERPTVN0cmluZyB2c3BhY2U7Ci0jZWxzZQotICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgbG9uZyB2
c3BhY2U7Ci0jZW5kaWYKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyB3aWR0aDsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCmluZGV4IGJlYmEz
OGQuLmZlM2M3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRs
CkBAIC0yOSwxMyArMjksOCBAQAogICAgIFJlcG9ydEV4dHJhTWVtb3J5Q29zdCwKICAgICBSZXBv
cnRFeHRlcm5hbE1lbW9yeUNvc3QsCiBdIGludGVyZmFjZSBIVE1MQ2FudmFzRWxlbWVudCA6IEhU
TUxFbGVtZW50IHsKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dP
QkpFQ1QKLSAgICBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsKLSAgICBhdHRyaWJ1dGUgbG9uZyBoZWln
aHQ7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHdpZHRoOwogICAgIGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIGhlaWdodDsKLSNlbmRpZgogCiAgICAgW0N1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBET01TdHJpbmcgdG9EYXRhVVJMKG9wdGlvbmFsIERPTVN0cmluZz8gdHlwZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaWRsIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKaW5kZXggOGVmYzAzYS4uMTk0
MWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKQEAgLTI2LDExICsy
Niw2IEBACiBdIGludGVyZmFjZSBIVE1MQ29sbGVjdGlvbiB7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNU
KSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgZ2V0dGVyIE5vZGUgaXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KTsKLSAgICBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotI2Vs
c2UKICAgICBnZXR0ZXIgRWxlbWVudD8gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICBn
ZXR0ZXIgRWxlbWVudD8gbmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKLSNlbmRpZgogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbAppbmRleCBkMDBmNWIyLi41MDEwOGM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCkBAIC0zMCwyMSArMzAsMTMgQEAKICAgICBb
Q3VzdG9tXSB2b2lkIHdyaXRlKG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0KTsKICAgICBbQ3VzdG9t
XSB2b2lkIHdyaXRlbG4ob3B0aW9uYWwgRE9NU3RyaW5nIHRleHQpOwogCi0jaWYgIShkZWZpbmVk
KExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW0N1c3RvbSwgUmVw
bGFjZWFibGUsIERlbGV0YWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxBbGxDb2xsZWN0aW9u
IGFsbDsKLSNlbmRpZgogCiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdm9pZCBjYXB0dXJlRXZl
bnRzKCk7CiAgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdF
X0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyB3aWR0aDsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBoZWlnaHQ7Ci0gICAgYXR0cmli
dXRlIERPTVN0cmluZyBkaXI7Ci0jZW5kaWYKLQogICAgIC8vIERlcHJlY2F0ZWQgYXR0cmlidXRl
cy4KICAgICBbVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYmdD
b2xvcjsKICAgICBbVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcg
ZmdDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaWRs
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKaW5kZXggMDI0ZWM0Ny4uZmVh
YmE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKQEAgLTUxLDEyICs1MSwxMCBA
QAogCiAgICAgdm9pZCBjbGljaygpOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1Qp
ICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgdm9pZCBmb2N1cygpOwogICAgIHZvaWQgYmx1cigp
OwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ01hcCBkYXRhc2V0OwotI2VuZGlm
CiB9OwogCiBIVE1MRWxlbWVudCBpbXBsZW1lbnRzIEdsb2JhbEV2ZW50SGFuZGxlcnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAppbmRleCA1MDI2YzJhLi4xZDgzMGVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwKQEAgLTI0LDE5ICsy
NCwxMSBAQAogICAgIEN1c3RvbUNhbGwsCiBdIGludGVyZmFjZSBIVE1MRW1iZWRFbGVtZW50IDog
SFRNTEVsZW1lbnQgewogW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgYWxpZ247Ci0jaWYg
IShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiBbUmVmbGVj
dF0gYXR0cmlidXRlIERPTVN0cmluZyBoZWlnaHQ7Ci0jZWxzZQotW1JlZmxlY3RdIGF0dHJpYnV0
ZSBsb25nIGhlaWdodDsKLSNlbmRpZgogW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKIFtSZWZsZWN0LCBVUkxdIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgc3JjOwogW1JlZmxlY3RdIGF0
dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkg
JiYgTEFOR1VBR0VfR09CSkVDVCkKIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdpZHRo
OwotI2Vsc2UKLVtSZWZsZWN0XSBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsKLSNlbmRpZgogCiBbQ2hl
Y2tTZWN1cml0eUZvck5vZGUsIFJhaXNlc0V4Y2VwdGlvbl0gU1ZHRG9jdW1lbnQgZ2V0U1ZHRG9j
dW1lbnQoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50Lmlk
bAppbmRleCA4MmMxNDAyLi42ZDY1M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5pZGwKQEAgLTI0LDExICsyNCw3IEBAIGludGVyZmFjZSBIVE1MRmllbGRT
ZXRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyB0eXBlOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9H
T0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9ZWxlbWVudHNGb3JOYXRpdmVCaW5kaW5nc10gcmVh
ZG9ubHkgYXR0cmlidXRlIEhUTUxDb2xsZWN0aW9uIGVsZW1lbnRzOwotI2Vsc2UKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24gZWxlbWVudHM7Ci0jZW5k
aWYKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgd2lsbFZhbGlkYXRl
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBWYWxpZGl0eVN0YXRlICAgdmFsaWRpdHk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKaW5kZXggZGIyMDYwMi4uOWYzYjY4NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmlkbApAQCAtMzUsMTEgKzM1LDcg
QEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xlYW4gbm9WYWxpZGF0ZTsKICAgICBbUmVm
bGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyB0YXJnZXQ7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdF
X0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBbSW1wbGVtZW50ZWRBcz1lbGVtZW50
c0Zvck5hdGl2ZUJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gZWxl
bWVudHM7Ci0jZWxzZQogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbiBlbGVtZW50czsKLSNlbmRpZgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxl
bmd0aDsKIAogICAgIGdldHRlciBFbGVtZW50ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKQEAgLTQ4
LDExICs0NCw3IEBACiAKICAgICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JSRUNUX0FORF9BVVRP
Q0FQSVRBTElaRSwgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcg
YXV0b2NhcGl0YWxpemU7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFO
R1VBR0VfR09CSkVDVCkKICAgICBbSW1wbGVtZW50ZWRBcz1zdWJtaXRGcm9tSmF2YVNjcmlwdF0g
dm9pZCBzdWJtaXQoKTsKLSNlbHNlCi0gICAgdm9pZCBzdWJtaXQoKTsKLSNlbmRpZgogICAgIHZv
aWQgcmVzZXQoKTsKICAgICBib29sZWFuIGNoZWNrVmFsaWRpdHkoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAppbmRleCA5NzBlMzNjLi43YzExY2E4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAtMjcsMTEgKzI3LDcg
QEAgaW50ZXJmYWNlIEhUTUxJRnJhbWVFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZs
ZWN0LCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBtYXJnaW5X
aWR0aDsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogCi0jaWYgZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW1JlZmxlY3Rd
IGF0dHJpYnV0ZSBET01TdHJpbmcgc2FuZGJveDsKLSNlbHNlCiAgICAgW1B1dEZvcndhcmRzPXZh
bHVlXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NVG9rZW5MaXN0IHNhbmRib3g7Ci0jZW5kaWYKIAog
ICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNjcm9sbGluZzsKICAgICBbUmVmbGVj
dCwgVVJMXSBhdHRyaWJ1dGUgVVNWU3RyaW5nIHNyYzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaWRsCmluZGV4IDQ4YjAyNWEuLmE4ZDJiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbApAQCAtNTgsMTEgKzU4LDcgQEAKICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHR5cGU7IC8vIHJlYWRvbmx5IGRyb3BwZWQgYXMgcGFydCBvZiBET00gbGV2
ZWwgMgogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZGVmYXVsdFZhbHVlOwogICAgIC8vIFNlZSB0
aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAwMDg1Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCiAgICAgW1RyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJSYWlzZXNFeGNlcHRpb25d
IGF0dHJpYnV0ZSBET01TdHJpbmcgdmFsdWU7Ci0jZWxzZQotICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgdmFsdWU7Ci0jZW5kaWYKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUg
RGF0ZSB2YWx1ZUFzRGF0ZTsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUg
dW5yZXN0cmljdGVkIGRvdWJsZSB2YWx1ZUFzTnVtYmVyOwogCkBAIC05MywxMCArODksNiBAQAog
ICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVzZU1hcDsKICAgICBbUmVmbGVjdF0g
YXR0cmlidXRlIGJvb2xlYW4gaW5jcmVtZW50YWw7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dP
QkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICB2b2lkIHNldFZhbHVlRm9yVXNlcihET01T
dHJpbmcgdmFsdWUpOwotI2VuZGlmCi0KICAgICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JSRUNU
X0FORF9BVVRPQ0FQSVRBTElaRV0gYXR0cmlidXRlIGJvb2xlYW4gYXV0b2NvcnJlY3Q7CiAKICAg
ICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSwgVHJlYXRO
dWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYXV0b2NhcGl0YWxpemU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmlkbAppbmRleCA0ZjAyODYxLi44ZDBj
MGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5pZGwKQEAgLTk1LDcg
Kzk1LDYgQEAKICAgICBbQ29uZGl0aW9uYWw9TUVESUFfU1RBVElTVElDU10gcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgd2Via2l0QXVkaW9EZWNvZGVkQnl0ZUNvdW50OwogICAgIFtD
b25kaXRpb25hbD1NRURJQV9TVEFUSVNUSUNTXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyB3ZWJraXRWaWRlb0RlY29kZWRCeXRlQ291bnQ7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VB
R0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0aW9uYWw9RU5DUllQ
VEVEX01FRElBLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgd2Via2l0R2VuZXJhdGVLZXlSZXF1ZXN0
KERPTVN0cmluZz8ga2V5U3lzdGVtLCBvcHRpb25hbCBVaW50OEFycmF5PyBpbml0RGF0YSA9IG51
bGwpOwogICAgIFtDb25kaXRpb25hbD1FTkNSWVBURURfTUVESUEsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB3ZWJraXRBZGRLZXkoRE9NU3RyaW5nPyBrZXlTeXN0ZW0sIFVpbnQ4QXJyYXkga2V5LCBv
cHRpb25hbCBVaW50OEFycmF5PyBpbml0RGF0YSA9IG51bGwsIG9wdGlvbmFsIERPTVN0cmluZyBz
ZXNzaW9uSWQpOwogICAgIFtDb25kaXRpb25hbD1FTkNSWVBURURfTUVESUEsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB3ZWJraXRDYW5jZWxLZXlSZXF1ZXN0KERPTVN0cmluZz8ga2V5U3lzdGVtLCBv
cHRpb25hbCBET01TdHJpbmcgc2Vzc2lvbklkKTsKQEAgLTEwNywxNSArMTA2LDEyIEBACiAgICAg
W0NvbmRpdGlvbmFsPVZJREVPX1RSQUNLXSByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9UcmFja0xp
c3QgYXVkaW9UcmFja3M7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPX1RSQUNLXSByZWFkb25seSBh
dHRyaWJ1dGUgVGV4dFRyYWNrTGlzdCB0ZXh0VHJhY2tzOwogICAgIFtDb25kaXRpb25hbD1WSURF
T19UUkFDS10gcmVhZG9ubHkgYXR0cmlidXRlIFZpZGVvVHJhY2tMaXN0IHZpZGVvVHJhY2tzOwot
I2VuZGlmCiAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBtZWRpYUdyb3VwOwog
CiAgICAgW0N1c3RvbVNldHRlcl0gYXR0cmlidXRlIE1lZGlhQ29udHJvbGxlciBjb250cm9sbGVy
OwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1Qp
CiAgICAgW0NvbmRpdGlvbmFsPU1FRElBX1NPVVJDRV0gVmlkZW9QbGF5YmFja1F1YWxpdHkgZ2V0
VmlkZW9QbGF5YmFja1F1YWxpdHkoKTsKLSNlbmRpZgogCiAgICAgW0NvbmRpdGlvbmFsPVdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVF0gdm9pZCB3ZWJraXRTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIo
KTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUXSByZWFkb25seSBh
dHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbAppbmRleCBhYjNmOGQwLi41
YmYwM2U0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5pZGwKQEAg
LTMwLDEwICszMCw2IEBACiAgICAgYXR0cmlidXRlIGJvb2xlYW4gc2VsZWN0ZWQ7CiAgICAgYXR0
cmlidXRlIERPTVN0cmluZyB2YWx1ZTsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNU
KSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgdGV4dDsKLSNl
bHNlCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0ZXh0OwotI2VuZGlmCiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaW5kZXg7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsCmluZGV4IDQxYTZmMTYuLjgzODc1OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwKQEAgLTI3LDI1
ICsyNywxNSBAQAogICAgIGF0dHJpYnV0ZSBsb25nIHNlbGVjdGVkSW5kZXg7CiAgICAgW0N1c3Rv
bVNldHRlciwgU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBs
ZW5ndGg7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QKLSAgICBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotI2Vsc2UKICAg
ICBnZXR0ZXIgSFRNTE9wdGlvbkVsZW1lbnQ/IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CiAg
ICAgZ2V0dGVyIEhUTUxPcHRpb25FbGVtZW50PyBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwot
I2VuZGlmCiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09C
SkVDVCkKICAgICAvLyBGSVhNRTogU2hvdWxkIGJlOgogICAgIC8vIHZvaWQgYWRkKChIVE1MT3B0
aW9uRWxlbWVudCBvciBIVE1MT3B0R3JvdXBFbGVtZW50KSBlbGVtZW50LCBvcHRpb25hbCAoSFRN
TEVsZW1lbnQgb3IgbG9uZyk/IGJlZm9yZSA9IG51bGwpOwogICAgIFtSYWlzZXNFeGNlcHRpb25d
IHZvaWQgYWRkKEhUTUxFbGVtZW50IGVsZW1lbnQsIG9wdGlvbmFsIEhUTUxFbGVtZW50PyBiZWZv
cmUgPSBudWxsKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGFkZChIVE1MRWxlbWVudCBl
bGVtZW50LCBsb25nIGluZGV4KTsKLSNlbHNlCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBh
ZGQoSFRNTE9wdGlvbkVsZW1lbnQgb3B0aW9uLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKLSNlbmRp
ZgogCiAgICAgdm9pZCByZW1vdmUobG9uZyBpbmRleCk7Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdF
X0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgLy8gRklYTUU6IFRoaXMgb3Zlcmxv
YWQgaXMgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBoYXMgYmVlbiBkcm9wcGVkIGluIEJs
aW5rLgogICAgIHZvaWQgcmVtb3ZlKEhUTUxPcHRpb25FbGVtZW50IG9wdGlvbik7Ci0jZW5kaWYK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsCmluZGV4IDk3Y2Q4
MDEuLmUzOWYzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRs
CkBAIC0zMCwyNyArMzAsMTcgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBu
YW1lOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiByZXF1aXJlZDsKIAotI2lmIGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIGF0dHJpYnV0
ZSBsb25nIHNpemU7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNpemU7Ci0j
ZW5kaWYKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKIAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gb3B0aW9uczsKICAgICBbU2V0
dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAKLSNp
ZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBnZXR0
ZXIgTm9kZSBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIE5vZGUgbmFtZWRJdGVtKERP
TVN0cmluZyBuYW1lKTsKLSNlbHNlCiAgICAgZ2V0dGVyIEhUTUxPcHRpb25FbGVtZW50PyBpdGVt
KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIEhUTUxPcHRpb25FbGVtZW50PyBuYW1lZEl0ZW0o
RE9NU3RyaW5nIG5hbWUpOwotI2VuZGlmCiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGFk
ZChIVE1MRWxlbWVudCBlbGVtZW50LCBvcHRpb25hbCBIVE1MRWxlbWVudD8gYmVmb3JlID0gbnVs
bCk7Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1Qp
CiAgICAgLy8gRklYTUU6IFNob3VsZCBiZToKICAgICAvLyB2b2lkIGFkZCgoSFRNTE9wdGlvbkVs
ZW1lbnQgb3IgSFRNTE9wdEdyb3VwRWxlbWVudCkgZWxlbWVudCwgb3B0aW9uYWwgKEhUTUxFbGVt
ZW50IG9yIGxvbmcpPyBiZWZvcmUgPSBudWxsKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IGFkZChIVE1MRWxlbWVudCBlbGVtZW50LCBsb25nIGluZGV4KTsKQEAgLTU4LDcgKzQ4LDYgQEAK
ICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHJlbW92ZSgpOyAvLyBDaGlsZE5vZGUgb3Zlcmxv
YWQKICAgICAvLyBGSVhNRTogVGhpcyBvdmVybG9hZCBpcyBub3QgaW4gdGhlIHNwZWNpZmljYXRp
b24gYW5kIHdhcyBkcm9wcGVkIGluIEJsaW5rLgogICAgIHZvaWQgcmVtb3ZlKEhUTUxPcHRpb25F
bGVtZW50IG9wdGlvbik7Ci0jZW5kaWYKICAgICBbSW1wbGVtZW50ZWRBcz1yZW1vdmVCeUluZGV4
XSB2b2lkIHJlbW92ZShsb25nIGluZGV4KTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1M
Q29sbGVjdGlvbiBzZWxlY3RlZE9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlQ2VsbEVsZW1lbnQuaWRsCmluZGV4IDRjOTY2OTkuLjZhOTBkZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCkBAIC0yNiwxMyArMjYsOCBAQCBp
bnRlcmZhY2UgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxl
Y3Q9Y2hhcl0gYXR0cmlidXRlIERPTVN0cmluZyBjaDsKICAgICBbUmVmbGVjdD1jaGFyb2ZmXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGNoT2ZmOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNU
KSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9Y29sU3BhbkZvckJpbmRp
bmdzXSBhdHRyaWJ1dGUgbG9uZyBjb2xTcGFuOwotICAgIFtJbXBsZW1lbnRlZEFzPXJvd1NwYW5G
b3JCaW5kaW5nc10gYXR0cmlidXRlIGxvbmcgcm93U3BhbjsKLSNlbHNlCiAgICAgW0ltcGxlbWVu
dGVkQXM9Y29sU3BhbkZvckJpbmRpbmdzXSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2xTcGFu
OwogICAgIFtJbXBsZW1lbnRlZEFzPXJvd1NwYW5Gb3JCaW5kaW5nc10gYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgcm93U3BhbjsKLSNlbmRpZgogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgc3VwcG9z
ZWQgdG8gYmU6CiAgICAgLy8gW1B1dEZvcndhcmRzPXZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUg
RE9NVG9rZW5MaXN0IGhlYWRlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUNvbEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xF
bGVtZW50LmlkbAppbmRleCBmNzlhZmZhLi4wM2MwMGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5pZGwKQEAgLTIyLDExICsyMiw3IEBAIGludGVyZmFjZSBI
VE1MVGFibGVDb2xFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZsZWN0XSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGFsaWduOwogICAgIFtSZWZsZWN0PWNoYXJdIGF0dHJpYnV0ZSBET01TdHJp
bmcgY2g7CiAgICAgW1JlZmxlY3Q9Y2hhcm9mZl0gYXR0cmlidXRlIERPTVN0cmluZyBjaE9mZjsK
LSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAg
ICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzcGFuOwotI2Vsc2UKLSAgICBhdHRyaWJ1dGUgbG9u
ZyBzcGFuOwotI2VuZGlmCiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdkFsaWdu
OwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdpZHRoOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsCmluZGV4IGIwYzhjYzEuLmE1YTlh
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbApAQCAt
MjksMTMgKzI5LDggQEAgaW50ZXJmYWNlIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBIVE1MRWxlbWVu
dCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgcGxhY2Vob2xkZXI7CiAgICAg
W1JlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIHJlYWRPbmx5OwogICAgIFtSZWZsZWN0XSBhdHRy
aWJ1dGUgYm9vbGVhbiByZXF1aXJlZDsKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYm
IExBTkdVQUdFX0dPQkpFQ1QKLSAgICBhdHRyaWJ1dGUgbG9uZyByb3dzOwotICAgIGF0dHJpYnV0
ZSBsb25nIGNvbHM7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHJvd3M7CiAg
ICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgY29sczsKLSNlbmRpZgogICAgIFtSZWZsZWN0XSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHdyYXA7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmlkbAppbmRleCBm
ZTFhOTJkLi4yNjFmM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5p
ZGwKQEAgLTUyLDEyICs1Miw5IEBACiAgICAgLy8gVGhlIG51bWJlciBvZiBkZWNvZGVkIGZyYW1l
cyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGJ5IHRoZSBwbGF5ZXIgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMgZHVyaW5nIHBsYXliYWNrLgogICAgIFtDb25kaXRpb25hbD1NRURJQV9TVEFUSVNUSUNT
XSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB3ZWJraXREcm9wcGVkRnJhbWVDb3Vu
dDsKIAotICAgIC8vIFdvcmsgYXJvdW5kIHNob3J0Y29taW5ncyBpbiB0aGUgZ29iamVjdCBiaW5k
aW5nIGdlbmVyYXRvciBoYW5kbGluZyBvZiBjb25kaXRpb25hbCBmZWF0dXJlcyBieSB0dXJuaW5n
IHRoZXNlIG9mZiBmb3IgZ29iamVjdC4KLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkg
JiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJFU0VOVEFUSU9O
X01PREVdIGJvb2xlYW4gd2Via2l0U3VwcG9ydHNQcmVzZW50YXRpb25Nb2RlKFZpZGVvUHJlc2Vu
dGF0aW9uTW9kZSBtb2RlKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJFU0VOVEFUSU9OX01P
REVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBWaWRlb1ByZXNlbnRhdGlvbk1vZGUgd2Via2l0UHJlc2Vu
dGF0aW9uTW9kZTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJFU0VOVEFUSU9OX01PREVdIHZv
aWQgd2Via2l0U2V0UHJlc2VudGF0aW9uTW9kZShWaWRlb1ByZXNlbnRhdGlvbk1vZGUgbW9kZSk7
Ci0jZW5kaWYKIH07CiAKIFtDb25kaXRpb25hbD1WSURFT19QUkVTRU5UQVRJT05fTU9ERV0gZW51
bSBWaWRlb1ByZXNlbnRhdGlvbk1vZGUgeyAiZnVsbHNjcmVlbiIsICJwaWN0dXJlLWluLXBpY3R1
cmUiLCAiaW5saW5lIiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURh
dGEuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaWRsCmluZGV4IDIxNTAxMjcu
LjlhMGFlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5pZGwKQEAgLTM2LDcgKzM2LDQgQEAK
IF0gaW50ZXJmYWNlIEltYWdlRGF0YSB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgd2lk
dGg7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaGVpZ2h0OwotI2lmIGRlZmluZWQoTEFO
R1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBVaW50OENsYW1wZWRBcnJheSBkYXRhOwotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9VUkxVdGlscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFV0aWxz
LmlkbAppbmRleCAyNzA4YmNkLi5lYzg1ODcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1VSTFV0aWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFV0aWxzLmlkbApA
QCAtMjYsOSArMjYsNyBAQAogW05vSW50ZXJmYWNlT2JqZWN0XSBpbnRlcmZhY2UgVVJMVXRpbHMg
ewogICAgIFtTZXR0ZXJSYWlzZXNFeGNlcHRpb24sIFVSTF0gYXR0cmlidXRlIFVTVlN0cmluZyBo
cmVmOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCiAgICAgW05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgVVNWU3RyaW5nIG9yaWdpbjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suaWRsCmluZGV4IGI3ODAzNmEuLjAwMDgxNDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5pZGwKQEAgLTQ5LDExICs0OSw4IEBAIGVudW0g
VGV4dFRyYWNrS2luZCB7ICJzdWJ0aXRsZXMiLCAiY2FwdGlvbnMiLCAiZGVzY3JpcHRpb25zIiwg
ImNoYXB0ZXJzIiwgIm1ldGFkCiAKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uY3VlY2hh
bmdlOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCi0gICAgLy8gV29yayBhcm91bmQgc2hvcnRjb21pbmdzIGluIHRoZSBnb2JqZWN0IGJpbmRp
bmcgZ2VuZXJhdG9yIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGZlYXR1cmVzIGJ5IHR1cm5pbmcg
dGhlc2Ugb2ZmIGZvciBnb2JqZWN0LgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBWVFRSZWdpb25M
aXN0IHJlZ2lvbnM7CiAgICAgLy8gRklYTUU6IHJlZ2lvbiBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBi
ZSBudWxsYWJsZSBpbiBhZGRSZWdpb24gYW5kIHJlbW92ZVJlZ2lvbi4KICAgICB2b2lkIGFkZFJl
Z2lvbihWVFRSZWdpb24/IHJlZ2lvbik7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCByZW1v
dmVSZWdpb24oVlRUUmVnaW9uPyByZWdpb24pOwotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uaWRsCmluZGV4IDc5OWI3ZDUuLjc2MTkzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5pZGwKQEAgLTU0LDkgKzU0LDcgQEAKICAgICB2b2lkIHJlbW92ZUFsbFJh
bmdlcygpOwogICAgIHZvaWQgYWRkUmFuZ2UoUmFuZ2UgcmFuZ2UpOwogCi0jaWYgIShkZWZpbmVk
KExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW05vdEVudW1lcmFi
bGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHR5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBjY2U3
YmQwLi4wMTgyMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC02OCw5ICs2OCw3
IEBACiAKICAgICBbQ3VzdG9tXSBhbnkgc2hvd01vZGFsRGlhbG9nKERPTVN0cmluZyB1cmwsIG9w
dGlvbmFsIGFueSBkaWFsb2dBcmdzLCBvcHRpb25hbCBET01TdHJpbmcgZmVhdHVyZUFyZ3MpOwog
Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAg
ICAgdm9pZCBhbGVydCgpOwotI2VuZGlmCiAgICAgdm9pZCBhbGVydChET01TdHJpbmcgbWVzc2Fn
ZSk7CiAgICAgYm9vbGVhbiBjb25maXJtKG9wdGlvbmFsIERPTVN0cmluZyBtZXNzYWdlID0gIiIp
OwogICAgIERPTVN0cmluZz8gcHJvbXB0KG9wdGlvbmFsIERPTVN0cmluZyBtZXNzYWdlID0gIiIs
IG9wdGlvbmFsIERPTVN0cmluZyBkZWZhdWx0VmFsdWUgPSAiIik7CkBAIC0xMDMsMTEgKzEwMSw5
IEBACiAgICAgdm9pZCBzY3JvbGxUbyh1bnJlc3RyaWN0ZWQgZG91YmxlIHgsIHVucmVzdHJpY3Rl
ZCBkb3VibGUgeSk7CiAgICAgW0ltcGxlbWVudGVkQXM9c2Nyb2xsVG9dIHZvaWQgc2Nyb2xsKHVu
cmVzdHJpY3RlZCBkb3VibGUgeCwgdW5yZXN0cmljdGVkIGRvdWJsZSB5KTsKIAotI2lmICEoZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIHZvaWQgc2Ny
b2xsQnkob3B0aW9uYWwgU2Nyb2xsVG9PcHRpb25zIG9wdGlvbik7CiAgICAgdm9pZCBzY3JvbGxU
byhvcHRpb25hbCBTY3JvbGxUb09wdGlvbnMgb3B0aW9ucyk7CiAgICAgW0ltcGxlbWVudGVkQXM9
c2Nyb2xsVG9dIHZvaWQgc2Nyb2xsKG9wdGlvbmFsIFNjcm9sbFRvT3B0aW9ucyBvcHRpb25zKTsK
LSNlbmRpZgogCiAgICAgdm9pZCBtb3ZlQnkob3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IHgg
PSBOYU4sIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCB5ID0gTmFOKTsgLy8gRklYTUU6IHRo
aXMgc2hvdWxkIHRha2UgbG9uZ3Mgbm90IGZsb2F0cy4KICAgICB2b2lkIG1vdmVUbyhvcHRpb25h
bCB1bnJlc3RyaWN0ZWQgZmxvYXQgeCA9IE5hTiwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0
IHkgPSBOYU4pOyAvLyBGSVhNRTogdGhpcyBzaG91bGQgdGFrZSBsb25ncyBub3QgZmxvYXRzLgpA
QCAtMTIyLDEwICsxMTgsOCBAQAogCiAgICAgYXR0cmlidXRlIERPTVN0cmluZyBzdGF0dXM7CiAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyBkZWZhdWx0U3RhdHVzOwotI2lmICEoZGVmaW5lZChMQU5H
VUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIC8vIFRoaXMgYXR0cmlidXRl
IGlzIGFuIGFsaWFzIG9mIGRlZmF1bHRTdGF0dXMgYW5kIGlzIG5lY2Vzc2FyeSBmb3IgbGVnYWN5
IHVzZXMuCiAgICAgW0ltcGxlbWVudGVkQXM9ZGVmYXVsdFN0YXR1c10gYXR0cmlidXRlIERPTVN0
cmluZyBkZWZhdWx0c3RhdHVzOwotI2VuZGlmCiAKICAgICAvLyBTZWxmIHJlZmVyZW50aWFsIGF0
dHJpYnV0ZXMKICAgICBbUmVwbGFjZWFibGUsIERvTm90Q2hlY2tTZWN1cml0eU9uR2V0dGVyXSBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NV2luZG93IHNlbGY7CkBAIC0xNDcsMTUgKzE0MSwxMSBAQAog
CiAgICAgLy8gRE9NIExldmVsIDIgU3R5bGUgSW50ZXJmYWNlCiAgICAgW05ld09iamVjdF0gQ1NT
U3R5bGVEZWNsYXJhdGlvbiBnZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQgZWxlbWVudCwgb3B0aW9u
YWwgRE9NU3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0gbnVsbCk7Ci0jaWYgIShkZWZpbmVkKExBTkdV
QUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgLy8gRklYTUU6IERyb3AgdGhp
cyBvdmVybG9hZCBvbmNlIDxyZGFyOi8vcHJvYmxlbS8yODAxNjc3OD4gaGFzIGJlZW4gZml4ZWQu
CiAgICAgW05ld09iamVjdCwgUmFpc2VzRXhjZXB0aW9uXSBDU1NTdHlsZURlY2xhcmF0aW9uIGdl
dENvbXB1dGVkU3R5bGUoRG9jdW1lbnQgZG9jdW1lbnQsIG9wdGlvbmFsIERPTVN0cmluZz8gcHNl
dWRvRWxlbWVudCA9IG51bGwpOwotI2VuZGlmCiAKICAgICAvLyBXZWJLaXQgZXh0ZW5zaW9ucwot
I2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAg
IENTU1J1bGVMaXN0IGdldE1hdGNoZWRDU1NSdWxlcyhvcHRpb25hbCBFbGVtZW50PyBlbGVtZW50
ID0gbnVsbCwgb3B0aW9uYWwgRE9NU3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0gbnVsbCk7Ci0jZW5k
aWYKIAogICAgIFtSZXBsYWNlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIHVucmVzdHJpY3RlZCBk
b3VibGUgZGV2aWNlUGl4ZWxSYXRpbzsKICAgICAKQEAgLTE3NSwxMSArMTY1LDcgQEAKICAgICBb
Q29uZGl0aW9uYWw9T1JJRU5UQVRJT05fRVZFTlRTXSByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBv
cmllbnRhdGlvbjsKIAogICAgIC8vIGNyb3NzLWRvY3VtZW50IG1lc3NhZ2luZwotI2lmICEoZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtEb05vdENo
ZWNrU2VjdXJpdHksIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uLCBGb3J3YXJkRGVjbGFyZUluSGVh
ZGVyXSB2b2lkIHBvc3RNZXNzYWdlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBtZXNzYWdlLCBVU1ZT
dHJpbmcgdGFyZ2V0T3JpZ2luLCBvcHRpb25hbCBBcnJheSBtZXNzYWdlUG9ydHMpOwotI2Vsc2UK
LSAgICBbRG9Ob3RDaGVja1NlY3VyaXR5LCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbiwgRm9yd2Fy
ZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBwb3N0TWVzc2FnZShTZXJpYWxpemVkU2NyaXB0VmFsdWUg
bWVzc2FnZSwgb3B0aW9uYWwgTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQsIERPTVN0cmluZyB0YXJn
ZXRPcmlnaW4pOwotI2VuZGlmCiAKICAgICBbQ29uZGl0aW9uYWw9V0VCX1RJTUlORywgUmVwbGFj
ZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBQZXJmb3JtYW5jZSBwZXJmb3JtYW5jZTsKIApAQCAt
MTkyLDcgKzE3OCw2IEBACiAgICAgdm9pZCBjYXB0dXJlRXZlbnRzKC8qaW4gbG9uZyBldmVudEZs
YWdzKi8pOwogICAgIHZvaWQgcmVsZWFzZUV2ZW50cygvKmluIGxvbmcgZXZlbnRGbGFncyovKTsK
IAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQog
ICAgIFtDdXN0b21HZXR0ZXIsIEN1c3RvbUNvbnN0cnVjdG9yXSBhdHRyaWJ1dGUgSFRNTEltYWdl
RWxlbWVudE5hbWVkQ29uc3RydWN0b3IgSW1hZ2U7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRv
cgogICAgIGF0dHJpYnV0ZSBYTUxEb2N1bWVudENvbnN0cnVjdG9yIFNWR0RvY3VtZW50OwogCkBA
IC0yMDAsNyArMTg1LDYgQEAKICAgICBhdHRyaWJ1dGUgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVj
dG9yIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI7IC8vIEZJWE1FOiBBZGQgbWV0cmljcyB0byBkZXRl
cm1pbmUgd2hlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMuCiAKICAgICBbQ29uZGl0aW9uYWw9Q1VTVE9N
X0VMRU1FTlRTLCBFbmFibGVkQXRSdW50aW1lPUN1c3RvbUVsZW1lbnRzLCBJbXBsZW1lbnRlZEFz
PWVuc3VyZUN1c3RvbUVsZW1lbnRSZWdpc3RyeV0gcmVhZG9ubHkgYXR0cmlidXRlIEN1c3RvbUVs
ZW1lbnRSZWdpc3RyeSBjdXN0b21FbGVtZW50czsKLSNlbmRpZgogCiAgICAgLy8gRXZlbnQgSGFu
ZGxlcnMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5pZGwKaW5kZXggNzg3ZTI0Yy4uY2RlZTNh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaWRsCkBAIC0yMCw3ICsyMCw1IEBACiAgKi8K
IAogcGFydGlhbCBpbnRlcmZhY2UgRG9jdW1lbnQgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9H
T0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdT
VkdFbGVtZW50PyByb290RWxlbWVudDsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmlkbAppbmRleCAzOTgzNmI4Li4xMmQ3ZWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaWRs
CkBAIC0zNywxMiArMzcsMTAgQEAKICAgICAvLyBGSVhNRTogVXNpbmcgInVuZGVmaW5lZCIgYXMg
ZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUgaXMgd3JvbmcuCiAgICAgQ1NTVmFsdWUgZ2V0UHJlc2Vu
dGF0aW9uQXR0cmlidXRlKG9wdGlvbmFsIERPTVN0cmluZyBuYW1lID0gInVuZGVmaW5lZCIpOwog
Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAg
ICAgdm9pZCBmb2N1cygpOwogICAgIHZvaWQgYmx1cigpOwogCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZ01hcCBkYXRhc2V0OwotI2VuZGlmCiB9OwogCiBTVkdFbGVtZW50IGltcGxl
bWVudHMgR2xvYmFsRXZlbnRIYW5kbGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFeGNlcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4Y2VwdGlvbi5pZGwK
aW5kZXggNDhlNzhiMS4uZmEwYzExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0V4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4Y2VwdGlvbi5pZGwK
QEAgLTI2LDkgKzI2LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBuYW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1lc3NhZ2U7
CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkK
ICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7Ci0jZW5kaWYKIAogICAg
IC8vIFNWR0V4Y2VwdGlvbkNvZGUKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVkdfV1JPTkdf
VFlQRV9FUlIgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmlkbAppbmRleCAxOWIzNzc1Li5mZGZjYTcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlk
bApAQCAtMzMsMTEgKzMzLDcgQEAKICAgICBFeHBvc2VkPURlZGljYXRlZFdvcmtlciwKICAgICBK
U0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBdIGludGVyZmFjZSBEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZSA6IFdvcmtlckdsb2JhbFNjb3BlIHsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgcG9zdE1lc3NhZ2UoYW55IG1lc3NhZ2UsIG9wdGlvbmFsIEFycmF5IG1lc3NhZ2VQb3J0
cyk7Ci0jZWxzZQotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoRE9NU3Ry
aW5nIG1lc3NhZ2UsIG9wdGlvbmFsIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KTsKLSNlbmRpZgog
CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuaWRsCmluZGV4IDYxNjg1OTguLjIwNDdhODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5pZGwKQEAgLTMxLDExICszMSw3IEBACiBdIGludGVyZmFjZSBXb3JrZXIgOiBFdmVudFRh
cmdldCB7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2U7CiAKLSNpZiAhKGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXplZFNjcmlwdFZhbHVl
IG1lc3NhZ2UsIG9wdGlvbmFsIEFycmF5IG1lc3NhZ2VQb3J0cyk7Ci0jZWxzZQotICAgIFtSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXplZFNjcmlwdFZhbHVlIG1lc3Nh
Z2UsIG9wdGlvbmFsIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KTsKLSNlbmRpZgogCiAgICAgdm9p
ZCB0ZXJtaW5hdGUoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckdsb2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuaWRsCmluZGV4IGQ5OTM4ZWEuLjk4NmEzNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmlkbApAQCAtMzEsOSArMzEsNyBAQAogICAgIEpTTGVn
YWN5UGFyZW50PUpTV29ya2VyR2xvYmFsU2NvcGVCYXNlLAogXSBpbnRlcmZhY2UgV29ya2VyR2xv
YmFsU2NvcGUgOiBFdmVudFRhcmdldCB7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVD
VCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICByZWFkb25seSBhdHRyaWJ1dGUgV29ya2VyR2xv
YmFsU2NvcGUgc2VsZjsKLSNlbmRpZgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBXb3JrZXJMb2Nh
dGlvbiBsb2NhdGlvbjsKICAgICB2b2lkIGNsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEV4Y2VwdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhF
eGNlcHRpb24uaWRsCmluZGV4IDdhODhhNWYuLjRlMDhmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEV4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoRXhjZXB0aW9uLmlkbApAQCAtMzQsOSArMzQsNyBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3Nh
Z2U7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVD
VCkKICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7Ci0jZW5kaWYKIAog
ICAgIC8vIFhQYXRoRXhjZXB0aW9uQ29kZQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElOVkFM
SURfRVhQUkVTU0lPTl9FUlIgPSA1MTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhNmZkM2NlLi40NGViYjdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR09iamVjdCBE
T00gYmluZGluZ3MgdG8gV2ViS2l0MiBsYXllciBhbmQgc3RvcCBhdXRvIGdlbmVyYXRpbmcgdGhl
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNDM4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBh
bGwgR09iamVjdCBiaW5kaW5ncyBjb2RlIHRvIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00uCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NOgorCiAyMDE2LTA4LTMxICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBXSzIgR2FtZXBhZCBwcm92aWRl
ciBvbiBpT1MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDA5ODBmNTUuLjlmNmZlMmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xNSw2ICsxNSw3IEBAIGNvbmZpZ3VyZV9m
aWxlKHdlYmtpdDJndGstd2ViLWV4dGVuc2lvbi5wYy5pbiAke1dlYktpdDJXZWJFeHRlbnNpb25f
UEtHQ09ORklHX0ZJCiAKIGFkZF9kZWZpbml0aW9ucygtREJVSUxESU5HX1dFQktJVCkKIGFkZF9k
ZWZpbml0aW9ucygtRFdFQktJVDJfQ09NUElMQVRJT04pCithZGRfZGVmaW5pdGlvbnMoLURXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkpCiAKIGFkZF9kZWZpbml0aW9ucygtRExJQkVYRUNESVI9
IiR7Q01BS0VfSU5TVEFMTF9GVUxMX0xJQkVYRUNESVJ9IikKIGFkZF9kZWZpbml0aW9ucygtRFBL
R0xJQkVYRUNESVI9IiR7TElCRVhFQ19JTlNUQUxMX0RJUn0iKQpAQCAtMzIxLDYgKzMyMiwxODYg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9Db29raWVzL3Nv
dXAvV2ViQ29va2llTWFuYWdlclNvdXAuY3BwCiAgICAgV2ViUHJvY2Vzcy9Db29raWVzL3NvdXAv
V2ViS2l0U291cENvb2tpZUphclNxbGl0ZS5jcHAKIAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vQ29udmVydFRvVVRGOFN0cmluZy5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0RPTU9iamVjdENhY2hlLmNwcAorICAgIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdEV2ZW50TGlzdGVuZXIuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0Tm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRhYmxlLmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0
aW9uVGltZWxpbmUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01BdHRyLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFjay5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhdHRlcnlNYW5h
Z2VyLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQmxvYi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUNEQVRBU2VjdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24u
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01D
U1NTdHlsZVNoZWV0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQ1NTVmFsdWUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29tbWVudC5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUN1c3RvbS5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUFwcGxpY2F0
aW9uQ2FjaGUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01DU1NOYW1lc3BhY2UuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbi5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlLmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWlt
ZVR5cGVBcnJheS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW4uY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5BcnJheS5j
cHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TVNlbGVjdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTVN0cmluZ0xpc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdNYXAuY3BwCisgICAgV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3QuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhQ3VlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2UuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EZXByZWNhdGVkLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnQu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
b2N1bWVudEFuaW1hdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRU
eXBlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUV2ZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3QuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkLmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZExpc3Qu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01H
ZW9sb2NhdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQXVkaW9FbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxl
bWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxE
TGlzdEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5jcHAKKyAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXZF
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTERvY3VtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0
RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxGb250RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
RnJhbWVTZXRFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudC5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkaW5nRWxl
bWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxIdG1sRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudC5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVsZW1lbnQuY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50
LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTExlZ2VuZEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVl
RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TW9kRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRHcm91cEVs
ZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhF
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFBhcmFtRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQcmVFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByaXZhdGUuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUXVvdGVF
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAorICAgIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50LmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSGlzdG9yeS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZlbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdC5jcHAKKyAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0aW9u
LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TWVkaWFDb250cm9sbGVyLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFFcnJvci5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlM
aXN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVzc2FnZVBvcnQuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50LmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFt
ZWROb2RlTWFwLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTmF2aWdhdG9yLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZS5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVGaWx0ZXIuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2Rl
SXRlcmF0b3IuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Ob2RlTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU9iamVjdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5jcHAKKyAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1h
bmNlTmF2aWdhdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJpdmF0ZS5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVJhbmdlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU2NyZWVuLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAKKyAgICBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2UuY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlSW5mby5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3Jh
Z2VRdW90YS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVN0eWxlTWVkaWEuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrLmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0xpc3QuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVG91Y2guY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmFj
a0V2ZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVHJlZVdhbGtlci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVVJRXZlbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIuY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVlRUQ3VlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5LmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9U
cmFjay5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVZpZGVvVHJhY2tMaXN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NV2ViQW5pbWF0aW9uLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZXNw
YWNlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NV2ViS2l0UG9pbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01XaGVlbEV2ZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uLmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBh
dGhSZXN1bHQuY3BwCisKICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2Vi
S2l0Q29uc29sZU1lc3NhZ2UuY3BwCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL1dlYktpdEZyYW1lLmNwcAogICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9XZWJLaXRTY3JpcHRXb3JsZC5jcHAKQEAgLTQ0OCw2ICs2MjksMzM0IEBAIHNldChXZWJLaXQy
V2ViRXh0ZW5zaW9uX0lOU1RBTExFRF9IRUFERVJTCiAgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmgKICkKIAor
c2V0KFdlYktpdERPTV9JTlNUQUxMRURfSEVBREVSUworICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tYXV0b2NsZWFudXBzLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L3dlYmtpdGRvbWF1dG9jbGVhbnVwcy11bnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21kZWZpbmVzLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGFi
bGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvblRpbWVs
aW5lLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUF0dHIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0clVuc3RhYmxlLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUF1ZGlvVHJhY2suaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJv
cC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUJsb2JVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24uaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ2hhcmFj
dGVyRGF0YS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhVW5zdGFibGUuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29t
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01DU1NSdWxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNTU1J1bGVVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUNTU1N0eWxlU2hlZXQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWUuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3Vz
dG9tLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUN1c3RvbVVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNlLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURhdGFDdWUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGVwcmVjYXRlZC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVu
dEFuaW1hdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3Vt
ZW50RnJhZ21lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudC5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1
bWVudFRpbWVsaW5lLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VHlwZS5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVu
dFR5cGVVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TUFwcGxpY2F0aW9uQ2FjaGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTUltcGxlbWVudGF0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRE9NTWltZVR5cGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01QbHVnaW5BcnJheS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW4uaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9N
U2VsZWN0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ0xpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5n
TWFwLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVRva2VuTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1Vuc3Rh
YmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudFVuc3RhYmxlLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUV2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VW5z
dGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRmlsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlTGlzdC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01G
aWxlVW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkTGlzdC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01HZW9sb2NhdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IaXN0b3J5LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50VW5zdGFibGUuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxBcmVhRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0Vs
ZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQlJFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TENhbnZhc0VsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24uaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TERldGFpbHNFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxEaXZFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTERvY3VtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxF
bGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRVbnN0YWJs
ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFt
ZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
SGVhZEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxIUkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxI
dG1sRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxJRnJhbWVFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50VW5zdGFibGUuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEtleWdlbkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MTGFiZWxFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcEVs
ZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJx
dWVlRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE1lbnVFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MTW9kRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRH
cm91cEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblVuc3Rh
YmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJh
bUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3Rl
RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2Ny
aXB0RWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVu
dC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVS
b3dFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFVuc3Rh
YmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFVMaXN0RWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZl
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9jYXRpb24uaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTWVkaWFDb250cm9sbGVyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNlcy5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01NZWRpYUVycm9yLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5
TGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVzc2FnZVBvcnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2
ZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRv
ci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUZpbHRl
ci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Ob2RlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRvci5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01O
b2RlTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlVW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NT2JqZWN0LmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVBlcmZvcm1hbmNlRW50cnkuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2UuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01SYW5nZVVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNjcmVlbi5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hT
eW50aGVzaXNFdmVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXMuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVN0b3JhZ2UuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZUluZm8uaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3Rv
cmFnZVF1b3RhLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlTWVkaWEuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRl
eHRUcmFja0N1ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRU
cmFjay5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRpbWVSYW5nZXMuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NVG91Y2guaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJhY2tFdmVudC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fs
a2VyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVVJRXZlbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudFVuc3RhYmxlLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVVzZXJNZXNzYWdlSGFuZGxlci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5U3RhdGUuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5
YmFja1F1YWxpdHkuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFjay5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNr
TGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01WVFRDdWUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViQW5pbWF0aW9uLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVdlYktpdE5hbWVkRmxvdy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2UuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NV2ViS2l0UG9pbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2
ZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uLmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRo
TlNSZXNvbHZlci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5oCispCisKK3NldChXZWJLaXRET01f
R1RLRE9DX0hFQURFUlMKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0ci5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01CbG9iLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNEQVRBU2VjdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0
ZXJEYXRhLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUNvbW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZS5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01DU1NSdWxlTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUNTU1N0eWxlU2hlZXQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWUuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3VzdG9tLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURlcHJlY2F0ZWQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRGcmFnbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
b2N1bWVudFR5cGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24uaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9N
V2luZG93LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01F
bGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUV2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUZpbGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01HYW1lcGFkTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEJhc2VFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQlJFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxDYW52YXNFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxEaXJlY3RvcnlFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXZFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxETGlzdEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERvY3VtZW50LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEZpZWxkU2V0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEhlYWRpbmdFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIUkVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEh0bWxFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MTGFiZWxFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50LmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxMSUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxNYXBFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MTWVudUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxNb2RFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxPTGlzdEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFt
RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUXVvdGVF
bGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
VGl0bGVFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5
Ym9hcmRFdmVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01OYW1lZE5vZGVNYXAuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU5vZGVGaWx0ZXIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZS5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2Rl
SXRlcmF0b3IuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NT2JqZWN0LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01T
dG9yYWdlSW5mby5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUXVvdGEuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVl
dC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRyZWVXYWxrZXIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NWFBhdGhSZXN1bHQuaAorKQorCiBzZXQoSW5zcGVjdG9yRmlsZXMKICAgICAke0NN
QUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlLyouaHRt
bAogICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQmFzZS8qLmpzCkBAIC01MjcsNiArMTAzNiw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvbGludXgi
CiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9zb3VwIgogICAgICIke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsiCisgICAgIiR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00iCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS91bml4IgogICAgICIke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUveDExIgogICAgICIke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL2d0ayIKQEAgLTU5MSw3ICsxMTAxLDYgQEAgc2V0KFNoYXJlZFdlYktpdDJMaWJy
YXJpZXMKICkKIAogbGlzdChBUFBFTkQgV2ViS2l0Ml9MSUJSQVJJRVMKLSAgICBHT2JqZWN0RE9N
QmluZGluZ3MKICAgICBXZWJDb3JlUGxhdGZvcm1HVEsKICAgICAke0dUS19VTklYX1BSSU5UX0xJ
QlJBUklFU30KICkKQEAgLTg3NiwxMyArMTM4NSwxMSBAQCBpbmNsdWRlX2RpcmVjdG9yaWVzKAog
ICAgICIke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jIgogICAg
ICIke0RFUklWRURfU09VUkNFU19ESVJ9IgogICAgICIke0RFUklWRURfU09VUkNFU19ESVJ9L0lu
amVjdGVkQnVuZGxlIgotICAgICIke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5H
U19ESVJ9IgogICAgICIke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9IgogICAgICIke0ZPUldBUkRJ
TkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0iCiApCiAKIGFkZF9saWJyYXJ5KHdlYmtpdDJndGtp
bmplY3RlZGJ1bmRsZSBNT0RVTEUgIiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvZ3RrL1dlYkd0
a0luamVjdGVkQnVuZGxlTWFpbi5jcHAiKQotYWRkX2RlcGVuZGVuY2llcyh3ZWJraXQyZ3RraW5q
ZWN0ZWRidW5kbGUgR09iamVjdERPTUJpbmRpbmdzKQogYWRkX3dlYmtpdDJfcHJlZml4X2hlYWRl
cih3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUpCiB0YXJnZXRfbGlua19saWJyYXJpZXMod2Via2l0
Mmd0a2luamVjdGVkYnVuZGxlIFdlYktpdDIpCiAKQEAgLTk5Myw3ICsxNTAwLDcgQEAgYWRkX2N1
c3RvbV9jb21tYW5kKAogICAgICAgICAtSSR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtf
RElSfQogICAgICAgICAtSSR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtfRVhURU5TSU9O
X0RJUn0KICAgICAgICAgLUkke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsKLSAgICAgICAgJHtHT2JqZWN0RE9NQmluZGluZ3NfR0lSX0hFQURFUlN9CisgICAg
ICAgICR7V2ViS2l0RE9NX0lOU1RBTExFRF9IRUFERVJTfQogICAgICAgICAke1dlYktpdDJXZWJF
eHRlbnNpb25fSU5TVEFMTEVEX0hFQURFUlN9CiAgICAgICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmgKICAgICAgICAgJHtXRUJLSVQyX0RJUn0v
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnUuY3BwCkBAIC0xMDMyLDYgKzE1Mzks
OSBAQCBpbnN0YWxsKEZJTEVTICR7V2ViS2l0MkdUS19JTlNUQUxMRURfSEVBREVSU30KICAgICAg
ICAgICAgICAgJHtXZWJLaXQyV2ViRXh0ZW5zaW9uX0lOU1RBTExFRF9IRUFERVJTfQogICAgICAg
ICBERVNUSU5BVElPTiAiJHtXRUJLSVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJraXQyIgog
KQoraW5zdGFsbChGSUxFUyAke1dlYktpdERPTV9JTlNUQUxMRURfSEVBREVSU30KKyAgICAgICAg
REVTVElOQVRJT04gIiR7V0VCS0lUR1RLX0hFQURFUl9JTlNUQUxMX0RJUn0vd2Via2l0ZG9tIgor
KQogCiBpZiAoRU5BQkxFX0lOVFJPU1BFQ1RJT04pCiAgICAgaW5zdGFsbChGSUxFUyAke0NNQUtF
X0JJTkFSWV9ESVJ9L1dlYktpdDItJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059LmdpcgpAQCAtMTA2
MCw2ICsxNTcwLDIwIEBAIGZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfS9ndGtkb2Mtd2Vi
a2l0Mmd0ay5jZmcKICAgICAibWFpbl9zZ21sX2ZpbGU9d2Via2l0Mmd0ay1kb2NzLnNnbWxcbiIK
ICkKIAorZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9L2d0a2RvYy13ZWJraXRkb20uY2Zn
CisgICAgIlt3ZWJraXRkb21ndGstJHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059XVxuIgorICAgICJw
a2djb25maWdfZmlsZT0ke1dlYktpdDJfUEtHQ09ORklHX0ZJTEV9XG4iCisgICAgIm5hbWVzcGFj
ZT13ZWJraXRfZG9tXG4iCisgICAgImNmbGFncz0tSSR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNl
XG4iCisgICAgIiAgICAgICAtSSR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET01cbiIKKyAgICAiICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lU
MkdUS19ESVJ9XG4iCisgICAgIiAgICAgICAtSSR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJH
VEtfRElSfVxuIgorICAgICJkb2NfZGlyPSR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vZG9jc1xuIgorICAgICJzb3VyY2VfZGlycz0ke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NXG4iCisgICAgImhlYWRl
cnM9JHtXZWJLaXRET01fR1RLRE9DX0hFQURFUlN9XG4iCisgICAgIm1haW5fc2dtbF9maWxlPXdl
YmtpdGRvbWd0ay1kb2NzLnNnbWxcbiIKKykKKwogYWRkX2N1c3RvbV90YXJnZXQoV2ViS2l0Mi1m
b3J3YXJkaW5nLWhlYWRlcnMKICAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQktJ
VDJfRElSfS9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbCAtLWluY2x1ZGUt
cGF0aCAke1dFQktJVDJfRElSfSAtLW91dHB1dCAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9IC0t
cGxhdGZvcm0gZ3RrIC0tcGxhdGZvcm0gc291cAogKQpAQCAtMTA3NSw5ICsxNTk5LDE1IEBAIGFk
ZF9jdXN0b21fY29tbWFuZCgKICAgICBERVBFTkRTICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0awogICAgIENPTU1BTkQgbG4gLW4gLXMgLWYgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrICR7Rk9SV0FSRElOR19IRUFE
RVJTX1dFQktJVDJHVEtfRVhURU5TSU9OX0RJUn0vd2Via2l0MgogKQorYWRkX2N1c3RvbV9jb21t
YW5kKAorICAgIE9VVFBVVCAke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lP
Tl9ESVJ9L3dlYmtpdGRvbQorICAgIERFUEVORFMgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTQorICAgIENPTU1BTkQgbG4gLW4gLXMgLWYgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTSAke0ZPUldBUkRJ
TkdfSEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lPTl9ESVJ9L3dlYmtpdGRvbQorKQogYWRkX2N1
c3RvbV90YXJnZXQoV2ViS2l0Mi1mYWtlLWFwaS1oZWFkZXJzCiAgICAgREVQRU5EUyAke0ZPUldB
UkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0RJUn0vd2Via2l0MgogICAgICAgICAgICAgJHtGT1JX
QVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19FWFRFTlNJT05fRElSfS93ZWJraXQyCisgICAgICAg
ICAgICAke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lPTl9ESVJ9L3dlYmtp
dGRvbQogKQogCiBzZXQoV0VCS0lUMl9FWFRSQV9ERVBFTkRFTkNJRVMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0NvbnZl
cnRUb1VURjhTdHJpbmcuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5jcHAKcmVuYW1l
IHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
Q29udmVydFRvVVRGOFN0cmluZy5jcHAKaW5kZXggMWFhZjI4Ny4uYjVlMTY1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgogCi0jaW5jbHVkZSAi
VVJMLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9Db252ZXJ0
VG9VVEY4U3RyaW5nLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oCnJlbmFtZSB0byBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0NvbnZl
cnRUb1VURjhTdHJpbmcuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9ET01PYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL0RPTU9iamVjdENhY2hlLmNwcApzaW1pbGFyaXR5IGluZGV4
IDk3JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVj
dENhY2hlLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9ET01PYmplY3RDYWNoZS5jcHAKaW5kZXggMzU1NGY2My4uMGU3OTBm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RD
YWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9ET01PYmplY3RDYWNoZS5jcHAKQEAgLTE5LDExICsxOSwxMSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAKLSNpbmNsdWRlICJE
T01XaW5kb3dQcm9wZXJ0eS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9ET01XaW5kb3dQcm9wZXJ0eS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L05vZGUuaD4KICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0RPTU9iamVjdENhY2hlLmgK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9ET01PYmplY3RDYWNoZS5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIu
Y3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL0dPYmplY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCBmMmVkOTMyLi44ODE0YTVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL0dPYmplY3RFdmVudExpc3RlbmVyLmNwcApAQCAtMTksMTMgKzE5LDE1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIu
aCIKIAotI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnQuaCIKICNp
bmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFRhcmdldC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnQuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdPYmplY3RFdmVudExpc3RlbmVyOjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcihHT2JqZWN0KiB0YXJnZXQsIEV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0LCBjb25z
dCBjaGFyKiBkb21FdmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIGNhcHR1cmUpCiAg
ICAgOiBFdmVudExpc3RlbmVyKEdPYmplY3RFdmVudExpc3RlbmVyVHlwZSkKQEAgLTg2LDQgKzg4
LDQgQEAgYm9vbCBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBFdmVudExp
c3RlbmVyJiBsaXN0ZW5lcikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLX0KK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCnNpbWlsYXJp
dHkgaW5kZXggNjklCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
R09iamVjdEV2ZW50TGlzdGVuZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0RXZlbnRMaXN0ZW5lci5oCmluZGV4
IDIwNmJiZDcuLjM4YWQ3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3RFdmVudExpc3RlbmVyLmgKQEAg
LTE2LDExICsxNiwxMCBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKLSNpZm5k
ZWYgR09iamVjdEV2ZW50TGlzdGVuZXJfaAotI2RlZmluZSBHT2JqZWN0RXZlbnRMaXN0ZW5lcl9o
CisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRMaXN0ZW5lci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXZlbnRUYXJnZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
QEAgLTI4LDE4ICsyNywxOCBAQAogdHlwZWRlZiBzdHJ1Y3QgX0dPYmplY3QgR09iamVjdDsKIHR5
cGVkZWYgc3RydWN0IF9HQ2xvc3VyZSBHQ2xvc3VyZTsKIAotbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEdPYmplY3RFdmVudExpc3RlbmVyIDogcHVibGlj
IEV2ZW50TGlzdGVuZXIgeworY2xhc3MgR09iamVjdEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgV2Vi
Q29yZTo6RXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6CiAKLSAgICBzdGF0aWMgYm9vbCBhZGRFdmVu
dExpc3RlbmVyKEdPYmplY3QqIHRhcmdldCwgRXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQsIGNvbnN0
IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkK
KyAgICBzdGF0aWMgYm9vbCBhZGRFdmVudExpc3RlbmVyKEdPYmplY3QqIHRhcmdldCwgV2ViQ29y
ZTo6RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkKICAgICB7CiAgICAgICAgIFJlZjxHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIoYWRvcHRSZWYoKm5ldyBHT2JqZWN0RXZlbnRMaXN0
ZW5lcih0YXJnZXQsIGNvcmVUYXJnZXQsIGRvbUV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSkpKTsKICAgICAgICAgcmV0dXJuIGNvcmVUYXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZl
bnROYW1lLCBXVEZNb3ZlKGxpc3RlbmVyKSwgdXNlQ2FwdHVyZSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiB0YXJnZXQsIEV2ZW50VGFyZ2V0
KiBjb3JlVGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBib29sIHVzZUNhcHR1cmUpCisgICAgc3RhdGljIGJvb2wgcmVtb3ZlRXZlbnRMaXN0ZW5lcihH
T2JqZWN0KiB0YXJnZXQsIFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0LCBjb25zdCBj
aGFyKiBkb21FdmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCiAg
ICAgewogICAgICAgICBHT2JqZWN0RXZlbnRMaXN0ZW5lciBrZXkodGFyZ2V0LCBjb3JlVGFyZ2V0
LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwogICAgICAgICByZXR1cm4gY29y
ZVRhcmdldC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGtleSwgdXNlQ2FwdHVy
ZSk7CkBAIC01MCwzMCArNDksMzAgQEAgcHVibGljOgogICAgICAgICBsaXN0ZW5lci0+Z29iamVj
dERlc3Ryb3llZCgpOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBHT2JqZWN0RXZlbnRMaXN0
ZW5lciogY2FzdChjb25zdCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKKyAgICBzdGF0aWMgY29u
c3QgR09iamVjdEV2ZW50TGlzdGVuZXIqIGNhc3QoY29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIpCiAgICAgewogICAgICAgICByZXR1cm4gbGlzdGVuZXItPnR5cGUoKSA9PSBH
T2JqZWN0RXZlbnRMaXN0ZW5lclR5cGUKICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8Y29uc3Qg
R09iamVjdEV2ZW50TGlzdGVuZXIqPihsaXN0ZW5lcikKLSAgICAgICAgICAgIDogMDsKKyAgICAg
ICAgICAgIDogbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZl
bnRMaXN0ZW5lciYgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyJiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6Ci0gICAgR09iamVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCosIEV2ZW50VGFyZ2V0Kiwg
Y29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2xvc3VyZSosIGJvb2wgY2FwdHVyZSk7CisgICAg
R09iamVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCosIFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiwgY29u
c3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2xvc3VyZSosIGJvb2wgY2FwdHVyZSk7CiAgICAgfkdP
YmplY3RFdmVudExpc3RlbmVyKCk7CiAgICAgdm9pZCBnb2JqZWN0RGVzdHJveWVkKCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50
Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJDb3JlOjpFdmVudCopOwogCiAgICAgR09iamVjdCogbV90YXJnZXQ7CiAg
ICAgLy8gV2UgZG8gbm90IG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgbV9jb3JlVGFy
Z2V0LCBiZWNhdXNlCiAgICAgLy8gd2Ugb25seSB1c2UgaXQgd2hlbiB0aGUgR09iamVjdCBhbmQg
dGh1cyB0aGUgbV9jb3JlVGFyZ2V0IG9iamVjdCBpcyBhbGl2ZS4KLSAgICBFdmVudFRhcmdldCog
bV9jb3JlVGFyZ2V0OworICAgIFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiBtX2NvcmVUYXJnZXQ7CiAg
ICAgQ1N0cmluZyBtX2RvbUV2ZW50TmFtZTsKICAgICBHUmVmUHRyPEdDbG9zdXJlPiBtX2hhbmRs
ZXI7CiAgICAgYm9vbCBtX2NhcHR1cmU7CiB9OwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdE5v
ZGVGaWx0ZXJDb25kaXRpb24uY3BwCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAppbmRleCBlMGFiYjdjLi40
M2VhMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmpl
Y3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cApAQCAtMTksMTAgKzE5LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR09i
amVjdE5vZGVGaWx0ZXJDb25kaXRpb24uaCIKIAotI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNp
bmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm9kZUZp
bHRlci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uOjp+R09i
amVjdE5vZGVGaWx0ZXJDb25kaXRpb24oKQogewpAQCAtMzYsNCArMzgsNCBAQCBzaG9ydCBHT2Jq
ZWN0Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdAogICAg
IHJldHVybiB3ZWJraXRfZG9tX25vZGVfZmlsdGVyX2FjY2VwdF9ub2RlKG1fZmlsdGVyLmdldCgp
LCBXZWJLaXQ6OmtpdChub2RlKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlv
bi5oCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24uaApyZW5hbWUgdG8gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0Tm9k
ZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IDhiZTJjNzguLjFlZDFjN2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAgLTE2LDE4ICsxNiwxOSBAQAogICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKLSNpZm5kZWYgR09iamVjdE5vZGVGaWx0ZXJD
b25kaXRpb25faAotI2RlZmluZSBHT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbl9oCi0KLSNpbmNs
dWRlICJOb2RlRmlsdGVyQ29uZGl0aW9uLmgiCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldl
YktpdERPTU5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05vZGVGaWx0ZXJDb25kaXRp
b24uaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIE5vZGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBHT2JqZWN0
Tm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBOb2RlRmlsdGVyQ29uZGl0aW9uIHsKK2NsYXNz
IEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIFdlYkNvcmU6Ok5vZGVGaWx0ZXJD
b25kaXRpb24gewogcHVibGljOgogCiAgICAgc3RhdGljIFJlZjxHT2JqZWN0Tm9kZUZpbHRlckNv
bmRpdGlvbj4gY3JlYXRlKFdlYktpdERPTU5vZGVGaWx0ZXIqIGZpbHRlcikKQEAgLTM1LDcgKzM2
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHT2JqZWN0Tm9kZUZp
bHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKICAgICB9CiAKLSAgICBzaG9ydCBhY2NlcHROb2RlKE5v
ZGUqKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaG9ydCBhY2NlcHROb2RlKFdlYkNvcmU6Ok5vZGUq
KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBHT2JqZWN0Tm9kZUZpbHRlckNvbmRp
dGlvbihXZWJLaXRET01Ob2RlRmlsdGVyKiBmaWx0ZXIpCkBAIC00Nyw2ICs0OCw0IEBAIHByaXZh
dGU6CiAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2RlRmlsdGVyPiBtX2ZpbHRlcjsKIH07CiAKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0
aW9uX2gKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdFhQYXRoTlNS
ZXNvbHZlci5jcHAKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmNwcApyZW5hbWUgdG8g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2Jq
ZWN0WFBhdGhOU1Jlc29sdmVyLmNwcAppbmRleCAzMmZhZjQxLi5hNGRmODJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vR09iamVjdFhQYXRoTlNSZXNvbHZlci5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBXZWJLaXQgewogCiBHT2JqZWN0WFBh
dGhOU1Jlc29sdmVyOjp+R09iamVjdFhQYXRoTlNSZXNvbHZlcigpCiB7CkBAIC0zMyw0ICszMyw0
IEBAIFN0cmluZyBHT2JqZWN0WFBhdGhOU1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkoY29u
c3QgU3RyaW5nJiBwcmVmaXgpCiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgod2Via2l0X2Rv
bV94cGF0aF9uc19yZXNvbHZlcl9sb29rdXBfbmFtZXNwYWNlX3VyaShtX3Jlc29sdmVyLmdldCgp
LCBwcmVmaXgudXRmOCgpLmRhdGEoKSkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmgK
c2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdFhQYXRoTlNSZXNv
bHZlci5oCmluZGV4IGJlMTM0YzEuLjNlNWNjNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdFhQYXRo
TlNSZXNvbHZlci5oCkBAIC0xNiwxNiArMTYsMTUgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKICAqLwogCi0jaWZuZGVmIEdPYmplY3RYUGF0aE5TUmVzb2x2ZXJfaAotI2RlZmluZSBHT2Jq
ZWN0WFBhdGhOU1Jlc29sdmVyX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2ViS2l0RE9N
WFBhdGhOU1Jlc29sdmVyLmgiCi0jaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9YUGF0aE5TUmVzb2x2ZXIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBH
T2JqZWN0WFBhdGhOU1Jlc29sdmVyIDogcHVibGljIFhQYXRoTlNSZXNvbHZlciB7CitjbGFzcyBH
T2JqZWN0WFBhdGhOU1Jlc29sdmVyIDogcHVibGljIFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlciB7
CiBwdWJsaWM6CiAKICAgICBzdGF0aWMgUmVmPEdPYmplY3RYUGF0aE5TUmVzb2x2ZXI+IGNyZWF0
ZShXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyKQpAQCAtNDUsNiArNDQsNCBAQCBw
cml2YXRlOgogICAgIEdSZWZQdHI8V2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyPiBtX3Jlc29sdmVy
OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR09iamVjdFhQYXRo
TlNSZXNvbHZlcl9oCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5p
bWF0YWJsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjY0MTBkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGFibGUu
Y3BwCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3Qg
dG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NQW5pbWF0YWJsZS5oIGFuZAorICAg
IFdlYktpdERPTUFuaW1hdGFibGUuY3BwIGFyZSBjcmVhdGVkIGZvciBBbmltYXRhYmxlLmlkbCwg
YW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdl
bmVyYXRlIFdlYktpdERPTUFuaW1hdGFibGUuaCBhbmQKKyAgICBXZWJLaXRET01BbmltYXRhYmxl
LmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBp
bGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGFibGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDEwZGI4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01BbmltYXRhYmxlLmgKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMg
ZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBXZWJLaXRE
T01BbmltYXRhYmxlLmggYW5kCisgICAgV2ViS2l0RE9NQW5pbWF0YWJsZS5jcHAgYXJlIGNyZWF0
ZWQgZm9yIEFuaW1hdGFibGUuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNj
cmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NQW5pbWF0YWJsZS5oIGFuZAor
ICAgIFdlYktpdERPTUFuaW1hdGFibGUuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVz
dCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlv
bkVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOTViY2M4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0
aW9uRWZmZWN0LmNwcApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUFuaW1hdGlv
bkVmZmVjdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9BTklNQVRJT05fRUZGRUNUX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9F
RkZFQ1QsIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlIHsKKyNpZiBFTkFCTEUoV0VCX0FOSU1B
VElPTlMpCisgICAgUmVmUHRyPFdlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdD4gY29yZU9iamVjdDsK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCit9IFdlYktpdERPTUFuaW1hdGlvbkVm
ZmVjdFByaXZhdGU7CisKKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01BbmltYXRpb25FZmZlY3QqIGtpdChXZWJDb3JlOjpBbmltYXRp
b25FZmZlY3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9BTklNQVRJT05fRUZGRUNUKHJldCk7CisKKyAgICByZXR1cm4gd3Jh
cEFuaW1hdGlvbkVmZmVjdChvYmopOworfQorCitXZWJDb3JlOjpBbmltYXRpb25FZmZlY3QqIGNv
cmUoV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QW5pbWF0aW9uRWZmZWN0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQW5pbWF0aW9u
RWZmZWN0KiB3cmFwQW5pbWF0aW9uRWZmZWN0KFdlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdCogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fQU5JTUFUSU9OX0VGRkVDVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElP
Tl9FRkZFQ1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LCB3ZWJraXRfZG9tX2FuaW1h
dGlvbl9lZmZlY3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fYW5pbWF0aW9uX2VmZmVjdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQU5JTUFU
SU9OX0VGRkVDVF9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9O
UykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIHByaXYtPn5XZWJL
aXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV9hbmltYXRpb25fZWZmZWN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9
CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2FuaW1hdGlvbl9lZmZlY3RfY29uc3RydWN0
b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29u
c3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0
ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hbmltYXRpb25fZWZmZWN0X3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIFdlYktpdERPTUFu
aW1hdGlvbkVmZmVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FOSU1BVElPTl9FRkZFQ1Rf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6QW5pbWF0aW9uRWZmZWN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAg
IHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYW5pbWF0aW9uX2Vm
ZmVjdF9jbGFzc19pbml0KFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdENsYXNzKiByZXF1ZXN0Q2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3Ms
IHNpemVvZihXZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlKSk7CisgICAgZ29iamVjdENs
YXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fYW5pbWF0aW9uX2VmZmVjdF9jb25zdHJ1Y3Rv
cjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9hbmltYXRpb25fZWZm
ZWN0X2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2FuaW1hdGlvbl9lZmZl
Y3RfaW5pdChXZWJLaXRET01BbmltYXRpb25FZmZlY3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0
RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQU5JTUFUSU9OX0VG
RkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUFuaW1h
dGlvbkVmZmVjdFByaXZhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NSW50ZXJmYWNlTmFtZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01BbmltYXRpb25FZmZlY3QuaApzaW1pbGFyaXR5IGluZGV4IDU1JQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01JbnRlcmZh
Y2VOYW1lLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LmgKaW5kZXggZGRjYjU1Zi4u
ZDAyODM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NSW50ZXJmYWNlTmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uRWZm
ZWN0LmgKQEAgLTE4LDggKzE4LDggQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqLwogCi0jaWZuZGVmIFdlYktpdERPTUludGVyZmFjZU5hbWVfaAotI2RlZmluZSBXZWJLaXRE
T01JbnRlcmZhY2VOYW1lX2gKKyNpZm5kZWYgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0X2gKIAogI2lmZGVmIFdFQktJVF9ET01fVVNF
X1VOU1RBQkxFX0FQSQogCkBAIC0yOSwyNSArMjksMjUgQEAKIAogR19CRUdJTl9ERUNMUwogCi0j
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSAgICAgICAgICAgICh3ZWJraXRf
ZG9tX2ludGVyZmFjZV9uYW1lX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fSU5URVJG
QUNFX05BTUUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0lOVEVSRkFDRV9OQU1FLCBXZWJLaXRET01JbnRlcmZhY2VOYW1l
KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JTlRFUkZBQ0VfTkFNRV9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNF
X05BTUUsIFdlYktpdERPTUludGVyZmFjZU5hbWVDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9J
U19JTlRFUkZBQ0VfTkFNRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNFX05BTUUpKQotI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0lOVEVSRkFDRV9OQU1FX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSkpCi0jZGVmaW5lIFdF
QktJVF9ET01fSU5URVJGQUNFX05BTUVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0lOVEVSRkFDRV9OQU1FLCBXZWJLaXRE
T01JbnRlcmZhY2VOYW1lQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9O
X0VGRkVDVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2FuaW1hdGlvbl9lZmZlY3RfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BTklNQVRJT05fRUZGRUNUKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BTklNQVRJ
T05fRUZGRUNULCBXZWJLaXRET01BbmltYXRpb25FZmZlY3QpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0FOSU1BVElPTl9FRkZFQ1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9FRkZFQ1QsIFdlYktpdERPTUFu
aW1hdGlvbkVmZmVjdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0FOSU1BVElPTl9FRkZF
Q1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0FOSU1BVElPTl9FRkZFQ1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0FOSU1B
VElPTl9FRkZFQ1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9FRkZFQ1QpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0FOSU1BVElPTl9FRkZFQ1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9FRkZFQ1QsIFdlYktpdERPTUFu
aW1hdGlvbkVmZmVjdENsYXNzKSkKIAotc3RydWN0IF9XZWJLaXRET01JbnRlcmZhY2VOYW1lIHsK
K3N0cnVjdCBfV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0IHsKICAgICBXZWJLaXRET01PYmplY3Qg
cGFyZW50X2luc3RhbmNlOwogfTsKIAotc3RydWN0IF9XZWJLaXRET01JbnRlcmZhY2VOYW1lQ2xh
c3Mgeworc3RydWN0IF9XZWJLaXRET01BbmltYXRpb25FZmZlY3RDbGFzcyB7CiAgICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Vi
a2l0X2RvbV9pbnRlcmZhY2VfbmFtZV9nZXRfdHlwZSh2b2lkKTsKK3dlYmtpdF9kb21fYW5pbWF0
aW9uX2VmZmVjdF9nZXRfdHlwZSh2b2lkKTsKIAogR19FTkRfREVDTFMKIAogI2VuZGlmIC8qIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTUludGVyZmFj
ZU5hbWVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uRWZm
ZWN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMjgzNDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGUuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01BbmltYXRpb25F
ZmZlY3RQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9uRWZmZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdC5oPgorI2lmIEVOQUJM
RShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01BbmltYXRp
b25FZmZlY3QqIHdyYXBBbmltYXRpb25FZmZlY3QoV2ViQ29yZTo6QW5pbWF0aW9uRWZmZWN0Kik7
CitXZWJLaXRET01BbmltYXRpb25FZmZlY3QqIGtpdChXZWJDb3JlOjpBbmltYXRpb25FZmZlY3Qq
KTsKK1dlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdCogY29yZShXZWJLaXRET01BbmltYXRpb25FZmZl
Y3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFdFQl9BTklN
QVRJT05TKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0
aW9uVGltZWxpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNmJl
YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lLmNwcApAQCAtMCww
ICsxLDExMCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lLmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9E
T01fQU5JTUFUSU9OX1RJTUVMSU5FX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9USU1FTElORSwgV2ViS2l0
RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
QW5pbWF0aW9uVGltZWxpbmVQcml2YXRlIHsKKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisg
ICAgUmVmUHRyPFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lPiBjb3JlT2JqZWN0OworI2VuZGlm
IC8vIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKK30gV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQ
cml2YXRlOworCisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUqIGtpdChXZWJDb3JlOjpBbmltYXRpb25U
aW1lbGluZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORShyZXQpOworCisgICAgcmV0dXJuIHdy
YXBBbmltYXRpb25UaW1lbGluZShvYmopOworfQorCitXZWJDb3JlOjpBbmltYXRpb25UaW1lbGlu
ZSogY29yZShXZWJLaXRET01BbmltYXRpb25UaW1lbGluZSogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9N
QW5pbWF0aW9uVGltZWxpbmUqIHdyYXBBbmltYXRpb25UaW1lbGluZShXZWJDb3JlOjpBbmltYXRp
b25UaW1lbGluZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fQU5JTUFUSU9OX1RJTUVMSU5FKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfQU5JTUFUSU9OX1RJTUVMSU5FLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BTklNQVRJT05TKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUFuaW1hdGlvblRpbWVs
aW5lLCB3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fQU5JTUFUSU9OX1RJTUVMSU5FX0dFVF9QUklWQVRFKG9iamVj
dCk7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FOSU1BVElPTlMpCisgICAgcHJpdi0+fldlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0
ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYW5pbWF0aW9uX3RpbWVsaW5lX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJr
aXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0
UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBl
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVO
QUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORV9HRVRfUFJJVkFURShvYmpl
Y3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBbmltYXRp
b25UaW1lbGluZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmpl
Y3QpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9jbGFzc19p
bml0KFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdl
YktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29u
c3RydWN0b3IgPSB3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVf
ZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYW5pbWF0aW9uX3RpbWVsaW5l
X2luaXQoV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0
RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BTklNQVRJT05f
VElNRUxJTkVfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01B
bmltYXRpb25UaW1lbGluZVByaXZhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUuaApzaW1pbGFyaXR5IGluZGV4IDUyJQpy
ZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvblRp
bWVsaW5lLmgKaW5kZXggNWU0ZTk2ZC4uOTI0MDJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lLmgKQEAgLTE4LDggKzE4LDggQEAK
ICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERP
TVRlc3ROYW1lZENvbnN0cnVjdG9yX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3JfaAorI2lmbmRlZiBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZV9oCisjZGVmaW5lIFdl
YktpdERPTUFuaW1hdGlvblRpbWVsaW5lX2gKIAogI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSQogCkBAIC0yOSwyNSArMjksMjUgQEAKIAogR19CRUdJTl9ERUNMUwogCi0jZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9URVNUX05BTUVEX0NPTlNUUlVDVE9SICAgICAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTkFNRURfQ09OU1RSVUNU
T1IsIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX05BTUVEX0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX05BTUVEX0NPTlNUUlVDVE9SLCBX
ZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvckNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lT
X1RFU1RfTkFNRURfQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IpKQot
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfTkFNRURfQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
TkFNRURfQ09OU1RSVUNUT1IpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTkFNRURfQ09OU1RS
VUNUT1JfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsIFdlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX1RJ
TUVMSU5FICAgICAgICAgICAgKHdlYmtpdF9kb21fYW5pbWF0aW9uX3RpbWVsaW5lX2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ET01fQU5JTUFUSU9OX1RJTUVMSU5FKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BTklN
QVRJT05fVElNRUxJTkUsIFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9BTklNQVRJT05fVElNRUxJTkVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9USU1FTElORSwg
V2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19B
TklNQVRJT05fVElNRUxJTkUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9USU1FTElORSkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfQU5JTUFUSU9OX1RJTUVMSU5FX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fVElNRUxJTkUp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORV9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQU5JTUFU
SU9OX1RJTUVMSU5FLCBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZUNsYXNzKSkKIAotc3RydWN0
IF9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvciB7CitzdHJ1Y3QgX1dlYktpdERPTUFuaW1h
dGlvblRpbWVsaW5lIHsKICAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwogfTsK
IAotc3RydWN0IF9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvckNsYXNzIHsKK3N0cnVjdCBf
V2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVDbGFzcyB7CiAgICAgV2ViS2l0RE9NT2JqZWN0Q2xh
c3MgcGFyZW50X2NsYXNzOwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0
X25hbWVkX2NvbnN0cnVjdG9yX2dldF90eXBlKHZvaWQpOword2Via2l0X2RvbV9hbmltYXRpb25f
dGltZWxpbmVfZ2V0X3R5cGUodm9pZCk7CiAKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0TmFtZWRD
b25zdHJ1Y3Rvcl9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5p
bWF0aW9uVGltZWxpbmVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzBiYjQ4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2
YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Bbmlt
YXRpb25UaW1lbGluZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01BbmltYXRpb25U
aW1lbGluZS5oPgorI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNlIFdlYktp
dCB7CitXZWJLaXRET01BbmltYXRpb25UaW1lbGluZSogd3JhcEFuaW1hdGlvblRpbWVsaW5lKFdl
YkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKik7CitXZWJLaXRET01BbmltYXRpb25UaW1lbGluZSog
a2l0KFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKik7CitXZWJDb3JlOjpBbmltYXRpb25UaW1l
bGluZSogY29yZShXZWJLaXRET01BbmltYXRpb25UaW1lbGluZSopOworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpICovCisKKyNlbmRpZiAv
KiBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01BdHRyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQXR0ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjhlNjFlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0ci5jcHAKQEAgLTAsMCAr
MSwzMzUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01BdHRyLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdP
YmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01BdHRyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQXR0clVuc3RhYmxl
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUF0dHIqIGtpdChXZWJDb3JlOjpBdHRyKiBv
YmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQVRUUihraXQoc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6QXR0ciogY29yZShXZWJLaXRET01BdHRy
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
QXR0cio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTUF0dHIqIHdyYXBBdHRyKFdlYkNvcmU6OkF0dHIqIGNvcmVPYmplY3QpCit7Cisg
ICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9BVFRSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9hdHRyX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3Jl
RXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpBdHRyKiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXR0cio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdz
KCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fYXR0cl9hZGRfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpBdHRy
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXR0cio+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQs
IGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2F0dHJfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29s
ZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6QXR0ciogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkF0dHIqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5k
aXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fYXR0cl9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFj
ZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9hdHRyX2FkZF9ldmVudF9saXN0ZW5l
cjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9hdHRyX3Jl
bW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0
RE9NQXR0ciwgd2Via2l0X2RvbV9hdHRyLCBXRUJLSVRfRE9NX1RZUEVfTk9ERSwgR19JTVBMRU1F
TlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OQU1FLAor
ICAgIFBST1BfU1BFQ0lGSUVELAorICAgIFBST1BfVkFMVUUsCisgICAgUFJPUF9PV05FUl9FTEVN
RU5ULAorICAgIFBST1BfSVNfSUQsCisgICAgUFJPUF9OQU1FU1BBQ0VfVVJJLAorICAgIFBST1Bf
UFJFRklYLAorICAgIFBST1BfTE9DQUxfTkFNRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fYXR0cl9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01B
dHRyKiBzZWxmID0gV0VCS0lUX0RPTV9BVFRSKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIHdlYmtpdF9kb21fYXR0cl9z
ZXRfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F0dHJfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NQXR0ciogc2VsZiA9IFdFQktJVF9ET01fQVRUUihvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRfbmFt
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUEVDSUZJRUQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRfc3BlY2lm
aWVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F0dHJfZ2V0X3ZhbHVlKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09XTkVSX0VMRU1FTlQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dldF9vd25lcl9l
bGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lTX0lEOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2F0dHJfZ2V0X2lzX2lk
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUVTUEFDRV9VUkk6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRfbmFt
ZXNwYWNlX3VyaShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUkVGSVg6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRf
cHJlZml4KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPQ0FMX05BTUU6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRf
bG9jYWxfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2F0dHJfY2xhc3NfaW5pdChXZWJLaXRET01BdHRyQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2F0dHJfc2V0
X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9h
dHRyX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkF0dHI6
bmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBBdHRyOm5hbWUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9TUEVDSUZJRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAg
ICAgICAgICAgInNwZWNpZmllZCIsCisgICAgICAgICAgICAiQXR0cjpzcGVjaWZpZWQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBBdHRyOnNwZWNpZmllZCIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInZhbHVlIiwKKyAgICAgICAgICAgICJBdHRyOnZhbHVlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBBdHRyOnZhbHVlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09XTkVSX0VMRU1F
TlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAib3duZXItZWxl
bWVudCIsCisgICAgICAgICAgICAiQXR0cjpvd25lci1lbGVtZW50IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCogQXR0cjpvd25lci1lbGVtZW50IiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSVNfSUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgImlzLWlkIiwKKyAgICAgICAgICAgICJBdHRyOmlzLWlk
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gQXR0cjppcy1pZCIsCisgICAgICAg
ICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX05BTUVTUEFDRV9VUkksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAibmFtZXNwYWNlLXVyaSIsCisgICAgICAgICAgICAiQXR0cjpuYW1lc3Bh
Y2UtdXJpIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEF0dHI6bmFtZXNwYWNlLXVy
aSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1BSRUZJWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJwcmVmaXgiLAorICAgICAgICAgICAgIkF0dHI6cHJlZml4IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEF0dHI6cHJlZml4IiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTE9DQUxfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJsb2NhbC1uYW1lIiwKKyAgICAgICAgICAgICJBdHRyOmxvY2FsLW5hbWUiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogQXR0cjpsb2NhbC1uYW1lIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9hdHRyX2luaXQoV2ViS2l0RE9NQXR0ciogcmVxdWVzdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2F0dHJfZ2V0X25hbWUo
V2ViS2l0RE9NQXR0ciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdHRyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9hdHRyX2dldF9zcGVj
aWZpZWQoV2ViS2l0RE9NQXR0ciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19B
VFRSKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6QXR0ciogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zcGVjaWZpZWQoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9hdHRyX2dldF92YWx1ZShXZWJL
aXRET01BdHRyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkF0dHIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsdWVGb3JCaW5kaW5n
cygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fYXR0cl9zZXRf
dmFsdWUoV2ViS2l0RE9NQXR0ciogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6
QXR0ciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VmFs
dWVGb3JCaW5kaW5ncyhjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdl
YmtpdF9kb21fYXR0cl9nZXRfb3duZXJfZWxlbWVudChXZWJLaXRET01BdHRyKiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkF0
dHIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1l
bnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5vd25lckVsZW1lbnQoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX2F0dHJfZ2V0X2lzX2lkKFdlYktpdERPTUF0dHIqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfQVRUUihzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkF0
dHIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+aXNJZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2F0
dHJfZ2V0X25hbWVzcGFjZV91cmkoV2ViS2l0RE9NQXR0ciogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19BVFRSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdHRyKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPm5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hh
ciogd2Via2l0X2RvbV9hdHRyX2dldF9wcmVmaXgoV2ViS2l0RE9NQXR0ciogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdHRy
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPnByZWZpeCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Y2hhciogd2Via2l0X2RvbV9hdHRyX2dldF9sb2NhbF9uYW1lKFdlYktpdERPTUF0dHIqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVRUUihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6QXR0ciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5sb2NhbE5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTgxOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01BdHRyLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlM
RElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUF0dHJfaAor
I2RlZmluZSBXZWJLaXRET01BdHRyX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9U
WVBFX0FUVFIgICAgICAgICAgICAod2Via2l0X2RvbV9hdHRyX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fQVRUUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQVRUUiwgV2ViS2l0RE9NQXR0cikpCisjZGVmaW5l
IFdFQktJVF9ET01fQVRUUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQVRUUiwgV2ViS2l0RE9NQXR0ckNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0FUVFIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FUVFIpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0FUVFJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0FUVFIpKQorI2RlZmluZSBXRUJLSVRfRE9NX0FUVFJfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X0FUVFIsIFdlYktpdERPTUF0dHJDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQXR0ciB7Cisg
ICAgV2ViS2l0RE9NTm9kZSBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TUF0dHJDbGFzcyB7CisgICAgV2ViS2l0RE9NTm9kZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fYXR0cl9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2F0dHJfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0
cgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2F0dHJfZ2V0X25hbWUoV2ViS2l0RE9NQXR0ciogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9hdHRyX2dldF9zcGVjaWZpZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0cgor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21fYXR0cl9nZXRfc3BlY2lmaWVkKFdlYktpdERPTUF0dHIqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fYXR0cl9nZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0
cgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2F0dHJfZ2V0X3ZhbHVlKFdlYktpdERPTUF0dHIqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fYXR0cl9zZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0cgorICog
QHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fYXR0cl9zZXRfdmFsdWUoV2ViS2l0RE9NQXR0ciogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9h
dHRyX2dldF9vd25lcl9lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUF0dHIKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9hdHRyX2dldF9vd25lcl9lbGVt
ZW50KFdlYktpdERPTUF0dHIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fYXR0cl9nZXRf
bmFtZXNwYWNlX3VyaToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdHRyCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTaW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9hdHRyX2dldF9uYW1lc3BhY2VfdXJpKFdlYktpdERPTUF0dHIqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fYXR0cl9nZXRfcHJlZml4OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUF0dHIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFNpbmNlOiAyLjE0Cisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2F0dHJfZ2V0X3ByZWZpeChXZWJLaXRE
T01BdHRyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F0dHJfZ2V0X2xvY2FsX25hbWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0cgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisg
KgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fYXR0
cl9nZXRfbG9jYWxfbmFtZShXZWJLaXRET01BdHRyKiBzZWxmKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdlYktpdERPTUF0dHJfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9ialByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQXR0clByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2Jq
UHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHJQcml2YXRlLmgKaW5kZXggNmUzNmE2ZS4uZDBl
Yzg4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9ialByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHJQcml2YXRlLmgK
QEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICov
CiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE9ialByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01U
ZXN0T2JqUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUF0dHJQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NQXR0clByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdE9iai5oIgotI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01UZXN0T2JqLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9BdHRyLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUF0dHIuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7Ci1XZWJLaXRET01UZXN0T2JqKiB3cmFwVGVzdE9iaihXZWJDb3JlOjpUZXN0T2JqKik7Ci1X
ZWJLaXRET01UZXN0T2JqKiBraXQoV2ViQ29yZTo6VGVzdE9iaiopOwotV2ViQ29yZTo6VGVzdE9i
aiogY29yZShXZWJLaXRET01UZXN0T2JqKik7CitXZWJLaXRET01BdHRyKiB3cmFwQXR0cihXZWJD
b3JlOjpBdHRyKik7CitXZWJLaXRET01BdHRyKiBraXQoV2ViQ29yZTo6QXR0ciopOworV2ViQ29y
ZTo6QXR0ciogY29yZShXZWJLaXRET01BdHRyKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAot
I2VuZGlmIC8qIFdlYktpdERPTVRlc3RPYmpQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRE
T01BdHRyUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHJVbnN0YWJsZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01BdHRyVW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2M5
NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyVW5zdGFibGUuaApAQCAtMCwwICsxLDQ1
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUF0
dHJVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUF0dHJVbnN0YWJsZV9oCisKKyNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2F0dHJfZ2V0X2lzX2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF0dHIKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9hdHRyX2dldF9pc19pZChXZWJLaXRET01BdHRy
KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NQXR0clVuc3RhYmxlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQXVkaW9UcmFjay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2suY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NTU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUF1ZGlvVHJhY2suY3BwCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQXVk
aW9UcmFjay5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVm
aW5lIFdFQktJVF9ET01fQVVESU9fVFJBQ0tfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0ssIFdlYktpdERP
TUF1ZGlvVHJhY2tQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFj
a1ByaXZhdGUgeworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBSZWZQdHI8V2ViQ29yZTo6
QXVkaW9UcmFjaz4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9
IFdlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQXVkaW9UcmFjayoga2l0KFdlYkNvcmU6
OkF1ZGlvVHJhY2sqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9BVURJT19UUkFDSyhyZXQpOworCisgICAgcmV0dXJuIHdyYXBB
dWRpb1RyYWNrKG9iaik7Cit9CisKK1dlYkNvcmU6OkF1ZGlvVHJhY2sqIGNvcmUoV2ViS2l0RE9N
QXVkaW9UcmFjayogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkF1ZGlvVHJhY2sqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9i
amVjdCkgOiAwOworfQorCitXZWJLaXRET01BdWRpb1RyYWNrKiB3cmFwQXVkaW9UcmFjayhXZWJD
b3JlOjpBdWRpb1RyYWNrKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV0VCS0lUX0RPTV9BVURJT19UUkFDSyhnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0FVRElPX1RSQUNLLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RS
QUNLKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUF1ZGlvVHJhY2ssIHdlYmtpdF9kb21fYXVk
aW9fdHJhY2ssIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX0lELAorICAgIFBST1BfS0lORCwKKyAgICBQUk9QX0xBQkVMLAorICAgIFBST1Bf
TEFOR1VBR0UsCisgICAgUFJPUF9FTkFCTEVELAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9hdWRpb190cmFja19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9N
QXVkaW9UcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0dFVF9QUklW
QVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgcHJpdi0+fldlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hdWRpb190cmFja19wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F1ZGlvX3Ry
YWNrX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUF1ZGlv
VHJhY2sqIHNlbGYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRU5BQkxFRDoKKyAgICAgICAgd2Via2l0
X2RvbV9hdWRpb190cmFja19zZXRfZW5hYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNr
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUF1ZGlvVHJhY2sqIHNl
bGYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfSUQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2lkKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0tJTkQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2tpbmQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTEFCRUw6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2xhYmVsKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0xBTkdVQUdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9sYW5ndWFnZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkFCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9lbmFibGVkKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0RE9NQXVk
aW9UcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0dFVF9QUklWQVRF
KG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkF1
ZGlvVHJhY2sqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0
KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcmV0dXJuIG9iamVjdDsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdWRpb190cmFja19jbGFzc19pbml0KFdlYktpdERP
TUF1ZGlvVHJhY2tDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQXVkaW9UcmFja1By
aXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9hdWRp
b190cmFja19jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV9hdWRpb190cmFja19maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiaWQiLAorICAgICAgICAgICAgIkF1ZGlvVHJhY2s6aWQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBnY2hhciogQXVkaW9UcmFjazppZCIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0tJTkQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAia2luZCIsCisgICAg
ICAgICAgICAiQXVkaW9UcmFjazpraW5kIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IEF1ZGlvVHJhY2s6a2luZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBQkVMLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxhYmVsIiwKKyAgICAgICAgICAgICJBdWRp
b1RyYWNrOmxhYmVsIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEF1ZGlvVHJhY2s6
bGFiZWwiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQU5HVUFHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJsYW5ndWFnZSIsCisgICAgICAgICAgICAiQXVkaW9UcmFj
azpsYW5ndWFnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBBdWRpb1RyYWNrOmxh
bmd1YWdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5BQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oCisgICAgICAgICAgICAiZW5hYmxlZCIsCisgICAgICAgICAgICAiQXVkaW9UcmFj
azplbmFibGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEF1ZGlvVHJhY2s6
ZW5hYmxlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2lu
aXQoV2ViS2l0RE9NQXVkaW9UcmFjayogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01BdWRpb1Ry
YWNrUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQVVESU9fVFJBQ0tfR0VUX1BSSVZBVEUocmVx
dWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZSgpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfaWQoV2ViS2l0RE9NQXVkaW9UcmFj
ayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfQVVESU9fVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OkF1ZGlvVHJhY2sqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+aWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0sp
ICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9raW5kKFdlYktpdERP
TUF1ZGlvVHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0FVRElPX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdWRp
b1RyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmtpbmQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUo
VklERU9fVFJBQ0spICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9s
YWJlbChXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVURJT19UUkFDSyhzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6QXVkaW9UcmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5sYWJlbCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2Vu
ZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fYXVk
aW9fdHJhY2tfZ2V0X2xhbmd1YWdlKFdlYktpdERPTUF1ZGlvVHJhY2sqIHNlbGYpCit7CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FVRElPX1RSQUNL
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdWRpb1RyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxh
bmd1YWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIp
CisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9lbmFibGVkKFdlYktpdERPTUF1ZGlv
VHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0FVRElPX1RSQUNLKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6QXVkaW9U
cmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5lbmFibGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVO
QUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX3Nl
dF9lbmFibGVkKFdlYktpdERPTUF1ZGlvVHJhY2sqIHNlbGYsIGdib29sZWFuIHZhbHVlKQorewor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0FVRElPX1RSQUNL
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpBdWRpb1RyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPnNldEVuYWJsZWQodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RS
QUNLKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2suaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9U
cmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2FjZTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2suaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01BdWRpb1RyYWNrX2gK
KyNkZWZpbmUgV2ViS2l0RE9NQXVkaW9UcmFja19oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfQVVESU9fVFJBQ0sgICAgICAgICAgICAod2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFD
SywgV2ViS2l0RE9NQXVkaW9UcmFjaykpCisjZGVmaW5lIFdFQktJVF9ET01fQVVESU9fVFJBQ0tf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX0FVRElPX1RSQUNLLCBXZWJLaXRET01BdWRpb1RyYWNrQ2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0sob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19BVURJT19UUkFDS19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0spKQorI2RlZmluZSBX
RUJLSVRfRE9NX0FVRElPX1RSQUNLX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDSywgV2ViS2l0RE9NQXVk
aW9UcmFja0NsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01BdWRpb1RyYWNrIHsKKyAgICBXZWJL
aXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01BdWRp
b1RyYWNrQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X3R5cGUodm9p
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfaWQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NQXVkaW9UcmFjaworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9h
dWRpb190cmFja19nZXRfaWQoV2ViS2l0RE9NQXVkaW9UcmFjayogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfa2luZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01B
dWRpb1RyYWNrCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dl
dF9raW5kKFdlYktpdERPTUF1ZGlvVHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
YXVkaW9fdHJhY2tfZ2V0X2xhYmVsOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2sK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2xhYmVsKFdl
YktpdERPTUF1ZGlvVHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJh
Y2tfZ2V0X2xhbmd1YWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2sKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2xhbmd1YWdlKFdlYktp
dERPTUF1ZGlvVHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tf
Z2V0X2VuYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXVkaW9UcmFjaworICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9lbmFibGVkKFdlYktp
dERPTUF1ZGlvVHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tf
c2V0X2VuYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXVkaW9UcmFjaworICogQHZhbHVl
OiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX3NldF9lbmFibGVkKFdlYktpdERPTUF1ZGlv
VHJhY2sqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUF1ZGlv
VHJhY2tfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1
ZGlvVHJhY2tMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTJi
ZWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrTGlzdC5jcHAKQEAgLTAsMCAr
MSwyNTUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01BdWRpb1RyYWNrTGlzdC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQXVkaW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdl
dC5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUo
b2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQVVE
SU9fVFJBQ0tfTElTVCwgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2YXRlKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgUmVmUHRyPFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0PiBjb3JlT2JqZWN0
OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30gV2ViS2l0RE9NQXVkaW9UcmFja0xp
c3RQcml2YXRlOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QqIGtpdChXZWJDb3JlOjpBdWRpb1RyYWNrTGlz
dCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwQXVkaW9U
cmFja0xpc3Qob2JqKTsKK30KKworV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqIGNvcmUoV2ViS2l0
RE9NQXVkaW9UcmFja0xpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiB3cmFw
QXVkaW9UcmFja0xpc3QoV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqIGNvcmVPYmplY3QpCit7Cisg
ICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0FVRElPX1RSQUNL
X0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDS19MSVNULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQg
PSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdz
KCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50
KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9hdWRpb190
cmFja19saXN0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VD
YXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpBdWRpb1Ry
YWNrTGlzdCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7
CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJl
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTSho
YW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2F1ZGlvX3RyYWNrX2xpc3RfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01BdWRpb1Ry
YWNrTGlzdCwgd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0LCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tf
bGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NQXVkaW9UcmFj
a0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BVURJT19UUkFDS19MSVNUX0dFVF9QUklW
QVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgcHJpdi0+fldlYktpdERPTUF1ZGlvVHJhY2tMaXN0UHJpdmF0
ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2F1ZGlvX3RyYWNrX2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NQXVkaW9UcmFja0xpc3QqIHNlbGYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJU1Qob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6
CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNr
X2xpc3RfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCog
d2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBl
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja0xpc3Qq
PihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRP
TU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NQXVk
aW9UcmFja0xpc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQXVkaW9UcmFja0xp
c3RQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21f
YXVkaW9fdHJhY2tfbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXpl
ID0gd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2dldF9wcm9wZXJ0
eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9u
ZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkF1ZGlvVHJhY2tMaXN0Omxl
bmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBBdWRpb1RyYWNrTGlzdDpsZW5n
dGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJh
Y2tfbGlzdF9pbml0KFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiByZXF1ZXN0KQoreworICAgIFdl
YktpdERPTUF1ZGlvVHJhY2tMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQVVESU9fVFJB
Q0tfTElTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUF1
ZGlvVHJhY2tMaXN0UHJpdmF0ZSgpOworfQorCitXZWJLaXRET01BdWRpb1RyYWNrKiB3ZWJraXRf
ZG9tX2F1ZGlvX3RyYWNrX2xpc3RfaXRlbShXZWJLaXRET01BdWRpb1RyYWNrTGlzdCogc2VsZiwg
Z3Vsb25nIGluZGV4KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19BVURJT19UUkFDS19MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdWRp
b1RyYWNrTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6QXVkaW9UcmFjaz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5k
ZXgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK1dlYktpdERPTUF1
ZGlvVHJhY2sqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9nZXRfdHJhY2tfYnlfaWQoV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBpZCkKK3sKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0tfTElT
VChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaWQsIDApOworICAgIFdlYkNv
cmU6OkF1ZGlvVHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZElkID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGlkKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6QXVkaW9UcmFjaz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmdldFRyYWNrQnlJZChjb252ZXJ0ZWRJZCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVO
VVNFRF9QQVJBTShpZCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykg
Ki8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9nZXRfbGVuZ3RoKFdl
YktpdERPTUF1ZGlvVHJhY2tMaXN0KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVURJT19UUkFDS19MSVNUKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigw
KTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQXVkaW9UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY3ZWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01B
dWRpb1RyYWNrTGlzdC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RfaAorI2RlZmluZSBXZWJL
aXRET01BdWRpb1RyYWNrTGlzdF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3Rh
YmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQVVESU9f
VFJBQ0tfTElTVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVURJT19UUkFDS19MSVNUKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BVURJ
T19UUkFDS19MSVNULCBXZWJLaXRET01BdWRpb1RyYWNrTGlzdCkpCisjZGVmaW5lIFdFQktJVF9E
T01fQVVESU9fVFJBQ0tfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0tfTElTVCwgV2ViS2l0RE9N
QXVkaW9UcmFja0xpc3RDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19BVURJT19UUkFDS19M
SVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9BVURJT19UUkFDS19MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19BVURJ
T19UUkFDS19MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDS19MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9BVURJT19UUkFDS19MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDS19MSVNULCBXZWJLaXRET01B
dWRpb1RyYWNrTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01BdWRpb1RyYWNrTGlzdCB7
CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9hdWRpb190cmFj
a19saXN0X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tf
bGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0CisgKiBAaW5k
ZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NQXVkaW9UcmFjaworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01BdWRpb1RyYWNrKgord2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2l0ZW0o
V2ViS2l0RE9NQXVkaW9UcmFja0xpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2dldF90cmFja19ieV9pZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01BdWRpb1RyYWNrTGlzdAorICogQGlkOiBBICNnY2hhcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQXVkaW9UcmFjaworICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01BdWRpb1RyYWNrKgord2Vi
a2l0X2RvbV9hdWRpb190cmFja19saXN0X2dldF90cmFja19ieV9pZChXZWJLaXRET01BdWRpb1Ry
YWNrTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIGlkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F1
ZGlvX3RyYWNrX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdWRpb1Ry
YWNrTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlz
dF9nZXRfbGVuZ3RoKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBzZWxmKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8q
IFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFj
a0xpc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjM2FjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUF1ZGlvVHJhY2tMaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvQXVkaW9UcmFja0xpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
QXVkaW9UcmFja0xpc3QuaD4KKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QqIHdyYXBBdWRpb1RyYWNrTGlzdChXZWJD
b3JlOjpBdWRpb1RyYWNrTGlzdCopOworV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QqIGtpdChXZWJD
b3JlOjpBdWRpb1RyYWNrTGlzdCopOworV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqIGNvcmUoV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
LyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NQXVkaW9UcmFj
a0xpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja1ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQXVkaW9UcmFja1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45ZTAwY2YxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NQXVkaW9UcmFja1ByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01BdWRpb1Ry
YWNrUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvVHJhY2suaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NQXVkaW9UcmFjay5oPgorI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01BdWRpb1RyYWNrKiB3cmFwQXVkaW9U
cmFjayhXZWJDb3JlOjpBdWRpb1RyYWNrKik7CitXZWJLaXRET01BdWRpb1RyYWNrKiBraXQoV2Vi
Q29yZTo6QXVkaW9UcmFjayopOworV2ViQ29yZTo6QXVkaW9UcmFjayogY29yZShXZWJLaXRET01B
dWRpb1RyYWNrKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShW
SURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhclByb3AuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTFlYzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUJhclByb3AuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQmFy
UHJvcC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUJhclByb3BQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdF
QktJVF9ET01fQkFSX1BST1BfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AsIFdlYktpdERPTUJhclByb3BQcml2
YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQmFyUHJvcFByaXZhdGUgeworICAgIFJl
ZlB0cjxXZWJDb3JlOjpCYXJQcm9wPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01CYXJQcm9wUHJp
dmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUJhclByb3AqIGtpdChXZWJD
b3JlOjpCYXJQcm9wKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fQkFSX1BST1AocmV0KTsKKworICAgIHJldHVybiB3cmFwQmFy
UHJvcChvYmopOworfQorCitXZWJDb3JlOjpCYXJQcm9wKiBjb3JlKFdlYktpdERPTUJhclByb3Aq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpC
YXJQcm9wKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30K
KworV2ViS2l0RE9NQmFyUHJvcCogd3JhcEJhclByb3AoV2ViQ29yZTo6QmFyUHJvcCogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
QkFSX1BST1AoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01CYXJQcm9wLCB3ZWJraXRfZG9tX2Jhcl9wcm9wLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9W
SVNJQkxFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9iYXJfcHJvcF9maW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NQmFyUHJvcFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX0JBUl9QUk9QX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRP
TU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2
LT5+V2ViS2l0RE9NQmFyUHJvcFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX2Jhcl9wcm9wX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NQmFyUHJvcCogc2VsZiA9IFdFQktJVF9ET01fQkFSX1BST1Aob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9WSVNJQkxFOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2Jhcl9wcm9wX2dldF92
aXNpYmxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9t
X2Jhcl9wcm9wX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQorewor
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYmFyX3Byb3Bf
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTUJhclByb3BQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9CQVJfUFJPUF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYt
PmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYXJQcm9wKj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Jhcl9wcm9wX2NsYXNzX2luaXQoV2ViS2l0
RE9NQmFyUHJvcENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01CYXJQcm9wUHJpdmF0
ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2Jhcl9wcm9w
X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2Jh
cl9wcm9wX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9iYXJfcHJvcF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVklTSUJMRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAidmlzaWJsZSIsCisg
ICAgICAgICAgICAiQmFyUHJvcDp2aXNpYmxlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jv
b2xlYW4gQmFyUHJvcDp2aXNpYmxlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9i
YXJfcHJvcF9pbml0KFdlYktpdERPTUJhclByb3AqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9N
QmFyUHJvcFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0JBUl9QUk9QX0dFVF9QUklWQVRFKHJl
cXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NQmFyUHJvcFByaXZhdGUoKTsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0X2RvbV9iYXJfcHJvcF9nZXRfdmlzaWJsZShXZWJLaXRET01CYXJQcm9w
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0JBUl9QUk9QKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6QmFyUHJvcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT52aXNpYmxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXJQcm9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhclByb3AuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjAyMDM4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01CYXJQcm9wLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01CYXJQcm9wX2gKKyNkZWZpbmUgV2ViS2l0RE9NQmFy
UHJvcF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AgICAgICAgICAgICAo
d2Via2l0X2RvbV9iYXJfcHJvcF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0JBUl9Q
Uk9QKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9CQVJfUFJPUCwgV2ViS2l0RE9NQmFyUHJvcCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fQkFSX1BST1BfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLCBXZWJLaXRET01CYXJQcm9wQ2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfQkFSX1BST1Aob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19CQVJfUFJPUF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1ApKQorI2RlZmluZSBXRUJL
SVRfRE9NX0JBUl9QUk9QX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCwgV2ViS2l0RE9NQmFyUHJvcENsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01CYXJQcm9wIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFy
ZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01CYXJQcm9wQ2xhc3MgeworICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0
X2RvbV9iYXJfcHJvcF9nZXRfdmlzaWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01CYXJQcm9w
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3Zpc2li
bGUoV2ViS2l0RE9NQmFyUHJvcCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01CYXJQcm9w
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3ROb2RlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXJQcm9wUHJpdmF0ZS5o
CnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlUHJpdmF0ZS5oCnJlbmFtZSB0
byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUJhclByb3BQcml2YXRlLmgKaW5kZXggZjQ5YmE1ZC4uNTllZWQ2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5vZGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXJQcm9wUHJpdmF0ZS5oCkBAIC0xOCwxNiAr
MTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVm
IFdlYktpdERPTVRlc3ROb2RlUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3ROb2RlUHJp
dmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUJhclByb3BQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NQmFyUHJvcFByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdE5vZGUuaCIKLSNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NVGVzdE5vZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0JhclByb3Au
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQmFyUHJvcC5oPgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKLVdlYktpdERPTVRlc3ROb2RlKiB3cmFwVGVzdE5vZGUoV2ViQ29yZTo6VGVzdE5v
ZGUqKTsKLVdlYktpdERPTVRlc3ROb2RlKiBraXQoV2ViQ29yZTo6VGVzdE5vZGUqKTsKLVdlYkNv
cmU6OlRlc3ROb2RlKiBjb3JlKFdlYktpdERPTVRlc3ROb2RlKik7CitXZWJLaXRET01CYXJQcm9w
KiB3cmFwQmFyUHJvcChXZWJDb3JlOjpCYXJQcm9wKik7CitXZWJLaXRET01CYXJQcm9wKiBraXQo
V2ViQ29yZTo6QmFyUHJvcCopOworV2ViQ29yZTo6QmFyUHJvcCogY29yZShXZWJLaXRET01CYXJQ
cm9wKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RO
b2RlUHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NQmFyUHJvcFByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhdHRlcnlNYW5hZ2Vy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2UyZGQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlci5jcHAKQEAgLTAsMCArMSwzMDcgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01CYXR0ZXJ5TWFuYWdlci5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJ
bXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2Jq
ZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRU
YXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVy
dFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9CQVRURVJZX01BTkFHRVJfR0VUX1BSSVZB
VEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVf
QkFUVEVSWV9NQU5BR0VSLCBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUgeworI2lmIEVOQUJMRShC
QVRURVJZX1NUQVRVUykKKyAgICBSZWZQdHI8V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI+IGNvcmVP
YmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorfSBXZWJLaXRET01CYXR0
ZXJ5TWFuYWdlclByaXZhdGU7CisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcioga2l0KFdlYkNvcmU6OkJh
dHRlcnlNYW5hZ2VyKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fQkFUVEVSWV9NQU5BR0VSKHJldCk7CisKKyAgICByZXR1cm4g
d3JhcEJhdHRlcnlNYW5hZ2VyKG9iaik7Cit9CisKK1dlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKiBj
b3JlKFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01CYXR0ZXJ5TWFu
YWdlciogd3JhcEJhdHRlcnlNYW5hZ2VyKFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKiBjb3JlT2Jq
ZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9C
QVRURVJZX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9CQVRURVJZX01BTkFH
RVIsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9kaXNwYXRjaF9ldmVudChXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioq
IGVycm9yKQoreworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBXZWJDb3JlOjpFdmVu
dCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZl
bnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJCYXR0ZXJ5IFN0YXR1cyIpCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykK
KyAgICBXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlciogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkJhdHRlcnlNYW5hZ2VyKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVO
VVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJCYXR0ZXJ5IFN0YXR1cyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJM
RShCQVRURVJZX1NUQVRVUykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fYmF0dGVy
eV9tYW5hZ2VyX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBXZWJDb3JlOjpC
YXR0ZXJ5TWFuYWdlciogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhdHRlcnlN
YW5hZ2VyKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2
ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1
c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJCYXR0ZXJ5
IFN0YXR1cyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NU
QVRVUykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJL
aXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZl
bnQgPSB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFj
ZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfYWRkX2V2
ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2JhdHRlcnlfbWFuYWdlcl9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5F
X1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyLCB3ZWJraXRfZG9tX2JhdHRl
cnlfbWFuYWdlciwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJGQUNF
KFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DSEFSR0lORywKKyAgICBQUk9Q
X0NIQVJHSU5HX1RJTUUsCisgICAgUFJPUF9ESVNDSEFSR0lOR19USU1FLAorICAgIFBST1BfTEVW
RUwsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9CQVRURVJZX01BTkFHRVJfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZ
X1NUQVRVUykKKyAgICBwcml2LT5+V2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlKCk7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9iYXR0ZXJ5
X21hbmFnZXJfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NQmF0dGVy
eU1hbmFnZXIqIHNlbGYgPSBXRUJLSVRfRE9NX0JBVFRFUllfTUFOQUdFUihvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NIQVJHSU5HOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9n
ZXRfY2hhcmdpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hBUkdJ
TkdfVElNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2Jh
dHRlcnlfbWFuYWdlcl9nZXRfY2hhcmdpbmdfdGltZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9ESVNDSEFSR0lOR19USU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3Vi
bGUodmFsdWUsIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9kaXNjaGFyZ2luZ190aW1l
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xFVkVMOgorICAgICAgICBn
X3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9s
ZXZlbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9i
YXR0ZXJ5X21hbmFnZXJfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Cit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9iYXR0
ZXJ5X21hbmFnZXJfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoQkFUVEVSWV9T
VEFUVVMpCisgICAgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9CQVRURVJZX01BTkFHRVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqPihXRUJLSVRfRE9N
X09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
OjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUo
QkFUVEVSWV9TVEFUVVMpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfY2xhc3NfaW5pdChXZWJLaXRET01CYXR0ZXJ5TWFuYWdl
ckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9iYXR0ZXJ5X21h
bmFnZXJfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9k
b21fYmF0dGVyeV9tYW5hZ2VyX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X3Byb3BlcnR5OworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NIQVJHSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJjaGFyZ2luZyIsCisgICAgICAgICAgICAiQmF0dGVyeU1hbmFnZXI6Y2hhcmdpbmci
LAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBCYXR0ZXJ5TWFuYWdlcjpjaGFyZ2lu
ZyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NIQVJHSU5HX1RJTUUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19kb3VibGUoCisgICAgICAgICAgICAiY2hhcmdpbmctdGltZSIsCisgICAgICAgICAgICAi
QmF0dGVyeU1hbmFnZXI6Y2hhcmdpbmctdGltZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdk
b3VibGUgQmF0dGVyeU1hbmFnZXI6Y2hhcmdpbmctdGltZSIsCisgICAgICAgICAgICAtR19NQVhE
T1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQ0hBUkdJTkdfVElNRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJkaXNjaGFyZ2luZy10aW1lIiwKKyAgICAgICAg
ICAgICJCYXR0ZXJ5TWFuYWdlcjpkaXNjaGFyZ2luZy10aW1lIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2RvdWJsZSBCYXR0ZXJ5TWFuYWdlcjpkaXNjaGFyZ2luZy10aW1lIiwKKyAgICAgICAg
ICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRVZFTCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJsZXZlbCIsCisgICAgICAgICAgICAiQmF0dGVy
eU1hbmFnZXI6bGV2ZWwiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEJhdHRlcnlN
YW5hZ2VyOmxldmVsIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9pbml0KFdlYktpdERPTUJhdHRlcnlNYW5hZ2Vy
KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fQkFUVEVSWV9NQU5BR0VSX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlKCk7Cit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9jaGFyZ2luZyhXZWJLaXRET01CYXR0ZXJ5
TWFuYWdlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfQkFUVEVSWV9NQU5BR0VSKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6QmF0dGVyeU1hbmFnZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+Y2hhcmdpbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiQmF0dGVyeSBTdGF0dXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKEJBVFRFUllfU1RBVFVTKSAqLworfQorCitnZG91YmxlIHdl
YmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9jaGFyZ2luZ190aW1lKFdlYktpdERPTUJhdHRl
cnlNYW5hZ2VyKiBzZWxmKQoreworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19CQVRURVJZX01BTkFHRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkJhdHRlcnlNYW5hZ2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUg
cmVzdWx0ID0gaXRlbS0+Y2hhcmdpbmdUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkJhdHRlcnkgU3RhdHVzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKEJBVFRFUllfU1RBVFVTKSAqLworfQorCitnZG91YmxlIHdl
YmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9kaXNjaGFyZ2luZ190aW1lKFdlYktpdERPTUJh
dHRlcnlNYW5hZ2VyKiBzZWxmKQoreworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19CQVRURVJZX01BTkFHRVIoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkJhdHRlcnlNYW5hZ2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3Vi
bGUgcmVzdWx0ID0gaXRlbS0+ZGlzY2hhcmdpbmdUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIkJhdHRlcnkgU3RhdHVzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Rv
dWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKEJBVFRFUllfU1RBVFVTKSAqLworfQorCitnZG91
YmxlIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9sZXZlbChXZWJLaXRET01CYXR0ZXJ5
TWFuYWdlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfQkFUVEVSWV9NQU5BR0VSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpC
YXR0ZXJ5TWFuYWdlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJl
c3VsdCA9IGl0ZW0tPmxldmVsKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkJh
dHRlcnkgU3RhdHVzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKEJBVFRFUllfU1RBVFVTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJh
dHRlcnlNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTc1YWRmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVy
eU1hbmFnZXIuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyX2gKKyNkZWZpbmUgV2ViS2l0RE9N
QmF0dGVyeU1hbmFnZXJfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisK
KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01P
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0JBVFRFUllfTUFO
QUdFUiAgICAgICAgICAgICh3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0JBVFRFUllfTUFOQUdFUihvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQkFUVEVSWV9NQU5B
R0VSLCBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcikpCisjZGVmaW5lIFdFQktJVF9ET01fQkFUVEVS
WV9NQU5BR0VSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9CQVRURVJZX01BTkFHRVIsIFdlYktpdERPTUJhdHRlcnlNYW5h
Z2VyQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQkFUVEVSWV9NQU5BR0VSKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9C
QVRURVJZX01BTkFHRVIpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0JBVFRFUllfTUFOQUdFUl9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfQkFUVEVSWV9NQU5BR0VSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9CQVRURVJZX01BTkFH
RVJfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0JBVFRFUllfTUFOQUdFUiwgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIgeworICAgIFdlYktpdERPTU9i
amVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUJhdHRlcnlNYW5h
Z2VyQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF90eXBlKHZv
aWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9jaGFyZ2luZzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcgorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfY2hhcmdpbmcoV2ViS2l0RE9N
QmF0dGVyeU1hbmFnZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5h
Z2VyX2dldF9jaGFyZ2luZ190aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUJhdHRlcnlNYW5h
Z2VyCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9n
ZXRfY2hhcmdpbmdfdGltZShXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2Rpc2NoYXJnaW5nX3RpbWU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91
YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUK
K3dlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9kaXNjaGFyZ2luZ190aW1lKFdlYktpdERP
TUJhdHRlcnlNYW5hZ2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2JhdHRlcnlfbWFu
YWdlcl9nZXRfbGV2ZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIKKyAq
CisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9sZXZl
bChXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01C
YXR0ZXJ5TWFuYWdlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hODNmNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXR0ZXJ5TWFu
YWdlclByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Jh
dHRlcnlNYW5hZ2VyLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUJhdHRlcnlNYW5h
Z2VyLmg+CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiB3cmFwQmF0dGVyeU1hbmFnZXIoV2ViQ29yZTo6QmF0
dGVyeU1hbmFnZXIqKTsKK1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiBraXQoV2ViQ29yZTo6QmF0
dGVyeU1hbmFnZXIqKTsKK1dlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKiBjb3JlKFdlYktpdERPTUJh
dHRlcnlNYW5hZ2VyKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJM
RShCQVRURVJZX1NUQVRVUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUJhdHRlcnlNYW5hZ2Vy
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2IuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZlYjIyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01CbG9iLmNwcApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUJs
b2IuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01CbG9iUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NQmxvYlVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0JMT0JfR0VUX1BSSVZBVEUo
b2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQkxP
QiwgV2ViS2l0RE9NQmxvYlByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01CbG9i
UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkJsb2I+IGNvcmVPYmplY3Q7Cit9IFdlYktp
dERPTUJsb2JQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQmxvYiog
a2l0KFdlYkNvcmU6OkJsb2IqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQor
ICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9CTE9CKHJldCk7CisKKyAgICByZXR1cm4gd3JhcChv
YmopOworfQorCitXZWJDb3JlOjpCbG9iKiBjb3JlKFdlYktpdERPTUJsb2IqIHJlcXVlc3QpCit7
CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCbG9iKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQmxv
Yiogd3JhcEJsb2IoV2ViQ29yZTo6QmxvYiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQkxPQihnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX0JMT0IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NQmxvYiwg
d2Via2l0X2RvbV9ibG9iLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9TSVpFLAorICAgIFBST1BfVFlQRSwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fYmxvYl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NQmxvYlByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0JMT0JfR0VUX1BSSVZBVEUob2JqZWN0
KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0
LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01CbG9iUHJpdmF0ZSgpOworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fYmxvYl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Jsb2JfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NQmxvYiogc2VsZiA9IFdFQktJVF9ET01fQkxPQihvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9ibG9iX2dldF9zaXplKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYmxvYl9nZXRfYmxvYl90eXBlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2Jsb2JfY29uc3Ry
dWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0
Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2Jq
ZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ibG9iX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisKKyAgICBXZWJLaXRET01CbG9iUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQkxPQl9H
RVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpCbG9iKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Cisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9i
amVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2Jsb2JfY2xhc3NfaW5pdChXZWJLaXRET01CbG9iQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdl
YktpdERPTUJsb2JQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fYmxvYl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X2RvbV9ibG9iX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9ibG9iX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSVpF
LAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgInNpemUiLAorICAg
ICAgICAgICAgIkJsb2I6c2l6ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgQmxv
YjpzaXplIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJC
bG9iOnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogQmxvYjp0eXBlIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ibG9iX2luaXQoV2ViS2l0RE9NQmxvYiogcmVxdWVz
dCkKK3sKKyAgICBXZWJLaXRET01CbG9iUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQkxPQl9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUJsb2JQcml2YXRl
KCk7Cit9CisKK1dlYktpdERPTUJsb2IqIHdlYmtpdF9kb21fYmxvYl9zbGljZShXZWJLaXRET01C
bG9iKiBzZWxmLCBnaW50NjQgc3RhcnQsIGdpbnQ2NCBlbmQsIGNvbnN0IGdjaGFyKiBjb250ZW50
VHlwZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19CTE9CKHNlbGYpLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChjb250ZW50VHlwZSwgMCk7CisgICAgV2ViQ29yZTo6QmxvYiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRDb250
ZW50VHlwZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb250ZW50VHlwZSk7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkJsb2I+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zbGljZShz
dGFydCwgZW5kLCBjb252ZXJ0ZWRDb250ZW50VHlwZSkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX2Jsb2JfZ2V0
X3NpemUoV2ViS2l0RE9NQmxvYiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19C
TE9CKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpCbG9iKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+c2l6ZSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Jsb2JfZ2V0X2Jsb2JfdHlwZShXZWJLaXRET01C
bG9iKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0JMT0Ioc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkJsb2IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2IuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxvYi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYzE0Y2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUJsb2IuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01CbG9i
X2gKKyNkZWZpbmUgV2ViS2l0RE9NQmxvYl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX0JMT0IgICAgICAgICAgICAod2Via2l0X2RvbV9ibG9iX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fQkxPQihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQkxPQiwgV2ViS2l0RE9NQmxvYikpCisj
ZGVmaW5lIFdFQktJVF9ET01fQkxPQl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQkxPQiwgV2ViS2l0RE9NQmxvYkNsYXNz
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0JMT0Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0JMT0IpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0JMT0JfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0JMT0IpKQorI2RlZmluZSBXRUJLSVRfRE9NX0JMT0JfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX0JMT0IsIFdlYktpdERPTUJsb2JDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQmxv
YiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NQmxvYkNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2Jsb2JfZ2V0X3R5cGUodm9p
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9ibG9iX2dldF9zaXplOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUJsb2IKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisqKi8KK1dFQktJVF9BUEkg
Z3VpbnQ2NAord2Via2l0X2RvbV9ibG9iX2dldF9zaXplKFdlYktpdERPTUJsb2IqIHNlbGYpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NQmxvYl9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01y
ZWFkb25seVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxvYlByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDc1
JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01yZWFkb25seVByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iUHJpdmF0ZS5o
CmluZGV4IGU3NjU5MWEuLjA4YjEyYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5UHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQmxvYlByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01yZWFkb25seVByaXZhdGVf
aAotI2RlZmluZSBXZWJLaXRET01yZWFkb25seVByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01C
bG9iUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUJsb2JQcml2YXRlX2gKIAotI2luY2x1ZGUg
InJlYWRvbmx5LmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTXJlYWRvbmx5Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9CbG9iLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUJs
b2IuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01yZWFkb25seSogd3JhcHJlYWRv
bmx5KFdlYkNvcmU6OnJlYWRvbmx5Kik7Ci1XZWJLaXRET01yZWFkb25seSoga2l0KFdlYkNvcmU6
OnJlYWRvbmx5Kik7Ci1XZWJDb3JlOjpyZWFkb25seSogY29yZShXZWJLaXRET01yZWFkb25seSop
OworV2ViS2l0RE9NQmxvYiogd3JhcEJsb2IoV2ViQ29yZTo6QmxvYiopOworV2ViS2l0RE9NQmxv
Yioga2l0KFdlYkNvcmU6OkJsb2IqKTsKK1dlYkNvcmU6OkJsb2IqIGNvcmUoV2ViS2l0RE9NQmxv
YiopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRET01yZWFkb25s
eVByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUJsb2JQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01CbG9iVW5zdGFibGUuaApzaW1pbGFyaXR5IGluZGV4IDU0JQpyZW5hbWUgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9i
VW5zdGFibGUuaAppbmRleCBlMmY0MTIzLi5mNDQxMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2JVbnN0YWJs
ZS5oCkBAIC0xOCwxNiArMTgsNDIgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUJsb2JVbnN0YWJsZV9o
CisjZGVmaW5lIFdlYktpdERPTUJsb2JVbnN0YWJsZV9oCiAKLSNpbmNsdWRlICJUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oPgorI2lmZGVmIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERP
TVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiB3cmFwVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UoV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2UqKTsKLVdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UqKTsKLVdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlKiBjb3JlKFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
Kik7Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlX2ggKi8KK0dfQkVHSU5fREVDTFMKKworLyoq
CisgKiB3ZWJraXRfZG9tX2Jsb2Jfc2xpY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQmxvYgor
ICogQHN0YXJ0OiBBICNnaW50NjQKKyAqIEBlbmQ6IEEgI2dpbnQ2NAorICogQGNvbnRlbnRUeXBl
OiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9N
QmxvYgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01CbG9iKgord2Via2l0X2RvbV9ibG9iX3NsaWNlKFdlYktpdERPTUJsb2IqIHNlbGYsIGdpbnQ2
NCBzdGFydCwgZ2ludDY0IGVuZCwgY29uc3QgZ2NoYXIqIGNvbnRlbnRUeXBlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2Jsb2JfZ2V0X2Jsb2JfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01C
bG9iCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Jsb2JfZ2V0X2Jsb2JfdHlwZShX
ZWJLaXRET01CbG9iKiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NQmxvYlVuc3RhYmxl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzIxMGM5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24uY3BwCkBAIC0wLDAgKzEsMTA2IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0lt
cG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmpl
Y3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01DREFUQVNlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTUNEQVRBU2VjdGlvbioga2l0KFdlYkNvcmU6OkNEQVRBU2VjdGlv
biogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0NEQVRBX1NFQ1RJT04oa2l0KHN0YXRp
Y19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkNEQVRBU2VjdGlv
biogY29yZShXZWJLaXRET01DREFUQVNlY3Rpb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDREFUQVNlY3Rpb24qPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01DREFUQVNlY3Rp
b24qIHdyYXBDREFUQVNlY3Rpb24oV2ViQ29yZTo6Q0RBVEFTZWN0aW9uKiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DREFUQV9T
RUNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQ0RBVEFfU0VDVElPTiwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fY2RhdGFfc2VjdGlvbl9kaXNwYXRjaF9l
dmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJL
aXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgV2ViQ29yZTo6Q0RBVEFTZWN0aW9uKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Q0RBVEFTZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVu
dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUs
IGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2FkZF9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkNEQVRB
U2VjdGlvbiogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNEQVRBU2VjdGlvbio+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25fcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
Q0RBVEFTZWN0aW9uKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q0RBVEFTZWN0
aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01F
dmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3
ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25fZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9l
dmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fY2RhdGFfc2VjdGlvbl9hZGRfZXZlbnRfbGlzdGVu
ZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fY2RhdGFf
c2VjdGlvbl9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9D
T0RFKFdlYktpdERPTUNEQVRBU2VjdGlvbiwgd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uLCBXRUJL
SVRfRE9NX1RZUEVfVEVYVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9F
VkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25fY2xhc3NfaW5pdChXZWJLaXRET01DREFUQVNlY3Rp
b25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0Q2xhc3Mp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25faW5pdChXZWJLaXRE
T01DREFUQVNlY3Rpb24qIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUNEQVRBU2VjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTNmNWU4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20v
d2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRET01DREFUQVNlY3Rpb25faAorI2RlZmluZSBXZWJLaXRET01DREFUQVNlY3Rpb25f
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NVGV4dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQ0RBVEFfU0VDVElPTiAgICAg
ICAgICAgICh3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9DREFUQV9TRUNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DREFUQV9TRUNUSU9OLCBXZWJLaXRET01D
REFUQVNlY3Rpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX0NEQVRBX1NFQ1RJT05fQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0NEQVRBX1NFQ1RJT04sIFdlYktpdERPTUNEQVRBU2VjdGlvbkNsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0NEQVRBX1NFQ1RJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NEQVRBX1NFQ1RJT04pKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0NEQVRBX1NFQ1RJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NEQVRBX1NFQ1RJT04pKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0NEQVRBX1NFQ1RJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0NEQVRBX1NFQ1RJT04sIFdlYktp
dERPTUNEQVRBU2VjdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01DREFUQVNlY3Rpb24g
eworICAgIFdlYktpdERPTVRleHQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJL
aXRET01DREFUQVNlY3Rpb25DbGFzcyB7CisgICAgV2ViS2l0RE9NVGV4dENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fY2RhdGFfc2VjdGlvbl9n
ZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUNEQVRB
U2VjdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNEQVRB
U2VjdGlvblByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDcyJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0VHlwZWRl
ZnNQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uUHJpdmF0ZS5oCmluZGV4IDI1
ZDA1NWQuLmQwYzBmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUNEQVRBU2VjdGlvblByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0VHlwZWRlZnNQ
cml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJpdmF0ZV9oCisjaWZuZGVm
IFdlYktpdERPTUNEQVRBU2VjdGlvblByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01DREFUQVNl
Y3Rpb25Qcml2YXRlX2gKIAotI2luY2x1ZGUgIlRlc3RUeXBlZGVmcy5oIgotI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01UZXN0VHlwZWRlZnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NEQVRB
U2VjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DREFUQVNlY3Rpb24uaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0VHlwZWRlZnMqIHdyYXBUZXN0VHlw
ZWRlZnMoV2ViQ29yZTo6VGVzdFR5cGVkZWZzKik7Ci1XZWJLaXRET01UZXN0VHlwZWRlZnMqIGtp
dChXZWJDb3JlOjpUZXN0VHlwZWRlZnMqKTsKLVdlYkNvcmU6OlRlc3RUeXBlZGVmcyogY29yZShX
ZWJLaXRET01UZXN0VHlwZWRlZnMqKTsKK1dlYktpdERPTUNEQVRBU2VjdGlvbiogd3JhcENEQVRB
U2VjdGlvbihXZWJDb3JlOjpDREFUQVNlY3Rpb24qKTsKK1dlYktpdERPTUNEQVRBU2VjdGlvbiog
a2l0KFdlYkNvcmU6OkNEQVRBU2VjdGlvbiopOworV2ViQ29yZTo6Q0RBVEFTZWN0aW9uKiBjb3Jl
KFdlYktpdERPTUNEQVRBU2VjdGlvbiopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRp
ZiAvKiBXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRE
T01DREFUQVNlY3Rpb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUNTU1J1bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3
ZWRjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGUuY3BwCkBAIC0wLDAgKzEsMjQ2
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTUnVsZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJ
bXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGVQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGVVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9DU1NfUlVMRV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShv
YmosIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRSwgV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NSdWxlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkNTU1J1bGU+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTUNTU1J1bGVQcml2YXRlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQ1NTUnVsZSoga2l0KFdlYkNvcmU6OkNT
U1J1bGUqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9DU1NfUlVMRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBDU1NSdWxlKG9i
aik7Cit9CisKK1dlYkNvcmU6OkNTU1J1bGUqIGNvcmUoV2ViS2l0RE9NQ1NTUnVsZSogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNTU1J1bGUq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01DU1NSdWxlKiB3cmFwQ1NTUnVsZShXZWJDb3JlOjpDU1NSdWxlKiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DU1NfUlVM
RShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFLCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RF
RklORV9UWVBFKFdlYktpdERPTUNTU1J1bGUsIHdlYmtpdF9kb21fY3NzX3J1bGUsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RZUEUsCisg
ICAgUFJPUF9DU1NfVEVYVCwKKyAgICBQUk9QX1BBUkVOVF9TVFlMRV9TSEVFVCwKKyAgICBQUk9Q
X1BBUkVOVF9SVUxFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX0NTU19SVUxFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAg
ICBwcml2LT5+V2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX2Nzc19ydWxlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3J1bGVfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NQ1NTUnVsZSogc2VsZiA9IFdFQktJVF9ET01fQ1NTX1JV
TEUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9D
U1NfVEVYVDoKKyAgICAgICAgd2Via2l0X2RvbV9jc3NfcnVsZV9zZXRfY3NzX3RleHQoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTUNTU1J1bGUqIHNlbGYgPSBXRUJLSVRfRE9NX0NTU19SVUxFKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcnVsZV90
eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NTU19URVhUOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9j
c3NfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVJFTlRfU1RZ
TEVfU0hFRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9j
c3NfcnVsZV9nZXRfcGFyZW50X3N0eWxlX3NoZWV0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1BBUkVOVF9SVUxFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3BhcmVudF9ydWxlKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2Nzc19ydWxlX2NvbnN0cnVjdG9yKEdU
eXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVj
dFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fY3NzX3J1bGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KworICAgIFdlYktpdERPTUNTU1J1bGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfUlVM
RV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpDU1NSdWxlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2Nzc19ydWxlX2NsYXNzX2luaXQoV2ViS2l0RE9NQ1NTUnVsZUNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xh
c3MsIHNpemVvZihXZWJLaXRET01DU1NSdWxlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+
Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2Nzc19ydWxlX2NvbnN0cnVjdG9yOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2Nzc19ydWxlX2ZpbmFsaXplOworICAgIGdv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9jc3NfcnVsZV9zZXRfcHJvcGVy
dHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2Nzc19ydWxl
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWludCgKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJDU1NSdWxlOnR5
cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBndXNob3J0IENTU1J1bGU6dHlwZSIsCisgICAg
ICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DU1NfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJjc3MtdGV4dCIsCisgICAgICAgICAgICAiQ1NTUnVsZTpj
c3MtdGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogQ1NTUnVsZTpjc3MtdGV4
dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVJFTlRfU1RZTEVfU0hFRVQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicGFyZW50LXN0eWxlLXNoZWV0IiwKKyAgICAg
ICAgICAgICJDU1NSdWxlOnBhcmVudC1zdHlsZS1zaGVldCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIENTU1J1bGU6cGFyZW50LXN0eWxlLXNoZWV0IiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfU0hFRVQsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVJFTlRfUlVM
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwYXJlbnQtcnVs
ZSIsCisgICAgICAgICAgICAiQ1NTUnVsZTpwYXJlbnQtcnVsZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTUNTU1J1bGUqIENTU1J1bGU6cGFyZW50LXJ1bGUiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9pbml0KFdl
YktpdERPTUNTU1J1bGUqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX0NTU19SVUxFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUoKTsKK30KKworZ3VzaG9ydCB3ZWJraXRf
ZG9tX2Nzc19ydWxlX2dldF9ydWxlX3R5cGUoV2ViS2l0RE9NQ1NTUnVsZSogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfUlVMRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
Q1NTUnVsZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3VsdCA9
IGl0ZW0tPnR5cGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2Rv
bV9jc3NfcnVsZV9nZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTUnVsZSogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfUlVMRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NT
UnVsZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5jc3NUZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9zZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTUnVs
ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0NTU19SVUxFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpDU1NSdWxlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRDc3NUZXh0KGNvbnZlcnRlZFZh
bHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorfQorCitXZWJLaXRET01DU1NTdHlsZVNoZWV0KiB3ZWJraXRfZG9tX2Nz
c19ydWxlX2dldF9wYXJlbnRfc3R5bGVfc2hlZXQoV2ViS2l0RE9NQ1NTUnVsZSogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfUlVMRShzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6Q1NTUnVsZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6Q1NTU3R5bGVTaGVldD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBhcmVu
dFN0eWxlU2hlZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01DU1NSdWxlKiB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wYXJl
bnRfcnVsZShXZWJLaXRET01DU1NSdWxlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0NTU19SVUxFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NSdWxlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGFyZW50UnVsZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVs
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DU1NSdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OGM1MmRlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZS5oCkBAIC0wLDAgKzEsMTM1
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJL
SVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJP
bmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisj
ZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01DU1NSdWxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NT
UnVsZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFICAg
ICAgICAgICAgKHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9DU1NfUlVMRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUsIFdlYktpdERPTUNTU1J1bGUpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRSwgV2ViS2l0RE9NQ1NT
UnVsZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NTU19SVUxFKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfUlVM
RSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ1NTX1JVTEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUsIFdlYktpdERPTUNT
U1J1bGVDbGFzcykpCisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9VTktOT1dOX1JVTEU6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9VTktOT1dOX1JVTEUgMAorCisvKioK
KyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfU1RZTEVfUlVMRToKKyAqLworI2RlZmluZSBXRUJLSVRf
RE9NX0NTU19SVUxFX1NUWUxFX1JVTEUgMQorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVf
Q0hBUlNFVF9SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfQ0hBUlNFVF9S
VUxFIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19SVUxFX0lNUE9SVF9SVUxFOgorICovCisj
ZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfSU1QT1JUX1JVTEUgMworCisvKioKKyAqIFdFQktJ
VF9ET01fQ1NTX1JVTEVfTUVESUFfUlVMRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19S
VUxFX01FRElBX1JVTEUgNAorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfRk9OVF9GQUNF
X1JVTEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9GT05UX0ZBQ0VfUlVMRSA1
CisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9QQUdFX1JVTEU6CisgKi8KKyNkZWZpbmUg
V0VCS0lUX0RPTV9DU1NfUlVMRV9QQUdFX1JVTEUgNgorCitzdHJ1Y3QgX1dlYktpdERPTUNTU1J1
bGUgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERPTUNTU1J1bGVDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9jc3NfcnVsZV9nZXRf
dHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9ydWxlX3R5cGU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTUnVsZQorICoKKyAqIFJldHVybnM6IEEgI2d1c2hv
cnQKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9ydWxl
X3R5cGUoV2ViS2l0RE9NQ1NTUnVsZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nf
cnVsZV9nZXRfY3NzX3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTUnVsZQorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Nz
c19ydWxlX2dldF9jc3NfdGV4dChXZWJLaXRET01DU1NSdWxlKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2Nzc19ydWxlX3NldF9jc3NfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01D
U1NSdWxlCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jc3NfcnVsZV9zZXRfY3NzX3RleHQoV2ViS2l0
RE9NQ1NTUnVsZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcGFyZW50X3N0eWxlX3NoZWV0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUNTU1J1bGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVs
bCk6IEEgI1dlYktpdERPTUNTU1N0eWxlU2hlZXQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01D
U1NTdHlsZVNoZWV0Kgord2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcGFyZW50X3N0eWxlX3NoZWV0
KFdlYktpdERPTUNTU1J1bGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3J1bGVf
Z2V0X3BhcmVudF9ydWxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1J1bGUKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUNTU1J1bGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01DU1NSdWxlKgord2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcGFyZW50X3J1
bGUoV2ViS2l0RE9NQ1NTUnVsZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
ZWJLaXRET01DU1NSdWxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01DU1NSdWxlTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmI4NTYwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuY3BwCkBAIC0wLDAg
KzEsMTU0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTUnVsZUxpc3QuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRE
T01DU1NSdWxlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01DU1NSdWxlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFX0xJU1RfR0VUX1BSSVZBVEUob2Jq
KSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JV
TEVfTElTVCwgV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVs
ZUxpc3Q+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUNTU1J1bGVMaXN0KiBraXQoV2ViQ29yZTo6Q1NT
UnVsZUxpc3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUKHJldCk7CisKKyAgICByZXR1cm4gd3JhcENT
U1J1bGVMaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6OkNTU1J1bGVMaXN0KiBjb3JlKFdlYktpdERP
TUNTU1J1bGVMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Q1NTUnVsZUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01DU1NSdWxlTGlzdCogd3JhcENTU1J1bGVMaXN0
KFdlYkNvcmU6OkNTU1J1bGVMaXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEVfTElTVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01DU1NSdWxlTGlzdCwgd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0LCBXRUJLSVRfRE9N
X1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fQ1NTX1JVTEVfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAg
cHJpdi0+fldlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIHNlbGYgPSBXRUJLSVRf
RE9NX0NTU19SVUxFX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewor
ICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3
ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2NvbnN0cnVjdG9yKEdU
eXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVj
dFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9wYXJlbnRfY2xhc3MpLT5jb25z
dHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRp
ZXMpOworCisgICAgV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9DU1NfUlVMRV9MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNTU1J1bGVMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
b2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHBy
aXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRE
T01DU1NSdWxlTGlzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01DU1NSdWxlTGlz
dFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9j
c3NfcnVsZV9saXN0X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAg
ICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiQ1NTUnVsZUxpc3Q6bGVuZ3RoIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIENTU1J1bGVMaXN0Omxlbmd0aCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2luaXQoV2ViS2l0
RE9NQ1NTUnVsZUxpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUX0dFVF9QUklWQVRFKHJlcXVlc3Qp
OworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlKCk7Cit9CisKK1dl
YktpdERPTUNTU1J1bGUqIHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9pdGVtKFdlYktpdERPTUNT
U1J1bGVMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfQ1NTX1JVTEVfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTUnVsZUxpc3QqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGU+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9jc3NfcnVsZV9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1JVTEVfTElTVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6Q1NTUnVsZUxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vs
b25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmYwN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01DU1NSdWxlTGlzdC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVm
aW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20u
aD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERP
TUNTU1J1bGVMaXN0X2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTUnVsZUxpc3RfaAorCisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNUICAgICAgICAgICAgKHdl
YmtpdF9kb21fY3NzX3J1bGVfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NT
U19SVUxFX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QsIFdlYktpdERPTUNTU1J1bGVMaXN0
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9M
SVNULCBXZWJLaXRET01DU1NSdWxlTGlzdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NT
U19SVUxFX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0NTU19SVUxFX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0NTU19SVUxFX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QsIFdlYktpdERPTUNTU1J1bGVM
aXN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUNTU1J1bGVMaXN0IHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01DU1NSdWxl
TGlzdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X3R5cGUodm9p
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2l0ZW06CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NQ1NTUnVsZUxpc3QKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01DU1NSdWxlCisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NQ1NTUnVsZSoKK3dlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9pdGVtKFdlYktp
dERPTUNTU1J1bGVMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9k
b21fY3NzX3J1bGVfbGlzdF9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1J1
bGVMaXN0CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25n
Cit3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01DU1NSdWxlTGlz
dCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01DU1NSdWxlTGlz
dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NS
dWxlTGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzA2
NWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTUNTU1J1bGVMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUNTU1J1bGVMaXN0UHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU1J1bGVMaXN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUNTU1J1bGVMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2Vi
S2l0RE9NQ1NTUnVsZUxpc3QqIHdyYXBDU1NSdWxlTGlzdChXZWJDb3JlOjpDU1NSdWxlTGlzdCop
OworV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIGtpdChXZWJDb3JlOjpDU1NSdWxlTGlzdCopOworV2Vi
Q29yZTo6Q1NTUnVsZUxpc3QqIGNvcmUoV2ViS2l0RE9NQ1NTUnVsZUxpc3QqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUuaApz
aW1pbGFyaXR5IGluZGV4IDc0JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1dGVQcml2YXRlLmgKcmVuYW1lIHRv
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQ1NTUnVsZVByaXZhdGUuaAppbmRleCBkZmViMmQ2Li4zZTgzZGQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01h
dHRyaWJ1dGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlUHJpdmF0ZS5oCkBAIC0xOCwxNiAr
MTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVm
IFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01hdHRyaWJ1dGVQ
cml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01DU1NSdWxlUHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJhdHRyaWJ1dGUuaCIKLSNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NYXR0cmlidXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NS
dWxlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNTU1J1bGUuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7Ci1XZWJLaXRET01hdHRyaWJ1dGUqIHdyYXBhdHRyaWJ1dGUoV2ViQ29yZTo6
YXR0cmlidXRlKik7Ci1XZWJLaXRET01hdHRyaWJ1dGUqIGtpdChXZWJDb3JlOjphdHRyaWJ1dGUq
KTsKLVdlYkNvcmU6OmF0dHJpYnV0ZSogY29yZShXZWJLaXRET01hdHRyaWJ1dGUqKTsKK1dlYktp
dERPTUNTU1J1bGUqIHdyYXBDU1NSdWxlKFdlYkNvcmU6OkNTU1J1bGUqKTsKK1dlYktpdERPTUNT
U1J1bGUqIGtpdChXZWJDb3JlOjpDU1NSdWxlKik7CitXZWJDb3JlOjpDU1NSdWxlKiBjb3JlKFdl
YktpdERPTUNTU1J1bGUqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2Vi
S2l0RE9NYXR0cmlidXRlUHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NQ1NTUnVsZVBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlVW5zdGFibGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NT
UnVsZVVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1YWI4
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZVVuc3RhYmxlLmgKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01D
U1NSdWxlVW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01DU1NSdWxlVW5zdGFibGVfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICog
V0VCS0lUX0RPTV9DU1NfUlVMRV9LRVlGUkFNRVNfUlVMRToKKyAqLworI2RlZmluZSBXRUJLSVRf
RE9NX0NTU19SVUxFX0tFWUZSQU1FU19SVUxFIDcKKworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19S
VUxFX0tFWUZSQU1FX1JVTEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9LRVlG
UkFNRV9SVUxFIDgKKworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19SVUxFX1NVUFBPUlRTX1JVTEU6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9TVVBQT1JUU19SVUxFIDEyCisKKy8q
KgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9XRUJLSVRfUkVHSU9OX1JVTEU6CisgKi8KKyNkZWZp
bmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9XRUJLSVRfUkVHSU9OX1JVTEUgMTYKKworLyoqCisgKiBX
RUJLSVRfRE9NX0NTU19SVUxFX1dFQktJVF9LRVlGUkFNRVNfUlVMRToKKyAqLworI2RlZmluZSBX
RUJLSVRfRE9NX0NTU19SVUxFX1dFQktJVF9LRVlGUkFNRVNfUlVMRSA3CisKKy8qKgorICogV0VC
S0lUX0RPTV9DU1NfUlVMRV9XRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAqLworI2RlZmluZSBXRUJL
SVRfRE9NX0NTU19SVUxFX1dFQktJVF9LRVlGUkFNRV9SVUxFIDgKKworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NQ1NTUnVsZVVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmYyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNT
U1N0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxl
Lmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGVQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT05fR0VUX1BSSVZBVEUob2JqKSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxF
X0RFQ0xBUkFUSU9OLCBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlIHsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbj4gY29yZU9iamVjdDsKK30gV2ViS2l0
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBraXQoV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJh
dGlvbiogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
IChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVy
biBXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElPTihyZXQpOworCisgICAgcmV0dXJuIHdy
YXBDU1NTdHlsZURlY2xhcmF0aW9uKG9iaik7Cit9CisKK1dlYkNvcmU6OkNTU1N0eWxlRGVjbGFy
YXRpb24qIGNvcmUoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRp
b24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiB3cmFwQ1NTU3R5bGVEZWNsYXJhdGlvbihXZWJD
b3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT04oZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJT04sICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiwgd2Via2l0X2Rv
bV9jc3Nfc3R5bGVfZGVjbGFyYXRpb24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX0NTU19URVhULAorICAgIFBST1BfTEVOR1RILAorICAg
IFBST1BfUEFSRU5UX1JVTEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHls
ZV9kZWNsYXJhdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0NTU19TVFlMRV9E
RUNMQVJBVElPTl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RD
YWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktp
dERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25f
c2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc2VsZiA9IFdFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ1NTX1RFWFQ6
CisgICAgICAgIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3NldF9jc3NfdGV4dChz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYg
PSBXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElPTihvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NTU19URVhUOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRf
Y3NzX3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgor
ICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVj
bGFyYXRpb25fZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9QQVJFTlRfUlVMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcGFyZW50X3J1bGUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9u
X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
R09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmpl
Y3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0
aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OX0dF
VF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5j
b3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2NsYXNzX2luaXQoV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01DU1NT
dHlsZURlY2xhcmF0aW9uUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3Ig
PSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9jb25zdHJ1Y3RvcjsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZmlu
YWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2Nzc19z
dHlsZV9kZWNsYXJhdGlvbl9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQ1NTX1RFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiY3NzLXRleHQiLAorICAgICAgICAgICAgIkNTU1N0eWxlRGVjbGFyYXRp
b246Y3NzLXRleHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIENTU1N0eWxlRGVj
bGFyYXRpb246Y3NzLXRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJD
U1NTdHlsZURlY2xhcmF0aW9uOmxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9u
ZyBDU1NTdHlsZURlY2xhcmF0aW9uOmxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05H
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUEFSRU5UX1JVTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAicGFyZW50LXJ1bGUiLAorICAgICAgICAgICAgIkNTU1N0eWxlRGVjbGFyYXRpb246cGFy
ZW50LXJ1bGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01DU1NSdWxlKiBDU1NT
dHlsZURlY2xhcmF0aW9uOnBhcmVudC1ydWxlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9DU1NfUlVMRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2luaXQoV2ViS2l0
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01DU1NTdHls
ZURlY2xhcmF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFU
SU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvblByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fY3NzX3N0eWxl
X2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwocHJvcGVydHlOYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZURlY2xh
cmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFByb3BlcnR5TmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwcm9wZXJ0eU5hbWUpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFByb3BlcnR5
VmFsdWUoY29udmVydGVkUHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3JlbW92ZV9wcm9wZXJ0eShX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlO
YW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZ
TEVfREVDTEFSQVRJT04oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHByb3Bl
cnR5TmFtZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHJvcGVydHlOYW1lID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHByb3BlcnR5TmFtZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
cmVtb3ZlUHJvcGVydHkoY29udmVydGVkUHJvcGVydHlOYW1lLCBlYykpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRf
cHJvcGVydHlfcHJpb3JpdHkoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29u
c3QgZ2NoYXIqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1Nf
U1RZTEVfREVDTEFSQVRJT04oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHBy
b3BlcnR5TmFtZSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQcm9wZXJ0eU5h
bWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocHJvcGVydHlOYW1lKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnZl
cnRlZFByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X3Byb3BlcnR5KFdlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIGNvbnN0IGdjaGFy
KiB2YWx1ZSwgY29uc3QgZ2NoYXIqIHByaW9yaXR5LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChwcm9wZXJ0eU5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJpb3JpdHkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVy
cm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHJvcGVydHlO
YW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHByb3BlcnR5TmFtZSk7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFByaW9yaXR5ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHByaW9y
aXR5KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRQ
cm9wZXJ0eShjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUsIGNvbnZlcnRlZFZhbHVlLCBjb252ZXJ0ZWRQ
cmlvcml0eSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xh
cmF0aW9uX2l0ZW0oV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgZ3Vsb25nIGlu
ZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9zaG9ydGhhbmQoV2ViS2l0
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFSQVRJT04oc2VsZiks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHByb3BlcnR5TmFtZSwgMCk7CisgICAgV2Vi
Q29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgocHJvcGVydHlOYW1lKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNs
YXJhdGlvbl9pc19wcm9wZXJ0eV9pbXBsaWNpdChXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
KiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHByb3BlcnR5TmFtZSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkNTU1N0eWxl
RGVjbGFyYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkUHJvcGVydHlOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHByb3BlcnR5TmFt
ZSk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnZl
cnRlZFByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9jc3NfdGV4dChXZWJLaXRET01DU1NTdHls
ZURlY2xhcmF0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlM
RV9ERUNMQVJBVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5jc3NUZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X2Nzc190ZXh0KFdlYktp
dERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFSQVRJT04o
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24q
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldENzc1RleHQoY29udmVydGVkVmFsdWUsIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfbGVu
Z3RoKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpDU1NTdHlsZURlY2xhcmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitX
ZWJLaXRET01DU1NSdWxlKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcGFy
ZW50X3J1bGUoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFSQVRJT04oc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5wYXJlbnRSdWxlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNTU1N0eWxlRGVjbGFyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44MzU1NjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
LmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
ZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19X
RUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1
ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUNTU1N0eWxlRGVjbGFy
YXRpb25faAorI2RlZmluZSBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uX2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OICAgICAg
ICAgICAgKHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVf
REVDTEFSQVRJT04sIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX0RFQ0xBUkFU
SU9OLCBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJT04p
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTl9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ1NT
X1NUWUxFX0RFQ0xBUkFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFS
QVRJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9ERUNMQVJBVElPTiwgV2ViS2l0RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fY3Nz
X3N0eWxlX2RlY2xhcmF0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
Y3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisgKiBAcHJvcGVydHlOYW1lOiBBICNnY2hhcgor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWUoV2ViS2l0RE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fcmVtb3ZlX3Byb3BlcnR5Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqIEBwcm9wZXJ0eU5h
bWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRp
b25fcmVtb3ZlX3Byb3BlcnR5KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNv
bnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfcHJpb3JpdHk6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorICogQHByb3BlcnR5TmFtZTog
QSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3ByaW9yaXR5
KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0
eU5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3NldF9w
cm9wZXJ0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisgKiBA
cHJvcGVydHlOYW1lOiBBICNnY2hhcgorICogQHZhbHVlOiBBICNnY2hhcgorICogQHByaW9yaXR5
OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3NldF9wcm9wZXJ0eShXZWJLaXRET01D
U1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lLCBjb25z
dCBnY2hhciogdmFsdWUsIGNvbnN0IGdjaGFyKiBwcmlvcml0eSwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2l0ZW06CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorICogQGluZGV4OiBBICNndWxvbmcK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faXRlbShXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uKiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxl
X2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9zaG9ydGhhbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorICogQHByb3BlcnR5TmFtZTogQSAjZ2NoYXIKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9j
c3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3Nob3J0aGFuZChXZWJLaXRET01DU1NT
dHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9pc19wcm9wZXJ0eV9pbXBsaWNp
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisgKiBAcHJvcGVy
dHlOYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2lzX3Byb3Bl
cnR5X2ltcGxpY2l0KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdj
aGFyKiBwcm9wZXJ0eU5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xh
cmF0aW9uX2dldF9jc3NfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9jc3NfdGV4dChXZWJLaXRET01D
U1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHls
ZV9kZWNsYXJhdGlvbl9zZXRfY3NzX3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbgorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9u
X3NldF9jc3NfdGV4dChXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19z
dHlsZV9kZWNsYXJhdGlvbl9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0
eWxlRGVjbGFyYXRpb24KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQ
SSBndWxvbmcKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9sZW5ndGgoV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9j
c3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3BhcmVudF9ydWxlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6
IEEgI1dlYktpdERPTUNTU1J1bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01DU1NSdWxlKgor
d2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3BhcmVudF9ydWxlKFdlYktpdERP
TUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZS5oCnNpbWls
YXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlLmgKcmVu
YW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUuaAppbmRleCAxMGE1MWRkLi5j
ODA4ZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0QWN0
aXZlRE9NT2JqZWN0UHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmpl
Y3RQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGVf
aAorI2RlZmluZSBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZV9oCiAKLSNpbmNs
dWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NTU1N0eWxlRGVjbGFy
YXRpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3Qq
IHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqKTsK
LVdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIGtpdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9N
T2JqZWN0Kik7Ci1XZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBjb3JlKFdlYktpdERPTVRl
c3RBY3RpdmVET01PYmplY3QqKTsKK1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHdyYXBD
U1NTdHlsZURlY2xhcmF0aW9uKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qKTsKK1dlYktp
dERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIGtpdChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9u
Kik7CitXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBjb3JlKFdlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24qKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUNT
U1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVT
aGVldC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUNTU1N0eWxlU2hlZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM1N2FjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlU2hl
ZXQuY3BwCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTU3R5bGVTaGVldC5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUNTU1J1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NU3R5bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUNTU1N0eWxlU2hlZXQqIGtpdChXZWJDb3JlOjpD
U1NTdHlsZVNoZWV0KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQ1NTX1NUWUxFX1NI
RUVUKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpTdHlsZVNoZWV0Kj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBjb3JlKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30K
KworV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogd3JhcENTU1N0eWxlU2hlZXQoV2ViQ29yZTo6Q1NT
U3R5bGVTaGVldCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9N
X1RZUEVfQ1NTX1NUWUxFX1NIRUVULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRy
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERP
TUNTU1N0eWxlU2hlZXQsIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0LCBXRUJLSVRfRE9NX1RZ
UEVfU1RZTEVfU0hFRVQpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX09XTkVSX1JV
TEUsCisgICAgUFJPUF9DU1NfUlVMRVMsCisgICAgUFJPUF9SVUxFUywKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYgPSBXRUJLSVRfRE9NX0NTU19TVFlM
RV9TSEVFVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX09XTkVSX1JVTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X293bmVyX3J1bGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQ1NTX1JVTEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9jc3NfcnVsZXMoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUlVMRVM6CisgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X3J1bGVzKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0
X2NsYXNzX2luaXQoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9jc3Nf
c3R5bGVfc2hlZXRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09XTkVSX1JVTEUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAib3duZXItcnVsZSIs
CisgICAgICAgICAgICAiQ1NTU3R5bGVTaGVldDpvd25lci1ydWxlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NQ1NTUnVsZSogQ1NTU3R5bGVTaGVldDpvd25lci1ydWxlIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NTU19SVUxFUywKKyAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjc3MtcnVsZXMiLAorICAgICAgICAg
ICAgIkNTU1N0eWxlU2hlZXQ6Y3NzLXJ1bGVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NQ1NTUnVsZUxpc3QqIENTU1N0eWxlU2hlZXQ6Y3NzLXJ1bGVzIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUlVMRVMsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAicnVsZXMiLAorICAgICAgICAgICAgIkNTU1N0eWxl
U2hlZXQ6cnVsZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01DU1NSdWxlTGlz
dCogQ1NTU3R5bGVTaGVldDpydWxlcyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQ1NT
X1JVTEVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2luaXQoV2ViS2l0RE9NQ1NT
U3R5bGVTaGVldCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisK
K2d1bG9uZyB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9pbnNlcnRfcnVsZShXZWJLaXRET01D
U1NTdHlsZVNoZWV0KiBzZWxmLCBjb25zdCBnY2hhciogcnVsZSwgZ3Vsb25nIGluZGV4LCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfU0hFRVQo
c2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJ1bGUsIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NT
dHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFJ1bGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocnVsZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmluc2VydFJ1
bGUoY29udmVydGVkUnVsZSwgaW5kZXgsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9kZWxldGVfcnVsZShXZWJLaXRET01D
U1NTdHlsZVNoZWV0KiBzZWxmLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX1NIRUVUKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPmRlbGV0ZVJ1bGUoaW5kZXgsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2dsb25nIHdl
YmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2FkZF9ydWxlKFdlYktpdERPTUNTU1N0eWxlU2hlZXQq
IHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvciwgY29uc3QgZ2NoYXIqIHN0eWxlLCBndWxvbmcg
aW5kZXgsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19T
VFlMRV9TSEVFVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZWN0b3Is
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0eWxlLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRTZWxlY3RvciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxlY3Rvcik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkU3R5bGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3R5bGUpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
PmFkZFJ1bGUoY29udmVydGVkU2VsZWN0b3IsIGNvbnZlcnRlZFN0eWxlLCBpbmRleCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX3No
ZWV0X3JlbW92ZV9ydWxlKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYsIGd1bG9uZyBpbmRl
eCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfU0hF
RVQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAg
IFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+cmVtb3ZlUnVsZShpbmRl
eCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KK30KKworV2ViS2l0RE9NQ1NTUnVsZSogd2Via2l0X2RvbV9jc3Nfc3R5bGVf
c2hlZXRfZ2V0X293bmVyX3J1bGUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfU0hFRVQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkNTU1J1bGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5v
d25lclJ1bGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitXZWJLaXRET01DU1NSdWxlTGlzdCogd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRf
Z2V0X2Nzc19ydWxlcyhXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9TSEVFVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
Q1NTU3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Q1NTUnVsZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jc3NS
dWxlcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK1dlYktpdERPTUNTU1J1bGVMaXN0KiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRf
cnVsZXMoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19DU1NfU1RZTEVfU0hFRVQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxl
U2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNT
U1J1bGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cnVsZXMoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUNTU1N0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVTaGVldC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzk4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNTU1N0eWxlU2hlZXQuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRv
bS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
RE9NQ1NTU3R5bGVTaGVldF9oCisjZGVmaW5lIFdlYktpdERPTUNTU1N0eWxlU2hlZXRfaAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NU3R5
bGVTaGVldC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX1NIRUVUICAg
ICAgICAgICAgKHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfU0hFRVQsIFdl
YktpdERPTUNTU1N0eWxlU2hlZXQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NTU19TVFlMRV9TSEVF
VF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfQ1NTX1NUWUxFX1NIRUVULCBXZWJLaXRET01DU1NTdHlsZVNoZWV0Q2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX1NIRUVUKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVf
U0hFRVQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9TSEVFVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ1NT
X1NUWUxFX1NIRUVUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfU1RZTEVfU0hFRVRfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX0NTU19TVFlMRV9TSEVFVCwgV2ViS2l0RE9NQ1NTU3R5bGVTaGVldENsYXNzKSkKKworc3Ry
dWN0IF9XZWJLaXRET01DU1NTdHlsZVNoZWV0IHsKKyAgICBXZWJLaXRET01TdHlsZVNoZWV0IHBh
cmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NQ1NTU3R5bGVTaGVldENsYXNz
IHsKKyAgICBXZWJLaXRET01TdHlsZVNoZWV0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfaW5zZXJ0X3J1bGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVTaGVldAorICogQHJ1bGU6IEEgI2djaGFyCisgKiBA
aW5kZXg6IEEgI2d1bG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAj
Z3Vsb25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVl
dF9pbnNlcnRfcnVsZShXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmLCBjb25zdCBnY2hhciog
cnVsZSwgZ3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9jc3Nfc3R5bGVfc2hlZXRfZGVsZXRlX3J1bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NT
U3R5bGVTaGVldAorICogQGluZGV4OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9kZWxldGVf
cnVsZShXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmLCBndWxvbmcgaW5kZXgsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9hZGRfcnVsZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZVNoZWV0CisgKiBAc2VsZWN0b3I6IEEgI2dj
aGFyCisgKiBAc3R5bGU6IEEgI2djaGFyCisgKiBAaW5kZXg6IEEgI2d1bG9uZworICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfYWRkX3J1bGUoV2ViS2l0RE9NQ1NTU3R5bGVT
aGVldCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9yLCBjb25zdCBnY2hhciogc3R5bGUsIGd1
bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0
eWxlX3NoZWV0X3JlbW92ZV9ydWxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlU2hl
ZXQKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfcmVtb3ZlX3J1bGUoV2Vi
S2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZiwgZ3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X293bmVyX3J1bGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NTUnVsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUNTU1J1bGUqCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfb3duZXJfcnVsZShXZWJL
aXRET01DU1NTdHlsZVNoZWV0KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHls
ZV9zaGVldF9nZXRfY3NzX3J1bGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlU2hl
ZXQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUNTU1J1bGVM
aXN0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTUnVsZUxpc3QqCit3ZWJraXRfZG9tX2Nz
c19zdHlsZV9zaGVldF9nZXRfY3NzX3J1bGVzKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9ydWxlczoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZVNoZWV0CisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01DU1NSdWxlTGlzdAorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUNTU1J1bGVMaXN0Kgord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X3J1bGVzKFdlYktp
dERPTUNTU1N0eWxlU2hlZXQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2Vi
S2l0RE9NQ1NTU3R5bGVTaGVldF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFt
ZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTUludGVyZmFjZU5hbWVQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFBy
aXZhdGUuaAppbmRleCAzNDE1MTVkLi4yYzIyOWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01JbnRlcmZhY2VOYW1lUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2
IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJL
aXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTUludGVyZmFjZU5h
bWVQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRET01DU1NTdHlsZVNoZWV0UHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJJbnRlcmZh
Y2VOYW1lLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUludGVyZmFjZU5hbWUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU1N0eWxlU2hlZXQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NQ1NTU3R5bGVTaGVldC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERP
TUludGVyZmFjZU5hbWUqIHdyYXBJbnRlcmZhY2VOYW1lKFdlYkNvcmU6OkludGVyZmFjZU5hbWUq
KTsKLVdlYktpdERPTUludGVyZmFjZU5hbWUqIGtpdChXZWJDb3JlOjpJbnRlcmZhY2VOYW1lKik7
Ci1XZWJDb3JlOjpJbnRlcmZhY2VOYW1lKiBjb3JlKFdlYktpdERPTUludGVyZmFjZU5hbWUqKTsK
K1dlYktpdERPTUNTU1N0eWxlU2hlZXQqIHdyYXBDU1NTdHlsZVNoZWV0KFdlYkNvcmU6OkNTU1N0
eWxlU2hlZXQqKTsKK1dlYktpdERPTUNTU1N0eWxlU2hlZXQqIGtpdChXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0Kik7CitXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBjb3JlKFdlYktpdERPTUNTU1N0eWxl
U2hlZXQqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0RE9NSW50
ZXJmYWNlTmFtZVByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUNTU1N0eWxlU2hlZXRQ
cml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWUuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NWYWx1
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5NjUzNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWUuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NQ1NTVmFsdWUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01DU1NWYWx1ZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfVkFMVUVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1ZBTFVFLCBXZWJL
aXRET01DU1NWYWx1ZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NWYWx1
ZVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NWYWx1ZT4gY29yZU9iamVjdDsKK30g
V2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NQ1NTVmFsdWUqIGtpdChXZWJDb3JlOjpDU1NWYWx1ZSogb2JqKQoreworICAgIGlmICghb2Jq
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RD
YWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0NTU19WQUxVRShyZXQp
OworCisgICAgcmV0dXJuIHdyYXBDU1NWYWx1ZShvYmopOworfQorCitXZWJDb3JlOjpDU1NWYWx1
ZSogY29yZShXZWJLaXRET01DU1NWYWx1ZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNTU1ZhbHVlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQ1NTVmFsdWUqIHdyYXBDU1NW
YWx1ZShXZWJDb3JlOjpDU1NWYWx1ZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQ1NTX1ZBTFVFKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfQ1NTX1ZBTFVFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRy
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERP
TUNTU1ZhbHVlLCB3ZWJraXRfZG9tX2Nzc192YWx1ZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ1NTX1RFWFQsCisgICAgUFJPUF9DU1Nf
VkFMVUVfVFlQRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3ZhbHVlX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01DU1NWYWx1ZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX0NTU19WQUxVRV9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisg
ICAgcHJpdi0+fldlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fY3NzX3ZhbHVlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3ZhbHVlX3NldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUNTU1ZhbHVlKiBzZWxmID0gV0VCS0lUX0RPTV9D
U1NfVkFMVUUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9DU1NfVEVYVDoKKyAgICAgICAgd2Via2l0X2RvbV9jc3NfdmFsdWVfc2V0X2Nzc190ZXh0
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfdmFsdWVfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NQ1NTVmFsdWUqIHNlbGYgPSBXRUJLSVRfRE9NX0NTU19WQUxV
RShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NT
U19URVhUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2Nz
c192YWx1ZV9nZXRfY3NzX3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfQ1NTX1ZBTFVFX1RZUEU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtp
dF9kb21fY3NzX3ZhbHVlX2dldF9jc3NfdmFsdWVfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9jc3NfdmFsdWVfY29uc3RydWN0b3IoR1R5cGUg
dHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFy
YW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV9jc3NfdmFsdWVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKwor
ICAgIFdlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQ1NTX1ZBTFVF
X0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkNTU1ZhbHVlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2Nzc192YWx1ZV9jbGFzc19pbml0KFdlYktpdERPTUNTU1ZhbHVlQ2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFz
cy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2Nzc192YWx1ZV9jb25zdHJ1Y3RvcjsKKyAgICBn
b2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9jc3NfdmFsdWVfZmluYWxpemU7Cisg
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2Nzc192YWx1ZV9zZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2Nz
c192YWx1ZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1NTX1RFWFQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY3NzLXRleHQiLAorICAgICAg
ICAgICAgIkNTU1ZhbHVlOmNzcy10ZXh0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBDU1NWYWx1ZTpjc3MtdGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DU1NfVkFMVUVfVFlQRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAgICAgICAiY3NzLXZhbHVlLXR5cGUi
LAorICAgICAgICAgICAgIkNTU1ZhbHVlOmNzcy12YWx1ZS10eXBlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3VzaG9ydCBDU1NWYWx1ZTpjc3MtdmFsdWUtdHlwZSIsCisgICAgICAgICAgICAw
LCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc192YWx1ZV9pbml0KFdlYktpdERPTUNTU1Zh
bHVlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fQ1NTX1ZBTFVFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikg
V2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Nzc192
YWx1ZV9nZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTVmFsdWUqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfQ1NTX1ZBTFVFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NWYWx1
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5jc3NUZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9jc3NfdmFsdWVfc2V0X2Nzc190ZXh0KFdlYktpdERPTUNTU1ZhbHVl
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfQ1NTX1ZBTFVFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpDU1NWYWx1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0Q3NzVGV4dChjb252ZXJ0ZWRW
YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfY3Nz
X3ZhbHVlX3R5cGUoV2ViS2l0RE9NQ1NTVmFsdWUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfQ1NTX1ZBTFVFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NWYWx1ZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPmNzc1Zh
bHVlVHlwZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NT
VmFsdWUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xZDFjMmJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NWYWx1ZS5oCkBAIC0wLDAg
KzEsMTAyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQo
X19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vy
cm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3Rs
eS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01DU1NWYWx1ZV9oCisjZGVmaW5lIFdlYktp
dERPTUNTU1ZhbHVlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQ1NT
X1ZBTFVFICAgICAgICAgICAgKHdlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fQ1NTX1ZBTFVFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfVkFMVUUsIFdlYktpdERPTUNT
U1ZhbHVlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19WQUxV
RSwgV2ViS2l0RE9NQ1NTVmFsdWVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DU1NfVkFM
VUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0NTU19WQUxVRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ1NTX1ZBTFVFX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9DU1NfVkFMVUUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NTU19WQUxVRV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
Q1NTX1ZBTFVFLCBXZWJLaXRET01DU1NWYWx1ZUNsYXNzKSkKKworLyoqCisgKiBXRUJLSVRfRE9N
X0NTU19WQUxVRV9DU1NfSU5IRVJJVDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19WQUxV
RV9DU1NfSU5IRVJJVCAwCisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX1BSSU1J
VElWRV9WQUxVRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19WQUxVRV9DU1NfUFJJTUlU
SVZFX1ZBTFVFIDEKKworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19WQUxVRV9DU1NfVkFMVUVfTElT
VDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19WQUxVRV9DU1NfVkFMVUVfTElTVCAyCisK
Ky8qKgorICogV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX0NVU1RPTToKKyAqLworI2RlZmluZSBX
RUJLSVRfRE9NX0NTU19WQUxVRV9DU1NfQ1VTVE9NIDMKKworc3RydWN0IF9XZWJLaXRET01DU1NW
YWx1ZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVj
dCBfV2ViS2l0RE9NQ1NTVmFsdWVDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9jc3NfdmFsdWVf
Z2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3NfdmFsdWVfZ2V0X2Nzc190
ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1ZhbHVlCisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9j
c3NfdGV4dChXZWJLaXRET01DU1NWYWx1ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9j
c3NfdmFsdWVfc2V0X2Nzc190ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1ZhbHVlCisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9jc3NfdmFsdWVfc2V0X2Nzc190ZXh0KFdlYktpdERPTUNTU1Zh
bHVlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfY3NzX3ZhbHVlX3R5cGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NQ1NTVmFsdWUKKyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0CisqKi8KK1dFQktJ
VF9BUEkgZ3VzaG9ydAord2Via2l0X2RvbV9jc3NfdmFsdWVfZ2V0X2Nzc192YWx1ZV90eXBlKFdl
YktpdERPTUNTU1ZhbHVlKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTUNTU1ZhbHVlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNTU1ZhbHVlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI3MjI5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NQ1NTVmFsdWVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRl
X2gKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTVmFsdWUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NQ1NTVmFsdWUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01DU1NW
YWx1ZSogd3JhcENTU1ZhbHVlKFdlYkNvcmU6OkNTU1ZhbHVlKik7CitXZWJLaXRET01DU1NWYWx1
ZSoga2l0KFdlYkNvcmU6OkNTU1ZhbHVlKik7CitXZWJDb3JlOjpDU1NWYWx1ZSogY29yZShXZWJL
aXRET01DU1NWYWx1ZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01DU1NWYWx1ZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRh
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOGIyYTNiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5j
cHAKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01DaGFyYWN0ZXJEYXRhLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01DaGFyYWN0
ZXJEYXRhUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTUNoYXJhY3RlckRhdGEqIGtpdChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBv
YmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQ0hBUkFDVEVSX0RBVEEoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkNoYXJhY3RlckRhdGEq
IGNvcmUoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01DaGFyYWN0ZXJE
YXRhKiB3cmFwQ2hhcmFjdGVyRGF0YShXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DSEFS
QUNURVJfREFUQShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBLCAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9kaXNw
YXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCog
ZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQg
PSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygq
Y29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRp
b24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2FkZF9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkNoYXJhY3RlckRhdGEqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDaGFy
YWN0ZXJEYXRhKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisg
ICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkNoYXJhY3RlckRhdGEqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNw
YXRjaF9ldmVudCA9IHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFf
YWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSwgd2Via2l0X2RvbV9j
aGFyYWN0ZXJfZGF0YSwgV0VCS0lUX0RPTV9UWVBFX05PREUsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfREFUQSwKKyAgICBQUk9QX0xF
TkdUSCwKKyAgICBQUk9QX1BSRVZJT1VTX0VMRU1FTlRfU0lCTElORywKKyAgICBQUk9QX05FWFRf
RUxFTUVOVF9TSUJMSU5HLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jaGFyYWN0ZXJf
ZGF0YV9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25z
dCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01DaGFy
YWN0ZXJEYXRhKiBzZWxmID0gV0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQShvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0RBVEE6CisgICAgICAgIHdl
YmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc2V0X2RhdGEoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2NoYXJhY3Rlcl9kYXRhX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUNoYXJhY3RlckRhdGEqIHNlbGYgPSBXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfREFUQToKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9n
ZXRfZGF0YShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MRU5HVEg6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRh
X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJFVklP
VVNfRUxFTUVOVF9TSUJMSU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X3ByZXZpb3VzX2VsZW1lbnRfc2libGluZyhzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ORVhUX0VMRU1FTlRfU0lCTElORzoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9k
YXRhX2dldF9uZXh0X2VsZW1lbnRfc2libGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2NsYXNzX2luaXQoV2ViS2l0RE9NQ2hh
cmFjdGVyRGF0YUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9k
YXRhX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9EQVRBLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRhdGEiLAorICAgICAgICAgICAgIkNoYXJh
Y3RlckRhdGE6ZGF0YSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogQ2hhcmFjdGVy
RGF0YTpkYXRhIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiQ2hhcmFjdGVy
RGF0YTpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgQ2hhcmFjdGVyRGF0
YTpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BSRVZJT1VTX0VMRU1F
TlRfU0lCTElORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJw
cmV2aW91cy1lbGVtZW50LXNpYmxpbmciLAorICAgICAgICAgICAgIkNoYXJhY3RlckRhdGE6cHJl
dmlvdXMtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
RWxlbWVudCogQ2hhcmFjdGVyRGF0YTpwcmV2aW91cy1lbGVtZW50LXNpYmxpbmciLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ORVhUX0VMRU1FTlRfU0lCTElORywKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJuZXh0LWVsZW1lbnQtc2li
bGluZyIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyRGF0YTpuZXh0LWVsZW1lbnQtc2libGluZyIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIENoYXJhY3RlckRhdGE6
bmV4dC1lbGVtZW50LXNpYmxpbmciLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1F
TlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2luaXQoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YSogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3N1YnN0cmluZ19kYXRhKFdlYktpdERPTUNoYXJhY3Rl
ckRhdGEqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIGd1bG9uZyBsZW5ndGgsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2Vi
Q29yZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5zdWJzdHJpbmdEYXRhKG9mZnNldCwgbGVuZ3RoLCBlYykpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9hcHBl
bmRfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBjb25zdCBnY2hhciogZGF0YSwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0oZXJy
b3IpOworICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRGF0YSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChkYXRhKTsKKyAgICBpdGVtLT5hcHBlbmREYXRhKGNvbnZlcnRlZERhdGEpOworfQorCit2b2lk
IHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfaW5zZXJ0X2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YSogc2VsZiwgZ3Vsb25nIG9mZnNldCwgY29uc3QgZ2NoYXIqIGRhdGEsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoZGF0YSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvcik7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWREYXRhID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGRhdGEpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0
ZW0tPmluc2VydERhdGEob2Zmc2V0LCBjb252ZXJ0ZWREYXRhLCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lk
IHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZGVsZXRlX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YSogc2VsZiwgZ3Vsb25nIG9mZnNldCwgZ3Vsb25nIGxlbmd0aCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBpdGVtLT5kZWxldGVEYXRhKG9mZnNldCwgbGVuZ3RoLCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAg
fQorfQorCit2b2lkIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfcmVwbGFjZV9kYXRhKFdlYktp
dERPTUNoYXJhY3RlckRhdGEqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIGd1bG9uZyBsZW5ndGgsIGNv
bnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0NIQVJBQ1RFUl9EQVRBKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNoYXJh
Y3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkRGF0YSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5yZXBsYWNlRGF0YShvZmZzZXQsIGxlbmd0
aCwgY29udmVydGVkRGF0YSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rl
cl9kYXRhX3JlbW92ZShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0
ZXJEYXRhKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnJlbW92ZShlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Vi
a2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRhdGEoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRh
X3NldF9kYXRhKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFU
QShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGVycm9yKTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXREYXRhKGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z3Vsb25nIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2xlbmd0aChXZWJLaXRET01DaGFy
YWN0ZXJEYXRhKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9E
QVRBKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2NoYXJhY3Rl
cl9kYXRhX2dldF9wcmV2aW91c19lbGVtZW50X3NpYmxpbmcoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJr
aXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9uZXh0X2VsZW1lbnRfc2libGluZyhXZWJLaXRET01D
aGFyYWN0ZXJEYXRhKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RF
Ul9EQVRBKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGEuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lMzYzN2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFy
YWN0ZXJEYXRhLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUNoYXJh
Y3RlckRhdGFfaAorI2RlZmluZSBXZWJLaXRET01DaGFyYWN0ZXJEYXRhX2gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGUuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBICAgICAgICAgICAgKHdlYmtp
dF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DSEFS
QUNURVJfREFUQShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEsIFdlYktpdERPTUNoYXJhY3RlckRh
dGEpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DSEFSQUNU
RVJfREFUQSwgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0NIQVJBQ1RFUl9EQVRBKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DSEFSQUNURVJfREFUQSkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfQ0hBUkFDVEVSX0RBVEFfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEsIFdlYktp
dERPTUNoYXJhY3RlckRhdGFDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YSB7CisgICAgV2ViS2l0RE9NTm9kZSBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTUNoYXJhY3RlckRhdGFDbGFzcyB7CisgICAgV2ViS2l0RE9NTm9kZUNsYXNzIHBhcmVu
dF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2Rh
dGFfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9z
dWJzdHJpbmdfZGF0YToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DaGFyYWN0ZXJEYXRhCisgKiBA
b2Zmc2V0OiBBICNndWxvbmcKKyAqIEBsZW5ndGg6IEEgI2d1bG9uZworICogQGVycm9yOiAjR0Vy
cm9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc3Vic3RyaW5nX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YSogc2VsZiwgZ3Vsb25nIG9mZnNldCwgZ3Vsb25nIGxlbmd0aCwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfYXBwZW5kX2RhdGE6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YQorICogQGRhdGE6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jaGFy
YWN0ZXJfZGF0YV9hcHBlbmRfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBjb25z
dCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY2hh
cmFjdGVyX2RhdGFfaW5zZXJ0X2RhdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YQorICogQG9mZnNldDogQSAjZ3Vsb25nCisgKiBAZGF0YTogQSAjZ2NoYXIKKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2NoYXJhY3Rl
cl9kYXRhX2luc2VydF9kYXRhKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYsIGd1bG9uZyBv
ZmZzZXQsIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9kZWxldGVfZGF0YToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01DaGFyYWN0ZXJEYXRhCisgKiBAb2Zmc2V0OiBBICNndWxvbmcKKyAqIEBsZW5ndGg6IEEgI2d1
bG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fY2hhcmFjdGVyX2RhdGFfZGVsZXRlX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSog
c2VsZiwgZ3Vsb25nIG9mZnNldCwgZ3Vsb25nIGxlbmd0aCwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfcmVwbGFjZV9kYXRhOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAqIEBvZmZzZXQ6IEEgI2d1bG9uZworICogQGxl
bmd0aDogQSAjZ3Vsb25nCisgKiBAZGF0YTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3JlcGxh
Y2VfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBndWxvbmcgb2Zmc2V0LCBndWxv
bmcgbGVuZ3RoLCBjb25zdCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2RhdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NQ2hhcmFjdGVyRGF0YQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9kYXRhKFdlYktpdERPTUNo
YXJhY3RlckRhdGEqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFf
c2V0X2RhdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YQorICogQHZhbHVl
OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc2V0X2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUNoYXJhY3RlckRhdGEKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lU
X0FQSSBndWxvbmcKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2xlbmd0aChXZWJLaXRE
T01DaGFyYWN0ZXJEYXRhKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTUNoYXJhY3RlckRhdGFfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvblByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQ2hhcmFjdGVyRGF0YVByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDcxJQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0RXhjZXB0aW9uUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGFQcml2
YXRlLmgKaW5kZXggM2I4YjNjMC4uMWYzZDNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvblByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGFQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBA
QAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0
RE9NVGVzdEV4Y2VwdGlvblByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0RXhjZXB0aW9u
UHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUNoYXJhY3RlckRhdGFQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdEV4Y2Vw
dGlvbi5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0RXhjZXB0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9DaGFyYWN0ZXJEYXRhLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUNoYXJhY3RlckRhdGEuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01U
ZXN0RXhjZXB0aW9uKiB3cmFwVGVzdEV4Y2VwdGlvbihXZWJDb3JlOjpUZXN0RXhjZXB0aW9uKik7
Ci1XZWJLaXRET01UZXN0RXhjZXB0aW9uKiBraXQoV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiopOwot
V2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiogY29yZShXZWJLaXRET01UZXN0RXhjZXB0aW9uKik7CitX
ZWJLaXRET01DaGFyYWN0ZXJEYXRhKiB3cmFwQ2hhcmFjdGVyRGF0YShXZWJDb3JlOjpDaGFyYWN0
ZXJEYXRhKik7CitXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBraXQoV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YSopOworV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogY29yZShXZWJLaXRET01DaGFyYWN0ZXJE
YXRhKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RF
eGNlcHRpb25Qcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01DaGFyYWN0ZXJEYXRhUHJp
dmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGFVbnN0YWJsZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01DaGFyYWN0ZXJEYXRhVW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45NmYxNzNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhVW5zdGFi
bGUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTUNoYXJhY3RlckRhdGFVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERP
TUNoYXJhY3RlckRhdGFVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+
CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3Jl
bW92ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DaGFyYWN0ZXJEYXRhCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9yZW1vdmUoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSog
c2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2Rh
dGFfZ2V0X3ByZXZpb3VzX2VsZW1lbnRfc2libGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01D
aGFyYWN0ZXJEYXRhCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9wcmV2aW91c19l
bGVtZW50X3NpYmxpbmcoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmc6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YQorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9jaGFyYWN0ZXJf
ZGF0YV9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmcoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2Vs
Zik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUNoYXJhY3RlckRhdGFVbnN0YWJsZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUNvbW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Db21tZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDliODE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Db21tZW50LmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUNvbW1lbnQu
aCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUNv
bW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUNvbW1lbnQqIGtpdChX
ZWJDb3JlOjpDb21tZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQ09NTUVOVChr
aXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6Q29t
bWVudCogY29yZShXZWJLaXRET01Db21tZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q29tbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUNvbW1lbnQqIHdyYXBDb21t
ZW50KFdlYkNvcmU6OkNvbW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0NPTU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9DT01NRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9j
b21tZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpDb21tZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q29tbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fY29tbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpDb21t
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q29tbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2NvbW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6Q29tbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNvbW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQor
eworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fY29tbWVudF9kaXNwYXRj
aF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9jb21t
ZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVy
ID0gd2Via2l0X2RvbV9jb21tZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NQ29tbWVudCwgd2Via2l0X2RvbV9jb21tZW50LCBX
RUJLSVRfRE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jb21tZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NQ29t
bWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3RDbGFz
cyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY29tbWVudF9pbml0KFdlYktpdERPTUNv
bW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUNvbW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29tbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmFjYjU2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNvbW1l
bnQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdf
V0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNs
dWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01Db21tZW50X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NQ29tbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9DT01NRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fY29tbWVudF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NPTU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NPTU1FTlQsIFdl
YktpdERPTUNvbW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NPTU1FTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NP
TU1FTlQsIFdlYktpdERPTUNvbW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DT01N
RU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9DT01NRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DT01NRU5UX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9DT01NRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DT01NRU5UX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9DT01NRU5U
LCBXZWJLaXRET01Db21tZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUNvbW1lbnQgewor
ICAgIFdlYktpdERPTUNoYXJhY3RlckRhdGEgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01Db21tZW50Q2xhc3MgeworICAgIFdlYktpdERPTUNoYXJhY3RlckRhdGFDbGFz
cyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2NvbW1l
bnRfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01D
b21tZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29tbWVudFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29t
bWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzNiODU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Db21tZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQ29t
bWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01Db21tZW50UHJpdmF0ZV9oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ29t
bWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUNvbW1lbnQqIHdyYXBDb21t
ZW50KFdlYkNvcmU6OkNvbW1lbnQqKTsKK1dlYktpdERPTUNvbW1lbnQqIGtpdChXZWJDb3JlOjpD
b21tZW50Kik7CitXZWJDb3JlOjpDb21tZW50KiBjb3JlKFdlYktpdERPTUNvbW1lbnQqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NQ29tbWVudFByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01DdXN0b20uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b20uY3BwCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFt
ZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmNw
cApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01DdXN0b20uY3BwCmluZGV4IDY2MTFkZjAuLjMyNTE0MzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUN1c3RvbS5jcHAKQEAgLTE5LDkgKzE5LDkgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJLaXRET01DdXN0b20uaCIKIAotI2luY2x1ZGUgIkRPTVRva2Vu
TGlzdC5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NVG9rZW5MaXN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUgIldlYktpdERPTURPTVdp
bmRvd1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUN1c3RvbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5oCnJlbmFtZSB0byBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUN1c3Rv
bS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERP
TUN1c3RvbVVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUN1c3RvbVVuc3RhYmxlLmgKc2ltaWxhcml0eSBpbmRl
eCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0
RE9NQ3VzdG9tVW5zdGFibGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b21VbnN0YWJsZS5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01BcHBsaWNhdGlv
bkNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmE3NDU2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLmNwcApAQCAtMCwwICsx
LDIxOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTUFwcGxpY2F0aW9u
Q2FjaGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01f
QVBQTElDQVRJT05fQ0FDSEVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFLCBXZWJLaXRE
T01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZT4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNo
ZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01ET01BcHBsaWNhdGlv
bkNhY2hlKiBraXQoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSogb2JqKQoreworICAgIGlm
ICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01P
YmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9BUFBM
SUNBVElPTl9DQUNIRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01BcHBsaWNhdGlvbkNhY2hl
KG9iaik7Cit9CisKK1dlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqIGNvcmUoV2ViS2l0RE9N
RE9NQXBwbGljYXRpb25DYWNoZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01ET01BcHBsaWNhdGlv
bkNhY2hlKiB3cmFwRE9NQXBwbGljYXRpb25DYWNoZShXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNh
Y2hlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9ET01fQVBQTElDQVRJT05fQ0FDSEUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9kaXNwYXRjaF9ldmVudChXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQp
OworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29y
ZTo6RE9NQXBwbGljYXRpb25DYWNoZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9hZGRfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RE9NQXBwbGljYXRpb25DYWNoZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV9hcHBsaWNh
dGlvbl9jYWNoZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNv
cmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9kb21f
YXBwbGljYXRpb25fY2FjaGVfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9s
aXN0ZW5lciA9IHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2FkZF9ldmVudF9saXN0
ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9kb21f
YXBwbGljYXRpb25fY2FjaGVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERShXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLCB3ZWJraXRfZG9tX2Rv
bV9hcHBsaWNhdGlvbl9jYWNoZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRf
SU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9TVEFUVVMsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9HRVRfUFJJVkFU
RShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTURPTUFwcGxpY2F0aW9uQ2Fj
aGVQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fYXBwbGljYXRp
b25fY2FjaGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogc2VsZiA9IFdFQktJVF9E
T01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfU1RBVFVTOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZh
bHVlLCB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfc3RhdHVzKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlv
bl9jYWNoZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAg
ICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9hcHBsaWNh
dGlvbl9jYWNoZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NQXBw
bGljYXRpb25DYWNoZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9D
QUNIRV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2Jq
ZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYt
PmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9jbGFzc19pbml0KFdl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2Nh
Y2hlX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9kb21fYXBwbGljYXRpb25fY2FjaGVfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1NUQVRVUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAgICAgICAic3RhdHVz
IiwKKyAgICAgICAgICAgICJET01BcHBsaWNhdGlvbkNhY2hlOnN0YXR1cyIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGd1c2hvcnQgRE9NQXBwbGljYXRpb25DYWNoZTpzdGF0dXMiLAorICAgICAg
ICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVf
aW5pdChXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fQVBQ
TElDQVRJT05fQ0FDSEVfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJL
aXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21f
ZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3VwZGF0ZShXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hl
KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9BUFBM
SUNBVElPTl9DQUNIRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvcik7CisgICAgV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVt
LT51cGRhdGUoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9j
YWNoZV9zd2FwX2NhY2hlKFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX0FQUExJQ0FUSU9OX0NBQ0hF
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnN3YXBDYWNoZShl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2Fib3J0
KFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET01fQVBQTElDQVRJT05fQ0FDSEUoc2VsZikpOworICAgIFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+YWJvcnQo
KTsKK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfc3Rh
dHVzKFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpET01BcHBsaWNhdGlvbkNhY2hlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
c2hvcnQgcmVzdWx0ID0gaXRlbS0+c3RhdHVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUFwcGxpY2F0
aW9uQ2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRjNjM2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLmgKQEAgLTAsMCArMSwx
MjMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
RE9NQXBwbGljYXRpb25DYWNoZV9oCisjZGVmaW5lIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2Fj
aGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9BUFBMSUNBVElPTl9DQUNIRSAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRShvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQ
UExJQ0FUSU9OX0NBQ0hFLCBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9BUFBMSUNBVElP
Tl9DQUNIRSwgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZUNsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0RPTV9BUFBMSUNBVElPTl9DQUNIRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9OX0NB
Q0hFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fQVBQTElDQVRJT05fQ0FDSEVfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0RPTV9BUFBMSUNBVElPTl9DQUNIRSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQUExJQ0FU
SU9OX0NBQ0hFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9ET01fQVBQTElDQVRJT05fQ0FDSEUsIFdlYktpdERPTURPTUFw
cGxpY2F0aW9uQ2FjaGVDbGFzcykpCisKKy8qKgorICogV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJ
T05fQ0FDSEVfVU5DQUNIRUQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJ
T05fQ0FDSEVfVU5DQUNIRUQgMAorCisvKioKKyAqIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9O
X0NBQ0hFX0lETEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FD
SEVfSURMRSAxCisKKy8qKgorICogV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfQ0hF
Q0tJTkc6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfQ0hF
Q0tJTkcgMgorCisvKioKKyAqIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX0RPV05M
T0FESU5HOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX0RP
V05MT0FESU5HIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9V
UERBVEVSRUFEWToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNI
RV9VUERBVEVSRUFEWSA0CisKKy8qKgorICogV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FD
SEVfT0JTT0xFVEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FD
SEVfT0JTT0xFVEUgNQorCitzdHJ1Y3QgX1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUgewor
ICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktp
dERPTURPTUFwcGxpY2F0aW9uQ2FjaGVDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb21fYXBw
bGljYXRpb25fY2FjaGVfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
YXBwbGljYXRpb25fY2FjaGVfdXBkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTUFwcGxp
Y2F0aW9uQ2FjaGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNo
ZV91cGRhdGUoV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogc2VsZiwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3N3YXBfY2Fj
aGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZQorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3N3YXBfY2FjaGUoV2ViS2l0RE9N
RE9NQXBwbGljYXRpb25DYWNoZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2Fib3J0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTUFwcGxpY2F0aW9uQ2FjaGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfYWJvcnQo
V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fYXBwbGljYXRpb25fY2FjaGVfZ2V0X3N0YXR1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01BcHBsaWNhdGlvbkNhY2hlCisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9t
X2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfc3RhdHVzKFdlYktpdERPTURPTUFwcGxpY2F0aW9u
Q2FjaGUqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMzU0YjI0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25D
YWNoZVByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9ET01BcHBsaWNhdGlvbkNhY2hlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTURPTUFwcGxpY2F0aW9uQ2FjaGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRE
T01ET01BcHBsaWNhdGlvbkNhY2hlKiB3cmFwRE9NQXBwbGljYXRpb25DYWNoZShXZWJDb3JlOjpE
T01BcHBsaWNhdGlvbkNhY2hlKik7CitXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiBraXQo
V2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSopOworV2ViQ29yZTo6RE9NQXBwbGljYXRpb25D
YWNoZSogY29yZShXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NT
TmFtZXNwYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzdmZGQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01DU1NOYW1lc3BhY2UuY3BwCkBAIC0wLDAgKzEs
MTA0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9D
U1NfTkFNRVNQQUNFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RPTV9DU1NfTkFNRVNQQUNFLCBXZWJLaXRET01ET01DU1NO
YW1lc3BhY2VQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NQ1NTTmFtZXNw
YWNlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTUNTU05hbWVzcGFjZT4gY29yZU9i
amVjdDsKK30gV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTURPTUNTU05hbWVzcGFjZSoga2l0KFdlYkNvcmU6OkRPTUNTU05h
bWVzcGFjZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX0RPTV9DU1NfTkFNRVNQQUNFKHJldCk7CisKKyAgICByZXR1cm4gd3Jh
cERPTUNTU05hbWVzcGFjZShvYmopOworfQorCitXZWJDb3JlOjpET01DU1NOYW1lc3BhY2UqIGNv
cmUoV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NQ1NTTmFtZXNwYWNlKj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRE9NQ1NTTmFt
ZXNwYWNlKiB3cmFwRE9NQ1NTTmFtZXNwYWNlKFdlYkNvcmU6OkRPTUNTU05hbWVzcGFjZSogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fRE9NX0NTU19OQU1FU1BBQ0UoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET01fQ1NT
X05BTUVTUEFDRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01ET01DU1NOYW1l
c3BhY2UsIHdlYmtpdF9kb21fZG9tX2Nzc19uYW1lc3BhY2UsIFdFQktJVF9ET01fVFlQRV9PQkpF
Q1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX2Nzc19uYW1lc3BhY2VfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX0RPTV9DU1NfTkFNRVNQQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7
CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX2Nzc19uYW1lc3BhY2VfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21f
ZG9tX2Nzc19uYW1lc3BhY2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRp
ZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9k
b21fY3NzX25hbWVzcGFjZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9N
RE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX0NTU19OQU1FU1BB
Q0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RE9NQ1NTTmFtZXNwYWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNlX2NsYXNzX2luaXQoV2ViS2l0RE9NRE9N
Q1NTTmFtZXNwYWNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTUNTU05hbWVz
cGFjZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV9kb21fY3NzX25hbWVzcGFjZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFjZV9maW5hbGl6ZTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFjZV9pbml0KFdlYktpdERPTURPTUNTU05h
bWVzcGFjZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9ET01fQ1NTX05BTUVTUEFDRV9HRVRfUFJJVkFURShyZXF1ZXN0
KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUoKTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01ET01DU1NOYW1lc3BhY2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNw
YWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxNDRiMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01DU1NOYW1l
c3BhY2VfaAorI2RlZmluZSBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VfaAorCisjaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0RPTV9DU1NfTkFNRVNQQUNFICAgICAgICAgICAgKHdlYmtpdF9kb21f
ZG9tX2Nzc19uYW1lc3BhY2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQ1NT
X05BTUVTUEFDRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX0NTU19OQU1FU1BBQ0UsIFdlYktpdERPTURPTUNTU05h
bWVzcGFjZSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0NTU19OQU1FU1BBQ0VfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0RPTV9DU1NfTkFNRVNQQUNFLCBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19ET01fQ1NTX05BTUVTUEFDRShvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX0NTU19OQU1FU1BB
Q0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9DU1NfTkFNRVNQQUNFX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01f
Q1NTX05BTUVTUEFDRSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0NTU19OQU1FU1BBQ0VfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX0RPTV9DU1NfTkFNRVNQQUNFLCBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VDbGFzcykp
CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlIHsKKyAgICBXZWJLaXRET01PYmpl
Y3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01ET01DU1NOYW1lc3Bh
Y2VDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFjZV9nZXRfdHlwZSh2
b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTUNTU05hbWVzcGFjZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0RXZlbnRUYXJnZXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUu
aApzaW1pbGFyaXR5IGluZGV4IDcwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlLmgK
cmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZS5oCmluZGV4IGYwMWFjZDIuLmY0
YTE0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNT
U05hbWVzcGFjZVByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQ
cml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZV9oCisjaWZu
ZGVmIFdlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01E
T01DU1NOYW1lc3BhY2VQcml2YXRlX2gKIAotI2luY2x1ZGUgIlRlc3RFdmVudFRhcmdldC5oIgot
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0RPTUNTU05hbWVzcGFjZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01ET01DU1NOYW1lc3BhY2UuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0
RXZlbnRUYXJnZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0
Kik7Ci1XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIGtpdChXZWJDb3JlOjpUZXN0RXZlbnRUYXJn
ZXQqKTsKLVdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShXZWJLaXRET01UZXN0RXZlbnRU
YXJnZXQqKTsKK1dlYktpdERPTURPTUNTU05hbWVzcGFjZSogd3JhcERPTUNTU05hbWVzcGFjZShX
ZWJDb3JlOjpET01DU1NOYW1lc3BhY2UqKTsKK1dlYktpdERPTURPTUNTU05hbWVzcGFjZSoga2l0
KFdlYkNvcmU6OkRPTUNTU05hbWVzcGFjZSopOworV2ViQ29yZTo6RE9NQ1NTTmFtZXNwYWNlKiBj
b3JlKFdlYktpdERPTURPTUNTU05hbWVzcGFjZSopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
LSNlbmRpZiAvKiBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlX2ggKi8KKyNlbmRpZiAv
KiBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NSW1wbGVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwNmMxYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NSW1wbGVtZW50YXRpb24uY3BwCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRE9NSW1wbGVtZW50YXRpb24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01DU1NTdHlsZVNoZWV0
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTURvY3VtZW50VHlwZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRG9jdW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0lNUExFTUVOVEFUSU9OX0dF
VF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RP
TV9UWVBFX0RPTV9JTVBMRU1FTlRBVElPTiwgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2
YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRl
IHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb24+IGNvcmVPYmplY3Q7Cit9
IFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBraXQoV2ViQ29yZTo6RE9NSW1wbGVtZW50
YXRpb24qIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJT04ocmV0KTsKKworICAgIHJldHVybiB3cmFw
RE9NSW1wbGVtZW50YXRpb24ob2JqKTsKK30KKworV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb24q
IGNvcmUoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbio+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURP
TUltcGxlbWVudGF0aW9uKiB3cmFwRE9NSW1wbGVtZW50YXRpb24oV2ViQ29yZTo6RE9NSW1wbGVt
ZW50YXRpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTihnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0RPTV9JTVBMRU1FTlRBVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJL
aXRET01ET01JbXBsZW1lbnRhdGlvbiwgd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb24sIFdF
QktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX2ltcGxl
bWVudGF0aW9uX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01ET01J
bXBsZW1lbnRhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElP
Tl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9y
Z2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTURPTUlt
cGxlbWVudGF0aW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9t
X2ltcGxlbWVudGF0aW9uX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jb25zdHJ1Y3RvcihH
VHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1
Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFBy
b3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NSW1wbGVtZW50YXRp
b24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX2ltcGxl
bWVudGF0aW9uX2NsYXNzX2luaXQoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25DbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVj
dENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlKSk7CisgICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9u
X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2Rv
bV9pbXBsZW1lbnRhdGlvbl9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9k
b21faW1wbGVtZW50YXRpb25faW5pdChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogcmVxdWVz
dCkKK3sKKyAgICBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcg
KHByaXYpIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZSgpOworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9oYXNfZmVhdHVyZShXZWJLaXRET01ET01J
bXBsZW1lbnRhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIGZlYXR1cmUsIGNvbnN0IGdjaGFyKiB2
ZXJzaW9uKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1FTlRBVElPTihz
ZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGZlYXR1cmUsIEZBTFNFKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh2ZXJzaW9uLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
RE9NSW1wbGVtZW50YXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkRmVhdHVyZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChmZWF0dXJlKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWZXJzaW9uID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZlcnNpb24pOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0ZlYXR1cmUoY29udmVy
dGVkRmVhdHVyZSwgY29udmVydGVkVmVyc2lvbik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
V2ViS2l0RE9NRG9jdW1lbnRUeXBlKiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVh
dGVfZG9jdW1lbnRfdHlwZShXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHF1YWxpZmllZE5hbWUsIGNvbnN0IGdjaGFyKiBwdWJsaWNJZCwgY29uc3QgZ2NoYXIq
IHN5c3RlbUlkLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fSU1QTEVNRU5UQVRJT04oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHF1
YWxpZmllZE5hbWUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHB1YmxpY0lkLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzeXN0ZW1JZCwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRPTUltcGxlbWVu
dGF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFF1YWxpZmllZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHVibGljSWQgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgocHVibGljSWQpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN5c3RlbUlkID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHN5c3RlbUlkKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRUeXBlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlRG9jdW1lbnRUeXBlKGNvbnZlcnRlZFF1YWxpZmllZE5h
bWUsIGNvbnZlcnRlZFB1YmxpY0lkLCBjb252ZXJ0ZWRTeXN0ZW1JZCwgZWMpKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01E
b2N1bWVudCogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50KFdl
YktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJ
LCBjb25zdCBnY2hhciogcXVhbGlmaWVkTmFtZSwgV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBkb2N0
eXBlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fSU1Q
TEVNRU5UQVRJT04oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHF1YWxpZmll
ZE5hbWUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFkb2N0eXBlIHx8IFdFQktJVF9E
T01fSVNfRE9DVU1FTlRfVFlQRShkb2N0eXBlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9u
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5h
bWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
cXVhbGlmaWVkTmFtZSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBjb252ZXJ0ZWREb2N0
eXBlID0gV2ViS2l0Ojpjb3JlKGRvY3R5cGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZURvY3VtZW50KGNvbnZlcnRlZE5hbWVzcGFjZVVSSSwgY29u
dmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkRG9jdHlwZSwgZWMpKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01DU1NT
dHlsZVNoZWV0KiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfY3NzX3N0eWxl
X3NoZWV0KFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogdGl0
bGUsIGNvbnN0IGdjaGFyKiBtZWRpYSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX0lNUExFTUVOVEFUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbCh0aXRsZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobWVkaWEsIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBX
ZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUaXRsZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0aXRs
ZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTWVkaWEgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgobWVkaWEpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0
cjxXZWJDb3JlOjpDU1NTdHlsZVNoZWV0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+Y3JlYXRlQ1NTU3R5bGVTaGVldChjb252ZXJ0ZWRUaXRsZSwgY29udmVydGVkTWVkaWEsIGVj
KSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NSFRNTERvY3VtZW50KiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9j
cmVhdGVfaHRtbF9kb2N1bWVudChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogc2VsZiwgY29u
c3QgZ2NoYXIqIHRpdGxlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1F
TlRBVElPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodGl0bGUsIDApOwor
ICAgIFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFRpdGxlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHRpdGxlKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTERvY3VtZW50PiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlSFRNTERvY3VtZW50KGNvbnZlcnRlZFRpdGxlKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExZTFkMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24uaApAQCAtMCwwICsxLDExMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25faAorI2RlZmluZSBXZWJLaXRET01E
T01JbXBsZW1lbnRhdGlvbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0RPTV9JTVBMRU1FTlRBVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRh
dGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTihv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfRE9NX0lNUExFTUVOVEFUSU9OLCBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbikp
CisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0lNUExFTUVOVEFUSU9OX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fSU1Q
TEVNRU5UQVRJT04sIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uQ2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfRE9NX0lNUExFTUVOVEFUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04p
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1FTlRBVElPTl9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX0lN
UExFTUVOVEFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJT05fR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX0RPTV9JTVBMRU1FTlRBVElPTiwgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25DbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24geworICAgIFdlYktpdERP
TU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURPTUltcGxl
bWVudGF0aW9uQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2hh
c19mZWF0dXJlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uCisgKiBA
ZmVhdHVyZTogQSAjZ2NoYXIKKyAqIEB2ZXJzaW9uOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9tX2lt
cGxlbWVudGF0aW9uX2hhc19mZWF0dXJlKFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxm
LCBjb25zdCBnY2hhciogZmVhdHVyZSwgY29uc3QgZ2NoYXIqIHZlcnNpb24pOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVudF90eXBlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uCisgKiBAcXVhbGlmaWVkTmFtZTog
QSAjZ2NoYXIKKyAqIEBwdWJsaWNJZDogQSAjZ2NoYXIKKyAqIEBzeXN0ZW1JZDogQSAjZ2NoYXIK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NRG9jdW1lbnRUeXBlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnRU
eXBlKgord2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50X3R5cGUo
V2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBxdWFsaWZpZWRO
YW1lLCBjb25zdCBnY2hhciogcHVibGljSWQsIGNvbnN0IGdjaGFyKiBzeXN0ZW1JZCwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0
ZV9kb2N1bWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbgorICog
QG5hbWVzcGFjZVVSSTogKGFsbG93LW5vbmUpOiBBICNnY2hhcgorICogQHF1YWxpZmllZE5hbWU6
IEEgI2djaGFyCisgKiBAZG9jdHlwZTogKGFsbG93LW5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVu
dFR5cGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVu
dCoKK3dlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVudChXZWJLaXRE
T01ET01JbXBsZW1lbnRhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29u
c3QgZ2NoYXIqIHF1YWxpZmllZE5hbWUsIFdlYktpdERPTURvY3VtZW50VHlwZSogZG9jdHlwZSwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9u
X2NyZWF0ZV9jc3Nfc3R5bGVfc2hlZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NSW1wbGVt
ZW50YXRpb24KKyAqIEB0aXRsZTogQSAjZ2NoYXIKKyAqIEBtZWRpYTogQSAjZ2NoYXIKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NQ1NTU3R5bGVTaGVldAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNTU1N0eWxlU2hlZXQq
Cit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfY3NzX3N0eWxlX3NoZWV0KFdl
YktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0
IGdjaGFyKiBtZWRpYSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9t
X2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9odG1sX2RvY3VtZW50OgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTUltcGxlbWVudGF0aW9uCisgKiBAdGl0bGU6IEEgI2djaGFyCisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01IVE1MRG9jdW1lbnQqCit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlv
bl9jcmVhdGVfaHRtbF9kb2N1bWVudChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHRpdGxlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERP
TURPTUltcGxlbWVudGF0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRp
b25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjEzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Q
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlX2gKKwor
I2luY2x1ZGUgPFdlYkNvcmUvRE9NSW1wbGVtZW50YXRpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitX
ZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogd3JhcERPTUltcGxlbWVudGF0aW9uKFdlYkNvcmU6
OkRPTUltcGxlbWVudGF0aW9uKik7CitXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbioga2l0KFdl
YkNvcmU6OkRPTUltcGxlbWVudGF0aW9uKik7CitXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiog
Y29yZShXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01ET01NaW1lVHlwZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWU2YTU4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01NaW1lVHlwZS5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01ET01NaW1lVHlwZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTURPTVBsdWdpblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9ET01fTUlNRV9UWVBFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEUsIFdlYktpdERPTURPTU1p
bWVUeXBlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTU1pbWVUeXBlUHJp
dmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTU1pbWVUeXBlPiBjb3JlT2JqZWN0OworfSBX
ZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01ET01NaW1lVHlwZSoga2l0KFdlYkNvcmU6OkRPTU1pbWVUeXBlKiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX01J
TUVfVFlQRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01NaW1lVHlwZShvYmopOworfQorCitX
ZWJDb3JlOjpET01NaW1lVHlwZSogY29yZShXZWJLaXRET01ET01NaW1lVHlwZSogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTU1pbWVUeXBl
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NRE9NTWltZVR5cGUqIHdyYXBET01NaW1lVHlwZShXZWJDb3JlOjpET01NaW1lVHlwZSog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fRE9NX01JTUVfVFlQRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1F
X1RZUEUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRE9NTWltZVR5cGUsIHdl
YmtpdF9kb21fZG9tX21pbWVfdHlwZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7
CisgICAgUFJPUF8wLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX1NVRkZJWEVTLAorICAgIFBS
T1BfREVTQ1JJUFRJT04sCisgICAgUFJPUF9FTkFCTEVEX1BMVUdJTiwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01f
TUlNRV9UWVBFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0
RE9NRE9NTWltZVR5cGVQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9k
b21fbWltZV90eXBlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRET01ET01NaW1lVHlwZSogc2VsZiA9IFdFQktJVF9ET01fRE9NX01JTUVf
VFlQRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9t
X21pbWVfdHlwZV9nZXRfY29udGVudF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NVRkZJWEVTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X3N1ZmZpeGVzKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0RFU0NSSVBUSU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2Rlc2NyaXB0aW9uKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOQUJMRURfUExVR0lOOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRf
ZW5hYmxlZF9wbHVnaW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdl
YmtpdF9kb21fZG9tX21pbWVfdHlwZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJv
cGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX2RvbV9taW1lX3R5cGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERP
TURPTU1pbWVUeXBlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9HRVRf
UFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpET01NaW1lVHlwZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9kb21fbWltZV90eXBlX2NsYXNzX2luaXQoV2ViS2l0RE9NRE9NTWltZVR5cGVDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlKSk7CisgICAgZ29i
amVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9jb25zdHJ1
Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9kb21fbWltZV90
eXBlX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9kb21fbWltZV90eXBlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAg
ICAgICAgIkRPTU1pbWVUeXBlOnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
RE9NTWltZVR5cGU6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NVRkZJWEVTLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInN1ZmZpeGVzIiwKKyAgICAgICAgICAg
ICJET01NaW1lVHlwZTpzdWZmaXhlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBE
T01NaW1lVHlwZTpzdWZmaXhlcyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFU0NSSVBUSU9OLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIiwKKyAg
ICAgICAgICAgICJET01NaW1lVHlwZTpkZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdjaGFyKiBET01NaW1lVHlwZTpkZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VO
QUJMRURfUExVR0lOLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
ImVuYWJsZWQtcGx1Z2luIiwKKyAgICAgICAgICAgICJET01NaW1lVHlwZTplbmFibGVkLXBsdWdp
biIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVBsdWdpbiogRE9NTWltZVR5
cGU6ZW5hYmxlZC1wbHVnaW4iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVH
SU4sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfaW5pdChXZWJLaXRET01ET01NaW1lVHlwZSog
cmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0RPTV9NSU1FX1RZUEVfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2
KSBXZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
ZG9tX21pbWVfdHlwZV9nZXRfY29udGVudF90eXBlKFdlYktpdERPTURPTU1pbWVUeXBlKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9NSU1FX1RZUEUoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkRPTU1pbWVUeXBlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRf
c3VmZml4ZXMoV2ViS2l0RE9NRE9NTWltZVR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX01JTUVfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTWltZVR5
cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+c3VmZml4ZXMoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfZGVzY3JpcHRpb24oV2ViS2l0
RE9NRE9NTWltZVR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX01J
TUVfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTWltZVR5cGUqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+ZGVzY3JpcHRpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9N
RE9NUGx1Z2luKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2VuYWJsZWRfcGx1Z2luKFdl
YktpdERPTURPTU1pbWVUeXBlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9NSU1FX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTU1pbWVUeXBlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01QbHVnaW4+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5lbmFibGVkUGx1Z2luKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01ET01NaW1lVHlwZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmUyMjdjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVU
eXBlLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01ET01NaW1lVHlwZV9oCisjZGVmaW5lIFdlYktpdERPTURPTU1pbWVU
eXBlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFICAgICAgICAg
ICAgKHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0RPTV9NSU1FX1RZUEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEUsIFdlYktpdERPTURPTU1p
bWVUeXBlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01f
TUlNRV9UWVBFLCBXZWJLaXRET01ET01NaW1lVHlwZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0RPTV9NSU1FX1RZUEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEUpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0RPTV9NSU1FX1RZUEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEUpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0RPTV9NSU1FX1RZUEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEUsIFdlYktpdERPTURP
TU1pbWVUeXBlQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTURPTU1pbWVUeXBlIHsKKyAgICBX
ZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01E
T01NaW1lVHlwZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9jb250ZW50
X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGUKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfY29udGVudF90eXBlKFdlYktpdERP
TURPTU1pbWVUeXBlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVf
Z2V0X3N1ZmZpeGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTU1pbWVUeXBlCisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X3N1ZmZpeGVzKFdlYktp
dERPTURPTU1pbWVUeXBlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5
cGVfZ2V0X2Rlc2NyaXB0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTU1pbWVUeXBlCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2Rlc2NyaXB0
aW9uKFdlYktpdERPTURPTU1pbWVUeXBlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
bV9taW1lX3R5cGVfZ2V0X2VuYWJsZWRfcGx1Z2luOgorICogQHNlbGY6IEEgI1dlYktpdERPTURP
TU1pbWVUeXBlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01E
T01QbHVnaW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NRE9NUGx1Z2luKgord2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9lbmFibGVkX3Bs
dWdpbihXZWJLaXRET01ET01NaW1lVHlwZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01E
T01NaW1lVHlwZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01NaW1lVHlwZUFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43ODc5ZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5LmNw
cApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTU1pbWVUeXBlQXJyYXkuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9N
SU1FX1RZUEVfQVJSQVlfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRV9BUlJBWSwgV2ViS2l0RE9NRE9N
TWltZVR5cGVBcnJheVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01NaW1l
VHlwZUFycmF5UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk+
IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSoga2l0KFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXkqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQor
ICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0FSUkFZKHJldCk7CisKKyAg
ICByZXR1cm4gd3JhcERPTU1pbWVUeXBlQXJyYXkob2JqKTsKK30KKworV2ViQ29yZTo6RE9NTWlt
ZVR5cGVBcnJheSogY29yZShXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NTWltZVR5cGVBcnJh
eSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dl
YktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHdyYXBET01NaW1lVHlwZUFycmF5KFdlYkNvcmU6OkRP
TU1pbWVUeXBlQXJyYXkqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVfQVJSQVkoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFX0FSUkFZLCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9U
WVBFKFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXksIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9h
cnJheSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fbWltZV90eXBl
X2FycmF5X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01ET01NaW1l
VHlwZUFycmF5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWV9H
RVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTURPTU1pbWVU
eXBlQXJyYXlQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fbWlt
ZV90eXBlX2FycmF5X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiBzZWxmID0gV0VCS0lUX0RP
TV9ET01fTUlNRV9UWVBFX0FSUkFZKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2dldF9sZW5ndGgoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJh
eV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2Jq
ZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJy
YXlfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTURPTU1pbWVUeXBlQXJy
YXlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0FSUkFZX0dFVF9QUklW
QVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXkqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9jbGFzc19pbml0KFdlYktpdERPTURPTU1pbWVUeXBl
QXJyYXlDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVBy
aXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21f
bWltZV90eXBlX2FycmF5X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfZmluYWxpemU7CisgICAgZ29iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiRE9NTWltZVR5cGVB
cnJheTpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRE9NTWltZVR5cGVB
cnJheTpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZG9tX21pbWVfdHlwZV9hcnJheV9pbml0KFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHJlcXVl
c3QpCit7CisgICAgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0RPTV9NSU1FX1RZUEVfQVJSQVlfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3
IChwcml2KSBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZSgpOworfQorCitXZWJLaXRE
T01ET01NaW1lVHlwZSogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2l0ZW0oV2ViS2l0
RE9NRE9NTWltZVR5cGVBcnJheSogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9NSU1FX1RZUEVfQVJSQVkoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkRPTU1pbWVUeXBlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworV2ViS2l0RE9NRE9NTWltZVR5cGUqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9h
cnJheV9uYW1lZF9pdGVtKFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHNlbGYsIGNvbnN0IGdj
aGFyKiBuYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9NSU1FX1RZUEVfQVJS
QVkoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIDApOworICAgIFdl
YkNvcmU6OkRPTU1pbWVUeXBlQXJyYXkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NTWltZVR5cGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5uYW1lZEl0ZW0oY29udmVydGVkTmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX21p
bWVfdHlwZV9hcnJheV9nZXRfbGVuZ3RoKFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX01JTUVfVFlQRV9BUlJBWShzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TU1pbWVUeXBlQXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2Y2
MWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5LmgKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01ET01NaW1lVHlwZUFycmF5X2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheV9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRV9BUlJBWSAgICAgICAg
ICAgICh3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0FSUkFZKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFX0FS
UkFZLCBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01f
TUlNRV9UWVBFX0FSUkFZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFX0FSUkFZLCBXZWJLaXRET01E
T01NaW1lVHlwZUFycmF5Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX01JTUVfVFlQ
RV9BUlJBWShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRV9BUlJBWSkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfRE9NX01JTUVfVFlQRV9BUlJBWV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRV9BUlJBWSkpCisjZGVm
aW5lIFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQ
RV9BUlJBWSwgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheUNsYXNzKSkKKworc3RydWN0IF9XZWJL
aXRET01ET01NaW1lVHlwZUFycmF5IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5Q2xhc3MgeworICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfaXRlbToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01NaW1lVHlwZUFycmF5CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGUKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NTWltZVR5cGUq
Cit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfaXRlbShXZWJLaXRET01ET01NaW1lVHlw
ZUFycmF5KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX21p
bWVfdHlwZV9hcnJheV9uYW1lZF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTU1pbWVU
eXBlQXJyYXkKKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NTWltZVR5cGUqCit3ZWJraXRfZG9tX2RvbV9t
aW1lX3R5cGVfYXJyYXlfbmFtZWRfaXRlbShXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiBzZWxm
LCBjb25zdCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbWltZV90eXBl
X2FycmF5X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJh
eQorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9n
ZXRfbGVuZ3RoKFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHNlbGYpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyog
V2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5k
ZXggNjklCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NTWltZVR5cGVBcnJheVByaXZhdGUuaAppbmRleCA1N2MwMDI4Li4xNjZlOWZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVBy
aXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZV9oCi0j
ZGVmaW5lIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0
RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01ET01NaW1lVHlw
ZUFycmF5UHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0R2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0RPTU1pbWVUeXBlQXJyYXkuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRE9N
TWltZVR5cGVBcnJheS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RHbG9i
YWxPYmplY3QqIHdyYXBUZXN0R2xvYmFsT2JqZWN0KFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3Qq
KTsKLVdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIGtpdChXZWJDb3JlOjpUZXN0R2xvYmFsT2Jq
ZWN0Kik7Ci1XZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RHbG9i
YWxPYmplY3QqKTsKK1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHdyYXBET01NaW1lVHlwZUFy
cmF5KFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXkqKTsKK1dlYktpdERPTURPTU1pbWVUeXBlQXJy
YXkqIGtpdChXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5Kik7CitXZWJDb3JlOjpET01NaW1lVHlw
ZUFycmF5KiBjb3JlKFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqKTsKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGVfaCAq
LworI2VuZGlmIC8qIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYmNhNTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NTWltZVR5
cGVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvRE9NTWltZVR5cGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NRE9NTWltZVR5cGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01NaW1l
VHlwZSogd3JhcERPTU1pbWVUeXBlKFdlYkNvcmU6OkRPTU1pbWVUeXBlKik7CitXZWJLaXRET01E
T01NaW1lVHlwZSoga2l0KFdlYkNvcmU6OkRPTU1pbWVUeXBlKik7CitXZWJDb3JlOjpET01NaW1l
VHlwZSogY29yZShXZWJLaXRET01ET01NaW1lVHlwZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwMzg5MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAKQEAgLTAs
MCArMSwxOTEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSAiV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9E
T01fRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9ET01fTkFNRURfRkxPV19DT0xM
RUNUSU9OLCBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlIHsKKyNpZiBF
TkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKENTU19SRUdJT05TKQorfSBXZWJL
aXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZTsKKworI2lmIEVOQUJMRShDU1NfUkVH
SU9OUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24qIGtpdChXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX05B
TUVEX0ZMT1dfQ09MTEVDVElPTihyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01OYW1lZEZsb3dD
b2xsZWN0aW9uKG9iaik7Cit9CisKK1dlYkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIGNv
cmUoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24q
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiB3cmFwRE9NTmFtZWRGbG93Q29sbGVjdGlvbihX
ZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fTkFNRURfRkxPV19DT0xM
RUNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX05BTUVEX0ZMT1dfQ09MTEVD
VElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfUkVHSU9OUykKKworR19ERUZJ
TkVfVFlQRShXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLCB3ZWJraXRfZG9tX2RvbV9u
YW1lZF9mbG93X2NvbGxlY3Rpb24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNp
ZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShDU1NfUkVHSU9OUykK
KyAgICBwcml2LT5+V2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHNlbGYgPSBXRUJLSVRfRE9NX0RP
TV9OQU1FRF9GTE9XX0NPTExFQ1RJT04ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZh
bHVlLCB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fbmFtZWRf
Zmxvd19jb2xsZWN0aW9uX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9t
X25hbWVkX2Zsb3dfY29sbGVjdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJM
RShDU1NfUkVHSU9OUykKKyAgICBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTl9HRVRfUFJJVkFU
RShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpE
T01OYW1lZEZsb3dDb2xsZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9i
amVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKENTU19SRUdJT05TKQorICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29s
bGVjdGlvbl9jbGFzc19pbml0KFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25DbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21fbmFtZWRf
Zmxvd19jb2xsZWN0aW9uX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fZmluYWxpemU7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxl
Y3Rpb25fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAi
RE9NTmFtZWRGbG93Q29sbGVjdGlvbjpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
dWxvbmcgRE9NTmFtZWRGbG93Q29sbGVjdGlvbjpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19N
QVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9pbml0KFdl
YktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9N
RE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9OQU1F
RF9GTE9XX0NPTExFQ1RJT05fR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZSgpOworfQorCitXZWJLaXRET01X
ZWJLaXROYW1lZEZsb3cqIHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9pdGVt
KFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sK
KyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX05B
TUVEX0ZMT1dfQ09MTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTmFtZWRGbG93
Q29sbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6V2ViS2l0TmFtZWRGbG93PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRl
bShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ3NzIFJlZ2lvbnMiKQorICAg
IHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShDU1NfUkVHSU9OUykgKi8KK30KKworV2ViS2l0
RE9NV2ViS2l0TmFtZWRGbG93KiB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25f
bmFtZWRfaXRlbShXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBzZWxmLCBjb25zdCBn
Y2hhciogbmFtZSkKK3sKKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVj
dGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpXZWJLaXROYW1lZEZsb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5uYW1l
ZEl0ZW0oY29udmVydGVkTmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9Q
QVJBTShuYW1lKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDc3MgUmVn
aW9ucyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKENTU19SRUdJT05TKSAqLwor
fQorCitndWxvbmcgd2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2dldF9sZW5n
dGgoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiogc2VsZikKK3sKKyNpZiBFTkFCTEUo
Q1NTX1JFR0lPTlMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX05BTUVEX0ZMT1dfQ09M
TEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVu
Z3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNzcyBSZWdpb25zIikKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoQ1NTX1JF
R0lPTlMpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjBmMzllZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93
Q29sbGVjdGlvbi5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbl9oCisjZGVmaW5l
IFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25faAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04gICAgICAgICAgICAod2Via2l0X2RvbV9k
b21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
RE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX05BTUVEX0ZMT1dfQ09MTEVD
VElPTiwgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbikpCisjZGVmaW5lIFdFQktJVF9E
T01fRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX05BTUVEX0ZMT1dfQ09M
TEVDVElPTiwgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbkNsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04ob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9OQU1FRF9G
TE9XX0NPTExFQ1RJT04pKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9OQU1FRF9GTE9XX0NP
TExFQ1RJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9OQU1FRF9GTE9X
X0NPTExFQ1RJT04sIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25DbGFzcykpCisKK3N0
cnVjdCBfV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NTmFtZWRGbG93
Q29sbGVjdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxl
Y3Rpb25fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbmFtZWRfZmxv
d19jb2xsZWN0aW9uX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29s
bGVjdGlvbgorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTVdlYktpdE5hbWVkRmxvdworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqCit3ZWJraXRf
ZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25faXRlbShXZWJLaXRET01ET01OYW1lZEZsb3dD
b2xsZWN0aW9uKiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9t
X25hbWVkX2Zsb3dfY29sbGVjdGlvbl9uYW1lZF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURPTU5hbWVkRmxvd0NvbGxlY3Rpb24KKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93CisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVdlYktpdE5hbWVk
RmxvdyoKK3dlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9uYW1lZF9pdGVtKFdl
YktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fZ2V0X2xlbmd0
aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uCisgKgorICog
UmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2dldF9s
ZW5ndGgoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiogc2VsZik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAv
KiBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVj
dGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMzNzUx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
RE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oPgorI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKKworbmFt
ZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiB3cmFwRE9N
TmFtZWRGbG93Q29sbGVjdGlvbihXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKik7CitX
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBraXQoV2ViQ29yZTo6RE9NTmFtZWRGbG93
Q29sbGVjdGlvbiopOworV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbiogY29yZShXZWJL
aXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIEVOQUJMRShDU1NfUkVHSU9OUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTURP
TU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1
Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xODYzN2FkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW4uY3BwCkBA
IC0wLDAgKzEsMjM0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NUGx1Z2luLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NRE9NTWltZVR5cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NUGx1Z2lu
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252
ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fR0VUX1BSSVZBVEUo
b2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9N
X1BMVUdJTiwgV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTURPTVBsdWdpblByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpET01QbHVnaW4+
IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTVBsdWdpblByaXZhdGU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01ET01QbHVnaW4qIGtpdChXZWJDb3JlOjpET01QbHVnaW4qIG9i
aikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50
ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lU
X0RPTV9ET01fUExVR0lOKHJldCk7CisKKyAgICByZXR1cm4gd3JhcERPTVBsdWdpbihvYmopOwor
fQorCitXZWJDb3JlOjpET01QbHVnaW4qIGNvcmUoV2ViS2l0RE9NRE9NUGx1Z2luKiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NUGx1Z2lu
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NRE9NUGx1Z2luKiB3cmFwRE9NUGx1Z2luKFdlYkNvcmU6OkRPTVBsdWdpbiogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
RE9NX1BMVUdJTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU4sICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRE9NUGx1Z2luLCB3ZWJraXRfZG9tX2RvbV9w
bHVnaW4sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX05BTUUsCisgICAgUFJPUF9GSUxFTkFNRSwKKyAgICBQUk9QX0RFU0NSSVBUSU9OLAor
ICAgIFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2lu
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01ET01QbHVnaW5Qcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fUExVR0lOX0dFVF9QUklWQVRFKG9iamVjdCk7CisK
KyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZSgpOworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3BsdWdpbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmID0gV0VCS0lU
X0RPTV9ET01fUExVR0lOKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb21fcGx1Z2luX2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0ZJTEVOQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X2ZpbGVuYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RFU0NSSVBUSU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWxvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fY29uc3Ry
dWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0
Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2Jq
ZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fcGx1Z2luX3BhcmVudF9jbGFzcykt
PmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJv
cGVydGllcyk7CisKKyAgICBXZWJLaXRET01ET01QbHVnaW5Qcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9ET01fUExVR0lOX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVBsdWdpbio+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2luX2NsYXNzX2luaXQoV2ViS2l0RE9NRE9N
UGx1Z2luQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTVBsdWdpblByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21fcGx1Z2lu
X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2Rv
bV9wbHVnaW5fZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2RvbV9wbHVnaW5fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAg
ICAgICAgICAiRE9NUGx1Z2luOm5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
RE9NUGx1Z2luOm5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GSUxFTkFNRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmaWxlbmFtZSIsCisgICAgICAgICAgICAi
RE9NUGx1Z2luOmZpbGVuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERPTVBs
dWdpbjpmaWxlbmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFU0NSSVBUSU9OLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIiwKKyAgICAgICAg
ICAgICJET01QbHVnaW46ZGVzY3JpcHRpb24iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hh
ciogRE9NUGx1Z2luOmRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAg
ICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAg
ICAgICJET01QbHVnaW46bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIERP
TVBsdWdpbjpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZG9tX3BsdWdpbl9pbml0KFdlYktpdERPTURPTVBsdWdpbiogcmVxdWVzdCkKK3sKKyAgICBX
ZWJLaXRET01ET01QbHVnaW5Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fUExVR0lOX0dF
VF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NRE9NUGx1Z2luUHJp
dmF0ZSgpOworfQorCitXZWJLaXRET01ET01NaW1lVHlwZSogd2Via2l0X2RvbV9kb21fcGx1Z2lu
X2l0ZW0oV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9NX1BMVUdJTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9N
UGx1Z2luKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpE
T01NaW1lVHlwZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dl
YktpdERPTURPTU1pbWVUeXBlKiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fbmFtZWRfaXRlbShXZWJL
aXRET01ET01QbHVnaW4qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9QTFVHSU4oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKG5hbWUsIDApOworICAgIFdlYkNvcmU6OkRPTVBsdWdpbiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01NaW1lVHlwZT4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9kb21fcGx1Z2luX2dldF9uYW1lKFdlYktpdERPTURPTVBsdWdpbiogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fUExVR0lOKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpET01QbHVnaW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9maWxlbmFtZShXZWJL
aXRET01ET01QbHVnaW4qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1BM
VUdJTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NUGx1Z2luKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmZpbGVuYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2RvbV9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uKFdlYktpdERPTURPTVBsdWdpbiogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fUExVR0lOKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpET01QbHVnaW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZGVzY3JpcHRpb24oKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfbGVuZ3Ro
KFdlYktpdERPTURPTVBsdWdpbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fUExVR0lOKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01QbHVnaW4qIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTVBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNGU5Y2QK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbi5oCkBAIC0wLDAgKzEsMTIxIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTVBsdWdp
bl9oCisjZGVmaW5lIFdlYktpdERPTURPTVBsdWdpbl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfRE9NX1BMVUdJTiAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fUExVR0lOKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lO
LCBXZWJLaXRET01ET01QbHVnaW4pKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX0RPTV9QTFVHSU4sIFdlYktpdERPTURPTVBsdWdpbkNsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0RPTV9QTFVHSU4ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU4pKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0RPTV9QTFVHSU5fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU4pKQorI2RlZmluZSBXRUJLSVRfRE9N
X0RPTV9QTFVHSU5fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU4sIFdlYktpdERPTURPTVBsdWdpbkNsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01ET01QbHVnaW4geworICAgIFdlYktpdERPTU9iamVjdCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbkNsYXNzIHsK
KyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb21fcGx1Z2luX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NUGx1
Z2luCisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NTWltZVR5cGUqCit3ZWJraXRfZG9tX2RvbV9wbHVn
aW5faXRlbShXZWJLaXRET01ET01QbHVnaW4qIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb21fcGx1Z2luX25hbWVkX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NUGx1Z2luCisgKiBAbmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTU1pbWVUeXBlCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTU1pbWVUeXBlKgord2Via2l0X2RvbV9k
b21fcGx1Z2luX25hbWVkX2l0ZW0oV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmLCBjb25zdCBnY2hh
ciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9uYW1lOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVBsdWdpbgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9kb21fcGx1Z2luX2dldF9uYW1lKFdlYktpdERPTURPTVBsdWdpbiogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9maWxlbmFtZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01QbHVnaW4KKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9tX3Bs
dWdpbl9nZXRfZmlsZW5hbWUoV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9uOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTVBsdWdpbgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fcGx1Z2lu
X2dldF9kZXNjcmlwdGlvbihXZWJLaXRET01ET01QbHVnaW4qIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTURP
TVBsdWdpbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRf
bGVuZ3RoKFdlYktpdERPTURPTVBsdWdpbiogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01E
T01QbHVnaW5faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5BcnJheS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTVBsdWdpbkFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
NTk0MmNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5BcnJheS5jcHAKQEAgLTAs
MCArMSwxNzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01QbHVnaW5BcnJheS5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVBs
dWdpblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZX0dF
VF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RP
TV9UWVBFX0RPTV9QTFVHSU5fQVJSQVksIFdlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZSB7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01E
T01QbHVnaW5BcnJheVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01E
T01QbHVnaW5BcnJheSoga2l0KFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5KiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1BM
VUdJTl9BUlJBWShyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01QbHVnaW5BcnJheShvYmopOwor
fQorCitXZWJDb3JlOjpET01QbHVnaW5BcnJheSogY29yZShXZWJLaXRET01ET01QbHVnaW5BcnJh
eSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRPTVBsdWdpbkFycmF5Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHdyYXBET01QbHVnaW5BcnJheShX
ZWJDb3JlOjpET01QbHVnaW5BcnJheSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1BMVUdJTl9BUlJBWShnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU5fQVJSQVksICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXksIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJh
eSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01ET01QbHVnaW5BcnJh
eVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fQVJSQVlfR0VUX1BSSVZBVEUo
b2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9kb21fcGx1Z2luX2FycmF5X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dERPTURPTVBsdWdpbkFycmF5KiBzZWxmID0gV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RI
OgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fcGx1Z2lu
X2FycmF5X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlw
ZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAg
IFdlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX1BM
VUdJTl9BUlJBWV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpET01QbHVnaW5BcnJheSo+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2NsYXNzX2luaXQoV2ViS2l0
RE9NRE9NUGx1Z2luQXJyYXlDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NUGx1
Z2luQXJyYXlQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtp
dF9kb21fZG9tX3BsdWdpbl9hcnJheV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2ZpbmFsaXplOworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkRPTVBsdWdpbkFy
cmF5Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01QbHVnaW5BcnJh
eTpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9t
X3BsdWdpbl9hcnJheV9pbml0KFdlYktpdERPTURPTVBsdWdpbkFycmF5KiByZXF1ZXN0KQorewor
ICAgIFdlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9N
X1BMVUdJTl9BUlJBWV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktp
dERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZSgpOworfQorCitXZWJLaXRET01ET01QbHVnaW4qIHdl
YmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9pdGVtKFdlYktpdERPTURPTVBsdWdpbkFycmF5KiBz
ZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1BMVUdJ
Tl9BUlJBWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVBsdWdpbj4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURPTVBsdWdpbiog
d2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X25hbWVkX2l0ZW0oV2ViS2l0RE9NRE9NUGx1Z2lu
QXJyYXkqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9QTFVHSU5fQVJSQVkoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KG5hbWUsIDApOworICAgIFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVBsdWdpbj4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtp
dF9kb21fZG9tX3BsdWdpbl9hcnJheV9yZWZyZXNoKFdlYktpdERPTURPTVBsdWdpbkFycmF5KiBz
ZWxmLCBnYm9vbGVhbiByZWxvYWQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fUExVR0lO
X0FSUkFZKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01QbHVnaW5BcnJheSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5yZWZyZXNoKHJlbG9hZCk7Cit9CisKK2d1bG9uZyB3
ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfZ2V0X2xlbmd0aChXZWJLaXRET01ET01QbHVnaW5B
cnJheSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fUExVR0lOX0FSUkFZ
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01QbHVnaW5BcnJheSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5BcnJheS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01ET01QbHVnaW5BcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZm
ZWQzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5LmgKQEAgLTAsMCAr
MSw5OCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01ET01QbHVnaW5BcnJheV9oCisjZGVmaW5lIFdlYktpdERPTURPTVBsdWdpbkFycmF5X2gKKwor
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOX0FSUkFZICAgICAgICAgICAgKHdl
YmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0RPTV9QTFVHSU5fQVJSQVkob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU5fQVJSQVksIFdlYktpdERPTURP
TVBsdWdpbkFycmF5KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9ET01fUExVR0lOX0FSUkFZLCBXZWJLaXRET01ET01QbHVnaW5BcnJheUNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9QTFVHSU5fQVJSQVkob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU5fQVJS
QVkpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9QTFVHSU5fQVJSQVlfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9Q
TFVHSU5fQVJSQVkpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fQVJSQVlfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX0RPTV9QTFVHSU5fQVJSQVksIFdlYktpdERPTURPTVBsdWdpbkFycmF5Q2xhc3MpKQorCitz
dHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbkFycmF5IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFy
ZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01ET01QbHVnaW5BcnJheUNsYXNz
IHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2l0ZW06CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01QbHVnaW4KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NUGx1Z2luKgord2Vi
a2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2l0ZW0oV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHNl
bGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5
X25hbWVkX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkKKyAqIEBu
YW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NRE9NUGx1Z2luCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTURPTVBsdWdpbioKK3dlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9uYW1lZF9p
dGVtKFdlYktpdERPTURPTVBsdWdpbkFycmF5KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X3JlZnJlc2g6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkKKyAqIEByZWxvYWQ6IEEgI2dib29sZWFuCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
ZG9tX3BsdWdpbl9hcnJheV9yZWZyZXNoKFdlYktpdERPTURPTVBsdWdpbkFycmF5KiBzZWxmLCBn
Ym9vbGVhbiByZWxvYWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9n
ZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVBsdWdpbkFycmF5CisgKgorICog
UmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2dldF9sZW5ndGgoV2Vi
S2l0RE9NRE9NUGx1Z2luQXJyYXkqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NUGx1
Z2luQXJyYXlfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjczNzFiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01ET01QbHVnaW5BcnJheVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9ET01QbHVn
aW5BcnJheS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01QbHVnaW5BcnJheS5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURPTVBsdWdpbkFycmF5KiB3cmFwRE9N
UGx1Z2luQXJyYXkoV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqKTsKK1dlYktpdERPTURPTVBsdWdp
bkFycmF5KiBraXQoV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqKTsKK1dlYkNvcmU6OkRPTVBsdWdp
bkFycmF5KiBjb3JlKFdlYktpdERPTURPTVBsdWdpbkFycmF5Kik7Cit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVBsdWdpblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZmYxZTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVBsdWdpblByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTVBsdWdpblBy
aXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01ET01QbHVnaW5Qcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvRE9NUGx1Z2luLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURPTVBs
dWdpbi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURPTVBsdWdpbiogd3JhcERP
TVBsdWdpbihXZWJDb3JlOjpET01QbHVnaW4qKTsKK1dlYktpdERPTURPTVBsdWdpbioga2l0KFdl
YkNvcmU6OkRPTVBsdWdpbiopOworV2ViQ29yZTo6RE9NUGx1Z2luKiBjb3JlKFdlYktpdERPTURP
TVBsdWdpbiopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01E
T01QbHVnaW5Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU2VsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42NDBmNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TZWxlY3Rpb24uY3BwCkBAIC0w
LDAgKzEsNTM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NU2VsZWN0aW9uLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVJhbmdlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdF
QktJVF9ET01fRE9NX1NFTEVDVElPTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9ET01fU0VMRUNUSU9OLCBXZWJLaXRET01E
T01TZWxlY3Rpb25Qcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NU2VsZWN0
aW9uUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVNlbGVjdGlvbj4gY29yZU9iamVj
dDsKK30gV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTURPTVNlbGVjdGlvbioga2l0KFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogb2Jq
KQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRl
ciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRf
RE9NX0RPTV9TRUxFQ1RJT04ocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NU2VsZWN0aW9uKG9i
aik7Cit9CisKK1dlYkNvcmU6OkRPTVNlbGVjdGlvbiogY29yZShXZWJLaXRET01ET01TZWxlY3Rp
b24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpET01TZWxlY3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01ET01TZWxlY3Rpb24qIHdyYXBET01TZWxlY3Rpb24oV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fU0VMRUNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfRE9NX1NFTEVDVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRE
T01ET01TZWxlY3Rpb24sIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbiwgV0VCS0lUX0RPTV9UWVBF
X09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQU5DSE9SX05PREUsCisg
ICAgUFJPUF9BTkNIT1JfT0ZGU0VULAorICAgIFBST1BfRk9DVVNfTk9ERSwKKyAgICBQUk9QX0ZP
Q1VTX09GRlNFVCwKKyAgICBQUk9QX0lTX0NPTExBUFNFRCwKKyAgICBQUk9QX1JBTkdFX0NPVU5U
LAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX0JBU0VfTk9ERSwKKyAgICBQUk9QX0JBU0VfT0ZG
U0VULAorICAgIFBST1BfRVhURU5UX05PREUsCisgICAgUFJPUF9FWFRFTlRfT0ZGU0VULAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01ET01TZWxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9ET01fU0VMRUNUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBw
cml2LT5+V2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmID0gV0VCS0lU
X0RPTV9ET01fU0VMRUNUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfQU5DSE9SX05PREU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9hbmNob3Jfbm9kZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTkNIT1JfT0ZGU0VUOgorICAgICAgICBnX3Zh
bHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9hbmNob3Jf
b2Zmc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPQ1VTX05PREU6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2dldF9mb2N1c19ub2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0ZPQ1VTX09GRlNFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9k
b21fZG9tX3NlbGVjdGlvbl9nZXRfZm9jdXNfb2Zmc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0lTX0NPTExBUFNFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9pc19jb2xsYXBzZWQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkFOR0VfQ09VTlQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3Jhbmdl
X2NvdW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9n
ZXRfc2VsZWN0aW9uX3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QkFTRV9OT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
ZG9tX3NlbGVjdGlvbl9nZXRfYmFzZV9ub2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0JBU0VfT0ZGU0VUOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9iYXNlX29mZnNldChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9FWFRFTlRfTk9ERToKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2V4dGVudF9ub2RlKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VYVEVOVF9PRkZTRVQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0
X2V4dGVudF9vZmZzZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJv
cGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX2RvbV9zZWxlY3Rpb25fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERP
TURPTVNlbGVjdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TRUxFQ1RJT05fR0VU
X1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RE9NU2VsZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2RvbV9zZWxlY3Rpb25fY2xhc3NfaW5pdChXZWJLaXRET01ET01TZWxlY3Rpb25DbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
Z29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZSkpOworICAg
IGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29u
c3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX3Nl
bGVjdGlvbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQU5D
SE9SX05PREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiYW5j
aG9yLW5vZGUiLAorICAgICAgICAgICAgIkRPTVNlbGVjdGlvbjphbmNob3Itbm9kZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIERPTVNlbGVjdGlvbjphbmNob3Itbm9k
ZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FOQ0hPUl9PRkZTRVQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJhbmNob3Itb2Zmc2V0IiwK
KyAgICAgICAgICAgICJET01TZWxlY3Rpb246YW5jaG9yLW9mZnNldCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGd1bG9uZyBET01TZWxlY3Rpb246YW5jaG9yLW9mZnNldCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfRk9DVVNfTk9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJmb2N1cy1ub2RlIiwKKyAgICAgICAgICAgICJET01TZWxlY3Rp
b246Zm9jdXMtbm9kZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIERP
TVNlbGVjdGlvbjpmb2N1cy1ub2RlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfRk9DVVNfT0ZGU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAg
ICAiZm9jdXMtb2Zmc2V0IiwKKyAgICAgICAgICAgICJET01TZWxlY3Rpb246Zm9jdXMtb2Zmc2V0
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIERPTVNlbGVjdGlvbjpmb2N1cy1vZmZz
ZXQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lTX0NPTExBUFNFRCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtY29sbGFwc2VkIiwKKyAg
ICAgICAgICAgICJET01TZWxlY3Rpb246aXMtY29sbGFwc2VkIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2Jvb2xlYW4gRE9NU2VsZWN0aW9uOmlzLWNvbGxhcHNlZCIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1JBTkdFX0NPVU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAg
ICAgICAicmFuZ2UtY291bnQiLAorICAgICAgICAgICAgIkRPTVNlbGVjdGlvbjpyYW5nZS1jb3Vu
dCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01TZWxlY3Rpb246cmFuZ2UtY291
bnQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiRE9NU2Vs
ZWN0aW9uOnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRE9NU2VsZWN0aW9u
OnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CQVNFX05PREUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiYmFzZS1ub2RlIiwKKyAgICAgICAgICAgICJET01TZWxl
Y3Rpb246YmFzZS1ub2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSog
RE9NU2VsZWN0aW9uOmJhc2Utbm9kZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9E
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0JBU0VfT0ZGU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAg
ICAiYmFzZS1vZmZzZXQiLAorICAgICAgICAgICAgIkRPTVNlbGVjdGlvbjpiYXNlLW9mZnNldCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01TZWxlY3Rpb246YmFzZS1vZmZzZXQi
LAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VYVEVOVF9OT0RFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImV4dGVudC1ub2RlIiwKKyAgICAgICAg
ICAgICJET01TZWxlY3Rpb246ZXh0ZW50LW5vZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBX
ZWJLaXRET01Ob2RlKiBET01TZWxlY3Rpb246ZXh0ZW50LW5vZGUiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9FWFRFTlRfT0ZGU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNf
dWxvbmcoCisgICAgICAgICAgICAiZXh0ZW50LW9mZnNldCIsCisgICAgICAgICAgICAiRE9NU2Vs
ZWN0aW9uOmV4dGVudC1vZmZzZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRE9N
U2VsZWN0aW9uOmV4dGVudC1vZmZzZXQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9pbml0KFdlYktpdERPTURPTVNlbGVjdGlvbiogcmVx
dWVzdCkKK3sKKyAgICBXZWJLaXRET01ET01TZWxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9ET01fU0VMRUNUSU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikg
V2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9t
X3NlbGVjdGlvbl9jb2xsYXBzZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERP
TU5vZGUqIG5vZGUsIGd1bG9uZyBvZmZzZXQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
U0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9E
RShub2RlKSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUo
bm9kZSk7CisgICAgaXRlbS0+Y29sbGFwc2UoY29udmVydGVkTm9kZSwgb2Zmc2V0KTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29sbGFwc2VfdG9fZW5kKFdlYktpdERPTURP
TVNlbGVjdGlvbiogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fU0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAh
KmVycm9yKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+Y29s
bGFwc2VUb0VuZChlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9j
b2xsYXBzZV90b19zdGFydChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmNvbGxhcHNlVG9TdGFydChlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2
b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9kZWxldGVfZnJvbV9kb2N1bWVudChXZWJLaXRE
T01ET01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNU
SU9OKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+ZGVsZXRlRnJvbURvY3VtZW50KCk7Cit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb250YWluc19ub2RlKFdlYktpdERPTURPTVNlbGVj
dGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgZ2Jvb2xlYW4gYWxsb3dQYXJ0aWFsKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZiksIEZBTFNFKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jb250YWluc05vZGUoKmNvbnZlcnRlZE5vZGUs
IGFsbG93UGFydGlhbCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2RvbV9zZWxlY3Rpb25fc2VsZWN0X2FsbF9jaGlsZHJlbihXZWJLaXRET01ET01TZWxlY3Rpb24q
IHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
U0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9E
RShub2RlKSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUo
bm9kZSk7CisgICAgaXRlbS0+c2VsZWN0QWxsQ2hpbGRyZW4oKmNvbnZlcnRlZE5vZGUpOworfQor
Cit2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9leHRlbmQoV2ViS2l0RE9NRE9NU2VsZWN0
aW9uKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlLCBndWxvbmcgb2Zmc2V0LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24q
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVk
Tm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5leHRlbmQoKmNvbnZlcnRlZE5vZGUsIG9mZnNldCwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
K30KKworV2ViS2l0RE9NUmFuZ2UqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfcmFuZ2Vf
YXQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZiksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBX
ZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0UmFuZ2VBdChpbmRleCwgZWMpKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2
b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9yZW1vdmVfYWxsX3JhbmdlcyhXZWJLaXRET01E
T01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9O
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+cmVtb3ZlQWxsUmFuZ2VzKCk7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX2FkZF9yYW5nZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdl
YktpdERPTVJhbmdlKiByYW5nZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJ
T04oc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShyYW5n
ZSkpOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpSYW5nZSogY29udmVydGVkUmFuZ2UgPSBXZWJLaXQ6OmNvcmUocmFu
Z2UpOworICAgIGl0ZW0tPmFkZFJhbmdlKCpjb252ZXJ0ZWRSYW5nZSk7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX3NldF9iYXNlX2FuZF9leHRlbnQoV2ViS2l0RE9NRE9NU2Vs
ZWN0aW9uKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBiYXNlTm9kZSwgZ3Vsb25nIGJhc2VPZmZzZXQs
IFdlYktpdERPTU5vZGUqIGV4dGVudE5vZGUsIGd1bG9uZyBleHRlbnRPZmZzZXQpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTk9ERShiYXNlTm9kZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19OT0RFKGV4dGVudE5vZGUpKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rp
b24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVy
dGVkQmFzZU5vZGUgPSBXZWJLaXQ6OmNvcmUoYmFzZU5vZGUpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZEV4dGVudE5vZGUgPSBXZWJLaXQ6OmNvcmUoZXh0ZW50Tm9kZSk7CisgICAgaXRl
bS0+c2V0QmFzZUFuZEV4dGVudChjb252ZXJ0ZWRCYXNlTm9kZSwgYmFzZU9mZnNldCwgY29udmVy
dGVkRXh0ZW50Tm9kZSwgZXh0ZW50T2Zmc2V0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fc2V0X3Bvc2l0aW9uKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0
RE9NTm9kZSogbm9kZSwgZ3Vsb25nIG9mZnNldCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9TRUxFQ1RJT04oc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19O
T0RFKG5vZGUpKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29y
ZShub2RlKTsKKyAgICBpdGVtLT5zZXRQb3NpdGlvbihjb252ZXJ0ZWROb2RlLCBvZmZzZXQpOwor
fQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9lbXB0eShXZWJLaXRET01ET01TZWxl
Y3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+ZW1wdHkoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25f
bW9kaWZ5KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIGFsdGVyLCBj
b25zdCBnY2hhciogZGlyZWN0aW9uLCBjb25zdCBnY2hhciogZ3JhbnVsYXJpdHkpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKGFsdGVyKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRpcmVjdGlvbik7CisgICAgZ19yZXR1
cm5faWZfZmFpbChncmFudWxhcml0eSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEFsdGVyID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGFsdGVyKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRE
aXJlY3Rpb24gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGlyZWN0aW9uKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRHcmFudWxhcml0eSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChncmFudWxh
cml0eSk7CisgICAgaXRlbS0+bW9kaWZ5KGNvbnZlcnRlZEFsdGVyLCBjb252ZXJ0ZWREaXJlY3Rp
b24sIGNvbnZlcnRlZEdyYW51bGFyaXR5KTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX2dldF9hbmNob3Jfbm9kZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+YW5jaG9yTm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2FuY2hvcl9v
ZmZzZXQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+
YW5jaG9yT2Zmc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9kZSog
d2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9mb2N1c19ub2RlKFdlYktpdERPTURPTVNlbGVj
dGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5mb2N1c05vZGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9m
b2N1c19vZmZzZXQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVNl
bGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0g
aXRlbS0+Zm9jdXNPZmZzZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3
ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2lzX2NvbGxhcHNlZChXZWJLaXRET01ET01TZWxl
Y3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc0NvbGxhcHNlZCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25f
Z2V0X3JhbmdlX2NvdW50KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
T01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3Vs
dCA9IGl0ZW0tPnJhbmdlQ291bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciog
d2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fdHlwZShXZWJLaXRET01ET01T
ZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElP
TihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0
X2RvbV9kb21fc2VsZWN0aW9uX2dldF9iYXNlX25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmJhc2VOb2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYmFzZV9vZmZz
ZXQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9TRUxFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+YmFz
ZU9mZnNldCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtp
dF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZXh0ZW50X25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9u
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmV4dGVudE5vZGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9leHRl
bnRfb2Zmc2V0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01TZWxl
Y3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPmV4dGVudE9mZnNldCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVNlbGVjdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODE1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TVNlbGVjdGlvbi5oCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTVNlbGVjdGlvbl9oCisjZGVmaW5lIFdlYktpdERP
TURPTVNlbGVjdGlvbl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX1NFTEVDVElP
TiAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9ET01fU0VMRUNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fU0VMRUNUSU9OLCBXZWJL
aXRET01ET01TZWxlY3Rpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TRUxFQ1RJT05fQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX0RPTV9TRUxFQ1RJT04sIFdlYktpdERPTURPTVNlbGVjdGlvbkNsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9TRUxFQ1RJT04pKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TRUxFQ1RJT04pKQor
I2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TRUxFQ1RJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TRUxFQ1RJT04s
IFdlYktpdERPTURPTVNlbGVjdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01ET01TZWxl
Y3Rpb24geworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTURPTVNlbGVjdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2NvbGxhcHNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICogQG5v
ZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBvZmZzZXQ6IEEgI2d1bG9uZworICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fY29sbGFwc2UoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiBub2RlLCBndWxvbmcgb2Zmc2V0KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rp
b25fY29sbGFwc2VfdG9fZW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb2xsYXBzZV90b19lbmQoV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX2NvbGxhcHNlX3RvX3N0YXJ0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTURPTVNlbGVjdGlvbgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlv
bl9jb2xsYXBzZV90b19zdGFydChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZGVsZXRlX2Zyb21f
ZG9jdW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3Nl
bGVjdGlvbl9kZWxldGVfZnJvbV9kb2N1bWVudChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb250YWluc19ub2RlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICogQG5vZGU6IEEgI1dlYktpdERPTU5v
ZGUKKyAqIEBhbGxvd1BhcnRpYWw6IEEgI2dib29sZWFuCisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb250YWluc19ub2RlKFdlYktpdERPTURPTVNl
bGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgZ2Jvb2xlYW4gYWxsb3dQYXJ0aWFs
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fc2VsZWN0X2FsbF9jaGlsZHJl
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqIEBub2RlOiBBICNXZWJL
aXRET01Ob2RlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9zZWxlY3RfYWxsX2NoaWxkcmVuKFdlYktpdERP
TURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX2V4dGVuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01T
ZWxlY3Rpb24KKyAqIEBub2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb2Zmc2V0OiBBICNndWxv
bmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZXh0ZW5kKFdlYktpdERP
TURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgZ3Vsb25nIG9mZnNldCwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRf
cmFuZ2VfYXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKiBAaW5kZXg6
IEEgI2d1bG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01SYW5nZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01SYW5nZSoKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9n
ZXRfcmFuZ2VfYXQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBndWxvbmcgaW5kZXgsIEdF
cnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fcmVtb3Zl
X2FsbF9yYW5nZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9t
X3NlbGVjdGlvbl9yZW1vdmVfYWxsX3JhbmdlcyhXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9hZGRfcmFuZ2U6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKiBAcmFuZ2U6IEEgI1dlYktpdERPTVJhbmdl
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fZG9tX3NlbGVjdGlvbl9hZGRfcmFuZ2UoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxm
LCBXZWJLaXRET01SYW5nZSogcmFuZ2UpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVj
dGlvbl9zZXRfYmFzZV9hbmRfZXh0ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVj
dGlvbgorICogQGJhc2VOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAYmFzZU9mZnNldDogQSAj
Z3Vsb25nCisgKiBAZXh0ZW50Tm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGV4dGVudE9mZnNl
dDogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9zZXRfYmFzZV9hbmRfZXh0ZW50KFdlYktp
dERPTURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogYmFzZU5vZGUsIGd1bG9uZyBi
YXNlT2Zmc2V0LCBXZWJLaXRET01Ob2RlKiBleHRlbnROb2RlLCBndWxvbmcgZXh0ZW50T2Zmc2V0
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fc2V0X3Bvc2l0aW9uOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICogQG5vZGU6IEEgI1dlYktpdERPTU5v
ZGUKKyAqIEBvZmZzZXQ6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fc2V0X3Bvc2l0aW9u
KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgZ3Vsb25n
IG9mZnNldCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2VtcHR5OgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZW1wdHko
V2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fbW9kaWZ5OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICog
QGFsdGVyOiBBICNnY2hhcgorICogQGRpcmVjdGlvbjogQSAjZ2NoYXIKKyAqIEBncmFudWxhcml0
eTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX21vZGlmeShXZWJLaXRET01ET01TZWxlY3Rp
b24qIHNlbGYsIGNvbnN0IGdjaGFyKiBhbHRlciwgY29uc3QgZ2NoYXIqIGRpcmVjdGlvbiwgY29u
c3QgZ2NoYXIqIGdyYW51bGFyaXR5KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rp
b25fZ2V0X2FuY2hvcl9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9hbmNob3Jfbm9kZShXZWJLaXRET01ET01TZWxlY3Rp
b24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYW5jaG9y
X29mZnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1
cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2FuY2hvcl9vZmZzZXQoV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fZ2V0X2ZvY3VzX25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9u
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3
ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2ZvY3VzX25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0
aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2ZvY3Vz
X29mZnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1
cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2ZvY3VzX29mZnNldChXZWJL
aXRET01ET01TZWxlY3Rpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVj
dGlvbl9nZXRfaXNfY29sbGFwc2VkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlv
bgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0
X2lzX2NvbGxhcHNlZChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfcmFuZ2VfY291bnQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb21f
c2VsZWN0aW9uX2dldF9yYW5nZV9jb3VudChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX3R5cGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl90eXBlKFdlYktpdERPTURPTVNl
bGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9i
YXNlX25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX2Rv
bV9zZWxlY3Rpb25fZ2V0X2Jhc2Vfbm9kZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYmFzZV9vZmZzZXQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25n
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9iYXNlX29mZnNldChXZWJLaXRET01ET01TZWxlY3Rp
b24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZXh0ZW50
X25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fZ2V0X2V4dGVudF9ub2RlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9leHRlbnRfb2Zmc2V0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9u
ZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZXh0ZW50X29mZnNldChXZWJLaXRET01ET01TZWxl
Y3Rpb24qIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NU2VsZWN0aW9uX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TZWxlY3Rpb25Q
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzYzg3NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9N
U2VsZWN0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGVf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9ET01TZWxlY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NRE9NU2VsZWN0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NRE9NU2VsZWN0aW9uKiB3cmFwRE9NU2VsZWN0aW9uKFdlYkNvcmU6OkRPTVNlbGVjdGlvbiop
OworV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBraXQoV2ViQ29yZTo6RE9NU2VsZWN0aW9uKik7CitX
ZWJDb3JlOjpET01TZWxlY3Rpb24qIGNvcmUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURPTVNlbGVjdGlvblByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdMaXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3Ry
aW5nTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExYTBkZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTGlzdC5jcHAKQEAgLTAsMCArMSwxNjQg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01ET01TdHJpbmdMaXN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9N
U3RyaW5nTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5j
bHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU1RSSU5HX0xJ
U1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJL
SVRfRE9NX1RZUEVfRE9NX1NUUklOR19MSVNULCBXZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0
ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlIHsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdD4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9N
RE9NU3RyaW5nTGlzdFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01E
T01TdHJpbmdMaXN0KiBraXQoV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogb2JqKQoreworICAgIGlm
ICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01P
YmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9TVFJJ
TkdfTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01TdHJpbmdMaXN0KG9iaik7Cit9CisK
K1dlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGNvcmUoV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVN0
cmluZ0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01ET01TdHJpbmdMaXN0KiB3cmFwRE9NU3RyaW5nTGlzdChXZWJDb3JlOjpE
T01TdHJpbmdMaXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9ET01fU1RSSU5HX0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9ET01fU1RSSU5HX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NRE9NU3RyaW5nTGlzdCwgd2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3QsIFdFQktJVF9ET01f
VFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2ZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisK
KyAgICBwcml2LT5+V2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9n
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01ET01TdHJpbmdMaXN0KiBz
ZWxmID0gV0VCS0lUX0RPTV9ET01fU1RSSU5HX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0
X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9nZXRfbGVuZ3RoKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9zdHJpbmdf
bGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBH
T2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlz
dF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTElTVF9HRVRfUFJJVkFURShvYmpl
Y3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01TdHJp
bmdMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7
CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9z
dHJpbmdfbGlzdF9jbGFzc19pbml0KFdlYktpdERPTURPTVN0cmluZ0xpc3RDbGFzcyogcmVxdWVz
dENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENs
YXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUpKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfY29uc3RydWN0
b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX3N0cmluZ19s
aXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9kb21fc3RyaW5nX2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdU
SCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisg
ICAgICAgICAgICAiRE9NU3RyaW5nTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWxvbmcgRE9NU3RyaW5nTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9O
RywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2luaXQoV2ViS2l0RE9NRE9NU3RyaW5n
TGlzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAg
IG5ldyAocHJpdikgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUoKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2l0ZW0oV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCog
c2VsZiwgZ3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJ
TkdfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfY29udGFpbnMoV2ViS2l0RE9NRE9NU3RyaW5nTGlz
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cmluZykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fU1RSSU5HX0xJU1Qoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzdHJpbmcsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0cmluZyA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNv
bnRhaW5zKGNvbnZlcnRlZFN0cmluZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ3Vsb25n
IHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NRE9NU3RyaW5n
TGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU1RSSU5HX0xJU1Qo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTGlzdC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01TdHJpbmdMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3ZmVl
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTGlzdC5oCkBAIC0wLDAgKzEsODgg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9N
U3RyaW5nTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTURPTVN0cmluZ0xpc3RfaAorCisjaWZkZWYg
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTElTVCAgICAgICAgICAgICh3ZWJraXRfZG9t
X2RvbV9zdHJpbmdfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TVFJJ
TkdfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19MSVNULCBXZWJLaXRET01ET01TdHJpbmdMaXN0
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU1RSSU5HX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJ
TkdfTElTVCwgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0RPTV9TVFJJTkdfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19MSVNUKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19ET01fU1RSSU5HX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTElTVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX0xJU1Qs
IFdlYktpdERPTURPTVN0cmluZ0xpc3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NU3Ry
aW5nTGlzdCB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NRE9NU3RyaW5nTGlzdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2Rv
bV9zdHJpbmdfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9z
dHJpbmdfbGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVN0cmluZ0xpc3QKKyAq
IEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV9z
dHJpbmdfbGlzdF9pdGVtKFdlYktpdERPTURPTVN0cmluZ0xpc3QqIHNlbGYsIGd1bG9uZyBpbmRl
eCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfY29udGFpbnM6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NU3RyaW5nTGlzdAorICogQHN0cmluZzogQSAjZ2NoYXIKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfY29udGFp
bnMoV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cmluZyk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01ET01TdHJpbmdMaXN0CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0
X2RvbV9kb21fc3RyaW5nX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01ET01TdHJpbmdMaXN0KiBz
ZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTVN0cmluZ0xpc3RfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjM5MTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01TdHJp
bmdMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvRE9NU3RyaW5nTGlzdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01ET01TdHJpbmdMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NRE9NU3RyaW5nTGlzdCogd3JhcERPTVN0cmluZ0xpc3QoV2ViQ29yZTo6RE9NU3RyaW5nTGlz
dCopOworV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCoga2l0KFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Qq
KTsKK1dlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGNvcmUoV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01TdHJpbmdM
aXN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ01hcC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTVN0cmluZ01hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1
M2M3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFwLmNwcApAQCAtMCwwICsx
LDEwNCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVN0cmluZ01hcC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TURPTVN0cmluZ01hcFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU1RSSU5H
X01BUF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9ET01fU1RSSU5HX01BUCwgV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0
ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGUgeworICAg
IFJlZlB0cjxXZWJDb3JlOjpET01TdHJpbmdNYXA+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURP
TVN0cmluZ01hcFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01ET01T
dHJpbmdNYXAqIGtpdChXZWJDb3JlOjpET01TdHJpbmdNYXAqIG9iaikKK3sKKyAgICBpZiAoIW9i
aikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0
Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fU1RSSU5HX01B
UChyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01TdHJpbmdNYXAob2JqKTsKK30KKworV2ViQ29y
ZTo6RE9NU3RyaW5nTWFwKiBjb3JlKFdlYktpdERPTURPTVN0cmluZ01hcCogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVN0cmluZ01hcCo+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTURPTVN0cmluZ01hcCogd3JhcERPTVN0cmluZ01hcChXZWJDb3JlOjpET01TdHJpbmdNYXAq
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0RPTV9TVFJJTkdfTUFQKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX1NU
UklOR19NQVAsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRE9NU3RyaW5nTWFw
LCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9ET01fU1RSSU5HX01BUF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJp
di0+fldlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2NvbnN0cnVj
dG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENv
bnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVj
dCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3N0cmluZ19tYXBfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX0RPTV9TVFJJTkdfTUFQX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+
Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVN0cmluZ01hcCo+KFdFQktJVF9E
T01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fc3RyaW5nX21hcF9jbGFzc19p
bml0KFdlYktpdERPTURPTVN0cmluZ01hcENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRE
T01ET01TdHJpbmdNYXBQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9
IHdlYmtpdF9kb21fZG9tX3N0cmluZ19tYXBfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX3N0cmluZ19tYXBfZmluYWxpemU7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3N0cmluZ19tYXBfaW5pdChXZWJLaXRET01ET01TdHJp
bmdNYXAqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fRE9NX1NUUklOR19NQVBfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAg
bmV3IChwcml2KSBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RJdGVyYWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdNYXAuaApzaW1pbGFyaXR5IGluZGV4IDU2
JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0SXRlcmFibGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdNYXAuaApp
bmRleCA3Yzk1YzZhLi5iZTgyNTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SXRlcmFibGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTVN0cmluZ01hcC5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0SXRlcmFibGVfaAotI2RlZmlu
ZSBXZWJLaXRET01UZXN0SXRlcmFibGVfaAorI2lmbmRlZiBXZWJLaXRET01ET01TdHJpbmdNYXBf
aAorI2RlZmluZSBXZWJLaXRET01ET01TdHJpbmdNYXBfaAogCiAjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCiAKQEAgLTI5LDI1ICsyOSwyNSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAK
LSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSVRFUkFCTEUgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X2l0ZXJhYmxlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9J
VEVSQUJMRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JVEVSQUJMRSwgV2ViS2l0RE9NVGVzdEl0ZXJhYmxlKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lURVJBQkxFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0lURVJBQkxF
LCBXZWJLaXRET01UZXN0SXRlcmFibGVDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X0lURVJBQkxFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9URVNUX0lURVJBQkxFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX0lURVJBQkxFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0lURVJBQkxFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0lURVJBQkxFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0lURVJBQkxFLCBXZWJLaXRET01UZXN0SXRlcmFi
bGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX01BUCAgICAgICAg
ICAgICh3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fRE9NX1NUUklOR19NQVAob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTUFQLCBXZWJLaXRET01E
T01TdHJpbmdNYXApKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTUFQX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9ET01fU1RSSU5HX01BUCwgV2ViS2l0RE9NRE9NU3RyaW5nTWFwQ2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfRE9NX1NUUklOR19NQVAob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTUFQKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19ET01fU1RSSU5HX01BUF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19NQVApKQor
I2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTUFQX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX01B
UCwgV2ViS2l0RE9NRE9NU3RyaW5nTWFwQ2xhc3MpKQogCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RJ
dGVyYWJsZSB7CitzdHJ1Y3QgX1dlYktpdERPTURPTVN0cmluZ01hcCB7CiAgICAgV2ViS2l0RE9N
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKIH07CiAKLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEl0ZXJh
YmxlQ2xhc3Mgeworc3RydWN0IF9XZWJLaXRET01ET01TdHJpbmdNYXBDbGFzcyB7CiAgICAgV2Vi
S2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQot
d2Via2l0X2RvbV90ZXN0X2l0ZXJhYmxlX2dldF90eXBlKHZvaWQpOword2Via2l0X2RvbV9kb21f
c3RyaW5nX21hcF9nZXRfdHlwZSh2b2lkKTsKIAogR19FTkRfREVDTFMKIAogI2VuZGlmIC8qIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RJdGVy
YWJsZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NU3RyaW5nTWFwX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ZjljNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NU3RyaW5n
TWFwUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9ET01TdHJpbmdNYXAuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NRE9NU3RyaW5nTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRE9N
U3RyaW5nTWFwKiB3cmFwRE9NU3RyaW5nTWFwKFdlYkNvcmU6OkRPTVN0cmluZ01hcCopOworV2Vi
S2l0RE9NRE9NU3RyaW5nTWFwKiBraXQoV2ViQ29yZTo6RE9NU3RyaW5nTWFwKik7CitXZWJDb3Jl
OjpET01TdHJpbmdNYXAqIGNvcmUoV2ViS2l0RE9NRE9NU3RyaW5nTWFwKik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3Qu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MTI2ODUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVRva2VuTGlzdC5jcHAKQEAgLTAsMCArMSwyODcgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01ET01Ub2tlbkxpc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01Ub2tlbkxpc3RQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1RPS0VOX0xJU1RfR0VUX1BSSVZB
VEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVf
RE9NX1RPS0VOX0xJU1QsIFdlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGUpCisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6RE9NVG9rZW5MaXN0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2
YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBraXQo
V2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2Jq
KSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1RPS0VOX0xJU1QocmV0KTsKKworICAg
IHJldHVybiB3cmFwRE9NVG9rZW5MaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6OkRPTVRva2VuTGlz
dCogY29yZShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01Ub2tlbkxpc3QqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01ET01Ub2tlbkxp
c3QqIHdyYXBET01Ub2tlbkxpc3QoV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fVE9L
RU5fTElTVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURPTVRva2VuTGlzdCwgd2Via2l0X2RvbV9k
b21fdG9rZW5fbGlzdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfTEVOR1RILAorICAgIFBST1BfVkFMVUUsCit9OworCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01f
VE9LRU5fTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RD
YWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktp
dERPTURPTVRva2VuTGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X2RvbV90b2tlbl9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rfc2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmID0gV0VCS0lUX0RP
TV9ET01fVE9LRU5fTElTVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3Nl
dF92YWx1ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmID0gV0VCS0lUX0RPTV9E
T01fVE9LRU5fTElTVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtp
dF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9nZXRfdmFsdWUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfY29uc3RydWN0b3Io
R1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3Ry
dWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0g
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fRE9NX1RPS0VOX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NVG9rZW5MaXN0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2NsYXNzX2luaXQo
V2ViS2l0RE9NRE9NVG9rZW5MaXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURP
TVRva2VuTGlzdFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Vi
a2l0X2RvbV9kb21fdG9rZW5fbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rfc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kb21fdG9r
ZW5fbGlzdF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAg
ICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAg
ICJET01Ub2tlbkxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIERP
TVRva2VuTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVF
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZhbHVlIiwKKyAg
ICAgICAgICAgICJET01Ub2tlbkxpc3Q6dmFsdWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIERPTVRva2VuTGlzdDp2YWx1ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2RvbV90b2tlbl9saXN0X2luaXQoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiByZXF1ZXN0KQorewor
ICAgIFdlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9U
T0tFTl9MSVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9N
RE9NVG9rZW5MaXN0UHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21fdG9rZW5f
bGlzdF9pdGVtKFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9UT0tFTl9MSVNUKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpET01Ub2tlbkxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aXRlbShpbmRleCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rf
Y29udGFpbnMoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBjb25zdCBnY2hhciogdG9rZW4p
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1RPS0VOX0xJU1Qoc2VsZiksIEZBTFNF
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh0b2tlbiwgRkFMU0UpOworICAgIFdlYkNvcmU6
OkRPTVRva2VuTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRUb2tlbiA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0b2tlbik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+Y29udGFpbnMoY29udmVydGVkVG9rZW4pOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9hZGQoV2ViS2l0
RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBHRXJyb3IqKiBlcnJvciwgLi4uKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX1RPS0VOX0xJU1Qoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRPTVRva2VuTGlzdCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICB2YV9saXN0IHZhcmlhZGljUGFyYW1ldGVyTGlzdDsKKyAg
ICBWZWN0b3I8V1RGOjpTdHJpbmc+IGNvbnZlcnRlZFRva2VuczsKKyAgICB2YV9zdGFydCh2YXJp
YWRpY1BhcmFtZXRlckxpc3QsIGVycm9yKTsKKyAgICB3aGlsZSAoZ2NoYXIqIHZhcmlhZGljUGFy
YW1ldGVyID0gdmFfYXJnKHZhcmlhZGljUGFyYW1ldGVyTGlzdCwgZ2NoYXIqKSkKKyAgICAgICAg
Y29udmVydGVkVG9rZW5zLmFwcGVuZChXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFyaWFkaWNQYXJh
bWV0ZXIpKTsKKyAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5hZGQoV1RGTW92ZShjb252ZXJ0ZWRU
b2tlbnMpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfcmVt
b3ZlKFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwgR0Vycm9yKiogZXJyb3IsIC4uLikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9UT0tFTl9MSVNUKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpET01Ub2tlbkxpc3Qq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgdmFfbGlzdCB2YXJpYWRpY1BhcmFtZXRl
ckxpc3Q7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBjb252ZXJ0ZWRUb2tlbnM7CisgICAgdmFf
c3RhcnQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0LCBlcnJvcik7CisgICAgd2hpbGUgKGdjaGFyKiB2
YXJpYWRpY1BhcmFtZXRlciA9IHZhX2FyZyh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIGdjaGFyKikp
CisgICAgICAgIGNvbnZlcnRlZFRva2Vucy5hcHBlbmQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
cmlhZGljUGFyYW1ldGVyKSk7CisgICAgdmFfZW5kKHZhcmlhZGljUGFyYW1ldGVyTGlzdCk7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+cmVtb3ZlKFdURk1v
dmUoY29udmVydGVkVG9rZW5zKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9k
b21fdG9rZW5fbGlzdF90b2dnbGUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBjb25zdCBn
Y2hhciogdG9rZW4sIGdib29sZWFuIGZvcmNlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHRva2VuLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01Ub2tlbkxpc3QqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVG9rZW4g
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodG9rZW4pOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnRvZ2dsZShjb252ZXJ0ZWRU
b2tlbiwgZm9yY2UsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2RvbV90b2tlbl9saXN0X3JlcGxhY2UoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxm
LCBjb25zdCBnY2hhciogdG9rZW4sIGNvbnN0IGdjaGFyKiBuZXdUb2tlbiwgR0Vycm9yKiogZXJy
b3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh0b2tlbik7CisgICAgZ19yZXR1cm5faWZfZmFpbChuZXdUb2tlbik7
CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6
RE9NVG9rZW5MaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFRva2VuID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRva2VuKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWROZXdUb2tlbiA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuZXdUb2tl
bik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+cmVwbGFj
ZShjb252ZXJ0ZWRUb2tlbiwgY29udmVydGVkTmV3VG9rZW4sIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2d1bG9u
ZyB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NRE9NVG9rZW5M
aXN0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9UT0tFTl9MSVNUKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01Ub2tlbkxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF92YWx1ZShX
ZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9NX1RPS0VOX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVRva2VuTGlzdCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rfc2V0X3ZhbHVlKFdlYktpdERPTURPTVRva2VuTGlzdCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1RP
S0VOX0xJU1Qoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkRPTVRva2VuTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0VmFsdWUoY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TVRva2VuTGlzdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hMzIwZmExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxp
c3QuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01ET01Ub2tlbkxpc3RfaAorI2RlZmluZSBXZWJLaXRET01ET01Ub2tl
bkxpc3RfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNUICAgICAg
ICAgICAgKHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9ET01fVE9LRU5fTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QsIFdlYktpdERP
TURPTVRva2VuTGlzdCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1RPS0VOX0xJU1RfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0RPTV9UT0tFTl9MSVNULCBXZWJLaXRET01ET01Ub2tlbkxpc3RDbGFzcykKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9UT0tFTl9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1RPS0VOX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9M
SVNULCBXZWJLaXRET01ET01Ub2tlbkxpc3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRE9N
VG9rZW5MaXN0IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01ET01Ub2tlbkxpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9k
b21fdG9rZW5fbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV90
b2tlbl9saXN0X2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0CisgKiBA
aW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fdG9r
ZW5fbGlzdF9pdGVtKFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2NvbnRhaW5zOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVRva2VuTGlzdAorICogQHRva2VuOiBBICNnY2hhcgorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2NvbnRhaW5zKFdlYktp
dERPTURPTVRva2VuTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIHRva2VuKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2FkZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01U
b2tlbkxpc3QKKyAqIEBlcnJvcjogI0dFcnJvcgorICogQC4uLjogbGlzdCBvZiAjZ2NoYXIgZW5k
ZWQgYnkgJU5VTEwuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfYWRkKFdlYktpdERPTURPTVRva2VuTGlz
dCogc2VsZiwgR0Vycm9yKiogZXJyb3IsIC4uLik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
dG9rZW5fbGlzdF9yZW1vdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0Cisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqIEAuLi46IGxpc3Qgb2YgI2djaGFyIGVuZGVkIGJ5ICVOVUxM
LgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2RvbV90b2tlbl9saXN0X3JlbW92ZShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYs
IEdFcnJvcioqIGVycm9yLCAuLi4pOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xp
c3RfdG9nZ2xlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVRva2VuTGlzdAorICogQHRva2Vu
OiBBICNnY2hhcgorICogQGZvcmNlOiBBICNnYm9vbGVhbgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfdG9nZ2xl
KFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIHRva2VuLCBnYm9vbGVh
biBmb3JjZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3Rva2Vu
X2xpc3RfcmVwbGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqIEB0
b2tlbjogQSAjZ2NoYXIKKyAqIEBuZXdUb2tlbjogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2RvbV90b2tlbl9saXN0X3JlcGxhY2UoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxm
LCBjb25zdCBnY2hhciogdG9rZW4sIGNvbnN0IGdjaGFyKiBuZXdUb2tlbiwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X2xlbmd0aDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqCisgKiBSZXR1cm5zOiBBICNndWxv
bmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3
ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NRE9NVG9rZW5MaXN0
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF92YWx1ZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X3ZhbHVlKFdlYktpdERPTURPTVRva2VuTGlz
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9zZXRfdmFsdWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fZG9tX3Rva2VuX2xpc3Rfc2V0X3ZhbHVlKFdlYktpdERPTURPTVRva2VuTGlzdCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTVRva2VuTGlz
dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9N
VG9rZW5MaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2
YTE0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGUuaApAQCAt
MCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTURPTVRva2VuTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01ET01Ub2tlbkxp
c3RQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRE9NVG9rZW5MaXN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTURPTVRva2VuTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTURPTVRva2VuTGlzdCogd3JhcERPTVRva2VuTGlzdChXZWJDb3JlOjpET01U
b2tlbkxpc3QqKTsKK1dlYktpdERPTURPTVRva2VuTGlzdCoga2l0KFdlYkNvcmU6OkRPTVRva2Vu
TGlzdCopOworV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBjb3JlKFdlYktpdERPTURPTVRva2VuTGlz
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01Ub2tl
bkxpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGY0NmI1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cuY3BwCkBAIC0wLDAgKzEsMTU2OSBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTURPTVdpbmRvdy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJ
bXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01CYXJQcm9wUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUNT
U1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NQXBwbGlj
YXRpb25DYWNoZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01TZWxlY3Rpb25Qcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTURvY3VtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IaXN0b3J5UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTU5hdmlnYXRvclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2Rl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TY3JlZW5Qcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVN0b3JhZ2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3R5
bGVNZWRpYVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RE9NV2luZG93VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1dJTkRPV19HRVRfUFJJVkFU
RShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9E
T01fV0lORE9XLCBXZWJLaXRET01ET01XaW5kb3dQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdpbmRv
dz4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTURPTVdpbmRvdyoga2l0KFdlYkNvcmU6OkRPTVdpbmRvdyog
b2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9p
bnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJL
SVRfRE9NX0RPTV9XSU5ET1cocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NV2luZG93KG9iaik7
Cit9CisKK1dlYkNvcmU6OkRPTVdpbmRvdyogY29yZShXZWJLaXRET01ET01XaW5kb3cqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01XaW5k
b3cqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01ET01XaW5kb3cqIHdyYXBET01XaW5kb3coV2ViQ29yZTo6RE9NV2luZG93KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9ET01fV0lORE9XKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVywgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9tX3dpbmRvd19kaXNwYXRjaF9l
dmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJL
aXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RE9NV2luZG93Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2Ny
aXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9kb21fd2luZG93X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVdpbmRvdyo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQs
IGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NV2luZG93Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkK
K3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZGlz
cGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9s
aXN0ZW5lciA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9
CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTURPTVdpbmRvdywgd2Via2l0X2Rv
bV9kb21fd2luZG93LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZB
Q0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1NDUkVFTiwKKyAgICBQUk9Q
X0hJU1RPUlksCisgICAgUFJPUF9MT0NBVElPTkJBUiwKKyAgICBQUk9QX01FTlVCQVIsCisgICAg
UFJPUF9QRVJTT05BTEJBUiwKKyAgICBQUk9QX1NDUk9MTEJBUlMsCisgICAgUFJPUF9TVEFUVVNC
QVIsCisgICAgUFJPUF9UT09MQkFSLAorICAgIFBST1BfTkFWSUdBVE9SLAorICAgIFBST1BfQ0xJ
RU5UX0lORk9STUFUSU9OLAorICAgIFBST1BfRlJBTUVfRUxFTUVOVCwKKyAgICBQUk9QX09GRlND
UkVFTl9CVUZGRVJJTkcsCisgICAgUFJPUF9PVVRFUl9IRUlHSFQsCisgICAgUFJPUF9PVVRFUl9X
SURUSCwKKyAgICBQUk9QX0lOTkVSX0hFSUdIVCwKKyAgICBQUk9QX0lOTkVSX1dJRFRILAorICAg
IFBST1BfU0NSRUVOX1gsCisgICAgUFJPUF9TQ1JFRU5fWSwKKyAgICBQUk9QX1NDUkVFTl9MRUZU
LAorICAgIFBST1BfU0NSRUVOX1RPUCwKKyAgICBQUk9QX1NDUk9MTF9YLAorICAgIFBST1BfU0NS
T0xMX1ksCisgICAgUFJPUF9QQUdFX1hfT0ZGU0VULAorICAgIFBST1BfUEFHRV9ZX09GRlNFVCwK
KyAgICBQUk9QX0NMT1NFRCwKKyAgICBQUk9QX0xFTkdUSCwKKyAgICBQUk9QX05BTUUsCisgICAg
UFJPUF9TVEFUVVMsCisgICAgUFJPUF9ERUZBVUxUX1NUQVRVUywKKyAgICBQUk9QX1NFTEYsCisg
ICAgUFJPUF9XSU5ET1csCisgICAgUFJPUF9GUkFNRVMsCisgICAgUFJPUF9PUEVORVIsCisgICAg
UFJPUF9QQVJFTlQsCisgICAgUFJPUF9UT1AsCisgICAgUFJPUF9ET0NVTUVOVCwKKyAgICBQUk9Q
X1NUWUxFX01FRElBLAorICAgIFBST1BfREVWSUNFX1BJWEVMX1JBVElPLAorICAgIFBST1BfQVBQ
TElDQVRJT05fQ0FDSEUsCisgICAgUFJPUF9TRVNTSU9OX1NUT1JBR0UsCisgICAgUFJPUF9MT0NB
TF9TVE9SQUdFLAorICAgIFBST1BfT1JJRU5UQVRJT04sCisgICAgUFJPUF9QRVJGT1JNQU5DRSwK
KyAgICBQUk9QX1NQRUVDSF9TWU5USEVTSVMsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURP
TVdpbmRvd1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9XSU5ET1dfR0VUX1BSSVZBVEUo
b2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01ET01XaW5kb3dQcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fd2luZG93X3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYgPSBXRUJLSVRfRE9NX0RPTV9XSU5ET1cob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEFUVVM6CisgICAgICAgIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19zZXRfc3RhdHVzKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9TVEFUVVM6CisgICAgICAgIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19zZXRfZGVmYXVsdF9zdGF0dXMoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmID0gV0VCS0lUX0RPTV9ET01fV0lORE9XKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU0NSRUVOOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hJU1RPUlk6CisgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9oaXN0b3J5KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPQ0FUSU9OQkFSOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbG9jYXRpb25i
YXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVOVUJBUjoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X21l
bnViYXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEVSU09OQUxCQVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9wZXJzb25hbGJhcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9T
Q1JPTExCQVJTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfc2Nyb2xsYmFycyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TVEFUVVNCQVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9zdGF0dXNiYXIoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfVE9PTEJBUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Rvb2xiYXIoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTkFWSUdBVE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbmF2aWdhdG9yKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NMSUVOVF9JTkZPUk1BVElPTjoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2NsaWVudF9p
bmZvcm1hdGlvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkFNRV9F
TEVNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfZnJhbWVfZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9PRkZTQ1JFRU5fQlVGRkVSSU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X29mZnNjcmVlbl9idWZmZXJpbmcoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1VURVJfSEVJR0hUOgorICAgICAg
ICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X291dGVy
X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PVVRFUl9XSURU
SDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9vdXRlcl93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9J
Tk5FUl9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfaW5uZXJfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0lOTkVSX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2lubmVyX3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl94KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25n
KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl95KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9MRUZUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl9sZWZ0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9UT1A6CisgICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3Rv
cChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExfWDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3Jv
bGxfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExfWToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9z
Y3JvbGxfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQUdFX1hfT0ZG
U0VUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X3BhZ2VfeF9vZmZzZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfUEFHRV9ZX09GRlNFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9wYWdlX3lfb2Zmc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NMT1NFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jbG9zZWQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NUQVRVUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zdGF0dXMoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9TVEFUVVM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZGVmYXVsdF9zdGF0dXMoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRjoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NlbGYoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lORE9XOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfd2luZG93KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZSQU1FUzoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2ZyYW1lcyhzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PUEVORVI6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9vcGVuZXIoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFSRU5UOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFyZW50KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RPUDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3RvcChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ET0NVTUVOVDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2RvY3VtZW50KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NUWUxFX01FRElBOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3R5
bGVfbWVkaWEoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVWSUNFX1BJ
WEVMX1JBVElPOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FQUExJQ0FUSU9OX0NBQ0hFOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfYXBwbGljYXRpb25fY2FjaGUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VTU0lPTl9TVE9SQUdFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfc2Vzc2lvbl9zdG9yYWdlKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0xPQ0FMX1NUT1JBR0U6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sb2NhbF9zdG9yYWdlKHNlbGYsIG51bGxwdHIp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09SSUVOVEFUSU9OOgorICAgICAgICBn
X3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X29yaWVudGF0
aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BFUkZPUk1BTkNFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfcGVyZm9ybWFuY2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1BF
RUNIX1NZTlRIRVNJUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X3NwZWVjaF9zeW50aGVzaXMoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19jb25zdHJ1Y3RvcihHVHlw
ZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQ
YXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV93aW5kb3dfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KworICAgIFdlYktpdERPTURPTVdpbmRvd1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9X
SU5ET1dfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6RE9NV2luZG93Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xhc3NfaW5pdChXZWJLaXRET01ET01XaW5kb3dDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
Z29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZSkpOworICAgIGdv
YmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY29uc3RydWN0
b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9t
X3dpbmRvd19zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ND
UkVFTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzY3JlZW4i
LAorICAgICAgICAgICAgIkRPTVdpbmRvdzpzY3JlZW4iLAorICAgICAgICAgICAgInJlYWQtb25s
eSBXZWJLaXRET01TY3JlZW4qIERPTVdpbmRvdzpzY3JlZW4iLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX1NDUkVFTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0hJU1RPUlksCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAiaGlzdG9yeSIsCisgICAgICAgICAgICAiRE9NV2luZG93Omhpc3Rvcnki
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IaXN0b3J5KiBET01XaW5kb3c6aGlz
dG9yeSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSElTVE9SWSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPQ0FUSU9OQkFS
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImxvY2F0aW9uYmFy
IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6bG9jYXRpb25iYXIiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01CYXJQcm9wKiBET01XaW5kb3c6bG9jYXRpb25iYXIiLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUVOVUJBUiwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJtZW51YmFyIiwKKyAgICAgICAgICAgICJET01X
aW5kb3c6bWVudWJhciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUJhclByb3Aq
IERPTVdpbmRvdzptZW51YmFyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9CQVJfUFJP
UCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1BFUlNPTkFMQkFSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgInBlcnNvbmFsYmFyIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6cGVyc29uYWxiYXIiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01CYXJQcm9wKiBET01XaW5kb3c6cGVyc29u
YWxiYXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NST0xMQkFS
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzY3JvbGxiYXJz
IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2Nyb2xsYmFycyIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTUJhclByb3AqIERPTVdpbmRvdzpzY3JvbGxiYXJzIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NUQVRVU0JBUiwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzdGF0dXNiYXIiLAorICAgICAgICAgICAgIkRP
TVdpbmRvdzpzdGF0dXNiYXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01CYXJQ
cm9wKiBET01XaW5kb3c6c3RhdHVzYmFyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9C
QVJfUFJPUCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1RPT0xCQVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAidG9vbGJhciIsCisgICAgICAgICAgICAiRE9NV2luZG93OnRvb2xiYXIiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01CYXJQcm9wKiBET01XaW5kb3c6dG9vbGJhciIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQVZJR0FUT1IsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibmF2aWdhdG9yIiwKKyAgICAgICAg
ICAgICJET01XaW5kb3c6bmF2aWdhdG9yIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NTmF2aWdhdG9yKiBET01XaW5kb3c6bmF2aWdhdG9yIiwKKyAgICAgICAgICAgIFdFQktJVF9E
T01fVFlQRV9OQVZJR0FUT1IsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DTElFTlRfSU5GT1JNQVRJT04sCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAiY2xpZW50LWluZm9ybWF0aW9uIiwKKyAgICAgICAg
ICAgICJET01XaW5kb3c6Y2xpZW50LWluZm9ybWF0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NTmF2aWdhdG9yKiBET01XaW5kb3c6Y2xpZW50LWluZm9ybWF0aW9uIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GUkFNRV9FTEVNRU5ULAorICAg
ICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZyYW1lLWVsZW1lbnQiLAor
ICAgICAgICAgICAgIkRPTVdpbmRvdzpmcmFtZS1lbGVtZW50IiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NRWxlbWVudCogRE9NV2luZG93OmZyYW1lLWVsZW1lbnQiLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PRkZTQ1JFRU5fQlVGRkVSSU5HLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJvZmZzY3JlZW4tYnVmZmVy
aW5nIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6b2Zmc2NyZWVuLWJ1ZmZlcmluZyIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIERPTVdpbmRvdzpvZmZzY3JlZW4tYnVmZmVyaW5n
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1VURVJfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfbG9uZygKKyAgICAgICAgICAgICJvdXRlci1oZWlnaHQiLAorICAgICAgICAgICAgIkRPTVdp
bmRvdzpvdXRlci1oZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5k
b3c6b3V0ZXItaGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
T1VURVJfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIm91
dGVyLXdpZHRoIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6b3V0ZXItd2lkdGgiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6b3V0ZXItd2lkdGgiLAorICAgICAgICAg
ICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTk5FUl9IRUlHSFQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19sb25nKAorICAgICAgICAgICAgImlubmVyLWhlaWdodCIsCisgICAgICAgICAgICAi
RE9NV2luZG93OmlubmVyLWhlaWdodCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERP
TVdpbmRvdzppbm5lci1oZWlnaHQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9JTk5FUl9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAg
ICAiaW5uZXItd2lkdGgiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzppbm5lci13aWR0aCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERPTVdpbmRvdzppbm5lci13aWR0aCIsCisgICAg
ICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUkVFTl9YLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JlZW4teCIsCisgICAgICAgICAgICAiRE9N
V2luZG93OnNjcmVlbi14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgRE9NV2luZG93
OnNjcmVlbi14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NSRUVO
X1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNjcmVlbi15IiwK
KyAgICAgICAgICAgICJET01XaW5kb3c6c2NyZWVuLXkiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnbG9uZyBET01XaW5kb3c6c2NyZWVuLXkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01B
WExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9TQ1JFRU5fTEVGVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAg
ICAgICAgICAic2NyZWVuLWxlZnQiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpzY3JlZW4tbGVm
dCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERPTVdpbmRvdzpzY3JlZW4tbGVmdCIs
CisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUkVFTl9UT1AsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNjcmVlbi10b3AiLAorICAgICAg
ICAgICAgIkRPTVdpbmRvdzpzY3JlZW4tdG9wIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xv
bmcgRE9NV2luZG93OnNjcmVlbi10b3AiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TQ1JPTExfWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAg
ICAic2Nyb2xsLXgiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpzY3JvbGwteCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdsb25nIERPTVdpbmRvdzpzY3JvbGwteCIsCisgICAgICAgICAgICBH
X01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTF9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNf
bG9uZygKKyAgICAgICAgICAgICJzY3JvbGwteSIsCisgICAgICAgICAgICAiRE9NV2luZG93OnNj
cm9sbC15IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgRE9NV2luZG93OnNjcm9sbC15
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFHRV9YX09GRlNFVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAicGFnZS14LW9mZnNldCIs
CisgICAgICAgICAgICAiRE9NV2luZG93OnBhZ2UteC1vZmZzZXQiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnbG9uZyBET01XaW5kb3c6cGFnZS14LW9mZnNldCIsCisgICAgICAgICAgICBHX01J
TkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1BBR0VfWV9PRkZTRVQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKAorICAgICAgICAgICAgInBhZ2UteS1vZmZzZXQiLAorICAgICAgICAgICAgIkRPTVdp
bmRvdzpwYWdlLXktb2Zmc2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgRE9NV2lu
ZG93OnBhZ2UteS1vZmZzZXQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9DTE9TRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNs
b3NlZCIsCisgICAgICAgICAgICAiRE9NV2luZG93OmNsb3NlZCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIERPTVdpbmRvdzpjbG9zZWQiLAorICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
RU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgi
LAorICAgICAgICAgICAgIkRPTVdpbmRvdzpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWxvbmcgRE9NV2luZG93Omxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1l
IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogRE9NV2luZG93Om5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RBVFVTLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInN0YXR1cyIsCisgICAgICAg
ICAgICAiRE9NV2luZG93OnN0YXR1cyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
RE9NV2luZG93OnN0YXR1cyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX1NUQVRVUywKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkZWZhdWx0LXN0YXR1cyIs
CisgICAgICAgICAgICAiRE9NV2luZG93OmRlZmF1bHQtc3RhdHVzIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBET01XaW5kb3c6ZGVmYXVsdC1zdGF0dXMiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfU0VMRiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJz
ZWxmIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2VsZiIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTURPTVdpbmRvdyogRE9NV2luZG93OnNlbGYiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSU5ET1csCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAid2luZG93IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6d2lu
ZG93IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NV2luZG93KiBET01XaW5k
b3c6d2luZG93IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9XLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRlJB
TUVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZyYW1lcyIs
CisgICAgICAgICAgICAiRE9NV2luZG93OmZyYW1lcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTURPTVdpbmRvdyogRE9NV2luZG93OmZyYW1lcyIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfRE9NX1dJTkRPVywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX09QRU5FUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJvcGVuZXIiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpvcGVu
ZXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01XaW5kb3cqIERPTVdpbmRv
dzpvcGVuZXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVJF
TlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicGFyZW50IiwK
KyAgICAgICAgICAgICJET01XaW5kb3c6cGFyZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NRE9NV2luZG93KiBET01XaW5kb3c6cGFyZW50IiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9ET01fV0lORE9XLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVE9QLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgInRvcCIsCisgICAgICAgICAgICAiRE9NV2luZG93OnRvcCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVdpbmRvdyogRE9NV2luZG93OnRvcCIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVywKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RPQ1VNRU5ULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImRvY3VtZW50IiwKKyAgICAgICAg
ICAgICJET01XaW5kb3c6ZG9jdW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01Eb2N1bWVudCogRE9NV2luZG93OmRvY3VtZW50IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9ET0NVTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NUWUxFX01FRElBLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgInN0eWxlLW1lZGlhIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c3R5
bGUtbWVkaWEiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01TdHlsZU1lZGlhKiBE
T01XaW5kb3c6c3R5bGUtbWVkaWEiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NUWUxF
X01FRElBLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfREVWSUNFX1BJWEVMX1JBVElPLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91Ymxl
KAorICAgICAgICAgICAgImRldmljZS1waXhlbC1yYXRpbyIsCisgICAgICAgICAgICAiRE9NV2lu
ZG93OmRldmljZS1waXhlbC1yYXRpbyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUg
RE9NV2luZG93OmRldmljZS1waXhlbC1yYXRpbyIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUs
IEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQVBQTElDQVRJT05fQ0FDSEUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiYXBwbGljYXRpb24tY2FjaGUiLAorICAgICAgICAgICAg
IkRPTVdpbmRvdzphcHBsaWNhdGlvbi1jYWNoZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIERPTVdpbmRvdzphcHBsaWNhdGlvbi1jYWNoZSIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VT
U0lPTl9TVE9SQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
InNlc3Npb24tc3RvcmFnZSIsCisgICAgICAgICAgICAiRE9NV2luZG93OnNlc3Npb24tc3RvcmFn
ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVN0b3JhZ2UqIERPTVdpbmRvdzpz
ZXNzaW9uLXN0b3JhZ2UiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
T0NBTF9TVE9SQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
ImxvY2FsLXN0b3JhZ2UiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpsb2NhbC1zdG9yYWdlIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NU3RvcmFnZSogRE9NV2luZG93OmxvY2Fs
LXN0b3JhZ2UiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PUklFTlRB
VElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAib3JpZW50YXRp
b24iLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpvcmllbnRhdGlvbiIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdsb25nIERPTVdpbmRvdzpvcmllbnRhdGlvbiIsCisgICAgICAgICAgICBHX01J
TkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1BFUkZPUk1BTkNFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgInBlcmZvcm1hbmNlIiwKKyAgICAgICAgICAgICJET01XaW5k
b3c6cGVyZm9ybWFuY2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01QZXJmb3Jt
YW5jZSogRE9NV2luZG93OnBlcmZvcm1hbmNlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9QRVJGT1JNQU5DRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NQRUVDSF9TWU5USEVTSVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAic3BlZWNoLXN5bnRoZXNpcyIsCisgICAgICAgICAgICAiRE9N
V2luZG93OnNwZWVjaC1zeW50aGVzaXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXMqIERPTVdpbmRvdzpzcGVlY2gtc3ludGhlc2lzIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fd2lu
ZG93X2luaXQoV2ViS2l0RE9NRE9NV2luZG93KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTURP
TVdpbmRvd1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9XSU5ET1dfR0VUX1BSSVZBVEUo
cmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01ET01XaW5kb3dQcml2YXRlKCk7Cit9
CisKK1dlYktpdERPTURPTVNlbGVjdGlvbiogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zZWxl
Y3Rpb24oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NU2VsZWN0aW9uPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0U2VsZWN0aW9uKCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZm9jdXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmZvY3VzKCk7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9kb21fd2luZG93X2JsdXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29yZTo6
RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmJsdXIoKTsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xvc2UoV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAg
V2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PmNsb3NlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3ByaW50KFdlYktpdERP
TURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2Vs
ZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5wcmludCgpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19zdG9w
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9X
SU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zdG9wKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2lu
ZG93X2FsZXJ0KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2Up
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKG1lc3NhZ2UpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRNZXNzYWdlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpOworICAgIGl0ZW0tPmFsZXJ0KGNvbnZlcnRlZE1lc3Nh
Z2UpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY29uZmlybShXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChtZXNzYWdlLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lc3NhZ2UgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+Y29uZmlybShjb252ZXJ0ZWRNZXNzYWdlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Y2hhciogd2Via2l0X2RvbV9kb21fd2luZG93X3Byb21wdChXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVmYXVsdFZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG1lc3NhZ2UsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRl
ZmF1bHRWYWx1ZSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lc3NhZ2UgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgobWVzc2FnZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRGVmYXVsdFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRlZmF1bHRWYWx1ZSk7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cHJvbXB0KGNvbnZlcnRlZE1lc3NhZ2Us
IGNvbnZlcnRlZERlZmF1bHRWYWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21fZG9tX3dpbmRvd19maW5kKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwg
Y29uc3QgZ2NoYXIqIHN0cmluZywgZ2Jvb2xlYW4gY2FzZVNlbnNpdGl2ZSwgZ2Jvb2xlYW4gYmFj
a3dhcmRzLCBnYm9vbGVhbiB3cmFwLCBnYm9vbGVhbiB3aG9sZVdvcmQsIGdib29sZWFuIHNlYXJj
aEluRnJhbWVzLCBnYm9vbGVhbiBzaG93RGlhbG9nKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9XSU5ET1coc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
dHJpbmcsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyaW5nID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHN0cmluZyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+ZmluZChjb252
ZXJ0ZWRTdHJpbmcsIGNhc2VTZW5zaXRpdmUsIGJhY2t3YXJkcywgd3JhcCwgd2hvbGVXb3JkLCBz
ZWFyY2hJbkZyYW1lcywgc2hvd0RpYWxvZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xsX2J5KFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZiwgZ2RvdWJsZSB4LCBnZG91YmxlIHkpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lO
RE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2Nyb2xsQnkoeCwgeSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9k
b21fd2luZG93X3Njcm9sbF90byhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdkb3VibGUgeCwg
Z2RvdWJsZSB5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNjcm9sbFRvKHgsIHkpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19zY3Jv
bGwoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZG91YmxlIHgsIGdkb3VibGUgeSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zY3JvbGxUbyh4LCB5
KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfbW92ZV9ieShXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYsIGdmbG9hdCB4LCBnZmxvYXQgeSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5tb3ZlQnkoeCwgeSk7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9kb21fd2luZG93X21vdmVfdG8oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZmxvYXQg
eCwgZ2Zsb2F0IHkpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsK
KyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+bW92ZVRvKHgsIHkpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19yZXNp
emVfYnkoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZmxvYXQgeCwgZ2Zsb2F0IHkpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVzaXplQnkoeCwg
eSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3Jlc2l6ZV90byhXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYsIGdmbG9hdCB3aWR0aCwgZ2Zsb2F0IGhlaWdodCkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5yZXNpemVUbyh3aWR0aCwgaGVp
Z2h0KTsKK30KKworV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QqIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19tYXRjaF9tZWRpYShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBxdWVy
eSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChxdWVyeSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1
ZXJ5ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHF1ZXJ5KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
TWVkaWFRdWVyeUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5tYXRjaE1l
ZGlhKGNvbnZlcnRlZFF1ZXJ5KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwg
V2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCwgY29uc3QgZ2NoYXIqIHBzZXVkb0VsZW1lbnQpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpLCAwKTsKKyAg
ICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6RWxlbWVudCogY29udmVydGVkRWxlbWVudCA9IFdlYktpdDo6Y29yZShlbGVtZW50KTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQc2V1ZG9FbGVtZW50ID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHBzZXVkb0VsZW1lbnQpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NTdHlsZURlY2xh
cmF0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0Q29tcHV0ZWRTdHls
ZSgqY29udmVydGVkRWxlbWVudCwgY29udmVydGVkUHNldWRvRWxlbWVudCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NV2ViS2l0
UG9pbnQqIHdlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJraXRfY29udmVydF9wb2ludF9mcm9tX3Bh
Z2VfdG9fbm9kZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUs
IFdlYktpdERPTVdlYktpdFBvaW50KiBwKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9XSU5ET1coc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTk9ERShub2RlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19XRUJLSVRfUE9JTlQocCksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2Vi
S2l0Ojpjb3JlKG5vZGUpOworICAgIFdlYkNvcmU6OldlYktpdFBvaW50KiBjb252ZXJ0ZWRQID0g
V2ViS2l0Ojpjb3JlKHApOworICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJLaXRQb2ludD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPndlYmtpdENvbnZlcnRQb2ludEZyb21QYWdlVG9O
b2RlKGNvbnZlcnRlZE5vZGUsIGNvbnZlcnRlZFApKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVdlYktpdFBvaW50KiB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfd2Via2l0X2NvbnZlcnRfcG9pbnRfZnJvbV9ub2RlX3RvX3BhZ2UoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlLCBXZWJLaXRET01XZWJL
aXRQb2ludCogcCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX1BPSU5U
KHApLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2Rl
KTsKKyAgICBXZWJDb3JlOjpXZWJLaXRQb2ludCogY29udmVydGVkUCA9IFdlYktpdDo6Y29yZShw
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6V2ViS2l0UG9pbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT53ZWJraXRDb252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZShjb252ZXJ0ZWRO
b2RlLCBjb252ZXJ0ZWRQKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19jYW5jZWxfYW5pbWF0aW9u
X2ZyYW1lKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2xvbmcgaWQpCit7CisjaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRP
VyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiUmVxdWVzdCBBbmltYXRpb24gRnJhbWUiKQorI2VuZGlmIC8q
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfd2Via2l0X2NhbmNlbF9hbmltYXRpb25fZnJhbWUoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmLCBnbG9uZyBpZCkKK3sKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2FuY2Vs
QW5pbWF0aW9uRnJhbWUoaWQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
VU5VU0VEX1BBUkFNKGlkKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJS
ZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSIpCisjZW5kaWYgLyogRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJraXRfY2Fu
Y2VsX3JlcXVlc3RfYW5pbWF0aW9uX2ZyYW1lKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2xv
bmcgaWQpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmNhbmNlbEFuaW1hdGlvbkZyYW1l
KGlkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShp
ZCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiUmVxdWVzdCBBbmltYXRp
b24gRnJhbWUiKQorI2VuZGlmIC8qIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgKi8K
K30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2FwdHVyZV9ldmVudHMoV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxm
KSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPmNhcHR1cmVFdmVudHMoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfcmVsZWFzZV9ldmVudHMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnJlbGVhc2VFdmVudHMoKTsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xlYXJfdGltZW91dChXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYsIGdsb25nIGhhbmRsZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9X
SU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5jbGVhclRpbWVvdXQoaGFuZGxlKTsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfY2xlYXJfaW50ZXJ2YWwoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxm
LCBnbG9uZyBoYW5kbGUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+Y2xlYXJJbnRlcnZhbChoYW5kbGUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9k
b21fd2luZG93X2F0b2IoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogc3Ry
aW5nLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lO
RE9XKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJpbmcsIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3Jl
OjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkU3RyaW5nID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cmluZyk7CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXRvYihjb252ZXJ0ZWRTdHJpbmcsIGVjKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19idG9hKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cmluZywgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc3RyaW5nLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0cmluZyA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmJ0b2Eo
Y29udmVydGVkU3RyaW5nLCBlYykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERP
TVNjcmVlbiogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW4oV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6U2NyZWVuPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+c2NyZWVuKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworV2ViS2l0RE9NSGlzdG9yeSogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9o
aXN0b3J5KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Okhpc3Rvcnk+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5oaXN0b3J5KCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQmFyUHJvcCogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9sb2NhdGlvbmJhcihXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpCYXJQcm9wPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
bG9jYXRpb25iYXIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01CYXJQcm9wKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X21l
bnViYXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QmFyUHJvcD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1lbnViYXIoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01CYXJQcm9wKiB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BlcnNvbmFsYmFyKFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkJhclByb3A+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5w
ZXJzb25hbGJhcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTUJhclByb3AqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Ny
b2xsYmFycyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpCYXJQcm9wPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2Nyb2xsYmFycygpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUJhclByb3Aq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3RhdHVzYmFyKFdlYktpdERPTURPTVdpbmRvdyog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkJhclByb3A+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5zdGF0dXNiYXIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01CYXJQcm9wKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Rv
b2xiYXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QmFyUHJvcD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRvb2xiYXIoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01OYXZpZ2F0b3IqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbmF2aWdhdG9yKFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok5hdmlnYXRvcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
Pm5hdmlnYXRvcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTU5hdmlnYXRvciogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9j
bGllbnRfaW5mb3JtYXRpb24oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TmF2
aWdhdG9yPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xpZW50SW5mb3JtYXRp
b24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2ZyYW1lX2VsZW1l
bnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZyYW1lRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfb2Zmc2NyZWVuX2J1ZmZlcmluZyhXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5vZmZzY3JlZW5CdWZmZXJpbmcoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X291dGVyX2hl
aWdodChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm91dGVySGVpZ2h0
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9vdXRlcl93aWR0aChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2lu
ZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
Pm91dGVyV2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X2lubmVyX2hlaWdodChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJl
c3VsdCA9IGl0ZW0tPmlubmVySGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xv
bmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9pbm5lcl93aWR0aChXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmlubmVyV2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl94KFdlYktpdERP
TURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9X
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2NyZWVuWCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3koV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9X
SU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zY3JlZW5ZKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5f
bGVmdChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcmVlbkxlZnQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3NjcmVlbl90b3AoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRv
dyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5z
Y3JlZW5Ub3AoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X3Njcm9sbF94KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
T01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0g
aXRlbS0+c2Nyb2xsWCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfc2Nyb2xsX3koV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1
bHQgPSBpdGVtLT5zY3JvbGxZKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9wYWdlX3hfb2Zmc2V0KFdlYktpdERPTURPTVdpbmRvdyog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+cGFnZVhPZmZzZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BhZ2VfeV9vZmZzZXQoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5E
T1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5wYWdlWU9mZnNldCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY2xv
c2VkKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fV0lORE9XKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNsb3Nl
ZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X2xlbmd0aChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5s
ZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9uYW1lKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5k
b3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19zZXRfbmFtZShXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5E
T1coc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
TmFtZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3N0YXR1cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnN0YXR1cygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19zZXRfc3RhdHVzKFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRP
VyhzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RE9N
V2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRT
dGF0dXMoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9kZWZhdWx0X3N0YXR1cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9N
V2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRlZmF1bHRTdGF0dXMoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X2RlZmF1bHRfc3RhdHVz
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXREZWZhdWx0U3RhdHVzKGNvbnZlcnRlZFZhbHVlKTsKK30K
KworV2ViS2l0RE9NRE9NV2luZG93KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NlbGYoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9X
SU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2VsZigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURPTVdpbmRvdyogd2Via2l0X2RvbV9k
b21fd2luZG93X2dldF93aW5kb3coV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RE9NV2luZG93PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2luZG93KCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NRE9NV2luZG93KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2ZyYW1lcyhXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5mcmFtZXMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01ET01XaW5kb3cqIHdlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfb3BlbmVyKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5k
b3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdp
bmRvdz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9wZW5lcigpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURP
TVdpbmRvdyogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYXJlbnQoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+cGFyZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NV2luZG93KiB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3RvcChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01XaW5kb3c+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT50b3AoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Eb2N1bWVudCogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9kb2N1bWVudChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmRv
Y3VtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKworV2ViS2l0RE9NU3R5bGVNZWRpYSogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zdHls
ZV9tZWRpYShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdHlsZU1lZGlhPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c3R5bGVNZWRpYSgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dkb3VibGUgd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8oV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmRldmljZVBpeGVsUmF0aW8oKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X2FwcGxpY2F0aW9uX2NhY2hlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5hcHBsaWNhdGlvbkNhY2hlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NU3RvcmFnZSogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9zZXNzaW9uX3N0b3JhZ2UoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Cisg
ICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdl
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2Vzc2lvblN0b3JhZ2UoZWMpKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitX
ZWJLaXRET01TdG9yYWdlKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2xvY2FsX3N0b3JhZ2Uo
V2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+bG9jYWxTdG9yYWdlKGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF9vcmllbnRhdGlvbihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisjaWYgRU5BQkxFKE9S
SUVOVEFUSU9OX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+b3JpZW50YXRpb24oKTsKKyAgICByZXR1cm4g
cmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiT3JpZW50YXRpb24gRXZlbnRzIikKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMp
ICovCit9CisKK1dlYktpdERPTVBlcmZvcm1hbmNlKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X3BlcmZvcm1hbmNlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OlBlcmZvcm1hbmNlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+cGVyZm9ybWFuY2UoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIDA7CisjZW5k
aWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
cyogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zcGVlY2hfc3ludGhlc2lzKFdlYktpdERPTURP
TVdpbmRvdyogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNw
ZWVjaFN5bnRoZXNpcz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OkRPTVdp
bmRvd1NwZWVjaFN5bnRoZXNpczo6c3BlZWNoU3ludGhlc2lzKCppdGVtKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5
bnRoZXNpcyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRv
dy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGQ4NmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVdpbmRvdy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTURPTVdpbmRvd19oCisjZGVmaW5lIFdlYktpdERPTURPTVdpbmRvd19oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1cgICAgICAgICAgICAo
d2Via2l0X2RvbV9kb21fd2luZG93X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9N
X1dJTkRPVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVywgV2ViS2l0RE9NRE9NV2luZG93KSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9ET01fV0lORE9XX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9XLCBXZWJLaXRET01E
T01XaW5kb3dDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9E
T01fV0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fV0lORE9XX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01f
V0lORE9XKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fV0lORE9XX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fV0lO
RE9XLCBXZWJLaXRET01ET01XaW5kb3dDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NV2lu
ZG93IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01ET01XaW5kb3dDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb21fd2luZG93
X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NRE9N
V2luZG93X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01XaW5kb3dQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Qw
NzFiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0
RE9NRE9NV2luZG93UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTVdpbmRvd1ByaXZhdGVf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9ET01XaW5kb3cuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NRE9NV2luZG93Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRE9N
V2luZG93KiB3cmFwRE9NV2luZG93KFdlYkNvcmU6OkRPTVdpbmRvdyopOworV2ViS2l0RE9NRE9N
V2luZG93KiBraXQoV2ViQ29yZTo6RE9NV2luZG93Kik7CitXZWJDb3JlOjpET01XaW5kb3cqIGNv
cmUoV2ViS2l0RE9NRE9NV2luZG93Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTURPTVdpbmRvd1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01X
aW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjE3MDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAKQEAgLTAsMCArMSw2
IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNj
cmlwdHMgdGhhdCBXZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaCBhbmQKKyAgICBX
ZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwIGFyZSBjcmVhdGVkIGZvciBET01X
aW5kb3dTcGVlY2hTeW50aGVzaXMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxk
IHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NRE9NV2luZG93U3BlZWNo
U3ludGhlc2lzLmggYW5kCisgICAgV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNw
cCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUu
CisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOGZiMTcwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3lu
dGhlc2lzLmgKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQg
anVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBXZWJLaXRET01ET01XaW5kb3dTcGVlY2hT
eW50aGVzaXMuaCBhbmQKKyAgICBXZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3Bw
IGFyZSBjcmVhdGVkIGZvciBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaWRsLCBhbmQgdGh1cwor
ICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2Vi
S2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmggYW5kCisgICAgV2ViS2l0RE9NRE9NV2lu
ZG93U3BlZWNoU3ludGhlc2lzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90
IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dVbnN0
YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01ET01XaW5kb3dVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjk5NGRmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1Vu
c3RhYmxlLmgKQEAgLTAsMCArMSw4ODIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NV2luZG93VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRE
T01ET01XaW5kb3dVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DdXN0b21VbnN0YWJsZS5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5f
REVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NlbGVjdGlvbjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01TZWxlY3Rpb24qCit3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X3NlbGVjdGlvbihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01XaW5kb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9kb21fd2luZG93X2ZvY3VzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2JsdXI6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19ibHVyKFdlYktpdERPTURPTVdpbmRvdyog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2Nsb3NlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xvc2UoV2ViS2l0RE9NRE9N
V2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfcHJpbnQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19wcmludChXZWJL
aXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19z
dG9wOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfc3Rv
cChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dp
bmRvd19hbGVydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBtZXNzYWdl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfYWxlcnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxm
LCBjb25zdCBnY2hhciogbWVzc2FnZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93
X2NvbmZpcm06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAbWVzc2FnZTog
QSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb21fd2luZG93
X2NvbmZpcm0oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3Byb21wdDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01XaW5kb3cKKyAqIEBtZXNzYWdlOiBBICNnY2hhcgorICogQGRlZmF1bHRWYWx1
ZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19w
cm9tcHQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSwgY29u
c3QgZ2NoYXIqIGRlZmF1bHRWYWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93
X2ZpbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAc3RyaW5nOiBBICNn
Y2hhcgorICogQGNhc2VTZW5zaXRpdmU6IEEgI2dib29sZWFuCisgKiBAYmFja3dhcmRzOiBBICNn
Ym9vbGVhbgorICogQHdyYXA6IEEgI2dib29sZWFuCisgKiBAd2hvbGVXb3JkOiBBICNnYm9vbGVh
bgorICogQHNlYXJjaEluRnJhbWVzOiBBICNnYm9vbGVhbgorICogQHNob3dEaWFsb2c6IEEgI2di
b29sZWFuCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9tX3dpbmRvd19m
aW5kKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cmluZywgZ2Jvb2xl
YW4gY2FzZVNlbnNpdGl2ZSwgZ2Jvb2xlYW4gYmFja3dhcmRzLCBnYm9vbGVhbiB3cmFwLCBnYm9v
bGVhbiB3aG9sZVdvcmQsIGdib29sZWFuIHNlYXJjaEluRnJhbWVzLCBnYm9vbGVhbiBzaG93RGlh
bG9nKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xsX2J5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHg6IEEgI2dkb3VibGUKKyAqIEB5OiBBICNn
ZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fZG9tX3dpbmRvd19zY3JvbGxfYnkoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxm
LCBnZG91YmxlIHgsIGdkb3VibGUgeSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93
X3Njcm9sbF90bzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEB4OiBBICNn
ZG91YmxlCisgKiBAeTogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xsX3RvKFdlYktp
dERPTURPTVdpbmRvdyogc2VsZiwgZ2RvdWJsZSB4LCBnZG91YmxlIHkpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19zY3JvbGw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2lu
ZG93CisgKiBAeDogQSAjZ2RvdWJsZQorICogQHk6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93
X3Njcm9sbChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdkb3VibGUgeCwgZ2RvdWJsZSB5KTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfbW92ZV9ieToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01XaW5kb3cKKyAqIEB4OiBBICNnZmxvYXQKKyAqIEB5OiBBICNnZmxvYXQKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9kb21fd2luZG93X21vdmVfYnkoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZmxvYXQgeCwg
Z2Zsb2F0IHkpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19tb3ZlX3RvOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHg6IEEgI2dmbG9hdAorICogQHk6IEEg
I2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2RvbV93aW5kb3dfbW92ZV90byhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYs
IGdmbG9hdCB4LCBnZmxvYXQgeSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3Jl
c2l6ZV9ieToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEB4OiBBICNnZmxv
YXQKKyAqIEB5OiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X3Jlc2l6ZV9ieShXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYsIGdmbG9hdCB4LCBnZmxvYXQgeSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fd2luZG93X3Jlc2l6ZV90bzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cK
KyAqIEB3aWR0aDogQSAjZ2Zsb2F0CisgKiBAaGVpZ2h0OiBBICNnZmxvYXQKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2lu
ZG93X3Jlc2l6ZV90byhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdmbG9hdCB3aWR0aCwgZ2Zs
b2F0IGhlaWdodCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X21hdGNoX21lZGlh
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHF1ZXJ5OiBBICNnY2hhcgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTWVkaWFRdWVyeUxp
c3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
TWVkaWFRdWVyeUxpc3QqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfbWF0Y2hfbWVkaWEoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogcXVlcnkpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKiBAZWxlbWVudDogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHBzZXVk
b0VsZW1lbnQ6IChhbGxvdy1ub25lKTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUoV2ViS2l0RE9NRE9N
V2luZG93KiBzZWxmLCBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50LCBjb25zdCBnY2hhciogcHNl
dWRvRWxlbWVudCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jb252
ZXJ0X3BvaW50X2Zyb21fcGFnZV90b19ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdp
bmRvdworICogQG5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBwOiBBICNXZWJLaXRET01XZWJL
aXRQb2ludAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NV2Vi
S2l0UG9pbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NV2ViS2l0UG9pbnQqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X2NvbnZlcnRf
cG9pbnRfZnJvbV9wYWdlX3RvX25vZGUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBXZWJLaXRE
T01Ob2RlKiBub2RlLCBXZWJLaXRET01XZWJLaXRQb2ludCogcCk7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fd2luZG93X3dlYmtpdF9jb252ZXJ0X3BvaW50X2Zyb21fbm9kZV90b19wYWdlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQG5vZGU6IEEgI1dlYktpdERPTU5v
ZGUKKyAqIEBwOiBBICNXZWJLaXRET01XZWJLaXRQb2ludAorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NV2ViS2l0UG9pbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NV2ViS2l0UG9pbnQqCit3ZWJraXRfZG9t
X2RvbV93aW5kb3dfd2Via2l0X2NvbnZlcnRfcG9pbnRfZnJvbV9ub2RlX3RvX3BhZ2UoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlLCBXZWJLaXRET01XZWJLaXRQ
b2ludCogcCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2NhbmNlbF9hbmltYXRp
b25fZnJhbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAaWQ6IEEgI2ds
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZG9tX3dpbmRvd19jYW5jZWxfYW5pbWF0aW9uX2ZyYW1lKFdlYktpdERPTURPTVdp
bmRvdyogc2VsZiwgZ2xvbmcgaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd193
ZWJraXRfY2FuY2VsX2FuaW1hdGlvbl9mcmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqIEBpZDogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jYW5jZWxfYW5p
bWF0aW9uX2ZyYW1lKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2xvbmcgaWQpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJraXRfY2FuY2VsX3JlcXVlc3RfYW5pbWF0aW9u
X2ZyYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGlkOiBBICNnbG9u
ZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X2NhbmNlbF9yZXF1ZXN0X2FuaW1hdGlvbl9mcmFtZShX
ZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdsb25nIGlkKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfY2FwdHVyZV9ldmVudHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2lu
ZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZG9tX3dpbmRvd19jYXB0dXJlX2V2ZW50cyhXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19yZWxlYXNlX2V2ZW50czoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X3JlbGVhc2VfZXZl
bnRzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
d2luZG93X2NsZWFyX3RpbWVvdXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93Cisg
KiBAaGFuZGxlOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xlYXJfdGltZW91dChXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYsIGdsb25nIGhhbmRsZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b21fd2luZG93X2NsZWFyX2ludGVydmFsOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICogQGhhbmRsZTogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X2NsZWFyX2ludGVydmFsKFdl
YktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2xvbmcgaGFuZGxlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfYXRvYjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAq
IEBzdHJpbmc6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19hdG9iKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwg
Y29uc3QgZ2NoYXIqIHN0cmluZywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19idG9hOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICog
QHN0cmluZzogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9kb21fd2luZG93X2J0b2EoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBj
b25zdCBnY2hhciogc3RyaW5nLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fd2luZG93X2dldF9zY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01TY3JlZW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU2NyZWVu
Kgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW4oV2ViS2l0RE9NRE9NV2luZG93KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2hpc3Rvcnk6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01IaXN0b3J5CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTUhpc3RvcnkqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X2hpc3RvcnkoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X2xvY2F0aW9uYmFyOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdp
bmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQmFyUHJv
cAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01C
YXJQcm9wKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sb2NhdGlvbmJhcihXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbWVu
dWJhcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUJhclByb3AKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQmFyUHJvcCoKK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfbWVudWJhcihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGVyc29uYWxiYXI6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJL
aXRET01CYXJQcm9wCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUJhclByb3AqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BlcnNvbmFsYmFy
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9zY3JvbGxiYXJzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQmFyUHJvcAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01CYXJQcm9wKgor
d2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JvbGxiYXJzKFdlYktpdERPTURPTVdpbmRvdyog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zdGF0dXNiYXI6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01CYXJQcm9wCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTUJhclByb3AqCit3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3N0YXR1c2JhcihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfdG9vbGJhcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUJhclBy
b3AKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
QmFyUHJvcCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfdG9vbGJhcihXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbmF2aWdh
dG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5hdmlnYXRvcioKK3dlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfbmF2aWdhdG9yKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jbGllbnRfaW5mb3JtYXRpb246CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTmF2aWdhdG9yKgord2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9jbGllbnRfaW5mb3JtYXRpb24oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2ZyYW1lX2VsZW1lbnQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2ZyYW1l
X2VsZW1lbnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X29mZnNjcmVlbl9idWZmZXJpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfb2Zmc2NyZWVuX2J1ZmZlcmluZyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3V0ZXJfaGVpZ2h0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X291dGVyX2hlaWdodChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3V0ZXJfd2lkdGg6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfb3V0ZXJfd2lkdGgoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2lubmVyX2hlaWdodDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9pbm5lcl9oZWlnaHQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2lubmVyX3dpZHRoOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X2lubmVyX3dpZHRoKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5feDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9zY3JlZW5feChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
c2NyZWVuX3koV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X3NjcmVlbl9sZWZ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdp
bmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVl
bl9sZWZ0KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9zY3JlZW5fdG9wOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl90
b3AoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZ2V0X3Njcm9sbF94OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoK
KyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbF94KFdlYktp
dERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF9zY3JvbGxfeToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1
cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JvbGxfeShXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFnZV94
X29mZnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5z
OiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
bG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYWdlX3hfb2Zmc2V0KFdlYktpdERPTURP
TVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYWdl
X3lfb2Zmc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdsb25nCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BhZ2VfeV9vZmZzZXQoV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2Ns
b3NlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jbG9zZWQoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2xlbmd0aDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNndWxv
bmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3
ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2xlbmd0aChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbmFtZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfbmFtZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X3NldF9uYW1lKFdlYktp
dERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X3N0YXR1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3Rh
dHVzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
d2luZG93X3NldF9zdGF0dXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19zZXRfc3RhdHVzKFdlYktpdERPTURPTVdp
bmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X2RlZmF1bHRfc3RhdHVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdp
bmRvdworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9kZWZh
dWx0X3N0YXR1cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19zZXRfZGVmYXVsdF9zdGF0dXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RE9NV2luZG93CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19zZXRfZGVmYXVs
dF9zdGF0dXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2VsZjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dl
YktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NlbGYo
V2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X3dpbmRvdzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01XaW5kb3cqCit3
ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3dpbmRvdyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZnJhbWVzOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTURPTVdpbmRvdyoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
ZnJhbWVzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9vcGVuZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2lu
ZG93Kgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9vcGVuZXIoV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BhcmVudDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X3BhcmVudChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfdG9wOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NV2luZG93
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURP
TVdpbmRvdyoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfdG9wKFdlYktpdERPTURPTVdpbmRv
dyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9kb2N1bWVudDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50Kgord2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9kb2N1bWVudChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3R5bGVfbWVkaWE6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01TdHlsZU1lZGlhCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTVN0eWxlTWVkaWEqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3N0eWxlX21l
ZGlhKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9kZXZpY2VfcGl4ZWxfcmF0aW86CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9N
V2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X2RldmljZV9waXhlbF9yYXRpbyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfYXBwbGljYXRpb25fY2FjaGU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X2FwcGxpY2F0aW9uX2NhY2hlKFdlYktpdERPTURPTVdpbmRvdyog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zZXNzaW9uX3N0b3Jh
Z2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVN0b3JhZ2UKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3RvcmFn
ZSoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Vzc2lvbl9zdG9yYWdlKFdlYktpdERPTURP
TVdpbmRvdyogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfbG9jYWxfc3RvcmFnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5k
b3cKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NU3RvcmFnZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01TdG9yYWdlKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sb2Nh
bF9zdG9yYWdlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3JpZW50YXRpb246CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfb3JpZW50YXRpb24oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BlcmZvcm1hbmNlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAj
V2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NUGVyZm9ybWFuY2UqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X3BlcmZvcm1hbmNlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9zcGVlY2hfc3ludGhlc2lzOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfc3BlZWNoX3N5bnRoZXNpcyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01ET01XaW5kb3dVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURh
dGFDdWUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01EYXRhQ3VlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40YTYwMzc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhQ3VlLmNwcApAQCAt
MCwwICsxLDEzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURhdGFDdWUuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURhdGFDdWVQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NRGF0YUN1ZSoga2l0KFdlYkNvcmU6OkRhdGFDdWUqIG9iaikKK3sKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9EQVRBX0NVRShraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlKj4o
b2JqKSkpOworfQorCitXZWJDb3JlOjpEYXRhQ3VlKiBjb3JlKFdlYktpdERPTURhdGFDdWUqIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEYXRh
Q3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NRGF0YUN1ZSogd3JhcERhdGFDdWUoV2ViQ29yZTo6RGF0YUN1ZSogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fREFU
QV9DVUUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9EQVRBX0NVRSwgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21fZGF0YV9jdWVfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShl
dmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
ZWJDb3JlOjpEYXRhQ3VlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGF0YUN1
ZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9kYXRhX2N1ZV9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgV2ViQ29yZTo6RGF0YUN1ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRh
dGFDdWUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnRO
YW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNh
cHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNr
IikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kYXRhX2N1ZV9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBH
Q2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgV2ViQ29yZTo6RGF0YUN1ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkRhdGFDdWUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVT
RURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5V
U0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRj
aF9ldmVudCA9IHdlYmtpdF9kb21fZGF0YV9jdWVfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZGF0YV9jdWVfYWRkX2V2ZW50X2xpc3Rl
bmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2RhdGFf
Y3VlX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0RE9NRGF0YUN1ZSwgd2Via2l0X2RvbV9kYXRhX2N1ZSwgV0VCS0lUX0RPTV9UWVBFX1RF
WFRfVFJBQ0tfQ1VFLCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5U
X1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZGF0YV9jdWVfY2xhc3NfaW5pdChXZWJLaXRET01EYXRhQ3VlQ2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdENsYXNzKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9kYXRhX2N1ZV9pbml0KFdlYktpdERPTURhdGFDdWUqIHJlcXVlc3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURh
dGFDdWUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFjMDY4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFDdWUuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TURhdGFDdWVfaAorI2RlZmluZSBXZWJLaXRET01EYXRhQ3VlX2gKKworI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9EQVRBX0NVRSAgICAgICAgICAgICh3ZWJraXRfZG9tX2RhdGFfY3Vl
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fREFUQV9DVUUob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RBVEFf
Q1VFLCBXZWJLaXRET01EYXRhQ3VlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9EQVRBX0NVRV9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfREFUQV9DVUUsIFdlYktpdERPTURhdGFDdWVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19EQVRBX0NVRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfREFUQV9DVUUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RB
VEFfQ1VFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9EQVRBX0NVRSkpCisjZGVmaW5lIFdFQktJVF9ET01fREFUQV9DVUVfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX0RBVEFfQ1VFLCBXZWJLaXRET01EYXRhQ3VlQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTURhdGFDdWUgeworICAgIFdlYktpdERPTVRleHRUcmFja0N1ZSBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURhdGFDdWVDbGFzcyB7CisgICAgV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2RvbV9kYXRhX2N1ZV9nZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURh
dGFDdWVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhQ3Vl
UHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJdGVyYWJsZVByaXZh
dGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhQ3VlUHJpdmF0ZS5oCmluZGV4IGVlMDZiYWYuLmE2YTA4
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFDdWVQcml2
YXRlLmgKQEAgLTE4LDE2ICsxOCwxOSBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZV9oCi0jZGVmaW5l
IFdlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01EYXRhQ3Vl
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURhdGFDdWVQcml2YXRlX2gKIAotI2luY2x1ZGUg
IlRlc3RJdGVyYWJsZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0SXRlcmFi
bGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RhdGFDdWUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NRGF0YUN1ZS5oPgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKIAogbmFtZXNwYWNl
IFdlYktpdCB7Ci1XZWJLaXRET01UZXN0SXRlcmFibGUqIHdyYXBUZXN0SXRlcmFibGUoV2ViQ29y
ZTo6VGVzdEl0ZXJhYmxlKik7Ci1XZWJLaXRET01UZXN0SXRlcmFibGUqIGtpdChXZWJDb3JlOjpU
ZXN0SXRlcmFibGUqKTsKLVdlYkNvcmU6OlRlc3RJdGVyYWJsZSogY29yZShXZWJLaXRET01UZXN0
SXRlcmFibGUqKTsKK1dlYktpdERPTURhdGFDdWUqIHdyYXBEYXRhQ3VlKFdlYkNvcmU6OkRhdGFD
dWUqKTsKK1dlYktpdERPTURhdGFDdWUqIGtpdChXZWJDb3JlOjpEYXRhQ3VlKik7CitXZWJDb3Jl
OjpEYXRhQ3VlKiBjb3JlKFdlYktpdERPTURhdGFDdWUqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZV9oICovCisjZW5kaWYg
LyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NRGF0YUN1ZVBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGQ4NzI0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01EYXRhYmFzZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURhdGFiYXNlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2RlZmluZSBXRUJLSVRfRE9NX0RBVEFCQVNFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RBVEFCQVNFLCBXZWJLaXRE
T01EYXRhYmFzZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01EYXRhYmFzZVBy
aXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpEYXRhYmFzZT4gY29yZU9iamVjdDsKK30gV2Vi
S2l0RE9NRGF0YWJhc2VQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9N
RGF0YWJhc2UqIGtpdChXZWJDb3JlOjpEYXRhYmFzZSogb2JqKQoreworICAgIGlmICghb2JqKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RBVEFCQVNFKHJldCk7CisK
KyAgICByZXR1cm4gd3JhcERhdGFiYXNlKG9iaik7Cit9CisKK1dlYkNvcmU6OkRhdGFiYXNlKiBj
b3JlKFdlYktpdERPTURhdGFiYXNlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGF0YWJhc2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01EYXRhYmFzZSogd3JhcERhdGFiYXNl
KFdlYkNvcmU6OkRhdGFiYXNlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9EQVRBQkFTRShnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0RBVEFCQVNFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURhdGFi
YXNlLCB3ZWJraXRfZG9tX2RhdGFiYXNlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9WRVJTSU9OLAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9kYXRhYmFzZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9EQVRBQkFTRV9HRVRfUFJJVkFU
RShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTURhdGFiYXNlUHJpdmF0ZSgp
OworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kYXRhYmFzZV9n
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01EYXRhYmFzZSogc2VsZiA9
IFdFQktJVF9ET01fREFUQUJBU0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9WRVJTSU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2RhdGFiYXNlX2dldF92ZXJzaW9uKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RhdGFiYXNlX2NvbnN0cnVjdG9yKEdUeXBl
IHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBh
cmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fZGF0YWJhc2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKwor
ICAgIFdlYktpdERPTURhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fREFUQUJBU0Vf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RGF0YWJhc2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fZGF0YWJhc2VfY2xhc3NfaW5pdChXZWJLaXRET01EYXRhYmFzZUNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xh
c3MsIHNpemVvZihXZWJLaXRET01EYXRhYmFzZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kYXRhYmFzZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9kYXRhYmFzZV9maW5hbGl6ZTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZGF0YWJhc2VfZ2V0X3Byb3Bl
cnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1ZFUlNJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAidmVyc2lvbiIsCisgICAgICAgICAgICAiRGF0YWJhc2U6dmVy
c2lvbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEYXRhYmFzZTp2ZXJzaW9uIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kYXRhYmFzZV9pbml0KFdlYktpdERPTURhdGFi
YXNlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTURhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fREFUQUJBU0VfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRET01EYXRhYmFzZVByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZGF0YWJh
c2VfZ2V0X3ZlcnNpb24oV2ViS2l0RE9NRGF0YWJhc2UqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfREFUQUJBU0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRhdGFiYXNlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnZlcnNpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NYXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNlLmgKc2ltaWxhcml0eSBpbmRleCA1NCUK
cmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NYXR0cmlidXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2UuaAppbmRleCA0MTBk
NjQ3Li4xMzVhMWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNlLmgK
QEAgLTE4LDggKzE4LDggQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwog
Ci0jaWZuZGVmIFdlYktpdERPTWF0dHJpYnV0ZV9oCi0jZGVmaW5lIFdlYktpdERPTWF0dHJpYnV0
ZV9oCisjaWZuZGVmIFdlYktpdERPTURhdGFiYXNlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRGF0YWJh
c2VfaAogCiAjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCiAKQEAgLTI5LDQwICsy
OSwzNiBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfQVRUUklCVVRFICAgICAgICAgICAgKHdlYmtpdF9kb21fYXR0cmlidXRlX2dl
dF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fQVRUUklCVVRFKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BVFRSSUJV
VEUsIFdlYktpdERPTWF0dHJpYnV0ZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fQVRUUklCVVRFX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9BVFRSSUJVVEUsIFdlYktpdERPTWF0dHJpYnV0ZUNsYXNzKQotI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0FUVFJJQlVURShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQVRUUklCVVRFKSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9JU19BVFRSSUJVVEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FUVFJJQlVURSkpCi0jZGVmaW5lIFdFQktJVF9ET01fQVRU
UklCVVRFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9BVFRSSUJVVEUsIFdlYktpdERPTWF0dHJpYnV0ZUNsYXNzKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RBVEFCQVNFICAgICAgICAgICAgKHdlYmtpdF9kb21fZGF0
YWJhc2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9EQVRBQkFTRShvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
REFUQUJBU0UsIFdlYktpdERPTURhdGFiYXNlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9EQVRBQkFT
RV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfREFUQUJBU0UsIFdlYktpdERPTURhdGFiYXNlQ2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfREFUQUJBU0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19EQVRBQkFTRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RBVEFC
QVNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9EQVRBQkFTRSwgV2ViS2l0RE9NRGF0YWJhc2VDbGFzcykpCiAKLXN0cnVj
dCBfV2ViS2l0RE9NYXR0cmlidXRlIHsKK3N0cnVjdCBfV2ViS2l0RE9NRGF0YWJhc2UgewogICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7CiB9OwogCi1zdHJ1Y3QgX1dlYktpdERP
TWF0dHJpYnV0ZUNsYXNzIHsKK3N0cnVjdCBfV2ViS2l0RE9NRGF0YWJhc2VDbGFzcyB7CiAgICAg
V2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwogfTsKIAogV0VCS0lUX0FQSSBHVHlw
ZQotd2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3R5cGUodm9pZCk7Cit3ZWJraXRfZG9tX2RhdGFi
YXNlX2dldF90eXBlKHZvaWQpOwogCiAvKioKLSAqIHdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9y
ZWFkb25seToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01hdHRyaWJ1dGUKKyAqIHdlYmtpdF9kb21f
ZGF0YWJhc2VfZ2V0X3ZlcnNpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRGF0YWJhc2UKICAq
CiAgKiBSZXR1cm5zOiBBICNnY2hhcgogICoKICAqIFN0YWJpbGl0eTogVW5zdGFibGUKICoqLwog
V0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9yZWFkb25seShXZWJL
aXRET01hdHRyaWJ1dGUqIHNlbGYpOword2Via2l0X2RvbV9kYXRhYmFzZV9nZXRfdmVyc2lvbihX
ZWJLaXRET01EYXRhYmFzZSogc2VsZik7CiAKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0RXhjZXB0
aW9uX2ggKi8KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRp
ZiAvKiBXZWJLaXRET01hdHRyaWJ1dGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTURhdGFiYXNl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNl
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMzEyZjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRGF0YWJh
c2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRGF0
YWJhc2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01EYXRhYmFzZSogd3JhcERh
dGFiYXNlKFdlYkNvcmU6OkRhdGFiYXNlKik7CitXZWJLaXRET01EYXRhYmFzZSoga2l0KFdlYkNv
cmU6OkRhdGFiYXNlKik7CitXZWJDb3JlOjpEYXRhYmFzZSogY29yZShXZWJLaXRET01EYXRhYmFz
ZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01EYXRhYmFz
ZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01EZXByZWNhdGVkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGVwcmVjYXRlZC5jcHAKc2ltaWxhcml0
eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01EZXByZWNhdGVkLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EZXByZWNhdGVkLmNwcAppbmRl
eCBhYmI2ZWFmLi43NTNhYzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGVwcmVjYXRlZC5jcHAK
QEAgLTIwLDEyICsyMCwxMiBAQAogI2luY2x1ZGUgIldlYktpdERPTURlcHJlY2F0ZWQuaCIKIAog
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmgiCi0jaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTENvbGxlY3Rpb24uaD4KICNpbmNsdWRlICJXZWJLaXRET01E
b2N1bWVudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01FbGVtZW50UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdERPTUhUTUxEb2N1bWVudFByaXZhdGUuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRGVwcmVjYXRlZC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01EZXByZWNhdGVkLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01EZXByZWNhdGVkLmgKcmVuYW1lIHRvIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRGVwcmVjYXRlZC5oCmluZGV4IGNjNDQ4ODkuLjFiOTM0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRGVwcmVjYXRlZC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRGVwcmVjYXRlZC5oCkBAIC0xNjMsNiArMTYzLDcgQEAgd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9lbGVtZW50c19ieV9jbGFzc19uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGEKICAqIHdlYmtpdF9kb21fbm9kZV9jbG9uZV9ub2RlOgogICogQHNlbGY6IEEgI1dlYktpdERP
TU5vZGUKICAqIEBkZWVwOiBBICNnYm9vbGVhbgorICogQGVycm9yOiAjR0Vycm9yCiAgKgogICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCiAgKgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yNTkxZjIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1
bWVudC5jcHAKQEAgLTAsMCArMSwyMDA0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUF0dHJQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ0RBVEFTZWN0aW9uUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NQ29tbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01JbXBsZW1l
bnRhdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Eb2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVu
dFR5cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxIZWFkRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MU2Ny
aXB0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlRmlsdGVyUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVJdGVyYXRvclByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUmFu
Z2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3R5bGVTaGVldExpc3RQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01U
cmVlV2Fsa2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVhQYXRoRXhwcmVzc2lvblBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVy
dFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50VW5zdGFibGUuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRG9jdW1lbnQqIGtpdChXZWJDb3JlOjpEb2N1bWVu
dCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPQ1VNRU5UKGtpdChzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpEb2N1bWVudCogY29yZShX
ZWJLaXRET01Eb2N1bWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkRvY3VtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRG9jdW1lbnQqIHdyYXBEb2N1bWVudChXZWJD
b3JlOjpEb2N1bWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fRE9DVU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQ
RV9ET0NVTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9jdW1l
bnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29y
ZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X2FkZF9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnQqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9kb2N1bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTURvY3VtZW50LCB3ZWJraXRfZG9tX2Rv
Y3VtZW50LCBXRUJLSVRfRE9NX1RZUEVfTk9ERSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9ET0NUWVBFLAorICAgIFBST1BfSU1QTEVN
RU5UQVRJT04sCisgICAgUFJPUF9ET0NVTUVOVF9FTEVNRU5ULAorICAgIFBST1BfSU5QVVRfRU5D
T0RJTkcsCisgICAgUFJPUF9YTUxfRU5DT0RJTkcsCisgICAgUFJPUF9YTUxfVkVSU0lPTiwKKyAg
ICBQUk9QX1hNTF9TVEFOREFMT05FLAorICAgIFBST1BfRE9DVU1FTlRfVVJJLAorICAgIFBST1Bf
REVGQVVMVF9WSUVXLAorICAgIFBST1BfU1RZTEVfU0hFRVRTLAorICAgIFBST1BfQ09OVEVOVF9U
WVBFLAorICAgIFBST1BfVElUTEUsCisgICAgUFJPUF9ESVIsCisgICAgUFJPUF9ERVNJR05fTU9E
RSwKKyAgICBQUk9QX1JFRkVSUkVSLAorICAgIFBST1BfRE9NQUlOLAorICAgIFBST1BfVVJMLAor
ICAgIFBST1BfQ09PS0lFLAorICAgIFBST1BfQk9EWSwKKyAgICBQUk9QX0hFQUQsCisgICAgUFJP
UF9JTUFHRVMsCisgICAgUFJPUF9BUFBMRVRTLAorICAgIFBST1BfTElOS1MsCisgICAgUFJPUF9G
T1JNUywKKyAgICBQUk9QX0FOQ0hPUlMsCisgICAgUFJPUF9FTUJFRFMsCisgICAgUFJPUF9QTFVH
SU5TLAorICAgIFBST1BfU0NSSVBUUywKKyAgICBQUk9QX0xBU1RfTU9ESUZJRUQsCisgICAgUFJP
UF9DSEFSU0VULAorICAgIFBST1BfUkVBRFlfU1RBVEUsCisgICAgUFJPUF9DSEFSQUNURVJfU0VU
LAorICAgIFBST1BfUFJFRkVSUkVEX1NUWUxFU0hFRVRfU0VULAorICAgIFBST1BfU0VMRUNURURf
U1RZTEVTSEVFVF9TRVQsCisgICAgUFJPUF9BQ1RJVkVfRUxFTUVOVCwKKyAgICBQUk9QX0NPTVBB
VF9NT0RFLAorICAgIFBST1BfV0VCS0lUX0lTX0ZVTExfU0NSRUVOLAorICAgIFBST1BfV0VCS0lU
X0ZVTExfU0NSRUVOX0tFWUJPQVJEX0lOUFVUX0FMTE9XRUQsCisgICAgUFJPUF9XRUJLSVRfQ1VS
UkVOVF9GVUxMX1NDUkVFTl9FTEVNRU5ULAorICAgIFBST1BfV0VCS0lUX0ZVTExTQ1JFRU5fRU5B
QkxFRCwKKyAgICBQUk9QX1dFQktJVF9GVUxMU0NSRUVOX0VMRU1FTlQsCisgICAgUFJPUF9QT0lO
VEVSX0xPQ0tfRUxFTUVOVCwKKyAgICBQUk9QX1ZJU0lCSUxJVFlfU1RBVEUsCisgICAgUFJPUF9I
SURERU4sCisgICAgUFJPUF9DVVJSRU5UX1NDUklQVCwKKyAgICBQUk9QX09SSUdJTiwKKyAgICBQ
Uk9QX1NDUk9MTElOR19FTEVNRU5ULAorICAgIFBST1BfQ0hJTERSRU4sCisgICAgUFJPUF9GSVJT
VF9FTEVNRU5UX0NISUxELAorICAgIFBST1BfTEFTVF9FTEVNRU5UX0NISUxELAorICAgIFBST1Bf
Q0hJTERfRUxFTUVOVF9DT1VOVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1l
bnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0RPQ1VNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfWE1MX1ZFUlNJT046CisgICAgICAgIHdlYmtpdF9k
b21fZG9jdW1lbnRfc2V0X3htbF92ZXJzaW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfWE1MX1NUQU5EQUxP
TkU6CisgICAgICAgIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3htbF9zdGFuZGFsb25lKHNlbGYs
IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0RPQ1VNRU5UX1VSSToKKyAgICAgICAgd2Via2l0X2RvbV9kb2N1bWVudF9z
ZXRfZG9jdW1lbnRfdXJpKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVElUTEU6CisgICAgICAgIHdlYmtpdF9kb21fZG9jdW1l
bnRfc2V0X3RpdGxlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRElSOgorICAgICAgICB3ZWJraXRfZG9tX2RvY3VtZW50X3Nl
dF9kaXIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9ERVNJR05fTU9ERToKKyAgICAgICAgd2Via2l0X2RvbV9kb2N1bWVudF9z
ZXRfZGVzaWduX21vZGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9DT09LSUU6CisgICAgICAgIHdlYmtpdF9kb21fZG9jdW1l
bnRfc2V0X2Nvb2tpZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIQVJTRVQ6CisgICAgICAgIHdlYmtpdF9k
b21fZG9jdW1lbnRfc2V0X2NoYXJzZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9TVFlMRVNIRUVUX1NFVDoK
KyAgICAgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTURvY3VtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9ET0NVTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0RPQ1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9j
dHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTVBMRU1FTlRBVElP
TjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9pbXBsZW1lbnRhdGlvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9ET0NVTUVOVF9FTEVNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvY3VtZW50X2VsZW1lbnQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSU5QVVRfRU5DT0RJTkc6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2lucHV0X2VuY29kaW5nKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1hNTF9FTkNPRElORzoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfeG1s
X2VuY29kaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1hNTF9WRVJT
SU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF94bWxfdmVyc2lvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9YTUxfU1RBTkRBTE9ORToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfeG1sX3N0YW5kYWxvbmUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRE9DVU1FTlRfVVJJOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF91cmkoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9WSUVXOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmll
dyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVFlMRV9TSEVFVFM6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
c3R5bGVfc2hlZXRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRF
TlRfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfY29udGVudF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1RJVExFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF90aXRsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9ESVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2RpcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9E
RVNJR05fTU9ERToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfZGVzaWduX21vZGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUkVGRVJSRVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X3JlZmVycmVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0RPTUFJTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9tYWluKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1VSTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfdXJsKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0NPT0tJRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfY29va2llKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0JPRFk6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IRUFEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSU1BR0VTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2ltYWdlcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9BUFBMRVRTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2FwcGxldHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTElOS1M6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfbGlua3Moc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfRk9STVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZm9ybXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QU5DSE9SUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9hbmNob3JzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0VNQkVEUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9lbWJlZHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
UExVR0lOUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9wbHVnaW5zKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NDUklQVFM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfc2NyaXB0cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9MQVNUX01PRElGSUVEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9sYXN0X21vZGlmaWVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NIQVJTRVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoYXJzZXQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUkVBRFlfU1RBVEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3JlYWR5X3N0YXRlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIQVJBQ1RFUl9TRVQ6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoYXJhY3Rlcl9z
ZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJFRkVSUkVEX1NUWUxF
U0hFRVRfU0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9wcmVmZXJyZWRfc3R5bGVzaGVldF9zZXQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURURfU1RZTEVTSEVFVF9TRVQ6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3NlbGVjdGVk
X3N0eWxlc2hlZXRfc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FD
VElWRV9FTEVNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2FjdGl2ZV9lbGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NPTVBBVF9NT0RFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb21wYXRfbW9kZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfSVNfRlVMTF9TQ1JFRU46CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9p
c19mdWxsX3NjcmVlbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJL
SVRfRlVMTF9TQ1JFRU5fS0VZQk9BUkRfSU5QVVRfQUxMT1dFRDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxfc2Ny
ZWVuX2tleWJvYXJkX2lucHV0X2FsbG93ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfV0VCS0lUX0NVUlJFTlRfRlVMTF9TQ1JFRU5fRUxFTUVOVDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfY3Vy
cmVudF9mdWxsX3NjcmVlbl9lbGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1dFQktJVF9GVUxMU0NSRUVOX0VOQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9mdWxsc2NyZWVuX2Vu
YWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0ZVTExT
Q1JFRU5fRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbHNjcmVlbl9lbGVtZW50KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPSU5URVJfTE9DS19FTEVNRU5UOgorICAgICAgICBn
X3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3BvaW50ZXJf
bG9ja19lbGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZJU0lC
SUxJVFlfU1RBVEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3Zpc2liaWxpdHlfc3RhdGUoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSElEREVOOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oaWRkZW4oc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ1VSUkVOVF9TQ1JJUFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY3VycmVudF9zY3JpcHQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9vcmlnaW4oc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMSU5HX0VMRU1FTlQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2Nyb2xs
aW5nX2VsZW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hJTERS
RU46CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfY2hpbGRyZW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklS
U1RfRUxFTUVOVF9DSElMRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9maXJzdF9lbGVtZW50X2NoaWxkKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0xBU1RfRUxFTUVOVF9DSElMRDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9sYXN0X2VsZW1lbnRf
Y2hpbGQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hJTERfRUxFTUVO
VF9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2NoaWxkX2VsZW1lbnRfY291bnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9jbGFzc19pbml0KFdlYktpdERPTURvY3VtZW50
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0RPQ1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisg
ICAgICAgICAgICAiZG9jdHlwZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6ZG9jdHlwZSIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURvY3VtZW50VHlwZSogRG9jdW1lbnQ6ZG9j
dHlwZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVFlQRSwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lNUExF
TUVOVEFUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImlt
cGxlbWVudGF0aW9uIiwKKyAgICAgICAgICAgICJEb2N1bWVudDppbXBsZW1lbnRhdGlvbiIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBEb2N1bWVu
dDppbXBsZW1lbnRhdGlvbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX0lNUExF
TUVOVEFUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRE9DVU1FTlRfRUxFTUVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJkb2N1bWVudC1lbGVtZW50IiwKKyAgICAgICAgICAgICJEb2N1bWVu
dDpkb2N1bWVudC1lbGVtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRWxl
bWVudCogRG9jdW1lbnQ6ZG9jdW1lbnQtZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0lOUFVUX0VOQ09ESU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImlucHV0LWVuY29kaW5nIiwKKyAgICAgICAgICAgICJEb2N1bWVu
dDppbnB1dC1lbmNvZGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVu
dDppbnB1dC1lbmNvZGluZyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1hNTF9FTkNPRElORywKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ4bWwtZW5jb2RpbmciLAorICAg
ICAgICAgICAgIkRvY3VtZW50OnhtbC1lbmNvZGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBEb2N1bWVudDp4bWwtZW5jb2RpbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9YTUxfVkVS
U0lPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ4bWwtdmVy
c2lvbiIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6eG1sLXZlcnNpb24iLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OnhtbC12ZXJzaW9uIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1hNTF9TVEFOREFMT05FLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJ4bWwtc3RhbmRhbG9uZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6eG1sLXN0YW5k
YWxvbmUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gRG9jdW1lbnQ6eG1sLXN0
YW5kYWxvbmUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRE9DVU1FTlRfVVJJLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRvY3VtZW50LXVyaSIsCisgICAgICAg
ICAgICAiRG9jdW1lbnQ6ZG9jdW1lbnQtdXJpIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBEb2N1bWVudDpkb2N1bWVudC11cmkiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVF9W
SUVXLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImRlZmF1bHQt
dmlldyIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6ZGVmYXVsdC12aWV3IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NV2luZG93KiBEb2N1bWVudDpkZWZhdWx0LXZpZXciLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVFlMRV9TSEVFVFMsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic3R5bGUtc2hlZXRzIiwK
KyAgICAgICAgICAgICJEb2N1bWVudDpzdHlsZS1zaGVldHMiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01TdHlsZVNoZWV0TGlzdCogRG9jdW1lbnQ6c3R5bGUtc2hlZXRzIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNULAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVOVF9UWVBF
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvbnRlbnQtdHlw
ZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6Y29udGVudC10eXBlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50OmNvbnRlbnQtdHlwZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1RJVExFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRpdGxl
IiwKKyAgICAgICAgICAgICJEb2N1bWVudDp0aXRsZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogRG9jdW1lbnQ6dGl0bGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElSLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRpciIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6ZGlyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBEb2N1bWVudDpk
aXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVTSUdOX01PREUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiZGVzaWduLW1vZGUiLAorICAgICAgICAgICAgIkRvY3Vt
ZW50OmRlc2lnbi1tb2RlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBEb2N1bWVu
dDpkZXNpZ24tbW9kZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUZFUlJFUiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJyZWZlcnJlciIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6cmVmZXJyZXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1l
bnQ6cmVmZXJyZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ET01BSU4sCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZG9tYWluIiwKKyAgICAgICAgICAgICJEb2N1bWVu
dDpkb21haW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6ZG9tYWlu
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfVVJMLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgInVybCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6dXJsIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50OnVybCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NP
T0tJRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb29raWUi
LAorICAgICAgICAgICAgIkRvY3VtZW50OmNvb2tpZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogRG9jdW1lbnQ6Y29va2llIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JPRFksCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiYm9keSIsCisgICAgICAgICAg
ICAiRG9jdW1lbnQ6Ym9keSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxF
bGVtZW50KiBEb2N1bWVudDpib2R5IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9IRUFELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgImhlYWQiLAorICAgICAgICAgICAgIkRvY3VtZW50OmhlYWQiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIERvY3VtZW50OmhlYWQiLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRF9FTEVNRU5ULAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSU1BR0VTLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImltYWdlcyIsCisgICAgICAgICAg
ICAiRG9jdW1lbnQ6aW1hZ2VzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb24qIERvY3VtZW50OmltYWdlcyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQVBQTEVUUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJhcHBsZXRzIiwKKyAgICAgICAgICAgICJEb2N1bWVudDphcHBsZXRz
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIERvY3Vt
ZW50OmFwcGxldHMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElP
TiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0xJTktTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImxp
bmtzIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpsaW5rcyIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDpsaW5rcyIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STVMsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9ybXMiLAorICAgICAgICAgICAgIkRvY3Vt
ZW50OmZvcm1zIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qIERvY3VtZW50OmZvcm1zIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NP
TExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9BTkNIT1JTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAg
ICAgICAgImFuY2hvcnMiLAorICAgICAgICAgICAgIkRvY3VtZW50OmFuY2hvcnMiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6YW5jaG9y
cyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU1CRURT
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImVtYmVkcyIsCisg
ICAgICAgICAgICAiRG9jdW1lbnQ6ZW1iZWRzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24qIERvY3VtZW50OmVtYmVkcyIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUExVR0lOUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJwbHVnaW5zIiwKKyAgICAgICAgICAgICJEb2N1bWVu
dDpwbHVnaW5zIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qIERvY3VtZW50OnBsdWdpbnMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
Q09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NDUklQVFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAg
ICAgICAgICAic2NyaXB0cyIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6c2NyaXB0cyIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDpzY3Jp
cHRzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQVNU
X01PRElGSUVELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxh
c3QtbW9kaWZpZWQiLAorICAgICAgICAgICAgIkRvY3VtZW50Omxhc3QtbW9kaWZpZWQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6bGFzdC1tb2RpZmllZCIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0NIQVJTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiY2hhcnNldCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6Y2hhcnNldCIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogRG9jdW1lbnQ6Y2hhcnNldCIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9SRUFEWV9TVEFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJyZWFkeS1zdGF0ZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6cmVhZHktc3RhdGUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6cmVhZHktc3RhdGUiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9DSEFSQUNURVJfU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImNoYXJhY3Rlci1zZXQiLAorICAgICAgICAgICAgIkRvY3VtZW50
OmNoYXJhY3Rlci1zZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6
Y2hhcmFjdGVyLXNldCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BSRUZFUlJFRF9TVFlMRVNIRUVUX1NF
VCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwcmVmZXJyZWQt
c3R5bGVzaGVldC1zZXQiLAorICAgICAgICAgICAgIkRvY3VtZW50OnByZWZlcnJlZC1zdHlsZXNo
ZWV0LXNldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDpwcmVmZXJy
ZWQtc3R5bGVzaGVldC1zZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxFQ1RFRF9TVFlMRVNIRUVU
X1NFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzZWxlY3Rl
ZC1zdHlsZXNoZWV0LXNldCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6c2VsZWN0ZWQtc3R5bGVz
aGVldC1zZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OnNlbGVj
dGVkLXN0eWxlc2hlZXQtc2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FDVElWRV9FTEVNRU5ULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImFjdGl2ZS1lbGVtZW50
IiwKKyAgICAgICAgICAgICJEb2N1bWVudDphY3RpdmUtZWxlbWVudCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIERvY3VtZW50OmFjdGl2ZS1lbGVtZW50IiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09NUEFUX01PREUsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29tcGF0LW1vZGUiLAorICAgICAg
ICAgICAgIkRvY3VtZW50OmNvbXBhdC1tb2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2No
YXIqIERvY3VtZW50OmNvbXBhdC1tb2RlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0lTX0ZV
TExfU0NSRUVOLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3
ZWJraXQtaXMtZnVsbC1zY3JlZW4iLAorICAgICAgICAgICAgIkRvY3VtZW50OndlYmtpdC1pcy1m
dWxsLXNjcmVlbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIERvY3VtZW50Ondl
YmtpdC1pcy1mdWxsLXNjcmVlbiIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9GVUxMX1ND
UkVFTl9LRVlCT0FSRF9JTlBVVF9BTExPV0VELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJ3ZWJraXQtZnVsbC1zY3JlZW4ta2V5Ym9hcmQtaW5wdXQtYWxsb3dl
ZCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6d2Via2l0LWZ1bGwtc2NyZWVuLWtleWJvYXJkLWlu
cHV0LWFsbG93ZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBEb2N1bWVudDp3
ZWJraXQtZnVsbC1zY3JlZW4ta2V5Ym9hcmQtaW5wdXQtYWxsb3dlZCIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1dFQktJVF9DVVJSRU5UX0ZVTExfU0NSRUVOX0VMRU1FTlQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAid2Via2l0LWN1cnJlbnQtZnVsbC1zY3JlZW4t
ZWxlbWVudCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6d2Via2l0LWN1cnJlbnQtZnVsbC1zY3Jl
ZW4tZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIERv
Y3VtZW50OndlYmtpdC1jdXJyZW50LWZ1bGwtc2NyZWVuLWVsZW1lbnQiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfRlVMTFNDUkVFTl9FTkFCTEVELAorICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3ZWJraXQtZnVsbHNjcmVl
bi1lbmFibGVkIiwKKyAgICAgICAgICAgICJEb2N1bWVudDp3ZWJraXQtZnVsbHNjcmVlbi1lbmFi
bGVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gRG9jdW1lbnQ6d2Via2l0LWZ1
bGxzY3JlZW4tZW5hYmxlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9GVUxMU0NSRUVO
X0VMRU1FTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAid2Vi
a2l0LWZ1bGxzY3JlZW4tZWxlbWVudCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6d2Via2l0LWZ1
bGxzY3JlZW4tZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1l
bnQqIERvY3VtZW50OndlYmtpdC1mdWxsc2NyZWVuLWVsZW1lbnQiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9QT0lOVEVSX0xPQ0tfRUxFTUVOVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwb2ludGVyLWxvY2stZWxlbWVudCIsCisg
ICAgICAgICAgICAiRG9jdW1lbnQ6cG9pbnRlci1sb2NrLWVsZW1lbnQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBEb2N1bWVudDpwb2ludGVyLWxvY2stZWxlbWVu
dCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZJU0lCSUxJVFlfU1RB
VEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmlzaWJpbGl0
eS1zdGF0ZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6dmlzaWJpbGl0eS1zdGF0ZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDp2aXNpYmlsaXR5LXN0YXRlIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfSElEREVOLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJoaWRkZW4iLAorICAgICAgICAgICAgIkRvY3VtZW50OmhpZGRlbiIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIERvY3VtZW50OmhpZGRlbiIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NVUlJFTlRfU0NSSVBULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgImN1cnJlbnQtc2NyaXB0IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpjdXJy
ZW50LXNjcmlwdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50KiBEb2N1bWVudDpjdXJyZW50LXNjcmlwdCIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9TQ1JJUFRfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09SSUdJTiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJvcmlnaW4iLAorICAgICAgICAgICAgIkRvY3VtZW50Om9y
aWdpbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDpvcmlnaW4iLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9TQ1JPTExJTkdfRUxFTUVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJzY3JvbGxpbmctZWxlbWVudCIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6c2Nyb2xsaW5nLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01FbGVtZW50KiBEb2N1bWVudDpzY3JvbGxpbmctZWxlbWVudCIsCisgICAgICAgICAgICBX
RUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NISUxEUkVOLAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgImNoaWxkcmVuIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpj
aGlsZHJlbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9u
KiBEb2N1bWVudDpjaGlsZHJlbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9D
T0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRklSU1RfRUxFTUVOVF9DSElMRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJE
b2N1bWVudDpmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NRWxlbWVudCogRG9jdW1lbnQ6Zmlyc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBU1RfRUxFTUVOVF9DSElMRCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJsYXN0LWVsZW1lbnQtY2hpbGQiLAor
ICAgICAgICAgICAgIkRvY3VtZW50Omxhc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIERvY3VtZW50Omxhc3QtZWxlbWVudC1jaGlsZCIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NISUxEX0VMRU1FTlRfQ09V
TlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJjaGlsZC1lbGVt
ZW50LWNvdW50IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpjaGlsZC1lbGVtZW50LWNvdW50IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIERvY3VtZW50OmNoaWxkLWVsZW1lbnQtY291
bnQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRf
aW5pdChXZWJLaXRET01Eb2N1bWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRl
X2VsZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0YWdOYW1lLCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodGFnTmFtZSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFRhZ05hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGFnTmFtZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVFbGVtZW50Rm9yQmluZGluZ3MoY29u
dmVydGVkVGFnTmFtZSwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9kb2N1bWVudF9mcmFnbWVudChXZWJLaXRET01Eb2N1bWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NVGV4dCogd2Via2l0X2RvbV9kb2N1
bWVudF9jcmVhdGVfdGV4dF9ub2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogZGF0YSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGF0YSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
RGF0YSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
VGV4dD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZVRleHROb2RlKGNv
bnZlcnRlZERhdGEpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTUNvbW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2Nv
bW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChkYXRhLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWREYXRhID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KGRhdGEpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDb21tZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlQ29tbWVudChjb252ZXJ0ZWREYXRhKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01DREFUQVNlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2NkYXRhX3NlY3Rp
b24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGF0YSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZERhdGEgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNEQVRBU2VjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZUNEQVRBU2VjdGlvbihjb252ZXJ0ZWREYXRhLCBlYykpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dl
YktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVf
cHJvY2Vzc2luZ19pbnN0cnVjdGlvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHRhcmdldCwgY29uc3QgZ2NoYXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbCh0YXJnZXQsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRhdGEsIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRUYXJnZXQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGFyZ2V0KTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWREYXRhID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5j
cmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29udmVydGVkVGFyZ2V0LCBjb252ZXJ0ZWREYXRh
LCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK1dlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0
ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmNyZWF0ZUF0dHJpYnV0ZShjb252ZXJ0ZWROYW1lLCBlYykpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxD
b2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9h
c19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0
YWduYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh0YWduYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRUYWduYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRhZ25hbWUpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnZlcnRlZFRhZ25hbWUpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtp
dF9kb21fZG9jdW1lbnRfaW1wb3J0X25vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktp
dERPTU5vZGUqIGltcG9ydGVkTm9kZSwgZ2Jvb2xlYW4gZGVlcCwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShpbXBvcnRlZE5vZGUpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9k
ZSogY29udmVydGVkSW1wb3J0ZWROb2RlID0gV2ViS2l0Ojpjb3JlKGltcG9ydGVkTm9kZSk7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbXBvcnROb2RlKCpjb252ZXJ0
ZWRJbXBvcnRlZE5vZGUsIGRlZXAsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9k
b2N1bWVudF9jcmVhdGVfZWxlbWVudF9ucyhXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIHF1YWxpZmllZE5hbWUsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChxdWFsaWZpZWROYW1lLCAwKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
TmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkUXVhbGlmaWVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChxdWFsaWZpZWROYW1lKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmNyZWF0ZUVsZW1lbnROUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZFF1YWxp
ZmllZE5hbWUsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVf
YXR0cmlidXRlX25zKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNw
YWNlVVJJLCBjb25zdCBnY2hhciogcXVhbGlmaWVkTmFtZSwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHF1YWxpZmllZE5hbWUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRRdWFsaWZpZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHF1YWxpZmllZE5h
bWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJD
b3JlOjpBdHRyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlQXR0cmli
dXRlTlMoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0ZWRRdWFsaWZpZWROYW1lLCBlYykp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwor
ICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50
c19ieV90YWdfbmFtZV9uc19hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG5hbWVzcGFjZVVSSSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwobG9jYWxOYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRMb2NhbE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobG9jYWxOYW1lKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVSSSwgY29udmVy
dGVkTG9jYWxOYW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2RvY3VtZW50X2Fkb3B0X25vZGUo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktpdERPTU5vZGUqIHNvdXJjZSwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzb3VyY2UpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2Vi
Q29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6
Tm9kZSogY29udmVydGVkU291cmNlID0gV2ViS2l0Ojpjb3JlKHNvdXJjZSk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5hZG9wdE5vZGUoKmNvbnZlcnRlZFNvdXJjZSwg
ZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01FdmVudCogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQoV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBldmVudFR5cGUsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChldmVudFR5cGUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFdmVudFR5
cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZXZlbnRUeXBlKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnQ+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVFdmVudChjb252ZXJ0ZWRFdmVudFR5cGUsIGVj
KSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NUmFuZ2UqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3JhbmdlKFdlYktp
dERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5jcmVhdGVSYW5nZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGVJdGVyYXRvciogd2Via2l0X2RvbV9k
b2N1bWVudF9jcmVhdGVfbm9kZV9pdGVyYXRvcihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2Vi
S2l0RE9NTm9kZSogcm9vdCwgZ3Vsb25nIHdoYXRUb1Nob3csIFdlYktpdERPTU5vZGVGaWx0ZXIq
IGZpbHRlciwgZ2Jvb2xlYW4gZXhwYW5kRW50aXR5UmVmZXJlbmNlcywgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyb290KSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWZpbHRlciB8fCBXRUJLSVRfRE9NX0lTX05PREVfRklMVEVSKGZp
bHRlciksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVy
dGVkUm9vdCA9IFdlYktpdDo6Y29yZShyb290KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUZp
bHRlcj4gY29udmVydGVkRmlsdGVyID0gV2ViS2l0Ojpjb3JlKGZpbHRlcik7CisgICAgUmVmUHRy
PFdlYkNvcmU6Ok5vZGVJdGVyYXRvcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmNyZWF0ZU5vZGVJdGVyYXRvcigqY29udmVydGVkUm9vdCwgd2hhdFRvU2hvdywgV1RGOjpnZXRQ
dHIoY29udmVydGVkRmlsdGVyKSwgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NVHJlZVdh
bGtlciogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfdHJlZV93YWxrZXIoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJvb3QsIGd1bG9uZyB3aGF0VG9TaG93LCBXZWJL
aXRET01Ob2RlRmlsdGVyKiBmaWx0ZXIsIGdib29sZWFuIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNl
bGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocm9v
dCksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFmaWx0ZXIgfHwgV0VCS0lUX0RPTV9J
U19OT0RFX0ZJTFRFUihmaWx0ZXIpLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNv
cmU6Ok5vZGUqIGNvbnZlcnRlZFJvb3QgPSBXZWJLaXQ6OmNvcmUocm9vdCk7CisgICAgUmVmUHRy
PFdlYkNvcmU6Ok5vZGVGaWx0ZXI+IGNvbnZlcnRlZEZpbHRlciA9IFdlYktpdDo6Y29yZShmaWx0
ZXIpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUcmVlV2Fsa2VyPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+Y3JlYXRlVHJlZVdhbGtlcigqY29udmVydGVkUm9vdCwgd2hhdFRvU2hv
dywgV1RGOjpnZXRQdHIoY29udmVydGVkRmlsdGVyKSwgZXhwYW5kRW50aXR5UmVmZXJlbmNlcykp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfb3ZlcnJp
ZGVfc3R5bGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktpdERPTUVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IGdjaGFyKiBwc2V1ZG9FbGVtZW50KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0VMRU1FTlQoZWxlbWVudCksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGNvbnZlcnRlZEVs
ZW1lbnQgPSBXZWJLaXQ6OmNvcmUoZWxlbWVudCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
UHNldWRvRWxlbWVudCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwc2V1ZG9FbGVtZW50KTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmdldE92ZXJyaWRlU3R5bGUoY29udmVydGVkRWxlbWVudCwgY29udmVy
dGVkUHNldWRvRWxlbWVudCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2NyZWF0ZV9leHByZXNzaW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogZXhwcmVzc2lvbiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV4cHJlc3Npb24sIDApOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfTlNfUkVTT0xWRVIocmVzb2x2ZXIpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAg
V2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkRXhwcmVzc2lvbiA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChleHByZXNz
aW9uKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVyPiBjb252ZXJ0ZWRSZXNv
bHZlciA9IFdlYktpdDo6Y29yZShyZXNvbHZlcik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbj4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZUV4cHJlc3Npb24oY29udmVydGVkRXhwcmVz
c2lvbiwgV1RGOjpnZXRQdHIoY29udmVydGVkUmVzb2x2ZXIpLCBlYykpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVhQYXRo
TlNSZXNvbHZlciogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfbnNfcmVzb2x2ZXIoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGVSZXNvbHZlcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGVSZXNvbHZlciksIDApOworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5v
ZGUqIGNvbnZlcnRlZE5vZGVSZXNvbHZlciA9IFdlYktpdDo6Y29yZShub2RlUmVzb2x2ZXIpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5jcmVhdGVOU1Jlc29sdmVyKGNvbnZlcnRlZE5vZGVSZXNvbHZlcikpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NWFBhdGhSZXN1bHQqIHdlYmtpdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBleHByZXNzaW9uLCBXZWJLaXRET01Ob2RlKiBjb250
ZXh0Tm9kZSwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwgZ3VzaG9ydCB0eXBl
LCBXZWJLaXRET01YUGF0aFJlc3VsdCogaW5SZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChleHByZXNzaW9uLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREUoY29udGV4dE5vZGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghcmVzb2x2ZXIgfHwgV0VCS0lUX0RPTV9JU19YUEFUSF9OU19SRVNPTFZFUihyZXNvbHZlciks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFpblJlc3VsdCB8fCBXRUJLSVRfRE9NX0lT
X1hQQVRIX1JFU1VMVChpblJlc3VsdCksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFeHByZXNzaW9uID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KGV4cHJlc3Npb24pOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZl
cnRlZENvbnRleHROb2RlID0gV2ViS2l0Ojpjb3JlKGNvbnRleHROb2RlKTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVyPiBjb252ZXJ0ZWRSZXNvbHZlciA9IFdlYktpdDo6Y29y
ZShyZXNvbHZlcik7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGNvbnZlcnRlZEluUmVzdWx0
ID0gV2ViS2l0Ojpjb3JlKGluUmVzdWx0KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6WFBhdGhSZXN1bHQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5ldmFsdWF0ZShjb252ZXJ0ZWRFeHByZXNzaW9uLCBjb252ZXJ0ZWRD
b250ZXh0Tm9kZSwgV1RGOjpnZXRQdHIoY29udmVydGVkUmVzb2x2ZXIpLCB0eXBlLCBjb252ZXJ0
ZWRJblJlc3VsdCwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X2V4ZWNfY29tbWFu
ZChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQsIGdib29sZWFu
IHVzZXJJbnRlcmZhY2UsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET0NVTUVOVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNvbW1hbmQsIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh2YWx1ZSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZENvbW1hbmQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoY29t
bWFuZCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmV4ZWNDb21tYW5kKGNv
bnZlcnRlZENvbW1hbmQsIHVzZXJJbnRlcmZhY2UsIGNvbnZlcnRlZFZhbHVlKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1h
bmRfZW5hYmxlZChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb21tYW5kLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkQ29tbWFuZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5xdWVyeUNvbW1hbmRFbmFibGVkKGNvbnZlcnRlZENvbW1hbmQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVl
cnlfY29tbWFuZF9pbmRldGVybShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IGNvbW1hbmQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb21tYW5kLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkQ29tbWFuZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5xdWVyeUNvbW1hbmRJbmRldGVybShjb252ZXJ0ZWRD
b21tYW5kKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X3F1ZXJ5X2NvbW1hbmRfc3RhdGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiBjb21tYW5kKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29tbWFuZCwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZENvbW1hbmQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoY29tbWFu
ZCk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cXVlcnlDb21tYW5kU3RhdGUoY29udmVy
dGVkQ29tbWFuZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX3N1cHBvcnRlZChXZWJLaXRET01Eb2N1bWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb21tYW5kLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkQ29tbWFuZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChjb21tYW5kKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5xdWVyeUNvbW1hbmRTdXBw
b3J0ZWQoY29udmVydGVkQ29tbWFuZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF92YWx1ZShXZWJLaXRET01Eb2N1bWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbW1hbmQs
IDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZENvbW1hbmQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
Y29tbWFuZCk7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
cXVlcnlDb21tYW5kVmFsdWUoY29udmVydGVkQ29tbWFuZCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50
c19ieV9uYW1lKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZWxlbWVudE5h
bWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGVsZW1lbnROYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRFbGVtZW50TmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChlbGVtZW50TmFtZSk7CisgICAg
UmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+Z2V0RWxlbWVudHNCeU5hbWUoY29udmVydGVkRWxlbWVudE5hbWUpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZWxlbWVudF9mcm9tX3BvaW50KFdlYktpdERPTURvY3VtZW50
KiBzZWxmLCBnbG9uZyB4LCBnbG9uZyB5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NUmFuZ2UqIHdl
YmtpdF9kb21fZG9jdW1lbnRfY2FyZXRfcmFuZ2VfZnJvbV9wb2ludChXZWJLaXRET01Eb2N1bWVu
dCogc2VsZiwgZ2xvbmcgeCwgZ2xvbmcgeSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+Y2FyZXRSYW5nZUZyb21Qb2ludCh4LCB5KSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01DU1NTdHls
ZURlY2xhcmF0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jc3Nfc3R5bGVfZGVjbGFy
YXRpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9u
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJh
dGlvbigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV9jbGFzc19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01Eb2N1bWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIGNsYXNzTmFtZXMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNsYXNzTmFt
ZXMsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZENsYXNzTmFtZXMgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgoY2xhc3NOYW1lcyk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShj
b252ZXJ0ZWRDbGFzc05hbWVzKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X2hhc19mb2N1cyhX
ZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0ZvY3VzKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3dlYmtpdF9j
YW5jZWxfZnVsbF9zY3JlZW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+d2Via2l0Q2FuY2VsRnVsbFNjcmVlbigp
OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfd2Via2l0X2V4aXRfZnVsbHNjcmVlbihX
ZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT53ZWJraXRFeGl0RnVsbHNjcmVlbigpOworfQorCit2b2lkIHdlYmtpdF9k
b21fZG9jdW1lbnRfZXhpdF9wb2ludGVyX2xvY2soV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5leGl0UG9pbnRlckxvY2soKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlBvaW50ZXIgTG9j
ayIpCisjZW5kaWYgLyogRU5BQkxFKFBPSU5URVJfTE9DSykgKi8KK30KKworV2ViS2l0RE9NRWxl
bWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChXZWJLaXRET01Eb2N1
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVsZW1lbnRJZCkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZWxl
bWVudElkLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFbGVtZW50SWQgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoZWxlbWVudElkKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldEVsZW1lbnRCeUlkKGNvbnZlcnRlZEVsZW1l
bnRJZCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9zZWxlY3RvcihX
ZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGVjdG9ycywgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVj
dG9ycyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cXVlcnlTZWxlY3Rvcihjb252ZXJ0ZWRTZWxlY3Rv
cnMsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfc2Vs
ZWN0b3JfYWxsKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3Jz
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChz
ZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZWN0b3JzLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6
RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVM
aXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cXVlcnlTZWxlY3RvckFsbChj
b252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9kb2N0eXBlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9j
dW1lbnRUeXBlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZG9jdHlwZSgpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktp
dERPTURPTUltcGxlbWVudGF0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbXBsZW1lbnRh
dGlvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1wbGVtZW50YXRpb24oKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01F
bGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF9lbGVtZW50KFdlYktpdERP
TURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmRvY3VtZW50RWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9p
bnB1dF9lbmNvZGluZyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+Y2hhcmFjdGVyU2V0V2l0aFVURjhGYWxsYmFjaygpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfeG1sX2VuY29k
aW5nKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT54bWxFbmNvZGluZygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfeG1sX3ZlcnNpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnhtbFZlcnNpb24oKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF94bWxfdmVyc2lv
bihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0
WE1MVmVyc2lvbihjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfeG1sX3N0YW5kYWxvbmUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT54bWxTdGFuZGFsb25lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF94bWxfc3RhbmRhbG9uZShXZWJLaXRE
T01Eb2N1bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0
ZW0tPnNldFhNTFN0YW5kYWxvbmUodmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF91cmkoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRvY3VtZW50VVJJKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfZG9jdW1lbnRfdXJp
KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldERvY3VtZW50VVJJKGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2Vi
S2l0RE9NRE9NV2luZG93KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5kZWZhdWx0VmlldygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVN0eWxlU2hlZXRMaXN0KiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9zdHlsZV9zaGVldHMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpTdHlsZVNoZWV0TGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PnN0eWxlU2hlZXRzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NvbnRlbnRfdHlwZShX
ZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
Y29udGVudFR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3RpdGxlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT50aXRsZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3RpdGxlKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFRp
dGxlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2RpcihXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+ZGlyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9k
b2N1bWVudF9zZXRfZGlyKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldERpcihjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZXNpZ25fbW9kZShXZWJLaXRET01E
b2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZGVzaWduTW9k
ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRf
c2V0X2Rlc2lnbl9tb2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldERlc2lnbk1vZGUoY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcmVmZXJyZXIoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnJlZmVy
cmVyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9kb21haW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmRvbWFpbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hh
ciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdXJsKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT51cmxGb3JCaW5kaW5ncygpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29va2ll
KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNvb2tpZShlYykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRf
Y29va2llKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVt
LT5zZXRDb29raWUoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUhUTUxF
bGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5ib2R5T3JGcmFtZXNldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfYm9keShXZWJLaXRE
T01Eb2N1bWVudCogc2VsZiwgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHZhbHVlLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHZhbHVlKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNv
bnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRCb2R5T3JGcmFtZXNldChjb252ZXJ0ZWRWYWx1
ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KK30KKworV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9oZWFkKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEhlYWRF
bGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aGVhZCgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhU
TUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbWFnZXMoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmltYWdlcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9hcHBsZXRzKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENv
bGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5hcHBsZXRzKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKFdlYktpdERP
TURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5saW5rcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9mb3JtcyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxD
b2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybXMoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYW5jaG9ycyhXZWJLaXRE
T01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+YW5jaG9ycygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9lbWJlZHMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRv
Y3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmVtYmVkcygp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dl
YktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wbHVnaW5zKFdl
YktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wbHVnaW5zKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X3NjcmlwdHMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNj
cmlwdHMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9tb2RpZmllZChXZWJLaXRE
T01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGFzdE1v
ZGlmaWVkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9jaGFyc2V0KFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5jaGFyc2V0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfY2hhcnNldChXZWJLaXRET01Eb2N1bWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkRv
Y3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRD
aGFyc2V0KGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X3JlYWR5X3N0YXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5yZWFkeVN0YXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGFyYWN0ZXJfc2V0KFdlYktpdERPTURv
Y3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jaGFyYWN0ZXJT
ZXRXaXRoVVRGOEZhbGxiYWNrKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wcmVmZXJyZWRfc3R5bGVzaGVldF9zZXQoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnByZWZlcnJl
ZFN0eWxlc2hlZXRTZXQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3NlbGVjdGVkX3N0eWxlc2hlZXRfc2V0KFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zZWxlY3RlZFN0eWxl
c2hlZXRTZXQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2Rv
Y3VtZW50X3NldF9zZWxlY3RlZF9zdHlsZXNoZWV0X3NldChXZWJLaXRET01Eb2N1bWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRTZWxl
Y3RlZFN0eWxlc2hlZXRTZXQoY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01FbGVtZW50
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hY3RpdmVfZWxlbWVudChXZWJLaXRET01Eb2N1bWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5hY3RpdmVFbGVtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NvbXBhdF9tb2Rl
KFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5jb21wYXRNb2RlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9pc19mdWxsX3NjcmVlbihXZWJLaXRET01Eb2N1bWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdElzRnVsbFNjcmVlbigpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtp
dF9mdWxsX3NjcmVlbl9rZXlib2FyZF9pbnB1dF9hbGxvd2VkKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2Via2l0RnVsbFNjcmVlbktleWJvYXJkSW5wdXRBbGxv
d2VkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2N1cnJlbnRfZnVsbF9zY3JlZW5fZWxlbWVudChXZWJL
aXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbHNjcmVlbl9lbmFibGVkKFdlYktpdERPTURv
Y3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYp
LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2Via2l0RnVsbHNjcmVlbkVuYWJsZWQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF93ZWJraXRfZnVsbHNjcmVlbl9lbGVtZW50KFdlYktpdERPTURvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfcG9pbnRlcl9sb2NrX2VsZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5wb2ludGVyTG9ja0VsZW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiUG9pbnRlciBMb2NrIikK
KyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoUE9JTlRFUl9MT0NLKSAqLworfQorCitn
Y2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdmlzaWJpbGl0eV9zdGF0ZShXZWJLaXRET01E
b2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmlzaWJpbGl0
eVN0YXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2hpZGRlbihXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRv
Y3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9
IGl0ZW0tPmhpZGRlbigpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUhUTUxT
Y3JpcHRFbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jdXJyZW50X3NjcmlwdChXZWJL
aXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3VycmVudFNjcmlwdCgpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9vcmlnaW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPm9yaWdpbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitX
ZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3JvbGxpbmdfZWxlbWVu
dChXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5zY3JvbGxpbmdFbGVtZW50KCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoaWxkcmVuKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5jaGlsZHJlbigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Zp
cnN0X2VsZW1lbnRfY2hpbGQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zmlyc3RFbGVtZW50Q2hpbGQoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+bGFzdEVsZW1lbnRDaGlsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0
ID0gaXRlbS0+Y2hpbGRFbGVtZW50Q291bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmNDk0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RG9jdW1lbnQuaApAQCAtMCwwICsxLDg0NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1l
bnRfaAorI2RlZmluZSBXZWJLaXRET01Eb2N1bWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9ET0NVTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlQob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5U
LCBXZWJLaXRET01Eb2N1bWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0RPQ1VNRU5ULCBXZWJLaXRET01Eb2N1bWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0RPQ1VNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9D
VU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0RPQ1VNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET0NVTUVOVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfRE9DVU1FTlQsIFdlYktpdERPTURvY3VtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTURvY3VtZW50IHsKKyAgICBXZWJLaXRET01Ob2RlIHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NTm9kZUNsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVf
ZWxlbWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHRhZ05hbWU6IEEg
I2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50
Kgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChXZWJLaXRET01Eb2N1bWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHRhZ05hbWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9kb2N1bWVudF9mcmFnbWVudDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3Vt
ZW50RnJhZ21lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9kb2N1bWVudF9mcmFnbWVu
dChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVu
dF9jcmVhdGVfdGV4dF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBA
ZGF0YTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTVRleHQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UZXh0Kgord2Via2l0X2RvbV9kb2N1
bWVudF9jcmVhdGVfdGV4dF9ub2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogZGF0YSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY29tbWVudDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGRhdGE6IEEgI2djaGFyCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Db21tZW50CisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NQ29tbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2Nv
bW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jZGF0YV9zZWN0aW9uOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZGF0YTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQ0RBVEFT
ZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ0RBVEFTZWN0aW9uKgord2Via2l0X2Rv
bV9kb2N1bWVudF9jcmVhdGVfY2RhdGFfc2VjdGlvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9wcm9jZXNzaW5nX2luc3RydWN0aW9uOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKiBAdGFyZ2V0OiBBICNnY2hhcgorICogQGRhdGE6IEEgI2djaGFy
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3Byb2Nl
c3NpbmdfaW5zdHJ1Y3Rpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0
YXJnZXQsIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50CisgKiBAbmFtZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQXR0cgorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTUF0dHIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9hdHRyaWJ1dGUo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lLCBHRXJyb3IqKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25h
bWVfYXNfaHRtbF9jb2xsZWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50Cisg
KiBAdGFnbmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgorICogU2luY2U6IDIuMTIKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Vs
ZW1lbnRzX2J5X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01Eb2N1bWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHRhZ25hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1l
bnRfaW1wb3J0X25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBpbXBv
cnRlZE5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBkZWVwOiBBICNnYm9vbGVhbgorICogQGVy
cm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fZG9jdW1l
bnRfaW1wb3J0X25vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktpdERPTU5vZGUqIGlt
cG9ydGVkTm9kZSwgZ2Jvb2xlYW4gZGVlcCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnRfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRG9jdW1lbnQKKyAqIEBuYW1lc3BhY2VVUkk6IChhbGxvdy1ub25lKTogQSAjZ2NoYXIKKyAq
IEBxdWFsaWZpZWROYW1lOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnRf
bnMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNv
bnN0IGdjaGFyKiBxdWFsaWZpZWROYW1lLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0cmlidXRlX25zOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURvY3VtZW50CisgKiBAbmFtZXNwYWNlVVJJOiAoYWxsb3ctbm9uZSk6IEEgI2djaGFyCisg
KiBAcXVhbGlmaWVkTmFtZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQXR0cgorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUF0dHIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9hdHRyaWJ1dGVfbnMo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0
IGdjaGFyKiBxdWFsaWZpZWROYW1lLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfbnNfYXNfaHRtbF9jb2xsZWN0
aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAbmFtZXNwYWNlVVJJOiBB
ICNnY2hhcgorICogQGxvY2FsTmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgorICogU2luY2U6IDIuMTIK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zX2FzX2h0bWxfY29sbGVjdGlvbihXZWJL
aXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2No
YXIqIGxvY2FsTmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9hZG9wdF9ub2Rl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAc291cmNlOiBBICNXZWJLaXRE
T01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Vi
a2l0X2RvbV9kb2N1bWVudF9hZG9wdF9ub2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJL
aXRET01Ob2RlKiBzb3VyY2UsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9ldmVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAor
ICogQGV2ZW50VHlwZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRXZlbnQKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01FdmVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2V2ZW50KFdlYktpdERP
TURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXZlbnRUeXBlLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfcmFuZ2U6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTVJhbmdlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NUmFuZ2UqCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2NyZWF0ZV9yYW5nZShXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfbm9kZV9pdGVyYXRvcjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHJvb3Q6IEEgI1dlYktpdERPTU5vZGUKKyAqIEB3
aGF0VG9TaG93OiBBICNndWxvbmcKKyAqIEBmaWx0ZXI6IChhbGxvdy1ub25lKTogQSAjV2ViS2l0
RE9NTm9kZUZpbHRlcgorICogQGV4cGFuZEVudGl0eVJlZmVyZW5jZXM6IEEgI2dib29sZWFuCisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dl
YktpdERPTU5vZGVJdGVyYXRvcgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVJdGVyYXRv
cioKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3IoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJvb3QsIGd1bG9uZyB3aGF0VG9TaG93LCBXZWJL
aXRET01Ob2RlRmlsdGVyKiBmaWx0ZXIsIGdib29sZWFuIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMs
IEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90
cmVlX3dhbGtlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHJvb3Q6IEEg
I1dlYktpdERPTU5vZGUKKyAqIEB3aGF0VG9TaG93OiBBICNndWxvbmcKKyAqIEBmaWx0ZXI6IChh
bGxvdy1ub25lKTogQSAjV2ViS2l0RE9NTm9kZUZpbHRlcgorICogQGV4cGFuZEVudGl0eVJlZmVy
ZW5jZXM6IEEgI2dib29sZWFuCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01UcmVlV2Fsa2VyKgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfdHJlZV93YWxr
ZXIoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJvb3QsIGd1bG9uZyB3
aGF0VG9TaG93LCBXZWJLaXRET01Ob2RlRmlsdGVyKiBmaWx0ZXIsIGdib29sZWFuIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9vdmVycmlkZV9zdHlsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICogQGVsZW1lbnQ6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBwc2V1ZG9FbGVtZW50OiAo
YWxsb3ctbm9uZSk6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X292ZXJyaWRlX3N0
eWxlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50LCBj
b25zdCBnY2hhciogcHNldWRvRWxlbWVudCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVu
dF9jcmVhdGVfZXhwcmVzc2lvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICog
QGV4cHJlc3Npb246IEEgI2djaGFyCisgKiBAcmVzb2x2ZXI6IEEgI1dlYktpdERPTVhQYXRoTlNS
ZXNvbHZlcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01YUGF0aEV4cHJlc3Npb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01YUGF0aEV4cHJlc3Npb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9leHByZXNzaW9u
KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXhwcmVzc2lvbiwgV2ViS2l0
RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25zX3Jlc29sdmVyOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKiBAbm9kZVJlc29sdmVyOiBBICNXZWJLaXRET01Ob2RlCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIqCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9uc19yZXNvbHZlcihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2ViS2l0
RE9NTm9kZSogbm9kZVJlc29sdmVyKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2V2
YWx1YXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZXhwcmVzc2lvbjog
QSAjZ2NoYXIKKyAqIEBjb250ZXh0Tm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQHJlc29sdmVy
OiAoYWxsb3ctbm9uZSk6IEEgI1dlYktpdERPTVhQYXRoTlNSZXNvbHZlcgorICogQHR5cGU6IEEg
I2d1c2hvcnQKKyAqIEBpblJlc3VsdDogKGFsbG93LW5vbmUpOiBBICNXZWJLaXRET01YUGF0aFJl
c3VsdAorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVhQYXRo
UmVzdWx0Kgord2Via2l0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZShXZWJLaXRET01Eb2N1bWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIGV4cHJlc3Npb24sIFdlYktpdERPTU5vZGUqIGNvbnRleHROb2Rl
LCBXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLCBndXNob3J0IHR5cGUsIFdlYktp
dERPTVhQYXRoUmVzdWx0KiBpblJlc3VsdCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9jdW1lbnRfZXhlY19jb21tYW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTURv
Y3VtZW50CisgKiBAY29tbWFuZDogQSAjZ2NoYXIKKyAqIEB1c2VySW50ZXJmYWNlOiBBICNnYm9v
bGVhbgorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9jdW1lbnRfZXhlY19jb21tYW5k
KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogY29tbWFuZCwgZ2Jvb2xlYW4g
dXNlckludGVyZmFjZSwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfZW5hYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
b2N1bWVudAorICogQGNvbW1hbmQ6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9j
b21tYW5kX2VuYWJsZWQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21t
YW5kKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfaW5kZXRl
cm06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBjb21tYW5kOiBBICNnY2hh
cgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9pbmRldGVybShXZWJLaXRET01Eb2N1
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9zdGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1
bWVudAorICogQGNvbW1hbmQ6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21t
YW5kX3N0YXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogY29tbWFuZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX3N1cHBvcnRlZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGNvbW1hbmQ6IEEgI2djaGFyCisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX3N1cHBvcnRlZChXZWJLaXRET01Eb2N1bWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfcXVlcnlfY29tbWFuZF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICogQGNvbW1hbmQ6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF92YWx1
ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X25hbWU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBlbGVtZW50TmFtZTogQSAjZ2NoYXIKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVMaXN0CisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50
c19ieV9uYW1lKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZWxlbWVudE5h
bWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZWxlbWVudF9mcm9tX3BvaW50Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAeDogQSAjZ2xvbmcKKyAqIEB5OiBB
ICNnbG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxl
bWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X2VsZW1lbnRfZnJvbV9wb2ludChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgZ2xvbmcgeCwg
Z2xvbmcgeSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY3NzX3N0eWxl
X2RlY2xhcmF0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbioKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfY3JlYXRlX2Nzc19zdHlsZV9kZWNsYXJhdGlvbihXZWJLaXRET01Eb2N1bWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xh
c3NfbmFtZV9hc19odG1sX2NvbGxlY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1l
bnQKKyAqIEBjbGFzc05hbWVzOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBTaW5jZTogMi4xMgorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjbGFzc05hbWVzKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2hhc19mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fZG9jdW1lbnRfaGFzX2ZvY3VzKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkOgorICogQHNl
bGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZWxlbWVudElkOiBBICNnY2hhcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50
X2J5X2lkKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZWxlbWVudElkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X3NlbGVjdG9yOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAc2VsZWN0b3JzOiBBICNnY2hhcgorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01F
bGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9j
dW1lbnRfcXVlcnlfc2VsZWN0b3IoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3F1ZXJ5X3NlbGVjdG9yX2FsbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAor
ICogQHNlbGVjdG9yczogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01Ob2RlTGlzdCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfc2VsZWN0b3Jf
YWxsKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdHlwZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NRG9jdW1lbnRUeXBlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NRG9jdW1lbnRUeXBlKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdHlwZShXZWJLaXRE
T01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW1w
bGVtZW50YXRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9pbXBsZW1lbnRhdGlvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfZWxlbWVudDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF9lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbnB1dF9lbmNvZGluZzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbnB1dF9l
bmNvZGluZyhXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfeG1sX2VuY29kaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3htbF9lbmNvZGluZyhXZWJLaXRET01Eb2N1bWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfeG1sX3ZlcnNpb246CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfeG1sX3ZlcnNpb24oV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0
X3htbF92ZXJzaW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3ZlcnNpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3htbF9zdGFuZGFsb25lOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfeG1sX3N0YW5kYWxvbmUoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3htbF9z
dGFuZGFsb25lOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdmFsdWU6IEEg
I2dib29sZWFuCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3N0YW5kYWxvbmUoV2ViS2l0RE9NRG9jdW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfdXJpOgorICogQHNlbGY6IEEgI1dlYktpdERPTURv
Y3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvY3VtZW50X3VyaShXZWJLaXRET01Eb2N1bWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfZG9jdW1lbnRfdXJpOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2RvY3VtZW50X3Vy
aShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXc6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTURPTVdpbmRvdworKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTVdpbmRvdyoKK3dlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhXZWJLaXRET01Eb2N1bWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc3R5bGVfc2hlZXRzOgorICogQHNl
bGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01TdHlsZVNoZWV0TGlzdAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVN0
eWxlU2hlZXRMaXN0Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc3R5bGVfc2hlZXRzKFdlYktp
dERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90
aXRsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90
aXRsZShXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1
bWVudF9zZXRfdGl0bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb2N1bWVu
dF9zZXRfdGl0bGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVzaWduX21vZGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAq
IFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9kZXNpZ25fbW9kZShXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9zZXRfZGVzaWduX21vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTaW5jZTogMi4xNAorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2Rlc2lnbl9tb2RlKFdlYktp
dERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3JlZmVycmVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3Vt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X3JlZmVycmVyKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb21haW46CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9tYWluKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF91cmw6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdXJsKFdlYktpdERP
TURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb29r
aWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9jb29raWUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9jb29raWU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50
X3NldF9jb29raWUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHk6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NSFRNTEVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KFdlYktpdERPTURv
Y3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9ib2R5Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdmFsdWU6IEEgI1dlYktpdERPTUhU
TUxFbGVtZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9kb2N1bWVudF9zZXRfYm9keShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50Kgord2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfaGVhZChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW1hZ2VzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01I
VE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgor
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW1hZ2VzKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hcHBsZXRzOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xs
ZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYXBwbGV0cyhXZWJLaXRET01Eb2N1bWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3M6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVs
bCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
SFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhXZWJLaXRET01E
b2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZm9ybXM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9mb3JtcyhXZWJL
aXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
YW5jaG9yczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Fu
Y2hvcnMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2VtYmVkczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAq
CisgKiBTaW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9u
Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZW1iZWRzKFdlYktpdERPTURvY3VtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wbHVnaW5zOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9w
bHVnaW5zKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9zY3JpcHRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgor
ICoKKyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3JpcHRzKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9sYXN0X21vZGlmaWVkOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xhc3RfbW9k
aWZpZWQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfY2hhcnNldChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb2N1bWVudF9zZXRfY2hhcnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
b2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2RvY3VtZW50X3NldF9jaGFyc2V0KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Jl
YWR5X3N0YXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X3JlYWR5X3N0YXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9jaGFyYWN0ZXJfc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoYXJhY3Rlcl9zZXQoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3ByZWZlcnJlZF9z
dHlsZXNoZWV0X3NldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9wcmVmZXJyZWRfc3R5bGVzaGVldF9zZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3NlbGVjdGVkX3N0eWxlc2hlZXRf
c2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Nl
bGVjdGVkX3N0eWxlc2hlZXRfc2V0KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9zZWxlY3RlZF9zdHlsZXNoZWV0X3NldDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9zZWxlY3RlZF9zdHlsZXNo
ZWV0X3NldChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hY3RpdmVfZWxlbWVudDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hY3RpdmVfZWxlbWVudChXZWJLaXRET01Eb2N1bWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29tcGF0X21vZGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9jb21wYXRfbW9kZShXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01Eb2N1bWVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURvY3VtZW50QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNGM0OGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdl
YktpdERPTURvY3VtZW50QW5pbWF0aW9uLmggYW5kCisgICAgV2ViS2l0RE9NRG9jdW1lbnRBbmlt
YXRpb24uY3BwIGFyZSBjcmVhdGVkIGZvciBEb2N1bWVudEFuaW1hdGlvbi5pZGwsIGFuZCB0aHVz
CisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBX
ZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5oIGFuZAorICAgIFdlYktpdERPTURvY3VtZW50QW5p
bWF0aW9uLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRv
IGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Eb2N1bWVudEFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhmNGM0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9uLmgKQEAg
LTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxs
IGJ1aWxkIHNjcmlwdHMgdGhhdCBXZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5oIGFuZAorICAg
IFdlYktpdERPTURvY3VtZW50QW5pbWF0aW9uLmNwcCBhcmUgY3JlYXRlZCBmb3IgRG9jdW1lbnRB
bmltYXRpb24uaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJv
bSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uaCBhbmQKKyAg
ICBXZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmls
ZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9j
dW1lbnRGcmFnbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzQzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURvY3VtZW50RnJhZ21lbnQuY3BwCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTURvY3VtZW50RnJhZ21lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiBraXQoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVu
dCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPQ1VNRU5UX0ZSQUdNRU5UKGtpdChz
dGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpEb2N1bWVu
dEZyYWdtZW50KiBjb3JlKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NRG9jdW1lbnRGcmFnbWVudCogd3JhcERvY3VtZW50RnJhZ21lbnQoV2ViQ29yZTo6RG9j
dW1lbnRGcmFnbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fRE9DVU1FTlRfRlJBR01FTlQoZ19vYmplY3RfbmV3KFdFQktJ
VF9ET01fVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsK
KyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6
OkRvY3VtZW50RnJhZ21lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1
bWVudEZyYWdtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0
aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpEb2N1bWVudEZy
YWdtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpEb2N1bWVudEZyYWdtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlz
cGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2Rpc3BhdGNoX2V2ZW50
OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2Zy
YWdtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7
Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQs
IHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnQsIFdFQktJVF9ET01fVFlQRV9OT0RFLCBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NI
SUxEUkVOLAorICAgIFBST1BfRklSU1RfRUxFTUVOVF9DSElMRCwKKyAgICBQUk9QX0xBU1RfRUxF
TUVOVF9DSElMRCwKKyAgICBQUk9QX0NISUxEX0VMRU1FTlRfQ09VTlQsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0RP
Q1VNRU5UX0ZSQUdNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfQ0hJTERSRU46CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfY2hpbGRyZW4oc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfRklSU1RfRUxFTUVOVF9DSElMRDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9m
aXJzdF9lbGVtZW50X2NoaWxkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0xBU1RfRUxFTUVOVF9DSElMRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hJTERfRUxFTUVOVF9DT1VOVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21l
bnRfZ2V0X2NoaWxkX2VsZW1lbnRfY291bnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9jbGFzc19pbml0KFdlYktpdERPTURv
Y3VtZW50RnJhZ21lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NISUxEUkVOLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KAorICAgICAgICAgICAgImNoaWxkcmVuIiwKKyAgICAgICAgICAgICJEb2N1bWVu
dEZyYWdtZW50OmNoaWxkcmVuIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb24qIERvY3VtZW50RnJhZ21lbnQ6Y2hpbGRyZW4iLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZmlyc3QtZWxlbWVudC1jaGls
ZCIsCisgICAgICAgICAgICAiRG9jdW1lbnRGcmFnbWVudDpmaXJzdC1lbGVtZW50LWNoaWxkIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCogRG9jdW1lbnRGcmFnbWVu
dDpmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVN
RU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTEFTVF9FTEVNRU5UX0NISUxELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgImxhc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAgICAiRG9jdW1lbnRG
cmFnbWVudDpsYXN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01FbGVtZW50KiBEb2N1bWVudEZyYWdtZW50Omxhc3QtZWxlbWVudC1jaGlsZCIsCisgICAg
ICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NISUxEX0VMRU1FTlRfQ09VTlQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJjaGlsZC1lbGVtZW50LWNv
dW50IiwKKyAgICAgICAgICAgICJEb2N1bWVudEZyYWdtZW50OmNoaWxkLWVsZW1lbnQtY291bnQi
LAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRG9jdW1lbnRGcmFnbWVudDpjaGlsZC1l
bGVtZW50LWNvdW50IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2RvY3VtZW50X2ZyYWdtZW50X2luaXQoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogcmVxdWVz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVsZW1lbnRJZCkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9GUkFHTUVOVChzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoZWxlbWVudElkLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudEZy
YWdtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZEVsZW1lbnRJZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChlbGVtZW50SWQpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Z2V0RWxlbWVudEJ5SWQoY29udmVydGVkRWxlbWVudElkKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRf
ZG9tX2RvY3VtZW50X2ZyYWdtZW50X3F1ZXJ5X3NlbGVjdG9yKFdlYktpdERPTURvY3VtZW50RnJh
Z21lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX0ZSQUdNRU5UKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxlY3RvcnMsIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudEZyYWdt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cXVlcnlTZWxlY3Rvcihjb252ZXJ0ZWRT
ZWxlY3RvcnMsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJh
Z21lbnRfcXVlcnlfc2VsZWN0b3JfYWxsKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UX0ZSQUdNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxlY3RvcnMsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnF1ZXJ5U2VsZWN0b3JBbGwoY29udmVydGVkU2VsZWN0b3Jz
LCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdt
ZW50X2dldF9jaGlsZHJlbihXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX0ZSQUdNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmNoaWxkcmVuKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9m
cmFnbWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX0ZSQUdNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+Zmlyc3RFbGVtZW50Q2hpbGQoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQoV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVF9GUkFHTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmxhc3RFbGVtZW50Q2hpbGQoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcg
d2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfY2hpbGRfZWxlbWVudF9jb3VudChXZWJL
aXRET01Eb2N1bWVudEZyYWdtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UX0ZSQUdNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudEZyYWdt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVt
LT5jaGlsZEVsZW1lbnRDb3VudCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJmNzhjMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRfaAorI2RlZmluZSBXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTU5vZGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX0ZS
QUdNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET0NVTUVOVF9GUkFHTUVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1F
TlRfRlJBR01FTlQsIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0RPQ1VNRU5UX0ZSQUdNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCwgV2ViS2l0
RE9NRG9jdW1lbnRGcmFnbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
X0ZSQUdNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfRE9DVU1FTlRfRlJBR01FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9ET0NVTUVOVF9GUkFHTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQs
IFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRG9j
dW1lbnRGcmFnbWVudCB7CisgICAgV2ViS2l0RE9NTm9kZSBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTURvY3VtZW50RnJhZ21lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9N
Tm9kZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg2MjQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1l
bnRGcmFnbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHdyYXBEb2N1bWVudEZyYWdtZW50KFdl
YkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqKTsKK1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIGtp
dChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50Kik7CitXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50
KiBjb3JlKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLyogV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRG
cmFnbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE3
Yzk5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFVuc3RhYmxlLmgK
QEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUu
aD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21l
bnRfZ2V0X2VsZW1lbnRfYnlfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFn
bWVudAorICogQGVsZW1lbnRJZDogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZnJh
Z21lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIGVsZW1lbnRJZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9m
cmFnbWVudF9xdWVyeV9zZWxlY3RvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50CisgKiBAc2VsZWN0b3JzOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3
ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X3F1ZXJ5X3NlbGVjdG9yKFdlYktpdERPTURvY3Vt
ZW50RnJhZ21lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X3F1ZXJ5X3NlbGVjdG9y
X2FsbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisgKiBAc2VsZWN0
b3JzOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlzdCoKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZnJhZ21lbnRfcXVlcnlfc2VsZWN0b3JfYWxsKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9jaGlsZHJlbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2NoaWxkcmVuKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2ZpcnN0
X2VsZW1lbnRfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50
Kgord2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChX
ZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2ZyYWdtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnRGcmFnbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9n
ZXRfbGFzdF9lbGVtZW50X2NoaWxkKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2NoaWxkX2VsZW1lbnRf
Y291bnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2NoaWxkX2VsZW1l
bnRfY291bnQoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZik7CisKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8q
IFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURvY3VtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhiZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
b2N1bWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTURvY3VtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURvY3VtZW50Lmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworV2ViS2l0RE9NRG9jdW1lbnQqIHdyYXBEb2N1bWVudChXZWJDb3JlOjpEb2N1bWVu
dCopOworV2ViS2l0RE9NRG9jdW1lbnQqIGtpdChXZWJDb3JlOjpEb2N1bWVudCopOworV2ViQ29y
ZTo6RG9jdW1lbnQqIGNvcmUoV2ViS2l0RE9NRG9jdW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYTU2ZDMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0lt
cG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRU
aW1lbGluZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKiBraXQoV2ViQ29yZTo6
RG9jdW1lbnRUaW1lbGluZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisg
ICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RJTUVMSU5FKHJldCk7CisKKyAgICBy
ZXR1cm4gd3JhcERvY3VtZW50VGltZWxpbmUob2JqKTsKK30KKworV2ViQ29yZTo6RG9jdW1lbnRU
aW1lbGluZSogY29yZShXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZSo+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTURvY3VtZW50VGltZWxpbmUqIHdyYXBEb2N1bWVudFRpbWVsaW5lKFdlYkNvcmU6OkRvY3Vt
ZW50VGltZWxpbmUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RJTUVMSU5FKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfRE9DVU1FTlRfVElNRUxJTkUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FOSU1BVElPTlMpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGlu
ZSwgd2Via2l0X2RvbV9kb2N1bWVudF90aW1lbGluZSwgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElP
Tl9USU1FTElORSkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF90aW1lbGluZV9j
bGFzc19pbml0KFdlYktpdERPTURvY3VtZW50VGltZWxpbmVDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0Q2xhc3MpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2RvY3VtZW50X3RpbWVsaW5lX2luaXQoV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSog
cmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRUaW1lbGluZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlODRjYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRUaW1lbGluZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZV9oCisj
ZGVmaW5lIFdlYktpdERPTURvY3VtZW50VGltZWxpbmVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVElNRUxJTkUgICAgICAgICAgICAod2Via2l0X2Rv
bV9kb2N1bWVudF90aW1lbGluZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VN
RU5UX1RJTUVMSU5FKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9USU1FTElORSwgV2ViS2l0RE9NRG9jdW1l
bnRUaW1lbGluZSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfVElNRUxJTkVfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0RPQ1VNRU5UX1RJTUVMSU5FLCBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lQ2xhc3MpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfRE9DVU1FTlRfVElNRUxJTkUob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RJ
TUVMSU5FKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9USU1FTElORV9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
RE9DVU1FTlRfVElNRUxJTkUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RJTUVMSU5F
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9ET0NVTUVOVF9USU1FTElORSwgV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZUNs
YXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lIHsKKyAgICBXZWJLaXRE
T01BbmltYXRpb25UaW1lbGluZSBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktp
dERPTURvY3VtZW50VGltZWxpbmVDbGFzcyB7CisgICAgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxp
bmVDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2RvY3VtZW50X3RpbWVsaW5lX2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
RG9jdW1lbnRUaW1lbGluZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmVQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxNjU3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9j
dW1lbnRUaW1lbGluZVByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50VGltZWxpbmVQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZVByaXZhdGVfaAorCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudFRpbWVsaW5lLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTURvY3VtZW50VGltZWxpbmUuaD4KKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisKK25h
bWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSogd3JhcERvY3VtZW50
VGltZWxpbmUoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZSopOworV2ViS2l0RE9NRG9jdW1lbnRU
aW1lbGluZSoga2l0KFdlYkNvcmU6OkRvY3VtZW50VGltZWxpbmUqKTsKK1dlYkNvcmU6OkRvY3Vt
ZW50VGltZWxpbmUqIGNvcmUoV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpICovCisKKyNl
bmRpZiAvKiBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lUHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURvY3VtZW50VHlwZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VHlwZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwOTZiOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRG9jdW1lbnRUeXBlLmNwcApAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURv
Y3VtZW50VHlwZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NRG9jdW1lbnRUeXBlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudFR5cGVVbnN0YWJs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Eb2N1bWVudFR5cGUqIGtpdChXZWJDb3Jl
OjpEb2N1bWVudFR5cGUqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET0NVTUVOVF9U
WVBFKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3Jl
OjpEb2N1bWVudFR5cGUqIGNvcmUoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnRUeXBlKj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0
RE9NRG9jdW1lbnRUeXBlKiB3cmFwRG9jdW1lbnRUeXBlKFdlYkNvcmU6OkRvY3VtZW50VHlwZSog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fRE9DVU1FTlRfVFlQRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5U
X1RZUEUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5
cGVfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29y
ZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkRvY3VtZW50VHlwZSogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50VHlwZSo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRp
bmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNj
cmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9hZGRfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudFR5cGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpE
b2N1bWVudFR5cGUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX3JlbW92
ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
ICAgIFdlYkNvcmU6OkRvY3VtZW50VHlwZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkRvY3VtZW50VHlwZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2Rpc3BhdGNoX2V2ZW50OworICAg
IGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfYWRk
X2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X3R5cGVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklO
RV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01Eb2N1bWVudFR5cGUsIHdlYmtpdF9kb21fZG9jdW1l
bnRfdHlwZSwgV0VCS0lUX0RPTV9UWVBFX05PREUsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX0VOVElUSUVT
LAorICAgIFBST1BfTk9UQVRJT05TLAorICAgIFBST1BfSU5URVJOQUxfU1VCU0VULAorICAgIFBS
T1BfUFVCTElDX0lELAorICAgIFBST1BfU1lTVEVNX0lELAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdERPTURvY3VtZW50VHlwZSogc2VsZiA9IFdFQktJVF9ET01fRE9DVU1FTlRfVFlQRShvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlw
ZV9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTlRJVElF
UzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50
X3R5cGVfZ2V0X2VudGl0aWVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X05PVEFUSU9OUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X2RvY3VtZW50X3R5cGVfZ2V0X25vdGF0aW9ucyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9JTlRFUk5BTF9TVUJTRVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfaW50ZXJuYWxfc3Vic2V0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BVQkxJQ19JRDoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9wdWJs
aWNfaWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1lTVEVNX0lEOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X3R5
cGVfZ2V0X3N5c3RlbV9pZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2RvY3VtZW50X3R5cGVfY2xhc3NfaW5pdChXZWJLaXRET01Eb2N1bWVudFR5cGVDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJu
YW1lIiwKKyAgICAgICAgICAgICJEb2N1bWVudFR5cGU6bmFtZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBEb2N1bWVudFR5cGU6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VOVElU
SUVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImVudGl0aWVz
IiwKKyAgICAgICAgICAgICJEb2N1bWVudFR5cGU6ZW50aXRpZXMiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01OYW1lZE5vZGVNYXAqIERvY3VtZW50VHlwZTplbnRpdGllcyIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OT1RBVElPTlMsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibm90YXRpb25zIiwKKyAg
ICAgICAgICAgICJEb2N1bWVudFR5cGU6bm90YXRpb25zIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBEb2N1bWVudFR5cGU6bm90YXRpb25zIiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOVEVSTkFMX1NVQlNFVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJpbnRlcm5hbC1zdWJz
ZXQiLAorICAgICAgICAgICAgIkRvY3VtZW50VHlwZTppbnRlcm5hbC1zdWJzZXQiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnRUeXBlOmludGVybmFsLXN1YnNldCIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1BVQkxJQ19JRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJwdWJsaWMtaWQiLAorICAgICAgICAgICAgIkRvY3VtZW50VHlwZTpwdWJs
aWMtaWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnRUeXBlOnB1Ymxp
Yy1pZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NZU1RFTV9JRCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJzeXN0ZW0taWQiLAorICAgICAgICAgICAgIkRvY3VtZW50
VHlwZTpzeXN0ZW0taWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnRU
eXBlOnN5c3RlbS1pZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlw
ZV9pbml0KFdlYktpdERPTURvY3VtZW50VHlwZSogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX3JlbW92ZShX
ZWJLaXRET01Eb2N1bWVudFR5cGUqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9DVU1FTlRfVFlQRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGl0ZW0tPnJlbW92ZShlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF90
eXBlX2dldF9uYW1lKFdlYktpdERPTURvY3VtZW50VHlwZSogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVF9UWVBFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudFR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitXZWJLaXRET01OYW1lZE5vZGVNYXAqIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRf
ZW50aXRpZXMoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50
VHlwZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TmFt
ZWROb2RlTWFwPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZW50aXRpZXNGb3JC
aW5kaW5ncygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK1dlYktpdERPTU5hbWVkTm9kZU1hcCogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dl
dF9ub3RhdGlvbnMoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50VHlwZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
TmFtZWROb2RlTWFwPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bm90YXRpb25z
Rm9yQmluZGluZ3MoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9pbnRlcm5hbF9z
dWJzZXQoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0RPQ1VNRU5UX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50VHlw
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5pbnRlcm5hbFN1YnNldEZvckJpbmRpbmdzKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3B1
YmxpY19pZChXZWJLaXRET01Eb2N1bWVudFR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9DVU1FTlRfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRU
eXBlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnB1YmxpY0lkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3N5c3RlbV9pZChXZWJLaXRE
T01Eb2N1bWVudFR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1F
TlRfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPnN5c3RlbUlkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRUeXBlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VHlwZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyN2YyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURv
Y3VtZW50VHlwZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01Eb2N1
bWVudFR5cGVfaAorI2RlZmluZSBXZWJLaXRET01Eb2N1bWVudFR5cGVfaAorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9kZS5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVFlQRSAgICAgICAgICAgICh3ZWJraXRf
ZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET0NVTUVO
VF9UWVBFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9UWVBFLCBXZWJLaXRET01Eb2N1bWVudFR5cGUpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RZUEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RZUEUs
IFdlYktpdERPTURvY3VtZW50VHlwZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPQ1VN
RU5UX1RZUEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RZUEUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UX1RZUEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RZUEUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RP
Q1VNRU5UX1RZUEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RZUEUsIFdlYktpdERPTURvY3VtZW50VHlw
ZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudFR5cGUgeworICAgIFdlYktpdERP
TU5vZGUgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudFR5
cGVDbGFzcyB7CisgICAgV2ViS2l0RE9NTm9kZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfdHlwZSh2b2lkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X25hbWU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRG9jdW1lbnRUeXBlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfbmFtZShXZWJL
aXRET01Eb2N1bWVudFR5cGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
dHlwZV9nZXRfZW50aXRpZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRUeXBlCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01OYW1lZE5vZGVNYXAqCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X3R5cGVfZ2V0X2VudGl0aWVzKFdlYktpdERPTURvY3VtZW50VHlwZSogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9ub3RhdGlvbnM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRG9jdW1lbnRUeXBlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01OYW1l
ZE5vZGVNYXAqCit3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X25vdGF0aW9ucyhXZWJLaXRE
T01Eb2N1bWVudFR5cGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlw
ZV9nZXRfaW50ZXJuYWxfc3Vic2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50VHlw
ZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X2ludGVybmFsX3N1YnNldChXZWJLaXRET01Eb2N1bWVu
dFR5cGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfcHVi
bGljX2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50VHlwZQorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50
X3R5cGVfZ2V0X3B1YmxpY19pZChXZWJLaXRET01Eb2N1bWVudFR5cGUqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfc3lzdGVtX2lkOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURvY3VtZW50VHlwZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3N5c3RlbV9pZChX
ZWJLaXRET01Eb2N1bWVudFR5cGUqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NRG9jdW1lbnRUeXBlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUeXBl
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzE1MjI1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1l
bnRUeXBlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1lbnRUeXBlUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTURvY3VtZW50VHlwZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudFR5cGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRG9jdW1lbnRUeXBlLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiB3cmFwRG9jdW1l
bnRUeXBlKFdlYkNvcmU6OkRvY3VtZW50VHlwZSopOworV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBr
aXQoV2ViQ29yZTo6RG9jdW1lbnRUeXBlKik7CitXZWJDb3JlOjpEb2N1bWVudFR5cGUqIGNvcmUo
V2ViS2l0RE9NRG9jdW1lbnRUeXBlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTURvY3VtZW50VHlwZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
b2N1bWVudFR5cGVVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGVVbnN0YWJsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTRjM2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURvY3VtZW50VHlwZVVuc3RhYmxlLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Eb2N1bWVudFR5cGVVbnN0
YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTURvY3VtZW50VHlwZVVuc3RhYmxlX2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfdHlwZV9yZW1vdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1l
bnRUeXBlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb2N1bWVudF90eXBlX3JlbW92ZShXZWJL
aXRET01Eb2N1bWVudFR5cGUqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyog
V2ViS2l0RE9NRG9jdW1lbnRUeXBlVW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1
bWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44MzU3ZDIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1
bWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdl
YktpdERPTURvY3VtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jYXJldF9y
YW5nZV9mcm9tX3BvaW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAeDog
QSAjZ2xvbmcKKyAqIEB5OiBBICNnbG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NUmFuZ2UqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NhcmV0X3Jhbmdl
X2Zyb21fcG9pbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGdsb25nIHgsIGdsb25nIHkpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfd2Via2l0X2NhbmNlbF9mdWxsX3NjcmVlbjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3dlYmtpdF9jYW5j
ZWxfZnVsbF9zY3JlZW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfd2Via2l0X2V4aXRfZnVsbHNjcmVlbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01Eb2N1bWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3dlYmtpdF9leGl0X2Z1bGxzY3JlZW4oV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZXhpdF9w
b2ludGVyX2xvY2s6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb2N1bWVu
dF9leGl0X3BvaW50ZXJfbG9jayhXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29udGVudF90eXBlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9jb250ZW50X3R5cGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2RpcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGlyKFdlYktpdERP
TURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kaXI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9kb2N1bWVudF9zZXRfZGlyKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9pc19mdWxs
X3NjcmVlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfaXNfZnVsbF9zY3JlZW4o
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X3dlYmtpdF9mdWxsX3NjcmVlbl9rZXlib2FyZF9pbnB1dF9hbGxvd2VkOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9mdWxsX3NjcmVlbl9rZXlib2FyZF9pbnB1dF9hbGxvd2Vk
KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF93ZWJraXRfY3VycmVudF9mdWxsX3NjcmVlbl9lbGVtZW50OgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfY3VycmVu
dF9mdWxsX3NjcmVlbl9lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbHNjcmVlbl9lbmFibGVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9mdWxsc2NyZWVuX2VuYWJsZWQoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtp
dF9mdWxsc2NyZWVuX2VsZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoK
K3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9mdWxsc2NyZWVuX2VsZW1lbnQoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Bv
aW50ZXJfbG9ja19lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wb2ludGVyX2xvY2tfZWxlbWVudChXZWJLaXRET01Eb2N1
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdmlzaWJpbGl0
eV9zdGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdmlzaWJpbGl0eV9zdGF0ZShXZWJLaXRET01E
b2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGlkZGVu
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hpZGRlbihXZWJLaXRET01Eb2N1bWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY3VycmVudF9zY3JpcHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Kgord2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfY3VycmVudF9zY3JpcHQoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X29yaWdpbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfb3JpZ2luKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3JvbGxpbmdfZWxlbWVudDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2Nyb2xsaW5nX2Vs
ZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2NoaWxkcmVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1M
Q29sbGVjdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoaWxkcmVuKFdlYktpdERPTURv
Y3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9maXJzdF9l
bGVtZW50X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9maXJzdF9lbGVtZW50X2NoaWxkKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hp
bGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hpbGRfZWxlbWVudF9jb3VudDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2NoaWxkX2VsZW1lbnRfY291bnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01Eb2N1bWVudFVuc3RhYmxlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTVkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTQwNSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQXR0clByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURP
TVRva2VuTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FbGVtZW50VW5zdGFibGUuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRWxlbWVudCoga2l0KFdlYkNvcmU6OkVsZW1lbnQqIG9i
aikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpFbGVtZW50KiBjb3JlKFdlYktpdERP
TUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd3JhcEVsZW1lbnQoV2ViQ29yZTo6RWxlbWVu
dCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0
Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBj
b3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9u
Lm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9v
bGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZWxl
bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKK3sKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNl
LT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShX
ZWJLaXRET01FbGVtZW50LCB3ZWJraXRfZG9tX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9OT0RF
LCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX1RBR19OQU1FLAorICAgIFBST1BfQVRUUklCVVRFUywKKyAgICBQUk9QX1NUWUxFLAorICAg
IFBST1BfSUQsCisgICAgUFJPUF9OQU1FU1BBQ0VfVVJJLAorICAgIFBST1BfUFJFRklYLAorICAg
IFBST1BfTE9DQUxfTkFNRSwKKyAgICBQUk9QX09GRlNFVF9MRUZULAorICAgIFBST1BfT0ZGU0VU
X1RPUCwKKyAgICBQUk9QX09GRlNFVF9XSURUSCwKKyAgICBQUk9QX09GRlNFVF9IRUlHSFQsCisg
ICAgUFJPUF9DTElFTlRfTEVGVCwKKyAgICBQUk9QX0NMSUVOVF9UT1AsCisgICAgUFJPUF9DTElF
TlRfV0lEVEgsCisgICAgUFJPUF9DTElFTlRfSEVJR0hULAorICAgIFBST1BfU0NST0xMX0xFRlQs
CisgICAgUFJPUF9TQ1JPTExfVE9QLAorICAgIFBST1BfU0NST0xMX1dJRFRILAorICAgIFBST1Bf
U0NST0xMX0hFSUdIVCwKKyAgICBQUk9QX09GRlNFVF9QQVJFTlQsCisgICAgUFJPUF9JTk5FUl9I
VE1MLAorICAgIFBST1BfT1VURVJfSFRNTCwKKyAgICBQUk9QX0NMQVNTX05BTUUsCisgICAgUFJP
UF9DTEFTU19MSVNULAorICAgIFBST1BfV0VCS0lUX1JFR0lPTl9PVkVSU0VULAorICAgIFBST1Bf
UFJFVklPVVNfRUxFTUVOVF9TSUJMSU5HLAorICAgIFBST1BfTkVYVF9FTEVNRU5UX1NJQkxJTkcs
CisgICAgUFJPUF9DSElMRFJFTiwKKyAgICBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQsCisgICAg
UFJPUF9MQVNUX0VMRU1FTlRfQ0hJTEQsCisgICAgUFJPUF9DSElMRF9FTEVNRU5UX0NPVU5ULAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0VM
RU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9JRDoKKyAgICAgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9pZChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9M
RUZUOgorICAgICAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF9sZWZ0KHNlbGYsIGdf
dmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ND
Uk9MTF9UT1A6CisgICAgICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfc2Nyb2xsX3RvcChzZWxm
LCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9JTk5FUl9IVE1MOgorICAgICAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9PVVRFUl9IVE1MOgorICAgICAgICB3ZWJraXRfZG9tX2VsZW1lbnRf
c2V0X291dGVyX2h0bWwoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTEFTU19OQU1FOgorICAgICAgICB3ZWJr
aXRfZG9tX2VsZW1lbnRfc2V0X2NsYXNzX25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRWxlbWVudCogc2VsZiA9IFdF
QktJVF9ET01fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX1RBR19OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FUVFJJQlVURVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVzKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1NUWUxFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc3R5bGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfSUQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfaWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTkFNRVNQQUNFX1VSSToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9uYW1lc3BhY2VfdXJpKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BSRUZJWDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9wcmVmaXgoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTE9DQUxfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9sb2NhbF9uYW1lKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09GRlNFVF9MRUZUOgorICAgICAgICBnX3ZhbHVl
X3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2xlZnQoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT0ZGU0VUX1RPUDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF90
b3Aoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT0ZGU0VUX1dJRFRIOgor
ICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRf
b2Zmc2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09GRlNF
VF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9l
bGVtZW50X2dldF9vZmZzZXRfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0NMSUVOVF9MRUZUOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdl
YmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2xlZnQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ0xJRU5UX1RPUDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZh
bHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF90b3Aoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQ0xJRU5UX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9k
b3VibGUodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X3dpZHRoKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NMSUVOVF9IRUlHSFQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfaGVp
Z2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9MRUZUOgor
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Nj
cm9sbF9sZWZ0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9U
T1A6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9n
ZXRfc2Nyb2xsX3RvcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JP
TExfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZWxl
bWVudF9nZXRfc2Nyb2xsX3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NDUk9MTF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9PRkZTRVRfUEFSRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3BhcmVudChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTk5FUl9IVE1MOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2lubmVyX2h0bWwoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1VURVJfSFRNTDoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9vdXRlcl9odG1s
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NMQVNTX05BTUU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xh
c3NfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTEFTU19MSVNU
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9n
ZXRfY2xhc3NfbGlzdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJL
SVRfUkVHSU9OX09WRVJTRVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21fZWxlbWVudF9nZXRfd2Via2l0X3JlZ2lvbl9vdmVyc2V0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BSRVZJT1VTX0VMRU1FTlRfU0lCTElORzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3ByZXZp
b3VzX2VsZW1lbnRfc2libGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9ORVhUX0VMRU1FTlRfU0lCTElORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5nKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NISUxEUkVOOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRyZW4oc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklSU1RfRUxFTUVOVF9DSElMRDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2ZpcnN0
X2VsZW1lbnRfY2hpbGQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFT
VF9FTEVNRU5UX0NISUxEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxkKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0NISUxEX0VMRU1FTlRfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NoaWxkX2VsZW1lbnRfY291
bnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50
X2NsYXNzX2luaXQoV2ViS2l0RE9NRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9lbGVtZW50X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEFHX05BTUUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGFnLW5hbWUiLAorICAgICAg
ICAgICAgIkVsZW1lbnQ6dGFnLW5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
RWxlbWVudDp0YWctbmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FUVFJJQlVURVMsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiYXR0cmlidXRlcyIsCisgICAgICAg
ICAgICAiRWxlbWVudDphdHRyaWJ1dGVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NTmFtZWROb2RlTWFwKiBFbGVtZW50OmF0dHJpYnV0ZXMiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX05BTUVEX05PREVfTUFQLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RZTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAic3R5bGUiLAorICAgICAgICAgICAgIkVsZW1lbnQ6c3R5bGUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBF
bGVtZW50OnN0eWxlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVD
TEFSQVRJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9JRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJpZCIsCisgICAgICAgICAgICAiRWxlbWVudDppZCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogRWxlbWVudDppZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FU1BBQ0VfVVJJLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWVzcGFjZS11cmki
LAorICAgICAgICAgICAgIkVsZW1lbnQ6bmFtZXNwYWNlLXVyaSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBFbGVtZW50Om5hbWVzcGFjZS11cmkiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9Q
UkVGSVgsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicHJlZml4
IiwKKyAgICAgICAgICAgICJFbGVtZW50OnByZWZpeCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBFbGVtZW50OnByZWZpeCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPQ0FMX05BTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibG9jYWwtbmFtZSIsCisg
ICAgICAgICAgICAiRWxlbWVudDpsb2NhbC1uYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2NoYXIqIEVsZW1lbnQ6bG9jYWwtbmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09GRlNFVF9MRUZU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgIm9mZnNldC1sZWZ0
IiwKKyAgICAgICAgICAgICJFbGVtZW50Om9mZnNldC1sZWZ0IiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2RvdWJsZSBFbGVtZW50Om9mZnNldC1sZWZ0IiwKKyAgICAgICAgICAgIC1HX01BWERP
VUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9PRkZTRVRfVE9QLAorICAgICAgICBnX3BhcmFtX3NwZWNf
ZG91YmxlKAorICAgICAgICAgICAgIm9mZnNldC10b3AiLAorICAgICAgICAgICAgIkVsZW1lbnQ6
b2Zmc2V0LXRvcCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgRWxlbWVudDpvZmZz
ZXQtdG9wIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PRkZT
RVRfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAib2Zm
c2V0LXdpZHRoIiwKKyAgICAgICAgICAgICJFbGVtZW50Om9mZnNldC13aWR0aCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdkb3VibGUgRWxlbWVudDpvZmZzZXQtd2lkdGgiLAorICAgICAgICAg
ICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09GRlNFVF9IRUlHSFQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAib2Zmc2V0LWhlaWdodCIsCisgICAg
ICAgICAgICAiRWxlbWVudDpvZmZzZXQtaGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2RvdWJsZSBFbGVtZW50Om9mZnNldC1oZWlnaHQiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxF
LCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0NMSUVOVF9MRUZULAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91
YmxlKAorICAgICAgICAgICAgImNsaWVudC1sZWZ0IiwKKyAgICAgICAgICAgICJFbGVtZW50OmNs
aWVudC1sZWZ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBFbGVtZW50OmNsaWVu
dC1sZWZ0IiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DTElF
TlRfVE9QLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImNsaWVu
dC10b3AiLAorICAgICAgICAgICAgIkVsZW1lbnQ6Y2xpZW50LXRvcCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdkb3VibGUgRWxlbWVudDpjbGllbnQtdG9wIiwKKyAgICAgICAgICAgIC1HX01B
WERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DTElFTlRfV0lEVEgsCisgICAgICAgIGdfcGFyYW1f
c3BlY19kb3VibGUoCisgICAgICAgICAgICAiY2xpZW50LXdpZHRoIiwKKyAgICAgICAgICAgICJF
bGVtZW50OmNsaWVudC13aWR0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgRWxl
bWVudDpjbGllbnQtd2lkdGgiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJM
RSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0NMSUVOVF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAg
ICAgICAgICAiY2xpZW50LWhlaWdodCIsCisgICAgICAgICAgICAiRWxlbWVudDpjbGllbnQtaGVp
Z2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBFbGVtZW50OmNsaWVudC1oZWln
aHQiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTF9M
RUZULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JvbGwtbGVm
dCIsCisgICAgICAgICAgICAiRWxlbWVudDpzY3JvbGwtbGVmdCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnbG9uZyBFbGVtZW50OnNjcm9sbC1sZWZ0IiwKKyAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1NDUk9MTF9UT1AsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25n
KAorICAgICAgICAgICAgInNjcm9sbC10b3AiLAorICAgICAgICAgICAgIkVsZW1lbnQ6c2Nyb2xs
LXRvcCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBFbGVtZW50OnNjcm9sbC10b3Ai
LAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NST0xMX1dJRFRILAor
ICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JvbGwtd2lkdGgiLAor
ICAgICAgICAgICAgIkVsZW1lbnQ6c2Nyb2xsLXdpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2xvbmcgRWxlbWVudDpzY3JvbGwtd2lkdGgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9TQ1JPTExfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygK
KyAgICAgICAgICAgICJzY3JvbGwtaGVpZ2h0IiwKKyAgICAgICAgICAgICJFbGVtZW50OnNjcm9s
bC1oZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBFbGVtZW50OnNjcm9sbC1o
ZWlnaHQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PRkZTRVRfUEFS
RU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm9mZnNldC1w
YXJlbnQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6b2Zmc2V0LXBhcmVudCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIEVsZW1lbnQ6b2Zmc2V0LXBhcmVudCIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOTkVSX0hUTUwsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaW5uZXItaHRtbCIsCisgICAgICAg
ICAgICAiRWxlbWVudDppbm5lci1odG1sIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBFbGVtZW50OmlubmVyLWh0bWwiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1VURVJfSFRNTCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJvdXRlci1odG1sIiwKKyAg
ICAgICAgICAgICJFbGVtZW50Om91dGVyLWh0bWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEVsZW1lbnQ6b3V0ZXItaHRtbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DTEFTU19OQU1F
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNsYXNzLW5hbWUi
LAorICAgICAgICAgICAgIkVsZW1lbnQ6Y2xhc3MtbmFtZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogRWxlbWVudDpjbGFzcy1uYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NMQVNT
X0xJU1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY2xhc3Mt
bGlzdCIsCisgICAgICAgICAgICAiRWxlbWVudDpjbGFzcy1saXN0IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBFbGVtZW50OmNsYXNzLWxpc3QiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNULAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX1JFR0lPTl9P
VkVSU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIndlYmtp
dC1yZWdpb24tb3ZlcnNldCIsCisgICAgICAgICAgICAiRWxlbWVudDp3ZWJraXQtcmVnaW9uLW92
ZXJzZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRWxlbWVudDp3ZWJraXQtcmVn
aW9uLW92ZXJzZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QUkVWSU9VU19FTEVNRU5UX1NJQkxJTkcs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicHJldmlvdXMtZWxl
bWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAgICJFbGVtZW50OnByZXZpb3VzLWVsZW1lbnQtc2li
bGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIEVsZW1lbnQ6
cHJldmlvdXMtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9F
TEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTkVYVF9FTEVNRU5UX1NJQkxJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmpl
Y3QoCisgICAgICAgICAgICAibmV4dC1lbGVtZW50LXNpYmxpbmciLAorICAgICAgICAgICAgIkVs
ZW1lbnQ6bmV4dC1lbGVtZW50LXNpYmxpbmciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01FbGVtZW50KiBFbGVtZW50Om5leHQtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hJTERSRU4sCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiY2hpbGRyZW4iLAorICAgICAgICAgICAgIkVsZW1lbnQ6
Y2hpbGRyZW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlv
biogRWxlbWVudDpjaGlsZHJlbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9D
T0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRklSU1RfRUxFTUVOVF9DSElMRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJF
bGVtZW50OmZpcnN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01FbGVtZW50KiBFbGVtZW50OmZpcnN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQVNUX0VMRU1FTlRfQ0hJTEQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFzdC1lbGVtZW50LWNoaWxkIiwKKyAg
ICAgICAgICAgICJFbGVtZW50Omxhc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIEVsZW1lbnQ6bGFzdC1lbGVtZW50LWNoaWxkIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hJTERfRUxFTUVOVF9DT1VOVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImNoaWxkLWVsZW1lbnQt
Y291bnQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6Y2hpbGQtZWxlbWVudC1jb3VudCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBFbGVtZW50OmNoaWxkLWVsZW1lbnQtY291bnQiLAor
ICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbml0KFdl
YktpdERPTUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGUoV2ViS2l0RE9NRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7
CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0
ZShjb252ZXJ0ZWROYW1lKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFt
ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KG5hbWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGUoY29udmVydGVkTmFtZSwgY29udmVydGVkVmFsdWUs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGUo
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWUpOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAg
ICBpdGVtLT5yZW1vdmVBdHRyaWJ1dGUoY29udmVydGVkTmFtZSk7Cit9CisKK1dlYktpdERPTUF0
dHIqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGUoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7Cisg
ICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpBdHRyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Z2V0QXR0cmlidXRlTm9kZShjb252ZXJ0ZWROYW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01BdHRyKiB3ZWJraXRfZG9tX2Vs
ZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIFdlYktpdERP
TUF0dHIqIG5ld0F0dHIsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfQVRUUihuZXdBdHRyKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6QXR0ciogY29udmVydGVkTmV3QXR0ciA9IFdlYktpdDo6
Y29yZShuZXdBdHRyKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNl
dEF0dHJpYnV0ZU5vZGUoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQXR0ciogd2Vi
a2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBz
ZWxmLCBXZWJLaXRET01BdHRyKiBvbGRBdHRyLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIob2xkQXR0ciksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE9sZEF0
dHIgPSBXZWJLaXQ6OmNvcmUob2xkQXR0cik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5yZW1vdmVBdHRyaWJ1dGVOb2RlKCpjb252ZXJ0ZWRPbGRBdHRyLCBlYykpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dl
YktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5
X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0
RWxlbWVudHNCeVRhZ05hbWUoY29udmVydGVkTmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50
X2hhc19hdHRyaWJ1dGVzKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
aGFzQXR0cmlidXRlcygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKG5hbWVzcGFjZVVSSSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobG9jYWxO
YW1lLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZExvY2FsTmFt
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChsb2NhbE5hbWUpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5hbWVz
cGFjZVVSSSwgY29udmVydGVkTG9jYWxOYW1lKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ucyhXZWJLaXRET01FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogcXVhbGlmaWVk
TmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocXVhbGlmaWVk
TmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRRdWFsaWZpZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHF1YWxpZmllZE5hbWUp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVOUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZFF1YWxpZmllZE5h
bWUsIGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVu
dF9yZW1vdmVfYXR0cmlidXRlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5hbWVzcGFjZVVS
SSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChsb2NhbE5hbWUpOworICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
TmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGxv
Y2FsTmFtZSk7CisgICAgaXRlbS0+cmVtb3ZlQXR0cmlidXRlTlMoY29udmVydGVkTmFtZXNwYWNl
VVJJLCBjb252ZXJ0ZWRMb2NhbE5hbWUpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiog
d2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9uc19hc19odG1sX2Nv
bGxlY3Rpb24oV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVS
SSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lc3BhY2VVUkks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxvY2FsTmFtZSwgMCk7CisgICAgV2ViQ29y
ZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJ
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRMb2NhbE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgobG9jYWxOYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSwgY29udmVydGVkTG9jYWxOYW1lKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01BdHRyKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlX25zKFdlYktpdERPTUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwobmFtZXNwYWNlVVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChsb2NhbE5hbWUsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
TG9jYWxOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGxvY2FsTmFtZSk7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRBdHRy
aWJ1dGVOb2RlTlMoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0ZWRMb2NhbE5hbWUpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktp
dERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMoV2ViS2l0
RE9NRWxlbWVudCogc2VsZiwgV2ViS2l0RE9NQXR0ciogbmV3QXR0ciwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSKG5ld0F0dHIpLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpBdHRyKiBj
b252ZXJ0ZWROZXdBdHRyID0gV2ViS2l0Ojpjb3JlKG5ld0F0dHIpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpBdHRyPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2V0QXR0cmlidXRlTm9kZU5TKCpjb252ZXJ0ZWROZXdB
dHRyLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZWxlbWVudF9oYXNfYXR0cmlidXRlKFdlYktp
dERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChuYW1lLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KG5hbWUpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShj
b252ZXJ0ZWROYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChuYW1lc3BhY2VVUkksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChsb2NhbE5hbWUsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZExvY2FsTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChsb2NhbE5hbWUpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVS
SSwgY29udmVydGVkTG9jYWxOYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21fZWxlbWVudF9mb2N1cyhXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5mb2N1cygpOworfQorCit2b2lkIHdl
YmtpdF9kb21fZWxlbWVudF9ibHVyKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmJsdXIoKTsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2ludG9fdmlldyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBn
Ym9vbGVhbiBhbGlnbldpdGhUb3ApCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNjcm9sbEludG9WaWV3KGFsaWduV2l0aFRvcCk7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9lbGVtZW50X3Njcm9sbF9pbnRvX3ZpZXdfaWZfbmVlZGVkKFdlYktpdERPTUVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIGNlbnRlcklmTmVlZGVkKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGNlbnRlcklmTmVlZGVk
KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2J5X2xpbmVzKFdlYktpdERP
TUVsZW1lbnQqIHNlbGYsIGdsb25nIGxpbmVzKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zY3JvbGxCeUxpbmVzKGxpbmVzKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2VsZW1lbnRfc2Nyb2xsX2J5X3BhZ2VzKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGdsb25n
IHBhZ2VzKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zY3Jv
bGxCeVBhZ2VzKHBhZ2VzKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9k
b21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24o
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwobmFtZSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29udmVydGVk
TmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50X21hdGNoZXMoV2ViS2l0RE9NRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGVjdG9ycywgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZlcnRl
ZFNlbGVjdG9ycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01F
bGVtZW50KiB3ZWJraXRfZG9tX2VsZW1lbnRfY2xvc2VzdChXZWJLaXRET01FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxlY3RvcnMsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+Y2xvc2VzdChjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9l
bGVtZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxlY3RvcnMsIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvciwgRkFMU0UpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWF0Y2hlcyhjb252ZXJ0ZWRTZWxlY3Rv
cnMsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2Vs
ZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbF9zY3JlZW4oV2ViS2l0RE9NRWxlbWVudCogc2VsZiwg
Z3VzaG9ydCBmbGFncykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+d2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oZmxhZ3MpOworfQorCit2b2lkIHdlYmtpdF9kb21f
ZWxlbWVudF93ZWJraXRfcmVxdWVzdF9mdWxsc2NyZWVuKFdlYktpdERPTUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPndlYmtpdFJlcXVl
c3RGdWxsc2NyZWVuKCk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVu
dF9pbnNlcnRfYWRqYWNlbnRfZWxlbWVudChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogd2hlcmUsIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHdoZXJlLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VMRU1FTlQoZWxlbWVudCksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFdoZXJlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHdoZXJlKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBjb252ZXJ0ZWRF
bGVtZW50ID0gV2ViS2l0Ojpjb3JlKGVsZW1lbnQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+aW5zZXJ0QWRqYWNlbnRFbGVtZW50KGNvbnZlcnRlZFdoZXJlLCAq
Y29udmVydGVkRWxlbWVudCwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRq
YWNlbnRfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogd2hlcmUsIGNv
bnN0IGdjaGFyKiBodG1sLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwod2hlcmUpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoaHRtbCk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJv
cik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRXaGVyZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh3aGVy
ZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkSHRtbCA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChodG1sKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5p
bnNlcnRBZGphY2VudEhUTUwoY29udmVydGVkV2hlcmUsIGNvbnZlcnRlZEh0bWwsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF90ZXh0KFdlYktp
dERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB3aGVyZSwgY29uc3QgZ2NoYXIqIHRleHQs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh3aGVyZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh0ZXh0
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJlKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRUZXh0ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRleHQpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmluc2VydEFkamFjZW50VGV4
dChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkVGV4dCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJr
aXRfZG9tX2VsZW1lbnRfcmVxdWVzdF9wb2ludGVyX2xvY2soV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5yZXF1ZXN0UG9pbnRlckxvY2soKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlBvaW50
ZXIgTG9jayIpCisjZW5kaWYgLyogRU5BQkxFKFBPSU5URVJfTE9DSykgKi8KK30KKwordm9pZCB3
ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5yZW1vdmUoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NRWxlbWVudCog
d2Via2l0X2RvbV9lbGVtZW50X3F1ZXJ5X3NlbGVjdG9yKFdlYktpdERPTUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGVjdG9ycywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHNlbGVjdG9ycyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5xdWVyeVNlbGVjdG9yKGNvbnZlcnRlZFNlbGVjdG9ycywgZWMpKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlTGlz
dCogd2Via2l0X2RvbV9lbGVtZW50X3F1ZXJ5X3NlbGVjdG9yX2FsbChXZWJLaXRET01FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxlY3RvcnMsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPnF1ZXJ5U2VsZWN0b3JBbGwoY29udmVydGVkU2VsZWN0b3JzLCBlYykpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50YWdOYW1lKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1dlYktpdERPTU5hbWVkTm9kZU1hcCogd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9hdHRyaWJ1dGVzKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TmFtZWROb2RlTWFwPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YXR0cmlidXRlcygpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUNTU1N0
eWxlRGVjbGFyYXRpb24qIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc3R5bGUoV2ViS2l0RE9NRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+Y3Nzb21TdHlsZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2lk
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5n
ZXRJZEF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21fZWxlbWVudF9zZXRfaWQoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmlkQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50X2dldF9uYW1lc3BhY2VfdXJpKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5uYW1lc3BhY2VVUkko
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZWxlbWVudF9n
ZXRfcHJlZml4KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5wcmVmaXgoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfbG9jYWxfbmFtZShXZWJLaXRET01FbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bG9jYWxOYW1lKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfbGVmdChXZWJL
aXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5vZmZzZXRMZWZ0KCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF90b3Ao
V2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+b2Zmc2V0VG9wKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF93
aWR0aChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5vZmZzZXRXaWR0aCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9lbGVtZW50X2dldF9v
ZmZzZXRfaGVpZ2h0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPm9mZnNldEhl
aWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9jbGllbnRfbGVmdChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5j
bGllbnRMZWZ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2NsaWVudF90b3AoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRl
bS0+Y2xpZW50VG9wKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2RvdWJsZSB3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF93aWR0aChXZWJLaXRET01FbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQg
PSBpdGVtLT5jbGllbnRXaWR0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUg
d2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfaGVpZ2h0KFdlYktpdERPTUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91Ymxl
IHJlc3VsdCA9IGl0ZW0tPmNsaWVudEhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dsb25nIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2xlZnQoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGds
b25nIHJlc3VsdCA9IGl0ZW0tPnNjcm9sbExlZnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfc2Nyb2xsX2xlZnQoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldFNjcm9sbExlZnQodmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X3Njcm9sbF90b3AoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNj
cm9sbFRvcCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVt
ZW50X3NldF9zY3JvbGxfdG9wKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTY3JvbGxUb3Ao
dmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF93aWR0aChX
ZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2Nyb2xsV2lkdGgoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9oZWln
aHQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcm9sbEhlaWdodCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVu
dF9nZXRfb2Zmc2V0X3BhcmVudChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5iaW5kaW5nc09mZnNldFBhcmVudCgp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2lubmVyX2h0bWwoV2ViS2l0RE9NRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmlubmVySFRNTCgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfaW5uZXJfaHRt
bChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJv
cik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0SW5u
ZXJIVE1MKGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0X2RvbV9l
bGVtZW50X2dldF9vdXRlcl9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5vdXRlckhUTUwoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X291dGVyX2h0bWwoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldE91dGVySFRNTChjb252ZXJ0ZWRW
YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xhc3Nf
bmFtZShXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNs
YXNzQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVt
ZW50X3NldF9jbGFzc19uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjbGFzc0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsYXNz
X2xpc3QoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01Ub2tlbkxpc3Q+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jbGFzc0xpc3QoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF93ZWJraXRfcmVnaW9uX292ZXJzZXQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sK
KyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT53ZWJr
aXRSZWdpb25PdmVyc2V0KCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDc3Mg
UmVnaW9ucyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKENTU19SRUdJT05TKSAq
LworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3ByZXZpb3Vz
X2VsZW1lbnRfc2libGluZyhXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50X2dldF9uZXh0X2VsZW1lbnRfc2libGlu
ZyhXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5uZXh0RWxlbWVudFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlv
biogd2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZHJlbihXZWJLaXRET01FbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Y2hpbGRyZW4oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2ZpcnN0X2Vs
ZW1lbnRfY2hpbGQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zmlyc3RFbGVtZW50Q2hpbGQoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FbGVt
ZW50KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01F
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5sYXN0RWxlbWVudENoaWxkKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRf
ZWxlbWVudF9jb3VudChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmNoaWxkRWxl
bWVudENvdW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01F
bGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kNTA5MmZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50LmgKQEAgLTAsMCAr
MSw2NDMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRE
T01FbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU5vZGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQg
ICAgICAgICAgICAod2Via2l0X2RvbV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwgV2ViS2l0RE9NRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwgV2ViS2l0RE9NRWxlbWVu
dENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsIFdlYktpdERPTUVsZW1lbnRDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRWxlbWVudCB7CisgICAgV2ViS2l0RE9NTm9kZSBwYXJl
bnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUVsZW1lbnRDbGFzcyB7CisgICAg
V2ViS2l0RE9NTm9kZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9kb21fZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50Cisg
KiBAbmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGUoV2ViS2l0RE9NRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxl
bWVudF9zZXRfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBu
YW1lOiBBICNnY2hhcgorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRl
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciog
dmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfcmVt
b3ZlX2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3Jl
bW92ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5hbWU6IEEgI2djaGFyCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01BdHRyCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NQXR0cioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGUoV2Vi
S2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RWxlbWVudAorICogQG5ld0F0dHI6IEEgI1dlYktpdERPTUF0dHIKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQXR0cgorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTUF0dHIqCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJp
YnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUF0dHIqIG5ld0F0dHIs
IEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0
dHJpYnV0ZV9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBvbGRBdHRy
OiBBICNXZWJLaXRET01BdHRyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUF0dHIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01BdHRyKgord2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZShXZWJLaXRE
T01FbGVtZW50KiBzZWxmLCBXZWJLaXRET01BdHRyKiBvbGRBdHRyLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9h
c19odG1sX2NvbGxlY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5h
bWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNlOiAyLjEyCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5
X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2hhc19hdHRyaWJ1
dGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Ym9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2VsZW1lbnRfaGFz
X2F0dHJpYnV0ZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVu
dAorICogQG5hbWVzcGFjZVVSSTogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFyCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqIEBuYW1lc3BhY2VVUkk6IChhbGxvdy1ub25lKTogQSAjZ2NoYXIKKyAq
IEBxdWFsaWZpZWROYW1lOiBBICNnY2hhcgorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9y
OiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9z
ZXRfYXR0cmlidXRlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1l
c3BhY2VVUkksIGNvbnN0IGdjaGFyKiBxdWFsaWZpZWROYW1lLCBjb25zdCBnY2hhciogdmFsdWUs
IEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0
dHJpYnV0ZV9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZXNwYWNl
VVJJOiBBICNnY2hhcgorICogQGxvY2FsTmFtZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbnMoV2ViS2l0RE9N
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxv
Y2FsTmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90
YWdfbmFtZV9uc19hc19odG1sX2NvbGxlY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxl
bWVudAorICogQG5hbWVzcGFjZVVSSTogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFy
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVj
dGlvbgorICoKKyAqIFNpbmNlOiAyLjEyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24qCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25z
X2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
bmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlX25zOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUVsZW1lbnQKKyAqIEBuYW1lc3BhY2VVUkk6IEEgI2djaGFyCisgKiBAbG9jYWxOYW1lOiBBICNn
Y2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQXR0cgor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTUF0dHIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0
dHJpYnV0ZV9ub2RlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1l
c3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxl
bWVudAorICogQG5ld0F0dHI6IEEgI1dlYktpdERPTUF0dHIKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQXR0cgorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUF0dHIqCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0
ZV9ub2RlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUF0dHIqIG5ld0F0dHIs
IEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJp
YnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZTogQSAjZ2NoYXIK
KyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2hhc19hdHRy
aWJ1dGVfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5hbWVzcGFjZVVS
STogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9lbGVtZW50X2hh
c19hdHRyaWJ1dGVfbnMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVz
cGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9l
bGVtZW50X2ZvY3VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X2ZvY3VzKFdlYktpdERPTUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9ibHVyOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9l
bGVtZW50X2JsdXIoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9lbGVtZW50X3Njcm9sbF9pbnRvX3ZpZXc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVu
dAorICogQGFsaWduV2l0aFRvcDogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9pbnRvX3ZpZXcoV2ViS2l0RE9NRWxlbWVudCog
c2VsZiwgZ2Jvb2xlYW4gYWxpZ25XaXRoVG9wKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1l
bnRfc2Nyb2xsX2ludG9fdmlld19pZl9uZWVkZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxl
bWVudAorICogQGNlbnRlcklmTmVlZGVkOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2ludG9fdmlld19pZl9uZWVkZWQoV2Vi
S2l0RE9NRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gY2VudGVySWZOZWVkZWQpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZWxlbWVudF9zY3JvbGxfYnlfbGluZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRWxlbWVudAorICogQGxpbmVzOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2J5X2xpbmVzKFdlYktpdERPTUVsZW1lbnQqIHNl
bGYsIGdsb25nIGxpbmVzKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2J5
X3BhZ2VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBwYWdlczogQSAjZ2xv
bmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9i
eV9wYWdlcyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBnbG9uZyBwYWdlcyk7CisKKy8qKgorICog
d2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lX2FzX2h0bWxfY29s
bGVjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZTogQSAjZ2No
YXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xs
ZWN0aW9uCisgKgorICogU2luY2U6IDIuMTIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1M
Q29sbGVjdGlvbioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFt
ZV9hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IG5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9xdWVyeV9zZWxlY3RvcjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAc2VsZWN0b3JzOiBBICNnY2hhcgorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9k
b21fZWxlbWVudF9xdWVyeV9zZWxlY3RvcihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9l
bGVtZW50X3F1ZXJ5X3NlbGVjdG9yX2FsbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50
CisgKiBAc2VsZWN0b3JzOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV9lbGVtZW50X3F1ZXJ5X3NlbGVjdG9y
X2FsbChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUo
V2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9hdHRyaWJ1dGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTU5hbWVkTm9kZU1hcCoKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0
cmlidXRlcyhXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X3N0eWxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24K
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKgord2Via2l0X2Rv
bV9lbGVtZW50X2dldF9zdHlsZShXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9lbGVtZW50X2dldF9pZChXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9lbGVtZW50X3NldF9pZChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfbmFtZXNwYWNlX3VyaToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTaW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9lbGVt
ZW50X2dldF9uYW1lc3BhY2VfdXJpKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJlZml4OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFNpbmNlOiAyLjE0CisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3ByZWZpeChXZWJLaXRE
T01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2xvY2Fs
X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fZWxlbWVudF9nZXRfbG9jYWxfbmFtZShXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9sZWZ0OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfbGVmdChXZWJLaXRE
T01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNl
dF90b3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2dkb3VibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X29mZnNldF90b3AoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9lbGVtZW50X2dldF9vZmZzZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF93aWR0aChXZWJLaXRET01FbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9oZWlnaHQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyoq
LworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9oZWln
aHQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50
X2dldF9jbGllbnRfbGVmdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2RvdWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21f
ZWxlbWVudF9nZXRfY2xpZW50X2xlZnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisqKi8KK1dFQktJVF9BUEkg
Z2RvdWJsZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKFdlYktpdERPTUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X3dpZHRo
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGll
bnRfd2lkdGgoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9l
bGVtZW50X2dldF9jbGllbnRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfaGVpZ2h0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2xlZnQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dF
QktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2xlZnQoV2ViS2l0
RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3NldF9zY3Jv
bGxfbGVmdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAdmFsdWU6IEEgI2ds
b25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfc2Ny
b2xsX2xlZnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX3RvcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfdG9wKFdlYktpdERPTUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfc2Nyb2xsX3RvcDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfc2Nyb2xsX3RvcChXZWJLaXRE
T01FbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9zY3JvbGxfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21f
ZWxlbWVudF9nZXRfc2Nyb2xsX3dpZHRoKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2hlaWdodDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQ
SSBnbG9uZword2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfaGVpZ2h0KFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3Bh
cmVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3BhcmVudChXZWJLaXRE
T01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2lubmVy
X2h0bWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisgKgorICogU2luY2U6IDIuOAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9lbGVtZW50X2dldF9pbm5lcl9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfaW5uZXJfaHRtbDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBTaW5jZTogMi44CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVt
ZW50X3NldF9pbm5lcl9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRf
b3V0ZXJfaHRtbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTaW5jZTogMi44CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X291dGVyX2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3NldF9vdXRlcl9odG1sOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFNpbmNlOiAyLjgKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2VsZW1lbnRfc2V0X291dGVyX2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50
X2dldF9jbGFzc19uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9lbGVt
ZW50X2dldF9jbGFzc19uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZWxlbWVudF9zZXRfY2xhc3NfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZWxlbWVudF9zZXRfY2xhc3NfbmFtZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJl
dmlvdXNfZWxlbWVudF9zaWJsaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9lbGVtZW50X2dldF9wcmV2
aW91c19lbGVtZW50X3NpYmxpbmcoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9lbGVtZW50X2dldF9uZXh0X2VsZW1lbnRfc2libGluZzoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNX
ZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtp
dF9kb21fZWxlbWVudF9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmcoV2ViS2l0RE9NRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZHJlbjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNlOiAyLjEwCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X2NoaWxkcmVuKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
bGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVt
ZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZWxlbWVu
dF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dl
YmtpdF9kb21fZWxlbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxkKFdlYktpdERPTUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRfZWxlbWVudF9j
b3VudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z3Vsb25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2No
aWxkX2VsZW1lbnRfY291bnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXZWJLaXRET01FbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxl
bWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wMDQ3MzExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01F
bGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0VsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTUVsZW1lbnQqIHdyYXBFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqKTsKK1dlYktpdERP
TUVsZW1lbnQqIGtpdChXZWJDb3JlOjpFbGVtZW50Kik7CitXZWJDb3JlOjpFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
V2ViS2l0RE9NRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50VW5z
dGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2ExMTJhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudFVuc3Rh
YmxlLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NRWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRWxl
bWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJ
Tl9ERUNMUworCisvKioKKyAqIFdFQktJVF9ET01fRUxFTUVOVF9BTExPV19LRVlCT0FSRF9JTlBV
VDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VMRU1FTlRfQUxMT1dfS0VZQk9BUkRfSU5QVVQg
MQorCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9tYXRjaGVzOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUVsZW1lbnQKKyAqIEBzZWxlY3RvcnM6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9lbGVtZW50X21hdGNoZXMo
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9jbG9zZXN0OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBzZWxlY3RvcnM6IEEgI2djaGFyCisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVs
ZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZWxlbWVudF9jbG9zZXN0KFdlYktpdERPTUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2VsZW1lbnRfd2Via2l0X21hdGNoZXNfc2VsZWN0b3I6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRWxlbWVudAorICogQHNlbGVjdG9yczogQSAjZ2NoYXIKKyAqIEBlcnJvcjog
I0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2VsZW1lbnRfd2Vi
a2l0X21hdGNoZXNfc2VsZWN0b3IoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVu
dF93ZWJraXRfcmVxdWVzdF9mdWxsX3NjcmVlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVt
ZW50CisgKiBAZmxhZ3M6IEEgI2d1c2hvcnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9yZXF1ZXN0X2Z1
bGxfc2NyZWVuKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGd1c2hvcnQgZmxhZ3MpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZWxlbWVudF93ZWJraXRfcmVxdWVzdF9mdWxsc2NyZWVuOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9yZXF1ZXN0X2Z1bGxz
Y3JlZW4oV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X2luc2VydF9hZGphY2VudF9lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1l
bnQKKyAqIEB3aGVyZTogQSAjZ2NoYXIKKyAqIEBlbGVtZW50OiBBICNXZWJLaXRET01FbGVtZW50
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNl
bnRfZWxlbWVudChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogd2hlcmUsIFdl
YktpdERPTUVsZW1lbnQqIGVsZW1lbnQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X2h0bWw6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRWxlbWVudAorICogQHdoZXJlOiBBICNnY2hhcgorICogQGh0bWw6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF9odG1sKFdlYktpdERP
TUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB3aGVyZSwgY29uc3QgZ2NoYXIqIGh0bWwsIEdF
cnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFj
ZW50X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHdoZXJlOiBBICNn
Y2hhcgorICogQHRleHQ6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50
X2luc2VydF9hZGphY2VudF90ZXh0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB3aGVyZSwgY29uc3QgZ2NoYXIqIHRleHQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2VsZW1lbnRfcmVxdWVzdF9wb2ludGVyX2xvY2s6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfcmVxdWVzdF9wb2ludGVyX2xvY2soV2ViS2l0RE9N
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVt
ZW50X3JlbW92ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGFzc19saXN0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTURPTVRva2VuTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01ET01Ub2tlbkxpc3QqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsYXNz
X2xpc3QoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF93ZWJraXRfcmVnaW9uX292ZXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9lbGVtZW50X2dldF93ZWJraXRf
cmVnaW9uX292ZXJzZXQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NDZi
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50LmNwcApAQCAtMCwwICsxLDQ5MCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1
bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX0VWRU5ULCBXZWJLaXRET01FdmVudFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01FdmVudFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudD4gY29yZU9iamVj
dDsKK30gV2ViS2l0RE9NRXZlbnRQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NRXZlbnQqIGtpdChXZWJDb3JlOjpFdmVudCogb2JqKQoreworICAgIGlmICghb2JqKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0VWRU5UKHJldCk7CisKKyAg
ICByZXR1cm4gd3JhcChvYmopOworfQorCitXZWJDb3JlOjpFdmVudCogY29yZShXZWJLaXRET01F
dmVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkV2ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NRXZlbnQqIHdyYXBFdmVudChXZWJDb3JlOjpFdmVudCogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRVZF
TlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9FVkVOVCwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJ
TkVfVFlQRShXZWJLaXRET01FdmVudCwgd2Via2l0X2RvbV9ldmVudCwgV0VCS0lUX0RPTV9UWVBF
X09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9Q
X1RBUkdFVCwKKyAgICBQUk9QX0NVUlJFTlRfVEFSR0VULAorICAgIFBST1BfRVZFTlRfUEhBU0Us
CisgICAgUFJPUF9CVUJCTEVTLAorICAgIFBST1BfQ0FOQ0VMQUJMRSwKKyAgICBQUk9QX0NPTVBP
U0VELAorICAgIFBST1BfVElNRV9TVEFNUCwKKyAgICBQUk9QX0RFRkFVTFRfUFJFVkVOVEVELAor
ICAgIFBST1BfSVNfVFJVU1RFRCwKKyAgICBQUk9QX1NSQ19FTEVNRU5ULAorICAgIFBST1BfUkVU
VVJOX1ZBTFVFLAorICAgIFBST1BfQ0FOQ0VMX0JVQkJMRSwKK307CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZXZlbnRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERP
TUV2ZW50UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRVZFTlRfR0VUX1BSSVZBVEUob2JqZWN0
KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0
LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01FdmVudFByaXZhdGUoKTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX2V2ZW50X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfc2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRXZlbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0VW
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
UkVUVVJOX1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3NldF9yZXR1cm5fdmFsdWUo
c2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ0FOQ0VMX0JVQkJMRToKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF9zZXRfY2Fu
Y2VsX2J1YmJsZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTUV2ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9FVkVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2V2ZW50
X3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3Rhcmdl
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJSRU5UX1RBUkdFVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dldF9j
dXJyZW50X3RhcmdldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FVkVO
VF9QSEFTRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2RvbV9ldmVu
dF9nZXRfZXZlbnRfcGhhc2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QlVCQkxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9l
dmVudF9nZXRfYnViYmxlcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
QU5DRUxBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9t
X2V2ZW50X2dldF9jYW5jZWxhYmxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0NPTVBPU0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRf
ZG9tX2V2ZW50X2dldF9jb21wb3NlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9USU1FX1NUQU1QOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRf
ZG9tX2V2ZW50X2dldF90aW1lX3N0YW1wKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0RFRkFVTFRfUFJFVkVOVEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dldF9kZWZhdWx0X3ByZXZlbnRlZChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19UUlVTVEVEOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dldF9pc190cnVzdGVkKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQ19FTEVNRU5UOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3NyY19lbGVtZW50KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFVFVSTl9WQUxVRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9ldmVudF9nZXRfcmV0dXJu
X3ZhbHVlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NBTkNFTF9CVUJC
TEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZXZlbnRf
Z2V0X2NhbmNlbF9idWJibGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21fZXZlbnRfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRp
ZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9l
dmVudF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRXZlbnRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9FVkVOVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYt
PmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpFdmVudCo+KFdFQktJVF9ET01fT0JK
RUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF9jbGFzc19pbml0KFdlYktpdERPTUV2
ZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUV2ZW50UHJpdmF0ZSkpOworICAg
IGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2V2ZW50X2NvbnN0cnVjdG9y
OworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2V2ZW50X2ZpbmFsaXpl
OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9ldmVudF9zZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2V2
ZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkV2ZW50
OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRXZlbnQ6dHlwZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1RBUkdFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJ0YXJnZXQiLAorICAgICAgICAgICAgIkV2ZW50OnRhcmdldCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTUV2ZW50VGFyZ2V0KiBFdmVudDp0YXJnZXQiLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NVUlJFTlRfVEFSR0VULAorICAg
ICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImN1cnJlbnQtdGFyZ2V0IiwK
KyAgICAgICAgICAgICJFdmVudDpjdXJyZW50LXRhcmdldCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTUV2ZW50VGFyZ2V0KiBFdmVudDpjdXJyZW50LXRhcmdldCIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRVZFTlRfUEhBU0UsCisgICAgICAg
IGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgImV2ZW50LXBoYXNlIiwKKyAgICAgICAg
ICAgICJFdmVudDpldmVudC1waGFzZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1c2hvcnQg
RXZlbnQ6ZXZlbnQtcGhhc2UiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQlVCQkxF
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYnViYmxlcyIs
CisgICAgICAgICAgICAiRXZlbnQ6YnViYmxlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdi
b29sZWFuIEV2ZW50OmJ1YmJsZXMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DQU5DRUxBQkxFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjYW5jZWxhYmxlIiwK
KyAgICAgICAgICAgICJFdmVudDpjYW5jZWxhYmxlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2Jvb2xlYW4gRXZlbnQ6Y2FuY2VsYWJsZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTVBPU0VE
LAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjb21wb3NlZCIs
CisgICAgICAgICAgICAiRXZlbnQ6Y29tcG9zZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Ym9vbGVhbiBFdmVudDpjb21wb3NlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RJTUVfU1RBTVAs
CisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgInRpbWUtc3RhbXAiLAor
ICAgICAgICAgICAgIkV2ZW50OnRpbWUtc3RhbXAiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
dWludDMyIEV2ZW50OnRpbWUtc3RhbXAiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
REVGQVVMVF9QUkVWRU5URUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAg
ICAgICAgImRlZmF1bHQtcHJldmVudGVkIiwKKyAgICAgICAgICAgICJFdmVudDpkZWZhdWx0LXBy
ZXZlbnRlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEV2ZW50OmRlZmF1bHQt
cHJldmVudGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSVNfVFJVU1RFRCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtdHJ1c3RlZCIsCisgICAgICAgICAg
ICAiRXZlbnQ6aXMtdHJ1c3RlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEV2
ZW50OmlzLXRydXN0ZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TUkNfRUxFTUVOVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzcmMtZWxlbWVudCIsCisgICAg
ICAgICAgICAiRXZlbnQ6c3JjLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01FdmVudFRhcmdldCogRXZlbnQ6c3JjLWVsZW1lbnQiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1JFVFVSTl9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicmV0dXJuLXZhbHVlIiwKKyAgICAgICAgICAgICJF
dmVudDpyZXR1cm4tdmFsdWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gRXZl
bnQ6cmV0dXJuLXZhbHVlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NBTkNFTF9CVUJCTEUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNhbmNlbC1idWJibGUi
LAorICAgICAgICAgICAgIkV2ZW50OmNhbmNlbC1idWJibGUiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2Jvb2xlYW4gRXZlbnQ6Y2FuY2VsLWJ1YmJsZSIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X2luaXQoV2ViS2l0RE9NRXZlbnQqIHJlcXVlc3QpCit7CisgICAg
V2ViS2l0RE9NRXZlbnRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9FVkVOVF9HRVRfUFJJVkFU
RShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUV2ZW50UHJpdmF0ZSgpOworfQor
Cit2b2lkIHdlYmtpdF9kb21fZXZlbnRfc3RvcF9wcm9wYWdhdGlvbihXZWJLaXRET01FdmVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zdG9wUHJvcGFn
YXRpb24oKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2V2ZW50X3ByZXZlbnRfZGVmYXVsdChXZWJL
aXRET01FdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpKTsK
KyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5wcmV2ZW50RGVmYXVsdCgpOworfQorCit2b2lkIHdlYmtpdF9kb21fZXZlbnRfaW5pdF9ldmVu
dChXZWJLaXRET01FdmVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGV2ZW50VHlwZUFyZywgZ2Jvb2xl
YW4gY2FuQnViYmxlQXJnLCBnYm9vbGVhbiBjYW5jZWxhYmxlQXJnKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRVZFTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZXZlbnRUeXBlQXJn
KTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRFdmVudFR5cGVBcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
ZXZlbnRUeXBlQXJnKTsKKyAgICBpdGVtLT5pbml0RXZlbnQoY29udmVydGVkRXZlbnRUeXBlQXJn
LCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOworfQorCit2b2lkIHdlYmtpdF9kb21fZXZl
bnRfc3RvcF9pbW1lZGlhdGVfcHJvcGFnYXRpb24oV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c3RvcEltbWVkaWF0ZVByb3BhZ2F0
aW9uKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF90eXBlKFdlYktp
dERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50eXBlKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUV2ZW50VGFyZ2V0KiB3ZWJraXRfZG9tX2V2
ZW50X2dldF90YXJnZXQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudFRhcmdldD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRhcmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUV2ZW50VGFyZ2V0KiB3
ZWJraXRfZG9tX2V2ZW50X2dldF9jdXJyZW50X3RhcmdldChXZWJLaXRET01FdmVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkV2ZW50VGFyZ2V0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3VycmVudFRh
cmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK2d1c2hvcnQgd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfcGhhc2UoV2ViS2l0RE9NRXZl
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1c2hv
cnQgcmVzdWx0ID0gaXRlbS0+ZXZlbnRQaGFzZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2J1YmJsZXMoV2ViS2l0RE9NRXZlbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5idWJibGVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9ldmVudF9nZXRfY2FuY2VsYWJsZShXZWJLaXRET01FdmVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgRkFMU0UpOworICAg
IFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmNhbmNlbGFibGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X2dldF9jb21wb3NlZChXZWJLaXRET01FdmVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgRkFMU0UpOworICAg
IFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmNvbXBvc2VkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ3Vp
bnQzMiB3ZWJraXRfZG9tX2V2ZW50X2dldF90aW1lX3N0YW1wKFdlYktpdERPTUV2ZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDMyIHJlc3Vs
dCA9IGl0ZW0tPnRpbWVTdGFtcCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21fZXZlbnRfZ2V0X2RlZmF1bHRfcHJldmVudGVkKFdlYktpdERPTUV2ZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2lzX3RydXN0ZWQoV2ViS2l0RE9N
RXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc1RydXN0ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitXZWJLaXRET01FdmVudFRhcmdldCogd2Via2l0X2RvbV9ldmVudF9nZXRfc3JjX2Vs
ZW1lbnQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudFRhcmdldD4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPnNyY0VsZW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X2dl
dF9yZXR1cm5fdmFsdWUoV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5sZWdhY3lS
ZXR1cm5WYWx1ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9l
dmVudF9zZXRfcmV0dXJuX3ZhbHVlKFdlYktpdERPTUV2ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpF
dmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRMZWdhY3lSZXR1
cm5WYWx1ZSh2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2NhbmNl
bF9idWJibGUoV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYW5jZWxCdWJibGUo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZXZlbnRfc2V0X2Nh
bmNlbF9idWJibGUoV2ViS2l0RE9NRXZlbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldENhbmNlbEJ1YmJsZSh2YWx1ZSk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmNkNDIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01FdmVudC5oCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBi
ZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01FdmVudF9o
CisjZGVmaW5lIFdlYktpdERPTUV2ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfRVZFTlQgICAgICAgICAgICAod2Via2l0X2RvbV9ldmVudF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9FVkVOVCwgV2ViS2l0RE9NRXZlbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9FVkVOVCwgV2ViS2l0RE9NRXZl
bnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19FVkVOVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRVZFTlQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0VWRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9E
T01fRVZFTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgV0VCS0lUX0RPTV9UWVBFX0VWRU5ULCBXZWJLaXRET01FdmVudENsYXNzKSkKKworLyoqCisg
KiBXRUJLSVRfRE9NX0VWRU5UX05PTkU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9O
T05FIDAKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX0NBUFRVUklOR19QSEFTRToKKyAqLwor
I2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0NBUFRVUklOR19QSEFTRSAxCisKKy8qKgorICogV0VC
S0lUX0RPTV9FVkVOVF9BVF9UQVJHRVQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9B
VF9UQVJHRVQgMgorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfQlVCQkxJTkdfUEhBU0U6Cisg
Ki8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9CVUJCTElOR19QSEFTRSAzCisKKy8qKgorICog
V0VCS0lUX0RPTV9FVkVOVF9NT1VTRURPV046CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVO
VF9NT1VTRURPV04gMQorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfTU9VU0VVUDoKKyAqLwor
I2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX01PVVNFVVAgMgorCisvKioKKyAqIFdFQktJVF9ET01f
RVZFTlRfTU9VU0VPVkVSOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfTU9VU0VPVkVS
IDQKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX01PVVNFT1VUOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fRVZFTlRfTU9VU0VPVVQgOAorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfTU9V
U0VNT1ZFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfTU9VU0VNT1ZFIDE2CisKKy8q
KgorICogV0VCS0lUX0RPTV9FVkVOVF9NT1VTRURSQUc6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9FVkVOVF9NT1VTRURSQUcgMzIKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX0NMSUNLOgor
ICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfQ0xJQ0sgNjQKKworLyoqCisgKiBXRUJLSVRf
RE9NX0VWRU5UX0RCTENMSUNLOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfREJMQ0xJ
Q0sgMTI4CisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9LRVlET1dOOgorICovCisjZGVmaW5l
IFdFQktJVF9ET01fRVZFTlRfS0VZRE9XTiAyNTYKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5U
X0tFWVVQOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfS0VZVVAgNTEyCisKKy8qKgor
ICogV0VCS0lUX0RPTV9FVkVOVF9LRVlQUkVTUzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VW
RU5UX0tFWVBSRVNTIDEwMjQKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX0RSQUdEUk9QOgor
ICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfRFJBR0RST1AgMjA0OAorCisvKioKKyAqIFdF
QktJVF9ET01fRVZFTlRfRk9DVVM6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9GT0NV
UyA0MDk2CisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9CTFVSOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fRVZFTlRfQkxVUiA4MTkyCisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9TRUxF
Q1Q6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9TRUxFQ1QgMTYzODQKKworLyoqCisg
KiBXRUJLSVRfRE9NX0VWRU5UX0NIQU5HRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5U
X0NIQU5HRSAzMjc2OAorCitzdHJ1Y3QgX1dlYktpdERPTUV2ZW50IHsKKyAgICBXZWJLaXRET01P
YmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01FdmVudENsYXNz
IHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2V2ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZXZlbnRfc3RvcF9wcm9wYWdhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
dmVudAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2V2ZW50X3N0b3BfcHJv
cGFnYXRpb24oV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZl
bnRfcHJldmVudF9kZWZhdWx0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZXZlbnRfcHJldmVudF9kZWZhdWx0KFdlYktp
dERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2luaXRfZXZlbnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqIEBldmVudFR5cGVBcmc6IEEgI2djaGFy
CisgKiBAY2FuQnViYmxlQXJnOiBBICNnYm9vbGVhbgorICogQGNhbmNlbGFibGVBcmc6IEEgI2di
b29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZXZlbnRfaW5pdF9l
dmVudChXZWJLaXRET01FdmVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGV2ZW50VHlwZUFyZywgZ2Jv
b2xlYW4gY2FuQnViYmxlQXJnLCBnYm9vbGVhbiBjYW5jZWxhYmxlQXJnKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21fZXZlbnRfZ2V0X2V2ZW50X3R5cGUoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01FdmVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRXZl
bnRUYXJnZXQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FdmVudFRhcmdldCoKK3dlYmtpdF9k
b21fZXZlbnRfZ2V0X3RhcmdldChXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9ldmVudF9nZXRfY3VycmVudF90YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RXZlbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUV2ZW50
VGFyZ2V0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRXZlbnRUYXJnZXQqCit3ZWJraXRfZG9t
X2V2ZW50X2dldF9jdXJyZW50X3RhcmdldChXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfcGhhc2U6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0CisqKi8KK1dFQktJVF9BUEkgZ3Vz
aG9ydAord2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfcGhhc2UoV2ViS2l0RE9NRXZlbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2J1YmJsZXM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2V2ZW50X2dldF9idWJibGVzKFdlYktpdERPTUV2
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2dldF9jYW5jZWxhYmxlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9ldmVudF9nZXRfY2FuY2VsYWJs
ZShXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9nZXRf
dGltZV9zdGFtcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAqIFJldHVybnM6
IEEgI2d1aW50MzIKKyoqLworV0VCS0lUX0FQSSBndWludDMyCit3ZWJraXRfZG9tX2V2ZW50X2dl
dF90aW1lX3N0YW1wKFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2V2ZW50X2dldF9zcmNfZWxlbWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRXZlbnRUYXJnZXQKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01FdmVudFRhcmdldCoKK3dlYmtpdF9kb21fZXZlbnRfZ2V0
X3NyY19lbGVtZW50KFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2V2ZW50X2dldF9yZXR1cm5fdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX2V2ZW50X2dldF9yZXR1cm5fdmFsdWUoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZXZlbnRfc2V0X3JldHVybl92YWx1ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01FdmVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2V2ZW50X3NldF9yZXR1cm5fdmFsdWUoV2ViS2l0RE9NRXZlbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2dldF9j
YW5jZWxfYnViYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9ldmVu
dF9nZXRfY2FuY2VsX2J1YmJsZShXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9ldmVudF9zZXRfY2FuY2VsX2J1YmJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
dmVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2V2ZW50X3NldF9jYW5jZWxfYnViYmxlKFdlYktpdERPTUV2ZW50KiBzZWxmLCBn
Ym9vbGVhbiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01FdmVu
dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM2N2M1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01FdmVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUV2ZW50UHJpdmF0ZV9o
CisjZGVmaW5lIFdlYktpdERPTUV2ZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0V2
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUV2ZW50Lmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworV2ViS2l0RE9NRXZlbnQqIHdyYXBFdmVudChXZWJDb3JlOjpFdmVudCopOwor
V2ViS2l0RE9NRXZlbnQqIGtpdChXZWJDb3JlOjpFdmVudCopOworV2ViQ29yZTo6RXZlbnQqIGNv
cmUoV2ViS2l0RE9NRXZlbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
V2ViS2l0RE9NRXZlbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFRhcmdl
dC5jcHAKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZl
bnRUYXJnZXQuY3BwCmluZGV4IDllM2IxMmIuLjhiNzUwYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRXZlbnRUYXJnZXQuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRUYXJnZXQuaCIKIAogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50VGFyZ2V0Lmg+CiAjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2
ZW50VGFyZ2V0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaApyZW5hbWUgdG8gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01FdmVudFRhcmdldC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFRhcmdldFByaXZh
dGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldFByaXZhdGUuaApyZW5hbWUgdG8gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01FdmVudFRhcmdldFByaXZhdGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFVuc3RhYmxlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUV2ZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kNjgxNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFVuc3RhYmxlLmgKQEAgLTAs
MCArMSw3NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01FdmVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRXZlbnRVbnN0YWJsZV9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisg
KiB3ZWJraXRfZG9tX2V2ZW50X3N0b3BfaW1tZWRpYXRlX3Byb3BhZ2F0aW9uOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUV2ZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZXZlbnRfc3RvcF9pbW1lZGlhdGVfcHJvcGFnYXRpb24o
V2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2Nv
bXBvc2VkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21fZXZlbnRfZ2V0X2NvbXBvc2VkKFdlYktpdERPTUV2ZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2dldF9kZWZhdWx0X3ByZXZlbnRlZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX2V2ZW50X2dldF9kZWZhdWx0X3ByZXZlbnRlZChXZWJLaXRET01FdmVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9nZXRfaXNfdHJ1c3RlZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01FdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2V2
ZW50X2dldF9pc190cnVzdGVkKFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyog
V2ViS2l0RE9NRXZlbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01GaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTI5YzBi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTUZpbGUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01CbG9iUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUZpbGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01GaWxlVW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRmlsZSoga2l0KFdl
YkNvcmU6OkZpbGUqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9GSUxFKGtpdChzdGF0
aWNfY2FzdDxXZWJDb3JlOjpCbG9iKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpGaWxlKiBjb3Jl
KFdlYktpdERPTUZpbGUqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpGaWxlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NRmlsZSogd3JhcEZpbGUoV2ViQ29yZTo6RmlsZSogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fRklMRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0ZJTEUsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0df
REVGSU5FX1RZUEUoV2ViS2l0RE9NRmlsZSwgd2Via2l0X2RvbV9maWxlLCBXRUJLSVRfRE9NX1RZ
UEVfQkxPQikKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9Q
X0xBU1RfTU9ESUZJRUQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2ZpbGVfZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRmlsZSogc2VsZiA9IFdFQktJVF9E
T01fRklMRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
ZmlsZV9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQVNU
X01PRElGSUVEOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9m
aWxlX2dldF9sYXN0X21vZGlmaWVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZmlsZV9jbGFzc19pbml0KFdlYktpdERPTUZpbGVDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fZmlsZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJG
aWxlOm5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRmlsZTpuYW1lIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTEFTVF9NT0RJRklFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2ludDY0
KAorICAgICAgICAgICAgImxhc3QtbW9kaWZpZWQiLAorICAgICAgICAgICAgIkZpbGU6bGFzdC1t
b2RpZmllZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdpbnQ2NCBGaWxlOmxhc3QtbW9kaWZp
ZWQiLAorICAgICAgICAgICAgR19NSU5JTlQ2NCwgR19NQVhJTlQ2NCwgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZmlsZV9pbml0KFdlYktpdERPTUZpbGUqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJl
cXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9maWxlX2dldF9uYW1lKFdlYktpdERPTUZp
bGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRklMRShzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RmlsZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5uYW1lKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2dpbnQ2NCB3ZWJraXRfZG9tX2ZpbGVfZ2V0X2xhc3RfbW9kaWZpZWQoV2Vi
S2l0RE9NRmlsZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19GSUxFKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpGaWxlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdpbnQ2NCByZXN1bHQgPSBpdGVtLT5sYXN0TW9kaWZpZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZWFmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUZpbGUuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBp
bmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01GaWxlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NRmlsZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01CbG9iLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9GSUxFICAgICAgICAgICAgKHdlYmtpdF9kb21fZmlsZV9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0ZJTEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0ZJTEUsIFdlYktpdERPTUZpbGUpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0ZJTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0ZJTEUsIFdlYktpdERPTUZpbGVDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19GSUxFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9GSUxFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19GSUxFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9GSUxFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9GSUxFX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9G
SUxFLCBXZWJLaXRET01GaWxlQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUZpbGUgeworICAg
IFdlYktpdERPTUJsb2IgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01G
aWxlQ2xhc3MgeworICAgIFdlYktpdERPTUJsb2JDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2ZpbGVfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9maWxlX2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUZpbGUK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9maWxlX2dldF9uYW1lKFdlYktpdERPTUZpbGUqIHNlbGYpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV2ViS2l0RE9NRmlsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRmlsZUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjkwNTNlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0LmNwcApAQCAtMCww
ICsxLDE1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUZpbGVMaXN0LmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
RmlsZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRmlsZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9GSUxFX0xJU1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRklMRV9MSVNULCBXZWJLaXRE
T01GaWxlTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01GaWxlTGlzdFBy
aXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpGaWxlTGlzdD4gY29yZU9iamVjdDsKK30gV2Vi
S2l0RE9NRmlsZUxpc3RQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9N
RmlsZUxpc3QqIGtpdChXZWJDb3JlOjpGaWxlTGlzdCogb2JqKQoreworICAgIGlmICghb2JqKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0ZJTEVfTElTVChyZXQpOwor
CisgICAgcmV0dXJuIHdyYXBGaWxlTGlzdChvYmopOworfQorCitXZWJDb3JlOjpGaWxlTGlzdCog
Y29yZShXZWJLaXRET01GaWxlTGlzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZpbGVMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRmlsZUxpc3QqIHdyYXBGaWxlTGlz
dChXZWJDb3JlOjpGaWxlTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRklMRV9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfRklMRV9MSVNULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUZp
bGVMaXN0LCB3ZWJraXRfZG9tX2ZpbGVfbGlzdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9maWxlX2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdERPTUZpbGVMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRklMRV9MSVNUX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRmlsZUxpc3RQcml2
YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9maWxlX2xpc3RfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9maWxl
X2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRmlsZUxpc3Qq
IHNlbGYgPSBXRUJLSVRfRE9NX0ZJTEVfTElTVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxv
bmcodmFsdWUsIHdlYmtpdF9kb21fZmlsZV9saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fZmlsZV9saXN0X2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZmlsZV9saXN0X3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisKKyAgICBXZWJLaXRET01GaWxlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0ZJ
TEVfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpGaWxlTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9maWxlX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01GaWxlTGlzdENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01GaWxlTGlzdFByaXZhdGUpKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9maWxlX2xpc3RfY29uc3RydWN0b3I7
CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZmlsZV9saXN0X2ZpbmFs
aXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9maWxlX2xp
c3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiRmls
ZUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIEZpbGVMaXN0Omxl
bmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9maWxlX2xp
c3RfaW5pdChXZWJLaXRET01GaWxlTGlzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01GaWxl
TGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0ZJTEVfTElTVF9HRVRfUFJJVkFURShyZXF1
ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUZpbGVMaXN0UHJpdmF0ZSgpOworfQorCitX
ZWJLaXRET01GaWxlKiB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9pdGVtKFdlYktpdERPTUZpbGVMaXN0
KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRklMRV9M
SVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpGaWxlTGlzdCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9nZXRfbGVu
Z3RoKFdlYktpdERPTUZpbGVMaXN0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0ZJTEVfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RmlsZUxpc3QqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RmlsZUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmU1MjE3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlTGlzdC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtp
dGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdERPTUZpbGVMaXN0X2gKKyNkZWZpbmUgV2ViS2l0RE9NRmlsZUxpc3RfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
T2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9GSUxFX0xJU1QgICAgICAgICAg
ICAod2Via2l0X2RvbV9maWxlX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9G
SUxFX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCwgV2ViS2l0RE9NRmlsZUxpc3QpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0ZJTEVfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRklMRV9MSVNULCBXZWJLaXRET01GaWxl
TGlzdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0ZJTEVfTElTVChvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRklMRV9M
SVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19GSUxFX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fRklMRV9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9GSUxFX0xJU1QsIFdlYktp
dERPTUZpbGVMaXN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUZpbGVMaXN0IHsKKyAgICBX
ZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01G
aWxlTGlzdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2ZpbGVfbGlzdF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUZpbGVMaXN0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRmlsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUZpbGUqCit3ZWJraXRfZG9tX2ZpbGVfbGlzdF9pdGVtKFdlYktpdERPTUZpbGVMaXN0KiBzZWxm
LCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fZmlsZV9saXN0X2dldF9sZW5n
dGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRmlsZUxpc3QKKyAqCisgKiBSZXR1cm5zOiBBICNn
dWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZmlsZV9saXN0X2dldF9s
ZW5ndGgoV2ViS2l0RE9NRmlsZUxpc3QqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYg
LyogV2ViS2l0RE9NRmlsZUxpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlTGlzdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRmlsZUxpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uY2YxNDAyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3RQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01GaWxlTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01GaWxlTGlz
dFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlTGlzdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01GaWxlTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUZpbGVMaXN0KiB3cmFwRmlsZUxpc3QoV2ViQ29yZTo6RmlsZUxpc3QqKTsKK1dlYktpdERP
TUZpbGVMaXN0KiBraXQoV2ViQ29yZTo6RmlsZUxpc3QqKTsKK1dlYkNvcmU6OkZpbGVMaXN0KiBj
b3JlKFdlYktpdERPTUZpbGVMaXN0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTUZpbGVMaXN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUZpbGVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjBmOGUwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZVByaXZhdGUuaApA
QCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTUZpbGVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRmlsZVByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUZpbGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01GaWxlKiB3cmFwRmlsZShX
ZWJDb3JlOjpGaWxlKik7CitXZWJLaXRET01GaWxlKiBraXQoV2ViQ29yZTo6RmlsZSopOworV2Vi
Q29yZTo6RmlsZSogY29yZShXZWJLaXRET01GaWxlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTUZpbGVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RmlsZVVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmRiZGRmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVVbnN0
YWJsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NRmlsZVVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRmlsZVVu
c3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisvKioKKyAqIHdlYmtpdF9kb21fZmlsZV9nZXRfbGFzdF9tb2RpZmllZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01GaWxlCisgKgorICogUmV0dXJuczogQSAjZ2ludDY0CisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdpbnQ2NAord2Via2l0X2RvbV9maWxl
X2dldF9sYXN0X21vZGlmaWVkKFdlYktpdERPTUZpbGUqIHNlbGYpOworCisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBX
ZWJLaXRET01GaWxlVW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NR2FtZXBhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5
NTQ1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZC5jcHAKQEAgLTAsMCArMSw2IEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlw
dHMgdGhhdCBXZWJLaXRET01HYW1lcGFkLmggYW5kCisgICAgV2ViS2l0RE9NR2FtZXBhZC5jcHAg
YXJlIGNyZWF0ZWQgZm9yIEdhbWVwYWQuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1
aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NR2FtZXBhZC5oIGFu
ZAorICAgIFdlYktpdERPTUdhbWVwYWQuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVz
dCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWQu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NR2FtZXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQz
OTU0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWQuaApAQCAtMCwwICsxLDYgQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0
cyB0aGF0IFdlYktpdERPTUdhbWVwYWQuaCBhbmQKKyAgICBXZWJLaXRET01HYW1lcGFkLmNwcCBh
cmUgY3JlYXRlZCBmb3IgR2FtZXBhZC5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVp
bGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01HYW1lcGFkLmggYW5k
CisgICAgV2ViS2l0RE9NR2FtZXBhZC5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0
IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZExp
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01HYW1lcGFkTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZmI3ODE0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZExpc3QuY3Bw
CkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8g
dGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NR2FtZXBhZExpc3QuaCBhbmQKKyAgICBX
ZWJLaXRET01HYW1lcGFkTGlzdC5jcHAgYXJlIGNyZWF0ZWQgZm9yIEdhbWVwYWRMaXN0LmlkbCwg
YW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdl
bmVyYXRlIFdlYktpdERPTUdhbWVwYWRMaXN0LmggYW5kCisgICAgV2ViS2l0RE9NR2FtZXBhZExp
c3QuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29t
cGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWRMaXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWRM
aXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3ODE0NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZExpc3QuaApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdl
YktpdERPTUdhbWVwYWRMaXN0LmggYW5kCisgICAgV2ViS2l0RE9NR2FtZXBhZExpc3QuY3BwIGFy
ZSBjcmVhdGVkIGZvciBHYW1lcGFkTGlzdC5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUg
YnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01HYW1lcGFkTGlz
dC5oIGFuZAorICAgIFdlYktpdERPTUdhbWVwYWRMaXN0LmNwcCBhdCBldmVyeSBidWlsZC4gVGhp
cyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01HZW9sb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xvY2F0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5kNTUzODRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HZW9s
b2NhdGlvbi5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01HZW9sb2NhdGlv
bi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBX
RUJLSVRfRE9NX0dFT0xPQ0FUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0dFT0xPQ0FUSU9OLCBXZWJLaXRET01HZW9s
b2NhdGlvblByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01HZW9sb2NhdGlvblBy
aXZhdGUgeworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKyAgICBSZWZQdHI8V2ViQ29yZTo6R2Vv
bG9jYXRpb24+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQorfSBX
ZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGU7CisKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01HZW9sb2NhdGlvbioga2l0KFdlYkNvcmU6
Okdlb2xvY2F0aW9uKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fR0VPTE9DQVRJT04ocmV0KTsKKworICAgIHJldHVybiB3cmFw
R2VvbG9jYXRpb24ob2JqKTsKK30KKworV2ViQ29yZTo6R2VvbG9jYXRpb24qIGNvcmUoV2ViS2l0
RE9NR2VvbG9jYXRpb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpHZW9sb2NhdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUdlb2xvY2F0aW9uKiB3cmFwR2VvbG9jYXRp
b24oV2ViQ29yZTo6R2VvbG9jYXRpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0dFT0xPQ0FUSU9OKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfR0VPTE9DQVRJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
R0VPTE9DQVRJT04pCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NR2VvbG9jYXRpb24sIHdlYmtp
dF9kb21fZ2VvbG9jYXRpb24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZ2VvbG9jYXRpb25fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fR0VPTE9DQVRJ
T05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2Vu
ZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKKyAgICBwcml2LT5+V2ViS2l0RE9NR2VvbG9jYXRp
b25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9nZW9sb2NhdGlvbl9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgR09iamVjdCogd2Vi
a2l0X2RvbV9nZW9sb2NhdGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVy
dGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X2dlb2xvY2F0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQorICAgIFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
R0VPTE9DQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6R2VvbG9jYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04p
CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9nZW9sb2Nh
dGlvbl9jbGFzc19pbml0KFdlYktpdERPTUdlb2xvY2F0aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6
ZW9mKFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29u
c3RydWN0b3IgPSB3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2NvbnN0cnVjdG9yOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2ZpbmFsaXplOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2luaXQoV2ViS2l0RE9NR2VvbG9j
YXRpb24qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9HRU9MT0NBVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcg
KHByaXYpIFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9k
b21fZ2VvbG9jYXRpb25fY2xlYXJfd2F0Y2goV2ViS2l0RE9NR2VvbG9jYXRpb24qIHNlbGYsIGds
b25nIHdhdGNoSUQpCit7CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfR0VPTE9DQVRJT04oc2VsZikpOworICAgIFdlYkNvcmU6Okdlb2xvY2F0aW9uKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmNsZWFyV2F0Y2god2F0Y2hJRCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0od2F0Y2hJRCk7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiR2VvbG9jYXRpb24iKQorI2Vu
ZGlmIC8qIEVOQUJMRShHRU9MT0NBVElPTikgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlv
bi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01HZW9sb2NhdGlvbi5oCnNpbWlsYXJpdHkgaW5kZXggNTIlCnJlbmFtZSBmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFeGNlcHRpb24uaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HZW9sb2NhdGlvbi5oCmluZGV4IDYyNzQ1NTMu
LjRlZDZlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFeGNlcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xvY2F0aW9u
LmgKQEAgLTE4LDggKzE4LDggQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAq
LwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RFeGNlcHRpb25faAotI2RlZmluZSBXZWJLaXRET01U
ZXN0RXhjZXB0aW9uX2gKKyNpZm5kZWYgV2ViS2l0RE9NR2VvbG9jYXRpb25faAorI2RlZmluZSBX
ZWJLaXRET01HZW9sb2NhdGlvbl9oCiAKICNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkKIApAQCAtMjksMzYgKzI5LDM1IEBACiAKIEdfQkVHSU5fREVDTFMKIAotI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfVEVTVF9FWENFUFRJT04gICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V4
Y2VwdGlvbl9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9URVNUX0VYQ0VQVElPTiwgV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbikpCi0jZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9FWENFUFRJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVhDRVBUSU9OLCBXZWJL
aXRET01UZXN0RXhjZXB0aW9uQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FWENF
UFRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfRVhDRVBUSU9OKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FWENFUFRJT04pKQotI2RlZmluZSBXRUJLSVRfRE9NX1RF
U1RfRVhDRVBUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0VYQ0VQVElPTiwgV2ViS2l0RE9NVGVzdEV4Y2Vw
dGlvbkNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0dFT0xPQ0FUSU9OICAgICAgICAg
ICAgKHdlYmtpdF9kb21fZ2VvbG9jYXRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9HRU9MT0NBVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfR0VPTE9DQVRJT04sIFdlYktpdERPTUdlb2xvY2F0aW9u
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9HRU9MT0NBVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfR0VPTE9DQVRJT04s
IFdlYktpdERPTUdlb2xvY2F0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfR0VPTE9D
QVRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0dFT0xPQ0FUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19HRU9MT0NB
VElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfR0VPTE9DQVRJT04pKQorI2RlZmluZSBXRUJLSVRfRE9NX0dFT0xPQ0FUSU9O
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9HRU9MT0NBVElPTiwgV2ViS2l0RE9NR2VvbG9jYXRpb25DbGFzcykpCiAKLXN0
cnVjdCBfV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbiB7CitzdHJ1Y3QgX1dlYktpdERPTUdlb2xvY2F0
aW9uIHsKICAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwogfTsKIAotc3RydWN0
IF9XZWJLaXRET01UZXN0RXhjZXB0aW9uQ2xhc3Mgeworc3RydWN0IF9XZWJLaXRET01HZW9sb2Nh
dGlvbkNsYXNzIHsKICAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CiB9Owog
CiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF90eXBlKHZv
aWQpOword2Via2l0X2RvbV9nZW9sb2NhdGlvbl9nZXRfdHlwZSh2b2lkKTsKIAogLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF9uYW1lOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RFeGNlcHRpb24KLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgorICogd2Via2l0X2RvbV9n
ZW9sb2NhdGlvbl9jbGVhcl93YXRjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01HZW9sb2NhdGlv
bgorICogQHdhdGNoSUQ6IEEgI2dsb25nCiAgKgogICogU3RhYmlsaXR5OiBVbnN0YWJsZQogKiov
Ci1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9nZXRfbmFtZShX
ZWJLaXRET01UZXN0RXhjZXB0aW9uKiBzZWxmKTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9nZW9sb2NhdGlvbl9jbGVhcl93YXRjaChXZWJLaXRET01HZW9sb2NhdGlvbiogc2VsZiwgZ2xv
bmcgd2F0Y2hJRCk7CiAKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0RXhjZXB0aW9uX2ggKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01HZW9sb2NhdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xv
Y2F0aW9uUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNmNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01H
ZW9sb2NhdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZV9oCisjZGVm
aW5lIFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0dl
b2xvY2F0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUdlb2xvY2F0aW9uLmg+
CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TUdlb2xvY2F0aW9uKiB3cmFwR2VvbG9jYXRpb24oV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKK1dl
YktpdERPTUdlb2xvY2F0aW9uKiBraXQoV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKK1dlYkNvcmU6
Okdlb2xvY2F0aW9uKiBjb3JlKFdlYktpdERPTUdlb2xvY2F0aW9uKik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShHRU9MT0NBVElPTikgKi8KKworI2VuZGlmIC8q
IFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjdlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50LmNwcApAQCAtMCwwICsxLDk4OCBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUu
aD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTVRva2Vu
TGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJp
bmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFVuc3RhYmxlLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0FO
Q0hPUl9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQor
CitXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxBbmNob3JFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHdyYXBIVE1MQW5j
aG9yRWxlbWVudChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9BTkNIT1Jf
RUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfQU5DSE9SX0VMRU1FTlQs
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29y
ZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZl
bnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExp
c3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZl
bnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5h
ZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCwgd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NI
QVJTRVQsCisgICAgUFJPUF9DT09SRFMsCisgICAgUFJPUF9ET1dOTE9BRCwKKyAgICBQUk9QX0hS
RUZMQU5HLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1BJTkcsCisgICAgUFJPUF9SRUwsCisg
ICAgUFJPUF9SRVYsCisgICAgUFJPUF9TSEFQRSwKKyAgICBQUk9QX1RBUkdFVCwKKyAgICBQUk9Q
X1RZUEUsCisgICAgUFJPUF9URVhULAorICAgIFBST1BfUkVMX0xJU1QsCisgICAgUFJPUF9IUkVG
LAorICAgIFBST1BfT1JJR0lOLAorICAgIFBST1BfUFJPVE9DT0wsCisgICAgUFJPUF9VU0VSTkFN
RSwKKyAgICBQUk9QX1BBU1NXT1JELAorICAgIFBST1BfSE9TVCwKKyAgICBQUk9QX0hPU1ROQU1F
LAorICAgIFBST1BfUE9SVCwKKyAgICBQUk9QX1BBVEhOQU1FLAorICAgIFBST1BfU0VBUkNILAor
ICAgIFBST1BfSEFTSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9BTkNIT1JfRUxFTUVOVChv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NIQVJT
RVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfY2hhcnNldChz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0NPT1JEUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3Nl
dF9jb29yZHMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9ET1dOTE9BRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X3NldF9kb3dubG9hZChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUZMQU5HOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hyZWZsYW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUElORzoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9waW5nKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
UkVMOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JlbChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1JFVjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9yZXYo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TSEFQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3Nl
dF9zaGFwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X3NldF90YXJnZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdGV4dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZihzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BST1RPQ09M
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Byb3RvY29sKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfVVNFUk5BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9z
ZXRfdXNlcm5hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QQVNTV09SRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X3NldF9wYXNzd29yZChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1Q6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaG9zdChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1ROQU1FOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hvc3RuYW1lKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9S
VDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wb3J0KHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfUEFUSE5BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
cGF0aG5hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9TRUFSQ0g6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9zZXRfc2VhcmNoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEFTSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X3NldF9oYXNoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0hBUlNFVDoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X2dldF9jaGFyc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NP
T1JEUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9jb29yZHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRE9XTkxPQUQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfZG93bmxvYWQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfSFJFRkxBTkc6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZmxhbmco
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dl
dF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BJTkc6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfcGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUw6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfcmVsKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1JFVjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9yZXYoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU0hBUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfc2hhcGUoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3RhcmdldChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVMX0xJU1Q6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9yZWxfbGlzdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9IUkVGOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWYoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X29yaWdpbihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wcm90b2NvbChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VSTkFNRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dl
dF91c2VybmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVNTV09S
RDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9wYXNzd29yZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9IT1NUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hvc3Qoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSE9TVE5BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaG9zdG5hbWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9SVDoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wb3J0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVEhOQU1FOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X3BhdGhuYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFQVJD
SDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9zZWFyY2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSEFTSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9oYXNoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9jbGFzc19pbml0KFdlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9DSEFSU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNo
YXJzZXQiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OmNoYXJzZXQiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OmNoYXJzZXQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQ09PUkRTLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImNvb3JkcyIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6Y29vcmRz
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpjb29y
ZHMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRE9XTkxPQUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiZG93bmxvYWQiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JF
bGVtZW50OmRvd25sb2FkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5j
aG9yRWxlbWVudDpkb3dubG9hZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IUkVGTEFORywKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJocmVmbGFuZyIsCisgICAgICAg
ICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6aHJlZmxhbmciLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OmhyZWZsYW5nIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIs
CisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9QSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBpbmci
LAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnBpbmciLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OnBpbmciLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfUkVMLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInJlbCIs
CisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6cmVsIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpyZWwiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
UkVWLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInJldiIsCisg
ICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6cmV2IiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpyZXYiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0hB
UEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2hhcGUiLAor
ICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnNoYXBlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpzaGFwZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGFy
Z2V0IiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDp0YXJnZXQiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OnRhcmdldCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnR5cGUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OnR5cGUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJ0ZXh0IiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDp0ZXh0IiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDp0ZXh0IiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1JFTF9MSVNULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgInJlbC1saXN0IiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpyZWwt
bGlzdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVRva2VuTGlzdCogSFRN
TEFuY2hvckVsZW1lbnQ6cmVsLWxpc3QiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RP
TV9UT0tFTl9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfSFJFRiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJocmVmIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpocmVmIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpocmVmIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX09SSUdJTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJvcmlnaW4iLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50Om9yaWdp
biIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpvcmln
aW4iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9QUk9UT0NPTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJwcm90b2NvbCIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVs
ZW1lbnQ6cHJvdG9jb2wiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNo
b3JFbGVtZW50OnByb3RvY29sIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1VTRVJOQU1FLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInVzZXJuYW1lIiwKKyAgICAgICAg
ICAgICJIVE1MQW5jaG9yRWxlbWVudDp1c2VybmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6dXNlcm5hbWUiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
UEFTU1dPUkQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicGFz
c3dvcmQiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnBhc3N3b3JkIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpwYXNzd29yZCIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9IT1NULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImhvc3QiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50Omhvc3QiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50Omhvc3QiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSE9TVE5BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiaG9zdG5hbWUiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50
Omhvc3RuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxl
bWVudDpob3N0bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QT1JULAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBvcnQiLAorICAgICAgICAgICAgIkhUTUxBbmNo
b3JFbGVtZW50OnBvcnQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNo
b3JFbGVtZW50OnBvcnQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFUSE5BTUUsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicGF0aG5hbWUiLAorICAgICAgICAgICAg
IkhUTUxBbmNob3JFbGVtZW50OnBhdGhuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MQW5jaG9yRWxlbWVudDpwYXRobmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUFS
Q0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2VhcmNoIiwK
KyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpzZWFyY2giLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OnNlYXJjaCIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9IQVNILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhh
c2giLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50Omhhc2giLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50Omhhc2giLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9jaGFyc2V0KFdlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyc2V0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9jaGFyc2V0KFdlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJzZXRBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X2Nvb3JkcyhXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29vcmRzQXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9j
b29yZHMoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29vcmRzQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9kb3dubG9hZChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sK
KyNpZiBFTkFCTEUoRE9XTkxPQURfQVRUUklCVVRFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpkb3dubG9hZEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiRG93bmxvYWQgQXR0cmlidXRlIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAv
KiBFTkFCTEUoRE9XTkxPQURfQVRUUklCVVRFKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9zZXRfZG93bmxvYWQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoRE9XTkxPQURfQVRUUklC
VVRFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkb3dubG9hZEF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiRG93bmxvYWQgQXR0cmlidXRlIikKKyNlbmRpZiAvKiBFTkFCTEUoRE9XTkxPQURfQVRUUklC
VVRFKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9o
cmVmbGFuZyhXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZmxhbmdBdHRyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0
X2hyZWZsYW5nKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhyZWZs
YW5nQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5h
bWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcGluZyhXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6cGluZ0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGluZyhXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpwaW5nQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9yZWwoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1Jf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlbEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcmVsKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlbEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmV2KFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZXZBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JldihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
TkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZXZBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3NoYXBlKFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpzaGFwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfc2hhcGUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6c2hhcGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3RhcmdldChXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FO
Q0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6dGFyZ2V0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGFyZ2V0QXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90eXBlX2F0dHIo
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFu
Y2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dl
dF90ZXh0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRleHQoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Rl
eHQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRUZXh0KGNv
bnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiB3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JlbF9saXN0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01Ub2tlbkxpc3Q+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yZWxMaXN0KCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9nZXRfaHJlZihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpocmVmQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ocmVm
KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhyZWZBdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X29yaWdpbihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5vcmlnaW4oKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfcHJvdG9jb2woV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cHJvdG9jb2woKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfc2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0UHJvdG9jb2woY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF91c2VybmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT51c2VybmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdXNlcm5hbWUoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRVc2VybmFtZShjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Bhc3N3b3JkKFdl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNo
b3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnBhc3N3b3JkKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wYXNzd29y
ZChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFBhc3N3b3Jk
KGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfaG9zdChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ob3N0KCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X3NldF9ob3N0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
SG9zdChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfZ2V0X2hvc3RuYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhvc3Ru
YW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X3NldF9ob3N0bmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNI
T1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEhvc3RuYW1lKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcG9ydChXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5wb3J0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wb3J0KFdlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UG9ydChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BhdGhuYW1lKFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPnBhdGhuYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wYXRobmFtZShXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFBhdGhuYW1lKGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
c2VhcmNoKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnNlYXJjaCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
c2VhcmNoKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0U2Vh
cmNoKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9nZXRfaGFzaChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5oYXNoKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X3NldF9oYXNoKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0SGFzaChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lYTlkOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudC5oCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0FOQ0hPUl9FTEVN
RU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQU5DSE9SX0VMRU1FTlQob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
QU5DSE9SX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FOQ0hPUl9FTEVNRU5U
LCBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0hUTUxfQU5DSE9SX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQU5DSE9SX0VMRU1FTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQU5DSE9SX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQU5DSE9SX0VMRU1FTlRfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQU5DSE9SX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Q2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1M
RWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfY2hhcnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9zZXRfY2hhcnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9jb29yZHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9jb29yZHMoV2ViS2l0RE9N
SFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9zZXRfY29vcmRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfY29vcmRzKFdlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZmxhbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVmbGFu
ZyhXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ocmVmbGFuZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hyZWZsYW5nKFdl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X25hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X25hbWUoV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9yZWw6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dl
dF9yZWwoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcmVsOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcmVsKFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmV2OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmV2
KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JldjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JldihXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3NoYXBlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfc2hhcGUo
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9zZXRfc2hhcGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9zaGFwZShXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Rh
cmdldChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90YXJnZXQoV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90eXBlX2F0dHI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdHlwZV9hdHRyOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9n
ZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0
X2hyZWYoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wcm90b2Nv
bDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfZ2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Byb3RvY29s
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9zZXRfcHJvdG9jb2woV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X2dldF9ob3N0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaG9zdChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9o
b3N0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9zZXRfaG9zdChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfZ2V0X2hvc3RuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaG9zdG5hbWUoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9zZXRfaG9zdG5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ob3N0bmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BvcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wb3J0KFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X3BvcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wb3J0KFdlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9nZXRfcGF0aG5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wYXRobmFtZShXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X3NldF9wYXRobmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3BhdGhuYW1lKFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfc2VhcmNoOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
c2VhcmNoKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3NlYXJjaDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3NlYXJjaChX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hhc2g6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X2dldF9oYXNoKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hhc2g6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9oYXNoKFdl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTcxNTk0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQW5j
aG9yRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
KiB3cmFwSFRNTEFuY2hvckVsZW1lbnQoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqKTsKK1dl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQq
KTsKK1dlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRVbnN0YWJsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTllOTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDE1MCBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRVbnN0
YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2Rvd25sb2FkOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2Rvd25sb2FkKFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfc2V0X2Rvd25sb2FkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9z
ZXRfZG93bmxvYWQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9w
aW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BpbmcoV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9zZXRfcGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0
X3BpbmcoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90ZXh0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdGV4dChXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JlbF9saXN0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NRE9NVG9rZW5MaXN0Kgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9yZWxfbGlzdChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9vcmlnaW46CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfb3JpZ2luKFdlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfZ2V0X3VzZXJuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X3VzZXJuYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3VzZXJuYW1lOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdXNlcm5hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9wYXNzd29yZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X2dldF9wYXNzd29yZChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wYXNzd29yZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Bhc3N3b3JkKFdlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVmOTg5OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNTI4IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxB
cHBsZXRFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIG9iaikKK3sKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0FQUExFVF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCog
Y29yZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
cmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRN
TEFwcGxldEVsZW1lbnQqIHdyYXBIVE1MQXBwbGV0RWxlbWVudChXZWJDb3JlOjpIVE1MQXBwbGV0
RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0hUTUxfQVBQTEVUX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsK
KyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6
OkhUTUxBcHBsZXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TEFwcGxldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3Jp
cHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEFw
cGxldEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXBwbGV0
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpy
ZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1v
dmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01I
VE1MQXBwbGV0RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50LCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9U
WVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdOLAorICAgIFBST1BfQUxULAorICAgIFBST1Bf
QVJDSElWRSwKKyAgICBQUk9QX0NPREUsCisgICAgUFJPUF9DT0RFX0JBU0UsCisgICAgUFJPUF9I
RUlHSFQsCisgICAgUFJPUF9IU1BBQ0UsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfT0JKRUNU
LAorICAgIFBST1BfVlNQQUNFLAorICAgIFBST1BfV0lEVEgsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9N
X0hUTUxfQVBQTEVUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X3NldF9hbHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BUkNISVZFOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FyY2hpdmUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0RFOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGUoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0RFX0JBU0U6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfY29kZV9iYXNlKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X2hlaWdodChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0hTUEFDRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X3NldF9oc3BhY2Uoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT0JKRUNUOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X29iamVjdChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZTUEFDRToKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF92c3BhY2Uoc2VsZiwgZ192YWx1ZV9n
ZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfQVBQ
TEVUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9BTFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYWx0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0FSQ0hJVkU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYXJjaGl2ZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0RFOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2Nv
ZGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09ERV9CQVNFOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2Vs
ZW1lbnRfZ2V0X2NvZGVfYmFzZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0hTUEFDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9oc3BhY2Uoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09CSkVDVDoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9vYmplY3Qo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQQUNFOgorICAgICAgICBn
X3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0
X3ZzcGFjZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9wcm9wZXJ0
eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04sCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAorICAgICAgICAg
ICAgIkhUTUxBcHBsZXRFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MQXBwbGV0RWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTFQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWx0IiwKKyAgICAgICAg
ICAgICJIVE1MQXBwbGV0RWxlbWVudDphbHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxBcHBsZXRFbGVtZW50OmFsdCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BUkNISVZFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFyY2hpdmUiLAorICAg
ICAgICAgICAgIkhUTUxBcHBsZXRFbGVtZW50OmFyY2hpdmUiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIEhUTUxBcHBsZXRFbGVtZW50OmFyY2hpdmUiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQ09ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb2Rl
IiwKKyAgICAgICAgICAgICJIVE1MQXBwbGV0RWxlbWVudDpjb2RlIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXBwbGV0RWxlbWVudDpjb2RlIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0NPREVfQkFTRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJjb2RlLWJhc2UiLAorICAgICAgICAgICAgIkhUTUxBcHBsZXRFbGVtZW50OmNvZGUtYmFzZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFwcGxldEVsZW1lbnQ6Y29kZS1i
YXNlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAgIkhUTUxBcHBsZXRFbGVt
ZW50OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFwcGxldEVs
ZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hTUEFDRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiaHNwYWNlIiwKKyAgICAgICAgICAgICJIVE1MQXBw
bGV0RWxlbWVudDpoc3BhY2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTEFw
cGxldEVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFt
ZSIsCisgICAgICAgICAgICAiSFRNTEFwcGxldEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEFwcGxldEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9PQkpFQ1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
b2JqZWN0IiwKKyAgICAgICAgICAgICJIVE1MQXBwbGV0RWxlbWVudDpvYmplY3QiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcHBsZXRFbGVtZW50Om9iamVjdCIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9WU1BBQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAg
ICAgICAgInZzcGFjZSIsCisgICAgICAgICAgICAiSFRNTEFwcGxldEVsZW1lbnQ6dnNwYWNlIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxBcHBsZXRFbGVtZW50OnZzcGFjZSIs
CisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAi
SFRNTEFwcGxldEVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxBcHBsZXRFbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiByZXF1
ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2FwcGxldF9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
UFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYWx0KFdlYktpdERPTUhUTUxBcHBsZXRF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjphbHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FsdChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
UFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjphbHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FyY2hpdmUoV2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmFyY2hpdmVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FyY2hpdmUoV2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXJjaGl2ZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfY29kZShXZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y29kZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfY29kZShXZWJLaXRET01IVE1M
QXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2RlQXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9jb2RlX2Jhc2Uo
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFw
cGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvZGViYXNlQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlX2Jh
c2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29kZWJhc2VBdHRy
LCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2Vs
ZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVpZ2h0QXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
aGVpZ2h0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxf
YXBwbGV0X2VsZW1lbnRfZ2V0X2hzcGFjZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmhzcGFjZUF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9oc3BhY2UoV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxl
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpoc3BhY2VBdHRyLCB2YWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9BUFBMRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfbmFtZShX
ZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dl
dF9vYmplY3QoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om9iamVjdEF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRf
b2JqZWN0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om9iamVjdEF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X2dldF92c3BhY2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjp2c3BhY2VBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfdnNwYWNlKFdlYktpdERPTUhUTUxBcHBs
ZXRFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6dnNwYWNlQXR0ciwgdmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExF
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6d2lkdGhBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxBcHBsZXRF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwOTczMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuaApAQCAtMCwwICsxLDI1MiBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9N
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8
d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlm
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9BUFBMRVRfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxf
YXBwbGV0X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0FQUExF
VF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0FQUExFVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxFTUVOVF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9BUFBMRVRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1M
X0FQUExFVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0FQUExFVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1M
X0FQUExFVF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FQUExFVF9FTEVNRU5ULCBXZWJLaXRET01I
VE1MQXBwbGV0RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MQXBwbGV0RWxl
bWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYWxp
Z24oV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FsdDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2Fs
dChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hbHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFwcGxldEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hbHQoV2ViS2l0RE9NSFRN
TEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hcmNoaXZlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYXJj
aGl2ZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hcmNoaXZlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYXJjaGl2ZShX
ZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2NvZGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50
X2dldF9jb2RlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlKFdl
YktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfY29kZV9iYXNlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9nZXRfY29kZV9iYXNlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGVfYmFzZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1l
bnRfc2V0X2NvZGVfYmFzZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRf
Z2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9o
ZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X2dldF9oc3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2hzcGFjZShXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50
X3NldF9oc3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2FwcGxldF9lbGVtZW50X3NldF9oc3BhY2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQq
IHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2Vs
ZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9nZXRfb2JqZWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfb2JqZWN0KFdlYktpdERPTUhUTUxBcHBsZXRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRf
c2V0X29iamVjdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfYXBwbGV0X2VsZW1lbnRfc2V0X29iamVjdChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBw
bGV0X2VsZW1lbnRfZ2V0X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcK
K3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfdnNwYWNlKFdlYktpdERPTUhUTUxB
cHBsZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2Vs
ZW1lbnRfc2V0X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3ZzcGFjZShXZWJLaXRET01IVE1MQXBwbGV0RWxl
bWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRQcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzMzE3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQXBwbGV0RWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiB3cmFwSFRNTEFwcGxldEVsZW1lbnQo
V2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxBcHBsZXRF
bGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50UHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVh
RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0YmQwZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmNwcApAQCAtMCwwICsxLDc5
NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxBcmVhRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxBcmVhRWxlbWVu
dFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxBcmVhRWxlbWVudCog
a2l0KFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRf
RE9NX0hUTUxfQVJFQV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2Jq
KSkpOworfQorCitXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiB3cmFwSFRNTEFy
ZWFFbGVtZW50KFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1F
TlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0FSRUFfRUxFTUVOVCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdz
KCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sK
KyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudCwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9F
VkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAg
ICBQUk9QXzAsCisgICAgUFJPUF9BTFQsCisgICAgUFJPUF9DT09SRFMsCisgICAgUFJPUF9OT19I
UkVGLAorICAgIFBST1BfUElORywKKyAgICBQUk9QX1JFTCwKKyAgICBQUk9QX1NIQVBFLAorICAg
IFBST1BfVEFSR0VULAorICAgIFBST1BfUkVMX0xJU1QsCisgICAgUFJPUF9IUkVGLAorICAgIFBS
T1BfT1JJR0lOLAorICAgIFBST1BfUFJPVE9DT0wsCisgICAgUFJPUF9VU0VSTkFNRSwKKyAgICBQ
Uk9QX1BBU1NXT1JELAorICAgIFBST1BfSE9TVCwKKyAgICBQUk9QX0hPU1ROQU1FLAorICAgIFBS
T1BfUE9SVCwKKyAgICBQUk9QX1BBVEhOQU1FLAorICAgIFBST1BfU0VBUkNILAorICAgIFBST1Bf
SEFTSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVOVChvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMVDoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfYWx0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09PUkRTOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9jb29yZHMoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT19IUkVGOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ub19ocmVmKHNlbGYsIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1BJTkc6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Bpbmcoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9SRUw6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3JlbChz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1NIQVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9z
aGFwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9zZXRfdGFyZ2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSFJFRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9zZXRfaHJlZihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BST1RPQ09MOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X3NldF9wcm90b2NvbChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRVJOQU1FOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF91c2VybmFtZShzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBU1NXT1JE
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wYXNzd29yZChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0hPU1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hvc3Qo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9IT1NUTkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9z
ZXRfaG9zdG5hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QT1JUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9l
bGVtZW50X3NldF9wb3J0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFUSE5BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfc2V0X3BhdGhuYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VBUkNIOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9zZWFyY2goc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IQVNIOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9oYXNoKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01IVE1MQXJlYUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfQVJFQV9FTEVNRU5UKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxUOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9l
bGVtZW50X2dldF9hbHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09P
UkRTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X2dldF9jb29yZHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTk9fSFJFRjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfbm9faHJlZihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9QSU5HOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9waW5nKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcmVsKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NIQVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9zaGFwZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Rhcmdl
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUxfTElTVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2dldF9yZWxfbGlzdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IUkVG
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X2dldF9ocmVmKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X09SSUdJTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9nZXRfb3JpZ2luKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1BST1RPQ09MOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wcm90b2NvbChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VSTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdXNlcm5hbWUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFTU1dPUkQ6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X3Bhc3N3b3JkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1Q6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfZ2V0X2hvc3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSE9T
VE5BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfZ2V0X2hvc3RuYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1BPUlQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BvcnQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUEFUSE5BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BhdGhuYW1lKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFQVJDSDoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfc2VhcmNoKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hBU0g6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hh
c2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudENsYXNzKiByZXF1
ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNz
LT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wcm9wZXJ0
eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9BTFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiYWx0IiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6YWx0IiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6YWx0IiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0NPT1JEUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJjb29yZHMiLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpjb29yZHMi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDpjb29yZHMi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfTk9fSFJFRiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAibm8taHJlZiIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50
Om5vLWhyZWYiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEFyZWFFbGVt
ZW50Om5vLWhyZWYiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUElORywKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwaW5nIiwKKyAgICAgICAgICAgICJIVE1MQXJl
YUVsZW1lbnQ6cGluZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFF
bGVtZW50OnBpbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVMLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgInJlbCIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVt
ZW50OnJlbCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50
OnJlbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSEFQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJzaGFwZSIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50
OnNoYXBlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6
c2hhcGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEFSR0VULAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgInRhcmdldCIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVt
ZW50OnRhcmdldCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVt
ZW50OnRhcmdldCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUxfTElTVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJyZWwtbGlzdCIsCisgICAgICAgICAgICAiSFRN
TEFyZWFFbGVtZW50OnJlbC1saXN0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
RE9NVG9rZW5MaXN0KiBIVE1MQXJlYUVsZW1lbnQ6cmVsLWxpc3QiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFJFRiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJocmVmIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1l
bnQ6aHJlZiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50
OmhyZWYiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1JJR0lOLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgIm9yaWdpbiIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVt
ZW50Om9yaWdpbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MQXJlYUVsZW1l
bnQ6b3JpZ2luIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUFJPVE9DT0wsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAicHJvdG9jb2wiLAorICAgICAgICAgICAgIkhUTUxB
cmVhRWxlbWVudDpwcm90b2NvbCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TEFyZWFFbGVtZW50OnByb3RvY29sIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1VTRVJOQU1FLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInVzZXJuYW1lIiwKKyAgICAg
ICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6dXNlcm5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDp1c2VybmFtZSIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9Q
QVNTV09SRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwYXNz
d29yZCIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50OnBhc3N3b3JkIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6cGFzc3dvcmQiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfSE9TVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJob3N0IiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6aG9zdCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50Omhvc3QiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfSE9TVE5BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAiaG9zdG5hbWUiLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpob3N0bmFtZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50Omhvc3RuYW1l
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1BPUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAicG9ydCIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50OnBvcnQi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDpwb3J0IiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1BBVEhOQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgInBhdGhuYW1lIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6
cGF0aG5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVu
dDpwYXRobmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUFSQ0gsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2VhcmNoIiwKKyAgICAgICAgICAgICJIVE1MQXJl
YUVsZW1lbnQ6c2VhcmNoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJl
YUVsZW1lbnQ6c2VhcmNoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hBU0gsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaGFzaCIsCisgICAgICAgICAgICAiSFRNTEFy
ZWFFbGVtZW50Omhhc2giLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVh
RWxlbWVudDpoYXNoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfaW5pdChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxl
bWVudF9nZXRfYWx0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbHRBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9hbHQoV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWx0QXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfY29vcmRzKFdl
YktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjb29yZHNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9jb29yZHMoV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29vcmRzQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ub19ocmVmKFdlYktp
dERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6bm9ocmVmQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X3NldF9ub19ocmVmKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCog
c2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFf
RUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpub2hyZWZBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X2dldF9waW5nKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwaW5nQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9zZXRfcGluZyhXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwaW5nQXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9nZXRfcmVsKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWxBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9yZWwoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVsQXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfc2hhcGUoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnNoYXBlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfc2hhcGUoV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6c2hhcGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnRhcmdldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3RhcmdldChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjp0YXJnZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTURP
TVRva2VuTGlzdCogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcmVsX2xpc3QoV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVRv
a2VuTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlbExpc3QoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaHJlZihXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpocmVmQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9z
ZXRfaHJlZihXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpocmVmQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9n
ZXRfb3JpZ2luKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm9yaWdpbigpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcHJv
dG9jb2woV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cHJvdG9jb2woKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wcm90b2Nv
bChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFByb3RvY29sKGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X3VzZXJuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnVzZXJuYW1lKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfdXNl
cm5hbWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRVc2VybmFtZShj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2dldF9wYXNzd29yZChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wYXNzd29yZCgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0
X3Bhc3N3b3JkKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UGFzc3dv
cmQoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxl
bWVudF9nZXRfaG9zdChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ob3N0KCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfaG9z
dChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEhvc3QoY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaG9z
dG5hbWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aG9zdG5hbWUoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ob3N0bmFt
ZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEhvc3RuYW1lKGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X3BvcnQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cG9ydCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3BvcnQoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQb3J0KGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BhdGhuYW1lKFdl
YktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnBhdGhuYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcGF0aG5hbWUoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQYXRobmFtZShjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9zZWFyY2go
V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c2VhcmNoKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfc2VhcmNoKFdlYktpdERP
TUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0U2VhcmNoKGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hhc2goV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+aGFzaCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hhc2goV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRIYXNoKGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1NTkzNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUhUTUxBcmVhRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxBcmVhRWxl
bWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9B
UkVBX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQVJFQV9FTEVNRU5UKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9I
VE1MX0FSRUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUkVBX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxBcmVhRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
QVJFQV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0FSRUFfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfSFRNTF9BUkVBX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVJFQV9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUkVBX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxBcmVhRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9hbHQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2FsdChX
ZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfc2V0X2FsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfYWx0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X2dldF9jb29yZHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2Nvb3JkcyhXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
c2V0X2Nvb3JkczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9zZXRfY29vcmRzKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X2dldF9ub19ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X25vX2hyZWYoV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3Nl
dF9ub19ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZh
bHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X3NldF9ub19ocmVmKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfZ2V0X3NoYXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X2dldF9zaGFwZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3NoYXBlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X3NldF9zaGFwZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdGFyZ2V0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9l
bGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF90YXJnZXQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Rhcmdl
dChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaHJlZjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRf
aHJlZihXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hyZWY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hyZWYoV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Byb3RvY29sOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wcm90b2NvbChXZWJL
aXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfZ2V0X2hvc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hvc3QoV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9o
b3N0bmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9nZXRfaG9zdG5hbWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wb3J0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2dldF9wb3J0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGF0aG5hbWU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BhdGhuYW1l
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9nZXRfc2VhcmNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxB
cmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9zZWFyY2goV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X2dldF9oYXNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X2dldF9oYXNoKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2Vs
Zik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxBcmVhRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xYzgzYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnRQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTEFyZWFFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxBcmVhRWxl
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHdyYXBIVE1M
QXJlYUVsZW1lbnQoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Kik7CitXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxB
cmVhRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50UHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxBcmVhRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMGMxNGFlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50VW5zdGFi
bGUuaApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxBcmVhRWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFi
bGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfZ2V0X3Bpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9waW5n
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9zZXRfcGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRf
cGluZyhXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcmVsOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcmVsKFdlYktpdERPTUhUTUxBcmVhRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcmVs
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9yZWwoV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfZ2V0X3JlbF9saXN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxB
cmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9N
RE9NVG9rZW5MaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTURPTVRva2VuTGlzdCoKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X3JlbF9saXN0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfb3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9nZXRfb3JpZ2luKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcHJvdG9jb2w6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxBcmVhRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X2dldF91c2VybmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfZ2V0X3VzZXJuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfdXNlcm5hbWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfc2V0X3VzZXJuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X2dldF9wYXNzd29yZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
Z2V0X3Bhc3N3b3JkKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcGFzc3dvcmQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfc2V0X3Bhc3N3b3JkKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X3NldF9ob3N0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ob3N0KFdlYktpdERP
TUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ob3N0bmFtZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9zZXRfaG9zdG5hbWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfc2V0X3BvcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3BvcnQoV2ViS2l0RE9N
SFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3BhdGhuYW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X3NldF9wYXRobmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9zZXRfc2VhcmNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9zZWFyY2goV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hhc2g6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfc2V0X2hhc2goV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRVbnN0
YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MQXVkaW9FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
MzU1ODVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50LmNwcApAQCAt
MCwwICsxLDEzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTEF1ZGlvRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YktpdERPTUhUTUxBdWRpb0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50KiBv
YmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9BVURJT19FTEVNRU5UKGtpdChzdGF0
aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MQXVkaW9F
bGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0
RE9NSFRNTEF1ZGlvRWxlbWVudCogd3JhcEhUTUxBdWRpb0VsZW1lbnQoV2ViQ29yZTo6SFRNTEF1
ZGlvRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fSFRNTF9BVURJT19FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfSFRNTF9BVURJT19FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFZJREVPKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZl
bnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2Vi
Q29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFj
b3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MQXVkaW9F
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkhUTUxBdWRpb0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MQXVkaW9FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VD
YXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BB
UkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9Q
QVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hdWRpb19lbGVtZW50X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExp
c3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQs
IGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJB
TShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2Ut
PmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9h
dWRpb19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MQXVkaW9F
bGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfTUVESUFfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9F
VkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxB
dWRpb0VsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0Q2xhc3MpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVu
dF9pbml0KFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3QpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmRiNGU2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQu
aApAQCAtMCwwICsxLDUzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MQXVk
aW9FbGVtZW50X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3Rh
YmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9B
VURJT19FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9hdWRpb19lbGVtZW50X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9BVURJT19FTEVNRU5UKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0FVRElPX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfQVVESU9fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BVURJT19FTEVN
RU5ULCBXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9BVURJT19FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0FVRElPX0VMRU1FTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfQVVESU9fRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BVURJT19FTEVN
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0FVRElPX0VMRU1FTlRfR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfQVVESU9fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudENsYXNzKSkKKworc3Ry
dWN0IF9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEF1ZGlv
RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2F1ZGlvX2Vs
ZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQXVkaW9FbGVt
ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEF1ZGlvRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wMjVlYWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MQXVkaW9FbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxBdWRpb0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEF1ZGlv
RWxlbWVudC5oPgorI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01IVE1MQXVkaW9FbGVtZW50KiB3cmFwSFRNTEF1ZGlvRWxlbWVudChXZWJDb3JlOjpIVE1M
QXVkaW9FbGVtZW50Kik7CitXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTEF1ZGlvRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MQXVkaW9FbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIEVOQUJMRShWSURFTykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBdWRpb0VsZW1l
bnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxCUkVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5
N2Y1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1lbnQuY3BwCkBAIC0wLDAg
KzEsMTcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5h
bWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCUkVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01IVE1MQlJFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEJSRWxlbWVudCogb2JqKQor
eworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQlJfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEJSRWxlbWVudCogY29y
ZShXZWJLaXRET01IVE1MQlJFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJSRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxCUkVsZW1lbnQq
IHdyYXBIVE1MQlJFbGVtZW50KFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQlJf
RUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlJfRUxFTUVOVCwgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9
IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MQlJFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTEJSRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X2FkZF9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkhUTUxCUkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
QlJFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
ICAgIFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MQlJFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlz
cGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2JyX2VsZW1l
bnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIg
PSB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxCUkVsZW1lbnQsIHdlYmtpdF9k
b21faHRtbF9icl9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExF
TUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NMRUFS
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEJSRWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9CUl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0xFQVI6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9icl9lbGVtZW50X3NldF9jbGVhcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X2dl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxCUkVsZW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0hUTUxfQlJfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NMRUFSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfY2xlYXIoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRf
Y2xhc3NfaW5pdChXZWJLaXRET01IVE1MQlJFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
YnJfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ0xFQVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
Y2xlYXIiLAorICAgICAgICAgICAgIkhUTUxCUkVsZW1lbnQ6Y2xlYXIiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCUkVsZW1lbnQ6Y2xlYXIiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MQlJFbGVtZW50
KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9icl9lbGVtZW50X2dldF9jbGVhcihXZWJLaXRET01IVE1MQlJFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlJfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJSRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2xlYXJBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnJfZWxl
bWVudF9zZXRfY2xlYXIoV2ViS2l0RE9NSFRNTEJSRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CUl9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQlJFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2xlYXJBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MQlJFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTIyZjc3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oCkBAIC0wLDAg
KzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxCUkVsZW1lbnRfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MQlJFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0JSX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2Jy
X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0JSX0VMRU1FTlQo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQlJfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJSRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9CUl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JSX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxCUkVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1M
X0JSX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlJfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9CUl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JSX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfQlJfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CUl9FTEVNRU5ULCBXZWJLaXRE
T01IVE1MQlJFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxCUkVsZW1lbnQg
eworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVj
dCBfV2ViS2l0RE9NSFRNTEJSRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVu
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
aHRtbF9icl9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9icl9lbGVtZW50X2dldF9jbGVhcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQlJFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9icl9lbGVtZW50X2dldF9jbGVhcihXZWJLaXRET01IVE1MQlJFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9zZXRfY2xlYXI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJSRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9z
ZXRfY2xlYXIoV2ViS2l0RE9NSFRNTEJSRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxCUkVsZW1lbnRfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQlJFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQlJF
bGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOThk
NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1lbnRQcml2YXRlLmgKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01IVE1MQlJFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxCUkVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEJSRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQlJFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NSFRNTEJSRWxlbWVudCogd3JhcEhUTUxCUkVsZW1lbnQoV2ViQ29yZTo6
SFRNTEJSRWxlbWVudCopOworV2ViS2l0RE9NSFRNTEJSRWxlbWVudCoga2l0KFdlYkNvcmU6OkhU
TUxCUkVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxCUkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRN
TEJSRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRE
T01IVE1MQlJFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODI5ZDM1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJhc2VF
bGVtZW50LmNwcApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCYXNlRWxl
bWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCYXNl
RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxCYXNlRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxCYXNlRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
QkFTRV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQor
CitXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTEJhc2VFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50KiB3cmFwSFRNTEJhc2VFbGVtZW50
KFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9CQVNFX0VMRU1FTlQoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0JBU0VfRUxFTUVOVCwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxCYXNlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZl
bnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2Rl
LCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
SFRNTEJhc2VFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJh
c2VFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFj
ZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxf
YmFzZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxCYXNlRWxl
bWVudCwgd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
RUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJH
RVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAs
CisgICAgUFJPUF9IUkVGLAorICAgIFBST1BfVEFSR0VULAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxf
QkFTRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBj
YXNlIFBST1BfSFJFRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9zZXRf
aHJlZihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVu
dF9zZXRfdGFyZ2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfQkFTRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfSFJFRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfaHJlZihzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X3RhcmdldChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYmFzZV9l
bGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50Q2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0hSRUYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiaHJlZiIsCisgICAgICAgICAgICAiSFRNTEJhc2VFbGVtZW50OmhyZWYiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCYXNlRWxlbWVudDpocmVmIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1RBUkdFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ0YXJnZXQiLAorICAgICAgICAgICAgIkhUTUxCYXNlRWxlbWVudDp0YXJnZXQi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCYXNlRWxlbWVudDp0YXJnZXQi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9pbml0KFdl
YktpdERPTUhUTUxCYXNlRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF9ocmVm
KFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0JBU0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJhc2VF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhyZWYoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF9ocmVmKFdlYktpdERPTUhU
TUxCYXNlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9CQVNFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0SHJlZihjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9N
SFRNTEJhc2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QkFTRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnRhcmdldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfc2V0X3RhcmdldChXZWJLaXRET01IVE1MQmFzZUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQkFTRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjp0YXJnZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YjZkMDYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUhUTUxCYXNlRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxCYXNlRWxl
bWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9C
QVNFX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQkFTRV9FTEVNRU5UKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9I
VE1MX0JBU0VfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50KSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX0JBU0VfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CQVNFX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxCYXNlRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
QkFTRV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0JBU0VfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfSFRNTF9CQVNFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQkFTRV9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0JBU0VfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CQVNFX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxCYXNlRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01I
VE1MQmFzZUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF9ocmVmOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxCYXNlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF9ocmVm
KFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2Jhc2VfZWxlbWVudF9zZXRfaHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQmFz
ZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9zZXRfaHJlZihXZWJLaXRET01IVE1MQmFzZUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2Jhc2VfZWxlbWVudF9nZXRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxC
YXNlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9NSFRN
TEJhc2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVt
ZW50X3NldF90YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9iYXNlX2VsZW1lbnRfc2V0X3RhcmdldChXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MQmFzZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1l
bnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI0ZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MQmFzZUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxCYXNlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MQmFzZUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1M
QmFzZUVsZW1lbnQqIHdyYXBIVE1MQmFzZUVsZW1lbnQoV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50
Kik7CitXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQmFzZUVsZW1l
bnQqKTsKK1dlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQmFzZUVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TEJhc2VFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMGZiMmVkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVt
ZW50LmNwcApAQCAtMCwwICsxLDM1MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCb2R5RWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCb2R5RWxl
bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxCb2R5RWxlbWVudCoga2l0KFdlYkNvcmU6
OkhUTUxCb2R5RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQk9E
WV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBy
ZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TEJvZHlFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiB3cmFwSFRNTEJvZHlFbGVtZW50KFdl
YkNvcmU6OkhUTUxCb2R5RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQoZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0JPRFlfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3Jl
KGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxCb2R5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBk
ZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TEJvZHlFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJvZHlF
bGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisg
ICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTEJvZHlFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+
ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2Rpc3BhdGNoX2V2
ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfYm9k
eV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxCb2R5RWxlbWVu
dCwgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxF
TUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQs
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9BX0xJTkssCisgICAgUFJPUF9CQUNLR1JPVU5ELAorICAgIFBST1BfQkdfQ09MT1Is
CisgICAgUFJPUF9MSU5LLAorICAgIFBST1BfVEVYVCwKKyAgICBQUk9QX1ZfTElOSywKK307CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FfTElOSzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2JvZHlfZWxlbWVudF9zZXRfYV9saW5rKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkFDS0dST1VORDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYmFja2dyb3VuZChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JHX0NPTE9S
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9iZ19jb2xvcihzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0xJTks6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2xpbmso
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9URVhUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF90
ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVl9MSU5LOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50
X3NldF92X2xpbmsoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiA9IFdF
QktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9BX0xJTks6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2FfbGluayhzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CQUNLR1JPVU5EOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9i
YWNrZ3JvdW5kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JHX0NPTE9S
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYm9k
eV9lbGVtZW50X2dldF9iZ19jb2xvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9MSU5LOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfYm9keV9lbGVtZW50X2dldF9saW5rKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3RleHQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfVl9MSU5LOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF92X2xpbmsoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9jbGFzc19p
bml0KFdlYktpdERPTUhUTUxCb2R5RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2JvZHlf
ZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9BX0xJTkssCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
YS1saW5rIiwKKyAgICAgICAgICAgICJIVE1MQm9keUVsZW1lbnQ6YS1saW5rIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQm9keUVsZW1lbnQ6YS1saW5rIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0JBQ0tHUk9VTkQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiYmFja2dyb3VuZCIsCisgICAgICAgICAgICAiSFRNTEJvZHlFbGVtZW50OmJhY2tn
cm91bmQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCb2R5RWxlbWVudDpi
YWNrZ3JvdW5kIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JHX0NPTE9SLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImJnLWNvbG9yIiwKKyAgICAgICAgICAgICJIVE1M
Qm9keUVsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxCb2R5RWxlbWVudDpiZy1jb2xvciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MSU5LLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxpbmsiLAorICAgICAgICAgICAg
IkhUTUxCb2R5RWxlbWVudDpsaW5rIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MQm9keUVsZW1lbnQ6bGluayIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9URVhULAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRleHQiLAorICAgICAgICAgICAgIkhU
TUxCb2R5RWxlbWVudDp0ZXh0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
Qm9keUVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WX0xJTkssCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidi1saW5rIiwKKyAgICAgICAgICAgICJI
VE1MQm9keUVsZW1lbnQ6di1saW5rIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MQm9keUVsZW1lbnQ6di1saW5rIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9ib2R5X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHJlcXVlc3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X2JvZHlfZWxlbWVudF9nZXRfYV9saW5rKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlua0F0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1l
bnRfc2V0X2FfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQm9keUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlua0F0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9ib2R5X2Vs
ZW1lbnRfZ2V0X2JhY2tncm91bmQoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVt
ZW50X3NldF9iYWNrZ3JvdW5kKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxC
b2R5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJh
Y2tncm91bmRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfYm9keV9lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdjb2xvckF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9ib2R5
X2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxCb2R5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmJnY29sb3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfYm9keV9lbGVtZW50X2dldF9saW5rKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsaW5rQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVu
dF9zZXRfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQm9keUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsaW5rQXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVu
dF9nZXRfdGV4dChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxCb2R5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGV4dEF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3RleHQoV2Vi
S2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGV4dEF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3ZfbGluayhX
ZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6dmxpbmtBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF92X2xpbmsoV2ViS2l0RE9NSFRN
TEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmxpbmtBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZTBjNjIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVudC5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MQm9keUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
Qm9keUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQk9EWV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1l
bnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9CT0RZX0VMRU1FTlQsIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQk9EWV9FTEVN
RU5ULCBXZWJLaXRET01IVE1MQm9keUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX0JPRFlfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CT0RZX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JPRFlfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQk9E
WV9FTEVNRU5ULCBXZWJLaXRET01IVE1MQm9keUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTEJvZHlFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRf
aW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxCb2R5RWxlbWVudENsYXNzIHsK
KyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYV9saW5rOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50
X2dldF9hX2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9hX2xpbms6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEJvZHlFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2FfbGluayhXZWJL
aXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYmFja2dyb3VuZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRf
YmFja2dyb3VuZChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JhY2tncm91bmQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JhY2tncm91
bmQoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2JnX2NvbG9yOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50
X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JnX2NvbG9yOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9iZ19jb2xv
cihXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfbGluazoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRf
bGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2xpbms6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEJvZHlFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2xpbmsoV2ViS2l0RE9NSFRNTEJv
ZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEJvZHlFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9NSFRN
TEJvZHlFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVt
ZW50X3NldF90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfYm9keV9lbGVtZW50X3NldF90ZXh0KFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVt
ZW50X2dldF92X2xpbms6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3ZfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3ZfbGlu
azoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2JvZHlfZWxl
bWVudF9zZXRfdl9saW5rKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxCb2R5
RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVudFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEJvZHlFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjhkZDU3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVu
dFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MQm9keUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEJvZHlFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxCb2R5RWxl
bWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxCb2R5RWxlbWVudCog
d3JhcEhUTUxCb2R5RWxlbWVudChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqKTsKK1dlYktpdERP
TUhUTUxCb2R5RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCopOworV2ViQ29y
ZTo6SFRNTEJvZHlFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCopOworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQm9keUVsZW1lbnRQ
cml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uN2ExZjI3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuY3Bw
CkBAIC0wLDAgKzEsNjM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRVbnN0YWJs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
SFRNTF9CVVRUT05fRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikp
KTsKK30KKworV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEJ1
dHRvbkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiB3cmFw
SFRNTEJ1dHRvbkVsZW1lbnQoV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
QlVUVE9OX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0JVVFRPTl9F
TEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X2J1dHRvbl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxC
dXR0b25FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJ1dHRv
bkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktp
dERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVu
dCA9IHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBp
ZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30K
KworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQsIHdl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVO
VCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAg
UFJPUF9BVVRPRk9DVVMsCisgICAgUFJPUF9ESVNBQkxFRCwKKyAgICBQUk9QX0ZPUk0sCisgICAg
UFJPUF9GT1JNX0FDVElPTiwKKyAgICBQUk9QX0ZPUk1fRU5DVFlQRSwKKyAgICBQUk9QX0ZPUk1f
TUVUSE9ELAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX0ZPUk1fTk9fVkFMSURBVEUsCisgICAg
UFJPUF9GT1JNX1RBUkdFVCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9WQUxVRSwKKyAgICBQ
Uk9QX1dJTExfVkFMSURBVEUsCisgICAgUFJPUF9WQUxJRElUWSwKKyAgICBQUk9QX1ZBTElEQVRJ
T05fTUVTU0FHRSwKKyAgICBQUk9QX0xBQkVMUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9C
VVRUT05fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX0FVVE9GT0NVUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X3NldF9hdXRvZm9jdXMoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9BQ1RJT046Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9hY3Rpb24oc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9GT1JNX0VOQ1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9zZXRfZm9ybV9lbmN0eXBlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9NRVRIT0Q6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9tZXRob2Qoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2J1dHRvbl90eXBlKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfRk9STV9OT19WQUxJREFURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X3NldF9mb3JtX25vX3ZhbGlkYXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fVEFSR0VUOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fdGFyZ2V0KHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFN
RToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9uYW1lKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfVkFMVUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfdmFs
dWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfQlVUVE9OX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfYXV0b2ZvY3VzKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
Z2V0X2Rpc2FibGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk06
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X2dldF9mb3JtKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0ZPUk1fQUNUSU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fRU5DVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX2Vu
Y3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9NRVRIT0Q6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9nZXRfZm9ybV9tZXRob2Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9idXR0b25fdHlwZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX05PX1ZBTElEQVRFOgorICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zv
cm1fbm9fdmFsaWRhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9S
TV9UQVJHRVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV90YXJnZXQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbHVlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJTExfVkFMSURBVEU6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9nZXRfd2lsbF92YWxpZGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9WQUxJRElUWToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF92YWxpZGF0
aW9uX21lc3NhZ2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFCRUxT
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9nZXRfbGFiZWxzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X2J1dHRvbl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPRk9D
VVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImF1dG9mb2N1
cyIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxCdXR0b25FbGVtZW50OmF1dG9mb2N1cyIsCisg
ICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9ESVNBQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAiZGlzYWJsZWQiLAorICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVt
ZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxCdXR0
b25FbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk0sCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisgICAgICAgICAgICAi
SFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERP
TUhUTUxGb3JtRWxlbWVudCogSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNX0FDVElPTiwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmb3JtLWFjdGlvbiIsCisgICAgICAg
ICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybS1hY3Rpb24iLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIEhUTUxCdXR0b25FbGVtZW50OmZvcm0tYWN0aW9uIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0ZPUk1fRU5DVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJmb3JtLWVuY3R5cGUiLAorICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50OmZv
cm0tZW5jdHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEJ1dHRvbkVs
ZW1lbnQ6Zm9ybS1lbmN0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk1fTUVUSE9ELAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImZvcm0tbWV0aG9kIiwKKyAg
ICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudDpmb3JtLW1ldGhvZCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybS1tZXRob2QiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudDp0eXBlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQnV0dG9uRWxlbWVudDp0eXBlIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0ZPUk1fTk9fVkFMSURBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImZvcm0tbm8tdmFsaWRhdGUiLAorICAgICAgICAgICAgIkhUTUxC
dXR0b25FbGVtZW50OmZvcm0tbm8tdmFsaWRhdGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybS1uby12YWxpZGF0ZSIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9GT1JNX1RBUkdFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJmb3JtLXRhcmdldCIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6
Zm9ybS10YXJnZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCdXR0b25F
bGVtZW50OmZvcm0tdGFyZ2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAiSFRN
TEJ1dHRvbkVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TEJ1dHRvbkVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxVRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWx1ZSIsCisgICAgICAgICAgICAi
SFRNTEJ1dHRvbkVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxCdXR0b25FbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJTExfVkFMSURB
VEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndpbGwtdmFs
aWRhdGUiLAorICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50OndpbGwtdmFsaWRhdGUiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MQnV0dG9uRWxlbWVudDp3aWxsLXZh
bGlkYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURJVFksCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAidmFsaWRpdHkiLAorICAgICAgICAgICAgIkhUTUxC
dXR0b25FbGVtZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZSogSFRNTEJ1dHRvbkVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZhbGlkYXRpb24tbWVzc2Fn
ZSIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxCdXR0b25FbGVtZW50OnZhbGlkYXRp
b24tbWVzc2FnZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBQkVMUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJsYWJlbHMiLAorICAgICAgICAgICAgIkhUTUxCdXR0
b25FbGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGVM
aXN0KiBIVE1MQnV0dG9uRWxlbWVudDpsYWJlbHMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX05PREVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9pbml0KFdlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2NoZWNr
X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja1ZhbGlkaXR5KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2N1c3Rv
bV92YWxpZGl0eShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChlcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRv
bkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkRXJyb3IgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZXJyb3IpOworICAgIGl0ZW0tPnNl
dEN1c3RvbVZhbGlkaXR5KGNvbnZlcnRlZEVycm9yKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfYnV0dG9uX2VsZW1lbnRfY2xpY2soV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5jbGljaygpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfZ2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1c0F0dHIpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X3NldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmF1dG9mb2N1c0F0dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYp
LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1l
bnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBnYm9vbGVh
biB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2Vs
ZikpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpkaXNhYmxlZEF0dHIsIHZhbHVlKTsKK30KKworV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05f
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvcm0oKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX2FjdGlvbihXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5mb3JtQWN0aW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX2FjdGlvbihXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEZvcm1BY3Rpb24oY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9m
b3JtX2VuY3R5cGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Zm9ybUVuY3R5cGUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfc2V0X2Zvcm1fZW5jdHlwZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05f
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEZvcm1FbmN0eXBlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV9tZXRob2QoV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9C
VVRUT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+Zm9ybU1ldGhvZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9tZXRob2QoV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRGb3JtTWV0aG9kKGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9nZXRfYnV0dG9uX3R5cGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxl
bWVudF9zZXRfYnV0dG9uX3R5cGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRUeXBlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVU
VE9OX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
Zm9ybW5vdmFsaWRhdGVBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0
dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29s
ZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Zm9ybW5vdmFsaWRhdGVBdHRyLCB2YWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1f
dGFyZ2V0KFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmb3JtdGFyZ2V0QXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3Nl
dF9mb3JtX3RhcmdldChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1
dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpm
b3JtdGFyZ2V0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2J1dHRvbl9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9C
VVRUT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnZhbHVlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWx1ZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF93aWxsX3ZhbGlk
YXRlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT53aWxsVmFsaWRhdGUoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1l
bnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpWYWxpZGl0eVN0YXRlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+dmFsaWRpdHkoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmFs
aWRhdGlvbk1lc3NhZ2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9k
ZUxpc3QqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfbGFiZWxzKFdlYktpdERP
TUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
TGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmxhYmVscygpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTVkM2U3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudC5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20v
d2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxCdXR0
b25FbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9I
VE1MX0JVVFRPTl9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxl
bWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQlVUVE9OX0VMRU1FTlQo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQlVUVE9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0JVVFRPTl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0JVVFRPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudENsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlVUVE9OX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlRfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQlVUVE9OX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQlVUVE9OX0VM
RU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfQlVUVE9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxCdXR0b25F
bGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50IHsKKyAg
ICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9o
dG1sX2J1dHRvbl9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9nZXRfYXV0b2ZvY3VzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9hdXRv
Zm9jdXMoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfYXV0b2ZvY3VzOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfYXV0
b2ZvY3VzKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9kaXNhYmxlZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9i
dXR0b25fZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZGlzYWJs
ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxl
bWVudF9nZXRfZm9ybToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2J1
dHRvbl90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9nZXRfYnV0dG9uX3R5cGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9z
ZXRfYnV0dG9uX3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9idXR0b25fdHlwZShXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9uYW1lKFdlYktpdERP
TUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0
dG9uX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxCdXR0b25F
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50X3NldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxCdXR0
b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9n
ZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h
MDVmOTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFByaXZhdGUu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TUhUTUxCdXR0b25FbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCdXR0
b25FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQq
IHdyYXBIVE1MQnV0dG9uRWxlbWVudChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCopOworV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCop
OworV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxYzAwOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMjAyIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxCdXR0b25F
bGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFVuc3Rh
YmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9jaGVja192YWxpZGl0eToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfY2hlY2tfdmFsaWRpdHko
V2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKiBAZXJyb3I6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9i
dXR0b25fZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9idXR0b25fZWxlbWVudF9jbGljazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfY2xpY2soV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9nZXRfZm9ybV9hY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9n
ZXRfZm9ybV9hY3Rpb24oV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9hY3Rpb246CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX2FjdGlvbihXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX2VuY3R5cGUoV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9zZXRfZm9ybV9lbmN0eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9y
bV9lbmN0eXBlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9y
bV9tZXRob2Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV9t
ZXRob2QoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9tZXRob2Q6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX21ldGhvZChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
YnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fbm9fdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfc2V0X2Zvcm1fbm9fdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1
dHRvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X3NldF9mb3JtX25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X2dldF9mb3JtX3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X2dldF9mb3JtX3RhcmdldChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX3RhcmdldDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fdGFyZ2V0KFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6
IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSoKK3dlYmtpdF9kb21faHRtbF9i
dXR0b25fZWxlbWVudF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsaWRh
dGlvbl9tZXNzYWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3Zh
bGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9sYWJlbHM6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50X2dldF9sYWJlbHMoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYp
OworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFVuc3RhYmxlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ2FudmFz
RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3ZDIxNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0wLDAgKzEs
MjAzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQuaCIKKworI2luY2x1ZGUg
PFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+Cisj
aW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TENhbnZhc0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCog
a2l0KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fSFRNTF9DQU5WQVNfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+
KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqIGNvcmUoV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50
KiB3cmFwSFRNTENhbnZhc0VsZW1lbnQoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqIGNvcmVP
YmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9N
X0hUTUxfQ0FOVkFTX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0NB
TlZBU19FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X2NhbnZhc19lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3Jl
RXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MQ2FudmFzRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0
LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24o
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX2NhbnZhc19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRj
aF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2NhbnZhc19l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5l
cjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1l
bnQsIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
RUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJH
RVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAs
CisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKK307CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01f
SFRNTF9DQU5WQVNfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2Vs
ZW1lbnRfc2V0X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Nh
bnZhc19lbGVtZW50X3NldF9oZWlnaHQoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxDYW52YXNFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0NBTlZBU19FTEVNRU5UKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRf
d2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1l
bnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MQ2FudmFzRWxl
bWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9jYW52YXNf
ZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJI
VE1MQ2FudmFzRWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBI
VE1MQ2FudmFzRWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
ImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTENhbnZhc0VsZW1lbnQ6aGVpZ2h0IiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxDYW52YXNFbGVtZW50OmhlaWdodCIsCisgICAg
ICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfY2FudmFz
X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogcmVxdWVzdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9jYW52
YXNfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9DQU5WQVNfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+d2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfd2lkdGgoV2Vi
S2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9DQU5WQVNfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0
V2lkdGgodmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRf
Z2V0X2hlaWdodChXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0NBTlZBU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MQ2FudmFzRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
bG9uZyByZXN1bHQgPSBpdGVtLT5oZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhU
TUxDYW52YXNFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQ0FOVkFTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEhlaWdodCh2
YWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
YWQ1NjdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5l
ZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVj
dGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFTX0VMRU1FTlQgICAgICAgICAgICAod2Vi
a2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9DQU5WQVNfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DQU5WQVNfRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTENhbnZhc0VsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQ0FOVkFT
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFTX0VMRU1FTlQsIFdlYktpdERPTUhUTUxDYW52
YXNFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9DQU5WQVNfRUxFTUVO
VChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9DQU5WQVNfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9DQU5WQVNfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DQU5WQVNfRUxFTUVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9DQU5WQVNfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DQU5WQVNfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0
YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF93aWR0aDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9jYW52YXNfZWxl
bWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X3NldF93
aWR0aChXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfaGVpZ2h0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xv
bmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50
X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfaGVpZ2h0OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfaGVp
Z2h0KFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ2Fu
dmFzRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
ZTFhOTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudFByaXZhdGUu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TUhUTUxDYW52YXNFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxDYW52
YXNFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxDYW52YXNFbGVt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQq
IHdyYXBIVE1MQ2FudmFzRWxlbWVudChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCopOworV2Vi
S2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCop
OworV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTENhbnZhc0Vs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TENhbnZhc0VsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjY4Y2Q3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24uY3BwCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24u
aCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4K
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQ09MTEVD
VElPTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJp
dmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZSB7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBjb3JlT2JqZWN0OworfSBXZWJL
aXRET01IVE1MQ29sbGVjdGlvblByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01IVE1MQ29sbGVjdGlvbioga2l0KFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKiBvYmopCit7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
SFRNTF9DT0xMRUNUSU9OKHJldCk7CisKKyAgICByZXR1cm4gd3JhcChvYmopOworfQorCitXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbiogY29yZShXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxDb2xs
ZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30K
KworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdyYXBIVE1MQ29sbGVjdGlvbihXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktp
dERPTUhUTUxDb2xsZWN0aW9uLCB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbiwgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZmluYWxpemUoR09i
amVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
CisKKyAgICBwcml2LT5+V2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlKCk7CisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rp
b25fZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfQ09MTEVDVElPTihvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21faHRtbF9j
b2xsZWN0aW9uX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQorewor
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21faHRtbF9jb2xs
ZWN0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01IVE1MQ29sbGVj
dGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0hUTUxfQ09MTEVDVElPTl9HRVRfUFJJVkFU
RShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBv
YmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX2NvbGxlY3Rpb25fY2xhc3NfaW5pdChXZWJLaXRET01IVE1MQ29sbGVjdGlvbkNsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUpKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25f
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21faHRt
bF9jb2xsZWN0aW9uX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxl
bmd0aCIsCisgICAgICAgICAgICAiSFRNTENvbGxlY3Rpb246bGVuZ3RoIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ3Vsb25nIEhUTUxDb2xsZWN0aW9uOmxlbmd0aCIsCisgICAgICAgICAgICAw
LCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25faW5pdChXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbiogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlv
blByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0hUTUxfQ09MTEVDVElPTl9HRVRfUFJJVkFURShy
ZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZSgp
OworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtKFdl
YktpdERPTUhUTUxDb2xsZWN0aW9uKiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9DT0xMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dl
YktpdERPTU5vZGUqIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX25hbWVkX2l0ZW0oV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwobmFtZSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxv
bmcgd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChXZWJLaXRET01IVE1MQ29s
bGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJ
T04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmE4ZDRiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24uaApAQCAtMCww
ICsxLDgzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQo
X19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vy
cm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3Rs
eS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MQ29sbGVjdGlvbl9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9jb2xs
ZWN0aW9uX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9IVE1MX0NPTExFQ1RJT04sIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0NPTExFQ1RJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwg
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb25DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1M
X0NPTExFQ1RJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9DT0xMRUNUSU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfQ09MTEVDVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLCBXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MQ29sbGVjdGlv
biB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb25DbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2Nv
bGxlY3Rpb25fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2NvbGxl
Y3Rpb25faXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICogQGlu
ZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9odG1s
X2NvbGxlY3Rpb25faXRlbShXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogc2VsZiwgZ3Vsb25nIGlu
ZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVtOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKiBAbmFtZTogQSAjZ2NoYXIK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fbmFt
ZWRfaXRlbShXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGg6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBBICNndWxv
bmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dl
dF9sZW5ndGgoV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHNlbGYpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQ29sbGVjdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhODk2MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MQ29sbGVj
dGlvblByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQ29sbGVjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUhUTUxDb2xsZWN0aW9uKiB3cmFwSFRNTENvbGxlY3Rpb24oV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb24qKTsKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBraXQoV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb24qKTsKK1dlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKiBjb3JlKFdlYktpdERPTUhUTUxDb2xs
ZWN0aW9uKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxDb2xsZWN0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxETGlzdEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yMTgxYmJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExpc3RF
bGVtZW50LmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxETGlzdEVs
ZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRExp
c3RFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9I
VE1MX0RfTElTVF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkp
OworfQorCitXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxETGlz
dEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCogd3JhcEhUTUxE
TGlzdEVsZW1lbnQoV2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9EX0xJU1Rf
RUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRF9MSVNUX0VMRU1FTlQs
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1l
bnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29y
ZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50
Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RfbGlzdF9l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9kX2xpc3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6
OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJn
ZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2Rv
bV9odG1sX2RfbGlzdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0
bWxfZF9saXN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MRExpc3RFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxf
ZF9saXN0X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5U
X0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ09NUEFDVCwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9zZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRExpc3RFbGVtZW50
KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RfTElTVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09NUEFDVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0KHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9kX2xpc3RfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MRExpc3RFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RfTElTVF9FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
Q09NUEFDVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2RfbGlzdF9lbGVtZW50X2dldF9jb21wYWN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9jbGFzc19pbml0KFdlYktp
dERPTUhUTUxETGlzdEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVu
dF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NPTVBBQ1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNv
bXBhY3QiLAorICAgICAgICAgICAgIkhUTUxETGlzdEVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRExpc3RFbGVtZW50OmNvbXBhY3QiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2luaXQoV2Vi
S2l0RE9NSFRNTERMaXN0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9nZXRf
Y29tcGFjdChXZWJLaXRET01IVE1MRExpc3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfRF9MSVNUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MRExpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpjb21wYWN0QXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0
RE9NSFRNTERMaXN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0RfTElTVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
RExpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJv
b2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjb21wYWN0QXR0ciwgdmFsdWUpOwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERMaXN0
RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNWE3MmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRE
T01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5
IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MRExpc3RFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTERMaXN0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9EX0xJU1RfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxf
ZF9saXN0X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RfTElT
VF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RfTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRExp
c3RFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RfTElTVF9FTEVNRU5UX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9IVE1MX0RfTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRExpc3RFbGVtZW50Q2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9EX0xJU1RfRUxFTUVOVChvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9E
X0xJU1RfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9EX0xJU1RfRUxFTUVO
VF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9EX0xJU1RfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9E
X0xJU1RfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9EX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRN
TERMaXN0RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50
IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVs
ZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2dldF9jb21wYWN0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxETGlzdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfZ2V0X2Nv
bXBhY3QoV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxETGlzdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0
KFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnRfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExpc3RF
bGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Y2Zl
ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnRQcml2YXRlLmgKQEAg
LTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01IVE1MRExpc3RFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxE
TGlzdEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTERMaXN0RWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50Lmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCogd3JhcEhUTUxE
TGlzdEVsZW1lbnQoV2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCopOworV2ViS2l0RE9NSFRNTERM
aXN0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhU
TUxETGlzdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRExpc3RFbGVtZW50UHJp
dmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxEZXRhaWxzRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNzQwMzZhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50LmNw
cApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudC5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxEZXRhaWxzRWxl
bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lm
IEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01IVE1MRGV0YWlsc0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqIG9i
aikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0RFVEFJTFNfRUxFTUVOVChraXQoc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTERldGFp
bHNFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCogd3JhcEhUTUxEZXRhaWxzRWxlbWVudChXZWJD
b3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfREVUQUlMU19FTEVNRU5UKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9ERVRBSUxTX0VMRU1FTlQsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQor
eworI2lmIEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVF
dmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZl
bnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJEZXRhaWxzIEVsZW1lbnQiKQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZiAvLyBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoREVUQUlMU19F
TEVNRU5UKQorICAgIFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExp
c3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTSho
YW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiRGV0YWlscyBFbGVtZW50IikKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYgLy8gRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKERFVEFJTFNf
RUxFTUVOVCkKKyAgICBXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkRldGFpbHMgRWxlbWVudCIpCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmIC8vIEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSog
aWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2Rl
dGFpbHNfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7
CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9kZXRh
aWxzX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJ
VEhfQ09ERShXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9kZXRh
aWxzX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfT1BFTiwKK307CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RFVEFJTFNfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX09QRU46CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9kZXRhaWxzX2VsZW1lbnRfc2V0X29wZW4oc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Rl
dGFpbHNfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MRGV0YWlsc0VsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfREVUQUlMU19FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfT1BF
TjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Rl
dGFpbHNfZWxlbWVudF9nZXRfb3BlbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRN
TERldGFpbHNFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVj
dENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
aHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09Q
RU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIm9wZW4iLAor
ICAgICAgICAgICAgIkhUTUxEZXRhaWxzRWxlbWVudDpvcGVuIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdib29sZWFuIEhUTUxEZXRhaWxzRWxlbWVudDpvcGVuIiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1M
RGV0YWlsc0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2dldF9vcGVuKFdl
YktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoREVUQUlMU19F
TEVNRU5UKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfREVUQUlMU19FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpvcGVuQXR0cik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkRldGFpbHMgRWxlbWVudCIpCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoREVUQUlMU19F
TEVNRU5UKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfc2V0
X29wZW4oV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkK
K3sKKyNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9ERVRBSUxTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6b3BlbkF0dHIsIHZhbHVlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiRGV0YWlscyBFbGVtZW50IikKKyNlbmRpZiAvKiBFTkFC
TEUoREVUQUlMU19FTEVNRU5UKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEZXRhaWxz
RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42NDIxNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGV0
YWlsc0VsZW1lbnQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudF9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxEZXRhaWxzRWxlbWVudF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX0RFVEFJTFNfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZGV0
YWlsc19lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9ERVRBSUxT
X0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfREVUQUlMU19FTEVNRU5ULCBXZWJLaXRET01IVE1MRGV0
YWlsc0VsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfREVUQUlMU19FTEVNRU5UX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX0RFVEFJTFNfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50
Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9ERVRBSUxTX0VMRU1FTlQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfREVUQUlMU19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0RFVEFJ
TFNfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ERVRBSUxTX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfREVUQUlMU19FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RFVEFJTFNfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxEZXRhaWxzRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2dldF90eXBlKHZvaWQp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0X29wZW46Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0X29wZW4oV2ViS2l0
RE9NSFRNTERldGFpbHNFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
ZGV0YWlsc19lbGVtZW50X3NldF9vcGVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEZXRh
aWxzRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVt
ZW50X3NldF9vcGVuKFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGV0
YWlsc0VsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZDEwMTlhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50UHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxEZXRhaWxzRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
RGV0YWlsc0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTERldGFp
bHNFbGVtZW50Lmg+CisjaWYgRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQqIHdyYXBIVE1MRGV0YWlsc0VsZW1l
bnQoV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50Kik7CitXZWJLaXRET01IVE1MRGV0YWlsc0Vs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxE
ZXRhaWxzRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQqKTsKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkgKi8K
KworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudFByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXJlY3Rv
cnlFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUxZDhi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5jcHAKQEAgLTAs
MCArMSwxNzAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQqIGtpdChXZWJDb3Jl
OjpIVE1MRGlyZWN0b3J5RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfRElSRUNUT1JZX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmop
KSk7Cit9CisKK1dlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50KiBjb3JlKFdlYktpdERPTUhU
TUxEaXJlY3RvcnlFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MRGlyZWN0b3J5
RWxlbWVudCogd3JhcEhUTUxEaXJlY3RvcnlFbGVtZW50KFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlF
bGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUo
ZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
V2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAg
ICBXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9kaXJlY3RvcnlfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01F
dmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3
ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZh
Y2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVu
dF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7
Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVt
ZW50LCB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9I
VE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRf
VEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfQ09NUEFDVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9kaXJlY3RvcnlfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9E
SVJFQ1RPUllfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9kaXJlY3Rvcnlf
ZWxlbWVudF9zZXRfY29tcGFjdChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1l
bnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTERpcmVjdG9y
eUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0
b3J5X2VsZW1lbnRfZ2V0X2NvbXBhY3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9N
SFRNTERpcmVjdG9yeUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxl
bWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0NPTVBBQ1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAg
ICAgImNvbXBhY3QiLAorICAgICAgICAgICAgIkhUTUxEaXJlY3RvcnlFbGVtZW50OmNvbXBhY3Qi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTERpcmVjdG9yeUVsZW1lbnQ6
Y29tcGFjdCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5
X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRt
bF9kaXJlY3RvcnlfZWxlbWVudF9nZXRfY29tcGFjdChXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RJUkVDVE9SWV9F
TEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNv
bXBhY3RBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9kaXJlY3RvcnlfZWxlbWVudF9zZXRfY29tcGFjdChXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxl
bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0RJUkVDVE9SWV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIsIHZhbHVlKTsKK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5
RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzN2FjOWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50LmgKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VC
S0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAi
T25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJUkVDVE9SWV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9ESVJFQ1RPUllfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVJFQ1RPUllfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX0RJUkVDVE9SWV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0RJUkVDVE9SWV9FTEVNRU5UX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9I
VE1MX0RJUkVDVE9SWV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RJUkVDVE9S
WV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5ULCBXZWJLaXRET01IVE1M
RGlyZWN0b3J5RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MRGlyZWN0b3J5
RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsK
Kworc3RydWN0IF9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudENsYXNzIHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X2NvbXBhY3Q6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxf
ZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9z
ZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudAor
ICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTERpcmVj
dG9yeUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RF
dmVudENvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudFByaXZh
dGUuaApzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclBy
aXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudFByaXZhdGUuaAppbmRl
eCAyNjhlYmZhLi5mNzAxZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50UHJpdmF0ZS5oCkBAIC0xOCwxNiArMTgs
MTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdl
YktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUhUTUxEaXJlY3Rv
cnlFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50
UHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTERpcmVjdG9yeUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRE
T01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogd3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKFdlYkNvcmU6
OlRlc3RFdmVudENvbnN0cnVjdG9yKik7Ci1XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciog
a2l0KFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKik7Ci1XZWJDb3JlOjpUZXN0RXZlbnRD
b25zdHJ1Y3RvciogY29yZShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvciopOworV2ViS2l0
RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQqIHdyYXBIVE1MRGlyZWN0b3J5RWxlbWVudChXZWJDb3Jl
OjpIVE1MRGlyZWN0b3J5RWxlbWVudCopOworV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQq
IGtpdChXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxlbWVudCopOworV2ViQ29yZTo6SFRNTERpcmVj
dG9yeUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQqKTsKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3JQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxEaXZFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTk4
YzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5jcHAKQEAgLTAsMCAr
MSwxNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRGl2RWxlbWVudC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5h
bWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxEaXZFbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NSFRNTERpdkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCogb2Jq
KQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRElWX0VMRU1FTlQoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxEaXZFbGVtZW50
KiBjb3JlKFdlYktpdERPTUhUTUxEaXZFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MRGl2
RWxlbWVudCogd3JhcEhUTUxEaXZFbGVtZW50KFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX0RJVl9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVZf
RUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9kaXZf
ZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJL
aXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50
KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVu
dEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9kaXZfZWxl
bWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9kaXZfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfZGl2X2Vs
ZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERP
TUhUTUxEaXZFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnQsIFdFQktJVF9ET01f
VFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVf
RVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorICAgIFBST1BfQUxJR04sCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfZGl2X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NSFRNTERpdkVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRElWX0VMRU1F
TlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9B
TElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X3NldF9hbGlnbihzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MRGl2RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9ESVZf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfZGl2X2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhU
TUxEaXZFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2Rp
dl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAgICAgICAg
ICAiSFRNTERpdkVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxEaXZFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9kaXZfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxEaXZFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9k
aXZfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ESVZfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X3NldF9h
bGlnbihXZWJLaXRET01IVE1MRGl2RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ESVZfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRGl2RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjk2
N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXZFbGVtZW50LmgKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VC
S0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAi
T25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRfaAorI2RlZmluZSBXZWJL
aXRET01IVE1MRGl2RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9ESVZfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZGl2
X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RJVl9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0RJVl9FTEVNRU5ULCBXZWJLaXRET01IVE1MRGl2RWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9ESVZfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVZfRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX0RJVl9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJVl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX0RJVl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJVl9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RJVl9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJVl9FTEVN
RU5ULCBXZWJLaXRET01IVE1MRGl2RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01I
VE1MRGl2RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNl
OworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MRGl2RWxlbWVudENsYXNzIHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxEaXZFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9nZXRfYWxpZ24oV2Vi
S2l0RE9NSFRNTERpdkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9k
aXZfZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERpdkVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2Rpdl9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MRGl2RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdl
YktpdERPTUhUTUxEaXZFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1l
bnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXZFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1N2YxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxEaXZFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTERpdkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRN
TERpdkVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MRGl2RWxl
bWVudCogd3JhcEhUTUxEaXZFbGVtZW50KFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50Kik7CitXZWJL
aXRET01IVE1MRGl2RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50Kik7CitXZWJD
b3JlOjpIVE1MRGl2RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRGl2RWxlbWVudCopOworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRGl2RWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
RG9jdW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NDRlZjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEb2N1bWVudC5jcHAKQEAgLTAsMCArMSw0Mjkg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MRG9jdW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAi
R09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERvY3VtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTERvY3VtZW50KiBraXQoV2ViQ29yZTo6SFRNTERv
Y3VtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9ET0NVTUVOVChraXQo
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTERv
Y3VtZW50KiBjb3JlKFdlYktpdERPTUhUTUxEb2N1bWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEb2N1bWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxE
b2N1bWVudCogd3JhcEhUTUxEb2N1bWVudChXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfRE9DVU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0RPQ1VNRU5ULCAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9
IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MRG9jdW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
SFRNTERvY3VtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERvY3Vt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJD
b3JlOjpIVE1MRG9jdW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
RG9jdW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktp
dERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVu
dCA9IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2FkZF9ldmVudF9s
aXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NSFRNTERvY3VtZW50LCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnQs
IFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9E
T01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitl
bnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKKyAg
ICBQUk9QX0RJUiwKKyAgICBQUk9QX0JHX0NPTE9SLAorICAgIFBST1BfRkdfQ09MT1IsCisgICAg
UFJPUF9BTElOS19DT0xPUiwKKyAgICBQUk9QX0xJTktfQ09MT1IsCisgICAgUFJPUF9WTElOS19D
T0xPUiwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0hUTUxfRE9DVU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVI6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9zZXRfZGlyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9kb2N1bWVudF9zZXRfYmdfY29sb3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GR19DT0xPUjoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2RvY3VtZW50X3NldF9mZ19jb2xvcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSU5LX0NPTE9SOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2FsaW5rX2NvbG9yKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTElO
S19DT0xPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9saW5rX2NvbG9y
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVkxJTktfQ09MT1I6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9z
ZXRfdmxpbmtfY29sb3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9IVE1MX0RPQ1VNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9ESVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZGlyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0JHX0NPTE9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2JnX2NvbG9yKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZHX0NPTE9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2ZnX2NvbG9yKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSU5LX0NPTE9SOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2Fs
aW5rX2NvbG9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xJTktfQ09M
T1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9nZXRfbGlua19jb2xvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9WTElOS19DT0xPUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF92bGlua19jb2xvcihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2xhc3NfaW5pdChXZWJL
aXRET01IVE1MRG9jdW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
ZG9jdW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAi
SFRNTERvY3VtZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTERv
Y3VtZW50OndpZHRoIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEVJ
R0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJoZWlnaHQiLAor
ICAgICAgICAgICAgIkhUTUxEb2N1bWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnbG9uZyBIVE1MRG9jdW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19N
QVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRElSLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgImRpciIsCisgICAgICAgICAgICAiSFRNTERvY3VtZW50OmRpciIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTERvY3VtZW50OmRpciIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9C
R19DT0xPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJiZy1j
b2xvciIsCisgICAgICAgICAgICAiSFRNTERvY3VtZW50OmJnLWNvbG9yIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRG9jdW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfRkdfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiZmctY29sb3IiLAorICAgICAgICAgICAgIkhUTUxEb2N1bWVudDpmZy1jb2xvciIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTERvY3VtZW50OmZnLWNvbG9yIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0FMSU5LX0NPTE9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgImFsaW5rLWNvbG9yIiwKKyAgICAgICAgICAgICJIVE1MRG9jdW1lbnQ6YWxp
bmstY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxEb2N1bWVudDph
bGluay1jb2xvciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MSU5LX0NPTE9SLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxpbmstY29sb3IiLAorICAgICAgICAgICAg
IkhUTUxEb2N1bWVudDpsaW5rLWNvbG9yIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MRG9jdW1lbnQ6bGluay1jb2xvciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WTElOS19DT0xP
UiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2bGluay1jb2xv
ciIsCisgICAgICAgICAgICAiSFRNTERvY3VtZW50OnZsaW5rLWNvbG9yIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRG9jdW1lbnQ6dmxpbmstY29sb3IiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2luaXQoV2ViS2l0RE9NSFRNTERvY3Vt
ZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2xvc2UoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PmNsb3NlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2NsZWFyKFdlYktp
dERPTUhUTUxEb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9D
VU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jbGVhcigpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9kb2N1bWVudF9jYXB0dXJlX2V2ZW50cyhXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2Fw
dHVyZUV2ZW50cygpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9yZWxlYXNl
X2V2ZW50cyhXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVsZWFzZUV2ZW50cygpOworfQor
CitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxE
b2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+d2lkdGgoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2hlaWdodChX
ZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmhlaWdodCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1l
bnRfZ2V0X2RpcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTERv
Y3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRpcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfZGlyKFdlYktpdERPTUhUTUxEb2N1
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXREaXIoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX2RvY3VtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmJnQ29sb3IoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0
X2JnX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRCZ0NvbG9yKGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZmdfY29s
b3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5mZ0NvbG9yKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9mZ19jb2xvcihXZWJLaXRET01IVE1MRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0RmdDb2xvcihjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2FsaW5rX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YWxpbmtD
b2xvcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9zZXRfYWxpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEFs
aW5rQ29sb3IoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50X2dldF9saW5rX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGlua0NvbG9yKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9saW5r
X2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRMaW5rQ29sb3IoY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF92bGlua19j
b2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPnZsaW5rQ29sb3IoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X3ZsaW5rX2NvbG9yKFdlYktpdERP
TUhUTUxEb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRWbGlua0NvbG9yKGNvbnZlcnRlZFZhbHVlKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERvY3VtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2N2ViOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTERvY3VtZW50LmgKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAm
JiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJr
aXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdl
YktpdERPTUhUTUxEb2N1bWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxEb2N1bWVudF9oCisK
KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01E
b2N1bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NVTUVOVCAgICAg
ICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX0RPQ1VNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RPQ1VNRU5ULCBXZWJLaXRET01I
VE1MRG9jdW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRE9DVU1FTlRfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfRE9DVU1FTlQsIFdlYktpdERPTUhUTUxEb2N1bWVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRE9DVU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRE9DVU1FTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfRE9DVU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRE9DVU1FTlQsIFdlYktp
dERPTUhUTUxEb2N1bWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MRG9jdW1lbnQg
eworICAgIFdlYktpdERPTURvY3VtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTERvY3VtZW50Q2xhc3MgeworICAgIFdlYktpdERPTURvY3VtZW50Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVu
dF9jbG9zZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2Nsb3NlKFdlYktpdERPTUhU
TUxEb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2Ns
ZWFyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2xlYXIoV2ViS2l0RE9NSFRNTERv
Y3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2FwdHVy
ZV9ldmVudHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jYXB0dXJlX2V2ZW50cyhX
ZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9yZWxlYXNlX2V2ZW50czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1l
bnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3Jl
bGVhc2VfZXZlbnRzKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGds
b25nCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxEb2N1
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9oZWln
aHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2RvY3VtZW50
X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2RpcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9kaXIoV2ViS2l0RE9NSFRNTERvY3VtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2RpcjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9kaXIo
V2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfYmdfY29sb3I6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfYmdfY29sb3IoV2Vi
S2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfc2V0X2JnX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRf
Z2V0X2ZnX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfZG9jdW1lbnRfZ2V0X2ZnX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9mZ19jb2xvcjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9mZ19jb2xvcihX
ZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9hbGlua19jb2xvcjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9hbGlua19jb2xv
cihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9kb2N1bWVudF9zZXRfYWxpbmtfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERv
Y3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfYWxpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9kb2N1bWVudF9nZXRfbGlua19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9j
dW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9saW5rX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9saW5r
X2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1l
bnRfc2V0X2xpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfdmxpbmtf
Y29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9kb2N1
bWVudF9nZXRfdmxpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X3ZsaW5rX2NvbG9yOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X3ZsaW5rX2NvbG9y
KFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxEb2N1bWVudF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxEb2N1bWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERvY3VtZW50UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWMzYzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxEb2N1bWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxEb2N1
bWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRG9jdW1lbnRQcml2YXRlX2gKKwor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTERvY3VtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxEb2N1bWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhU
TUxEb2N1bWVudCogd3JhcEhUTUxEb2N1bWVudChXZWJDb3JlOjpIVE1MRG9jdW1lbnQqKTsKK1dl
YktpdERPTUhUTUxEb2N1bWVudCoga2l0KFdlYkNvcmU6OkhUTUxEb2N1bWVudCopOworV2ViQ29y
ZTo6SFRNTERvY3VtZW50KiBjb3JlKFdlYktpdERPTUhUTUxEb2N1bWVudCopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRG9jdW1lbnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRWxlbWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3ODhiMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNjQ0IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NSFRNTEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRVbnN0YWJsZS5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MRWxlbWVudCoga2l0KFdlYkNvcmU6OkhU
TUxFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9FTEVNRU5UKGtp
dChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1M
RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqIHdyYXBIVE1MRWxlbWVudChXZWJDb3JlOjpIVE1MRWxlbWVudCogY29yZU9iamVjdCkK
K3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9F
TEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0
Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVz
Y3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxFbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
SFRNTEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfRUxF
TUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQs
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9USVRMRSwKKyAgICBQUk9QX0xBTkcsCisgICAgUFJPUF9UUkFOU0xBVEUsCisgICAg
UFJPUF9ESVIsCisgICAgUFJPUF9UQUJfSU5ERVgsCisgICAgUFJPUF9EUkFHR0FCTEUsCisgICAg
UFJPUF9XRUJLSVREUk9QWk9ORSwKKyAgICBQUk9QX0hJRERFTiwKKyAgICBQUk9QX0FDQ0VTU19L
RVksCisgICAgUFJPUF9JTk5FUl9URVhULAorICAgIFBST1BfT1VURVJfVEVYVCwKKyAgICBQUk9Q
X0NPTlRFTlRfRURJVEFCTEUsCisgICAgUFJPUF9JU19DT05URU5UX0VESVRBQkxFLAorICAgIFBS
T1BfU1BFTExDSEVDSywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50
X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9USVRMRToKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2VsZW1lbnRfc2V0X3RpdGxlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFORzoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2VsZW1lbnRfc2V0X2xhbmcoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UUkFOU0xBVEU6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X3NldF90cmFuc2xhdGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElSOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfZGlyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFCX0lOREVYOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdGFiX2luZGV4KHNlbGYsIGdfdmFsdWVfZ2V0
X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RSQUdHQUJMRToK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2RyYWdnYWJsZShzZWxmLCBnX3Zh
bHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9X
RUJLSVREUk9QWk9ORToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3dlYmtp
dGRyb3B6b25lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfSElEREVOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9zZXRfaGlkZGVuKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0FDQ0VTU19LRVk6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X3NldF9hY2Nlc3Nfa2V5KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5ORVJfVEVYVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX3RleHQoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PVVRF
Ul9URVhUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfb3V0ZXJfdGV4dChz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NPTlRFTlRfRURJVEFCTEU6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X3NldF9jb250ZW50X2VkaXRhYmxlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1BFTExDSEVD
SzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3NwZWxsY2hlY2soc2VsZiwg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRUxFTUVOVChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RJVExFOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9nZXRfdGl0bGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFORzoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfZ2V0X2xhbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFJBTlNM
QVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfdHJhbnNsYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0RJUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2VsZW1lbnRfZ2V0X2RpcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9UQUJfSU5ERVg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF90YWJfaW5kZXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRFJBR0dBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfZHJhZ2dhYmxlKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1dFQktJVERST1BaT05FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfd2Via2l0ZHJvcHpvbmUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSElEREVOOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaGlk
ZGVuKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FDQ0VTU19LRVk6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbGVtZW50
X2dldF9hY2Nlc3Nfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lO
TkVSX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX09VVEVSX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9vdXRlcl90ZXh0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRFTlRfRURJVEFCTEU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9jb250ZW50X2Vk
aXRhYmxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lTX0NPTlRFTlRf
RURJVEFCTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9pc19jb250ZW50X2VkaXRhYmxlKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NQRUxMQ0hFQ0s6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9zcGVsbGNoZWNrKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2NsYXNz
X2luaXQoV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9lbGVtZW50
X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21faHRtbF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9USVRMRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0aXRsZSIsCisgICAg
ICAgICAgICAiSFRNTEVsZW1lbnQ6dGl0bGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxFbGVtZW50OnRpdGxlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBTkcsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibGFuZyIsCisgICAgICAgICAgICAi
SFRNTEVsZW1lbnQ6bGFuZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVs
ZW1lbnQ6bGFuZyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UUkFOU0xBVEUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInRyYW5zbGF0ZSIsCisgICAgICAgICAgICAi
SFRNTEVsZW1lbnQ6dHJhbnNsYXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFu
IEhUTUxFbGVtZW50OnRyYW5zbGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVIsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGlyIiwKKyAgICAgICAgICAg
ICJIVE1MRWxlbWVudDpkaXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxF
bGVtZW50OmRpciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UQUJfSU5ERVgsCisgICAgICAgIGdfcGFy
YW1fc3BlY19sb25nKAorICAgICAgICAgICAgInRhYi1pbmRleCIsCisgICAgICAgICAgICAiSFRN
TEVsZW1lbnQ6dGFiLWluZGV4IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxF
bGVtZW50OnRhYi1pbmRleCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9EUkFHR0FCTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAg
ImRyYWdnYWJsZSIsCisgICAgICAgICAgICAiSFRNTEVsZW1lbnQ6ZHJhZ2dhYmxlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxFbGVtZW50OmRyYWdnYWJsZSIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9XRUJLSVREUk9QWk9ORSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ3ZWJraXRkcm9wem9uZSIsCisgICAgICAgICAgICAiSFRNTEVs
ZW1lbnQ6d2Via2l0ZHJvcHpvbmUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxFbGVtZW50OndlYmtpdGRyb3B6b25lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hJRERFTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaGlkZGVuIiwKKyAgICAg
ICAgICAgICJIVE1MRWxlbWVudDpoaWRkZW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jv
b2xlYW4gSFRNTEVsZW1lbnQ6aGlkZGVuIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FDQ0VTU19L
RVksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWNjZXNzLWtl
eSIsCisgICAgICAgICAgICAiSFRNTEVsZW1lbnQ6YWNjZXNzLWtleSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEVsZW1lbnQ6YWNjZXNzLWtleSIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9JTk5FUl9URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgImlubmVyLXRleHQiLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OmlubmVyLXRleHQiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxFbGVtZW50OmlubmVyLXRleHQiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfT1VURVJfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJvdXRlci10ZXh0IiwKKyAgICAgICAgICAgICJIVE1MRWxlbWVudDpv
dXRlci10ZXh0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRWxlbWVudDpv
dXRlci10ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTlRFTlRfRURJVEFCTEUsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29udGVudC1lZGl0YWJsZSIsCisg
ICAgICAgICAgICAiSFRNTEVsZW1lbnQ6Y29udGVudC1lZGl0YWJsZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEVsZW1lbnQ6Y29udGVudC1lZGl0YWJsZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9JU19DT05URU5UX0VESVRBQkxFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICJpcy1jb250ZW50LWVkaXRhYmxlIiwKKyAgICAgICAgICAgICJI
VE1MRWxlbWVudDppcy1jb250ZW50LWVkaXRhYmxlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2Jvb2xlYW4gSFRNTEVsZW1lbnQ6aXMtY29udGVudC1lZGl0YWJsZSIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1NQRUxMQ0hFQ0ssCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAg
ICAgICAgInNwZWxsY2hlY2siLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OnNwZWxsY2hlY2si
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEVsZW1lbnQ6c3BlbGxjaGVj
ayIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9pbml0KFdl
YktpdERPTUhUTUxFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9jbGljayhXZWJLaXRET01IVE1M
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+Y2xpY2soKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50
X2dldF90aXRsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjp0aXRsZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90aXRsZShXZWJLaXRET01IVE1MRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnRpdGxlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2VsZW1lbnRfZ2V0X2xhbmcoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bGFuZ0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9sYW5nKFdlYktpdERPTUhU
TUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6bGFuZ0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RyYW5zbGF0ZShXZWJLaXRET01IVE1MRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT50cmFuc2xhdGUoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90cmFuc2xhdGUo
V2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRUcmFuc2xhdGUodmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2RpcihXZWJLaXRE
T01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmRpcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X3NldF9kaXIoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldERpcihjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90YWJfaW5k
ZXgoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT50YWJJbmRl
eCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfc2V0X3RhYl9pbmRleChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNl
dFRhYkluZGV4KHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
Z2V0X2RyYWdnYWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpI
VE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5kcmFnZ2FibGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9kcmFnZ2FibGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zZXREcmFnZ2FibGUodmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3dlYmtpdGRyb3B6b25lKFdlYktpdERPTUhUTUxFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndlYmtpdGRyb3B6
b25lQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfc2V0X3dlYmtpdGRyb3B6b25lKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2Via2l0
ZHJvcHpvbmVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9oaWRkZW4oV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAg
V2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmhpZGRlbkF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2hpZGRlbihXZWJLaXRET01IVE1MRWxl
bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpoaWRkZW5BdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfYWNjZXNzX2tleShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphY2Nlc3NrZXlBdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfYWNjZXNzX2tl
eShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFjY2Vzc2tleUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0KFdlYktp
dERPTUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+aW5uZXJUZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX3RleHQoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6
OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRJbm5lclRleHQoY29udmVy
dGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9n
ZXRfb3V0ZXJfdGV4dChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm91dGVyVGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9vdXRlcl90ZXh0KFdlYktp
dERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+
c2V0T3V0ZXJUZXh0KGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZWRpdGFibGUoV2ViS2l0RE9NSFRNTEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jb250ZW50
RWRpdGFibGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfZWxlbWVudF9zZXRfY29udGVudF9lZGl0YWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6
SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldENvbnRlbnRFZGl0YWJsZShj
b252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfZ2V0X2lzX2NvbnRlbnRfZWRpdGFibGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfc3Bl
bGxjaGVjayhXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5zcGVsbGNoZWNrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9zZXRfc3BlbGxjaGVjayhXZWJLaXRET01IVE1MRWxlbWVudCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPnNldFNwZWxsY2hlY2sodmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDU3MjViNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxF
bGVtZW50LmgKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlM
RElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxFbGVt
ZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIFdlYktpdERPTUhUTUxFbGVtZW50KSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9IVE1MX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9IVE1MX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRUxFTUVOVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzKSkKKworc3RydWN0
IF9XZWJLaXRET01IVE1MRWxlbWVudCB7CisgICAgV2ViS2l0RE9NRWxlbWVudCBwYXJlbnRfaW5z
dGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9jbGljazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxl
bWVudAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9j
bGljayhXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2VsZW1lbnRfZ2V0X3RpdGxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF90aXRsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3RpdGxlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90aXRsZShXZWJLaXRE
T01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfbGFuZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfbGFuZyhXZWJLaXRET01IVE1MRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2xhbmc6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2xhbmcoV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2RpcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfZGlyKFdlYktpdERPTUhUTUxFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfZGlyOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9kaXIoV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RhYl9pbmRleDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90YWJfaW5kZXgoV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3Nl
dF90YWJfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfc2V0X3RhYl9pbmRleChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9hY2Nlc3Nfa2V5Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9h
Y2Nlc3Nfa2V5KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9zZXRfYWNjZXNzX2tleToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfYWNjZXNzX2tleShXZWJLaXRET01IVE1MRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChXZWJLaXRET01IVE1MRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX3Rl
eHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9zZXRfaW5uZXJfdGV4dChXZWJLaXRET01IVE1MRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfZ2V0X291dGVyX3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X291dGVyX3RleHQoV2ViS2l0RE9NSFRN
TEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9v
dXRlcl90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X291dGVyX3RleHQoV2ViS2l0RE9NSFRNTEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9jb250ZW50X2VkaXRhYmxlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9jb250ZW50X2Vk
aXRhYmxlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9zZXRfY29udGVudF9lZGl0YWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9jb250
ZW50X2VkaXRhYmxlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9n
ZXRfaXNfY29udGVudF9lZGl0YWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pc19jb250ZW50X2VkaXRhYmxlKFdlYktpdERP
TUhUTUxFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERP
TUhUTUxFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjgwMmIxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRN
TEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01IVE1MRWxlbWVudCogd3JhcEhUTUxFbGVtZW50KFdlYkNvcmU6OkhU
TUxFbGVtZW50Kik7CitXZWJLaXRET01IVE1MRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxFbGVt
ZW50Kik7CitXZWJDb3JlOjpIVE1MRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRWxlbWVudCop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRWxlbWVu
dFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRWxlbWVudFVuc3RhYmxlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wMDFkYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRWxlbWVudFVuc3RhYmxl
LmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTEVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhU
TUxFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
CisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RyYW5z
bGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdHJhbnNsYXRlKFdlYktpdERP
TUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9z
ZXRfdHJhbnNsYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90cmFuc2xhdGUoV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9nZXRfZHJhZ2dhYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9lbGVtZW50
X2dldF9kcmFnZ2FibGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9kcmFnZ2FibGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
c2V0X2RyYWdnYWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF93ZWJraXRkcm9wem9uZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3dlYmtpdGRyb3B6b25lKFdlYktpdERPTUhUTUxF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfd2Vi
a2l0ZHJvcHpvbmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3dlYmtpdGRyb3B6b25lKFdlYktpdERP
TUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF9oaWRkZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfZ2V0X2hpZGRlbihXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2hpZGRlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRf
aGlkZGVuKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3NwZWxsY2hlY2s6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3NwZWxsY2hlY2soV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9zcGVsbGNoZWNrOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFu
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9lbGVtZW50X3NldF9zcGVsbGNoZWNrKFdlYktpdERPTUhUTUxFbGVtZW50KiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxFbGVtZW50
VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEVtYmVkRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uN2MxMDA3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudC5jcHAK
QEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
RW1iZWRFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9FTUJFRF9F
TEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJD
b3JlOjpIVE1MRW1iZWRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
RW1iZWRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogd3JhcEhUTUxFbWJlZEVsZW1lbnQo
V2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9FTUJFRF9FTEVNRU5UKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTUJFRF9FTEVNRU5ULCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0
Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNv
cmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2Vi
Q29yZTo6SFRNTEVtYmVkRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxFbWJlZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0
ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VtYmVkX2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQor
eworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVt
ZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0
RE9NSFRNTEVtYmVkRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnQsIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9IRUlHSFQsCisgICAg
UFJPUF9OQU1FLAorICAgIFBST1BfU1JDLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX1dJRFRI
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9FTUJFRF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X2hlaWdodChzZWxmLCBnX3ZhbHVl
X2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfbmFtZShzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NS
QzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X3NyYyhzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF90eXBlX2F0
dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
c2V0X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfRU1CRURfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0
eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfaGVpZ2h0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9u
YW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
Z2V0X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxl
bWVudF9nZXRfdHlwZV9hdHRyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1M
RW1iZWRFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04sCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAorICAgICAg
ICAgICAgIkhUTUxFbWJlZEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxFbWJlZEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEVJR0hU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAg
ICAgICAgICAgIkhUTUxFbWJlZEVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdsb25nIEhUTUxFbWJlZEVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTEVtYmVkRWxlbWVudDpuYW1lIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRW1iZWRFbGVtZW50Om5hbWUiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU1JDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInNyYyIsCisgICAgICAgICAgICAiSFRNTEVtYmVkRWxlbWVudDpzcmMiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxFbWJlZEVsZW1lbnQ6c3JjIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTEVtYmVkRWxlbWVudDp0eXBlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRW1iZWRFbGVtZW50OnR5cGUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAg
ICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MRW1iZWRFbGVtZW50OndpZHRoIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxFbWJlZEVsZW1lbnQ6d2lkdGgiLAorICAgICAg
ICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2VtYmVkX2Vs
ZW1lbnRfaW5pdChXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVO
VVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9l
bGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9z
ZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRy
LCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVt
ZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpoZWlnaHRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVu
dCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVE
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5n
ZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9FTUJFRF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTEVtYmVkRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
c2V0X3NyYyhXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVu
dF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0
X3R5cGVfYXR0cihXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxl
bWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjp3aWR0aEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQq
IHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6d2lkdGhBdHRyLCB2YWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEVtYmVkRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyMGRhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEVtYmVkRWxlbWVudC5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01I
VE1MRW1iZWRFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudF9oCisK
KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTUJFRF9FTEVN
RU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9FTUJFRF9FTEVNRU5UKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0VN
QkVEX0VMRU1FTlQsIFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfRU1CRURfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTUJFRF9FTEVNRU5ULCBXZWJL
aXRET01IVE1MRW1iZWRFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9F
TUJFRF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0VNQkVEX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTUJFRF9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0VNQkVEX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRU1CRURf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJL
aXRET01IVE1MRW1iZWRFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRf
aW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRDbGFzcyB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfYWxpZ246Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxl
bWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X2FsaWdu
KFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X2hlaWdodDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xv
bmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
Z2V0X2hlaWdodChXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X2hlaWdodChX
ZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEVtYmVkRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfbmFtZShX
ZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfZW1iZWRfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRW1i
ZWRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxFbWJl
ZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RW1iZWRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRN
TEVtYmVkRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VtYmVkX2Vs
ZW1lbnRfc2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9lbWJlZF9lbGVtZW50X3NldF9zcmMoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRf
ZWxlbWVudF9nZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1M
RW1iZWRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxl
bWVudF9zZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MRW1iZWRF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9lbWJlZF9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RW1iZWRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBn
bG9uZword2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhU
TUxFbWJlZEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9l
bGVtZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9lbWJlZF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50
KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRE
T01IVE1MRW1iZWRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVu
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmI4ZGIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxFbWJlZEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTEVtYmVkRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TUhUTUxFbWJlZEVsZW1lbnQqIHdyYXBIVE1MRW1iZWRFbGVtZW50KFdlYkNvcmU6OkhUTUxFbWJl
ZEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
RW1iZWRFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxFbWJlZEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3ODNlYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdP
YmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmFs
aWRpdHlTdGF0ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
RmllbGRTZXRFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9GSUVM
RF9TRVRfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30K
KworV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRmllbGRT
ZXRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHdy
YXBIVE1MRmllbGRTZXRFbGVtZW50KFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGNvcmVP
YmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9N
X0hUTUxfRklFTERfU0VUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1M
X0ZJRUxEX1NFVF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAg
aWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1M
RmllbGRTZXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZp
ZWxkU2V0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlw
dGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1M
RmllbGRTZXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZp
ZWxkU2V0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlm
YWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9maWVs
ZF9zZXRfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5l
cjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2Zp
ZWxkX3NldF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQ
RV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCwgd2Via2l0X2RvbV9odG1s
X2ZpZWxkX3NldF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExF
TUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0RJU0FC
TEVELAorICAgIFBST1BfRk9STSwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9UWVBFLAorICAg
IFBST1BfRUxFTUVOVFMsCisgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgIFBST1BfVkFMSURJ
VFksCisgICAgUFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCit9OworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZiA9IFdFQktJVF9E
T01fSFRNTF9GSUVMRF9TRVRfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0
eUlkKSB7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
ZmllbGRfc2V0X2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4o
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZJRUxE
X1NFVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBj
YXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZGlzYWJsZWQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Zvcm0oc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dl
dF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRf
ZWxlbWVudF9nZXRfc2V0X3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfRUxFTUVOVFM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9lbGVtZW50cyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9XSUxMX1ZBTElEQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3dpbGxf
dmFsaWRhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURJVFk6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZpZWxk
X3NldF9lbGVtZW50X2dldF92YWxpZGl0eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9WQUxJREFUSU9OX01FU1NBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9t
ZXNzYWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9maWVsZF9zZXRfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZmllbGRf
c2V0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJU0FCTEVELAor
ICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkaXNhYmxlZCIsCisg
ICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRmllbGRTZXRFbGVtZW50OmRpc2FibGVkIiwKKyAgICAg
ICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0ZPUk0sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAg
ICAgICAgICAiZm9ybSIsCisgICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudDpmb3JtIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1MRmll
bGRTZXRFbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9S
TV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJuYW1lIiwKKyAgICAgICAgICAgICJIVE1MRmllbGRTZXRFbGVtZW50Om5hbWUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGaWVsZFNldEVsZW1lbnQ6bmFtZSIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNldEVsZW1lbnQ6dHlwZSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MRmllbGRTZXRFbGVtZW50OnR5cGUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9FTEVNRU5UUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJlbGVtZW50cyIsCisgICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxl
bWVudDplbGVtZW50cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xs
ZWN0aW9uKiBIVE1MRmllbGRTZXRFbGVtZW50OmVsZW1lbnRzIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAg
ICAgICJIVE1MRmllbGRTZXRFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnYm9vbGVhbiBIVE1MRmllbGRTZXRFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9WQUxJRElUWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJ2YWxpZGl0eSIsCisgICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVu
dDp2YWxpZGl0eSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVZhbGlkaXR5U3Rh
dGUqIEhUTUxGaWVsZFNldEVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgV0VCS0lUX0RP
TV9UWVBFX1ZBTElESVRZX1NUQVRFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAg
ICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTEZpZWxkU2V0RWxlbWVudDp2YWxpZGF0aW9uLW1l
c3NhZ2UiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnRfaW5pdChXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVO
VVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZpZWxk
X3NldF9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVO
VChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hlY2tW
YWxpZGl0eSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2ZpZWxkX3NldF9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEZpZWxk
U2V0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChlcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFcnJvciA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChlcnJvcik7CisgICAgaXRlbS0+c2V0Q3VzdG9tVmFsaWRpdHkoY29udmVy
dGVkRXJyb3IpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cik7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6ZGlzYWJsZWRBdHRyLCB2YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9mb3JtKFdlYktpdERP
TUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9GSUVMRF9TRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZpZWxk
U2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9y
bSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0
RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRmll
bGRTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3NldF90eXBlKFdlYktpdERPTUhUTUxGaWVsZFNldEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERP
TUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Vs
ZW1lbnRzKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5lbGVtZW50c0Zvck5hdGl2ZUJpbmRpbmdzKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxGaWVs
ZFNldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GSUVM
RF9TRVRfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+d2lsbFZhbGlkYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZSogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF92YWxp
ZGl0eShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT52YWxpZGl0eSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRf
Z2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VUX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+dmFsaWRhdGlvbk1lc3NhZ2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWNmMWZmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50LmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9N
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8
d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlm
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudF9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxGaWVsZFNldEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfRklFTERfU0VUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2Rv
bV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9GSUVMRF9TRVRfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9G
SUVMRF9TRVRfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTEZpZWxkU2V0RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
RklFTERfU0VUX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRklFTERfU0VUX0VMRU1FTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRklFTERf
U0VUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRklFTERfU0VUX0VMRU1FTlRf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRklFTERfU0VUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGaWVsZFNldEVs
ZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rv
bV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZm9ybToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MRmllbGRTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Zv
cm0oV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxl
bWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTVlYjM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50UHJpdmF0ZS5oCkBA
IC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGaWVs
ZFNldEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEZpZWxkU2V0
RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxGaWVsZFNldEVs
ZW1lbnQqIHdyYXBIVE1MRmllbGRTZXRFbGVtZW50KFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1l
bnQqKTsKK1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRmll
bGRTZXRFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBjb3JlKFdlYktp
dERPTUhUTUxGaWVsZFNldEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0
RWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5
ZjJjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFVuc3RhYmxl
LmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMt
dW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9m
aWVsZF9zZXRfZWxlbWVudF9jaGVja192YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21f
aHRtbF9maWVsZF9zZXRfZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MRmllbGRT
ZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2Vs
ZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50CisgKiBAZXJyb3I6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxl
bWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxk
X3NldF9lbGVtZW50X2dldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9m
aWVsZF9zZXRfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X3Nl
dF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfZGlz
YWJsZWQoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0
RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2ZpZWxkX3NldF9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxG
aWVsZFNldEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9l
bGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVt
ZW50X2dldF9zZXRfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRmllbGRTZXRFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnRfZ2V0X3NldF90eXBlKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZWxlbWVudHM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
Cit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2VsZW1lbnRzKFdlYktpdERP
TUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9m
aWVsZF9zZXRfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRmllbGRTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01IVE1M
RmllbGRTZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRf
c2V0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVs
ZFNldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TVZhbGlkaXR5U3RhdGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSoKK3dlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxl
bWVudF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF92YWxpZGF0aW9u
X21lc3NhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF92
YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZik7CisK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRVbnN0YWJsZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzYTA0MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50LmNwcApAQCAtMCwwICsxLDI0NCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxGb250RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9D
U1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJH
T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxGb250RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TUhUTUxGb250RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCogb2JqKQorewor
ICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRk9OVF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIGNv
cmUoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEZvbnRF
bGVtZW50KiB3cmFwSFRNTEZvbnRFbGVtZW50KFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fSFRNTF9GT05UX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0ZP
TlRfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9m
b250X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpF
dmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0
Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9m
b250X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9mb250X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6
R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdl
dElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9t
X2h0bWxfZm9udF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRf
bGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5l
cjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2Zv
bnRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYktpdERPTUhUTUxGb250RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxl
bWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNF
KFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DT0xPUiwKKyAgICBQUk9QX0ZB
Q0UsCisgICAgUFJPUF9TSVpFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Zv
bnRfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01IVE1MRm9udEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRk9OVF9FTEVNRU5UKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09MT1I6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X2NvbG9yKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RkFDRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfZmFjZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NJWkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X3NpemUo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTUhUTUxGb250RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRN
TF9GT05UX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9DT0xPUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfY29sb3Ioc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRkFDRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfZmFjZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9zaXplKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfY2xh
c3NfaW5pdChXZWJLaXRET01IVE1MRm9udEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9m
b250X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiY29sb3IiLAorICAgICAgICAgICAgIkhUTUxGb250RWxlbWVudDpjb2xvciIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZvbnRFbGVtZW50OmNvbG9yIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0ZBQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiZmFjZSIsCisgICAgICAgICAgICAiSFRNTEZvbnRFbGVtZW50OmZhY2UiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb250RWxlbWVudDpmYWNlIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1NJWkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
c2l6ZSIsCisgICAgICAgICAgICAiSFRNTEZvbnRFbGVtZW50OnNpemUiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb250RWxlbWVudDpzaXplIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MRm9udEVs
ZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfY29sb3IoV2ViS2l0RE9NSFRNTEZv
bnRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmNvbG9yQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfY29sb3IoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZP
TlRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTEZvbnRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y29sb3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9mYWNlKFdlYktpdERPTUhUTUxGb250RWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPTlRfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmYWNlQXR0
cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZvbnRf
ZWxlbWVudF9zZXRfZmFjZShXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9u
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmYWNl
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZvbnRf
ZWxlbWVudF9nZXRfc2l6ZShXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxGb250RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2l6ZUF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X3Np
emUoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPTlRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2l6ZUF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEZvbnRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkw
ODdlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50LmgKQEAgLTAsMCAr
MSwxMDggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxGb250RWxlbWVudF9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxGb250RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9GT05UX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9o
dG1sX2ZvbnRfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRk9O
VF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPTlRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZvbnRF
bGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9GT05UX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGb250RWxlbWVudENsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPTlRfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
Rk9OVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxFTUVOVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9GT05UX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGb250RWxlbWVudENsYXNzKSkK
Kworc3RydWN0IF9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxF
bGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZvbnRF
bGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dl
dF9jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9udEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2ZvbnRfZWxlbWVudF9nZXRfY29sb3IoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9jb2xvcjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MRm9udEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRf
Y29sb3IoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2ZhY2U6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRf
Z2V0X2ZhY2UoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9mYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxGb250RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9mYWNlKFdlYktpdERPTUhU
TUxGb250RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxGb250RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9zaXplKFdlYktpdERP
TUhUTUxGb250RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZvbnRf
ZWxlbWVudF9zZXRfc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9udEVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MRm9udEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1l
bnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk1YWZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRm9udEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MRm9udEVsZW1lbnRQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxGb250RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MRm9udEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1M
Rm9udEVsZW1lbnQqIHdyYXBIVE1MRm9udEVsZW1lbnQoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50
Kik7CitXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRm9udEVsZW1l
bnQqKTsKK1dlYkNvcmU6OkhUTUxGb250RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRm9udEVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TEZvbnRFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDI0MmMwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50LmNwcApAQCAtMCwwICsxLDYzOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xsZWN0
aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBvYmop
Cit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9GT1JNX0VMRU1FTlQoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqPihXRUJLSVRf
RE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQqIHdyYXBIVE1MRm9ybUVsZW1lbnQoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hU
TUxfRk9STV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29y
ZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50
VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9l
dmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQ
RV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfZm9y
bV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRF
UkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FDQ0VQVF9DSEFSU0VU
LAorICAgIFBST1BfQUNUSU9OLAorICAgIFBST1BfQVVUT0NPTVBMRVRFLAorICAgIFBST1BfRU5D
VFlQRSwKKyAgICBQUk9QX0VOQ09ESU5HLAorICAgIFBST1BfTUVUSE9ELAorICAgIFBST1BfTkFN
RSwKKyAgICBQUk9QX05PX1ZBTElEQVRFLAorICAgIFBST1BfVEFSR0VULAorICAgIFBST1BfRUxF
TUVOVFMsCisgICAgUFJPUF9MRU5HVEgsCisgICAgUFJPUF9BVVRPQ09SUkVDVCwKKyAgICBQUk9Q
X0FVVE9DQVBJVEFMSVpFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRk9STV9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUNDRVBUX0NI
QVJTRVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2FjY2VwdF9j
aGFyc2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQUNUSU9OOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X3NldF9hY3Rpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09NUExFVEU6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOQ1RZUEU6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2VuY3R5cGUoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkNP
RElORzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jb2Rpbmco
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NRVRIT0Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0
X21ldGhvZChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1l
bnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9OT19WQUxJREFURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2Zvcm1fZWxlbWVudF9zZXRfbm9fdmFsaWRhdGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF90YXJnZXQoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09SUkVD
VDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYXV0b2NvcnJlY3Qo
c2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQVVUT0NBUElUQUxJWkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2Vs
ZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVu
dF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRk9STV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUNDRVBUX0NIQVJTRVQ6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1l
bnRfZ2V0X2FjY2VwdF9jaGFyc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0FDVElPTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWN0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0FVVE9DT01QTEVURToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOQ1RZUEU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2Vu
Y3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRU5DT0RJTkc6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2Vs
ZW1lbnRfZ2V0X2VuY29kaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X01FVEhPRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9nZXRfbWV0aG9kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTk9fVkFMSURBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X25vX3ZhbGlkYXRlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfdGFy
Z2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VMRU1FTlRTOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1l
bnRfZ2V0X2VsZW1lbnRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xF
TkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0FVVE9DT1JSRUNUOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY29ycmVjdChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ0FQSVRBTElaRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYXV0b2Nh
cGl0YWxpemUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BQ0NFUFRfQ0hBUlNFVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhY2NlcHQtY2hhcnNldCIsCisgICAgICAg
ICAgICAiSFRNTEZvcm1FbGVtZW50OmFjY2VwdC1jaGFyc2V0IiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MRm9ybUVsZW1lbnQ6YWNjZXB0LWNoYXJzZXQiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQUNUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgImFjdGlvbiIsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50OmFjdGlvbiIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZvcm1FbGVtZW50OmFjdGlvbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9BVVRPQ09NUExFVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiYXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVsZW1l
bnQ6YXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRm9y
bUVsZW1lbnQ6YXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VOQ1RZUEUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZW5jdHlwZSIsCisgICAgICAg
ICAgICAiSFRNTEZvcm1FbGVtZW50OmVuY3R5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxGb3JtRWxlbWVudDplbmN0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VOQ09E
SU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImVuY29kaW5n
IiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQ6ZW5jb2RpbmciLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb3JtRWxlbWVudDplbmNvZGluZyIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9NRVRIT0QsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAibWV0aG9kIiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQ6bWV0aG9kIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRm9ybUVsZW1lbnQ6bWV0aG9kIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50Om5hbWUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb3JtRWxlbWVudDpuYW1lIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX05PX1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJuby12YWxpZGF0ZSIsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50Om5v
LXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxGb3JtRWxl
bWVudDpuby12YWxpZGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UQVJHRVQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGFyZ2V0IiwKKyAgICAgICAgICAg
ICJIVE1MRm9ybUVsZW1lbnQ6dGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MRm9ybUVsZW1lbnQ6dGFyZ2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VMRU1FTlRTLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImVsZW1lbnRzIiwKKyAg
ICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQ6ZWxlbWVudHMiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogSFRNTEZvcm1FbGVtZW50OmVsZW1lbnRzIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAg
ICAgICAiSFRNTEZvcm1FbGVtZW50Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGds
b25nIEhUTUxGb3JtRWxlbWVudDpsZW5ndGgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01B
WExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9BVVRPQ09SUkVDVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisg
ICAgICAgICAgICAiYXV0b2NvcnJlY3QiLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDph
dXRvY29ycmVjdCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRm9ybUVs
ZW1lbnQ6YXV0b2NvcnJlY3QiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0NBUElUQUxJWkUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYXV0b2NhcGl0YWxp
emUiLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDphdXRvY2FwaXRhbGl6ZSIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZvcm1FbGVtZW50OmF1dG9jYXBpdGFsaXpl
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfaW5pdChX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJl
cXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc3VibWl0KFdl
YktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c3VibWl0KCk7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9yZXNldChXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPnJlc2V0KCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9m
b3JtX2VsZW1lbnRfY2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNoZWNrVmFsaWRpdHkoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
cmVxdWVzdF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKQorewor
I2lmIEVOQUJMRShSRVFVRVNUX0FVVE9DT01QTEVURSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVxdWVzdEF1dG9jb21wbGV0ZSgp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiUmVxdWVzdCBBdXRvY29tcGxldGUiKQorI2VuZGlmIC8qIEVOQUJMRShS
RVFVRVNUX0FVVE9DT01QTEVURSkgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfZ2V0X2FjY2VwdF9jaGFyc2V0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphY2NlcHRfY2hh
cnNldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfc2V0X2FjY2VwdF9jaGFyc2V0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9GT1JNX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmFjY2VwdF9jaGFyc2V0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWN0aW9uKFdlYktpdERPTUhU
TUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZP
Uk1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfc2V0X2FjdGlvbihXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjph
Y3Rpb25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X2dldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXV0
b2NvbXBsZXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9GT1JNX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXV0b2NvbXBsZXRlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VuY3R5cGUoV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9S
TV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+ZW5jdHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2VuY3R5cGUoV2ViS2l0RE9NSFRNTEZvcm1F
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRFbmN0eXBlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VuY29kaW5nKFdlYktpdERPTUhU
TUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZP
Uk1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmVuY3R5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9lbmNvZGluZyhXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEVuY3R5cGUoY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfbWV0aG9kKFdlYktpdERPTUhU
TUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZP
Uk1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPm1ldGhvZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X21ldGhvZChXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldE1ldGhvZChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxGb3Jt
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxGb3Jt
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X25vX3ZhbGlkYXRlKFdlYktpdERP
TUhUTUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0ZPUk1fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
bm92YWxpZGF0ZUF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
Rk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6Om5vdmFsaWRhdGVBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRh
cmdldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfc2V0X3RhcmdldChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjp0YXJnZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xs
ZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbGVtZW50cyhXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5lbGVtZW50c0Zvck5hdGl2
ZUJpbmRpbmdzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfbGVuZ3RoKFdl
YktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
Pmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogc2VsZikKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTEla
RSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5hdXRvY29ycmVjdCgpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFs
aXplIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVO
QUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxG
b3JtRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKElPU19BVVRP
Q09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZP
Uk1fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEF1dG9jb3JyZWN0KHZhbHVlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFuZCBB
dXRvY2FwaXRhbGl6ZSIpCisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVU
T0NBUElUQUxJWkUpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2dldF9hdXRvY2FwaXRhbGl6ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7Cisj
aWYgRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdXRvY2FwaXRhbGl6ZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFuZCBBdXRvY2Fw
aXRhbGl6ZSIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09SUkVD
VF9BTkRfQVVUT0NBUElUQUxJWkUpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRf
QVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdXRvY2FwaXRhbGl6ZShjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0YWxpemUiKQorI2Vu
ZGlmIC8qIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQzNDQyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuaApAQCAtMCwwICsxLDIxNCBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0ZPUk1fRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GT1JNX0VMRU1FTlQob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULCBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfRk9STV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9GT1JNX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRk9STV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZP
Uk1fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTUhUTUxGb3JtRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnRDbGFzcyB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF90eXBlKHZvaWQp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc3VibWl0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3N1Ym1pdChXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfcmVz
ZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfcmVzZXQoV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X2dldF9hY2NlcHRfY2hhcnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWNjZXB0X2NoYXJzZXQoV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9y
bV9lbGVtZW50X3NldF9hY2NlcHRfY2hhcnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYWNjZXB0X2NoYXJzZXQoV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2FjdGlvbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWN0aW9u
KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9zZXRfYWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxG
b3JtRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hY3Rpb24oV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VuY3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VuY3R5cGUoV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9y
bV9lbGVtZW50X3NldF9lbmN0eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9lbmN0eXBlKFdlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X2dldF9lbmNvZGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jb2RpbmcoV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X3NldF9lbmNvZGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jb2RpbmcoV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfZ2V0X21ldGhvZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfbWV0aG9kKFdlYktpdERPTUhUTUxG
b3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVu
dF9zZXRfbWV0aG9kOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X3NldF9tZXRob2QoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2Vs
ZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9uYW1lOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X3NldF9uYW1lKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF90YXJnZXQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2Vs
ZW1lbnRfZ2V0X3RhcmdldChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X3RhcmdldDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfdGFyZ2V0
KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbGVtZW50czoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9l
bGVtZW50cyhXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRf
QVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9sZW5ndGgoV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdl
YktpdERPTUhUTUxGb3JtRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxl
bWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MjljZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUhUTUxGb3JtRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhU
TUxGb3JtRWxlbWVudCogd3JhcEhUTUxGb3JtRWxlbWVudChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQqKTsKK1dlYktpdERPTUhUTUxGb3JtRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudCopOworV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxGb3Jt
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2Q2MjRlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudFVu
c3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50VW5zdGFibGVfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9jaGVja192YWxpZGl0eToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
cmVxdWVzdF9hdXRvY29tcGxldGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfcmVxdWVzdF9hdXRvY29tcGxldGUoV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X2dldF9hdXRvY29tcGxldGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1F
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2dldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hdXRvY29tcGxldGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9nZXRfbm9fdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfZ2V0X25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfbm9fdmFs
aWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X25vX3ZhbGlkYXRlKFdlYktp
dERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY29ycmVjdChXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
c2V0X2F1dG9jb3JyZWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAor
ICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hdXRvY29y
cmVjdChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY2FwaXRhbGl6ZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9jYXBpdGFsaXplKFdlYktp
dERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
c2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50VW5z
dGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEZyYW1lRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzI2YWQxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5jcHAKQEAg
LTAsMCArMSw1MTYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50LmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTURPTVdpbmRvd1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Eb2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERP
TUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRv
VVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJL
SVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+
KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogY29yZShXZWJLaXRET01I
VE1MRnJhbWVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHdy
YXBIVE1MRnJhbWVFbGVtZW50KFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
RlJBTUVfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfRUxF
TUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hF
dmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9mcmFt
ZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VD
YXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2
ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZ
UEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9J
TlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0ZSQU1FX0JPUkRF
UiwKKyAgICBQUk9QX0xPTkdfREVTQywKKyAgICBQUk9QX01BUkdJTl9IRUlHSFQsCisgICAgUFJP
UF9NQVJHSU5fV0lEVEgsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfTk9fUkVTSVpFLAorICAg
IFBST1BfU0NST0xMSU5HLAorICAgIFBST1BfU1JDLAorICAgIFBST1BfQ09OVEVOVF9ET0NVTUVO
VCwKKyAgICBQUk9QX0NPTlRFTlRfV0lORE9XLAorICAgIFBST1BfV0lEVEgsCisgICAgUFJPUF9I
RUlHSFQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9z
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRnJhbWVF
bGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9GUkFNRV9CT1JERVI6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9mcmFtZV9ib3JkZXIoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9MT05HX0RFU0M6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3Nl
dF9sb25nX2Rlc2Moc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9NQVJHSU5fSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX2hlaWdodChzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BUkdJTl9XSURUSDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl93aWR0aChz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9u
YW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfTk9fUkVTSVpFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxl
bWVudF9zZXRfbm9fcmVzaXplKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTElORzoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X3Njcm9sbGluZyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X3NyYyhzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9mcmFtZV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVChv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0ZSQU1F
X0JPUkRFUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9MT05HX0RFU0M6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2Moc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFSR0lOX0hFSUdIVDoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRf
Z2V0X21hcmdpbl9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TUFSR0lOX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX3dpZHRoKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05PX1JFU0laRToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X25vX3Jl
c2l6ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExJTkc6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X2dldF9zY3JvbGxpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU1JDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9nZXRfc3JjKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0NPTlRFTlRfRE9DVU1FTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09OVEVOVF9XSU5ET1c6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1l
bnRfZ2V0X2NvbnRlbnRfd2luZG93KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2NsYXNzX2luaXQoV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1l
bnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0ZSQU1FX0JPUkRFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJmcmFtZS1ib3JkZXIiLAorICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQ6ZnJhbWUtYm9y
ZGVyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRnJhbWVFbGVtZW50OmZy
YW1lLWJvcmRlciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MT05HX0RFU0MsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibG9uZy1kZXNjIiwKKyAgICAgICAgICAgICJI
VE1MRnJhbWVFbGVtZW50OmxvbmctZGVzYyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEZyYW1lRWxlbWVudDpsb25nLWRlc2MiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUFSR0lO
X0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJtYXJn
aW4taGVpZ2h0IiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVtZW50Om1hcmdpbi1oZWlnaHQi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGcmFtZUVsZW1lbnQ6bWFyZ2lu
LWhlaWdodCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NQVJHSU5fV0lEVEgsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWFyZ2luLXdpZHRoIiwKKyAgICAgICAgICAg
ICJIVE1MRnJhbWVFbGVtZW50Om1hcmdpbi13aWR0aCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTEZyYW1lRWxlbWVudDptYXJnaW4td2lkdGgiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1l
IiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxGcmFtZUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9OT19SRVNJWkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAg
Im5vLXJlc2l6ZSIsCisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVudDpuby1yZXNpemUiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEZyYW1lRWxlbWVudDpuby1yZXNp
emUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NST0xMSU5HLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgInNjcm9sbGluZyIsCisgICAgICAgICAgICAiSFRNTEZy
YW1lRWxlbWVudDpzY3JvbGxpbmciLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxGcmFtZUVsZW1lbnQ6c2Nyb2xsaW5nIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NSQywKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzcmMiLAorICAgICAgICAgICAg
IkhUTUxGcmFtZUVsZW1lbnQ6c3JjIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MRnJhbWVFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05URU5UX0RPQ1VNRU5U
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRlbnQtZG9j
dW1lbnQiLAorICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQ6Y29udGVudC1kb2N1bWVudCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURvY3VtZW50KiBIVE1MRnJhbWVFbGVt
ZW50OmNvbnRlbnQtZG9jdW1lbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VN
RU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ09OVEVOVF9XSU5ET1csCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAg
ICAgICAgICAiY29udGVudC13aW5kb3ciLAorICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQ6
Y29udGVudC13aW5kb3ciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01XaW5k
b3cqIEhUTUxGcmFtZUVsZW1lbnQ6Y29udGVudC13aW5kb3ciLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
CisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQ6d2lk
dGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MRnJhbWVFbGVtZW50OndpZHRo
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEVJR0hULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAg
IkhUTUxGcmFtZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcg
SFRNTEZyYW1lRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxG
cmFtZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcihX
ZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1l
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6ZnJhbWVib3JkZXJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfZnJhbWVfYm9y
ZGVyKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZyYW1lYm9yZGVyQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2Vs
ZW1lbnRfZ2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bG9uZ2Rlc2NBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxl
bWVudF9zZXRfbG9uZ19kZXNjKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmxvbmdkZXNjQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl9oZWlnaHQoV2ViS2l0RE9NSFRNTEZyYW1lRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
Om1hcmdpbmhlaWdodEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9tYXJnaW5faGVpZ2h0KFdlYktpdERPTUhUTUxG
cmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1hcmdpbmhlaWdodEF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9tYXJnaW5f
d2lkdGgoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1hcmdpbndpZHRoQXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X21h
cmdpbl93aWR0aChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptYXJnaW53
aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVB
dHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1F
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbm9fcmVzaXplKFdlYktpdERPTUhUTUxGcmFtZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVN
RU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bm9yZXNpemVB
dHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFt
ZV9lbGVtZW50X3NldF9ub19yZXNpemUoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6Om5vcmVzaXplQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X3Njcm9sbGluZyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2Nyb2xs
aW5nQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfc2V0X3Njcm9sbGluZyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZS
QU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpzY3JvbGxpbmdBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxGcmFtZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X3NldF9zcmMoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01Eb2N1bWVudCogd2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9NSFRNTEZyYW1lRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVudERvY3VtZW50KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NV2luZG93
KiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93aW5kb3coV2ViS2l0
RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdp
bmRvdz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRlbnRXaW5kb3coKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnbG9u
ZyB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEZy
YW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1F
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+d2lkdGgoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxl
bWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdsb25nIHJlc3VsdCA9IGl0ZW0tPmhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVt
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwMmRjNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5oCkBAIC0wLDAgKzEsMjM0IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01f
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3
ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTEZyYW1lRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9GUkFNRV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9mcmFt
ZV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GUkFNRV9FTEVN
RU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGcmFtZUVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9GUkFNRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX0VMRU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9GUkFNRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VMRU1FTlRf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRlJBTUVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudENs
YXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50IHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxGcmFtZUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9nZXRfZnJhbWVfYm9yZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFt
ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcihXZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJh
bWVfZWxlbWVudF9zZXRfZnJhbWVfYm9yZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxG
cmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X2ZyYW1lX2JvcmRlcihXZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2M6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRf
bG9uZ19kZXNjKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9sb25nX2Rlc2M6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19k
ZXNjKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl9oZWln
aHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJh
bWVfZWxlbWVudF9nZXRfbWFyZ2luX2hlaWdodChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2lu
X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50X3NldF9tYXJnaW5faGVpZ2h0KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zy
YW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9tYXJnaW5fd2lkdGgoV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9tYXJnaW5fd2lkdGgoV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9u
YW1lKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRN
TEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbm9fcmVzaXplOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRf
bm9fcmVzaXplKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9ub19yZXNpemU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbm9f
cmVzaXplKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xsaW5nOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2Vs
ZW1lbnRfZ2V0X3Njcm9sbGluZyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfc2Nyb2xsaW5nOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRf
c2V0X3Njcm9sbGluZyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9z
cmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJh
bWVfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9zcmM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfc3Jj
KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1l
bnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01Eb2N1bWVudCoKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9j
b250ZW50X2RvY3VtZW50KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVu
dF93aW5kb3coV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJL
SVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfd2lkdGgoV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJh
bWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1M
RnJhbWVFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERP
TUhUTUxGcmFtZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTgyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxGcmFtZUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTEZyYW1lRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MRnJhbWVFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
SFRNTEZyYW1lRWxlbWVudCogd3JhcEhUTUxGcmFtZUVsZW1lbnQoV2ViQ29yZTo6SFRNTEZyYW1l
RWxlbWVudCopOworV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxG
cmFtZUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9N
SFRNTEZyYW1lRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBX
ZWJLaXRET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxGcmFtZVNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWE3MWU2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09i
amVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NSFRNTEZyYW1lU2V0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQq
IG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKGtp
dChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1M
RnJhbWVTZXRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRnJh
bWVTZXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogd3JhcEhUTUxGcmFtZVNldEVs
ZW1lbnQoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9GUkFNRV9TRVRf
RUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfU0VUX0VMRU1F
TlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0
X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2Vi
S2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVu
dCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2ZyYW1lX3NldF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZh
Y2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJL
aXRET01IVE1MRnJhbWVTZXRFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1l
bnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ09MUywKKyAgICBQUk9QX1JPV1Ms
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEZyYW1lU2V0
RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9GUkFNRV9TRVRfRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NPTFM6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfY29scyhzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JP
V1M6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfcm93cyhz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09MUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2dldF9jb2xzKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JPV1M6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRf
cm93cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
ZnJhbWVfc2V0X2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X3Byb3BlcnR5Owor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2ZyYW1lX3Nl
dF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT0xTLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvbHMiLAorICAgICAgICAgICAg
IkhUTUxGcmFtZVNldEVsZW1lbnQ6Y29scyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEZyYW1lU2V0RWxlbWVudDpjb2xzIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JPV1MsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicm93cyIsCisgICAgICAg
ICAgICAiSFRNTEZyYW1lU2V0RWxlbWVudDpyb3dzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MRnJhbWVTZXRFbGVtZW50OnJvd3MiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEZyYW1lU2V0
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X2NvbHMoV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0ZSQU1FX1NFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2xzQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9jb2xzKFdlYktp
dERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2xzQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVt
ZW50X2dldF9yb3dzKFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cm93c0F0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRf
ZWxlbWVudF9zZXRfcm93cyhXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX1NFVF9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRnJhbWVTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6cm93c0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRnJhbWVTZXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTRiNTI2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9t
L3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxG
cmFtZVNldEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2Zy
YW1lX3NldF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GUkFN
RV9TRVRfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GUkFNRV9TRVRf
RUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZy
YW1lU2V0RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfU0VU
X0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfU0VUX0VMRU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlRfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCB7CisgICAgV2ViS2l0
RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01I
VE1MRnJhbWVTZXRFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2Zy
YW1lX3NldF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfY29sczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RnJhbWVTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfY29scyhXZWJL
aXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X2NvbHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEZyYW1lU2V0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X2NvbHMoV2ViS2l0
RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X3Jvd3M6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2Vs
ZW1lbnRfZ2V0X3Jvd3MoV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9yb3dzOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVt
ZW50X3NldF9yb3dzKFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRnJh
bWVTZXRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGMzZjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRnJhbWVTZXRFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVu
dFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50UHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGcmFtZVNldEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHdyYXBIVE1MRnJhbWVTZXRFbGVt
ZW50KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxGcmFtZVNl
dEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50Kik7CitXZWJDb3JlOjpI
VE1MRnJhbWVTZXRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqKTsK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEZyYW1lU2V0
RWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEhSRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjA1OGNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5jcHAKQEAg
LTAsMCArMSwyNzggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSFJFbGVtZW50LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEhSRWxlbWVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTUhUTUxIUkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBv
YmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9IUl9FTEVNRU5UKGtpdChzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MSFJFbGVtZW50
KiBjb3JlKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSFJFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEhSRWxl
bWVudCogd3JhcEhUTUxIUkVsZW1lbnQoV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRN
TF9IUl9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9IUl9FTEVNRU5U
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZl
bnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2
ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSFJFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTEhSRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxIUkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUp
Cit7CisgICAgV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNl
LT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2Rpc3BhdGNoX2V2
ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfaHJf
ZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsK
K30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCwgd2Vi
a2l0X2RvbV9odG1sX2hyX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
QUxJR04sCisgICAgUFJPUF9OT19TSEFERSwKKyAgICBQUk9QX1NJWkUsCisgICAgUFJPUF9XSURU
SCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0hUTUxfSFJfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfaHJfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT19TSEFERToKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X25vX3NoYWRlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xl
YW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9zaXplKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9ocl9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxIUkVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSFJfRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVu
dF9nZXRfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9fU0hB
REU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9o
cl9lbGVtZW50X2dldF9ub19zaGFkZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9TSVpFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfaHJfZWxlbWVudF9nZXRfc2l6ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9N
SFRNTEhSRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RD
bGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2hy
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAg
ICJIVE1MSFJFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MSFJFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PX1NIQURFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJuby1zaGFkZSIsCisgICAgICAg
ICAgICAiSFRNTEhSRWxlbWVudDpuby1zaGFkZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Ym9vbGVhbiBIVE1MSFJFbGVtZW50Om5vLXNoYWRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NJ
WkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2l6ZSIsCisg
ICAgICAgICAgICAiSFRNTEhSRWxlbWVudDpzaXplIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MSFJFbGVtZW50OnNpemUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAg
ICAgICAgIkhUTUxIUkVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxIUkVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX2hyX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MSFJFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9o
cl9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfYWxpZ24o
V2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF9ub19zaGFkZShX
ZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSFJfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
Om5vc2hhZGVBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9ocl9lbGVtZW50X3NldF9ub19zaGFkZShXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6bm9zaGFkZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9ocl9l
bGVtZW50X2dldF9zaXplKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSFJFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzaXplQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3NpemUoV2ViS2l0
RE9NSFRNTEhSRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2l6ZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1M
SFJFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
d2lkdGhBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfaHJfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
SFJFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lk
dGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxl
bWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYmIxN2UwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5o
CkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VC
S0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRl
ZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MSFJFbGVtZW50X2gK
KyNkZWZpbmUgV2ViS2l0RE9NSFRNTEhSRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IUl9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9k
b21faHRtbF9ocl9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9I
Ul9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0hSX0VMRU1FTlQsIFdlYktpdERPTUhUTUxIUkVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSFJfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9I
Ul9FTEVNRU5ULCBXZWJLaXRET01IVE1MSFJFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfSFRNTF9IUl9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0hSX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IUl9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFJfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTEhSRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1M
SFJFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxIUkVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEhSRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRN
TEhSRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRf
c2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxIUkVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2hy
X2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X25v
X3NoYWRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxIUkVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0
bWxfaHJfZWxlbWVudF9nZXRfbm9fc2hhZGUoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X25vX3NoYWRlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxIUkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4K
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0
X25vX3NoYWRlKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfc2l6ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSFJFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF9zaXpl
KFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9ocl9lbGVtZW50X3NldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxIUkVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3NpemUoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxl
bWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEhSRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfaHJfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3dpZHRoOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxIUkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3dpZHRo
KFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSFJFbGVtZW50X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudFBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzVkZTExCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TEhSRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSFJFbGVtZW50UHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxIUkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTUhUTUxIUkVsZW1lbnQqIHdyYXBIVE1MSFJFbGVtZW50KFdlYkNvcmU6OkhUTUxIUkVs
ZW1lbnQqKTsKK1dlYktpdERPTUhUTUxIUkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSFJFbGVt
ZW50Kik7CitXZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxIUkVsZW1l
bnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEhS
RWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MSGVhZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQzYmQxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudC5j
cHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSGVhZEVsZW1lbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
SGVhZEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxF
TUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29y
ZTo6SFRNTEhlYWRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIZWFk
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTUhUTUxIZWFkRWxlbWVudCogd3JhcEhUTUxIZWFkRWxlbWVudChXZWJDb3Jl
OjpIVE1MSGVhZEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJy
b3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVu
dCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJD
b3JlOjpIVE1MSGVhZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MSGVhZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3Jp
cHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxIZWFk
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIZWFkRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkhUTUxIZWFkRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxIZWFkRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2hlYWRfZWxl
bWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5l
ciA9IHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOwor
fQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQsIHdl
YmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfUFJPRklMRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1l
bnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEhl
YWRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxFTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1BST0ZJTEU6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfc2V0X3Byb2ZpbGUoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdERPTUhUTUxIZWFkRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9IRUFEX0VMRU1F
TlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9Q
Uk9GSUxFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfaGVhZF9lbGVtZW50X2dldF9wcm9maWxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01I
VE1MSGVhZEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X2hlYWRfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUFJPRklMRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwcm9maWxlIiwKKyAg
ICAgICAgICAgICJIVE1MSGVhZEVsZW1lbnQ6cHJvZmlsZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTEhlYWRFbGVtZW50OnByb2ZpbGUiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxIZWFkRWxlbWVu
dCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dldF9wcm9maWxlKFdlYktpdERPTUhUTUxIZWFk
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
Ojpwcm9maWxlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2hlYWRfZWxlbWVudF9zZXRfcHJvZmlsZShXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SEVBRF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpwcm9maWxlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxIZWFkRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdmMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MSGVhZEVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0
ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRET01IVE1MSGVhZEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnRf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRF9F
TEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxFTUVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9I
RUFEX0VMRU1FTlQsIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9IRUFEX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRF9FTEVNRU5ULCBXZWJLaXRE
T01IVE1MSGVhZEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0hFQURf
RUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0hUTUxfSEVBRF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURfRUxFTUVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9IRUFEX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRF9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MSGVhZEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEhl
YWRFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxIZWFkRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9nZXRfcHJvZmlsZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSGVhZEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9nZXRfcHJvZmls
ZShXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9oZWFkX2VsZW1lbnRfc2V0X3Byb2ZpbGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEhlYWRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfc2V0X3Byb2ZpbGUoV2ViS2l0RE9NSFRN
TEhlYWRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEhlYWRFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnRQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyMmY1NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEhl
YWRFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSGVhZEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiB3cmFwSFRNTEhlYWRFbGVtZW50KFdlYkNvcmU6
OkhUTUxIZWFkRWxlbWVudCopOworV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTEhlYWRFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTEhlYWRFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MSGVhZGluZ0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMjI0OWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09i
amVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01IVE1MSGVhZGluZ0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqIG9i
aikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0hFQURJTkdfRUxFTUVOVChraXQoc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEhlYWRp
bmdFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCogd3JhcEhUTUxIZWFkaW5nRWxlbWVudChXZWJD
b3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSEVBRElOR19FTEVNRU5UKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFESU5HX0VMRU1FTlQsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVu
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdl
YktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfaGVhZGluZ19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRU
YXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0
X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRk
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9hZGRfZXZl
bnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21faHRtbF9oZWFkaW5nX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQsIHdlYmtpdF9k
b21faHRtbF9oZWFkaW5nX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
QUxJR04sCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50
X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxIZWFk
aW5nRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9IRUFESU5HX0VMRU1FTlQob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9I
RUFESU5HX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9jbGFzc19p
bml0KFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2hl
YWRpbmdfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJhbGlnbiIsCisgICAgICAgICAgICAiSFRNTEhlYWRpbmdFbGVtZW50OmFsaWduIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSGVhZGluZ0VsZW1lbnQ6YWxpZ24i
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9pbml0
KFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50
X2dldF9hbGlnbihXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9IRUFESU5HX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50
X3NldF9hbGlnbihXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRElOR19FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSGVh
ZGluZ0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjph
bGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVh
ZGluZ0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjNjhhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEhlYWRpbmdFbGVtZW50LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZp
bmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5o
PiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9N
SFRNTEhlYWRpbmdFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50
X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURJ
TkdfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9IRUFESU5HX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfSEVBRElOR19FTEVNRU5ULCBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSEVBRElOR19FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hF
QURJTkdfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9IRUFESU5HX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRElOR19F
TEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0hFQURJTkdfRUxFTUVOVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9IRUFESU5HX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSEVBRElO
R19FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURJTkdfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEhl
YWRpbmdFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVu
dCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxIZWFkaW5nRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2dldF9h
bGlnbihXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxIZWFkaW5nRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X3NldF9hbGlnbihX
ZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxIZWFkaW5nRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wZWJlMjRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxIZWFkaW5nRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
SGVhZGluZ0VsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MSGVh
ZGluZ0VsZW1lbnQqIHdyYXBIVE1MSGVhZGluZ0VsZW1lbnQoV2ViQ29yZTo6SFRNTEhlYWRpbmdF
bGVtZW50Kik7CitXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
SGVhZGluZ0VsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MSGVhZGluZ0VsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxIdG1sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY5Yjg3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50LmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxIdG1sRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxIdG1sRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01O
b2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50
VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBr
aXQoV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fSFRNTF9IVE1MX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmop
KSk7Cit9CisKK1dlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSHRt
bEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQqIHdyYXBIVE1MSHRt
bEVsZW1lbnQoV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0hUTUxfRUxFTUVO
VChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFRNTF9FTEVNRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9kaXNwYXRj
aF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZl
bnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBX
ZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3Mo
KmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0
aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9hZGRfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MSHRtbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0
ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxl
bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQorewor
ICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21faHRtbF9odG1sX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1v
dmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3JlbW92ZV9l
dmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRN
TEh0bWxFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VW
RU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAg
IFBST1BfMCwKKyAgICBQUk9QX1ZFUlNJT04sCisgICAgUFJPUF9NQU5JRkVTVCwKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBzZWxmID0gV0VC
S0lUX0RPTV9IVE1MX0hUTUxfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0
eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZFUlNJT046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9o
dG1sX2VsZW1lbnRfc2V0X3ZlcnNpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQU5JRkVTVDoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2h0bWxfZWxlbWVudF9zZXRfbWFuaWZlc3Qoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
aHRtbF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhU
TUxIdG1sRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9IVE1MX0VMRU1FTlQob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9WRVJTSU9OOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaHRtbF9l
bGVtZW50X2dldF92ZXJzaW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X01BTklGRVNUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfaHRtbF9lbGVtZW50X2dldF9tYW5pZmVzdChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0
RE9NSFRNTEh0bWxFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29i
amVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
aHRtbF9odG1sX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZFUlNJ
T04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmVyc2lvbiIs
CisgICAgICAgICAgICAiSFRNTEh0bWxFbGVtZW50OnZlcnNpb24iLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxIdG1sRWxlbWVudDp2ZXJzaW9uIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX01BTklGRVNULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
Im1hbmlmZXN0IiwKKyAgICAgICAgICAgICJIVE1MSHRtbEVsZW1lbnQ6bWFuaWZlc3QiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxIdG1sRWxlbWVudDptYW5pZmVzdCIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2luaXQoV2ViS2l0
RE9NSFRNTEh0bWxFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X3ZlcnNpb24o
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSHRtbEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnZlcnNpb25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3NldF92ZXJzaW9uKFdlYktpdERP
TUhUTUxIdG1sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZlcnNpb25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2dldF9tYW5pZmVzdChX
ZWJLaXRET01IVE1MSHRtbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9IVE1MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxIdG1sRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjptYW5pZmVzdEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9odG1sX2VsZW1lbnRfc2V0X21hbmlmZXN0KFdlYktpdERPTUhUTUxIdG1sRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6Om1hbmlmZXN0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxIdG1sRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDllZDJjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MSHRtbEVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Vi
a2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRET01IVE1MSHRtbEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSHRtbEVsZW1l
bnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFRN
TF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hUTUxfRUxFTUVOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9IVE1MX0VMRU1FTlQsIFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9IVE1MX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFRNTF9FTEVNRU5ULCBXZWJL
aXRET01IVE1MSHRtbEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0hU
TUxfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IVE1MX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0hUTUxfSFRNTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hUTUxfRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9IVE1MX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFRNTF9FTEVNRU5U
LCBXZWJLaXRET01IVE1MSHRtbEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRN
TEh0bWxFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxIdG1sRWxlbWVudENsYXNzIHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfdmVyc2lvbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfdmVy
c2lvbihXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9odG1sX2VsZW1lbnRfc2V0X3ZlcnNpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEh0bWxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfc2V0X3ZlcnNpb24oV2ViS2l0RE9N
SFRNTEh0bWxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEh0bWxFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnRQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhMDkyMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TEh0bWxFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIdG1sRWxlbWVudFBy
aXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSHRtbEVsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiB3cmFwSFRNTEh0bWxFbGVtZW50KFdlYkNv
cmU6OkhUTUxIdG1sRWxlbWVudCopOworV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBraXQoV2Vi
Q29yZTo6SFRNTEh0bWxFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqIGNvcmUo
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxIdG1sRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MSHRtbEVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnRVbnN0
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTg3ODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MSHRtbEVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIdG1sRWxlbWVu
dFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9E
RUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X21hbmlmZXN0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxIdG1sRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfbWFuaWZlc3QoV2ViS2l0RE9N
SFRNTEh0bWxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaHRtbF9l
bGVtZW50X3NldF9tYW5pZmVzdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSHRtbEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9zZXRfbWFuaWZl
c3QoV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkg
Ki8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSHRtbEVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1l
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDFlYzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmNwcApAQCAtMCwwICsxLDYxNyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTURPTVdpbmRvd1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxJRnJhbWVF
bGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudFVuc3RhYmxlLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TElGcmFtZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0lGUkFN
RV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxJRnJhbWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHdyYXBIVE1MSUZyYW1l
RWxlbWVudChXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9JRlJBTUVfRUxF
TUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQsICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZl
bnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2
ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRG
b3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRU
YXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfaWZyYW1lX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklO
RV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCwgd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExF
TUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdO
LAorICAgIFBST1BfRlJBTUVfQk9SREVSLAorICAgIFBST1BfSEVJR0hULAorICAgIFBST1BfTE9O
R19ERVNDLAorICAgIFBST1BfTUFSR0lOX0hFSUdIVCwKKyAgICBQUk9QX01BUkdJTl9XSURUSCwK
KyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9TQU5EQk9YLAorICAgIFBST1BfU0NST0xMSU5HLAor
ICAgIFBST1BfU1JDLAorICAgIFBST1BfU1JDRE9DLAorICAgIFBST1BfV0lEVEgsCisgICAgUFJP
UF9DT05URU5UX0RPQ1VNRU5ULAorICAgIFBST1BfQ09OVEVOVF9XSU5ET1csCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZSQU1FX0JPUkRFUjoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9mcmFtZV9ib3JkZXIoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9I
RUlHSFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfaGVpZ2h0
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTE9OR19ERVNDOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfc2V0X2xvbmdfZGVzYyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BUkdJTl9IRUlHSFQ6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX2hlaWdodChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BUkdJTl9X
SURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9tYXJnaW5f
d2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TQU5EQk9YOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaWZy
YW1lX2VsZW1lbnRfc2V0X3NhbmRib3goc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExJTkc6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc2Nyb2xsaW5nKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NyYyhzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQ0RP
QzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmNkb2Moc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF93
aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiA9IFdFQktJ
VF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0
eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZSQU1FX0JPUkRFUjoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dl
dF9mcmFtZV9ib3JkZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJ
R0hUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9MT05HX0RFU0M6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19kZXNjKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BUkdJTl9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbWFy
Z2luX2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVJHSU5f
V0lEVEg6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9pZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TQU5EQk9YOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NhbmRib3goc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMSU5HOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
Z2V0X3Njcm9sbGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pZnJh
bWVfZWxlbWVudF9nZXRfc3JjKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NSQ0RPQzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X2dldF9zcmNkb2Moc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQ09OVEVOVF9ET0NVTUVOVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRl
bnRfZG9jdW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09OVEVO
VF9XSU5ET1c6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50OmFsaWduIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDphbGlnbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9GUkFNRV9CT1JERVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiZnJhbWUtYm9yZGVyIiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxl
bWVudDpmcmFtZS1ib3JkZXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJ
RnJhbWVFbGVtZW50OmZyYW1lLWJvcmRlciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAg
ICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
T05HX0RFU0MsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibG9u
Zy1kZXNjIiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDpsb25nLWRlc2MiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OmxvbmctZGVzYyIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9NQVJHSU5fSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgIm1hcmdpbi1oZWlnaHQiLAorICAgICAgICAgICAgIkhUTUxJ
RnJhbWVFbGVtZW50Om1hcmdpbi1oZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxJRnJhbWVFbGVtZW50Om1hcmdpbi1oZWlnaHQiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
TUFSR0lOX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
Im1hcmdpbi13aWR0aCIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6bWFyZ2luLXdp
ZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDpt
YXJnaW4td2lkdGgiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1l
RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1l
RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NBTkRCT1gsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2FuZGJveCIsCisgICAgICAgICAgICAiSFRN
TElGcmFtZUVsZW1lbnQ6c2FuZGJveCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTElGcmFtZUVsZW1lbnQ6c2FuZGJveCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JPTExJTkcs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2Nyb2xsaW5nIiwK
KyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDpzY3JvbGxpbmciLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OnNjcm9sbGluZyIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9TUkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAic3JjIiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDpzcmMiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OnNyYyIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TUkNET0MsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAic3JjZG9jIiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDpzcmNkb2MiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OnNyY2RvYyIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6d2lkdGgi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OndpZHRo
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAiY29udGVudC1kb2N1bWVudCIsCisgICAgICAgICAg
ICAiSFRNTElGcmFtZUVsZW1lbnQ6Y29udGVudC1kb2N1bWVudCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTURvY3VtZW50KiBIVE1MSUZyYW1lRWxlbWVudDpjb250ZW50LWRvY3Vt
ZW50IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTlRFTlRfV0lO
RE9XLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRlbnQt
d2luZG93IiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDpjb250ZW50LXdpbmRvdyIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVdpbmRvdyogSFRNTElGcmFtZUVs
ZW1lbnQ6Y29udGVudC13aW5kb3ciLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9X
SU5ET1csCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1M
SUZyYW1lRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktp
dERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9N
SFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1l
X2JvcmRlcihXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZnJhbWVib3JkZXJBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
c2V0X2ZyYW1lX2JvcmRlcihXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpmcmFtZWJvcmRlckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJRnJhbWVFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpoZWlnaHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYyhXZWJLaXRET01I
VE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6bG9uZ2Rlc2NBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2xvbmdfZGVzYyhXZWJLaXRE
T01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsb25nZGVzY0F0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRf
bWFyZ2luX2hlaWdodChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWFyZ2luaGVpZ2h0QXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X3NldF9tYXJnaW5faGVpZ2h0KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFN
RV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6Om1hcmdpbmhlaWdodEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX3dpZHRoKFdlYktpdERP
TUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjptYXJnaW53aWR0aEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX3dpZHRo
KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1hcmdpbndpZHRoQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRy
aWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1F
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2FuZGJveChXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6c2FuZGJveEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc2FuZGJveChXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpzYW5kYm94QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9zY3JvbGxpbmcoV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnNjcm9sbGluZ0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc2Nyb2xsaW5nKFdl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNjcm9sbGluZ0F0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVu
dF9nZXRfc3JjKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxJ
RnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc3JjZG9jKFdlYktp
dERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNkb2NBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NyY2RvYyhXZWJLaXRE
T01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNkb2NBdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3dp
ZHRoKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfd2lkdGgo
V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTURvY3VtZW50KiB3ZWJraXRfZG9tX2h0bWxfaWZy
YW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVudERvY3VtZW50KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NV2luZG93
KiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfd2luZG93KFdlYktp
dERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpE
T01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jb250ZW50V2luZG93
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZmQyMWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmgKQEAgLTAsMCArMSwyNTIgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERP
TV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkg
PHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9JRlJB
TUVfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JRlJBTUVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlRfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQsIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Q2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9JRlJBTUVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxF
TUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9JRlJBTUVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9JRlJBTUVfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JRlJBTUVfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTElGcmFtZUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2Fs
aWduKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9mcmFtZV9ib3JkZXI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVt
ZW50X2dldF9mcmFtZV9ib3JkZXIoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfZnJhbWVfYm9yZGVy
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9zZXRfZnJhbWVfYm9yZGVyKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9nZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJRnJh
bWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfc2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYyhXZWJL
aXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X3NldF9sb25nX2Rlc2M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9sb25nX2Rlc2MoV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5faGVpZ2h0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9nZXRfbWFyZ2luX2hlaWdodChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9tYXJnaW5faGVp
Z2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJh
bWVfZWxlbWVudF9zZXRfbWFyZ2luX2hlaWdodChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZy
YW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aChX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X3NldF9tYXJnaW5fd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9tYXJnaW5fd2lk
dGgoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9uYW1lOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbmFt
ZShXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3Njcm9sbGluZzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1l
X2VsZW1lbnRfZ2V0X3Njcm9sbGluZyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zY3JvbGxpbmc6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X3NldF9zY3JvbGxpbmcoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVt
ZW50X2dldF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc3Jj
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9n
ZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF93aWR0
aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1l
X2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVu
dF9nZXRfY29udGVudF9kb2N1bWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1l
RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCoKK3dlYmtpdF9kb21faHRt
bF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01IVE1MSUZyYW1l
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF9jb250ZW50X3dpbmRvdzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NV2lu
ZG93CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2luZG93Kgord2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdyhXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSUZy
YW1lRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44YzNmYWYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZy
YW1lRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50UHJpdmF0ZV9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxJRnJhbWVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUhUTUxJRnJhbWVFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
SFRNTElGcmFtZUVsZW1lbnQqIHdyYXBIVE1MSUZyYW1lRWxlbWVudChXZWJDb3JlOjpIVE1MSUZy
YW1lRWxlbWVudCopOworV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MSUZyYW1lRWxlbWVudCopOworV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTElGcmFtZUVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjYTk0Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTElGcmFtZUVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxJ
RnJhbWVFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVf
QVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF9zYW5kYm94OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3Nh
bmRib3goV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc2FuZGJveDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaWZy
YW1lX2VsZW1lbnRfc2V0X3NhbmRib3goV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X2dldF9zcmNkb2M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9n
ZXRfc3JjZG9jKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NyY2RvYzoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfc2V0X3NyY2RvYyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kZjlkODJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50LmNwcApAQCAtMCwwICsxLDg0MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxJ
bWFnZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0lNQUdFX0VM
RU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNv
cmU6OkhUTUxJbWFnZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxJ
bWFnZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiB3cmFwSFRNTEltYWdlRWxlbWVudChX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0lNQUdFX0VMRU1FTlQoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0lNQUdFX0VMRU1FTlQsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6
OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJD
b3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTEltYWdlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7
CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRE
T01IVE1MSW1hZ2VFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudCwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfQUxJR04sCisgICAgUFJP
UF9BTFQsCisgICAgUFJPUF9CT1JERVIsCisgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgUFJP
UF9IRUlHSFQsCisgICAgUFJPUF9IU1BBQ0UsCisgICAgUFJPUF9JU19NQVAsCisgICAgUFJPUF9M
T05HX0RFU0MsCisgICAgUFJPUF9TUkMsCisgICAgUFJPUF9TUkNTRVQsCisgICAgUFJPUF9TSVpF
UywKKyAgICBQUk9QX0NVUlJFTlRfU1JDLAorICAgIFBST1BfVVNFX01BUCwKKyAgICBQUk9QX1ZT
UEFDRSwKKyAgICBQUk9QX1dJRFRILAorICAgIFBST1BfQ09NUExFVEUsCisgICAgUFJPUF9MT1dT
UkMsCisgICAgUFJPUF9OQVRVUkFMX0hFSUdIVCwKKyAgICBQUk9QX05BVFVSQUxfV0lEVEgsCisg
ICAgUFJPUF9YLAorICAgIFBST1BfWSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSU1BR0VfRUxF
TUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X05BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9uYW1lKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9h
bGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0FMVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
c2V0X2FsdChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0JPUkRFUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfc2V0X2JvcmRlcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NST1NTX09SSUdJTjoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2hlaWdodChzZWxmLCBnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IU1BB
Q0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9oc3BhY2Uoc2Vs
ZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSVNfTUFQOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaXNf
bWFwKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0xPTkdfREVTQzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfc2V0X2xvbmdfZGVzYyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfc2V0X3NyYyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQ1NFVDoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3NyY3NldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkVTOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfc2l6ZXMoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfTUFQOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfdXNlX21hcChzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1ZTUEFDRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3ZzcGFj
ZShzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0
X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0xPV1NSQzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfc2V0X2xvd3NyYyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYg
PSBXRUJLSVRfRE9NX0hUTUxfSU1BR0VfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYW1lKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYWxp
Z24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxUOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9n
ZXRfYWx0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JPUkRFUjoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X2JvcmRlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
Uk9TU19PUklHSU46CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9jcm9zc19vcmlnaW4oc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaGVpZ2h0KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hTUEFDRToKKyAgICAgICAgZ192YWx1ZV9zZXRf
bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2hzcGFjZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19NQVA6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9p
c19tYXAoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9OR19ERVNDOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2Vf
ZWxlbWVudF9nZXRfbG9uZ19kZXNjKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NSQzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TUkNTRVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9zcmNzZXQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU0laRVM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9zaXplcyhzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJSRU5UX1NSQzoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2N1cnJl
bnRfc3JjKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRV9NQVA6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X2dldF91c2VfbWFwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1ZTUEFDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfZ2V0X3ZzcGFjZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NPTVBMRVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY29tcGxldGUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9XU1JDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbG93c3JjKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BVFVSQUxfSEVJR0hUOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9nZXRfbmF0dXJhbF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTkFUVVJBTF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVyYWxfd2lkdGgoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3goc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3koc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfY2xhc3NfaW5pdChX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1l
IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGln
biIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEltYWdlRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9BTFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWx0
IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50OmFsdCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEltYWdlRWxlbWVudDphbHQiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Qk9SREVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImJvcmRl
ciIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpib3JkZXIiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6Ym9yZGVyIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0NST1NTX09SSUdJTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6Y3Jv
c3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW1hZ2VFbGVt
ZW50OmNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRN
TEltYWdlRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRN
TEltYWdlRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfSFNQQUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJo
c3BhY2UiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxJbWFnZUVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAg
ICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lTX01BUCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtbWFwIiwKKyAgICAgICAgICAgICJIVE1MSW1h
Z2VFbGVtZW50OmlzLW1hcCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1M
SW1hZ2VFbGVtZW50OmlzLW1hcCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MT05HX0RFU0MsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibG9uZy1kZXNjIiwKKyAg
ICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50OmxvbmctZGVzYyIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEltYWdlRWxlbWVudDpsb25nLWRlc2MiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfU1JDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNy
YyIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpzcmMiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6c3JjIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1NSQ1NFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzcmNz
ZXQiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6c3Jjc2V0IiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW1hZ2VFbGVtZW50OnNyY3NldCIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TSVpFUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJzaXplcyIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpzaXplcyIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEltYWdlRWxlbWVudDpzaXplcyIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9DVVJSRU5UX1NSQywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJjdXJyZW50LXNyYyIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpj
dXJyZW50LXNyYyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MSW1hZ2VFbGVt
ZW50OmN1cnJlbnQtc3JjIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVVNFX01BUCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ1c2UtbWFwIiwKKyAgICAgICAgICAgICJI
VE1MSW1hZ2VFbGVtZW50OnVzZS1tYXAiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxJbWFnZUVsZW1lbnQ6dXNlLW1hcCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WU1BBQ0UsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInZzcGFjZSIsCisgICAgICAg
ICAgICAiSFRNTEltYWdlRWxlbWVudDp2c3BhY2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2xvbmcgSFRNTEltYWdlRWxlbWVudDp2c3BhY2UiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAg
ICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50OndpZHRoIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxJbWFnZUVsZW1lbnQ6d2lkdGgiLAorICAg
ICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09NUExFVEUsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNvbXBsZXRlIiwKKyAgICAgICAgICAg
ICJIVE1MSW1hZ2VFbGVtZW50OmNvbXBsZXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jv
b2xlYW4gSFRNTEltYWdlRWxlbWVudDpjb21wbGV0ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xP
V1NSQywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsb3dzcmMi
LAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6bG93c3JjIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW1hZ2VFbGVtZW50Omxvd3NyYyIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9OQVRVUkFMX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAg
ICAgICAibmF0dXJhbC1oZWlnaHQiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6bmF0
dXJhbC1oZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MSW1hZ2VFbGVt
ZW50Om5hdHVyYWwtaGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTkFUVVJBTF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAg
ICAibmF0dXJhbC13aWR0aCIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpuYXR1cmFs
LXdpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTEltYWdlRWxlbWVudDpu
YXR1cmFsLXdpZHRoIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfWCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAieCIsCisgICAgICAgICAg
ICAiSFRNTEltYWdlRWxlbWVudDp4IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRN
TEltYWdlRWxlbWVudDp4IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
WSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAieSIsCisgICAgICAg
ICAgICAiSFRNTEltYWdlRWxlbWVudDp5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcg
SFRNTEltYWdlRWxlbWVudDp5IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxJ
bWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFH
RV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01I
VE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbHQoV2ViS2l0RE9N
SFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmFsdEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbHQoV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6YWx0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2JvcmRlcihXZWJLaXRET01IVE1MSW1h
Z2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0Vf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Ym9yZGVyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2JvcmRlcihXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpib3JkZXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmNyb3NzT3JpZ2luKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldENyb3NzT3JpZ2luKGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
Z2V0X2hlaWdodChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5oZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SGVpZ2h0KHZhbHVlKTsK
K30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2hzcGFjZShXZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVt
LT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhzcGFjZUF0dHIpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfc2V0X2hzcGFjZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhzcGFj
ZUF0dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfZ2V0X2lzX21hcChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAg
IFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmlzbWFwQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaXNfbWFwKFdlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJv
b2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjppc21hcEF0dHIsIHZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9sb25nX2Rlc2MoV2Vi
S2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6bG9uZ2Rlc2NBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbG9uZ19kZXNjKFdlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmxvbmdkZXNjQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1B
R0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2Vf
ZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNy
Y0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2dldF9zcmNzZXQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY3NldEF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X3NldF9zcmNzZXQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1h
Z2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3Jj
c2V0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfZ2V0X3NpemVzKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzaXplc0F0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X3NldF9zaXplcyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFn
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzaXpl
c0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2dldF9jdXJyZW50X3NyYyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jdXJy
ZW50U3JjKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfdXNlX21hcChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dXNlbWFw
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X3VzZV9tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6dXNlbWFwQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfdnNwYWNlKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6dnNwYWNlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfdnNwYWNlKFdlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFs
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6dnNwYWNlQXR0ciwgdmFsdWUpOworfQorCitn
bG9uZyB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRN
TEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lN
QUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+d2lkdGgo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBnbG9uZyB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7
CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXRXaWR0aCh2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X2dldF9jb21wbGV0ZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y29tcGxldGUoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X2xvd3NyYyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpsb3dzcmNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbG93c3JjKFdlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Omxvd3NyY0F0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVy
YWxfaGVpZ2h0KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPm5hdHVyYWxIZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmF0dXJhbF93aWR0aChX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5uYXR1cmFsV2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfeChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT54KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3koV2Vi
S2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRl
bS0+eSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTBkMzFlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudC5oCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudF9oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTUFHRV9FTEVNRU5U
ICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9JTUFHRV9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0lNQUdF
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfSU1BR0VfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTUFHRV9FTEVNRU5ULCBXZWJLaXRE
T01IVE1MSW1hZ2VFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9JTUFH
RV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX0lNQUdFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0hUTUxfSU1BR0VfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTUFHRV9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0lNQUdFX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU1BR0VfRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRE
T01IVE1MSW1hZ2VFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5z
dGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X2dldF9uYW1lKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYWxp
Z24oV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2FsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbHQoV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X2FsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbHQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfYm9yZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2JvcmRlcihXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfYm9yZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2JvcmRlcihXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdl
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcK
K3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfc2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCog
c2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X2dldF9oc3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9oc3BhY2UoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2hz
cGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X3NldF9oc3BhY2UoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgZ2xv
bmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9p
c19tYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X2dldF9pc19tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2lzX21h
cDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X3NldF9pc19tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgZ2Jv
b2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF9sb25nX2Rlc2M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbG9uZ19kZXNjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9s
b25nX2Rlc2M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9zZXRfbG9uZ19kZXNjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfZ2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3Ny
YzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X3NldF9zcmMoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRf
dXNlX21hcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X2dldF91c2VfbWFwKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF91c2VfbWFw
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfc2V0X3VzZV9tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9n
ZXRfdnNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfdnNwYWNlKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF92c3BhY2U6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZhbHVlOiBBICNn
bG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfdnNwYWNlKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfd2lkdGg6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfd2lk
dGgoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9jb21wbGV0ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfZ2V0X2NvbXBsZXRlKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9sb3dzcmM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRf
bG93c3JjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9sb3dzcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbG93c3JjKFdlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVyYWxfaGVpZ2h0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
bG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9nZXRfbmF0dXJhbF9oZWlnaHQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVyYWxfd2lkdGg6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X2dldF9uYXR1cmFsX3dpZHRoKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF94OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9n
ZXRfeChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfeToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBn
bG9uZword2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3koV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MSW1hZ2VFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45NTUzM2YxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFByaXZhdGVf
aAorI2RlZmluZSBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxJbWFnZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQqIHdyYXBIVE1MSW1hZ2VFbGVtZW50KFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQqKTsKK1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSW1h
Z2VFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBjb3JlKFdlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTEltYWdlRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFVuc3RhYmxlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmNWExNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSwxMDggQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFVu
c3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9jcm9zc19vcmln
aW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbihX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X2dldF9zcmNzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3Ny
Y3NldChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfc3Jjc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfc2V0X3NyY3NldChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF9zaXplczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc2l6ZXMoV2Vi
S2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfc2V0X3NpemVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0
X3NpemVzKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2N1cnJlbnRf
c3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9jdXJyZW50X3NyYyhX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
SFRNTEltYWdlRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQ3OGFiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTc5MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01G
aWxlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WYWxpZGl0
eVN0YXRlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1FTlQoa2l0
KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiB3cmFwSFRNTElucHV0RWxlbWVudChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9IVE1MX0lOUFVUX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZl
bnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVz
Y3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sK
KyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZh
Y2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZGlzcGF0
Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2
ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVO
VF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9BQ0NFUFQsCisgICAgUFJPUF9BTFQsCisgICAgUFJPUF9BVVRPQ09N
UExFVEUsCisgICAgUFJPUF9BVVRPRk9DVVMsCisgICAgUFJPUF9ERUZBVUxUX0NIRUNLRUQsCisg
ICAgUFJPUF9DSEVDS0VELAorICAgIFBST1BfRElSX05BTUUsCisgICAgUFJPUF9ESVNBQkxFRCwK
KyAgICBQUk9QX0ZPUk0sCisgICAgUFJPUF9GSUxFUywKKyAgICBQUk9QX0ZPUk1fQUNUSU9OLAor
ICAgIFBST1BfRk9STV9FTkNUWVBFLAorICAgIFBST1BfRk9STV9NRVRIT0QsCisgICAgUFJPUF9G
T1JNX05PX1ZBTElEQVRFLAorICAgIFBST1BfRk9STV9UQVJHRVQsCisgICAgUFJPUF9IRUlHSFQs
CisgICAgUFJPUF9JTkRFVEVSTUlOQVRFLAorICAgIFBST1BfTElTVCwKKyAgICBQUk9QX01BWCwK
KyAgICBQUk9QX01BWF9MRU5HVEgsCisgICAgUFJPUF9NSU4sCisgICAgUFJPUF9NVUxUSVBMRSwK
KyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9QQVRURVJOLAorICAgIFBST1BfUExBQ0VIT0xERVIs
CisgICAgUFJPUF9SRUFEX09OTFksCisgICAgUFJPUF9SRVFVSVJFRCwKKyAgICBQUk9QX1NJWkUs
CisgICAgUFJPUF9TUkMsCisgICAgUFJPUF9TVEVQLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9Q
X0RFRkFVTFRfVkFMVUUsCisgICAgUFJPUF9WQUxVRSwKKyAgICBQUk9QX1ZBTFVFX0FTX05VTUJF
UiwKKyAgICBQUk9QX1dJRFRILAorICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICBQUk9QX1ZB
TElESVRZLAorICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAgIFBST1BfTEFCRUxTLAor
ICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9VU0VfTUFQLAorICAgIFBST1BfSU5DUkVNRU5UQUws
CisgICAgUFJPUF9BVVRPQ09SUkVDVCwKKyAgICBQUk9QX0FVVE9DQVBJVEFMSVpFLAorICAgIFBS
T1BfQ0FQVFVSRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSU5QVVRfRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FDQ0VQVDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FjY2VwdChzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FM
VDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsdChzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0FVVE9DT01QTEVURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X2F1dG9jb21wbGV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9GT0NVUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZBVUxUX0NIRUNLRUQ6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9kZWZhdWx0X2NoZWNrZWQo
c2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ0hFQ0tFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2NoZWNrZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRElSX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9kaXJfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRf
Ym9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9BQ1RJ
T046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX2FjdGlv
bihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0ZPUk1fRU5DVFlQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X2Zvcm1fZW5jdHlwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fTUVUSE9EOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV9tZXRob2Qoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX05P
X1ZBTElEQVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9y
bV9ub192YWxpZGF0ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX1RBUkdFVDoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fdGFyZ2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdfdmFsdWVf
Z2V0X3Vsb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTkRFVEVS
TUlOQVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5kZXRl
cm1pbmF0ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9NQVg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9tYXgoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9NQVhfTEVOR1RIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9zZXRfbWF4X2xlbmd0aChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVl
KSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU46CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9taW4oc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NVUxUSVBMRToK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X211bHRpcGxlKHNlbGYs
IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9uYW1l
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUEFUVEVSTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3BhdHRlcm4oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QTEFDRUhPTERFUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X3BsYWNlaG9sZGVyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVBRF9PTkxZOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcmVhZF9vbmx5KHNlbGYsIGdfdmFs
dWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JF
UVVJUkVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcmVxdWly
ZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3NpemUoc2VsZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X3NyYyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NURVA6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF9zdGVwKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2lucHV0X3R5cGUoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZBVUxUX1ZBTFVF
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGVmYXVsdF92YWx1
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WQUxVRV9BU19OVU1CRVI6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZV9hc19udW1iZXIoc2VsZiwgZ192YWx1ZV9nZXRfZG91
YmxlKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURU
SDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3dpZHRoKHNlbGYs
IGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsaWdu
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVVNFX01BUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3VzZV9tYXAoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9JTkNSRU1FTlRBTDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2luY3JlbWVudGFsKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4o
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9DT1JSRUNUOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2NvcnJlY3Qoc2VsZiwg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfQVVUT0NBUElUQUxJWkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9hdXRvY2FwaXRhbGl6ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NBUFRVUkU6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9jYXB0dXJlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9JTlBVVF9FTEVNRU5UKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUNDRVBUOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfYWNjZXB0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FM
VDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X2FsdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9BVVRPQ09NUExFVEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvY29tcGxldGUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0ZPQ1VTOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2ZvY3Vz
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfQ0hFQ0tFRDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X2RlZmF1bHRfY2hlY2tlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9DSEVDS0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2hlY2tlZChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVJfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rpcl9uYW1lKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfZGlzYWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STToK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfZm9ybShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9G
SUxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9nZXRfZmlsZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfRk9STV9BQ1RJT046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX2FjdGlvbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX0VOQ1RZUEU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3Jt
X2VuY3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9NRVRI
T0Q6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9mb3JtX21ldGhvZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9GT1JNX05PX1ZBTElEQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9ub192YWxpZGF0
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX1RBUkdFVDoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2Zvcm1fdGFyZ2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfSU5ERVRFUk1JTkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2luZGV0ZXJtaW5hdGUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTElTVDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbGlz
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVg6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9tYXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX0xFTkdUSDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X21heF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTUlOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfbWluKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX01VTFRJUExFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbXVsdGlwbGUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFUVEVSTjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3BhdHRlcm4o
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExBQ0VIT0xERVI6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9wbGFjZWhvbGRlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9SRUFEX09OTFk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZWFkX29ubHkoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUkVRVUlSRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZXF1aXJlZChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3NpemUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfc3Jj
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NURVA6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9zdGVwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9pbnB1dF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0RFRkFVTFRfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsdWUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUVfQVNfTlVNQkVSOgorICAgICAg
ICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF92YWx1ZV9hc19udW1iZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfV0lMTF9WQUxJREFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURJVFk6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3Zh
bGlkaXR5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEQVRJT05f
TUVTU0FHRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9MQUJFTFM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2xhYmVscyhzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FsaWdu
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRV9NQVA6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF91c2VfbWFwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOQ1JF
TUVOVEFMOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5jcmVtZW50YWwoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQVVUT0NPUlJFQ1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvY29ycmVjdChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ0FQSVRBTElaRToKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2F1dG9jYXBpdGFsaXplKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0NBUFRVUkU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlX3R5cGUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQUNDRVBULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImFjY2VwdCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDphY2NlcHQiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6YWNjZXB0IiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0FMVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJhbHQiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6YWx0IiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmFsdCIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9BVVRPQ09NUExFVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiYXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmF1
dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxl
bWVudDphdXRvY29tcGxldGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0ZPQ1VTLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhdXRvZm9jdXMiLAorICAgICAg
ICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0RFRkFVTFRfQ0hFQ0tFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisg
ICAgICAgICAgICAiZGVmYXVsdC1jaGVja2VkIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVt
ZW50OmRlZmF1bHQtY2hlY2tlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBI
VE1MSW5wdXRFbGVtZW50OmRlZmF1bHQtY2hlY2tlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9D
SEVDS0VELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjaGVj
a2VkIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmNoZWNrZWQiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDpjaGVja2VkIiwKKyAgICAg
ICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0RJUl9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgImRpci1uYW1lIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmRp
ci1uYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50
OmRpci1uYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJU0FCTEVELAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkaXNhYmxlZCIsCisgICAgICAgICAgICAiSFRN
TElucHV0RWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVh
biBIVE1MSW5wdXRFbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk0s
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisgICAg
ICAgICAgICAiSFRNTElucHV0RWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1MSW5wdXRFbGVtZW50OmZvcm0iLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRklMRVMsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZmlsZXMiLAorICAgICAgICAgICAg
IkhUTUxJbnB1dEVsZW1lbnQ6ZmlsZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01GaWxlTGlzdCogSFRNTElucHV0RWxlbWVudDpmaWxlcyIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfRklMRV9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfRk9STV9BQ1RJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiZm9ybS1hY3Rpb24iLAorICAgICAgICAgICAgIkhUTUxJbnB1
dEVsZW1lbnQ6Zm9ybS1hY3Rpb24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxJbnB1dEVsZW1lbnQ6Zm9ybS1hY3Rpb24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STV9FTkNU
WVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImZvcm0tZW5j
dHlwZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpmb3JtLWVuY3R5cGUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6Zm9ybS1lbmN0eXBl
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0ZPUk1fTUVUSE9ELAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImZvcm0tbWV0aG9kIiwKKyAgICAgICAgICAgICJIVE1MSW5w
dXRFbGVtZW50OmZvcm0tbWV0aG9kIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MSW5wdXRFbGVtZW50OmZvcm0tbWV0aG9kIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk1fTk9f
VkFMSURBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImZv
cm0tbm8tdmFsaWRhdGUiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6Zm9ybS1uby12
YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MSW5wdXRFbGVt
ZW50OmZvcm0tbm8tdmFsaWRhdGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STV9UQVJHRVQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZm9ybS10YXJnZXQi
LAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6Zm9ybS10YXJnZXQiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6Zm9ybS10YXJnZXQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAg
ICAgICAgICAiaGVpZ2h0IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmhlaWdodCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBndWxvbmcgSFRNTElucHV0RWxlbWVudDpoZWlnaHQi
LAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTkRFVEVSTUlOQVRFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJpbmRldGVybWluYXRlIiwKKyAg
ICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmluZGV0ZXJtaW5hdGUiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDppbmRldGVybWluYXRlIiwKKyAg
ICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0xJU1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisg
ICAgICAgICAgICAibGlzdCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpsaXN0IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIEhUTUxJbnB1dEVs
ZW1lbnQ6bGlzdCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
TUFYLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1heCIsCisg
ICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDptYXgiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6bWF4IiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01BWF9M
RU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIm1heC1sZW5n
dGgiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6bWF4LWxlbmd0aCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MSW5wdXRFbGVtZW50Om1heC1sZW5ndGgiLAorICAg
ICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUlOLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1pbiIsCisgICAgICAgICAgICAiSFRNTElucHV0
RWxlbWVudDptaW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVs
ZW1lbnQ6bWluIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01VTFRJUExFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJtdWx0aXBsZSIsCisgICAgICAgICAgICAiSFRN
TElucHV0RWxlbWVudDptdWx0aXBsZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVh
biBIVE1MSW5wdXRFbGVtZW50Om11bHRpcGxlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAg
ICAgICAgICAiSFRNTElucHV0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFUVEVS
TiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwYXR0ZXJuIiwK
KyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OnBhdHRlcm4iLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6cGF0dGVybiIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9QTEFDRUhPTERFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJwbGFjZWhvbGRlciIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpwbGFjZWhv
bGRlciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDpw
bGFjZWhvbGRlciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUFEX09OTFksCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInJlYWQtb25seSIsCisgICAgICAgICAgICAi
SFRNTElucHV0RWxlbWVudDpyZWFkLW9ubHkiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jv
b2xlYW4gSFRNTElucHV0RWxlbWVudDpyZWFkLW9ubHkiLAorICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
UkVRVUlSRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInJl
cXVpcmVkIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OnJlcXVpcmVkIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6cmVxdWlyZWQiLAor
ICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfU0laRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAor
ICAgICAgICAgICAgInNpemUiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6c2l6ZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBndWxvbmcgSFRNTElucHV0RWxlbWVudDpzaXplIiwK
KyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1JDLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgInNyYyIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxl
bWVudDpzcmMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1l
bnQ6c3JjIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NURVAsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAic3RlcCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVu
dDpzdGVwIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50
OnN0ZXAiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50
OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6
dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX1ZBTFVFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRlZmF1bHQtdmFsdWUiLAorICAgICAgICAgICAg
IkhUTUxJbnB1dEVsZW1lbnQ6ZGVmYXVsdC12YWx1ZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDpkZWZhdWx0LXZhbHVlIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZh
bHVlIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1ZBTFVFX0FTX05VTUJFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAg
ICAgICAgICAgICJ2YWx1ZS1hcy1udW1iZXIiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1l
bnQ6dmFsdWUtYXMtbnVtYmVyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgSFRN
TElucHV0RWxlbWVudDp2YWx1ZS1hcy1udW1iZXIiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxF
LCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAor
ICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OndpZHRo
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1bG9uZyBIVE1MSW5wdXRFbGVtZW50OndpZHRo
IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2lsbC12YWxpZGF0ZSIsCisg
ICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDp3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDp3aWxsLXZhbGlkYXRlIiwKKyAg
ICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfVkFMSURJVFksCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAidmFsaWRpdHkiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6
dmFsaWRpdHkiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01WYWxpZGl0eVN0YXRl
KiBIVE1MSW5wdXRFbGVtZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9WQUxJRElUWV9TVEFURSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAg
ICAgIkhUTUxJbnB1dEVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTEFCRUxTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgImxhYmVscyIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpsYWJlbHMi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlTGlzdCogSFRNTElucHV0RWxl
bWVudDpsYWJlbHMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FM
SUdOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwK
KyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1VTRV9NQVAsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidXNl
LW1hcCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDp1c2UtbWFwIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OnVzZS1tYXAiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfSU5DUkVNRU5UQUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgImluY3JlbWVudGFsIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50
OmluY3JlbWVudGFsIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1
dEVsZW1lbnQ6aW5jcmVtZW50YWwiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0NPUlJFQ1Qs
CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImF1dG9jb3JyZWN0
IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmF1dG9jb3JyZWN0IiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6YXV0b2NvcnJlY3QiLAor
ICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0NBUElUQUxJWkUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiYXV0b2NhcGl0YWxpemUiLAorICAgICAgICAgICAgIkhU
TUxJbnB1dEVsZW1lbnQ6YXV0b2NhcGl0YWxpemUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6YXV0b2NhcGl0YWxpemUiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQ0FQVFVSRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJj
YXB0dXJlIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmNhcHR1cmUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6Y2FwdHVyZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9pbml0KFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3Qp
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3N0ZXBfdXAoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2xvbmcgbiwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+c3RlcFVwKG4sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc3RlcF9kb3duKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYsIGdsb25nIG4sIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPnN0ZXBEb3duKG4sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5U
KHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja1ZhbGlk
aXR5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChlcnJvcik7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFcnJvciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChlcnJv
cik7CisgICAgaXRlbS0+c2V0Q3VzdG9tVmFsaWRpdHkoY29udmVydGVkRXJyb3IpOworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NlbGVjdChXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNlbGVjdCgpOworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9yYW5nZV90ZXh0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiByZXBsYWNlbWVudCwgZ3Vsb25nIHN0YXJ0LCBndWxvbmcg
ZW5kLCBjb25zdCBnY2hhciogc2VsZWN0aW9uTW9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwocmVwbGFjZW1lbnQpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZWN0aW9uTW9k
ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRSZXBsYWNlbWVudCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChyZXBs
YWNlbWVudCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0aW9uTW9kZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChzZWxlY3Rpb25Nb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRSYW5nZVRleHQoY29udmVydGVkUmVwbGFjZW1lbnQs
IHN0YXJ0LCBlbmQsIGNvbnZlcnRlZFNlbGVjdGlvbk1vZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlX2Zvcl91c2VyKFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VmFsdWVGb3JVc2VyKGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9h
Y2NlcHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFjY2VwdEF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hY2NlcHQo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWNjZXB0QXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X2FsdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWx0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsdChXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2NvbXBs
ZXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF1dG9jb21wbGV0ZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9h
dXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dXRvY29tcGxldGUoY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0cik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjphdXRvZm9jdXNBdHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9kZWZhdWx0X2NoZWNrZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGVja2VkQXR0cik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfZGVmYXVsdF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYs
IGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpjaGVja2VkQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfY2hlY2tlZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxm
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hlY2tlZCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2NoZWNrZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0Q2hlY2tlZCh2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpcm5h
bWVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9zZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBV
VF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6ZGlybmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9F
TEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJs
ZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6ZGlzYWJsZWRBdHRyLCB2YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lO
UFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvcm0oKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01GaWxl
TGlzdCogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2ZpbGVzKFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9J
TlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpGaWxlTGlzdD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZpbGVzKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfZmlsZXMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2Vs
ZiwgV2ViS2l0RE9NRmlsZUxpc3QqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRklMRV9MSVNUKHZhbHVlKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpGaWxlTGlzdCogY29udmVydGVk
VmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgIGl0ZW0tPnNldEZpbGVzKGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9m
b3JtX2FjdGlvbihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5mb3JtQWN0aW9uKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2Zvcm1fYWN0aW9uKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0Rm9ybUFjdGlvbihjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9lbmN0eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmZvcm1FbmN0eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fZW5jdHlwZShXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEZvcm1FbmN0eXBlKGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX21ldGhv
ZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5mb3JtTWV0aG9kKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1f
bWV0aG9kKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0Rm9ybU1l
dGhvZChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF9mb3JtX25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Zm9ybW5vdmFsaWRhdGVB
dHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9mb3JtX25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBV
VF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpmb3Jtbm92YWxpZGF0ZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX3RhcmdldChXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5Q
VVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6Zm9ybXRhcmdldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX3RhcmdldChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmb3JtdGFyZ2V0QXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2hlaWdo
dChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0
ID0gaXRlbS0+aGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5Q
VVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRIZWlnaHQodmFsdWUpOworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5kZXRlcm1pbmF0ZShX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+aW5kZXRlcm1pbmF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2luZGV0ZXJtaW5hdGUoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW5k
ZXRlcm1pbmF0ZSh2YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbGlzdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmKQoreworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6SFRNTEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5saXN0KCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIkRhdGFsaXN0IEVsZW1lbnQiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShE
QVRBTElTVF9FTEVNRU5UKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X21heChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWF4QXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X21h
eChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptYXhBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9t
YXhfbGVuZ3RoKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPm1heExlbmd0aEZvckJpbmRpbmdzKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbWF4X2xlbmd0
aChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0TWF4TGVuZ3RoRm9yQmluZGlu
Z3ModmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfbWluKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptaW5BdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbWlu
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1pbkF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X211bHRpcGxlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6bXVsdGlwbGVBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tdWx0aXBsZShXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRC
b29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6bXVsdGlwbGVBdHRyLCB2YWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbmFtZShXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X25hbWUo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9w
YXR0ZXJuKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwYXR0ZXJuQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3BhdHRl
cm4oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGF0dGVybkF0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9wbGFjZWhvbGRlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGxhY2Vob2xkZXJBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfcGxhY2Vob2xkZXIoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cGxhY2Vob2xkZXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZWFkX29ubHkoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VM
RU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWFkb25s
eUF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X3JlYWRfb25seShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVhZG9ubHlBdHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZXF1aXJlZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlcXVpcmVkQXR0cik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xl
YW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZikpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlcXVpcmVkQXR0ciwgdmFsdWUpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPnNpemUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9zaXplKFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0U2l6ZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVU
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X3NyYyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNB
dHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfc3RlcChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3RlcEF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF9zdGVwKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnN0ZXBBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfaW5wdXRfdHlwZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50eXBlKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2lucHV0X3R5cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRUeXBlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRl
ZmF1bHRWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVlKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0RGVmYXVsdFZhbHVlKGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFZhbHVlKGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2RvdWJsZSB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsdWVfYXNfbnVt
YmVyKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVz
dWx0ID0gaXRlbS0+dmFsdWVBc051bWJlcigpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlX2FzX251bWJlcihXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRWYWx1ZUFzTnVtYmVyKHZhbHVlLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dp
ZHRoKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1
bHQgPSBpdGVtLT53aWR0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5Q
VVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRXaWR0aCh2YWx1ZSk7Cit9CisKK2di
b29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT53aWxsVmFsaWRhdGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJL
aXRET01WYWxpZGl0eVN0YXRlKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFs
aWRpdHkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlZhbGlkaXR5U3RhdGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT52
YWxpZGl0eSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsaWRhdGlv
bl9tZXNzYWdlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZhbGlkYXRpb25NZXNzYWdlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbGFiZWxzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmxhYmVscygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X2FsaWduKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X3VzZV9tYXAoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnVzZW1hcEF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF91c2VfbWFwKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnVzZW1hcEF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X2luY3JlbWVudGFsKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aW5jcmVtZW50YWxBdHRyKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9pbmNyZW1lbnRhbChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVh
biB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
aW5jcmVtZW50YWxBdHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9hdXRvY29ycmVjdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmKQoreworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+YXV0b2NvcnJlY3QoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFuZCBBdXRvY2FwaXRhbGl6
ZSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkgKi8KK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKElPU19BVVRP
Q09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lO
UFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0QXV0b2NvcnJlY3QodmFsdWUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5k
IEF1dG9jYXBpdGFsaXplIikKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9B
VVRPQ0FQSVRBTElaRSkgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9hdXRvY2FwaXRhbGl6ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQor
eworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdXRvY2FwaXRhbGl6ZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFuZCBB
dXRvY2FwaXRhbGl6ZSIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRP
Q09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JS
RUNUX0FORF9BVVRPQ0FQSVRBTElaRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0QXV0b2NhcGl0YWxpemUoY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFs
aXplIikKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTEla
RSkgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0
dXJlX3R5cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUo
TUVESUFfQ0FQVFVSRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmNhcHR1cmVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIENh
cHR1cmUiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9DQVBUVVJFKSAq
LworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9jYXB0dXJlKFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNp
ZiBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmNhcHR1cmVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIENhcHR1cmUiKQorI2VuZGlmIC8qIEVOQUJMRShNRURJ
QV9DQVBUVVJFKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjlhOWQ4NjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQuaApA
QCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJ
VCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudF9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU5QVVRfRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfSU5QVVRfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTlBVVF9FTEVNRU5ULCBXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfSU5QVVRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9JTlBVVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVU
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfSU5QVVRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9JTlBVVF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0lOUFVUX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhU
TUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2VsZWN0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2VsZWN0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hY2NlcHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfYWNjZXB0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hY2NlcHQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWNj
ZXB0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FsdDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9hbHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hbHQoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2ZvY3VzOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvZm9jdXM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
YXV0b2ZvY3VzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF9j
aGVja2VkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9jaGVja2VkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2hlY2tlZChXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfY2hlY2tlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERP
TUhUTUxGb3JtRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCoKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9maWxlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01GaWxlTGlzdAorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTUZpbGVMaXN0Kgord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2ZpbGVzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9maWxlczoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI1dlYktpdERPTUZpbGVM
aXN0CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9maWxlcyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBXZWJLaXRET01G
aWxlTGlzdCogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaGVp
Z2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ3Vsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ3Vs
b25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRf
aW5kZXRlcm1pbmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2luZGV0ZXJtaW5hdGUoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X2luZGV0ZXJtaW5hdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5kZXRlcm1pbmF0ZShXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21heF9sZW5ndGg6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8K
K1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9tYXhf
bGVuZ3RoKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tYXhfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqIEBlcnJvcjog
I0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfbWF4X2xlbmd0aChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBn
bG9uZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9tdWx0aXBsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X211bHRpcGxlKFdlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9tdWx0aXBsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tdWx0aXBsZShXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X3JlYWRfb25seToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9yZWFkX29ubHkoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VC
S0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9zaXplKFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3Np
emUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlLCBHRXJyb3Iq
KiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3Ny
YzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3NyYzoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9zcmMo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5wdXRfdHlwZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9pbnB1dF90eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbnB1dF90eXBlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2lucHV0X3R5cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRf
ZGVmYXVsdF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlKFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9kZWZhdWx0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsdWUoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBn
dWxvbmcKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dAorICogQHZhbHVlOiBBICNndWxvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRl
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9nZXRfdXNlX21hcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF91c2VfbWFwKFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF91c2VfbWFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3VzZV9tYXAoV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVyZV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFNpbmNl
OiAyLjE0CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfY2FwdHVyZV90eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudF9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzFmOWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSW5wdXRF
bGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiB3cmFw
SFRNTElucHV0RWxlbWVudChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kik7CitXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCopOworV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFVuc3RhYmxl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQ0ZjY2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNTM0IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRVbnN0YWJsZV9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zdGVwX3VwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQKKyAqIEBuOiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3N0ZXBfdXAoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2Vs
ZiwgZ2xvbmcgbiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3N0ZXBfZG93bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50CisgKiBAbjogQSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zdGVwX2Rvd24oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2xv
bmcgbiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X2NoZWNrX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfY2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0
eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAZXJyb3I6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcmFuZ2VfdGV4dDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAcmVwbGFjZW1lbnQ6IEEgI2djaGFy
CisgKiBAc3RhcnQ6IEEgI2d1bG9uZworICogQGVuZDogQSAjZ3Vsb25nCisgKiBAc2VsZWN0aW9u
TW9kZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9zZXRfcmFuZ2VfdGV4dChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogcmVwbGFjZW1lbnQsIGd1bG9uZyBzdGFydCwgZ3Vsb25nIGVuZCwgY29uc3QgZ2NoYXIq
IHNlbGVjdGlvbk1vZGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfdmFsdWVfZm9yX3VzZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfdmFsdWVfZm9yX3VzZXIoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGVmYXVsdF9jaGVja2VkOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2RlZmF1bHRfY2hlY2tlZChXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rpcl9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF9kaXJfbmFtZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGlyX25hbWU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9hY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3Jt
X2FjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX2FjdGlvbihXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX2VuY3R5cGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZShXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfZm9ybV9lbmN0eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X2Zvcm1fZW5jdHlwZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9m
b3JtX21ldGhvZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9t
ZXRob2QoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fbWV0aG9kOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X2Zvcm1fbWV0aG9kKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X2Zvcm1fbm9fdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9nZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
Zm9ybV9ub192YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3Jt
X25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV90
YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fdGFyZ2V0
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9mb3JtX3RhcmdldChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9saXN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxF
bGVtZW50Kgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2xpc3QoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X21heDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRf
bWF4KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tYXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9zZXRfbWF4KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21pbjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbWluKFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9taW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbWluKFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3BhdHRlcm46CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3BhdHRlcm4oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3Bh
dHRlcm46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcGF0dGVybihXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9wbGFjZWhvbGRlcjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcGxhY2Vob2xkZXIoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3BsYWNlaG9sZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3BsYWNlaG9s
ZGVyKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3JlYWRfb25seToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZWFkX29ubHkoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfZ2V0X3JlcXVpcmVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9yZXF1aXJlZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9yZXF1aXJlZChXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3N0ZXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X3N0ZXAoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3N0ZXA6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfc3RlcChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X2dldF92YWx1ZV9hc19udW1iZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X3ZhbHVlX2FzX251bWJlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfdmFsdWVf
YXNfbnVtYmVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2RvdWJsZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF92YWx1ZV9hc19udW1iZXIoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwg
Z2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF92YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01WYWxpZGl0eVN0YXRlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTVZhbGlkaXR5U3RhdGUqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdl
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9sYWJlbHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NTm9kZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbGFi
ZWxzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbmNyZW1lbnRhbDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbmNyZW1lbnRhbChXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfaW5jcmVtZW50YWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAor
ICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5jcmVt
ZW50YWwoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvY29ycmVjdDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvY29ycmVjdChX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2NvcnJlY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9hdXRvY2FwaXRhbGl6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2NhcHR1cmU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfY2FwdHVyZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jOTk3OTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVu
dC5jcHAKQEAgLTAsMCArMSw0NzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxl
bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogb2JqKQoreworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfS0VZR0VOX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6
Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBjb3JlKFdl
YktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MS2V5Z2Vu
RWxlbWVudCogd3JhcEhUTUxLZXlnZW5FbGVtZW50KFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX0tFWUdFTl9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
SFRNTF9LRVlHRU5fRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9rZXlnZW5fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlm
ICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEtl
eWdlbkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MS2V5Z2Vu
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29y
ZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxLZXlnZW5FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+
ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9r
ZXlnZW5fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxLZXln
ZW5FbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZF
TlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfQVVUT0ZPQ1VTLAorICAgIFBST1BfQ0hBTExFTkdFLAorICAgIFBS
T1BfRElTQUJMRUQsCisgICAgUFJPUF9GT1JNLAorICAgIFBST1BfS0VZVFlQRSwKKyAgICBQUk9Q
X05BTUUsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICBQUk9Q
X1ZBTElESVRZLAorICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAgIFBST1BfTEFCRUxT
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxLZXlnZW5FbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0tFWUdFTl9FTEVNRU5UKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQVVUT0ZPQ1VTOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhzZWxmLCBnX3Zh
bHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
SEFMTEVOR0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfY2hh
bGxlbmdlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9rZXlnZW5f
ZWxlbWVudF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfS0VZVFlQRToKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9rZXl0eXBlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX2tleWdlbl9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0tFWUdFTl9FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
QVVUT0ZPQ1VTOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2F1dG9mb2N1cyhzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9DSEFMTEVOR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfY2hhbGxlbmdlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0
X2Rpc2FibGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk06Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2tleWdlbl9l
bGVtZW50X2dldF9mb3JtKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0tF
WVRZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9rZXlnZW5fZWxlbWVudF9nZXRfa2V5dHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9rZXlnZW5fdHlwZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSUxMX1ZBTElEQVRFOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRf
Z2V0X3dpbGxfdmFsaWRhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VkFMSURJVFk6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2tleWdlbl9lbGVtZW50X2dldF92YWxpZGl0eShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9WQUxJREFUSU9OX01FU1NBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfdmFsaWRhdGlv
bl9tZXNzYWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMUzoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2Vu
X2VsZW1lbnRfZ2V0X2xhYmVscyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MS2V5
Z2VuRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9r
ZXlnZW5fZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0ZPQ1VT
LAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhdXRvZm9jdXMi
LAorICAgICAgICAgICAgIkhUTUxLZXlnZW5FbGVtZW50OmF1dG9mb2N1cyIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MS2V5Z2VuRWxlbWVudDphdXRvZm9jdXMiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQ0hBTExFTkdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImNoYWxsZW5nZSIsCisgICAgICAgICAgICAiSFRNTEtleWdlbkVsZW1l
bnQ6Y2hhbGxlbmdlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MS2V5Z2Vu
RWxlbWVudDpjaGFsbGVuZ2UiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAg
ICAgICJIVE1MS2V5Z2VuRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnYm9vbGVhbiBIVE1MS2V5Z2VuRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9GT1JNLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZv
cm0iLAorICAgICAgICAgICAgIkhUTUxLZXlnZW5FbGVtZW50OmZvcm0iLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxLZXlnZW5FbGVtZW50OmZv
cm0iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfS0VZ
VFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJrZXl0eXBl
IiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDprZXl0eXBlIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MS2V5Z2VuRWxlbWVudDprZXl0eXBlIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTEtleWdlbkVsZW1lbnQ6bmFtZSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEtleWdlbkVsZW1lbnQ6bmFtZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxLZXlnZW5FbGVtZW50OnR5cGUiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTEtleWdlbkVsZW1lbnQ6dHlwZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgIndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgIkhUTUxLZXlnZW5FbGVt
ZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1M
S2V5Z2VuRWxlbWVudDp3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURJ
VFksCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidmFsaWRpdHki
LAorICAgICAgICAgICAgIkhUTUxLZXlnZW5FbGVtZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogSFRNTEtleWdlbkVsZW1lbnQ6dmFs
aWRpdHkiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFM
SURBVElPTl9NRVNTQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAiSFRNTEtleWdlbkVsZW1lbnQ6
dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxL
ZXlnZW5FbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBQkVM
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJsYWJlbHMiLAor
ICAgICAgICAgICAgIkhUTUxLZXlnZW5FbGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTU5vZGVMaXN0KiBIVE1MS2V5Z2VuRWxlbWVudDpsYWJlbHMiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9rZXln
ZW5fZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X2tleWdlbl9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja1ZhbGlk
aXR5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfa2V5
Z2VuX2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9LRVlHRU5fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChlcnJvcik7Cisg
ICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRXJyb3IgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
ZXJyb3IpOworICAgIGl0ZW0tPnNldEN1c3RvbVZhbGlkaXR5KGNvbnZlcnRlZEVycm9yKTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9hdXRvZm9jdXMo
V2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhU
TUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjphdXRvZm9jdXNBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfYXV0b2ZvY3VzKFdlYktpdERP
TUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxL
ZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJv
b2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjphdXRvZm9jdXNBdHRyLCB2YWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2NoYWxsZW5n
ZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
S2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhbGxlbmdlQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9jaGFs
bGVuZ2UoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhbGxlbmdl
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfa2V5
Z2VuX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZiks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVu
dF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmRpc2FibGVkQXR0ciwgdmFsdWUpOworfQorCitXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHdl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MS2V5Z2Vu
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2tleXR5cGUoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+a2V5dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfa2V5dHlwZShXZWJLaXRET01IVE1MS2V5Z2VuRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEtleXR5cGUoY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhU
TUxLZXlnZW5FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
S0VZR0VOX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X25hbWUoV2Vi
S2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRf
a2V5Z2VuX3R5cGUoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1l
bnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndpbGxWYWxpZGF0ZSgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTVZhbGlkaXR5U3RhdGUqIHdlYmtpdF9kb21f
aHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT52YWxpZGl0eSgpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MS2V5
Z2VuRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdF
Tl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT52YWxpZGF0aW9uTWVzc2FnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dl
dF9sYWJlbHMoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
bGFiZWxzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5
Z2VuRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MmExM2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmgKQEAgLTAsMCArMSwy
NDUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
SFRNTEtleWdlbkVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudF9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0tFWUdFTl9FTEVNRU5UICAg
ICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfS0VZR0VOX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfS0VZR0VO
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX0tFWUdFTl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0tFWUdFTl9FTEVNRU5ULCBXZWJL
aXRET01IVE1MS2V5Z2VuRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
S0VZR0VOX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfS0VZR0VOX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfS0VZR0VOX0VMRU1FTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfS0VZR0VOX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
S0VZR0VOX0VMRU1FTlQsIFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50Q2xhc3MpKQorCitzdHJ1
Y3QgX1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVu
dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxLZXlnZW5FbGVt
ZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9j
aGVja192YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRf
Y2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKiBAZXJyb3I6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERP
TUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfYXV0b2ZvY3VzOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhU
TUxLZXlnZW5FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2Vu
X2VsZW1lbnRfc2V0X2F1dG9mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2Vu
RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRf
c2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfY2hh
bGxlbmdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2NoYWxsZW5n
ZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9jaGFsbGVuZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2tleWdl
bl9lbGVtZW50X3NldF9jaGFsbGVuZ2UoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2tleWdlbl9l
bGVtZW50X2dldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2Vs
ZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2Rpc2FibGVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29s
ZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTEtl
eWdlbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2Zvcm06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2Vu
X2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfa2V5dHlwZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9rZXl0eXBlKFdlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2Vs
ZW1lbnRfc2V0X2tleXR5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9rZXl0
eXBlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfbmFtZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2Vs
ZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9uYW1lKFdl
YktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfa2V5Z2VuX3R5cGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfa2V5Z2VuX3R5cGUoV2ViS2l0
RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9r
ZXlnZW5fZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0
bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9n
ZXRfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVmFs
aWRpdHlTdGF0ZSoKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfdmFsaWRpdHko
V2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01I
VE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2tleWdl
bl9lbGVtZW50X2dldF9sYWJlbHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVM
aXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TU5vZGVMaXN0Kgord2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9sYWJlbHMoV2Vi
S2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYg
LyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5ZGQ0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudFByaXZhdGVfaAorCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MS2V5Z2VuRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUhUTUxLZXlnZW5FbGVtZW50KiB3cmFwSFRNTEtleWdlbkVsZW1lbnQoV2ViQ29yZTo6SFRN
TEtleWdlbkVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTEtleWdlbkVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxMSUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTElFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U3ZTcwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MTElFbGVtZW50LmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxMSUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01IVE1MTElFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTExJRWxlbWVudCog
a2l0KFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX0xJX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7
Cit9CisKK1dlYkNvcmU6OkhUTUxMSUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTExJRWxlbWVu
dCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxMSUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01IVE1MTElFbGVtZW50KiB3cmFwSFRNTExJRWxlbWVudChXZWJD
b3JlOjpIVE1MTElFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0xJX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9IVE1MX0xJX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOwor
ICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6
SFRNTExJRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMSUVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVU
YXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFt
ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfbGlfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRU
YXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwg
Z2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTElFbGVtZW50KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExJRWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTElFbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExJRWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6
OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJn
ZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2Rv
bV9odG1sX2xpX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9s
aXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsK
KyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2xpX2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09E
RShXZWJLaXRET01IVE1MTElFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudCwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9E
T01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitl
bnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfVkFMVUUsCit9Owor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTElFbGVtZW50KiBzZWxmID0gV0VC
S0lUX0RPTV9IVE1MX0xJX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlfZWxl
bWVudF9zZXRfdHlwZV9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9saV9lbGVtZW50X3NldF92YWx1ZShzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTElFbGVtZW50KiBzZWxm
ID0gV0VCS0lUX0RPTV9IVE1MX0xJX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdHlwZV9hdHRyKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdmFsdWUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1l
bnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MTElFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0
bWxfbGlfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MTElFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxMSUVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAidmFsdWUi
LAorICAgICAgICAgICAgIkhUTUxMSUVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2xvbmcgSFRNTExJRWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICBHX01JTkxPTkcs
IEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9pbml0KFdlYktpdERP
TUhUTUxMSUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJL
aXRET01IVE1MTElFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTElfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExJRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9saV9lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTExJRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9MSV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTElFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6dHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2Rv
bV9odG1sX2xpX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxMSUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSV9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MTElFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6dmFsdWVBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9saV9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01IVE1MTElFbGVtZW50KiBz
ZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTExJRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnZhbHVlQXR0ciwgdmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjUwMDZmODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVsZW1lbnQuaApA
QCAtMCwwICsxLDkwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MTElFbGVtZW50X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NSFRNTExJRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21f
aHRtbF9saV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MSV9F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX0xJX0VMRU1FTlQsIFdlYktpdERPTUhUTUxMSUVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTElfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MTElFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9MSV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfTElfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSV9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0xJX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTElfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTExJRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MTElF
bGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxMSUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxMSUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRE
T01IVE1MTElFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlfZWxl
bWVudF9zZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMSUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2xpX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MTElFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saV9l
bGVtZW50X2dldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTElFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2Rv
bV9odG1sX2xpX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxMSUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X3NldF92YWx1ZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTElFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X3NldF92YWx1
ZShXZWJLaXRET01IVE1MTElFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTElFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTExJRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExJRWxlbWVudFByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWViMjdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MTElFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTExJRWxl
bWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTElFbGVtZW50UHJpdmF0ZV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxMSUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTExJRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TUhUTUxMSUVsZW1lbnQqIHdyYXBIVE1MTElFbGVtZW50KFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQq
KTsKK1dlYktpdERPTUhUTUxMSUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTElFbGVtZW50Kik7
CitXZWJDb3JlOjpIVE1MTElFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxMSUVsZW1lbnQqKTsK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTExJRWxlbWVu
dFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTExhYmVsRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzA3ZTRiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudC5jcHAK
QEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxMYWJlbEVs
ZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MTGFiZWxFbGVt
ZW50KiBraXQoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBX
RUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9k
ZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogY29yZShXZWJLaXRE
T01IVE1MTGFiZWxFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQq
IHdyYXBIVE1MTGFiZWxFbGVtZW50KFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfTEFCRUxfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEFCRUxf
RUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9sYWJl
bF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0
Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9s
YWJlbF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBo
YW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxMYWJlbEVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVu
dFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJr
aXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRk
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfbGFiZWxfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5F
X1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQsIHdlYmtpdF9kb21faHRt
bF9sYWJlbF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0ZPUk0sCisg
ICAgUFJPUF9IVE1MX0ZPUiwKKyAgICBQUk9QX0NPTlRST0wsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX0xBQkVMX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewor
ICAgIGNhc2UgUFJPUF9IVE1MX0ZPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2xhYmVsX2Vs
ZW1lbnRfc2V0X2h0bWxfZm9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9MQUJFTF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRk9STToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfZm9ybShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IVE1MX0ZPUjoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRf
Z2V0X2h0bWxfZm9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRS
T0w6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xh
YmVsX2VsZW1lbnRfZ2V0X2NvbnRyb2woc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1M
TGFiZWxFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
bGFiZWxfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJmb3JtIiwKKyAgICAgICAg
ICAgICJIVE1MTGFiZWxFbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxMYWJlbEVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IVE1MX0ZPUiwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJodG1sLWZvciIsCisgICAgICAgICAg
ICAiSFRNTExhYmVsRWxlbWVudDpodG1sLWZvciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTExhYmVsRWxlbWVudDpodG1sLWZvciIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05U
Uk9MLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRyb2wi
LAorICAgICAgICAgICAgIkhUTUxMYWJlbEVsZW1lbnQ6Y29udHJvbCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUhUTUxFbGVtZW50KiBIVE1MTGFiZWxFbGVtZW50OmNvbnRyb2wi
LAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9sYWJlbF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK1dlYktpdERPTUhUTUxGb3Jt
RWxlbWVudCogd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9N
SFRNTExhYmVsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0xBQkVMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvcm0oKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X2h0bWxfZm9yKFdlYktpdERPTUhUTUxMYWJl
bEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MQUJFTF9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpmb3JBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfbGFiZWxfZWxlbWVudF9zZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9MQUJFTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6Zm9yQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01I
VE1MRWxlbWVudCogd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X2NvbnRyb2woV2Vi
S2l0RE9NSFRNTExhYmVsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0xBQkVMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMYWJlbEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhU
TUxFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udHJvbCgpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5NjkzYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRv
bS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTGFi
ZWxFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9I
VE1MX0xBQkVMX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1l
bnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0xBQkVMX0VMRU1FTlQob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfTEFCRUxfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MQUJFTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xBQkVM
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX0xBQkVMX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEFCRUxfRUxFTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9MQUJFTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xBQkVM
X0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVOVF9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9MQUJFTF9FTEVNRU5ULCBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50Q2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxF
bGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTExhYmVs
RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50
X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50
X2dldF9mb3JtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCoKK3dlYmtpdF9kb21faHRt
bF9sYWJlbF9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dldF9odG1sX2ZvcjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9sYWJlbF9l
bGVtZW50X2dldF9odG1sX2ZvcihXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9zZXRfaHRtbF9mb3I6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9z
ZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxMYWJlbEVs
ZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MTGFiZWxFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdlYmVhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1l
bnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTExhYmVsRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTGFi
ZWxFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTExhYmVsRWxl
bWVudCogd3JhcEhUTUxMYWJlbEVsZW1lbnQoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCopOwor
V2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQq
KTsKK1dlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTExhYmVsRWxl
bWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1M
TGFiZWxFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1l
bnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI2ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MTGFiZWxFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRV
bnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRVbnN0YWJsZV9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfY29udHJvbDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF9s
YWJlbF9lbGVtZW50X2dldF9jb250cm9sKFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIHNlbGYp
OworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50VW5zdGFibGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMZWdlbmRF
bGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmI0NjMwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5jcHAKQEAgLTAsMCArMSwx
OTYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5h
bWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TUhUTUxMZWdlbmRFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqIG9iaikK
K3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UKGtpdChzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MTGVnZW5kRWxl
bWVudCogY29yZShXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0
RE9NSFRNTExlZ2VuZEVsZW1lbnQqIHdyYXBIVE1MTGVnZW5kRWxlbWVudChXZWJDb3JlOjpIVE1M
TGVnZW5kRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxFTUVOVChnX29iamVjdF9uZXcoV0VC
S0lUX0RPTV9UWVBFX0hUTUxfTEVHRU5EX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2
ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdl
YkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTExlZ2VuZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
SFRNTExlZ2VuZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
TGVnZW5kRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7
CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVt
ZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNl
LT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJL
aXRET01IVE1MTGVnZW5kRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50LCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lU
X0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0ZPUk0sCisgICAgUFJPUF9BTElHTiwKK307
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9zZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xl
Z2VuZF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhU
TUxMZWdlbmRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRk9STToK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGVnZW5k
X2VsZW1lbnRfZ2V0X2Zvcm0oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9sZWdlbmRfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9N
SFRNTExlZ2VuZEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9z
ZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZP
Uk0sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisg
ICAgICAgICAgICAiSFRNTExlZ2VuZEVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogSFRNTExlZ2VuZEVsZW1lbnQ6Zm9ybSIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAgICAg
ICAgICAiSFRNTExlZ2VuZEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxMZWdlbmRFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50
KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X2Zvcm0o
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9MRUdFTkRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExl
Z2VuZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZv
cm0oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRE
T01IVE1MTGVnZW5kRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0xFR0VORF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGVnZW5kRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhU
TUxMZWdlbmRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0xFR0VORF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxM
ZWdlbmRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVlZGVk
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuaApAQCAtMCwwICsx
LDgxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudF9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9k
b21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfTEVHRU5EX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEVHRU5EX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxMZWdlbmRFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0xFR0VORF9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVNRU5ULCBXZWJLaXRET01IVE1MTGVnZW5kRWxl
bWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTEVHRU5EX0VMRU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfTEVHRU5EX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTEVH
RU5EX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEVHRU5EX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfTEVHRU5EX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEVHRU5EX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxMZWdlbmRFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxM
ZWdlbmRFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfZm9ybToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dl
dF9mb3JtKFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxMZWdlbmRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfYWxpZ24o
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9sZWdlbmRfZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TExlZ2VuZEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01I
VE1MTGVnZW5kRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50X2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMZWdlbmRFbGVt
ZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZWFhMzUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTExl
Z2VuZEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTExlZ2VuZEVsZW1l
bnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudCogd3JhcEhU
TUxMZWdlbmRFbGVtZW50KFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Kik7CitXZWJLaXRET01I
VE1MTGVnZW5kRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Kik7CitXZWJD
b3JlOjpIVE1MTGVnZW5kRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudCop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTGVnZW5k
RWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MTGlua0VsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjllNjAwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudC5j
cHAKQEAgLTAsMCArMSw2MDIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTGlua0VsZW1lbnQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxMaW5rRWxlbWVu
dFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxMaW5rRWxlbWVudCog
a2l0KFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRf
RE9NX0hUTUxfTElOS19FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2Jq
KSkpOworfQorCitXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiB3cmFwSFRNTExp
bmtFbGVtZW50KFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9MSU5LX0VMRU1F
TlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0xJTktfRUxFTUVOVCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdz
KCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sK
KyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhU
TUxMaW5rRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudCwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9F
VkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAg
ICBQUk9QXzAsCisgICAgUFJPUF9ESVNBQkxFRCwKKyAgICBQUk9QX0NIQVJTRVQsCisgICAgUFJP
UF9IUkVGLAorICAgIFBST1BfSFJFRkxBTkcsCisgICAgUFJPUF9NRURJQSwKKyAgICBQUk9QX1JF
TCwKKyAgICBQUk9QX1JFViwKKyAgICBQUk9QX1NJWkVTLAorICAgIFBST1BfVEFSR0VULAorICAg
IFBST1BfVFlQRSwKKyAgICBQUk9QX0FTLAorICAgIFBST1BfQ1JPU1NfT1JJR0lOLAorICAgIFBS
T1BfU0hFRVQsCisgICAgUFJPUF9SRUxfTElTVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0xJTktf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9k
aXNhYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9DSEFSU0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19l
bGVtZW50X3NldF9jaGFyc2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFJFRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9zZXRfaHJlZihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUZMQU5HOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9ocmVmbGFuZyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FRElBOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9tZWRpYShzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfcmVsKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVWOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9yZXYoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJH
RVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3RhcmdldChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3R5cGVf
YXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0FTOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3Nl
dF9hcyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NST1NTX09SSUdJTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2xpbmtf
ZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVu
dF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTGlua0VsZW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTElOS19FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0
X2Rpc2FibGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIQVJTRVQ6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfZ2V0X2NoYXJzZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSFJFRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9nZXRfaHJlZihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9IUkVGTEFORzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfaHJlZmxhbmcoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTUVESUE6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X21lZGlhKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmVsKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFVjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmV2KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkVTOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3NpemVz
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9n
ZXRfdGFyZ2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfZ2V0X3R5cGVfYXR0cihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9BUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9nZXRfYXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfQ1JPU1NfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9jcm9zc19vcmlnaW4oc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU0hFRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2hlZXQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVMX0xJU1Q6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmVsX2xp
c3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xp
bmtfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudENsYXNzKiByZXF1
ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNz
LT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9wcm9wZXJ0
eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNBQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jv
b2xlYW4oCisgICAgICAgICAgICAiZGlzYWJsZWQiLAorICAgICAgICAgICAgIkhUTUxMaW5rRWxl
bWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MTGlu
a0VsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hBUlNFVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaGFyc2V0IiwKKyAgICAgICAg
ICAgICJIVE1MTGlua0VsZW1lbnQ6Y2hhcnNldCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTExpbmtFbGVtZW50OmNoYXJzZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFJFRiwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJocmVmIiwKKyAgICAg
ICAgICAgICJIVE1MTGlua0VsZW1lbnQ6aHJlZiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTExpbmtFbGVtZW50OmhyZWYiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFJFRkxBTkcs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHJlZmxhbmciLAor
ICAgICAgICAgICAgIkhUTUxMaW5rRWxlbWVudDpocmVmbGFuZyIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTExpbmtFbGVtZW50OmhyZWZsYW5nIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX01FRElBLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1l
ZGlhIiwKKyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQ6bWVkaWEiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxMaW5rRWxlbWVudDptZWRpYSIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9SRUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicmVs
IiwKKyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQ6cmVsIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MTGlua0VsZW1lbnQ6cmVsIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JF
ViwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJyZXYiLAorICAg
ICAgICAgICAgIkhUTUxMaW5rRWxlbWVudDpyZXYiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxMaW5rRWxlbWVudDpyZXYiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0laRVMsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic2l6ZXMiLAorICAgICAg
ICAgICAgIkhUTUxMaW5rRWxlbWVudDpzaXplcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTURPTVRva2VuTGlzdCogSFRNTExpbmtFbGVtZW50OnNpemVzIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RBUkdFVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0YXJnZXQiLAorICAgICAgICAgICAgIkhUTUxM
aW5rRWxlbWVudDp0YXJnZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxM
aW5rRWxlbWVudDp0YXJnZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1M
TGlua0VsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTExp
bmtFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVMsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYXMiLAorICAgICAgICAgICAgIkhUTUxMaW5rRWxl
bWVudDphcyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTExpbmtFbGVtZW50
OmFzIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NST1NTX09SSUdJTiwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgIkhU
TUxMaW5rRWxlbWVudDpjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxMaW5rRWxlbWVudDpjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0hF
RVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic2hlZXQiLAor
ICAgICAgICAgICAgIkhUTUxMaW5rRWxlbWVudDpzaGVldCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTVN0eWxlU2hlZXQqIEhUTUxMaW5rRWxlbWVudDpzaGVldCIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUxfTElTVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJyZWwtbGlzdCIsCisgICAgICAgICAgICAi
SFRNTExpbmtFbGVtZW50OnJlbC1saXN0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NRE9NVG9rZW5MaXN0KiBIVE1MTGlua0VsZW1lbnQ6cmVsLWxpc3QiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxl
bWVudF9pbml0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2Rpc2FibGVk
KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNl
dEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIsIHZhbHVl
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2NoYXJzZXQo
V2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfTElOS19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0Vs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJzZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9jaGFyc2V0KFdlYktpdERP
TUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJzZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9ocmVmKFdlYktp
dERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6Omhy
ZWZBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X3NldF9ocmVmKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmhyZWZBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X2dldF9ocmVmbGFuZyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZmxhbmdBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19l
bGVtZW50X3NldF9ocmVmbGFuZyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
TGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpo
cmVmbGFuZ0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfZ2V0X21lZGlhKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptZWRpYUF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfc2V0X21lZGlhKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1lZGlhQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxl
bWVudF9nZXRfcmVsKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWxBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9yZWwoV2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVsQXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmV2KFdlYktp
dERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZXZBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9yZXYoV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmV2QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01E
T01Ub2tlbkxpc3QqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3NpemVzKFdlYktp
dERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01Ub2tl
bkxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zaXplcygpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRh
cmdldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfc2V0X3RhcmdldChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjp0YXJnZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6dHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfZ2V0X2FzKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphc0F0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0
X2FzKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFzQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfY3Jv
c3Nfb3JpZ2luKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNyb3NzT3JpZ2luKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRf
Y3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0Q3Jv
c3NPcmlnaW4oY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01TdHlsZVNoZWV0KiB3ZWJr
aXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9zaGVldChXZWJLaXRET01IVE1MTGlua0VsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3R5bGVTaGVldD4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNoZWV0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZWxfbGlzdChXZWJLaXRET01IVE1MTGlua0VsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NVG9rZW5MaXN0PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVsTGlzdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtF
bGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjNkYjhkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxl
bWVudC5oCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBp
bmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTGlua0VsZW1lbnRfaAorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTElOS19FTEVNRU5UICAgICAgICAg
ICAgKHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSU5LX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxMaW5rRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MSU5LX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfTElOS19FTEVNRU5ULCBXZWJLaXRET01IVE1MTGlua0VsZW1l
bnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9MSU5LX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVN
RU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0xJTktfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9M
SU5LX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTElOS19FTEVNRU5ULCBXZWJLaXRET01IVE1MTGlu
a0VsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50IHsKKyAg
ICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTUhUTUxMaW5rRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0
RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X3NldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9nZXRfY2hhcnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
TGlua0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfY2hhcnNldChXZWJLaXRET01I
VE1MTGlua0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfc2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9s
aW5rX2VsZW1lbnRfZ2V0X2hyZWY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9o
cmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlua19l
bGVtZW50X3NldF9ocmVmKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9o
cmVmbGFuZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9nZXRfaHJlZmxhbmcoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9ocmVmbGFuZzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVu
dF9zZXRfaHJlZmxhbmcoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X21l
ZGlhOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X2dldF9tZWRpYShXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X21lZGlhOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9tZWRp
YShXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmVsOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9y
ZWwoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X3NldF9yZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3JlbChXZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9nZXRfcmV2OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5r
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZXYoV2ViS2l0RE9NSFRNTExpbmtF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3Nl
dF9yZXY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfc2V0X3JldihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRf
dGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF90YXJnZXQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0
X3RhcmdldChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfdHlwZV9hdHRy
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbGlua19l
bGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF90eXBlX2F0dHI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0
X3R5cGVfYXR0cihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2hlZXQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01TdHlsZVNoZWV0CisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NU3R5bGVTaGVldCoKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3No
ZWV0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MTGlua0VsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MTGlua0VsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudFByaXZhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUwZGY3ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTExpbmtF
bGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudFByaXZhdGVf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTGlua0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
V2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiB3cmFwSFRNTExpbmtFbGVtZW50KFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudCopOworV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGNvcmUoV2ViS2l0
RE9NSFRNTExpbmtFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxMaW5rRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MTGlua0VsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnRVbnN0YWJsZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjcwNjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSw5OSBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTGlu
a0VsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudFVuc3Rh
YmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUN1c3RvbVVuc3RhYmxlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3NpemVzOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTURPTVRva2VuTGlzdCoKK3dlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfZ2V0X3NpemVzKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfYXM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X2dldF9hcyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2FzOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X3NldF9hcyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxl
bWVudF9nZXRfY3Jvc3Nfb3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9n
ZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X3NldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfZ2V0X3JlbF9saXN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxM
aW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9N
RE9NVG9rZW5MaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTURPTVRva2VuTGlzdCoKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0
X3JlbF9saXN0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxMaW5rRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE1hcEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiYmQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE1hcEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TE1hcEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTWFwRWxlbWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxNYXBFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TE1hcEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01BUF9FTEVN
RU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3Jl
OjpIVE1MTWFwRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWFwRWxlbWVudCogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNYXBFbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqIHdyYXBIVE1MTWFwRWxlbWVudChXZWJDb3JlOjpIVE1M
TWFwRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fSFRNTF9NQVBfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0hUTUxfTUFQX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBp
ZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxN
YXBFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1hcEVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJn
ZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlv
bihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfbWFwX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE1hcEVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRU
YXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0
X2RvbV9odG1sX21hcF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxf
bWFwX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJ
VEhfQ09ERShXZWJLaXRET01IVE1MTWFwRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX21hcF9lbGVt
ZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0Uo
V0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FSRUFTLAorICAgIFBST1BfTkFN
RSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9zZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTWFwRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9NQVBfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9tYXBfZWxlbWVudF9zZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVu
dF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTWFwRWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9NQVBfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FSRUFTOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRfYXJlYXMo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9u
YW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9t
YXBfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxNYXBFbGVtZW50Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9wcm9wZXJ0eTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9BUkVBUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJhcmVhcyIsCisgICAgICAgICAgICAiSFRNTE1hcEVsZW1lbnQ6YXJlYXMi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogSFRNTE1h
cEVsZW1lbnQ6YXJlYXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVD
VElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
bmFtZSIsCisgICAgICAgICAgICAiSFRNTE1hcEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTE1hcEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MTWFwRWxlbWVu
dCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK1dlYktpdERP
TUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X2FyZWFzKFdl
YktpdERPTUhUTUxNYXBFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTUFQX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29s
bGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmFyZWFzKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MTWFwRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUF9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5n
ZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX21hcF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01B
UF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWFwRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE1hcEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yNGYwOTI1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TE1hcEVsZW1lbnQuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1M
TWFwRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxNYXBFbGVtZW50X2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX01BUF9FTEVNRU5UICAgICAg
ICAgICAgKHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUFQX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxNYXBFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01BUF9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9IVE1MX01BUF9FTEVNRU5ULCBXZWJLaXRET01IVE1MTWFwRWxlbWVudENs
YXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTUFQX0VMRU1FTlQob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TUFQX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTUFQX0VMRU1FTlRfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfTUFQX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfTUFQX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNYXBFbGVtZW50Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxNYXBFbGVtZW50IHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxN
YXBFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50
X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9n
ZXRfYXJlYXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2h0bWxfbWFw
X2VsZW1lbnRfZ2V0X2FyZWFzKFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9uYW1lKFdl
YktpdERPTUhUTUxNYXBFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
bWFwX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX21hcF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTE1hcEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVu
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0NDJlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TE1hcEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTWFwRWxlbWVudFByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01IVE1MTWFwRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MTWFwRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
TWFwRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxNYXBFbGVt
ZW50KiB3cmFwSFRNTE1hcEVsZW1lbnQoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqKTsKK1dlYktp
dERPTUhUTUxNYXBFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqKTsKK1dlYkNv
cmU6OkhUTUxNYXBFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxNYXBFbGVtZW50Kik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxNYXBFbGVtZW50UHJp
dmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxNYXJxdWVlRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOTZmMjQ4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmNw
cApAQCAtMCwwICsxLDU0MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxNYXJxdWVlRWxl
bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TE1hcnF1ZWVFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9NQVJR
VUVFX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisK
K1dlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHdyYXBIVE1M
TWFycXVlZUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01B
UlFVRUVfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUFSUVVFRV9F
TEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21hcnF1
ZWVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBX
ZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2
ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX21hcnF1ZWVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpIVE1MTWFycXVlZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MTWFycXVlZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNw
YXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRf
bGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3JlbW92ZV9ldmVudF9s
aXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTE1hcnF1
ZWVFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VW
RU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAg
IFBST1BfMCwKKyAgICBQUk9QX0JFSEFWSU9SLAorICAgIFBST1BfQkdfQ09MT1IsCisgICAgUFJP
UF9ESVJFQ1RJT04sCisgICAgUFJPUF9IRUlHSFQsCisgICAgUFJPUF9IU1BBQ0UsCisgICAgUFJP
UF9MT09QLAorICAgIFBST1BfU0NST0xMX0FNT1VOVCwKKyAgICBQUk9QX1NDUk9MTF9ERUxBWSwK
KyAgICBQUk9QX1RSVUVfU1BFRUQsCisgICAgUFJPUF9WU1BBQ0UsCisgICAgUFJPUF9XSURUSCwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX01BUlFVRUVfRUxFTUVOVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0JFSEFWSU9SOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9iZWhhdmlvcihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JH
X0NPTE9SOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9iZ19j
b2xvcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0RJUkVDVElPTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVf
ZWxlbWVudF9zZXRfZGlyZWN0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9oZWlnaHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IU1BBQ0U6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2hzcGFjZShzZWxmLCBnX3ZhbHVl
X2dldF91bG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9PUDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfbG9vcChzZWxmLCBn
X3ZhbHVlX2dldF9sb25nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TQ1JPTExfQU1PVU5UOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X3NldF9zY3JvbGxfYW1vdW50KHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExfREVMQVk6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3Njcm9sbF9kZWxheShzZWxmLCBnX3Zh
bHVlX2dldF91bG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFJV
RV9TUEVFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfdHJ1
ZV9zcGVlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WU1BBQ0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tYXJxdWVl
X2VsZW1lbnRfc2V0X3ZzcGFjZShzZWxmLCBnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9tYXJxdWVlX2VsZW1lbnRfc2V0X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVf
ZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUFSUVVFRV9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQkVIQVZJT1I6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfZ2V0X2JlaGF2aW9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0JHX0NPTE9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9iZ19jb2xvcihzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVJFQ1RJT046CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2RpcmVjdGlv
bihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1l
bnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IU1BB
Q0U6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFy
cXVlZV9lbGVtZW50X2dldF9oc3BhY2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTE9PUDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfbG9vcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9TQ1JPTExfQU1PVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfc2Nyb2xsX2Ftb3VudChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExfREVMQVk6CisgICAgICAg
IGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50
X2dldF9zY3JvbGxfZGVsYXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VFJVRV9TUEVFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfdHJ1ZV9zcGVlZChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9WU1BBQ0U6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF92c3BhY2Uoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3dpZHRo
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9n
ZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkVIQVZJT1IsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYmVoYXZpb3IiLAorICAgICAgICAgICAgIkhU
TUxNYXJxdWVlRWxlbWVudDpiZWhhdmlvciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTE1hcnF1ZWVFbGVtZW50OmJlaGF2aW9yIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JHX0NP
TE9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImJnLWNvbG9y
IiwKKyAgICAgICAgICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNYXJxdWVlRWxlbWVudDpiZy1jb2xvciIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9ESVJFQ1RJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiZGlyZWN0aW9uIiwKKyAgICAgICAgICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6
ZGlyZWN0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTWFycXVlZUVs
ZW1lbnQ6ZGlyZWN0aW9uIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAgIkhU
TUxNYXJxdWVlRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxNYXJxdWVlRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFNQQUNFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiaHNwYWNlIiwKKyAgICAg
ICAgICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGd1bG9uZyBIVE1MTWFycXVlZUVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAgICAgIDAsIEdf
TUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTE9PUCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAg
ICAgICAibG9vcCIsCisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVFbGVtZW50Omxvb3AiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTE1hcnF1ZWVFbGVtZW50Omxvb3AiLAorICAg
ICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NST0xMX0FNT1VOVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgInNjcm9sbC1hbW91bnQiLAorICAg
ICAgICAgICAgIkhUTUxNYXJxdWVlRWxlbWVudDpzY3JvbGwtYW1vdW50IiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGd1bG9uZyBIVE1MTWFycXVlZUVsZW1lbnQ6c2Nyb2xsLWFtb3VudCIsCisg
ICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTF9ERUxBWSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgInNjcm9sbC1kZWxheSIsCisgICAgICAgICAg
ICAiSFRNTE1hcnF1ZWVFbGVtZW50OnNjcm9sbC1kZWxheSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBndWxvbmcgSFRNTE1hcnF1ZWVFbGVtZW50OnNjcm9sbC1kZWxheSIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1RSVUVfU1BFRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgInRydWUtc3BlZWQiLAorICAgICAgICAgICAgIkhUTUxNYXJx
dWVlRWxlbWVudDp0cnVlLXNwZWVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFu
IEhUTUxNYXJxdWVlRWxlbWVudDp0cnVlLXNwZWVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZT
UEFDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgInZzcGFjZSIs
CisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVFbGVtZW50OnZzcGFjZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBndWxvbmcgSFRNTE1hcnF1ZWVFbGVtZW50OnZzcGFjZSIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6
d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNYXJxdWVlRWxlbWVu
dDp3aWR0aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X2luaXQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVO
VVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X3N0YXJ0KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c3RhcnQoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3N0
b3AoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNYXJx
dWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zdG9wKCk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9iZWhhdmlv
cihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YmVoYXZpb3JBdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9i
ZWhhdmlvcihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVl
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpiZWhh
dmlvckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9t
YXJxdWVlX2VsZW1lbnRfZ2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpi
Z2NvbG9yQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdjb2xvckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2RpcmVjdGlvbihXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJx
dWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlyZWN0aW9uQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfZGlyZWN0
aW9uKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpcmVjdGlv
bkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVpZ2h0
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJR
VUVFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmhlaWdodEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ3Vsb25nIHdl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2hzcGFjZShXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJR
VUVFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0
VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhzcGFjZUF0dHIp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVf
ZWxlbWVudF9zZXRfaHNwYWNlKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ3Vs
b25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6aHNwYWNlQXR0ciwgdmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9t
X2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9sb29wKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmxvb3AoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
c2V0X2xvb3AoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7Cisg
ICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldExvb3Ao
dmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X2dldF9zY3JvbGxfYW1vdW50KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5zY3JvbGxBbW91bnQoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
c2V0X3Njcm9sbF9hbW91bnQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBndWxv
bmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChz
ZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNjcm9sbEFtb3VudCh2YWx1ZSk7Cit9CisKK2d1bG9u
ZyB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9zY3JvbGxfZGVsYXkoV2ViS2l0
RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVl
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9
IGl0ZW0tPnNjcm9sbERlbGF5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9zY3JvbGxfZGVsYXkoV2ViS2l0RE9NSFRN
TE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1
ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNjcm9s
bERlbGF5KHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxl
bWVudF9nZXRfdHJ1ZV9zcGVlZChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRydWVzcGVlZEF0dHIpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVu
dF9zZXRfdHJ1ZV9zcGVlZChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6dHJ1ZXNwZWVkQXR0ciwgdmFsdWUpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9nZXRfdnNwYWNlKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5nZXRVbnNpZ25lZEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6dnNwYWNlQXR0cik7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF92
c3BhY2UoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
Ojp2c3BhY2VBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVl
ZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lkdGhBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVl
ZV9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjp3aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU0YTYwMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18p
ICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dl
YmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYg
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE1hcnF1
ZWVFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9I
VE1MX01BUlFVRUVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NQVJRVUVFX0VMRU1F
TlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfTUFSUVVFRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUFSUVVFRV9FTEVNRU5UX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX01BUlFVRUVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50Q2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TUFSUVVFRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxF
TUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9NQVJRVUVFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfTUFSUVVFRV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01BUlFVRUVfRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTE1hcnF1ZWVFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxNYXJx
dWVlRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRDbGFzcyB7CisgICAgV2Vi
S2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc3RhcnQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc3RhcnQoV2ViS2l0RE9NSFRNTE1hcnF1
ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X3N0b3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc3Rv
cChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE1hcnF1ZWVFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0OWM3MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0
RE9NSFRNTE1hcnF1ZWVFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxNYXJx
dWVlRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWFycXVlZUVsZW1l
bnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50Lmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiB3cmFw
SFRNTE1hcnF1ZWVFbGVtZW50KFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCopOworV2ViS2l0
RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50Kik7
CitXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1hcnF1ZWVF
bGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVl
ZUVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRVbnN0YWJsZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODIzMDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSwyNjYgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1h
cnF1ZWVFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWFycXVlZUVsZW1l
bnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5f
REVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9iZWhh
dmlvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2JlaGF2aW9y
KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfYmVoYXZpb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfc2V0X2JlaGF2aW9yKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVl
ZV9lbGVtZW50X2dldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVl
ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2Vs
ZW1lbnRfZ2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfYmdfY29sb3I6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9kaXJlY3Rpb246CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9kaXJlY3Rpb24oV2ViS2l0RE9NSFRNTE1hcnF1
ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X3NldF9kaXJlY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2Rp
cmVjdGlvbihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfaGVp
Z2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfaGVpZ2h0KFdl
YktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1l
bnRfZ2V0X2hzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dl
dF9oc3BhY2UoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9oc3BhY2U6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2d1bG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X3NldF9oc3BhY2UoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
KiBzZWxmLCBndWxvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVl
X2VsZW1lbnRfZ2V0X2xvb3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
Z2V0X2xvb3AoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9sb29wOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2xvb3AoV2ViS2l0RE9NSFRN
TE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3Njcm9sbF9hbW91bnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGd1bG9uZword2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfc2Nyb2xsX2Ftb3Vu
dChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3Njcm9sbF9hbW91bnQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2d1bG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X3NldF9zY3JvbGxfYW1vdW50KFdlYktpdERPTUhUTUxNYXJxdWVl
RWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
bWFycXVlZV9lbGVtZW50X2dldF9zY3JvbGxfZGVsYXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9nZXRfc2Nyb2xsX2RlbGF5KFdlYktpdERPTUhUTUxNYXJxdWVlRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9z
ZXRfc2Nyb2xsX2RlbGF5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVu
dAorICogQHZhbHVlOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfc2Ny
b2xsX2RlbGF5KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF90cnVlX3Nw
ZWVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF90cnVl
X3NwZWVkKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfdHJ1ZV9zcGVlZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfdHJ1ZV9zcGVlZChXZWJLaXRET01IVE1MTWFycXVl
ZUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X2dldF92c3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9nZXRfdnNwYWNlKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfdnNwYWNl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICogQHZhbHVlOiBB
ICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfdnNwYWNlKFdlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfd2lk
dGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYg
LyogV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwZGQwNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNTEwIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBv
cnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudE1lZGlh
U2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU1lZGlhRXJyb3JQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9NRURJ
QV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogd3JhcEhUTUxNZWRpYUVsZW1l
bnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJQV9FTEVNRU5ULCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShl
dmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBk
ZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVT
RURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRs
ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVO
QUJMRShWSURFTykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VD
YXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUp
OworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVy
ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZh
Y2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBp
ZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudCwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9FUlJPUiwKKyAgICBQUk9QX1NSQywKKyAg
ICBQUk9QX0NVUlJFTlRfU1JDLAorICAgIFBST1BfQ1JPU1NfT1JJR0lOLAorICAgIFBST1BfTkVU
V09SS19TVEFURSwKKyAgICBQUk9QX1BSRUxPQUQsCisgICAgUFJPUF9CVUZGRVJFRCwKKyAgICBQ
Uk9QX1JFQURZX1NUQVRFLAorICAgIFBST1BfU0VFS0lORywKKyAgICBQUk9QX0NVUlJFTlRfVElN
RSwKKyAgICBQUk9QX0RVUkFUSU9OLAorICAgIFBST1BfUEFVU0VELAorICAgIFBST1BfREVGQVVM
VF9QTEFZQkFDS19SQVRFLAorICAgIFBST1BfUExBWUJBQ0tfUkFURSwKKyAgICBQUk9QX1BMQVlF
RCwKKyAgICBQUk9QX1NFRUtBQkxFLAorICAgIFBST1BfRU5ERUQsCisgICAgUFJPUF9BVVRPUExB
WSwKKyAgICBQUk9QX0xPT1AsCisgICAgUFJPUF9DT05UUk9MUywKKyAgICBQUk9QX1ZPTFVNRSwK
KyAgICBQUk9QX01VVEVELAorICAgIFBST1BfREVGQVVMVF9NVVRFRCwKKyAgICBQUk9QX1dFQktJ
VF9QUkVTRVJWRVNfUElUQ0gsCisgICAgUFJPUF9XRUJLSVRfSEFTX0NMT1NFRF9DQVBUSU9OUywK
KyAgICBQUk9QX1dFQktJVF9DTE9TRURfQ0FQVElPTlNfVklTSUJMRSwKKyAgICBQUk9QX1dFQktJ
VF9BVURJT19ERUNPREVEX0JZVEVfQ09VTlQsCisgICAgUFJPUF9XRUJLSVRfVklERU9fREVDT0RF
RF9CWVRFX0NPVU5ULAorICAgIFBST1BfTUVESUFfR1JPVVAsCisgICAgUFJPUF9DT05UUk9MTEVS
LAorICAgIFBST1BfV0VCS0lUX0NVUlJFTlRfUExBWUJBQ0tfVEFSR0VUX0lTX1dJUkVMRVNTLAor
ICAgIFBST1BfS0lORCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNv
bnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3NyYyhzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NST1NT
X09SSUdJTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2Nyb3Nz
X29yaWdpbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1BSRUxPQUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X3NldF9wcmVsb2FkKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VSUkVOVF9USU1FOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfY3VycmVudF90aW1lKHNlbGYsIGdfdmFsdWVfZ2V0
X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVGQVVMVF9QTEFZQkFDS19SQVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9zZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExBWUJBQ0tfUkFURToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3BsYXliYWNrX3JhdGUoc2Vs
ZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9BVVRPUExBWToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0
X2F1dG9wbGF5KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0xPT1A6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X3NldF9sb29wKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRST0xTOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9zZXRfY29udHJvbHMoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVk9MVU1FOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfdm9sdW1lKHNlbGYsIGdfdmFsdWVfZ2V0
X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TVVURUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9tdXRlZChz
ZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9ERUZBVUxUX01VVEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9zZXRfZGVmYXVsdF9tdXRlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfUFJFU0VSVkVTX1BJVENIOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfd2Via2l0X3ByZXNlcnZl
c19waXRjaChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9XRUJLSVRfQ0xPU0VEX0NBUFRJT05TX1ZJU0lCTEU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF93ZWJraXRfY2xvc2VkX2NhcHRpb25z
X3Zpc2libGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTUVESUFfR1JPVVA6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X3NldF9tZWRpYV9ncm91cChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0tJTkQ6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9raW5kKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRVJST1I6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZ2V0X2Vycm9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NS
QzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfZ2V0X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9DVVJSRU5UX1NSQzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2N1cnJlbnRfc3JjKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NST1NTX09SSUdJTjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2Nyb3NzX29y
aWdpbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ORVRXT1JLX1NUQVRF
OgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfbmV0d29ya19zdGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9QUkVMT0FEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcHJlbG9hZChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9CVUZGRVJFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfYnVmZmVyZWQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVBRFlfU1RBVEU6CisgICAgICAgIGdf
dmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9y
ZWFkeV9zdGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUVLSU5H
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfc2Vla2luZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DVVJSRU5UX1RJTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2N1cnJlbnRfdGltZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EVVJBVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRf
ZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZHVyYXRpb24o
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFVU0VEOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9n
ZXRfcGF1c2VkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRf
UExBWUJBQ0tfUkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BMQVlCQUNLX1JBVEU6CisgICAgICAgIGdf
dmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X3BsYXliYWNrX3JhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExB
WUVEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X2dldF9wbGF5ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU0VFS0FCTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3NlZWthYmxlKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0VOREVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZW5kZWQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT1BMQVk6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9hdXRvcGxh
eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT09QOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9n
ZXRfbG9vcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05UUk9MUzoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfZ2V0X2NvbnRyb2xzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1ZPTFVNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfdm9sdW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX01VVEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbXV0ZWQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9NVVRFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2RlZmF1bHRf
bXV0ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX1BSRVNF
UlZFU19QSVRDSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9wcmVzZXJ2ZXNfcGl0Y2goc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0hBU19DTE9TRURfQ0FQVElPTlM6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2dldF93ZWJraXRfaGFzX2Nsb3NlZF9jYXB0aW9ucyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfQ0xPU0VEX0NBUFRJT05TX1ZJU0lCTEU6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X2dldF93ZWJraXRfY2xvc2VkX2NhcHRpb25zX3Zpc2libGUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0FVRElPX0RFQ09ERURfQllURV9DT1VOVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X2dldF93ZWJraXRfYXVkaW9fZGVjb2RlZF9ieXRlX2NvdW50KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9WSURFT19ERUNPREVEX0JZVEVfQ09VTlQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfd2Via2l0X3ZpZGVvX2RlY29kZWRfYnl0ZV9jb3VudChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRURJQV9HUk9VUDoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X21lZGlh
X2dyb3VwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRST0xMRVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfZ2V0X2NvbnRyb2xsZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfV0VCS0lUX0NVUlJFTlRfUExBWUJBQ0tfVEFSR0VUX0lTX1dJUkVMRVNTOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9nZXRfd2Via2l0X2N1cnJlbnRfcGxheWJhY2tfdGFyZ2V0X2lzX3dpcmVsZXNzKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0tJTkQ6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9raW5kKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudENsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0VSUk9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgImVycm9yIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmVy
cm9yIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTWVkaWFFcnJvciogSFRNTE1l
ZGlhRWxlbWVudDplcnJvciIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfRVJS
T1IsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9TUkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3Jj
IiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTE1lZGlhRWxlbWVudDpzcmMiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Q1VSUkVOVF9TUkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
Y3VycmVudC1zcmMiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6Y3VycmVudC1zcmMi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTE1lZGlhRWxlbWVudDpjdXJyZW50
LXNyYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NST1NTX09SSUdJTiwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgIkhU
TUxNZWRpYUVsZW1lbnQ6Y3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MTWVkaWFFbGVtZW50OmNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9O
RVRXT1JLX1NUQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAgICAgICJu
ZXR3b3JrLXN0YXRlIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50Om5ldHdvcmstc3Rh
dGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBndXNob3J0IEhUTUxNZWRpYUVsZW1lbnQ6bmV0
d29yay1zdGF0ZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QUkVMT0FELAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInByZWxvYWQiLAorICAgICAg
ICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6cHJlbG9hZCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTE1lZGlhRWxlbWVudDpwcmVsb2FkIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JV
RkZFUkVELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImJ1ZmZl
cmVkIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmJ1ZmZlcmVkIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGltZVJhbmdlcyogSFRNTE1lZGlhRWxlbWVudDpidWZm
ZXJlZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVElNRV9SQU5HRVMsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUFEWV9T
VEFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAgICAgICAicmVhZHktc3Rh
dGUiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6cmVhZHktc3RhdGUiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBndXNob3J0IEhUTUxNZWRpYUVsZW1lbnQ6cmVhZHktc3RhdGUiLAor
ICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VFS0lORywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic2Vla2luZyIsCisgICAgICAgICAgICAiSFRNTE1l
ZGlhRWxlbWVudDpzZWVraW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRN
TE1lZGlhRWxlbWVudDpzZWVraW5nIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1VSUkVOVF9USU1F
LAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImN1cnJlbnQtdGlt
ZSIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpjdXJyZW50LXRpbWUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBIVE1MTWVkaWFFbGVtZW50OmN1cnJlbnQtdGltZSIs
CisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RVUkFUSU9OLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImR1cmF0aW9uIiwKKyAg
ICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmR1cmF0aW9uIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2RvdWJsZSBIVE1MTWVkaWFFbGVtZW50OmR1cmF0aW9uIiwKKyAgICAgICAgICAgIC1H
X01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVVTRUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgInBhdXNlZCIsCisgICAgICAgICAgICAiSFRNTE1lZGlh
RWxlbWVudDpwYXVzZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MTWVk
aWFFbGVtZW50OnBhdXNlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFRkFVTFRfUExBWUJBQ0tf
UkFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJkZWZhdWx0
LXBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6ZGVmYXVsdC1w
bGF5YmFjay1yYXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgSFRNTE1lZGlh
RWxlbWVudDpkZWZhdWx0LXBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxF
LCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9QTEFZQkFDS19SQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
ZG91YmxlKAorICAgICAgICAgICAgInBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgIkhUTUxN
ZWRpYUVsZW1lbnQ6cGxheWJhY2stcmF0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZG91
YmxlIEhUTUxNZWRpYUVsZW1lbnQ6cGxheWJhY2stcmF0ZSIsCisgICAgICAgICAgICAtR19NQVhE
T1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1BMQVlFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJwbGF5ZWQiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1l
bnQ6cGxheWVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGltZVJhbmdlcyog
SFRNTE1lZGlhRWxlbWVudDpwbGF5ZWQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RJ
TUVfUkFOR0VTLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfU0VFS0FCTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAg
ICAgICAgICAic2Vla2FibGUiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6c2Vla2Fi
bGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UaW1lUmFuZ2VzKiBIVE1MTWVk
aWFFbGVtZW50OnNlZWthYmxlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9USU1FX1JB
TkdFUywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0VOREVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAg
ICJlbmRlZCIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDplbmRlZCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxNZWRpYUVsZW1lbnQ6ZW5kZWQiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9BVVRPUExBWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisg
ICAgICAgICAgICAiYXV0b3BsYXkiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6YXV0
b3BsYXkiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE1lZGlhRWxlbWVu
dDphdXRvcGxheSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MT09QLAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJsb29wIiwKKyAgICAgICAgICAgICJIVE1MTWVk
aWFFbGVtZW50Omxvb3AiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE1l
ZGlhRWxlbWVudDpsb29wIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTlRST0xTLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjb250cm9scyIsCisgICAgICAg
ICAgICAiSFRNTE1lZGlhRWxlbWVudDpjb250cm9scyIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50OmNvbnRyb2xzIiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1ZPTFVNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJ2
b2x1bWUiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6dm9sdW1lIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdkb3VibGUgSFRNTE1lZGlhRWxlbWVudDp2b2x1bWUiLAorICAgICAg
ICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NVVRFRCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibXV0ZWQiLAorICAgICAgICAgICAgIkhU
TUxNZWRpYUVsZW1lbnQ6bXV0ZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4g
SFRNTE1lZGlhRWxlbWVudDptdXRlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX01V
VEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkZWZhdWx0
LW11dGVkIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmRlZmF1bHQtbXV0ZWQiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE1lZGlhRWxlbWVudDpkZWZhdWx0
LW11dGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9QUkVTRVJWRVNfUElUQ0gsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndlYmtpdC1wcmVzZXJ2
ZXMtcGl0Y2giLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6d2Via2l0LXByZXNlcnZl
cy1waXRjaCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVt
ZW50OndlYmtpdC1wcmVzZXJ2ZXMtcGl0Y2giLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lU
X0hBU19DTE9TRURfQ0FQVElPTlMsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAg
ICAgICAgICAgIndlYmtpdC1oYXMtY2xvc2VkLWNhcHRpb25zIiwKKyAgICAgICAgICAgICJIVE1M
TWVkaWFFbGVtZW50OndlYmtpdC1oYXMtY2xvc2VkLWNhcHRpb25zIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTE1lZGlhRWxlbWVudDp3ZWJraXQtaGFzLWNsb3NlZC1jYXB0
aW9ucyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9DTE9TRURfQ0FQVElPTlNfVklTSUJM
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2Via2l0LWNs
b3NlZC1jYXB0aW9ucy12aXNpYmxlIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50Ondl
YmtpdC1jbG9zZWQtY2FwdGlvbnMtdmlzaWJsZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Ym9vbGVhbiBIVE1MTWVkaWFFbGVtZW50OndlYmtpdC1jbG9zZWQtY2FwdGlvbnMtdmlzaWJsZSIs
CisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfQVVESU9fREVDT0RFRF9CWVRFX0NPVU5ULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAid2Via2l0LWF1ZGlvLWRl
Y29kZWQtYnl0ZS1jb3VudCIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDp3ZWJraXQt
YXVkaW8tZGVjb2RlZC1ieXRlLWNvdW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25n
IEhUTUxNZWRpYUVsZW1lbnQ6d2Via2l0LWF1ZGlvLWRlY29kZWQtYnl0ZS1jb3VudCIsCisgICAg
ICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX1ZJREVPX0RFQ09ERURfQllURV9DT1VO
VCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgIndlYmtpdC12aWRl
by1kZWNvZGVkLWJ5dGUtY291bnQiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6d2Vi
a2l0LXZpZGVvLWRlY29kZWQtYnl0ZS1jb3VudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1
bG9uZyBIVE1MTWVkaWFFbGVtZW50OndlYmtpdC12aWRlby1kZWNvZGVkLWJ5dGUtY291bnQiLAor
ICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FRElBX0dST1VQLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1lZGlhLWdyb3VwIiwKKyAgICAgICAgICAg
ICJIVE1MTWVkaWFFbGVtZW50Om1lZGlhLWdyb3VwIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MTWVkaWFFbGVtZW50Om1lZGlhLWdyb3VwIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NPTlRST0xMRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAi
Y29udHJvbGxlciIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpjb250cm9sbGVyIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBIVE1MTWVk
aWFFbGVtZW50OmNvbnRyb2xsZXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX01FRElB
X0NPTlRST0xMRVIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9XRUJLSVRfQ1VSUkVOVF9QTEFZQkFDS19UQVJHRVRfSVNfV0lSRUxFU1Ms
CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndlYmtpdC1jdXJy
ZW50LXBsYXliYWNrLXRhcmdldC1pcy13aXJlbGVzcyIsCisgICAgICAgICAgICAiSFRNTE1lZGlh
RWxlbWVudDp3ZWJraXQtY3VycmVudC1wbGF5YmFjay10YXJnZXQtaXMtd2lyZWxlc3MiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50OndlYmtpdC1jdXJy
ZW50LXBsYXliYWNrLXRhcmdldC1pcy13aXJlbGVzcyIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0tJ
TkQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAia2luZCIsCisg
ICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpraW5kIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MTWVkaWFFbGVtZW50OmtpbmQiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50
KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9sb2FkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmxvYWQoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9jYW5fcGxheV90eXBlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHR5cGUsIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VHlwZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0eXBlKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jYW5QbGF5VHlwZShjb252ZXJ0ZWRUeXBlKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVO
VVNFRF9QQVJBTSh0eXBlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3BhdXNlKFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnBhdXNlKCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2Zhc3Rfc2VlayhXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmLCBnZG91YmxlIHRpbWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmZh
c3RTZWVrKHRpbWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VE
X1BBUkFNKHRpbWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfd2Via2l0X3Nob3dfcGxheWJhY2tfdGFyZ2V0X3BpY2tlcihXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFC
TEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPndlYmtpdFNob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2lyZWxlc3MgUGxheWJhY2sgVGFyZ2V0IikKKyNlbmRp
ZiAvKiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAqLworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworV2ViS2l0RE9NTWVkaWFFcnJv
ciogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2Vycm9yKFdlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6TWVkaWFFcnJvcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmVycm9y
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICov
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfc3JjKFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICov
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5B
QkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0
ciwgY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2N1cnJlbnRfc3JjKFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jdXJyZW50U3JjKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5B
QkxFKFZJREVPKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lm
IEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Y3Jvc3NPcmlnaW4oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5B
QkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRD
cm9zc09yaWdpbihjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2d1c2hv
cnQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X25ldHdvcmtfc3RhdGUoV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
c2hvcnQgcmVzdWx0ID0gaXRlbS0+bmV0d29ya1N0YXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VzaG9ydD4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfZ2V0X3ByZWxvYWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnByZWxvYWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3ByZWxvYWQoV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
UHJlbG9hZChjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK1dlYktpdERP
TVRpbWVSYW5nZXMqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9idWZmZXJlZChX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5idWZmZXJlZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLworfQorCitndXNob3J0IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X2dldF9yZWFkeV9zdGF0ZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVtLT5yZWFkeVN0YXRl
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z3VzaG9ydD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfc2Vla2luZyhXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnNlZWtpbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21f
aHRtbF9tZWRpYV9lbGVtZW50X2dldF9jdXJyZW50X3RpbWUoV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0g
aXRlbS0+Y3VycmVudFRpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0
X2N1cnJlbnRfdGltZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZh
bHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgaXRlbS0+c2V0Q3VycmVudFRpbWUodmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8i
KQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfZHVyYXRpb24oV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCog
c2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+
ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8p
ICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9wYXVz
ZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5wYXVzZWQoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9v
bGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdk
b3VibGUgcmVzdWx0ID0gaXRlbS0+ZGVmYXVsdFBsYXliYWNrUmF0ZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3Vi
bGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdkb3VibGUgdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldERlZmF1bHRQbGF5YmFja1JhdGUodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwor
fQorCitnZG91YmxlIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9wbGF5YmFja19y
YXRlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnBsYXliYWNrUmF0ZSgpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdk
b3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRQbGF5YmFja1JhdGUodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitXZWJLaXRE
T01UaW1lUmFuZ2VzKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxheWVkKFdl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6VGltZVJhbmdlcz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnBsYXllZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5B
QkxFKFZJREVPKSAqLworfQorCitXZWJLaXRET01UaW1lUmFuZ2VzKiB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9nZXRfc2Vla2FibGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2Vz
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2Vla2FibGUoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8i
KQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2VuZGVkKFdlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+ZW5kZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfYXV0b3BsYXkoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9F
TEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b3Bs
YXlBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAq
LworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9hdXRvcGxheShX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2Vs
ZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmF1dG9wbGF5QXR0ciwgdmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbG9vcChXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpsb29wQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVO
QUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9z
ZXRfbG9vcChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VM
RU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6Omxvb3BBdHRyLCB2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jb250cm9scyhXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNvbnRyb2xzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9zZXRfY29udHJvbHMoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldENvbnRyb2xzKHZh
bHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2Vu
ZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfdm9sdW1lKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnZvbHVtZSgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfdm9sdW1lKFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRWb2x1bWUodmFs
dWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8K
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X211dGVkKFdl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bXV0ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X3NldF9tdXRlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0TXV0ZWQodmFs
dWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5k
aWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfZGVmYXVsdF9tdXRlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0
ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjptdXRlZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2RlZmF1
bHRfbXV0ZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjptdXRlZEF0dHIsIHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9wcmVzZXJ2ZXNf
cGl0Y2goV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53ZWJraXRQcmVzZXJ2ZXNQaXRj
aCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3dlYmtpdF9wcmVzZXJ2
ZXNfcGl0Y2goV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFdlYmtpdFByZXNlcnZlc1BpdGNoKHZhbHVl
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlm
IC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfZ2V0X3dlYmtpdF9oYXNfY2xvc2VkX2NhcHRpb25zKFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+d2Via2l0SGFzQ2xvc2VkQ2FwdGlvbnMoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVh
bj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X2Nsb3NlZF9jYXB0aW9uc192aXNpYmxl
KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2Via2l0Q2xvc2VkQ2FwdGlvbnNWaXNp
YmxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8K
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfd2Via2l0X2Nsb3Nl
ZF9jYXB0aW9uc192aXNpYmxlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRXZWJraXRDbG9zZWRDYXB0
aW9uc1Zpc2libGUodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitndWxvbmcgd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9hdWRpb19kZWNvZGVkX2J5dGVfY291
bnQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8p
CisjaWYgRU5BQkxFKE1FRElBX1NUQVRJU1RJQ1MpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVt
LT53ZWJraXRBdWRpb0RlY29kZWRCeXRlQ291bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiTWVkaWEgU3RhdGlzdGljcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9u
Zz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NUQVRJU1RJQ1MpICovCisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfZ2V0X3dlYmtpdF92aWRlb19kZWNvZGVkX2J5dGVfY291bnQoV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKE1FRElBX1NU
QVRJU1RJQ1MpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT53ZWJraXRWaWRlb0RlY29kZWRC
eXRlQ291bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgU3RhdGlz
dGljcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5B
QkxFKE1FRElBX1NUQVRJU1RJQ1MpICovCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X21lZGlhX2dyb3VwKFdl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWVkaWFncm91cEF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9zZXRfbWVkaWFfZ3JvdXAoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1lZGlhZ3JvdXBBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK1dlYktpdERPTU1lZGlhQ29udHJvbGxlciogd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2NvbnRyb2xsZXIoV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpNZWRpYUNvbnRyb2xsZXI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5j
b250cm9sbGVyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUo
VklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dl
dF93ZWJraXRfY3VycmVudF9wbGF5YmFja190YXJnZXRfaXNfd2lyZWxlc3MoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKFdJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01F
RElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PndlYmtpdEN1cnJlbnRQbGF5YmFja1RhcmdldElzV2lyZWxlc3MoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiV2lyZWxlc3MgUGxheWJhY2sgVGFyZ2V0IikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpICovCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfa2luZChXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoTUVESUFf
U0VTU0lPTikgJiYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
TUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50TWVkaWFTZXNzaW9uOjpraW5kKGl0
ZW0pKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisjaWYgIUVOQUJMRShWSURFTykKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisjZW5kaWYKKyNpZiAhRU5BQkxFKE1FRElBX1NFU1NJT04pCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgU2Vzc2lvbiIpCisjZW5kaWYKKyAgICBy
ZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU0VTU0lPTikgJiYgRU5BQkxFKFZJREVP
KSAqLworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJM
RShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRf
a2luZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKSAmJiBFTkFC
TEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb246OnNldEtpbmQoKml0ZW0sIGNvbnZlcnRlZFZhbHVl
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZSk7CisjaWYgIUVOQUJMRShWSURFTykKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisjZW5kaWYKKyNpZiAhRU5BQkxFKE1FRElBX1NFU1NJT04pCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgU2Vzc2lvbiIpCisjZW5kaWYKKyNl
bmRpZiAvKiBFTkFCTEUoTUVESUFfU0VTU0lPTikgJiYgRU5BQkxFKFZJREVPKSAqLworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxF
KFZJREVPKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjRkNmRiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQuaApAQCAt
MCwwICsxLDY2MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX01FRElBX0VMRU1F
TlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVE
SUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9NRURJQV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01FRElBX0VMRU1FTlQsIFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01F
RElBX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVESUFfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfSFRNTF9NRURJQV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01FRElBX0VMRU1FTlQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJQV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3MpKQorCisvKioKKyAqIFdFQktJ
VF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfRU1QVFk6CisgKi8KKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfTkVUV09SS19FTVBUWSAwCisKKy8qKgorICogV0VC
S0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfTkVUV09SS19JRExFOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfSURMRSAxCisKKy8qKgorICogV0VC
S0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfTkVUV09SS19MT0FESU5HOgorICovCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfTE9BRElORyAyCisKKy8qKgor
ICogV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfTkVUV09SS19OT19TT1VSQ0U6CisgKi8K
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfTkVUV09SS19OT19TT1VSQ0Ug
MworCisvKioKKyAqIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX0hBVkVfTk9USElORzoK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX05PVEhJTkcg
MAorCisvKioKKyAqIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX0hBVkVfTUVUQURBVEE6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfSEFWRV9NRVRBREFU
QSAxCisKKy8qKgorICogV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfSEFWRV9DVVJSRU5U
X0RBVEE6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfSEFWRV9D
VVJSRU5UX0RBVEEgMgorCisvKioKKyAqIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX0hB
VkVfRlVUVVJFX0RBVEE6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1F
TlRfSEFWRV9GVVRVUkVfREFUQSAzCisKKy8qKgorICogV0VCS0lUX0RPTV9IVE1MX01FRElBX0VM
RU1FTlRfSEFWRV9FTk9VR0hfREFUQToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVE
SUFfRUxFTUVOVF9IQVZFX0VOT1VHSF9EQVRBIDQKKworc3RydWN0IF9XZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0
RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9sb2FkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfbG9hZChXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9jYW5fcGxheV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQKKyAqIEB0eXBlOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfY2FuX3BsYXlfdHlwZShXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdHlwZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfcGF1c2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9wYXVzZShXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9m
YXN0X3NlZWs6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHRp
bWU6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZmFzdF9zZWVrKFdlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdkb3VibGUgdGltZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfd2Via2l0X3Nob3dfcGxheWJhY2tfdGFyZ2V0X3BpY2tl
cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X3dlYmtpdF9zaG93X3BsYXliYWNrX3RhcmdldF9waWNrZXIoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZ2V0X2Vycm9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU1lZGlhRXJyb3IK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTWVk
aWFFcnJvcioKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9lcnJvcihXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dl
dF9zcmMoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X3NldF9zcmMoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3Vy
cmVudF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2N1cnJlbnRf
c3JjKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jcm9zc19vcmlnaW46CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRf
Y3Jvc3Nfb3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdp
bihXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9uZXR3b3JrX3N0YXRl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNndXNob3J0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGd1c2hvcnQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9uZXR3b3JrX3N0YXRl
KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9tZWRpYV9lbGVtZW50X2dldF9wcmVsb2FkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2dldF9wcmVsb2FkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9wcmVsb2FkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3ByZWxvYWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfYnVmZmVyZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NVGltZVJhbmdlcworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01UaW1lUmFuZ2VzKgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X2J1ZmZlcmVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9yZWFkeV9zdGF0ZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcmVhZHlfc3RhdGUoV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfZ2V0X3NlZWtpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9n
ZXRfc2Vla2luZyhXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3VycmVudF90aW1lOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91Ymxl
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jdXJyZW50X3RpbWUoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfc2V0X2N1cnJlbnRfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9zZXRfY3VycmVudF90aW1lKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZHVyYXRpb246CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2R1cmF0aW9uKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9w
YXVzZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGF1c2Vk
KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9tZWRpYV9lbGVtZW50X2dldF9kZWZhdWx0X3BsYXliYWNrX3JhdGU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9zZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9zZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQqIHNlbGYsIGdkb3VibGUgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF9wbGF5YmFja19yYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF9wbGF5YmFja19yYXRlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9w
bGF5YmFja19yYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfcGxheWJhY2tf
cmF0ZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxheWVkOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGltZVJhbmdlcyoKK3dlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF9wbGF5ZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3NlZWthYmxl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGltZVJhbmdlcyoKK3dlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9zZWVrYWJsZShXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9n
ZXRfZW5kZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZW5k
ZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2F1dG9wbGF5OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X2F1dG9wbGF5KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9hdXRv
cGxheToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9hdXRvcGxheShXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2xvb3A6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbG9vcChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfbG9vcDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9sb29wKFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfY29udHJvbHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9nZXRfY29udHJvbHMoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2NvbnRyb2xz
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2NvbnRyb2xzKFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfdm9sdW1lOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF92b2x1bWUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3ZvbHVtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dk
b3VibGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfdm9s
dW1lKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRf
bXV0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbXV0ZWQo
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfc2V0X211dGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfc2V0X211dGVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZGVmYXVs
dF9tdXRlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9kZWZh
dWx0X211dGVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9kZWZhdWx0X211dGVkOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2RlZmF1bHRfbXV0ZWQoV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfcHJlc2VydmVzX3BpdGNoOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9wcmVzZXJ2ZXNfcGl0Y2goV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfc2V0X3dlYmtpdF9wcmVzZXJ2ZXNfcGl0Y2g6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9zZXRfd2Via2l0X3ByZXNlcnZlc19waXRjaChXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9oYXNfY2xvc2VkX2NhcHRpb25zOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Ym9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9oYXNfY2xvc2Vk
X2NhcHRpb25zKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfY2xvc2VkX2NhcHRpb25zX3Zp
c2libGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0
X2Nsb3NlZF9jYXB0aW9uc192aXNpYmxlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF93ZWJraXRfY2xv
c2VkX2NhcHRpb25zX3Zpc2libGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRf
d2Via2l0X2Nsb3NlZF9jYXB0aW9uc192aXNpYmxlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfd2Via2l0X2F1ZGlvX2RlY29kZWRfYnl0ZV9jb3VudDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9hdWRpb19kZWNvZGVkX2J5dGVfY291
bnQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF92aWRlb19kZWNvZGVkX2J5dGVfY291bnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
dWxvbmcKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfdmlkZW9fZGVj
b2RlZF9ieXRlX2NvdW50KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9tZWRpYV9ncm91cDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbWVkaWFfZ3JvdXAoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfc2V0X21lZGlhX2dyb3VwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X21l
ZGlhX2dyb3VwKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2NvbnRy
b2xsZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU1lZGlhQ29u
dHJvbGxlcioKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jb250cm9sbGVyKFdl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfY3VycmVudF9wbGF5YmFja190YXJnZXRfaXNfd2ly
ZWxlc3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0
X2N1cnJlbnRfcGxheWJhY2tfdGFyZ2V0X2lzX3dpcmVsZXNzKFdlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dl
dF9raW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9raW5kKFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X3NldF9raW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2tp
bmQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50UHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDdiODMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwz
NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Lmg+CisjaWYgRU5BQkxF
KFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
IHdyYXBIVE1MTWVkaWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKTsKK1dlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Kik7CitX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
KTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwor
CisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOGY0MTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxNZW51RWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MTWVudUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVj
dEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MTWVudUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1M
TWVudUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqIG9iaikKK3sKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50KiBjb3JlKFdl
YktpdERPTUhUTUxNZW51RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxNZW51RWxlbWVu
dCogd3JhcEhUTUxNZW51RWxlbWVudChXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfTUVOVV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRU5VX0VM
RU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVudV9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZl
bnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVudV9l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfbWVudV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNv
cmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1s
X21lbnVfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7Cisg
ICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9tZW51X2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09E
RShXZWJLaXRET01IVE1MTWVudUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnQs
IFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ09NUEFDVCwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX01FTlVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZW51X2Vs
ZW1lbnRfc2V0X2NvbXBhY3Qoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0hUTUxfTUVOVV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09NUEFDVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9nZXRfY29tcGFj
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVu
dV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0NPTVBBQ1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImNvbXBhY3QiLAorICAgICAgICAgICAgIkhUTUxNZW51RWxlbWVu
dDpjb21wYWN0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxNZW51RWxl
bWVudDpjb21wYWN0IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tZW51
X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVu
dV9lbGVtZW50X2dldF9jb21wYWN0KFdlYktpdERPTUhUTUxNZW51RWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FTlVfRUxFTUVOVChzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9zZXRfY29tcGFj
dChXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRU5VX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6
OkhUTUxNZW51RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5z
ZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIsIHZhbHVl
KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1l
bnVFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQxMjVlZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LmgKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
RE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25s
eSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2Vu
ZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTE1lbnVFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9IVE1MX01FTlVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfbWVu
dV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRU5VX0VMRU1F
TlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfTUVOVV9FTEVNRU5ULCBXZWJLaXRET01IVE1MTWVudUVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVOVV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01F
TlVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfSFRNTF9NRU5VX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVOVV9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01FTlVfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRU5VX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVOVV9FTEVNRU5UX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9I
VE1MX01FTlVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50Q2xhc3MpKQorCitzdHJ1
Y3QgX1dlYktpdERPTUhUTUxNZW51RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQg
cGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTWVudUVsZW1lbnRD
bGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfZ2V0X2NvbXBh
Y3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1s
X21lbnVfZWxlbWVudF9nZXRfY29tcGFjdChXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfc2V0X2NvbXBhY3Q6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29s
ZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZW51X2VsZW1l
bnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTWVudUVsZW1l
bnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnRQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxNZW51RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lOGYxYjI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnRQcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MTWVudUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTE1lbnVFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZW51
RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHdyYXBI
VE1MTWVudUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50Kik7CitXZWJLaXRET01IVE1M
TWVudUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhU
TUxNZW51RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50UHJpdmF0
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxN
ZXRhRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyZjE1
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LmNwcApAQCAtMCwwICsx
LDI4MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxNZXRhRWxlbWVudC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5h
bWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxNZXRhRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTUhUTUxNZXRhRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCog
b2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5UKGtpdChzdGF0
aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MTWV0YUVs
ZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9N
SFRNTE1ldGFFbGVtZW50KiB3cmFwSFRNTE1ldGFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZXRhRWxl
bWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQ
RV9IVE1MX01FVEFfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9tZXRhX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAo
IWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxNZXRh
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9tZXRhX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVj
dEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRh
cmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE1l
dGFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1ldGFFbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01F
dmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3
ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5h
ZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9odG1sX21ldGFfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5F
X1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCwgd2Via2l0X2RvbV9odG1s
X21ldGFfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRf
SU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DT05URU5ULAor
ICAgIFBST1BfSFRUUF9FUVVJViwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9TQ0hFTUUsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT05URU5UOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfbWV0YV9lbGVtZW50X3NldF9jb250ZW50KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFRUUF9FUVVJVjoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfaHR0cF9lcXVpdihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05B
TUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TQ0hFTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X3NjaGVt
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX01FVEFfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0NPTlRFTlQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2NvbnRlbnQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfSFRUUF9FUVVJVjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfaHR0cF9lcXVp
dihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dl
dF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDSEVNRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21ldGFfZWxl
bWVudF9nZXRfc2NoZW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9tZXRhX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MTWV0YUVsZW1l
bnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAg
IGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVu
dF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVOVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb250ZW50IiwKKyAgICAgICAgICAgICJI
VE1MTWV0YUVsZW1lbnQ6Y29udGVudCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTE1ldGFFbGVtZW50OmNvbnRlbnQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFRUUF9FUVVJViwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJodHRwLWVxdWl2IiwK
KyAgICAgICAgICAgICJIVE1MTWV0YUVsZW1lbnQ6aHR0cC1lcXVpdiIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTE1ldGFFbGVtZW50Omh0dHAtZXF1aXYiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJuYW1lIiwKKyAgICAgICAgICAgICJIVE1MTWV0YUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTE1ldGFFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfU0NIRU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
InNjaGVtZSIsCisgICAgICAgICAgICAiSFRNTE1ldGFFbGVtZW50OnNjaGVtZSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE1ldGFFbGVtZW50OnNjaGVtZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRN
TE1ldGFFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2NvbnRlbnQoV2ViS2l0
RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTUVUQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmNvbnRlbnRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9jb250ZW50KFdlYktpdERPTUhUTUxN
ZXRhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9NRVRBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvbnRlbnRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9odHRwX2VxdWl2KFdlYktp
dERPTUhUTUxNZXRhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX01FVEFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpodHRwX2VxdWl2QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfaHR0cF9lcXVpdihXZWJLaXRE
T01IVE1MTWV0YUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfTUVUQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpodHRwX2VxdWl2QXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfbmFtZShX
ZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRVRBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZXRhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfbmFtZShX
ZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVUQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfc2NoZW1l
KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX01FVEFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpzY2hlbWVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9zY2hlbWUoV2ViS2l0RE9N
SFRNTE1ldGFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX01FVEFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2NoZW1lQXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVs
ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTg4NzZkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuaApAQCAtMCwwICsxLDEyNiBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9N
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8
d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlm
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTE1ldGFFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX01FVEFfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfbWV0YV9l
bGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlQo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfTUVUQV9FTEVNRU5ULCBXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01FVEFf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfSFRNTF9NRVRBX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVUQV9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19IVE1MX01FVEFfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRVRBX0VMRU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5UX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X01FVEFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxNZXRhRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFy
ZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnRDbGFz
cyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF90eXBlKHZv
aWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2NvbnRlbnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tZXRhX2Vs
ZW1lbnRfZ2V0X2NvbnRlbnQoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9jb250ZW50OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNZXRhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9jb250
ZW50KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9odHRwX2VxdWl2Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZXRhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVt
ZW50X2dldF9odHRwX2VxdWl2KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfaHR0cF9lcXVpdjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRf
aHR0cF9lcXVpdihXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21ldGFfZWxl
bWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE1ldGFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0
RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X3NjaGVtZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTWV0YUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfc2NoZW1l
KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21ldGFfZWxlbWVudF9zZXRfc2NoZW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxN
ZXRhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9zY2hlbWUoV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE1ldGFFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnRQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkMTMwYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1ldGFF
bGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudFByaXZhdGVf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWV0YUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
V2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiB3cmFwSFRNTE1ldGFFbGVtZW50KFdlYkNvcmU6OkhU
TUxNZXRhRWxlbWVudCopOworV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTE1ldGFFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGNvcmUoV2ViS2l0
RE9NSFRNTE1ldGFFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxNZXRhRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MTW9kRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjIwNTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MTW9kRWxlbWVudC5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
TW9kRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxNb2RFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIGtpdChX
ZWJDb3JlOjpIVE1MTW9kRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfTU9EX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9
CisKK1dlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxNb2RFbGVtZW50
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTE1vZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01IVE1MTW9kRWxlbWVudCogd3JhcEhUTUxNb2RFbGVtZW50KFdl
YkNvcmU6OkhUTUxNb2RFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01PRF9FTEVNRU5UKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9NT0RfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZl
bnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2Vi
Q29yZTo6SFRNTE1vZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MTW9kRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlw
dGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTW9kRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpIVE1MTW9kRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxN
b2RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0
dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJL
aXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZl
bnQgPSB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZh
Y2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF9tb2RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVG
SU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxNb2RFbGVtZW50LCB3ZWJraXRfZG9tX2h0
bWxfbW9kX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5U
X0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0lURSwKKyAg
ICBQUk9QX0RBVEVfVElNRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tb2Rf
ZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MTW9kRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NJVEU6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfY2l0ZShzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RBVEVfVElN
RToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X3NldF9kYXRlX3RpbWUoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTU9E
X0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9DSVRFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2NpdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfREFURV9USU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2RhdGVfdGltZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MTW9kRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX21vZF9lbGVt
ZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Q0lURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaXRlIiwK
KyAgICAgICAgICAgICJIVE1MTW9kRWxlbWVudDpjaXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MTW9kRWxlbWVudDpjaXRlIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RBVEVf
VElNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkYXRlLXRp
bWUiLAorICAgICAgICAgICAgIkhUTUxNb2RFbGVtZW50OmRhdGUtdGltZSIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTE1vZEVsZW1lbnQ6ZGF0ZS10aW1lIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxN
b2RFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfY2l0ZShXZWJLaXRET01IVE1M
TW9kRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01PRF9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjaXRlQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50
X3NldF9jaXRlKFdlYktpdERPTUhUTUxNb2RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01PRF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNpdGVBdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0
X2RhdGVfdGltZShXZWJLaXRET01IVE1MTW9kRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX01PRF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MTW9kRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGF0ZXRpbWVBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfc2V0X2RhdGVfdGlt
ZShXZWJLaXRET01IVE1MTW9kRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NT0RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkYXRldGltZUF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTW9kRWxlbWVudC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MTW9kRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDgw
MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LmgKQEAgLTAsMCArMSw5
MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VC
S0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAi
T25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRfaAorI2RlZmluZSBXZWJL
aXRET01IVE1MTW9kRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9NT0RfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfbW9k
X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01PRF9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX01PRF9FTEVNRU5ULCBXZWJLaXRET01IVE1MTW9kRWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NT0RfRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX01PRF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX01PRF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX01PRF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01PRF9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01PRF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01PRF9FTEVN
RU5ULCBXZWJLaXRET01IVE1MTW9kRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01I
VE1MTW9kRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNl
OworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTW9kRWxlbWVudENsYXNzIHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2NpdGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE1vZEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dldF9jaXRlKFdlYktp
dERPTUhUTUxNb2RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbW9k
X2VsZW1lbnRfc2V0X2NpdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX21vZF9lbGVtZW50X3NldF9jaXRlKFdlYktpdERPTUhUTUxNb2RFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tb2RfZWxl
bWVudF9nZXRfZGF0ZV90aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNb2RFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfZGF0ZV90aW1lKFdlYktpdERPTUhUTUxNb2RFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfc2V0X2Rh
dGVfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTW9kRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbW9k
X2VsZW1lbnRfc2V0X2RhdGVfdGltZShXZWJLaXRET01IVE1MTW9kRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxNb2RFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNb2RFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE2NWE0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVt
ZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TE1vZEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1vZEVsZW1l
bnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MTW9kRWxlbWVudCogd3Jh
cEhUTUxNb2RFbGVtZW50KFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50Kik7CitXZWJLaXRET01IVE1M
TW9kRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1M
TW9kRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTW9kRWxlbWVudCopOworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTW9kRWxlbWVudFByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0
RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjNjIwZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC5jcHAKQEAgLTAsMCArMSwy
NzUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFt
ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TUhUTUxPTGlzdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50KiBvYmopCit7
CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9PX0xJU1RfRUxFTUVOVChraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhU
TUxPTGlzdEVsZW1lbnQqIHdyYXBIVE1MT0xpc3RFbGVtZW50KFdlYkNvcmU6OkhUTUxPTGlzdEVs
ZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9IVE1MX09fTElTVF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Cisg
ICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpI
VE1MT0xpc3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9M
aXN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
Y29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlv
bi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MT0xpc3RF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxPTGlzdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5k
aXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9kaXNwYXRjaF9l
dmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX29f
bGlzdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3JlbW92ZV9ldmVudF9s
aXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTE9MaXN0
RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5U
X1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBS
T1BfMCwKKyAgICBQUk9QX0NPTVBBQ1QsCisgICAgUFJPUF9TVEFSVCwKKyAgICBQUk9QX1JFVkVS
U0VELAorICAgIFBST1BfVFlQRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9v
X2xpc3RfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX09fTElTVF9FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
Q09NUEFDVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9jb21w
YWN0KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NUQVJUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1l
bnRfc2V0X3N0YXJ0KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1JFVkVSU0VEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb19s
aXN0X2VsZW1lbnRfc2V0X3JldmVyc2VkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X29fbGlzdF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT01Q
QUNUOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
b19saXN0X2VsZW1lbnRfZ2V0X2NvbXBhY3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUkVWRVJTRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFs
dWUsIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfcmV2ZXJzZWQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF90eXBlX2F0
dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29f
bGlzdF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudENsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09NUEFDVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY29tcGFjdCIsCisgICAgICAgICAgICAiSFRNTE9M
aXN0RWxlbWVudDpjb21wYWN0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhU
TUxPTGlzdEVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVEFSVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic3RhcnQiLAorICAgICAgICAg
ICAgIkhUTUxPTGlzdEVsZW1lbnQ6c3RhcnQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xv
bmcgSFRNTE9MaXN0RWxlbWVudDpzdGFydCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFY
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9SRVZFUlNFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAg
ICAgICAgICAicmV2ZXJzZWQiLAorICAgICAgICAgICAgIkhUTUxPTGlzdEVsZW1lbnQ6cmV2ZXJz
ZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE9MaXN0RWxlbWVudDpy
ZXZlcnNlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxPTGlzdEVs
ZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9MaXN0RWxl
bWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxl
bWVudF9pbml0KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb19saXN0
X2VsZW1lbnRfZ2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9j
b21wYWN0KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PX0xJU1RfRUxFTUVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0
dHIsIHZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dl
dF9zdGFydChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxPTGlzdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcg
cmVzdWx0ID0gaXRlbS0+c3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfc3RhcnQoV2ViS2l0RE9NSFRNTE9MaXN0
RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X09fTElTVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFN0YXJ0KHZhbHVlKTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9yZXZlcnNlZChX
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT19MSVNUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1M
T0xpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZXZlcnNlZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9yZXZlcnNlZChXZWJLaXRET01IVE1M
T0xpc3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT19MSVNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJldmVyc2VkQXR0ciwgdmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX09fTElTVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT0xpc3RFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9N
SFRNTE9MaXN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9PX0xJU1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT0xp
c3RFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmMTYxZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC5oCkBAIC0wLDAgKzEsMTA4
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJL
SVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJP
bmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisj
ZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50X2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTE9MaXN0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9PX0xJU1RfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0
bWxfb19saXN0X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09f
TElTVF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX09fTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1M
T0xpc3RFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09fTElTVF9FTEVNRU5UX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX09fTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50Q2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PX0xJU1RfRUxFTUVOVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9PX0xJU1RfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PX0xJU1RfRUxF
TUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9PX0xJU1RfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9PX0xJU1RfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTE9MaXN0RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9jb21wYWN0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0
X2NvbXBhY3QoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9jb21wYWN0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9jb21w
YWN0KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3N0YXJ0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRf
Z2V0X3N0YXJ0KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfc3RhcnQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE9MaXN0RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3N0YXJ0KFdl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRf
dHlwZV9hdHRyKFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF90eXBl
X2F0dHIoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MT0xpc3RFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJmMDBmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRQcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxPTGlzdEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9M
aXN0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCog
d3JhcEhUTUxPTGlzdEVsZW1lbnQoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCopOworV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqKTsKK1dl
YkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT0xpc3RF
bGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRVbnN0
YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMTdjZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
T0xpc3RFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRVbnN0YWJs
ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRl
ZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3JldmVyc2VkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9yZXZlcnNlZChXZWJLaXRET01IVE1MT0xpc3RF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRf
c2V0X3JldmVyc2VkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9yZXZlcnNl
ZChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YmUyNGUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtMCwwICsxLDg0NCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUg
IkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTURvY3VtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxPYmpl
Y3RFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVZhbGlkaXR5
U3RhdGVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTUhUTUxPYmplY3RFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MT2JqZWN0RWxl
bWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfT0JKRUNUX0VMRU1FTlQo
a2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhU
TUxPYmplY3RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogd3JhcEhUTUxPYmplY3RFbGVtZW50KFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX09CSkVDVF9FTEVNRU5UKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9PQkpFQ1RfRUxFTUVOVCwgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9kaXNwYXRjaF9l
dmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJL
aXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdz
KCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAg
ICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVj
dEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNl
KiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxf
b2JqZWN0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7
CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVS
RkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRk9STSwKKyAgICBQUk9Q
X0NPREUsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX0FSQ0hJVkUsCisgICAgUFJPUF9CT1JE
RVIsCisgICAgUFJPUF9DT0RFX0JBU0UsCisgICAgUFJPUF9DT0RFX1RZUEUsCisgICAgUFJPUF9E
QVRBLAorICAgIFBST1BfREVDTEFSRSwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX0hTUEFD
RSwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9TVEFOREJZLAorICAgIFBST1BfVFlQRSwKKyAg
ICBQUk9QX1VTRV9NQVAsCisgICAgUFJPUF9WU1BBQ0UsCisgICAgUFJPUF9XSURUSCwKKyAgICBQ
Uk9QX1dJTExfVkFMSURBVEUsCisgICAgUFJPUF9WQUxJRElUWSwKKyAgICBQUk9QX1ZBTElEQVRJ
T05fTUVTU0FHRSwKKyAgICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQsCit9OworCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfT0JKRUNUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9DT0RFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfc2V0X2NvZGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FSQ0hJVkU6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYXJjaGl2ZShzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JPUkRFUjoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9ib3JkZXIoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
T0RFX0JBU0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY29k
ZV9iYXNlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ09ERV9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfc2V0X2NvZGVfdHlwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RBVEE6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9zZXRfZGF0YShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFQ0xBUkU6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfZGVjbGFyZShzZWxmLCBnX3ZhbHVlX2dl
dF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSFNQQUNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hz
cGFjZShzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
c2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9TVEFOREJZOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfc2V0X3N0YW5kYnkoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRV9NQVA6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdXNlX21hcChzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZTUEFD
RToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF92c3BhY2Uoc2Vs
ZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfd2lk
dGgoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfT0JKRUNUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9GT1JNOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZm9ybShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0RFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYWxp
Z24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVJDSElWRToKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X2dldF9hcmNoaXZlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JP
UkRFUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF9ib3JkZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ09ERV9CQVNFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGVfYmFzZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0RFX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZV90
eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RBVEE6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVu
dF9nZXRfZGF0YShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUNMQVJF
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfZ2V0X2RlY2xhcmUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9IU1BBQ0U6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfaHNwYWNlKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfbmFtZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEFOREJZOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3N0
YW5kYnkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X2dldF90eXBlX2F0dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VVNFX01BUDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X2dldF91c2VfbWFwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1ZTUEFDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92c3BhY2Uoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lMTF9WQUxJREFURToKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF93aWxsX3ZhbGlkYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZB
TElESVRZOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9nZXRfdmFsaWRpdHkoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVkFMSURBVElPTl9NRVNTQUdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25f
bWVzc2FnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05URU5UX0RP
Q1VNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAg
ICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDpmb3JtIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1MT2JqZWN0RWxlbWVu
dDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVOVCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NPREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29kZSIs
CisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6Y29kZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1lbnQ6Y29kZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGln
biIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0FSQ0hJVkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiYXJjaGl2ZSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6YXJjaGl2ZSIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1lbnQ6YXJjaGl2ZSIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9CT1JERVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiYm9yZGVyIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDpi
b3JkZXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50
OmJvcmRlciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT0RFX0JBU0UsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29kZS1iYXNlIiwKKyAgICAgICAgICAgICJIVE1M
T2JqZWN0RWxlbWVudDpjb2RlLWJhc2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxPYmplY3RFbGVtZW50OmNvZGUtYmFzZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT0RFX1RZ
UEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29kZS10eXBl
IiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDpjb2RlLXR5cGUiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OmNvZGUtdHlwZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9EQVRBLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImRhdGEiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OmRhdGEiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OmRhdGEiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfREVDTEFSRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisg
ICAgICAgICAgICAiZGVjbGFyZSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6ZGVj
bGFyZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MT2JqZWN0RWxlbWVu
dDpkZWNsYXJlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAgIkhUTUxP
YmplY3RFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TE9iamVjdEVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hTUEFDRSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiaHNwYWNlIiwKKyAgICAgICAgICAg
ICJIVE1MT2JqZWN0RWxlbWVudDpoc3BhY2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xv
bmcgSFRNTE9iamVjdEVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19N
QVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6bmFtZSIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1lbnQ6bmFtZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9TVEFOREJZLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInN0YW5kYnkiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OnN0YW5k
YnkiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OnN0
YW5kYnkiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVu
dDp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVu
dDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1VTRV9NQVAsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAidXNlLW1hcCIsCisgICAgICAgICAgICAiSFRNTE9iamVj
dEVsZW1lbnQ6dXNlLW1hcCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9i
amVjdEVsZW1lbnQ6dXNlLW1hcCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WU1BBQ0UsCisgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInZzcGFjZSIsCisgICAgICAgICAgICAi
SFRNTE9iamVjdEVsZW1lbnQ6dnNwYWNlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25n
IEhUTUxPYmplY3RFbGVtZW50OnZzcGFjZSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFY
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6d2lkdGgiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OndpZHRoIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgIndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgIkhUTUxPYmpl
Y3RFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVh
biBIVE1MT2JqZWN0RWxlbWVudDp3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
VkFMSURJVFksCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidmFs
aWRpdHkiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OnZhbGlkaXR5IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogSFRNTE9iamVjdEVsZW1l
bnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVs
ZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IEhUTUxPYmplY3RFbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NPTlRFTlRfRE9DVU1FTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAiY29udGVudC1kb2N1bWVudCIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6
Y29udGVudC1kb2N1bWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURvY3Vt
ZW50KiBIVE1MT2JqZWN0RWxlbWVudDpjb250ZW50LWRvY3VtZW50IiwKKyAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9ET0NVTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9p
bml0KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja1ZhbGlkaXR5KCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
c2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChlcnJvcik7CisgICAgV2ViQ29yZTo6
SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkRXJyb3IgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZXJyb3IpOworICAg
IGl0ZW0tPnNldEN1c3RvbVZhbGlkaXR5KGNvbnZlcnRlZEVycm9yKTsKK30KKworV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2Zvcm0o
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZv
cm0oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlKFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjb2RlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvZGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2FsaWduKFdlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2FyY2hp
dmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFyY2hpdmVBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2FyY2hp
dmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXJjaGl2ZUF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9nZXRfYm9yZGVyKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpib3JkZXJBdHRyKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1l
bnRfc2V0X2JvcmRlcihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpi
b3JkZXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
b2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGVfYmFzZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29k
ZWJhc2VBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGVfYmFzZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjb2RlYmFzZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZV90eXBlKFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjb2RldHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY29kZV90eXBlKFdlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvZGV0eXBlQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF9kYXRhKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmRhdGFBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2RhdGEoV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGF0YUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9kZWNsYXJlKFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6ZGVjbGFyZUF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9kZWNsYXJlKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5B
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkZWNsYXJlQXR0ciwgdmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmhlaWdodEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhlaWdodEF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9oc3BhY2Uo
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0
ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpoc3BhY2VB
dHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9zZXRfaHNwYWNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBn
bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6aHNwYWNlQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5h
bWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
T0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfc3RhbmRieShXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVD
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6c3RhbmRieUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfc3RhbmRieShXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzdGFuZGJ5QXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF90eXBlX2F0dHIo
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF91c2VfbWFwKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp1c2VtYXBBdHRyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0
X3VzZV9tYXAoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dXNlbWFw
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfZ2V0X3ZzcGFjZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnZzcGFjZUF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF92c3BhY2UoV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp2c3BhY2VBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JK
RUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjp3aWR0aEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0
ZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+d2lsbFZhbGlkYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPnZhbGlkaXR5KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9n
ZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZhbGlk
YXRpb25NZXNzYWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTURvY3Vt
ZW50KiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQo
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkRvY3VtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVudERv
Y3VtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5M2RjMTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmgKQEAgLTAsMCArMSwz
NjAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3Ig
Ik9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50X2gKKyNkZWZpbmUg
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfT0JKRUNUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9PQkpFQ1RfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PQkpFQ1RfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT0JKRUNUX0VMRU1F
TlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfT0JKRUNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9PQkpFQ1RfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PQkpF
Q1RfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PQkpFQ1RfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9PQkpFQ1RfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PQkpFQ1RfRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRDbGFzcyB7CisgICAgV2Vi
S2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9mb3JtOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IG5vbmUpOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0
X2Zvcm0oV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGUoV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9zZXRfY29kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGUoV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2FsaWduKFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRN
TE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9hcmNoaXZlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYXJj
aGl2ZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9hcmNoaXZlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYXJjaGl2ZShX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2JvcmRlcjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1l
bnRfZ2V0X2JvcmRlcihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9ib3JkZXI6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9i
b3JkZXIoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlX2Jh
c2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X2dldF9jb2RlX2Jhc2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY29kZV9i
YXNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9zZXRfY29kZV9iYXNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9nZXRfY29kZV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZV90eXBlKFdlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfc2V0X2NvZGVfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGVfdHlwZShXZWJLaXRET01IVE1M
T2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2RhdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9kYXRhKFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2RhdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9kYXRhKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZGVjbGFyZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8K
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRf
ZGVjbGFyZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9kZWNsYXJlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfZGVj
bGFyZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfaGVpZ2h0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hlaWdodDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0
X2hlaWdodChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2hzcGFj
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9nZXRfaHNwYWNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hzcGFjZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9u
ZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1l
bnRfc2V0X2hzcGFjZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0
X25hbWUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9zdGFuZGJ5
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9nZXRfc3RhbmRieShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9zdGFuZGJ5Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9zZXRfc3RhbmRieShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X3NldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTE9iamVjdEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X2dldF91c2VfbWFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdXNlX21hcChXZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X3NldF91c2VfbWFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdXNlX21hcChXZWJLaXRET01I
VE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8K
K1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdnNw
YWNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3ZzcGFjZShXZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF93aWR0
aChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01Eb2N1bWVudCoKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29udGVu
dF9kb2N1bWVudChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxl
bWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjIwOTVh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFByaXZhdGUuaApAQCAt
MCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxPYmplY3RFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50Lmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHdyYXBI
VE1MT2JqZWN0RWxlbWVudChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCopOworV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCopOworV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQq
KTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRV
bnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRkOTNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRV
bnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50VW5zdGFibGVfaAor
CisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQKKyAqIEBlcnJvcjogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9l
bGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92
YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01WYWxpZGl0
eVN0YXRlKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92YWxpZGl0eShXZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2U6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9iamVjdEVs
ZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44OGU0Y2U5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdy
b3VwRWxlbWVudC5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT3B0
R3JvdXBFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTE9wdEdyb3VwRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxPcHRHcm91cEVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50KiBvYmopCit7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCog
Y29yZShXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TUhUTUxPcHRHcm91cEVsZW1lbnQqIHdyYXBIVE1MT3B0R3JvdXBFbGVtZW50KFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQoZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX09QVF9HUk9VUF9FTEVNRU5ULCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVu
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdl
YktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJp
bmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBk
ZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxl
bWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExp
c3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRHcm91
cEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktp
dERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVu
dCA9IHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAg
ICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0
ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTE9wdEdyb3Vw
RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VW
RU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAg
IFBST1BfMCwKKyAgICBQUk9QX0RJU0FCTEVELAorICAgIFBST1BfTEFCRUwsCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVf
Z2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVM
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X2xhYmVsKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF9kaXNhYmxl
ZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQUJFTDoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVt
ZW50X2dldF9sYWJlbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MT3B0R3Jv
dXBFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X29wdF9ncm91cF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNB
QkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGlzYWJs
ZWQiLAorICAgICAgICAgICAgIkhUTUxPcHRHcm91cEVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE9wdEdyb3VwRWxlbWVudDpkaXNhYmxlZCIs
CisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9MQUJFTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJsYWJlbCIsCisgICAgICAgICAgICAiSFRNTE9wdEdyb3VwRWxlbWVu
dDpsYWJlbCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9wdEdyb3VwRWxl
bWVudDpsYWJlbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3Vw
X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X29wdF9ncm91cF9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUX0dST1VQX0VM
RU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhh
c0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNh
YmxlZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X29wdF9ncm91cF9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVt
ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
T1BUX0dST1VQX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0ciwgdmFsdWUpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF9sYWJlbChXZWJLaXRET01I
VE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfT1BUX0dST1VQX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPcHRHcm91
cEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmxhYmVsQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3NldF9sYWJlbChXZWJL
aXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVF9HUk9VUF9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bGFiZWxBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVu
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYmFlYTcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3Vw
RWxlbWVudC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlM
RElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxPcHRH
cm91cEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX09QVF9HUk9VUF9F
TEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQsIFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BUX0dST1VQX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfT1BUX0dST1VQX0VMRU1FTlQsIFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnRDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX09QVF9HUk9VUF9FTEVNRU5UKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1M
X09QVF9HUk9VUF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX09QVF9HUk9V
UF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX09QVF9HUk9VUF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX09QVF9HUk9VUF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX09QVF9HUk9VUF9FTEVN
RU5ULCBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTUhUTUxPcHRHcm91cEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVu
dF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudENs
YXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRf
dHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRf
Z2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhU
TUxPcHRHcm91cEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRf
Z3JvdXBfZWxlbWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9w
dEdyb3VwRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdl
YktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X2xhYmVsOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9l
bGVtZW50X2dldF9sYWJlbChXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X2xhYmVsOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9l
bGVtZW50X3NldF9sYWJlbChXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TE9wdEdyb3VwRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1l
bnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwNmM0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE9wdEdyb3VwRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxPcHRHcm91cEVs
ZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MT3B0R3JvdXBFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiB3cmFwSFRNTE9wdEdyb3Vw
RWxlbWVudChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Kik7CitXZWJLaXRET01IVE1MT3B0
R3JvdXBFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCopOworV2ViQ29y
ZTo6SFRNTE9wdEdyb3VwRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50
Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPcHRH
cm91cEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZGM4Y2ZlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlv
bkVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE9wdGlv
bkVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCoga2l0KFdlYkNvcmU6
OkhUTUxPcHRpb25FbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9P
UFRJT05fRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30K
KworV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE9wdGlvbkVs
ZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiB3cmFwSFRNTE9w
dGlvbkVsZW1lbnQoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGNvcmVPYmplY3QpCit7Cisg
ICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfT1BUSU9O
X0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX09QVElPTl9FTEVNRU5U
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVt
ZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERP
TUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNv
cmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2
ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29wdGlv
bl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VD
YXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBo
YW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2
ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdl
YmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2FkZF9l
dmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQsIHdlYmtpdF9k
b21faHRtbF9vcHRpb25fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19J
TVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9E
SVNBQkxFRCwKKyAgICBQUk9QX0ZPUk0sCisgICAgUFJPUF9MQUJFTCwKKyAgICBQUk9QX0RFRkFV
TFRfU0VMRUNURUQsCisgICAgUFJPUF9TRUxFQ1RFRCwKKyAgICBQUk9QX1ZBTFVFLAorICAgIFBS
T1BfVEVYVCwKKyAgICBQUk9QX0lOREVYLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX29wdGlvbl9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX09QVElP
Tl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9z
ZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTEFCRUw6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vcHRp
b25fZWxlbWVudF9zZXRfbGFiZWwoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZBVUxUX1NFTEVDVEVEOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2RlZmF1bHRfc2VsZWN0ZWQoc2VsZiwg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU0VMRUNURUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRf
c2VsZWN0ZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vcHRpb25f
ZWxlbWVudF9zZXRfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQq
IHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dl
dF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRpb25f
ZWxlbWVudF9nZXRfZm9ybShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9M
QUJFTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X29wdGlvbl9lbGVtZW50X2dldF9sYWJlbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9ERUZBVUxUX1NFTEVDVEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2RlZmF1bHRfc2VsZWN0ZWQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURUQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVu
dF9nZXRfc2VsZWN0ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFM
VUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9v
cHRpb25fZWxlbWVudF9nZXRfdmFsdWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfVEVYVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX29wdGlvbl9lbGVtZW50X2dldF90ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0lOREVYOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2luZGV4KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9jbGFzc19pbml0
KFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9ESVNBQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAg
ICAgICAiZGlzYWJsZWQiLAorICAgICAgICAgICAgIkhUTUxPcHRpb25FbGVtZW50OmRpc2FibGVk
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxPcHRpb25FbGVtZW50OmRp
c2FibGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk0sCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisgICAgICAgICAgICAiSFRNTE9wdGlvbkVs
ZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9GT1JNX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9MQUJFTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJsYWJlbCIsCisgICAgICAgICAgICAiSFRNTE9wdGlvbkVsZW1lbnQ6
bGFiZWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPcHRpb25FbGVtZW50
OmxhYmVsIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFRkFVTFRfU0VMRUNURUQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImRlZmF1bHQtc2VsZWN0ZWQiLAorICAg
ICAgICAgICAgIkhUTUxPcHRpb25FbGVtZW50OmRlZmF1bHQtc2VsZWN0ZWQiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE9wdGlvbkVsZW1lbnQ6ZGVmYXVsdC1zZWxlY3Rl
ZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxFQ1RFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oCisgICAgICAgICAgICAic2VsZWN0ZWQiLAorICAgICAgICAgICAgIkhUTUxPcHRp
b25FbGVtZW50OnNlbGVjdGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhU
TUxPcHRpb25FbGVtZW50OnNlbGVjdGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZhbHVlIiwKKyAgICAg
ICAgICAgICJIVE1MT3B0aW9uRWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTE9wdGlvbkVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEVY
VCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0ZXh0IiwKKyAg
ICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudDp0ZXh0IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2NoYXIqIEhUTUxPcHRpb25FbGVtZW50OnRleHQiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTkRF
WCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiaW5kZXgiLAorICAg
ICAgICAgICAgIkhUTUxPcHRpb25FbGVtZW50OmluZGV4IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2xvbmcgSFRNTE9wdGlvbkVsZW1lbnQ6aW5kZXgiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfaW5pdChXZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRf
ZGlzYWJsZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9kaXNhYmxlZChX
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MT3B0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyLCB2
YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxGb3JtRWxlbWVudCogd2Via2l0X2RvbV9odG1sX29w
dGlvbl9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxl
bWVudF9nZXRfbGFiZWwoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGFiZWwoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1l
bnRfc2V0X2xhYmVsKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0
aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0TGFiZWwoY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uX2VsZW1lbnRfZ2V0X2RlZmF1bHRfc2VsZWN0ZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzZWxlY3Rl
ZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29w
dGlvbl9lbGVtZW50X3NldF9kZWZhdWx0X3NlbGVjdGVkKFdlYktpdERPTUhUTUxPcHRpb25FbGVt
ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
T1BUSU9OX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpzZWxlY3RlZEF0dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9zZWxlY3RlZChXZWJLaXRET01IVE1M
T3B0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09Q
VElPTl9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+c2VsZWN0ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9vcHRpb25fZWxlbWVudF9zZXRfc2VsZWN0ZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9P
UFRJT05fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U2VsZWN0ZWQodmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF92YWx1ZShXZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX09QVElPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9u
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0
RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRWYWx1ZShjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3Rl
eHQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGV4dCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2luZGV4
KFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3Vs
dCA9IGl0ZW0tPmluZGV4KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Yzc3YWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxPcHRpb25FbGVtZW50LmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE9wdGlv
bkVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfT1BUSU9OX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVt
ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9PUFRJT05fRUxFTUVOVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9PUFRJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
T1BUSU9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05fRUxF
TUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9PUFRJT05fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9PUFRJT05fRUxF
TUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE9wdGlvbkVs
ZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0
bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX29wdGlvbl9lbGVtZW50X2dldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZGlzYWJs
ZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9kaXNhYmxl
ZChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZm9ybToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dl
dF9mb3JtKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2xhYmVsOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxPcHRpb25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfbGFiZWwo
V2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9vcHRpb25fZWxlbWVudF9zZXRfbGFiZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE9wdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9sYWJlbChXZWJLaXRET01I
VE1MT3B0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2RlZmF1bHRfc2VsZWN0ZWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Ym9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
X2VsZW1lbnRfZ2V0X2RlZmF1bHRfc2VsZWN0ZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfZGVm
YXVsdF9zZWxlY3RlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAor
ICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2RlZmF1bHRfc2VsZWN0ZWQoV2ViS2l0RE9NSFRN
TE9wdGlvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3NlbGVjdGVkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxPcHRpb25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9z
ZWxlY3RlZChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9zZWxlY3RlZDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X3Nl
bGVjdGVkKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF92YWx1ZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2Vs
ZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X3ZhbHVlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRf
dmFsdWUoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF90ZXh0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vcHRpb25f
ZWxlbWVudF9nZXRfdGV4dChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9pbmRleDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25n
CisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9n
ZXRfaW5kZXgoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1l
bnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4NTk1Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRQcml2YXRlLmgKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT3B0
aW9uRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MT3B0aW9uRWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiB3cmFwSFRN
TE9wdGlvbkVsZW1lbnQoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqKTsKK1dlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqKTsKK1dlYkNv
cmU6OkhUTUxPcHRpb25FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50Kik7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTkwNTBhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmNwcApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxPcHRpb25zQ29sbGVjdGlvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxl
Lmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxPcHRpb25FbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTE9wdGlvbnNDb2xsZWN0aW9uVW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBraXQoV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0
aW9uKiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9PUFRJT05TX0NPTExFQ1RJ
T04oa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKj4ob2JqKSkpOworfQor
CitXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGNvcmUoV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0
aW9uKiB3cmFwSFRNTE9wdGlvbnNDb2xsZWN0aW9uKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVj
dGlvbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fSFRNTF9PUFRJT05TX0NPTExFQ1RJT04oZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9IVE1MX09QVElPTlNfQ09MTEVDVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24sIHdlYmtpdF9kb21faHRtbF9vcHRpb25z
X2NvbGxlY3Rpb24sIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04pCisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX1NFTEVDVEVEX0lOREVYLAorICAgIFBST1BfTEVOR1RILAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24qIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU0VMRUNURURf
SU5ERVg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fc2V0X3Nl
bGVjdGVkX2luZGV4KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9u
KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX09QVElPTlNfQ09MTEVDVElPTihvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX0lOREVYOgor
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19j
b2xsZWN0aW9uX2dldF9zZWxlY3RlZF9pbmRleChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2dldF9sZW5ndGgoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9j
bGFzc19pbml0KFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbkNsYXNzKiByZXF1ZXN0Q2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNz
LT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxFQ1RFRF9JTkRFWCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2VsZWN0ZWQtaW5kZXgiLAorICAgICAgICAg
ICAgIkhUTUxPcHRpb25zQ29sbGVjdGlvbjpzZWxlY3RlZC1pbmRleCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnbG9uZyBIVE1MT3B0aW9uc0NvbGxlY3Rpb246c2VsZWN0ZWQtaW5kZXgiLAor
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJI
VE1MT3B0aW9uc0NvbGxlY3Rpb246bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vs
b25nIEhUTUxPcHRpb25zQ29sbGVjdGlvbjpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhV
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25faW5pdChXZWJLaXRE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJl
cXVlc3QpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xs
ZWN0aW9uX25hbWVkX2l0ZW0oV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBzZWxmLCBj
b25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElP
TlNfQ09MTEVDVElPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5uYW1lZEl0ZW0oY29udmVydGVkTmFtZSkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2FkZChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rp
b24qIHNlbGYsIFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24sIGd1bG9uZyBpbmRl
eCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTlNf
Q09MTEVDVElPTihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfT1BUSU9OX0VMRU1FTlQob3B0aW9uKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBjb252
ZXJ0ZWRPcHRpb24gPSBXZWJLaXQ6OmNvcmUob3B0aW9uKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5hZGQoKmNvbnZlcnRlZE9wdGlvbiwgaW5kZXgsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9yZW1v
dmUoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBzZWxmLCBnbG9uZyBpbmRleCkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+cmVtb3ZlKGluZGV4KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1s
X29wdGlvbnNfY29sbGVjdGlvbl9nZXRfc2VsZWN0ZWRfaW5kZXgoV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BU
SU9OU19DT0xMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRl
bS0+c2VsZWN0ZWRJbmRleCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9zZXRfc2VsZWN0ZWRfaW5kZXgoV2ViS2l0RE9N
SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpI
VE1MT3B0aW9uc0NvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2V0U2VsZWN0ZWRJbmRleCh2YWx1ZSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uc19jb2xsZWN0aW9uX2dldF9sZW5ndGgoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0
aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OU19DT0xM
RUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0
aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYWIyNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAm
JiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJr
aXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdl
YktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbl9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxPcHRp
b25zQ29sbGVjdGlvbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04gICAgICAgICAgICAod2Via2l0X2RvbV9odG1s
X29wdGlvbnNfY29sbGVjdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxf
T1BUSU9OU19DT0xMRUNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX09QVElPTlNfQ09MTEVDVElPTiwgV2Vi
S2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09Q
VElPTlNfQ09MTEVDVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04sIFdlYktp
dERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbkNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hU
TUxfT1BUSU9OU19DT0xMRUNUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX09QVElPTlNfQ09MTEVDVElPTikpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05TX0NPTExFQ1RJT05fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
T1BUSU9OU19DT0xMRUNUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09QVElPTlNfQ09M
TEVDVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04sIFdlYktpdERPTUhUTUxP
cHRpb25zQ29sbGVjdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24geworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uIHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ2xhc3MgeworICAg
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfdHlwZSh2
b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX25hbWVk
X2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uCisgKiBA
bmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9odG1s
X29wdGlvbnNfY29sbGVjdGlvbl9uYW1lZF9pdGVtKFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVj
dGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X3NlbGVjdGVkX2luZGV4OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisq
Ki8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25f
Z2V0X3NlbGVjdGVkX2luZGV4KFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9zZXRfc2VsZWN0
ZWRfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uCisg
KiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fc2V0X3NlbGVjdGVkX2luZGV4KFdlYktpdERPTUhUTUxP
cHRpb25zQ29sbGVjdGlvbiogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoq
LworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25f
Z2V0X2xlbmd0aChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uUHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXggNjYlCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RD
dXN0b21OYW1lZEdldHRlclByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxl
Y3Rpb25Qcml2YXRlLmgKaW5kZXggZWVmOGNiZi4uZWViNjRiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJp
dmF0ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGVf
aAotI2RlZmluZSBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlX2gKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RDdXN0b21O
YW1lZEdldHRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogd3Jh
cFRlc3RDdXN0b21OYW1lZEdldHRlcihXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsK
LVdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlcioga2l0KFdlYkNvcmU6OlRlc3RDdXN0b21O
YW1lZEdldHRlciopOwotV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBjb3JlKFdlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlciopOworV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0
aW9uKiB3cmFwSFRNTE9wdGlvbnNDb2xsZWN0aW9uKFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVj
dGlvbiopOworV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBraXQoV2ViQ29yZTo6SFRN
TE9wdGlvbnNDb2xsZWN0aW9uKik7CitXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGNv
cmUoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGVfaCAq
LworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25VbnN0YWJsZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MT3B0aW9uc0NvbGxlY3Rpb25VbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJmZTM2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29s
bGVjdGlvblVuc3RhYmxlLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25VbnN0YWJs
ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblVuc3RhYmxlX2gKKwor
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fYWRkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbgorICogQG9wdGlvbjogQSAjV2ViS2l0RE9NSFRN
TE9wdGlvbkVsZW1lbnQKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9hZGQoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uKiBzZWxmLCBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uLCBndWxvbmcg
aW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
c19jb2xsZWN0aW9uX3JlbW92ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24KKyAqIEBpbmRleDogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlv
bl9yZW1vdmUoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBzZWxmLCBnbG9uZyBpbmRl
eCk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblVuc3RhYmxl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MUGFyYWdyYXBoRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjM0NzcyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1l
bnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MUGFyYWdy
YXBoRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KiBr
aXQoV2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpO
b2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCogY29yZShX
ZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRN
TFBhcmFncmFwaEVsZW1lbnQqIHdyYXBIVE1MUGFyYWdyYXBoRWxlbWVudChXZWJDb3JlOjpIVE1M
UGFyYWdyYXBoRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQs
IGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFBh
cmFncmFwaEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUGFy
YWdyYXBoRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQo
V2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNo
X2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50
OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfcGFyYWdy
YXBoX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRf
bGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MUGFy
YWdyYXBoRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50LCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9U
WVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdOLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9wYXJh
Z3JhcGhfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2Vs
ZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFBhcmFn
cmFwaEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3BhcmFn
cmFwaF9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01I
VE1MUGFyYWdyYXBoRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVt
ZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
YWxpZ24iLAorICAgICAgICAgICAgIkhUTUxQYXJhZ3JhcGhFbGVtZW50OmFsaWduIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MUGFyYWdyYXBoRWxlbWVudDphbGlnbiIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfaW5pdChX
ZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1l
bnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9wYXJhZ3Jh
cGhfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdS
QVBIX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTIxMGQ3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudC5oCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERP
TV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkg
PHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50X2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0
X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBR1JBUEhfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfUEFSQUdSQVBIX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9QQVJBR1JBUEhfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVF9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9Q
QVJBR1JBUEhfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxF
TUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFBhcmFn
cmFwaEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1l
bnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2Vs
ZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfc2V0X2FsaWduOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhf
ZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MUGFyYWdyYXBoRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRQcml2YXRlLmgKc2ltaWxhcml0eSBp
bmRleCA2NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlLmgKcmVuYW1lIHRv
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRQcml2YXRlLmgKaW5kZXggMjMzNzYwZC4uNTg4ZmQ5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
UGFyYWdyYXBoRWxlbWVudFByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0TmFtZWRD
b25zdHJ1Y3RvclByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
clByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudFByaXZhdGVf
aAorI2RlZmluZSBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudFByaXZhdGVfaAogCi0jaW5j
bHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxQYXJhZ3Jh
cGhFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhF
bGVtZW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3IqIHdyYXBUZXN0TmFtZWRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1
Y3RvciopOwotV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0
TmFtZWRDb25zdHJ1Y3RvciopOwotV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmUo
V2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKK1dlYktpdERPTUhUTUxQYXJhZ3JhcGhF
bGVtZW50KiB3cmFwSFRNTFBhcmFncmFwaEVsZW1lbnQoV2ViQ29yZTo6SFRNTFBhcmFncmFwaEVs
ZW1lbnQqKTsKK1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TFBhcmFncmFwaEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50Kik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZV9oICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNWJiYjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjgwIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9D
U1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJH
T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01IVE1MUGFyYW1FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudCogb2JqKQor
eworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVChraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhU
TUxQYXJhbUVsZW1lbnQqIHdyYXBIVE1MUGFyYW1FbGVtZW50KFdlYkNvcmU6OkhUTUxQYXJhbUVs
ZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX0hUTUxfUEFSQU1fRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAg
aWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1M
UGFyYW1FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFBhcmFt
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29y
ZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3JlbW92ZV9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkhUTUxQYXJhbUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MUGFyYW1FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3BhcmFtX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7
Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQs
IHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVN
RU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX05BTUUsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfVkFMVUUsCisgICAgUFJPUF9W
QUxVRV9UWVBFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1l
bnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFBh
cmFtRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5UKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfdHlwZV9hdHRyKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfVkFMVUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF92YWx1
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1ZBTFVFX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVt
ZW50X3NldF92YWx1ZV90eXBlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X25hbWUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0
X3R5cGVfYXR0cihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3BhcmFt
X2VsZW1lbnRfZ2V0X3ZhbHVlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1ZBTFVFX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9wYXJhbV9lbGVtZW50X2dldF92YWx1ZV90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2NsYXNzX2luaXQo
V2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3BhcmFtX2Vs
ZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFt
ZSIsCisgICAgICAgICAgICAiSFRNTFBhcmFtRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MUGFyYW1FbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBl
IiwKKyAgICAgICAgICAgICJIVE1MUGFyYW1FbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxQYXJhbUVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWx1
ZSIsCisgICAgICAgICAgICAiSFRNTFBhcmFtRWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTFBhcmFtRWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9WQUxVRV9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInZhbHVlLXR5cGUiLAorICAgICAgICAgICAgIkhUTUxQYXJhbUVsZW1lbnQ6dmFsdWUtdHlw
ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFBhcmFtRWxlbWVudDp2YWx1
ZS10eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50
X2luaXQoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVu
dF9nZXRfbmFtZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTFBhcmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFtX2Vs
ZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFy
YW1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFt
ZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9wYXJh
bV9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxl
bWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFBhcmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
cGFyYW1fZWxlbWVudF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZhbHVlQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFtX2Vs
ZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFBh
cmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZh
bHVlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3Bh
cmFtX2VsZW1lbnRfZ2V0X3ZhbHVlX3R5cGUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZhbHVldHlw
ZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9w
YXJhbV9lbGVtZW50X3NldF92YWx1ZV90eXBlKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUEFS
QU1fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTFBhcmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnZhbHVldHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MUGFyYW1FbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjMyZjY0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MUGFyYW1FbGVtZW50LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MUGFyYW1F
bGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1M
X1BBUkFNX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfUEFSQU1fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFNX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX1BBUkFNX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQU1fRUxFTUVOVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFNX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVF9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9QQVJBTV9FTEVNRU5ULCBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50Q2xhc3MpKQorCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFBhcmFtRWxl
bWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dl
dF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X3BhcmFtX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X25hbWU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9z
ZXRfbmFtZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF90eXBlX2F0
dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfcGFy
YW1fZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF90eXBlX2F0dHI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxl
bWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRf
Z2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF92YWx1ZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVt
ZW50X3NldF92YWx1ZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF92
YWx1ZV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3ZhbHVlX3R5cGUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3Zh
bHVlX3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
cGFyYW1fZWxlbWVudF9zZXRfdmFsdWVfdHlwZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTFBhcmFtRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhbUVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2MzE4MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFBhcmFtRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MUGFyYW1FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01IVE1MUGFyYW1FbGVtZW50KiB3cmFwSFRNTFBhcmFtRWxlbWVudChXZWJDb3JlOjpIVE1M
UGFyYW1FbGVtZW50Kik7CitXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTFBhcmFtRWxlbWVudCopOworV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MUGFyYW1FbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFByZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMmU0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFByZUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTFByZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01IVE1MUHJlRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxQcmVFbGVtZW50KiBr
aXQoV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX1BSRV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkp
OworfQorCitXZWJDb3JlOjpIVE1MUHJlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MUHJlRWxl
bWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxQcmVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQqIHdyYXBIVE1MUHJlRWxlbWVu
dChXZWJDb3JlOjpIVE1MUHJlRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVChnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfUFJFX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3Jl
KGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTFByZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVz
Y3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFBy
ZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUHJlRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2Vi
Q29yZTo6SFRNTFByZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MUHJlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQo
V2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNo
X2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAg
IGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRf
YWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitH
X0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MUHJlRWxlbWVudCwgd2Via2l0X2Rv
bV9odG1sX3ByZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExF
TUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1dJRFRI
LAorICAgIFBST1BfV1JBUCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9wcmVf
ZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MUHJlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3dpZHRoKHNlbGYsIGdfdmFsdWVf
Z2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dSQVA6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9zZXRfd3JhcChzZWxmLCBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NSFRNTFByZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9XSURU
SDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3ByZV9l
bGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9X
UkFQOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
cHJlX2VsZW1lbnRfZ2V0X3dyYXAoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFByZUVs
ZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9zZXRfcHJvcGVydHk7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1l
bnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAgICAgICBnX3Bh
cmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTFBy
ZUVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFByZUVs
ZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV1JB
UCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid3JhcCIsCisg
ICAgICAgICAgICAiSFRNTFByZUVsZW1lbnQ6d3JhcCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnYm9vbGVhbiBIVE1MUHJlRWxlbWVudDp3cmFwIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBy
ZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2xvbmcgd2Via2l0
X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MUHJlRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BSRV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MUHJlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxQcmVF
bGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
UFJFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21faHRtbF9wcmVfZWxlbWVudF9nZXRfd3JhcChXZWJLaXRET01IVE1MUHJlRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BSRV9FTEVNRU5UKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndyYXBBdHRyKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9zZXRfd3JhcChX
ZWJLaXRET01IVE1MUHJlRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1BSRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
UHJlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29s
ZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6d3JhcEF0dHIsIHZhbHVlKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OGI2ZjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxQcmVFbGVtZW50LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9t
L3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MUHJlRWxl
bWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9Q
UkVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1BSRV9FTEVNRU5UKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1M
X1BSRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MUHJlRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9QUkVfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9QUkVfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTFByZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1BSRV9FTEVN
RU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1BSRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1M
X1BSRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1BSRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX1BSRV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1BSRV9FTEVNRU5ULCBXZWJLaXRET01I
VE1MUHJlRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MUHJlRWxlbWVudCB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01IVE1MUHJlRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVu
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
aHRtbF9wcmVfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfcHJlX2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQcmVF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZwor
d2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MUHJlRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF93
aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUHJlRWxlbWVudAorICogQHZhbHVlOiBB
ICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfcHJlX2Vs
ZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF93cmFwOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxQcmVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3ByZV9lbGVt
ZW50X2dldF93cmFwKFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3dyYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFByZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF93cmFwKFdlYktpdERP
TUhUTUxQcmVFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MUHJlRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxQcmVFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVudFByaXZhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYyYTFmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MUHJlRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxQcmVFbGVt
ZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxQcmVFbGVtZW50UHJpdmF0ZV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxQcmVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxQcmVFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NSFRNTFByZUVsZW1lbnQqIHdyYXBIVE1MUHJlRWxlbWVudChXZWJDb3JlOjpIVE1MUHJlRWxl
bWVudCopOworV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MUHJlRWxl
bWVudCopOworV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFByZUVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TFByZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NSFRNTFByaXZhdGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJpdmF0ZS5j
cHAKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01IVE1MUHJpdmF0ZS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBy
aXZhdGUuY3BwCmluZGV4IDNmNDkyOTYuLmEyZWE4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NSFRNTFByaXZhdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFByaXZhdGUuY3BwCkBAIC0zMSw2NCArMzEsNjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJLaXRET01IVE1MUHJpdmF0ZS5oIgogCi0jaW5jbHVkZSAiSFRNTEFuY2hv
ckVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxBcmVhRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxBdWRpb0VsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MQlJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEJhc2VFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTEJvZHlFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKLSNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxETGlzdEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MRGlyZWN0b3J5RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxEaXZF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRW1iZWRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxGb250RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTEhSRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxIZWFkaW5nRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdl
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
S2V5Z2VuRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MTGFiZWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MTGlua0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZW51RWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxNZXRhRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNb2RFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTE9MaXN0RWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE9wdEdyb3Vw
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TFBhcmFncmFwaEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTFByZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MUXVvdGVFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVD
YXB0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTFRhYmxlQ29sRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTFRpdGxlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxVTGlzdEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQW5j
aG9yRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEFwcGxldEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxBcmVhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEF1ZGlvRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEJSRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTEJhc2VFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
Qm9keUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCdXR0b25FbGVtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MQ2FudmFzRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTERMaXN0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTERpcmVjdG9yeUVsZW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxEaXZFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEVtYmVkRWxlbWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZpZWxkU2V0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTEZvbnRFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUVsZW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGcmFtZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxGcmFtZVNldEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxIUkVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxIZWFkRWxlbWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEhlYWRpbmdFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSHRt
bEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxJRnJhbWVFbGVtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MSW1hZ2VFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
SW5wdXRFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MS2V5Z2VuRWxlbWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTExJRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TExhYmVsRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTExlZ2VuZEVsZW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxMaW5rRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTE1hcEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNYXJxdWVlRWxlbWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lbnVFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MTWV0YUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNb2RFbGVtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxP
TGlzdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxPYmplY3RFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MT3B0R3JvdXBFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MT3B0aW9uRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBhcmFncmFwaEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxQYXJhbUVsZW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxQcmVFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MUXVvdGVF
bGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MU2NyaXB0RWxlbWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTFNlbGVjdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxT
dHlsZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFibGVDZWxsRWxlbWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTFRhYmxlQ29sRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRh
YmxlRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRhYmxlUm93RWxlbWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUaXRs
ZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxVTGlzdEVsZW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlICJXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MQXBwbGV0RWxl
bWVudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRQcml2YXRl
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERP
TUhUTUxQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAl
CnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NSFRN
TFByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJpdmF0ZS5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxRdW90ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzcyZTFhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MUXVvdGVFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxRdW90ZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01IVE1MUXVvdGVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5v
ZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFF1b3Rl
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX1FVT1RFX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6
Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTFF1b3RlRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MUXVvdGVFbGVt
ZW50KiB3cmFwSFRNTFF1b3RlRWxlbWVudChXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX1FVT1RFX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1FV
T1RFX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
cXVvdGVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRp
c3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfcXVvdGVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MUXVv
dGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFF1b3RlRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X2FkZF9l
dmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50LCB3ZWJraXRfZG9t
X2h0bWxfcXVvdGVfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBM
RU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DSVRF
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfc2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9RVU9URV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0lURToKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfc2V0X2NpdGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcXVv
dGVfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1M
UXVvdGVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1FVT1RFX0VMRU1FTlQob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DSVRFOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxl
bWVudF9nZXRfY2l0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxRdW90ZUVsZW1l
bnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVt
ZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSVRFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNpdGUiLAorICAgICAgICAgICAgIkhUTUxR
dW90ZUVsZW1lbnQ6Y2l0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFF1
b3RlRWxlbWVudDpjaXRlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9xdW90
ZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudCogcmVxdWVzdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfcXVv
dGVfZWxlbWVudF9nZXRfY2l0ZShXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUVVPVEVfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjaXRlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfc2V0X2NpdGUoV2ViS2l0
RE9NSFRNTFF1b3RlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9RVU9URV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2l0ZUF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxR
dW90ZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmU3ODgx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50LmgKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VC
S0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAi
T25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudF9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxRdW90ZUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfUVVPVEVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0
bWxfcXVvdGVfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfUVVP
VEVfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9RVU9URV9FTEVNRU5ULCBXZWJLaXRET01IVE1MUXVv
dGVFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1FVT1RFX0VMRU1FTlRfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfUVVPVEVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudENsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfUVVPVEVfRUxFTUVOVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9RVU9U
RV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1FVT1RFX0VMRU1FTlRfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfUVVPVEVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9RVU9URV9F
TEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX1FVT1RFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxRdW90ZUVs
ZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudCB7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJL
aXRET01IVE1MUXVvdGVFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1s
X3F1b3RlX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3F1b3RlX2VsZW1lbnRfZ2V0X2NpdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFF1b3Rl
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9nZXRfY2l0ZShXZWJLaXRET01IVE1MUXVv
dGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVu
dF9zZXRfY2l0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9xdW90ZV9lbGVtZW50X3NldF9jaXRlKFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRE
T01IVE1MUXVvdGVFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVu
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjdiNDFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MUXVvdGVFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxRdW90ZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTFF1b3RlRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TUhUTUxRdW90ZUVsZW1lbnQqIHdyYXBIVE1MUXVvdGVFbGVtZW50KFdlYkNvcmU6OkhUTUxRdW90
ZUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
UXVvdGVFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxRdW90ZUVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjIzYjMyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MU2NyaXB0RWxlbWVudC5jcHAKQEAgLTAsMCArMSw0OTMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01IVE1MU2NyaXB0RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxTY3JpcHRFbGVt
ZW50KiBraXQoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9IVE1MX1NDUklQVF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpO
b2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MU2NyaXB0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFNjcmlwdEVs
ZW1lbnQqIHdyYXBIVE1MU2NyaXB0RWxlbWVudChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hU
TUxfU0NSSVBUX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfc2NyaXB0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAo
IWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxTY3Jp
cHRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFNjcmlwdEVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVU
YXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFt
ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2Vi
Q29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRp
c3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2Rpc3BhdGNoX2V2
ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfc2Ny
aXB0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRf
bGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MU2NyaXB0
RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5U
X1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBS
T1BfMCwKKyAgICBQUk9QX1RFWFQsCisgICAgUFJPUF9IVE1MX0ZPUiwKKyAgICBQUk9QX0VWRU5U
LAorICAgIFBST1BfQ0hBUlNFVCwKKyAgICBQUk9QX0FTWU5DLAorICAgIFBST1BfREVGRVIsCisg
ICAgUFJPUF9TUkMsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfQ1JPU1NfT1JJR0lOLAorICAg
IFBST1BfTk9OQ0UsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRN
TFNjcmlwdEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfU0NSSVBUX0VMRU1FTlQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9URVhUOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3RleHQoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9I
VE1MX0ZPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9odG1s
X2ZvcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0VWRU5UOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1l
bnRfc2V0X2V2ZW50KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQ0hBUlNFVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Nj
cmlwdF9lbGVtZW50X3NldF9jaGFyc2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVNZTkM6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfYXN5bmMoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGRVI6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfZGVmZXIoc2VsZiwgZ192YWx1ZV9n
ZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3NyYyhzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZ
UEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdHlwZV9hdHRy
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ1JPU1NfT1JJR0lOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05PTkNFOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X25vbmNlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3Njcmlw
dF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxT
Y3JpcHRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1NDUklQVF9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X2dldF90ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hU
TUxfRk9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2h0bWxfZm9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0VWRU5UOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2V2ZW50KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NIQVJTRVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfY2hhcnNldChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BU1lOQzoKKyAgICAgICAgZ192YWx1
ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9h
c3luYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZFUjoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVt
ZW50X2dldF9kZWZlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zY3Jp
cHRfZWxlbWVudF9nZXRfc3JjKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9zY3JpcHRfZWxlbWVudF9nZXRfdHlwZV9hdHRyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NST1NTX09SSUdJTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9jcm9zc19vcmlnaW4oc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9OQ0U6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRf
bm9uY2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X3NjcmlwdF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RFWFQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGV4dCIsCisgICAgICAgICAgICAiSFRNTFNjcmlw
dEVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNjcmlw
dEVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IVE1MX0ZPUiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJodG1sLWZvciIsCisgICAgICAgICAgICAi
SFRNTFNjcmlwdEVsZW1lbnQ6aHRtbC1mb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxTY3JpcHRFbGVtZW50Omh0bWwtZm9yIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VWRU5U
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImV2ZW50IiwKKyAg
ICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudDpldmVudCIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTFNjcmlwdEVsZW1lbnQ6ZXZlbnQiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Q0hBUlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaGFy
c2V0IiwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudDpjaGFyc2V0IiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MU2NyaXB0RWxlbWVudDpjaGFyc2V0IiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0FTWU5DLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJhc3luYyIsCisgICAgICAgICAgICAiSFRNTFNjcmlwdEVsZW1lbnQ6YXN5bmMiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFNjcmlwdEVsZW1lbnQ6YXN5bmMi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImRlZmVyIiwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVu
dDpkZWZlciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MU2NyaXB0RWxl
bWVudDpkZWZlciIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TUkMsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3JjIiwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0
RWxlbWVudDpzcmMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxTY3JpcHRF
bGVtZW50OnNyYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxTY3JpcHRF
bGVtZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxTY3JpcHRF
bGVtZW50OnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1JPU1NfT1JJR0lOLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNyb3NzLW9yaWdpbiIsCisgICAgICAg
ICAgICAiSFRNTFNjcmlwdEVsZW1lbnQ6Y3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MU2NyaXB0RWxlbWVudDpjcm9zcy1vcmlnaW4iLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTk9OQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAibm9uY2UiLAorICAgICAgICAgICAgIkhUTUxTY3JpcHRFbGVtZW50Om5vbmNlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MU2NyaXB0RWxlbWVudDpub25jZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfaW5pdChXZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVz
dCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3RleHQo
V2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNj
cmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdGV4dChXZWJL
aXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFRleHQoY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9o
dG1sX2ZvcihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Zm9yQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9odG1s
X2ZvcihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmb3JBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1l
bnRfZ2V0X2V2ZW50KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpldmVudEF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9z
ZXRfZXZlbnQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZXZlbnRB
dHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0
X2VsZW1lbnRfZ2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJzZXRBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0
X2VsZW1lbnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y2hhcnNldEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9hc3luYyhXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVN
RU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+YXN5bmMo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRf
ZWxlbWVudF9zZXRfYXN5bmMoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChz
ZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0QXN5bmModmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2RlZmVyKFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VM
RU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGVmZXJB
dHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3Jp
cHRfZWxlbWVudF9zZXRfZGVmZXIoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmRlZmVyQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3Nj
cmlwdF9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9zcmMoV2Vi
S2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90
eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3R5
cGVfYXR0cihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X2dldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y3Jv
c3NPcmlnaW4oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldENyb3NzT3JpZ2luKGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfbm9uY2UoV2ViS2l0
RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6Om5vbmNlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9ub25jZShXZWJLaXRET01I
VE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpub25jZUF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODI3
NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LmgKQEAgLTAsMCAr
MSwxNzEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50X2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9TQ1JJUFRfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9TQ1JJUFRfRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTFNjcmlwdEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfU0NSSVBUX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9TQ1JJUFRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9T
Q1JJUFRfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9TQ1JJUFRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9TQ1JJUFRfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRN
TFNjcmlwdEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRDbGFzcyB7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90ZXh0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9nZXRfdGV4dChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF90ZXh0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdGV4dChX
ZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2h0bWxfZm9yOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxl
bWVudF9nZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfaHRtbF9mb3I6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50
X3NldF9odG1sX2ZvcihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0
X2V2ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9zY3JpcHRfZWxlbWVudF9nZXRfZXZlbnQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfZXZlbnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X3NldF9ldmVudChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
Z2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9jaGFyc2V0KFdlYktpdERPTUhUTUxTY3JpcHRFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0
X2RlZmVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9kZWZlcihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9k
ZWZlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICogQHZhbHVl
OiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfc2V0X2RlZmVyKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVt
ZW50X2dldF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfc3Jj
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRf
ZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9n
ZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
c2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFNjcmlwdEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDk0YjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFNjcmlwdEVsZW1lbnQuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogd3JhcEhUTUxTY3JpcHRFbGVt
ZW50KFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Kik7CitXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MU2Ny
aXB0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFVuc3RhYmxlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxTY3JpcHRFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lODA0YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRVbnN0YWJsZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRf
ZWxlbWVudF9zZXRfY2hhcnNldChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1l
bnRfZ2V0X2FzeW5jOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9n
ZXRfYXN5bmMoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfYXN5bmM6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3NjcmlwdF9lbGVtZW50X3NldF9hc3luYyhXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxl
bWVudF9nZXRfY3Jvc3Nfb3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1l
bnRfZ2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9jcm9zc19vcmlnaW46
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9N
SFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9ub25jZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9ub25jZShXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9u
b25jZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X25vbmNlKFdlYktpdERPTUhU
TUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAv
KiBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyZWY3NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNzQ0IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVj
dEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01IVE1MRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50VW5zdGFibGUu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIGtpdChXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfU0VMRUNUX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7
Cit9CisKK1dlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogd3JhcEhU
TUxTZWxlY3RFbGVtZW50KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1NF
TEVDVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9TRUxFQ1RfRUxF
TUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJL
aXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50
KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0
Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRE
T01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQg
PSB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZh
Y2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9h
ZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LCB3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfQVVUT0ZPQ1VTLAorICAgIFBST1BfRElTQUJMRUQsCisgICAgUFJPUF9GT1JNLAorICAgIFBS
T1BfTVVMVElQTEUsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfUkVRVUlSRUQsCisgICAgUFJP
UF9TSVpFLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX09QVElPTlMsCisgICAgUFJPUF9MRU5H
VEgsCisgICAgUFJPUF9TRUxFQ1RFRF9PUFRJT05TLAorICAgIFBST1BfU0VMRUNURURfSU5ERVgs
CisgICAgUFJPUF9WQUxVRSwKKyAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAgUFJPUF9WQUxJ
RElUWSwKKyAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICBQUk9QX0xBQkVMUywKKyAg
ICBQUk9QX0FVVE9DT01QTEVURSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxF
TUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X0FVVE9GT0NVUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9h
dXRvZm9jdXMoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTVVMVElQTEU6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbXVsdGlwbGUoc2VsZiwgZ192YWx1ZV9nZXRf
Ym9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVR
VUlSRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfcmVxdWly
ZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X3NldF9zaXplKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X3NldF9sZW5ndGgoc2VsZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpLCBudWxscHRy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX0lOREVYOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NlbGVjdGVkX2luZGV4KHNlbGYs
IGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3ZhbHVl
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQVVUT0NPTVBMRVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVOVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FVVE9GT0NVUzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X2dldF9hdXRvZm9jdXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfZGlzYWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfRk9STToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2Zvcm0oc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTVVMVElQTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbXVsdGlwbGUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9u
YW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFUVVJUkVEOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X3JlcXVpcmVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9nZXRfc2l6ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX09QVElPTlM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9vcHRpb25zKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbGVuZ3Ro
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX09QVElPTlM6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVj
dF9lbGVtZW50X2dldF9zZWxlY3RlZF9vcHRpb25zKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NFTEVDVEVEX0lOREVYOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdGVkX2luZGV4KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0
X3ZhbHVlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJTExfVkFMSURB
VEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9WQUxJRElUWToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF92YWxpZGF0aW9uX21lc3NhZ2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTEFCRUxTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbGFiZWxzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FVVE9DT01QTEVURToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9hdXRvY29tcGxldGUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVj
dF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRDbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9GT0NVUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYXV0b2ZvY3VzIiwKKyAgICAgICAgICAgICJIVE1M
U2VsZWN0RWxlbWVudDphdXRvZm9jdXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xl
YW4gSFRNTFNlbGVjdEVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJ
U0FCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkaXNh
YmxlZCIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFNlbGVjdEVsZW1lbnQ6ZGlzYWJsZWQiLAor
ICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudDpmb3Jt
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1M
U2VsZWN0RWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZP
Uk1fRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX01VTFRJUExFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJtdWx0aXBsZSIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6bXVs
dGlwbGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFNlbGVjdEVsZW1l
bnQ6bXVsdGlwbGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJIVE1MU2Vs
ZWN0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MU2Vs
ZWN0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFUVVJUkVELAorICAgICAgICBn
X3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJyZXF1aXJlZCIsCisgICAgICAgICAg
ICAiSFRNTFNlbGVjdEVsZW1lbnQ6cmVxdWlyZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gSFRNTFNlbGVjdEVsZW1lbnQ6cmVxdWlyZWQiLAorICAgICAgICAgICAgRkFMU0Us
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfU0laRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2l6ZSIs
CisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6c2l6ZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnbG9uZyBIVE1MU2VsZWN0RWxlbWVudDpzaXplIiwKKyAgICAgICAgICAgIEdfTUlO
TE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6dHlw
ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MU2VsZWN0RWxlbWVudDp0eXBl
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfT1BUSU9OUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJvcHRpb25zIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVu
dDpvcHRpb25zIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTE9wdGlvbnND
b2xsZWN0aW9uKiBIVE1MU2VsZWN0RWxlbWVudDpvcHRpb25zIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX09QVElPTlNfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiSFRN
TFNlbGVjdEVsZW1lbnQ6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1bG9uZyBI
VE1MU2VsZWN0RWxlbWVudDpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9TRUxFQ1RFRF9PUFRJT05TLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAg
ICAgICAgInNlbGVjdGVkLW9wdGlvbnMiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50
OnNlbGVjdGVkLW9wdGlvbnMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1M
Q29sbGVjdGlvbiogSFRNTFNlbGVjdEVsZW1lbnQ6c2VsZWN0ZWQtb3B0aW9ucyIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VMRUNURURfSU5ERVgsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNlbGVjdGVkLWluZGV4IiwK
KyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudDpzZWxlY3RlZC1pbmRleCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MU2VsZWN0RWxlbWVudDpzZWxlY3RlZC1pbmRleCIs
CisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxVRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWx1ZSIsCisgICAgICAgICAgICAi
SFRNTFNlbGVjdEVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxTZWxlY3RFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJTExfVkFMSURB
VEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndpbGwtdmFs
aWRhdGUiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OndpbGwtdmFsaWRhdGUiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MU2VsZWN0RWxlbWVudDp3aWxsLXZh
bGlkYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURJVFksCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAidmFsaWRpdHkiLAorICAgICAgICAgICAgIkhUTUxT
ZWxlY3RFbGVtZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZSogSFRNTFNlbGVjdEVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZhbGlkYXRpb24tbWVzc2Fn
ZSIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxTZWxlY3RFbGVtZW50OnZhbGlkYXRp
b24tbWVzc2FnZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBQkVMUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJsYWJlbHMiLAorICAgICAgICAgICAgIkhUTUxTZWxl
Y3RFbGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGVM
aXN0KiBIVE1MU2VsZWN0RWxlbWVudDpsYWJlbHMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX05PREVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0FVVE9DT01QTEVURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJhdXRvY29tcGxldGUiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RF
bGVtZW50OmF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TFNlbGVjdEVsZW1lbnQ6YXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBy
ZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NTm9k
ZSogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2l0ZW0oV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERP
TU5vZGUqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9uYW1lZF9pdGVtKFdlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRO
YW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpO
b2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmFtZWRJdGVtKGNvbnZlcnRl
ZE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2FkZChXZWJLaXRET01IVE1M
U2VsZWN0RWxlbWVudCogc2VsZiwgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGVsZW1lbnQsIFdlYktp
dERPTUhUTUxFbGVtZW50KiBiZWZvcmUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChlbGVtZW50KSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChiZWZvcmUpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCog
Y29udmVydGVkRWxlbWVudCA9IFdlYktpdDo6Y29yZShlbGVtZW50KTsKKyAgICBXZWJDb3JlOjpI
VE1MRWxlbWVudCogY29udmVydGVkQmVmb3JlID0gV2ViS2l0Ojpjb3JlKGJlZm9yZSk7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+YWRkKCpjb252ZXJ0ZWRF
bGVtZW50LCBjb252ZXJ0ZWRCZWZvcmUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X3JlbW92ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZiwgZ2xvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5yZW1vdmVCeUluZGV4KGluZGV4KTsKK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5jaGVja1ZhbGlkaXR5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShXZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChlcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRXJyb3IgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoZXJyb3IpOworICAgIGl0ZW0tPnNldEN1c3RvbVZhbGlkaXR5
KGNvbnZlcnRlZEVycm9yKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X2dldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphdXRvZm9jdXNBdHRyKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9z
ZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikp
OworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjph
dXRvZm9jdXNBdHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
ZGlzYWJsZWRBdHRyLCB2YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxGb3JtRWxlbWVudCogd2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9tdWx0aXBsZShXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVN
RU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bXVsdGlw
bGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9zZXRfbXVsdGlwbGUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYs
IGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0TXVsdGlwbGUodmFsdWUpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VM
RUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9y
ZXF1aXJlZChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlcXVpcmVkQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3JlcXVpcmVkKFdl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZXF1aXJlZEF0dHIsIHZh
bHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zaXpl
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3Vs
dCA9IGl0ZW0tPnNpemUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVD
VF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTaXplKHZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0X3R5cGUoV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHdlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9nZXRfb3B0aW9ucyhXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b3B0aW9ucygpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfZ2V0X2xlbmd0aChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2xlbmd0
aChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldExlbmd0aCh2YWx1ZSwg
ZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OworICAgIH0KK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfb3B0aW9ucyhXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zZWxlY3RlZE9wdGlvbnMoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnbG9uZyB3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdGVkX2luZGV4KFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
U0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNl
bGVjdGVkSW5kZXgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfc2VsZWN0ZWRfaW5kZXgoV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U2VsZWN0ZWRJbmRleCh2
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3Zh
bHVlKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZhbHVlKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF92YWx1
ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFZhbHVlKGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53aWxsVmFsaWRhdGUoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxTZWxlY3RFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpWYWxpZGl0eVN0YXRlPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dmFsaWRpdHkoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxF
Q1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+dmFsaWRhdGlvbk1lc3NhZ2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9n
ZXRfbGFiZWxzKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmxhYmVscygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2F1dG9jb21w
bGV0ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdXRvY29tcGxldGUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRf
c2V0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF1dG9jb21wbGV0ZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTk0NTdhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudC5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Vi
a2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1M
X1NFTEVDVF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfU0VMRUNUX0VMRU1FTlQob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfU0VMRUNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1NFTEVDVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NF
TEVDVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudENsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0VMRUNUX0VMRU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlRfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfU0VMRUNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfU0VMRUNUX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfU0VMRUNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxTZWxlY3RFbGVt
ZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50IHsKKyAgICBX
ZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1s
X3NlbGVjdF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfaXRlbShXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfbmFtZWRfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0
RWxlbWVudAorICogQG5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9uYW1lZF9pdGVtKFdlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X2FkZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudAorICogQGVsZW1lbnQ6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAYmVm
b3JlOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQoV2Vi
S2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxFbGVtZW50KiBlbGVt
ZW50LCBXZWJLaXRET01IVE1MRWxlbWVudCogYmVmb3JlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3JlbW92ZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICogQGluZGV4OiBBICNnbG9uZworICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfcmVtb3Zl
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9hdXRvZm9jdXM6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9hdXRvZm9jdXM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jv
b2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X3NldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRf
Z2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X3NldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X2dldF9mb3JtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9nZXRfbXVsdGlwbGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X211bHRpcGxlKFdlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfc2V0X211bHRpcGxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbXVsdGlwbGUoV2ViS2l0RE9N
SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9uYW1lKFdl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJ
VF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2l6ZShXZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3NlbGVjdF9lbGVtZW50X3NldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3RfdHlw
ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9vcHRpb25zOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01I
VE1MT3B0aW9uc0NvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0
X29wdGlvbnMoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8K
K1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2xl
bmd0aChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X3NldF9sZW5ndGgoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGd1bG9u
ZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJ
IGdsb25nCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdGVkX2luZGV4
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NlbGVjdGVkX2luZGV4OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfc2VsZWN0
ZWRfaW5kZXgoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3ZhbHVlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxl
bWVudF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfdmFsdWU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF92
YWx1ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3dpbGxfdmFs
aWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TFNlbGVjdEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4NmMyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFNlbGVjdEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFByaXZhdGVfaAorCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MU2VsZWN0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50KiB3cmFwSFRNTFNlbGVjdEVsZW1lbnQoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MTlh
MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50VW5zdGFibGUuaApA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTFNlbGVjdEVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfY2hlY2tfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2N1c3RvbV92YWxp
ZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICogQGVycm9y
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3JlcXVpcmVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfcmVxdWlyZWQoV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9zZXRfcmVxdWlyZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X3NldF9yZXF1aXJlZChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xl
YW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRf
c2VsZWN0ZWRfb3B0aW9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3Nl
bGVjdGVkX29wdGlvbnMoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsaWRpdHk6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSoKK3dlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9n
ZXRfdmFsaWRhdGlvbl9tZXNzYWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9sYWJlbHM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVMaXN0CisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9sYWJlbHMoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRf
YXV0b2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2F1
dG9jb21wbGV0ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9hdXRvY29tcGxldGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
U3R5bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjMzAxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFN0eWxlRWxlbWVudC5jcHAKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4K
KyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTFN0eWxlRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01TdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1NUWUxFX0VMRU1F
TlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiB3cmFwSFRNTFN0eWxlRWxlbWVudChXZWJD
b3JlOjpIVE1MU3R5bGVFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1NUWUxFX0VMRU1FTlQoZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1NUWUxFX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2
ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29k
ZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9hZGRfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpIVE1MU3R5bGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TFN0eWxlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVu
dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudCwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQ
RV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9ESVNBQkxFRCwKKyAgICBQUk9QX01FRElBLAorICAgIFBS
T1BfVFlQRSwKKyAgICBQUk9QX1NIRUVULAorICAgIFBST1BfTk9OQ0UsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9IVE1MX1NUWUxFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3N0
eWxlX2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FRElBOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfbWVkaWEoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfdHlwZV9hdHRyKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9OQ0U6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3NldF9ub25jZShzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVy
dHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfU1RZ
TEVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfZGlzYWJsZWQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTUVESUE6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9tZWRpYShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfdHlwZV9hdHRy
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NIRUVUOgorICAgICAgICBn
X3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dl
dF9zaGVldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT05DRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfZ2V0X25vbmNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFN0eWxlRWxl
bWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X3Byb3BlcnR5Owor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJU0FCTEVELAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkaXNhYmxlZCIsCisgICAgICAg
ICAgICAiSFRNTFN0eWxlRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnYm9vbGVhbiBIVE1MU3R5bGVFbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX01FRElBLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1l
ZGlhIiwKKyAgICAgICAgICAgICJIVE1MU3R5bGVFbGVtZW50Om1lZGlhIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MU3R5bGVFbGVtZW50Om1lZGlhIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
dHlwZSIsCisgICAgICAgICAgICAiSFRNTFN0eWxlRWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MU3R5bGVFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfU0hFRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAi
c2hlZXQiLAorICAgICAgICAgICAgIkhUTUxTdHlsZUVsZW1lbnQ6c2hlZXQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01TdHlsZVNoZWV0KiBIVE1MU3R5bGVFbGVtZW50OnNoZWV0
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PTkNFLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5vbmNlIiwKKyAgICAgICAg
ICAgICJIVE1MU3R5bGVFbGVtZW50Om5vbmNlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MU3R5bGVFbGVtZW50Om5vbmNlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogcmVx
dWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MU3R5bGVF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVfRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+ZGlzYWJs
ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zdHls
ZV9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmLCBn
Ym9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXREaXNhYmxlZCh2YWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfbWVkaWEoV2ViS2l0RE9NSFRNTFN0eWxl
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NUWUxFX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6Om1lZGlhQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X21lZGlhKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
U1RZTEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6Om1lZGlhQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MU3R5
bGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFN0eWxlRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9TVFlMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0
RE9NU3R5bGVTaGVldCogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3NoZWV0KFdl
YktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9TVFlMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU3R5bGVF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpT
dHlsZVNoZWV0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2hlZXQoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X25vbmNlKFdlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpub25jZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X3NldF9ub25jZShXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1NUWUxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpub25jZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MU3R5bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWE3MGFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MU3R5bGVFbGVtZW50LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MU3R5bGVF
bGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1M
X1NUWUxFX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1NUWUxFX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfU1RZTEVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NUWUxFX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX1NUWUxFX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU1RZTEVfRUxFTUVOVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NUWUxFX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfU1RZTEVfRUxFTUVOVF9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9TVFlMRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50Q2xhc3MpKQorCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFN0eWxlRWxl
bWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dl
dF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxTdHlsZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3Nl
dF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9zdHlsZV9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50
KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3N0eWxl
X2VsZW1lbnRfZ2V0X21lZGlhOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHlsZUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X21lZGlhKFdlYktpdERPTUhUTUxTdHlsZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3Nl
dF9tZWRpYToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9z
dHlsZV9lbGVtZW50X3NldF9tZWRpYShXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVt
ZW50X2dldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50
X3NldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxTdHlsZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3N0eWxlX2VsZW1lbnRfZ2V0X3NoZWV0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVN0
eWxlU2hlZXQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01TdHlsZVNoZWV0Kgord2Via2l0X2Rv
bV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3NoZWV0KFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQq
IHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFN0eWxlRWxl
bWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxTdHlsZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWUxZTRkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVu
dFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MU3R5bGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MU3R5bGVFbGVt
ZW50KiB3cmFwSFRNTFN0eWxlRWxlbWVudChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Kik7CitX
ZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCop
OworV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MU3R5bGVFbGVt
ZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxT
dHlsZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVu
dFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YTYzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxTdHlsZUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudFVu
c3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudFVuc3RhYmxlX2gKKwor
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9ub25jZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfbm9uY2UoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X25vbmNl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X25vbmNlKFdlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxTdHlsZUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxU
YWJsZUNhcHRpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjJjNGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcApAQCAtMCwwICsxLDE3MiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCoga2l0KFdlYkNvcmU6
OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
SFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUq
PihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjb3JlKFdl
YktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRE
T01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogd3JhcEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KFdl
YkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NBUFRJT05f
RUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0FQVElPTl9F
TEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NhcHRpb25fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29y
ZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVD
YXB0aW9uRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlw
dGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRF
dmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2FwdGlvbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25F
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktp
dERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVu
dCA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7
CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9j
YXB0aW9uX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2Vs
ZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQUxJR04sCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X3NldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X3NldF9hbGlnbihzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRf
Z2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MVGFibGVD
YXB0aW9uRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RD
bGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVu
dF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJhbGlnbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6YWxpZ24iLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OmFs
aWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2Vs
ZW1lbnRfaW5pdChXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVDYXB0aW9u
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NB
UFRJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9zZXRfYWxpZ24oV2Vi
S2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVD
YXB0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxU
YWJsZUNhcHRpb25FbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3MmQyYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudF9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFC
TEVfQ0FQVElPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5U
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0FQVElPTl9F
TEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVF9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZUNh
cHRpb25FbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25F
bGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF9h
bGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVD
YXB0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nh
cHRpb25fZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9zZXRfYWxpZ24oV2Vi
S2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxl
bWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTc0YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MVGFibGVDYXB0aW9uRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZUNhcHRp
b25FbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQqIHdyYXBIVE1MVGFibGVDYXB0aW9uRWxlbWVudChXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9u
RWxlbWVudCopOworV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGtpdChXZWJDb3Jl
OjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCopOworV2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjFmOWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNjU3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MVGFibGVDZWxsRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIG9iaikKK3sKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiB3cmFwSFRNTFRhYmxlQ2VsbEVsZW1lbnQoV2Vi
Q29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5U
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQsICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERP
TUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNv
cmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X3RhYmxlX2NlbGxfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpy
ZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09E
RShXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nl
bGxfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DRUxMX0lOREVYLAor
ICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9BWElTLAorICAgIFBST1BfQkdfQ09MT1IsCisgICAg
UFJPUF9DSCwKKyAgICBQUk9QX0NIX09GRiwKKyAgICBQUk9QX0NPTF9TUEFOLAorICAgIFBST1Bf
Uk9XX1NQQU4sCisgICAgUFJPUF9IRUFERVJTLAorICAgIFBST1BfSEVJR0hULAorICAgIFBST1Bf
Tk9fV1JBUCwKKyAgICBQUk9QX1ZfQUxJR04sCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0FC
QlIsCisgICAgUFJPUF9TQ09QRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVEFC
TEVfQ0VMTF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2Vs
ZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQVhJUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9zZXRfYXhpcyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JHX0NPTE9SOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9iZ19jb2xvcihzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jaChzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NIX09GRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRf
Y2hfb2ZmKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ09MX1NQQU46CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfc2V0X2NvbF9zcGFuKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JPV19TUEFOOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9yb3dfc3BhbihzZWxmLCBnX3ZhbHVlX2dl
dF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUFERVJTOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9oZWFkZXJzKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X3NldF9oZWlnaHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9OT19XUkFQOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X3NldF9ub193cmFwKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZfQUxJR046CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3ZfYWxpZ24oc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURU
SDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfd2lkdGgo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9BQkJSOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X3NldF9hYmJyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU0NPUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfc2V0X3Njb3BlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxl
bWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVD
ZWxsRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DRUxMX0lO
REVYOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X2dldF9jZWxsX2luZGV4KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BWElTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9heGlzKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JHX0NPTE9SOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X2dldF9iZ19jb2xvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
SDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9nZXRfY2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ0hfT0ZGOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jaF9vZmYoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQ09MX1NQQU46CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NvbF9zcGFuKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JPV19TUEFOOgorICAgICAgICBn
X3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2dldF9yb3dfc3BhbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUFE
RVJTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWFkZXJzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfaGVpZ2h0KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05PX1dSQVA6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X25v
X3dyYXAoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVl9BTElHTjoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nl
bGxfZWxlbWVudF9nZXRfdl9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQUJCUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWJicihzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ09QRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfc2Nv
cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NFTExfSU5ERVgs
CisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImNlbGwtaW5kZXgiLAor
ICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OmNlbGwtaW5kZXgiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnbG9uZyBIVE1MVGFibGVDZWxsRWxlbWVudDpjZWxsLWluZGV4IiwKKyAg
ICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxU
YWJsZUNlbGxFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MVGFibGVDZWxsRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BWElTLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImF4aXMiLAorICAgICAgICAg
ICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OmF4aXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxUYWJsZUNlbGxFbGVtZW50OmF4aXMiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkdf
Q09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYmctY29s
b3IiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OmJnLWNvbG9yIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVudDpiZy1jb2xvciIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJjaCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Y2giLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNlbGxFbGVtZW50OmNoIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0NIX09GRiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJjaC1vZmYiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50
OmNoLW9mZiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6Y2gtb2ZmIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTF9TUEFOLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJjb2wtc3BhbiIsCisgICAgICAgICAgICAiSFRN
TFRhYmxlQ2VsbEVsZW1lbnQ6Y29sLXNwYW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xv
bmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Y29sLXNwYW4iLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfUk9XX1NQQU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgInJvdy1zcGFuIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVu
dDpyb3ctc3BhbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MVGFibGVDZWxs
RWxlbWVudDpyb3ctc3BhbiIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9IRUFERVJTLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhl
YWRlcnMiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OmhlYWRlcnMiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNlbGxFbGVtZW50OmhlYWRlcnMi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1l
bnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxs
RWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTk9fV1JBUCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibm8td3JhcCIsCisgICAgICAgICAgICAi
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6bm8td3JhcCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Ym9vbGVhbiBIVE1MVGFibGVDZWxsRWxlbWVudDpuby13cmFwIiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1ZfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
di1hbGlnbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6di1hbGlnbiIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6di1hbGln
biIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1l
bnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNlbGxF
bGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FCQlIsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWJiciIsCisgICAgICAgICAgICAiSFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6YWJiciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRh
YmxlQ2VsbEVsZW1lbnQ6YWJiciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ09QRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzY29wZSIsCisgICAgICAgICAgICAi
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6c2NvcGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxUYWJsZUNlbGxFbGVtZW50OnNjb3BlIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MVGFibGVDZWxs
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NlbGxfaW5kZXgoV2Vi
S2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPmNlbGxJbmRleCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRE
T01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRh
YmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYWxp
Z24oV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVD
ZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFs
aWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9nZXRfYXhpcyhXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmF4aXNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9heGlzKFdlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpheGlzQXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYmdfY29s
b3IoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpiZ2NvbG9yQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxl
bWVudF9zZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VM
TF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmJnY29sb3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jaChXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RB
QkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jaChXZWJLaXRET01I
VE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhckF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1l
bnRfZ2V0X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJvZmZB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJvZmZBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2dsb25nIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NvbF9zcGFuKFdl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5jb2xTcGFuRm9yQmluZGluZ3MoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NvbF9z
cGFuKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXRDb2xTcGFuRm9yQmluZGluZ3ModmFsdWUpOworfQorCitnbG9uZyB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9yb3dfc3BhbihXZWJLaXRET01I
VE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxl
Q2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0
ID0gaXRlbS0+cm93U3BhbkZvckJpbmRpbmdzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9yb3dfc3BhbihXZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+c2V0Um93U3BhbkZvckJpbmRpbmdzKHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2hlYWRlcnMoV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpoZWFkZXJzQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfaGVhZGVycyhXZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVhZGVyc0F0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmhlaWdodEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MVGFibGVDZWxs
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVpZ2h0QXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9u
b193cmFwKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5vd3JhcEF0dHIpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRf
bm9fd3JhcChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6Om5vd3JhcEF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfZ2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjp2YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJs
ZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWxpZ25BdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dl
dF93aWR0aChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VM
TF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OndpZHRoQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWJicihXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RB
QkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmFiYnJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9hYmJyKFdlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphYmJyQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxl
bWVudF9nZXRfc2NvcGUoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnNj
b3BlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9zZXRfc2NvcGUoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0U2NvcGUoY29udmVydGVkVmFsdWUpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNl
bGxFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1ZmM5ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaApAQCAtMCwwICsx
LDMxNSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9f
V0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJv
ciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHku
IgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRfaAorI2Rl
ZmluZSBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQgICAgICAgICAg
ICAod2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxF
X0NFTExfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NF
TExfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRDbGFzcykKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9D
RUxMX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9UQUJMRV9DRUxMX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5U
LCBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRE
T01IVE1MVGFibGVDZWxsRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudENs
YXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0
X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfY2VsbF9pbmRleDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NlbGxfaW5kZXgoV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2FsaWduKFdl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9hbGln
bihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9heGlz
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2F4aXMoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0
X2F4aXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYXhpcyhXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X2dldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9iZ19j
b2xvcihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYmdfY29sb3I6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9zZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxl
bWVudF9nZXRfY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2Vs
ZW1lbnRfc2V0X2NoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NoX29mZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9j
aF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NoX29mZjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfY29sX3NwYW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jb2xfc3BhbihXZWJLaXRET01IVE1M
VGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NlbGxfZWxlbWVudF9zZXRfY29sX3NwYW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY29sX3NwYW4oV2Vi
S2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9yb3dfc3BhbjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfZ2V0X3Jvd19zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9yb3df
c3BhbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZh
bHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X3NldF9yb3dfc3BhbihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfZ2V0X2hlYWRlcnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfaGVhZGVycyhX
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfaGVhZGVyczoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9o
ZWFkZXJzKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0
X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2Vs
ZW1lbnRfc2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfbm9fd3JhcDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfZ2V0X25vX3dyYXAoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X25vX3dy
YXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfbm9fd3JhcChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3ZfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TFRhYmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfdl9hbGln
bihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfdl9hbGlnbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3Nl
dF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
Z2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUNl
bGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9l
bGVtZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9hYmJyOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
Z2V0X2FiYnIoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2FiYnI6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9zZXRfYWJicihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2dldF9zY29wZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9zY29wZShXZWJLaXRET01IVE1MVGFibGVD
ZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfc2NvcGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfc2NvcGUoV2ViS2l0RE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVD
ZWxsRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
ZGM4OGUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudFByaXZh
dGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxUYWJsZUNlbGxFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRN
TFRhYmxlQ2VsbEVsZW1lbnQqIHdyYXBIVE1MVGFibGVDZWxsRWxlbWVudChXZWJDb3JlOjpIVE1M
VGFibGVDZWxsRWxlbWVudCopOworV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGtpdChX
ZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCopOworV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjk5NGNmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUNv
bEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBraXQo
V2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRf
RE9NX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUq
PihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGNvcmUoV2ViS2l0
RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MVGFibGVD
b2xFbGVtZW50KiB3cmFwSFRNTFRhYmxlQ29sRWxlbWVudChXZWJDb3JlOjpIVE1MVGFibGVDb2xF
bGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUo
ZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRk
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X3RhYmxlX2NvbF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFk
ZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQsIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxF
TUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQs
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX0NILAorICAgIFBST1BfQ0hfT0ZGLAorICAgIFBST1Bf
U1BBTiwKKyAgICBQUk9QX1ZfQUxJR04sCisgICAgUFJPUF9XSURUSCwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9jaChzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIX09GRjoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9jaF9vZmYoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TUEFOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3Nw
YW4oc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVl9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVt
ZW50X3NldF92X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jb2xfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29s
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRh
YmxlQ29sRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdO
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY29sX2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0NIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2NoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NIX09GRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9jaF9vZmYoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1BBTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9zcGFuKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZfQUxJR046CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9n
ZXRfdl9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NvbF9lbGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01I
VE1MVGFibGVDb2xFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29i
amVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJh
bGlnbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ29sRWxlbWVudDphbGlnbiIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ29sRWxlbWVudDphbGlnbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJjaCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ29sRWxlbWVudDpjaCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ29sRWxlbWVudDpjaCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9DSF9PRkYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAiY2gtb2ZmIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDb2xFbGVtZW50OmNoLW9mZiIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ29sRWxlbWVudDpjaC1v
ZmYiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1BBTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
CisgICAgICAgICAgICAic3BhbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ29sRWxlbWVudDpz
cGFuIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxUYWJsZUNvbEVsZW1lbnQ6
c3BhbiIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WX0FMSUdOLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInYtYWxpZ24iLAorICAg
ICAgICAgICAgIkhUTUxUYWJsZUNvbEVsZW1lbnQ6di1hbGlnbiIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ29sRWxlbWVudDp2LWFsaWduIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
IndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDb2xFbGVtZW50OndpZHRoIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDb2xFbGVtZW50OndpZHRoIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9pbml0KFdl
YktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50
X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9l
bGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZUNvbEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y2hhckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlQ29s
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2NoX29mZihX
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxUYWJsZUNvbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJvZmZBdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0
X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y2hhcm9mZkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1s
X3RhYmxlX2NvbF9lbGVtZW50X2dldF9zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zcGFuKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfc2V0X3NwYW4oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldFNwYW4odmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNv
bEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9D
T0xfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6dmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF92X2FsaWduKFdlYktpdERPTUhU
TUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWxpZ25BdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRf
Z2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2Vs
ZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjp3aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MVGFibGVDb2xFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk2ZTAwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50LmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRv
bS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
VGFibGVDb2xFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF90
YWJsZV9jb2xfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFC
TEVfQ09MX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ09M
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQsIFdlYktpdERPTUhUTUxU
YWJsZUNvbEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NP
TF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NPTF9FTEVN
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTFRhYmxlQ29sRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9jb2xfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUYWJsZUNvbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9hbGlnbihX
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9hbGlnbihX
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfY2g6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29s
X2VsZW1lbnRfZ2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2g6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfc2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dl
dF9jaF9vZmY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVDb2xF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfc2V0X2NoX29mZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZUNv
bEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9zcGFuOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJL
SVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3NwYW4o
V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9zcGFuOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9zcGFuKFdl
YktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3ZfYWxpZ246CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2Vs
ZW1lbnRfZ2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF92X2FsaWduOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2Nv
bF9lbGVtZW50X3NldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nv
bF9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDb2xF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRN
TFRhYmxlQ29sRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NvbF9lbGVtZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVD
b2xFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRN
TFRhYmxlQ29sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVD
b2xFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgw
MTEzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxUYWJsZUNvbEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TFRhYmxlQ29sRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGFi
bGVDb2xFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFRhYmxl
Q29sRWxlbWVudCogd3JhcEhUTUxUYWJsZUNvbEVsZW1lbnQoV2ViQ29yZTo6SFRNTFRhYmxlQ29s
RWxlbWVudCopOworV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCoga2l0KFdlYkNvcmU6OkhU
TUxUYWJsZUNvbEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGNvcmUo
V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmIxODQzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50LmNwcApAQCAtMCwwICsxLDcxNyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAi
R09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1F
TlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6
OkhUTUxUYWJsZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiB3cmFwSFRNTFRhYmxlRWxlbWVudChXZWJD
b3JlOjpIVE1MVGFibGVFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQoZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2
ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29k
ZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9hZGRfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpIVE1MVGFibGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TFRhYmxlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVu
dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01I
VE1MVGFibGVFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudCwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQ
RV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9DQVBUSU9OLAorICAgIFBST1BfVF9IRUFELAorICAgIFBS
T1BfVF9GT09ULAorICAgIFBST1BfUk9XUywKKyAgICBQUk9QX1RfQk9ESUVTLAorICAgIFBST1Bf
QUxJR04sCisgICAgUFJPUF9CR19DT0xPUiwKKyAgICBQUk9QX0JPUkRFUiwKKyAgICBQUk9QX0NF
TExfUEFERElORywKKyAgICBQUk9QX0NFTExfU1BBQ0lORywKKyAgICBQUk9QX0ZSQU1FLAorICAg
IFBST1BfUlVMRVMsCisgICAgUFJPUF9TVU1NQVJZLAorICAgIFBST1BfV0lEVEgsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9iZ19jb2xvcihzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JPUkRFUjoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2JvcmRlcihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NF
TExfUEFERElORzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2Nl
bGxfcGFkZGluZyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0NFTExfU1BBQ0lORzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfc2V0X2NlbGxfc3BhY2luZyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZSQU1FOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfZnJhbWUoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SVUxFUzoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3J1bGVzKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1VN
TUFSWToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3N1bW1hcnko
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0
X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiA9IFdFQktJ
VF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfQ0FQVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfY2FwdGlvbihzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UX0hFQUQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3RfaGVh
ZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UX0ZPT1Q6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
Z2V0X3RfZm9vdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ST1dTOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2dldF9yb3dzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1Rf
Qk9ESUVTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF90X2JvZGllcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0JHX0NPTE9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfYmdfY29sb3Ioc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQk9SREVSOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfYm9y
ZGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NFTExfUEFERElORzoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZ2V0X2NlbGxfcGFkZGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9DRUxMX1NQQUNJTkc6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3NwYWNpbmcoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRlJBTUU6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9mcmFtZShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SVUxFUzoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0
X3J1bGVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NVTU1BUlk6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2dldF9zdW1tYXJ5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01I
VE1MVGFibGVFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVj
dENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0FQVElP
TiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjYXB0aW9uIiwK
KyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50OmNhcHRpb24iLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogSFRNTFRhYmxlRWxlbWVu
dDpjYXB0aW9uIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NBUFRJ
T05fRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1RfSEVBRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJ0LWhlYWQiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQ6dC1oZWFkIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
IEhUTUxUYWJsZUVsZW1lbnQ6dC1oZWFkIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9I
VE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RfRk9PVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJ0LWZvb3QiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVs
ZW1lbnQ6dC1mb290IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQqIEhUTUxUYWJsZUVsZW1lbnQ6dC1mb290IiwKKyAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JPV1MsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicm93cyIsCisgICAgICAgICAgICAi
SFRNTFRhYmxlRWxlbWVudDpyb3dzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
SFRNTENvbGxlY3Rpb24qIEhUTUxUYWJsZUVsZW1lbnQ6cm93cyIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVF9CT0RJRVMsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAidC1ib2RpZXMiLAorICAgICAgICAgICAgIkhUTUxU
YWJsZUVsZW1lbnQ6dC1ib2RpZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01I
VE1MQ29sbGVjdGlvbiogSFRNTFRhYmxlRWxlbWVudDp0LWJvZGllcyIsCisgICAgICAgICAgICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxUYWJs
ZUVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJs
ZUVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkdfQ09MT1IsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYmctY29sb3IiLAorICAgICAgICAgICAg
IkhUTUxUYWJsZUVsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxUYWJsZUVsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQk9SREVS
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImJvcmRlciIsCisg
ICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDpib3JkZXIiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUVsZW1lbnQ6Ym9yZGVyIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NFTExfUEFERElORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJjZWxsLXBhZGRpbmciLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQ6Y2VsbC1wYWRk
aW5nIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVFbGVtZW50OmNl
bGwtcGFkZGluZyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DRUxMX1NQQUNJTkcsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2VsbC1zcGFjaW5nIiwKKyAgICAgICAg
ICAgICJIVE1MVGFibGVFbGVtZW50OmNlbGwtc3BhY2luZyIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTFRhYmxlRWxlbWVudDpjZWxsLXNwYWNpbmciLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfRlJBTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
ZnJhbWUiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQ6ZnJhbWUiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUVsZW1lbnQ6ZnJhbWUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfUlVMRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAicnVsZXMiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQ6cnVsZXMiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUVsZW1lbnQ6cnVsZXMiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfU1VNTUFSWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJzdW1tYXJ5IiwKKyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50OnN1bW1hcnki
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUVsZW1lbnQ6c3VtbWFy
eSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDp3
aWR0aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlRWxlbWVudDp3
aWR0aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9p
bml0KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01IVE1MRWxlbWVudCogd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfY3JlYXRlX3RfaGVhZChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVUSGVhZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZGVsZXRlX3RfaGVhZChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPmRlbGV0ZVRIZWFkKCk7Cit9CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfdF9mb290KFdlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRWxlbWVudD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZVRGb290KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9kZWxldGVfdF9mb290KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+ZGVsZXRlVEZvb3QoKTsKK30KKworV2ViS2l0RE9NSFRNTEVsZW1lbnQq
IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV90X2JvZHkoV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RB
QkxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxFbGVtZW50
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlVEJvZHkoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01I
VE1MRWxlbWVudCogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY3JlYXRlX2NhcHRpb24o
V2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlQ2Fw
dGlvbigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX2NhcHRpb24oV2Vi
S2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5kZWxldGVDYXB0aW9uKCk7Cit9
CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9p
bnNlcnRfcm93KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGdsb25nIGluZGV4LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VM
RU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0
cjxXZWJDb3JlOjpIVE1MRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
Pmluc2VydFJvdyhpbmRleCwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X2RlbGV0ZV9yb3coV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmRlbGV0ZVJvdyhp
bmRleCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jYXB0aW9uKFdlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9u
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNhcHRpb24oKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9jYXB0aW9uKFdlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiB2YWx1ZSwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X0NBUFRJT05fRUxFTUVOVCh2YWx1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNvbnZl
cnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRDYXB0aW9uKGNvbnZlcnRlZFZhbHVlLCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAg
fQorfQorCitXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfZ2V0X3RfaGVhZChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT50SGVhZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfc2V0X3RfaGVhZChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBX
ZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogdmFsdWUsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQo
dmFsdWUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktp
dDo6Y29yZSh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aXRlbS0+c2V0VEhlYWQoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRf
dF9mb290KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPnRGb290KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfdF9m
b290KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVCh2YWx1ZSkpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRURm9vdChjb252
ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzKFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJvd3MoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiog
d2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3RfYm9kaWVzKFdlYktpdERPTUhUTUxU
YWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlv
bj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRCb2RpZXMoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjph
bGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
Ymdjb2xvckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9lbGVtZW50X3NldF9iZ19jb2xvcihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpiZ2NvbG9yQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2JvcmRlcihXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Ym9yZGVyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2JvcmRlcihXZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpib3JkZXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfY2VsbF9wYWRkaW5nKFdlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjZWxscGFkZGluZ0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9jZWxsX3BhZGRpbmcoV2Vi
S2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2VsbHBhZGRpbmdBdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9n
ZXRfY2VsbF9zcGFjaW5nKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjZWxsc3BhY2luZ0F0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X3NldF9jZWxsX3NwYWNpbmcoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y2VsbHNwYWNpbmdBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfZnJhbWUoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZy
YW1lQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfc2V0X2ZyYW1lKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmZyYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3J1bGVzKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpydWxl
c0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X3NldF9ydWxlcyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpydWxlc0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9lbGVtZW50X2dldF9zdW1tYXJ5KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzdW1t
YXJ5QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfc2V0X3N1bW1hcnkoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6c3VtbWFyeUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
d2lkdGhBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6d2lkdGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFRhYmxlRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1MjVjZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFRhYmxlRWxlbWVudC5oCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0
ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRET01IVE1MVGFibGVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJM
RV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90
eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9I
VE1MX1RBQkxFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9FTEVNRU5U
LCBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9UQUJMRV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9FTEVNRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
VEFCTEVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudENsYXNzKSkKKworc3RydWN0
IF9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRD
bGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdHlw
ZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVf
dF9oZWFkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NSFRNTEVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxl
bWVudF9jcmVhdGVfdF9oZWFkKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV90X2hlYWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfdF9oZWFkKFdlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X2NyZWF0ZV90X2Zvb3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRN
TEVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRWxlbWVudCoKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV90X2Zvb3QoV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVs
ZXRlX3RfZm9vdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0
ZV90X2Zvb3QoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY3JlYXRlX2NhcHRpb246CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1M
RWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV9jYXB0aW9uKFdl
YktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2RlbGV0ZV9jYXB0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUYWJsZUVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfZGVsZXRlX2NhcHRpb24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfaW5zZXJ0X3Jv
dzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAaW5kZXg6IEEg
I2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRN
TEVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9pbnNlcnRfcm93KFdlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGdsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3JvdzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAaW5kZXg6IEEgI2dsb25n
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3JvdyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
KiBzZWxmLCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jYXB0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dl
YktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9n
ZXRfY2FwdGlvbihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2FwdGlvbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NhcHRpb24oV2ViS2l0RE9N
SFRNTFRhYmxlRWxlbWVudCogc2VsZiwgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQq
IHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZ2V0X3RfaGVhZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3RfaGVhZChXZWJL
aXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9zZXRfdF9oZWFkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9zZXRfdF9oZWFkKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQq
IHNlbGYsIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiB2YWx1ZSwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2Zv
b3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCoKK3dlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2Zvb3QoV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0
X3RfZm9vdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFs
dWU6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfc2V0X3RfZm9vdChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93czoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhU
TUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV2Vi
S2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfZ2V0X3RfYm9kaWVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxU
YWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TUhUTUxDb2xsZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9ib2RpZXMoV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9h
bGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X2dldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRf
YmdfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9zZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9nZXRfYm9yZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2JvcmRlcihXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9z
ZXRfYm9yZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfc2V0X2JvcmRlcihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2dldF9jZWxsX3BhZGRpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfY2VsbF9wYWRkaW5nKFdlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X3NldF9jZWxsX3BhZGRpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2VsbF9wYWRkaW5nKFdlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxfc3BhY2luZzoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dl
dF9jZWxsX3NwYWNpbmcoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NlbGxfc3BhY2luZzoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3Nl
dF9jZWxsX3NwYWNpbmcoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRf
cnVsZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfcnVsZXMoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3J1bGVzOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
c2V0X3J1bGVzKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3N1bW1h
cnk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfZWxlbWVudF9nZXRfc3VtbWFyeShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfc3VtbWFyeToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X3NldF9zdW1tYXJ5KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3dp
ZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF93aWR0aDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3Nl
dF93aWR0aChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjU1YTAwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFBy
aXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTFRhYmxlRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
VGFibGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
KiB3cmFwSFRNTFRhYmxlRWxlbWVudChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50Kik7CitXZWJL
aXRET01IVE1MVGFibGVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCopOwor
V2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFVu
c3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTlkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxUYWJsZUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFVuc3Rh
YmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFVuc3RhYmxlX2gKKworI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV90X2JvZHk6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfZWxlbWVudF9jcmVhdGVfdF9ib2R5KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9mcmFtZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfZnJhbWUoV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfc2V0X2ZyYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2ZyYW1lKFdlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWUzOWVmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50LmNwcApAQCAtMCwwICsxLDQxNiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1l
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MVGFibGVSb3dFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBj
b3JlKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9N
SFRNTFRhYmxlUm93RWxlbWVudCogd3JhcEhUTUxUYWJsZVJvd0VsZW1lbnQoV2ViQ29yZTo6SFRN
TFRhYmxlUm93RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmlu
ZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRl
c2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVt
ZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25z
dCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJl
KQoreworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVS
b3dFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlUm93
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdf
T0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0
RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50
ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAg
IGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MVGFibGVSb3dF
bGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZF
TlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfUk9XX0lOREVYLAorICAgIFBST1BfU0VDVElPTl9ST1dfSU5ERVgs
CisgICAgUFJPUF9DRUxMUywKKyAgICBQUk9QX0FMSUdOLAorICAgIFBST1BfQkdfQ09MT1IsCisg
ICAgUFJPUF9DSCwKKyAgICBQUk9QX0NIX09GRiwKKyAgICBQUk9QX1ZfQUxJR04sCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfYmdfY29sb3Io
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9DSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3Nl
dF9jaChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NIX09GRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19l
bGVtZW50X3NldF9jaF9vZmYoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X3ZfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfcm93X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9N
SFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9ST1dfRUxF
TUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X1JPV19JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9yb3dfaW5kZXgoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU0VDVElPTl9ST1dfSU5ERVg6CisgICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfc2VjdGlv
bl9yb3dfaW5kZXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0VMTFM6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxl
X3Jvd19lbGVtZW50X2dldF9jZWxscyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9iZ19jb2xvcihzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSDoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9j
aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSF9PRkY6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxl
bWVudF9nZXRfY2hfb2ZmKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1Zf
QUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF90YWJsZV9yb3dfZWxlbWVudF9nZXRfdl9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfY2xhc3NfaW5pdChX
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
cm93X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9ST1dfSU5ERVgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgInJvdy1pbmRleCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxlbWVudDpy
b3ctaW5kZXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MVGFibGVSb3dFbGVt
ZW50OnJvdy1pbmRleCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NF
Q1RJT05fUk9XX0lOREVYLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAg
ICJzZWN0aW9uLXJvdy1pbmRleCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxlbWVudDpz
ZWN0aW9uLXJvdy1pbmRleCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIEhUTUxUYWJs
ZVJvd0VsZW1lbnQ6c2VjdGlvbi1yb3ctaW5kZXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DRUxMUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJjZWxscyIsCisgICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxlbWVudDpjZWxscyIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBIVE1MVGFi
bGVSb3dFbGVtZW50OmNlbGxzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NP
TExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJhbGlnbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxlbWVudDphbGlnbiIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlUm93RWxlbWVudDphbGlnbiIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9CR19DT0xPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJiZy1jb2xvciIsCisgICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxl
bWVudDpiZy1jb2xvciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxl
Um93RWxlbWVudDpiZy1jb2xvciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaCIsCisgICAgICAgICAgICAiSFRNTFRh
YmxlUm93RWxlbWVudDpjaCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRh
YmxlUm93RWxlbWVudDpjaCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSF9PRkYsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2gtb2ZmIiwKKyAgICAgICAgICAgICJI
VE1MVGFibGVSb3dFbGVtZW50OmNoLW9mZiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTFRhYmxlUm93RWxlbWVudDpjaC1vZmYiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVl9BTElH
TiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2LWFsaWduIiwK
KyAgICAgICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50OnYtYWxpZ24iLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZVJvd0VsZW1lbnQ6di1hbGlnbiIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfaW5pdChXZWJLaXRE
T01IVE1MVGFibGVSb3dFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKK30KKworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF90YWJsZV9y
b3dfZWxlbWVudF9pbnNlcnRfY2VsbChXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxm
LCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0Vs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxFbGVtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW5zZXJ0Q2VsbChpbmRleCwgZWMpKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9kZWxldGVfY2VsbChXZWJLaXRET01IVE1MVGFi
bGVSb3dFbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVS
b3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmRlbGV0ZUNlbGwoaW5kZXgsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9
CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfcm93X2luZGV4
KFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5yb3dJbmRleCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfc2VjdGlvbl9yb3dfaW5k
ZXgoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGds
b25nIHJlc3VsdCA9IGl0ZW0tPnNlY3Rpb25Sb3dJbmRleCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93
X2VsZW1lbnRfZ2V0X2NlbGxzKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jZWxscygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
cm93X2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxp
Z25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfcm93X2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfUk9XX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfYmdfY29sb3IoV2ViS2l0
RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpiZ2NvbG9yQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9iZ19j
b2xvcihXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVS
b3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdj
b2xvckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9yb3dfZWxlbWVudF9nZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpj
aGFyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X3NldF9jaChXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RB
QkxFX1JPV19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y2hhckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2hfb2ZmKFdlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhcm9mZkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfY2hfb2ZmKFdl
YktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyb2ZmQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jv
d19lbGVtZW50X2dldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFs
aWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X3NldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVS
b3dFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkYjk4OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudC5oCkBAIC0wLDAgKzEs
MTkyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50X2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1JPV19F
TEVNRU5ULCBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1JPV19FTEVNRU5U
LCBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9UQUJMRV9ST1dfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9ST1df
RUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVt
ZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2luc2VydF9jZWxsOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQKKyAqIEBpbmRleDogQSAjZ2xvbmcK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NSFRNTEVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRWxlbWVu
dCoKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9pbnNlcnRfY2VsbChXZWJLaXRE
T01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9kZWxldGVfY2Vs
bDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKiBAaW5kZXg6
IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2RlbGV0ZV9jZWxsKFdlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYsIGdsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9yb3dfaW5kZXg6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9yb3dfZWxlbWVudF9nZXRfcm93X2luZGV4KFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRf
c2VjdGlvbl9yb3dfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfc2VjdGlvbl9yb3dfaW5kZXgoV2Vi
S2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jZWxsczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGFibGVSb3dFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xs
ZWN0aW9uKgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jZWxscyhXZWJL
aXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9hbGlnbihX
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZVJvd0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9hbGlnbihX
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfYmdfY29sb3I6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfcm93X2VsZW1lbnRfZ2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRf
YmdfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZVJvd0Vs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGFibGVSb3dFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2goV2ViS2l0
RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X3NldF9jaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFi
bGVSb3dFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfY2goV2ViS2l0RE9NSFRN
TFRhYmxlUm93RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2NoX29mZjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVu
dF9nZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfY2hfb2ZmOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVt
ZW50X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1l
bnRfZ2V0X3ZfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jv
d19lbGVtZW50X3NldF92X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJv
d0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF92X2FsaWduKFdlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxl
Um93RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
YjBhNmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50UHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01IVE1MVGFibGVSb3dFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxUYWJsZVJvd0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxUYWJs
ZVJvd0VsZW1lbnQqIHdyYXBIVE1MVGFibGVSb3dFbGVtZW50KFdlYkNvcmU6OkhUTUxUYWJsZVJv
d0VsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MVGFibGVSb3dFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudFByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
NTgzYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5j
cHAKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxl
bWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xs
ZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVEFC
TEVfU0VDVElPTl9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkp
OworfQorCitXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogY29yZShXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQqIHdyYXBIVE1MVGFibGVTZWN0aW9uRWxlbWVudChXZWJDb3JlOjpI
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQo
Z19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVCwg
ImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9u
X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2Vi
S2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVu
dCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVU
YXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFt
ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0
ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX3Nl
Y3Rpb25fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVu
dFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlm
YWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50LCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lU
X0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdOLAorICAgIFBST1BfQ0gsCisgICAg
UFJPUF9DSF9PRkYsCisgICAgUFJPUF9WX0FMSUdOLAorICAgIFBST1BfUk9XUywKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0X2FsaWduKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ0g6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
c2V0X2NoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ0hfT0ZGOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2Vj
dGlvbl9lbGVtZW50X3NldF9jaF9vZmYoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WX0FMSUdOOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF92X2FsaWduKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01f
SFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfYWxpZ24o
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0g6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1l
bnRfZ2V0X2NoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIX09GRjoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxl
X3NlY3Rpb25fZWxlbWVudF9nZXRfY2hfb2ZmKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1ZfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3ZfYWxpZ24oc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUk9XUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9y
b3dzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90
YWJsZV9zZWN0aW9uX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MVGFibGVTZWN0aW9u
RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGln
biIsCisgICAgICAgICAgICAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6YWxpZ24iLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OmFsaWduIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0NILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImNoIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpjaCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6
Y2giLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hfT0ZGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImNoLW9mZiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQ6Y2gtb2ZmIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudDpjaC1vZmYiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVl9BTElHTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2LWFsaWduIiwKKyAgICAg
ICAgICAgICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudDp2LWFsaWduIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDp2LWFsaWduIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1JPV1MsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAicm93cyIsCisgICAgICAgICAgICAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6cm93cyIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudDpyb3dzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2luaXQo
V2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01IVE1MRWxlbWVudCogd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9pbnNlcnRfcm93KFdlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6SFRNTEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbnNlcnRS
b3coaW5kZXgsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50
X2RlbGV0ZV9yb3coV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGdsb25n
IGluZGV4LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfU0VDVElPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpdGVtLT5kZWxldGVSb3coaW5kZXgsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RBQkxFX1NFQ1RJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9U
QUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2go
V2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmNoYXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9TRUNUSU9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyb2ZmQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2hf
b2ZmKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpjaGFyb2ZmQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfdl9hbGlnbihXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZhbGlnbkF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
c2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElP
Tl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnZhbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
Z2V0X3Jvd3MoV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJvd3MoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2MDdmNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9t
L3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0
X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1NF
Q1RJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RB
QkxFX1NFQ1RJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlRfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9u
RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9pbnNlcnRfcm93
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAaW5k
ZXg6IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NSFRNTEVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2lu
c2VydF9yb3coV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGdsb25nIGlu
ZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Nl
Y3Rpb25fZWxlbWVudF9kZWxldGVfcm93OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgKiBAaW5kZXg6IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25f
ZWxlbWVudF9kZWxldGVfcm93KFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxm
LCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
Z2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9hbGlnbjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9jaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9j
aChXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2g6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxl
bWVudF9zZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25f
ZWxlbWVudF9nZXRfY2hfb2ZmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2NoX29mZihXZWJL
aXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2hfb2ZmOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1l
bnRfc2V0X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlv
bl9lbGVtZW50X2dldF92X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3ZfYWxpZ24o
V2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0X3ZfYWxpZ246CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25f
ZWxlbWVudF9zZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X2dldF9yb3dzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJL
aXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0
aW9uKgord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfcm93cyhXZWJL
aXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVT
ZWN0aW9uRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42MjRlMDU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHdyYXBIVE1MVGFibGVTZWN0
aW9uRWxlbWVudChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCopOworV2ViS2l0RE9N
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCopOworV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9N
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZWE3MjFjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMCwwICsx
LDEwNTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9k
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFVuc3RhYmxlLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIGtpdChXZWJD
b3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
SFRNTF9URVhUX0FSRUFfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9i
aikpKTsKK30KKworV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogY29yZShXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHdyYXBIVE1MVGV4dEFyZWFFbGVtZW50KFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJy
b3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVu
dCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJD
b3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZl
bnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2Rl
LCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJD
b3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29s
ZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2
ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCwgd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5U
LCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX0FVVE9GT0NVUywKKyAgICBQUk9QX0RJUl9OQU1FLAorICAgIFBST1BfRElTQUJMRUQsCisg
ICAgUFJPUF9GT1JNLAorICAgIFBST1BfTUFYX0xFTkdUSCwKKyAgICBQUk9QX05BTUUsCisgICAg
UFJPUF9QTEFDRUhPTERFUiwKKyAgICBQUk9QX1JFQURfT05MWSwKKyAgICBQUk9QX1JFUVVJUkVE
LAorICAgIFBST1BfUk9XUywKKyAgICBQUk9QX0NPTFMsCisgICAgUFJPUF9XUkFQLAorICAgIFBS
T1BfVFlQRSwKKyAgICBQUk9QX0RFRkFVTFRfVkFMVUUsCisgICAgUFJPUF9WQUxVRSwKKyAgICBQ
Uk9QX1RFWFRfTEVOR1RILAorICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICBQUk9QX1ZBTElE
SVRZLAorICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAgIFBST1BfTEFCRUxTLAorICAg
IFBST1BfU0VMRUNUSU9OX1NUQVJULAorICAgIFBST1BfU0VMRUNUSU9OX0VORCwKKyAgICBQUk9Q
X1NFTEVDVElPTl9ESVJFQ1RJT04sCisgICAgUFJPUF9BVVRPQ09SUkVDVCwKKyAgICBQUk9QX0FV
VE9DQVBJVEFMSVpFLAorICAgIFBST1BfQVVUT0NPTVBMRVRFLAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2ZvY3VzKHNlbGYsIGdfdmFsdWVfZ2V0X2Jv
b2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJUl9OQU1FOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2Rpcl9uYW1lKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX0xFTkdUSDoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9tYXhfbGVuZ3RoKHNlbGYsIGdfdmFsdWVfZ2V0X2xv
bmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfbmFtZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BMQUNFSE9MREVSOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfc2V0X3BsYWNlaG9sZGVyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVBRF9PTkxZOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JlYWRfb25seShzZWxmLCBnX3ZhbHVlX2dldF9i
b29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVFVSVJFRDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yZXF1aXJlZChz
ZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9ST1dTOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X3Jvd3Moc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ09MUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X3NldF9jb2xzKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1dSQVA6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfd3JhcChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfVkFMVUU6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGVmYXVsdF92YWx1ZShzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3Zh
bHVlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0VMRUNUSU9OX1NUQVJUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9zdGFydChzZWxmLCBnX3ZhbHVlX2dldF9sb25n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RJT05fRU5EOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9l
bmQoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0VMRUNUSU9OX0RJUkVDVElPTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZGlyZWN0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NPUlJF
Q1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2Nv
cnJlY3Qoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQVVUT0NBUElUQUxJWkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemUoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09NUExFVEU6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NvbXBs
ZXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIGdfdmFsdWVf
c2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRf
YXV0b2ZvY3VzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJUl9OQU1F
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfZ2V0X2Rpcl9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk06CisgICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9mb3JtKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9MRU5HVEg6CisgICAgICAg
IGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9nZXRfbWF4X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9O
QU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
dGV4dF9hcmVhX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUExBQ0VIT0xERVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcGxhY2Vob2xkZXIoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVBRF9PTkxZOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
Z2V0X3JlYWRfb25seShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVFV
SVJFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X2dldF9yZXF1aXJlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9ST1dTOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Jvd3Moc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQ09MUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9jb2xzKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dSQVA6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfd3JhcChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
Z2V0X2FyZWFfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZB
VUxUX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsdWUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVYVF9MRU5HVEg6CisgICAgICAg
IGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X3RleHRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1dJTExfVkFMSURBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJRElUWToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Zh
bGlkaXR5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEQVRJT05f
TUVTU0FHRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2Uoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFCRUxTOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbGFiZWxz
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVElPTl9TVEFSVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2dldF9zZWxlY3Rpb25fc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0VMRUNUSU9OX0VORDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9zZWxlY3Rpb25fZW5kKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVElPTl9ESVJFQ1RJT046
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX2RpcmVjdGlvbihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09SUkVDVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY29y
cmVjdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ0FQSVRBTEla
RToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY2FwaXRhbGl6ZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9BVVRPQ09NUExFVEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0b2NvbXBs
ZXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcHJvcGVydHk7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9GT0NVUywKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYXV0b2ZvY3VzIiwKKyAg
ICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmF1dG9mb2N1cyIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MVGV4dEFyZWFFbGVtZW50OmF1dG9mb2N1cyIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9ESVJfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJkaXItbmFtZSIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVu
dDpkaXItbmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRleHRBcmVh
RWxlbWVudDpkaXItbmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNBQkxFRCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGlzYWJsZWQiLAorICAgICAgICAg
ICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2Jvb2xlYW4gSFRNTFRleHRBcmVhRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9GT1JNLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
ImZvcm0iLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6Zm9ybSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogSFRNTFRleHRBcmVhRWxl
bWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVO
VCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX01BWF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
Im1heC1sZW5ndGgiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6bWF4LWxlbmd0
aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MVGV4dEFyZWFFbGVtZW50Om1h
eC1sZW5ndGgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAg
ICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9Q
TEFDRUhPTERFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJw
bGFjZWhvbGRlciIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpwbGFjZWhvbGRl
ciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRleHRBcmVhRWxlbWVudDpw
bGFjZWhvbGRlciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUFEX09OTFksCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInJlYWQtb25seSIsCisgICAgICAgICAgICAi
SFRNTFRleHRBcmVhRWxlbWVudDpyZWFkLW9ubHkiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gSFRNTFRleHRBcmVhRWxlbWVudDpyZWFkLW9ubHkiLAorICAgICAgICAgICAgRkFM
U0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUkVRVUlSRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAg
ICAgInJlcXVpcmVkIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OnJlcXVpcmVk
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxUZXh0QXJlYUVsZW1lbnQ6
cmVxdWlyZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUk9XUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCisgICAgICAgICAgICAicm93cyIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVh
RWxlbWVudDpyb3dzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6cm93cyIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9D
T0xTLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJjb2xzIiwKKyAg
ICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmNvbHMiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2xvbmcgSFRNTFRleHRBcmVhRWxlbWVudDpjb2xzIiwKKyAgICAgICAgICAgIEdfTUlO
TE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1dSQVAsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAid3JhcCIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDp3
cmFwIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50
OndyYXAiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVt
ZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTFRleHRBcmVhRWxl
bWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVF9WQUxVRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkZWZhdWx0LXZhbHVlIiwKKyAgICAgICAg
ICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmRlZmF1bHQtdmFsdWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVsZW1lbnQ6ZGVmYXVsdC12YWx1ZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJ2YWx1ZSIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDp2YWx1ZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRleHRBcmVhRWxlbWVudDp2YWx1
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9URVhUX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3Vsb25nKAorICAgICAgICAgICAgInRleHQtbGVuZ3RoIiwKKyAgICAgICAgICAgICJIVE1MVGV4
dEFyZWFFbGVtZW50OnRleHQtbGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25n
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6dGV4dC1sZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhV
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgIndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVs
ZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhU
TUxUZXh0QXJlYUVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZB
TElESVRZLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZhbGlk
aXR5IiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OnZhbGlkaXR5IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogSFRNTFRleHRBcmVhRWxl
bWVudDp2YWxpZGl0eSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RB
VEUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAidmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFy
ZWFFbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdj
aGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0xBQkVMUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAg
ICJsYWJlbHMiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6bGFiZWxzIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZUxpc3QqIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6bGFiZWxzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFX0xJU1QsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxF
Q1RJT05fU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNl
bGVjdGlvbi1zdGFydCIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpzZWxlY3Rp
b24tc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFRleHRBcmVhRWxl
bWVudDpzZWxlY3Rpb24tc3RhcnQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfU0VMRUNUSU9OX0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAg
ICAgICAic2VsZWN0aW9uLWVuZCIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpz
ZWxlY3Rpb24tZW5kIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6c2VsZWN0aW9uLWVuZCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TRUxFQ1RJT05fRElSRUNUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgInNlbGVjdGlvbi1kaXJlY3Rpb24iLAorICAgICAgICAgICAgIkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6c2VsZWN0aW9uLWRpcmVjdGlvbiIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTFRleHRBcmVhRWxlbWVudDpzZWxlY3Rpb24tZGlyZWN0aW9uIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0FVVE9DT1JSRUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJhdXRvY29ycmVjdCIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVh
RWxlbWVudDphdXRvY29ycmVjdCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBI
VE1MVGV4dEFyZWFFbGVtZW50OmF1dG9jb3JyZWN0IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FV
VE9DQVBJVEFMSVpFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImF1dG9jYXBpdGFsaXplIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmF1dG9j
YXBpdGFsaXplIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFF
bGVtZW50OmF1dG9jYXBpdGFsaXplIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9DT01QTEVURSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhdXRvY29tcGxldGUi
LAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6YXV0b2NvbXBsZXRlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50OmF1dG9jb21wbGV0
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
aW5pdChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNF
RF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hlY2tWYWxp
ZGl0eSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChl
cnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFcnJvciA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChlcnJvcik7CisgICAgaXRlbS0+c2V0Q3VzdG9tVmFsaWRpdHkoY29udmVydGVk
RXJyb3IpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZWxl
Y3QoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2Vs
ZWN0KCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9y
YW5nZV90ZXh0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiByZXBsYWNlbWVudCwgZ3Vsb25nIHN0YXJ0LCBndWxvbmcgZW5kLCBjb25zdCBnY2hhciogc2Vs
ZWN0aW9uTW9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHJlcGxhY2Vt
ZW50KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGVjdGlvbk1vZGUpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkUmVwbGFjZW1lbnQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocmVwbGFjZW1lbnQpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdGlvbk1vZGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
Rjgoc2VsZWN0aW9uTW9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+c2V0UmFuZ2VUZXh0KGNvbnZlcnRlZFJlcGxhY2VtZW50LCBzdGFydCwgZW5kLCBj
b252ZXJ0ZWRTZWxlY3Rpb25Nb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3JhbmdlKFdlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQqIHNlbGYsIGdsb25nIHN0YXJ0LCBnbG9uZyBlbmQsIGNvbnN0IGdjaGFyKiBk
aXJlY3Rpb24pCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRpcmVjdGlvbik7CisgICAgV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWREaXJlY3Rpb24gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGlyZWN0
aW9uKTsKKyAgICBpdGVtLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBjb252ZXJ0ZWRE
aXJlY3Rpb24pOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphdXRvZm9jdXNBdHRyKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9zZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kaXJfbmFtZShXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9B
UkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmRpcm5hbWVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2Rpcl9uYW1lKFdlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXJuYW1lQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyLCB2YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxGb3Jt
RWxlbWVudCogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9mb3JtKFdlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SFRNTEZvcm1FbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Zm9ybSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbWF4X2xlbmd0
aChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xv
bmcgcmVzdWx0ID0gaXRlbS0+bWF4TGVuZ3RoRm9yQmluZGluZ3MoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfbWF4
X2xlbmd0aChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsK
KyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldE1h
eExlbmd0aEZvckJpbmRpbmdzKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9uYW1lKFdlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVt
ZW50X2dldF9wbGFjZWhvbGRlcihXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnBsYWNl
aG9sZGVyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9wbGFjZWhvbGRlcihXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGxhY2Vob2xkZXJBdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfcmVhZF9vbmx5KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlYWRvbmx5QXR0cik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X3JlYWRfb25seShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVh
biB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlYWRvbmx5QXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFf
RUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
cXVpcmVkQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVxdWlyZWRBdHRyLCB2YWx1ZSk7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcm93cyhXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJl
YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0g
aXRlbS0+cm93cygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yb3dzKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhU
X0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRSb3dzKHZhbHVlKTsKK30K
KworZ2xvbmcgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9jb2xzKFdlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1
bHQgPSBpdGVtLT5jb2xzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2NvbHMoV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldENvbHModmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF93cmFw
KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d3JhcEF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRf
d3JhcChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFy
ZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d3Jh
cEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfYXJlYV90eXBlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRlZmF1bHRWYWx1ZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGVm
YXVsdF92YWx1ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
VGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXREZWZhdWx0VmFsdWUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9B
UkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFZhbHVlKGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfdGV4dF9sZW5ndGgoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT50ZXh0TGVuZ3RoKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2lsbFZhbGlkYXRlKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVY
VF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlZhbGlk
aXR5U3RhdGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT52YWxpZGl0eSgpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2Fn
ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsaWRhdGlvbk1lc3NhZ2Uo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbGFiZWxzKFdlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FS
RUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sYWJlbHMoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnbG9uZyB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9zdGFydChXZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRl
bS0+c2VsZWN0aW9uU3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3N0YXJ0KFdlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRN
TFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5z
ZXRTZWxlY3Rpb25TdGFydCh2YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX2VuZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2VsZWN0aW9u
RW5kKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9lbmQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RF
WFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNlbGVjdGlvbkVuZCh2
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X3NlbGVjdGlvbl9kaXJlY3Rpb24oV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnNlbGVjdGlvbkRpcmVjdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX2RpcmVjdGlvbihX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRTZWxl
Y3Rpb25EaXJlY3Rpb24oY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVU
T0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+YXV0
b2NvcnJlY3QoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3Jy
ZWN0IEFuZCBBdXRvY2FwaXRhbGl6ZSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFu
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTEla
RSkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1
dG9jb3JyZWN0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZh
bHVlKQoreworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRBdXRvY29ycmVjdCh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0YWxpemUiKQorI2Vu
ZGlmIC8qIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY2FwaXRh
bGl6ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShJ
T1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXV0b2NhcGl0YWxpemUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0
YWxpemUiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1Rf
QU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2Fy
ZWFfZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJF
Q1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FS
RUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXV0b2NhcGl0YWxpemUoY29udmVydGVkVmFsdWUpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9j
YXBpdGFsaXplIikKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQ
SVRBTElaRSkgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9nZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dXRvY29tcGxldGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdXRvY29tcGxldGUoY29udmVy
dGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI2MTk5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQuaApAQCAtMCwwICsxLDI4MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5H
X1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEVYVF9BUkVBX0VMRU1F
TlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9URVhUX0FSRUFfRUxFTUVOVChvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9URVhUX0FSRUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9URVhUX0FSRUFfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9U
RVhUX0FSRUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudENsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEVY
VF9BUkVBX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfVEVYVF9BUkVBX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Q2xhc3Mg
eworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZWxl
Y3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2VsZWN0
KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3JhbmdlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEBzdGFydDogQSAjZ2xvbmcKKyAq
IEBlbmQ6IEEgI2dsb25nCisgKiBAZGlyZWN0aW9uOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlv
bl9yYW5nZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9uZyBzdGFydCwg
Z2xvbmcgZW5kLCBjb25zdCBnY2hhciogZGlyZWN0aW9uKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2dldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvZm9jdXM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNn
Ym9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2dldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kaXNhYmxlZChX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9k
aXNhYmxlZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9mb3Jt
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X25hbWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9uYW1l
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2dldF9yZWFkX29ubHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcmVhZF9vbmx5
KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcmVhZF9vbmx5OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3Nl
dF9yZWFkX29ubHkoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRf
cm93czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X2dldF9yb3dzKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRf
cm93czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9zZXRfcm93cyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2dldF9jb2xzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2NvbHMoV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X3NldF9jb2xzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9jb2xzKFdlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
dGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2FyZWFfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXJlYV90
eXBlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGVmYXVsdF92YWx1ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9nZXRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2RlZmF1
bHRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92
YWx1ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF92
YWx1ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfd2ls
bF92YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitX
RUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Nl
bGVjdGlvbl9zdGFydChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9zdGFy
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3N0YXJ0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJ
VF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0
aW9uX2VuZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9lbmQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9u
ZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfc2V0X3NlbGVjdGlvbl9lbmQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2Vs
ZiwgZ2xvbmcgdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2ZWEzNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGV4dEFyZWFFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiB3cmFwSFRNTFRleHRBcmVh
RWxlbWVudChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Kik7CitXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCopOworV2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRVbnN0YWJsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZWU1YTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMzAzIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5f
REVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfY2hlY2tf
dmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
Y2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRp
dHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQGVycm9y
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0
eShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcmFuZ2Vf
dGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAcmVw
bGFjZW1lbnQ6IEEgI2djaGFyCisgKiBAc3RhcnQ6IEEgI2d1bG9uZworICogQGVuZDogQSAjZ3Vs
b25nCisgKiBAc2VsZWN0aW9uTW9kZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JhbmdlX3RleHQoV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHJlcGxhY2VtZW50LCBndWxvbmcgc3RhcnQs
IGd1bG9uZyBlbmQsIGNvbnN0IGdjaGFyKiBzZWxlY3Rpb25Nb2RlLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kaXJfbmFt
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Rpcl9uYW1l
KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGlyX25hbWU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
dGV4dF9hcmVhX2VsZW1lbnRfc2V0X2Rpcl9uYW1lKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X2dldF9tYXhfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X2dldF9tYXhfbGVuZ3RoKFdlYktpdERPTUhUTUxUZXh0QXJlYUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9zZXRfbWF4X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X3NldF9tYXhfbGVuZ3RoKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9wbGFjZWhvbGRlcjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3BsYWNlaG9sZGVyKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfcGxhY2Vob2xkZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfc2V0X3BsYWNlaG9sZGVyKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X2dldF9yZXF1aXJlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9nZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3Nl
dF9yZXF1aXJlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcmVx
dWlyZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfd3JhcDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3dyYXAoV2ViS2l0
RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X3NldF93cmFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X3NldF93cmFwKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVt
ZW50X2dldF90ZXh0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2dldF90ZXh0X2xlbmd0aChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3ZhbGlk
aXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVmFsaWRpdHlT
dGF0ZSoKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRpdHkoV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2U6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9sYWJlbHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAj
V2ViS2l0RE9NTm9kZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X2xhYmVscyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9kaXJl
Y3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9zZWxl
Y3Rpb25fZGlyZWN0aW9uKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX2Rp
cmVjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9u
X2RpcmVjdGlvbihXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfYXV0b2NvcnJlY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2Nv
cnJlY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZh
bHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jb3Jy
ZWN0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9jYXBp
dGFsaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0
b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvY2FwaXRhbGl6ZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemUoV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9jb21wbGV0
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9jb21w
bGV0ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxUaXRsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTdhOWU4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGl0bGVFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxUaXRsZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVGl0
bGVFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9USVRMRV9FTEVN
RU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3Jl
OjpIVE1MVGl0bGVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGl0
bGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCogd3JhcEhUTUxUaXRsZUVsZW1lbnQoV2Vi
Q29yZTo6SFRNTFRpdGxlRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9USVRMRV9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9USVRMRV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVF
dmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNv
ZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29y
ZTo6SFRNTFRpdGxlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxUaXRsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQorewor
ICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJl
bW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
SFRNTFRpdGxlRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnQsIFdFQktJVF9E
T01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZ
UEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7
CisgICAgUFJPUF8wLAorICAgIFBST1BfVEVYVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF90aXRsZV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVElU
TEVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX1RFWFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X3NldF90
ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCogc2VsZiA9IFdFQktJVF9E
T01fSFRNTF9USVRMRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3RleHQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfY2xhc3Nf
aW5pdChXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGl0
bGVfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJ0ZXh0IiwKKyAgICAgICAgICAgICJIVE1MVGl0bGVFbGVtZW50OnRleHQiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUaXRsZUVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxU
aXRsZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9N
SFRNTFRpdGxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RJVExFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+dGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X3NldF90ZXh0KFdlYktpdERPTUhUTUxUaXRs
ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfVElUTEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VGV4dChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjZDdhNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtp
dGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
VGl0bGVFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9IVE1MX1RJVExFX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3RpdGxlX2Vs
ZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RJVExFX0VMRU1FTlQo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfVElUTEVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9USVRMRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RJ
VExFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVElUTEVfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RJ
VExFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9USVRMRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50Q2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQgeworICAgIFdlYktpdERPTUhU
TUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRp
dGxlRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF90aXRsZV9lbGVt
ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVt
ZW50X2dldF90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfc2V0X3RleHQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxl
bWVudF9zZXRfdGV4dChXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRpdGxl
RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxUaXRsZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjc3Nzc0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxl
bWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MVGl0bGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxU
aXRsZUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MVGl0bGVF
bGVtZW50KiB3cmFwSFRNTFRpdGxlRWxlbWVudChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Kik7
CitXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVu
dCopOworV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVGl0bGVF
bGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxUaXRsZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFVMaXN0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZjODdiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxVTGlz
dEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFVMaXN0
RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50KiBraXQo
V2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9N
X0hUTUxfVV9MSVNUX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmop
KSk7Cit9CisKK1dlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFVM
aXN0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50KiB3cmFwSFRN
TFVMaXN0RWxlbWVudChXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1VfTElT
VF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9VX0xJU1RfRUxFTUVO
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxl
bWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRE
T01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBj
b3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZl
bnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdV9saXN0
X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRf
ZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9l
dmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
aHRtbF91X2xpc3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5F
X1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQsIHdlYmtpdF9kb21faHRt
bF91X2xpc3RfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1F
TlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DT01QQUNU
LAorICAgIFBST1BfVFlQRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF91X2xp
c3RfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01IVE1MVUxpc3RFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1VfTElTVF9FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09N
UEFDVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0
KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9z
ZXRfdHlwZV9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIHNlbGYg
PSBXRUJLSVRfRE9NX0hUTUxfVV9MSVNUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X2NvbXBh
Y3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50
X2dldF90eXBlX2F0dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFVMaXN0RWxl
bWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF91X2xpc3Rf
ZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09NUEFDVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY29tcGFjdCIsCisgICAgICAg
ICAgICAiSFRNTFVMaXN0RWxlbWVudDpjb21wYWN0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdib29sZWFuIEhUTUxVTGlzdEVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUi
LAorICAgICAgICAgICAgIkhUTUxVTGlzdEVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTFVMaXN0RWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxVTGlzdEVs
ZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X2NvbXBhY3QoV2ViS2l0RE9N
SFRNTFVMaXN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1VfTElTVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFVMaXN0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y29tcGFjdEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0KFdlYktpdERPTUhUTUxVTGlzdEVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9V
X0xJU1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxVTGlz
dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9VX0xJU1Rf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxVTGlzdEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfVV9MSVNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMDg1NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJ
REVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRk
b20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lm
bmRlZiBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFVM
aXN0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9VX0xJU1RfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2Vs
ZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1VfTElTVF9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1VfTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1VfTElTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X1VfTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9VX0xJU1RfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9VX0xJU1RfRUxF
TUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9VX0xJU1RfRUxFTUVOVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9VX0xJU1RfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9VX0xJU1RfRUxF
TUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9VX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFVMaXN0RWxl
bWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50IHsKKyAgICBX
ZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktp
dERPTUhUTUxVTGlzdEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFz
cyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxf
dV9saXN0X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3VfbGlzdF9lbGVtZW50X2dldF9jb21wYWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X2NvbXBhY3QoV2Vi
S2l0RE9NSFRNTFVMaXN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3VfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0KFdlYktpdERP
TUhUTUxVTGlzdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVUxpc3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfdHlw
ZV9hdHRyKFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxVTGlzdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF90eXBlX2F0
dHIoV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnRfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
VUxpc3RFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjcwZDgyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnRQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TUhUTUxVTGlzdEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFVMaXN0
RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogd3Jh
cEhUTUxVTGlzdEVsZW1lbnQoV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCopOworV2ViS2l0RE9N
SFRNTFVMaXN0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqKTsKK1dlYkNv
cmU6OkhUTUxVTGlzdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCopOwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVUxpc3RFbGVt
ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MVmlkZW9FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41YzY1MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50LmNw
cApAQCAtMCwwICsxLDY2MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5B
QkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFZpZGVvRWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9IVE1MX1ZJREVPX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5v
ZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGNvcmUoV2ViS2l0
RE9NSFRNTFZpZGVvRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50
KiB3cmFwSFRNTFZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBjb3JlT2Jq
ZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9I
VE1MX1ZJREVPX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1ZJREVP
X0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioq
IGVycm9yKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2
ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9y
QmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAg
ICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVO
VVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01F
dmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3
ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVG
SU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQsIHdlYmtpdF9kb21f
aHRtbF92aWRlb19lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJQV9FTEVNRU5ULCBH
X0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9Q
X1dJRFRILAorICAgIFBST1BfSEVJR0hULAorICAgIFBST1BfVklERU9fV0lEVEgsCisgICAgUFJP
UF9WSURFT19IRUlHSFQsCisgICAgUFJPUF9QT1NURVIsCisgICAgUFJPUF9QTEFZU19JTkxJTkUs
CisgICAgUFJPUF9XRUJLSVRfU1VQUE9SVFNfRlVMTFNDUkVFTiwKKyAgICBQUk9QX1dFQktJVF9E
SVNQTEFZSU5HX0ZVTExTQ1JFRU4sCisgICAgUFJPUF9XRUJLSVRfV0lSRUxFU1NfVklERU9fUExB
WUJBQ0tfRElTQUJMRUQsCisgICAgUFJPUF9XRUJLSVRfREVDT0RFRF9GUkFNRV9DT1VOVCwKKyAg
ICBQUk9QX1dFQktJVF9EUk9QUEVEX0ZSQU1FX0NPVU5ULAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRN
TF9WSURFT19FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QT1NURVI6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF92aWRlb19lbGVtZW50X3NldF9wb3N0ZXIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFZU19JTkxJTkU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9wbGF5c19pbmxpbmUoc2VsZiwgZ192
YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
V0VCS0lUX1dJUkVMRVNTX1ZJREVPX1BMQVlCQUNLX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfd2Via2l0X3dpcmVsZXNzX3ZpZGVvX3BsYXliYWNr
X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfVklERU9fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF9oZWlnaHQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVklERU9fV0lEVEg6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVu
dF9nZXRfdmlkZW9fd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VklERU9fSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3ZpZGVvX2hlaWdodChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QT1NURVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF9wb3N0ZXIoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExBWVNfSU5MSU5FOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRf
cGxheXNfaW5saW5lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJ
VF9TVVBQT1JUU19GVUxMU0NSRUVOOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X3N1cHBvcnRzX2Z1bGxz
Y3JlZW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0RJU1BM
QVlJTkdfRlVMTFNDUkVFTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kaXNwbGF5aW5nX2Z1bGxzY3Jl
ZW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX1dJUkVMRVNT
X1ZJREVPX1BMQVlCQUNLX0RJU0FCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X3dpcmVsZXNzX3Zp
ZGVvX3BsYXliYWNrX2Rpc2FibGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1dFQktJVF9ERUNPREVEX0ZSQU1FX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kZWNvZGVk
X2ZyYW1lX2NvdW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJ
VF9EUk9QUEVEX0ZSQU1FX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kcm9wcGVkX2ZyYW1lX2Nv
dW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF92
aWRlb19lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudENsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNf
dWxvbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgIkhUTUxWaWRlb0VsZW1l
bnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxWaWRlb0VsZW1l
bnQ6d2lkdGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAg
ICAgIkhUTUxWaWRlb0VsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1
bG9uZyBIVE1MVmlkZW9FbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05H
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1ZJREVPX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAg
ICAgICAidmlkZW8td2lkdGgiLAorICAgICAgICAgICAgIkhUTUxWaWRlb0VsZW1lbnQ6dmlkZW8t
d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgSFRNTFZpZGVvRWxlbWVudDp2
aWRlby13aWR0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVklERU9fSEVJR0hU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAidmlkZW8taGVpZ2h0
IiwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OnZpZGVvLWhlaWdodCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1bG9uZyBIVE1MVmlkZW9FbGVtZW50OnZpZGVvLWhlaWdodCIsCisg
ICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUE9TVEVSLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgInBvc3RlciIsCisgICAgICAgICAgICAiSFRNTFZpZGVv
RWxlbWVudDpwb3N0ZXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxWaWRl
b0VsZW1lbnQ6cG9zdGVyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BMQVlTX0lOTElORSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicGxheXMtaW5saW5lIiwKKyAg
ICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OnBsYXlzLWlubGluZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MVmlkZW9FbGVtZW50OnBsYXlzLWlubGluZSIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9XRUJLSVRfU1VQUE9SVFNfRlVMTFNDUkVFTiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2Via2l0LXN1cHBvcnRzLWZ1bGxzY3Jl
ZW4iLAorICAgICAgICAgICAgIkhUTUxWaWRlb0VsZW1lbnQ6d2Via2l0LXN1cHBvcnRzLWZ1bGxz
Y3JlZW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MVmlkZW9FbGVtZW50
OndlYmtpdC1zdXBwb3J0cy1mdWxsc2NyZWVuIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lU
X0RJU1BMQVlJTkdfRlVMTFNDUkVFTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisg
ICAgICAgICAgICAid2Via2l0LWRpc3BsYXlpbmctZnVsbHNjcmVlbiIsCisgICAgICAgICAgICAi
SFRNTFZpZGVvRWxlbWVudDp3ZWJraXQtZGlzcGxheWluZy1mdWxsc2NyZWVuIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTFZpZGVvRWxlbWVudDp3ZWJraXQtZGlzcGxheWlu
Zy1mdWxsc2NyZWVuIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX1dJUkVMRVNTX1ZJREVP
X1BMQVlCQUNLX0RJU0FCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJ3ZWJraXQtd2lyZWxlc3MtdmlkZW8tcGxheWJhY2stZGlzYWJsZWQiLAorICAgICAg
ICAgICAgIkhUTUxWaWRlb0VsZW1lbnQ6d2Via2l0LXdpcmVsZXNzLXZpZGVvLXBsYXliYWNrLWRp
c2FibGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxWaWRlb0VsZW1l
bnQ6d2Via2l0LXdpcmVsZXNzLXZpZGVvLXBsYXliYWNrLWRpc2FibGVkIiwKKyAgICAgICAgICAg
IEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1dFQktJVF9ERUNPREVEX0ZSQU1FX0NPVU5ULAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfdWxvbmcoCisgICAgICAgICAgICAid2Via2l0LWRlY29kZWQtZnJhbWUtY291bnQiLAorICAg
ICAgICAgICAgIkhUTUxWaWRlb0VsZW1lbnQ6d2Via2l0LWRlY29kZWQtZnJhbWUtY291bnQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgSFRNTFZpZGVvRWxlbWVudDp3ZWJraXQtZGVj
b2RlZC1mcmFtZS1jb3VudCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lU
X0RST1BQRURfRlJBTUVfQ09VTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAg
ICAgICAgICJ3ZWJraXQtZHJvcHBlZC1mcmFtZS1jb3VudCIsCisgICAgICAgICAgICAiSFRNTFZp
ZGVvRWxlbWVudDp3ZWJraXQtZHJvcHBlZC1mcmFtZS1jb3VudCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGd1bG9uZyBIVE1MVmlkZW9FbGVtZW50OndlYmtpdC1kcm9wcGVkLWZyYW1lLWNvdW50
IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19l
bGVtZW50X3dlYmtpdF9lbnRlcl9mdWxsc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT53ZWJraXRFbnRlckZ1bGxzY3JlZW4oZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURF
TykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJraXRfZXhp
dF9mdWxsc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5B
QkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPndlYmtpdEV4aXRGdWxsc2NyZWVuKCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRl
byIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF92aWRlb19lbGVtZW50X3dlYmtpdF9lbnRlcl9mdWxsX3NjcmVlbihXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+d2Via2l0RW50ZXJGdWxsU2NyZWVuKGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBF
TkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRf
d2Via2l0X2V4aXRfZnVsbF9zY3JlZW4oV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VM
RU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+d2Via2l0RXhpdEZ1bGxTY3JlZW4oKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2d1bG9uZyB3
ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFZpZGVv
RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQg
PSBpdGVtLT5nZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
d2lkdGhBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykg
Ki8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfd2lkdGgoV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlKQoreworI2lmIEVOQUJM
RShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSk7
CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6d2lkdGhBdHRyLCB2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2d1bG9uZyB3
ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxWaWRl
b0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFZp
ZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0
ID0gaXRlbS0+Z2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmhlaWdodEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVP
KSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9oZWlnaHQo
V2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6aGVpZ2h0QXR0ciwgdmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitndWxv
bmcgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3ZpZGVvX3dpZHRoKFdlYktpdERP
TUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxv
bmcgcmVzdWx0ID0gaXRlbS0+dmlkZW9XaWR0aCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX3ZpZGVv
X2VsZW1lbnRfZ2V0X3ZpZGVvX2hlaWdodChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxm
KQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJ
REVPX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPnZpZGVv
SGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICov
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfcG9zdGVyKFdl
YktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpwb3N0ZXJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3Bvc3Rl
cihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cG9zdGVyQXR0ciwgY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfcGxheXNfaW5saW5lKFdl
YktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnBsYXlzaW5saW5lQXR0cik7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfcGxheXNfaW5saW5lKFdlYktpdERPTUhUTUxWaWRl
b0VsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cGxheXNpbmxpbmVBdHRy
LCB2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikK
KyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRt
bF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfc3VwcG9ydHNfZnVsbHNjcmVlbihXZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdFN1cHBvcnRzRnVsbHNjcmVlbigpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfZGlzcGxheWluZ19mdWxs
c2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJ
REVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2Via2l0RGlzcGxheWluZ0Z1
bGxzY3JlZW4oKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVP
KSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Vi
a2l0X3dpcmVsZXNzX3ZpZGVvX3BsYXliYWNrX2Rpc2FibGVkKFdlYktpdERPTUhUTUxWaWRlb0Vs
ZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorI2lmIEVOQUJMRShXSVJFTEVTU19Q
TEFZQkFDS19UQVJHRVQpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVN
RU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53ZWJraXRX
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJXaXJlbGVzcyBQbGF5YmFjayBUYXJnZXQiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkgKi8KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xl
YW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfd2Via2l0X3dpcmVsZXNzX3ZpZGVvX3BsYXliYWNrX2Rp
c2FibGVkKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQor
eworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldFdlYmtpdFdpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKHZhbHVlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2lyZWxlc3MgUGxheWJhY2sgVGFy
Z2V0IikKKyNlbmRpZiAvKiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAqLworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5B
QkxFKFZJREVPKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRf
Z2V0X3dlYmtpdF9kZWNvZGVkX2ZyYW1lX2NvdW50KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorI2lmIEVOQUJMRShNRURJQV9TVEFUSVNUSUNT
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+d2Via2l0RGVjb2RlZEZyYW1lQ291bnQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgU3RhdGlzdGljcyIpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NU
QVRJU1RJQ1MpICovCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitndWxvbmcgd2Vi
a2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kcm9wcGVkX2ZyYW1lX2NvdW50
KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
I2lmIEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVklERU9fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+
d2Via2l0RHJvcHBlZEZyYW1lQ291bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiTWVkaWEgU3RhdGlzdGljcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NUQVRJU1RJQ1MpICovCisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRl
byIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxF
KFZJREVPKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFZpZGVvRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjY2MDgxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQuaApAQCAt
MCwwICsxLDI2MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01IVE1MVmlkZW9FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFZpZGVvRWxl
bWVudF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVklERU9f
RUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVklERU9fRUxFTUVOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9WSURFT19FTEVNRU5ULCBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX1ZJREVPX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVklERU9fRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hU
TUxfVklERU9fRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9WSURFT19FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVklERU9fRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9WSURFT19FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1ZJ
REVPX0VMRU1FTlQsIFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVu
dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxWaWRlb0VsZW1l
bnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X3dlYmtpdF9lbnRlcl9mdWxsc2NyZWVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRl
b0VsZW1lbnQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJr
aXRfZW50ZXJfZnVsbHNjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfd2Vi
a2l0X2V4aXRfZnVsbHNjcmVlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVt
ZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3dlYmtpdF9leGl0X2Z1bGxzY3JlZW4oV2ViS2l0
RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3Zp
ZGVvX2VsZW1lbnRfd2Via2l0X2VudGVyX2Z1bGxfc2NyZWVuOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF93ZWJraXRfZW50ZXJfZnVsbF9zY3JlZW4oV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVu
dCogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRl
b19lbGVtZW50X3dlYmtpdF9leGl0X2Z1bGxfc2NyZWVuOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxWaWRlb0VsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfd2Via2l0X2V4aXRfZnVs
bF9zY3JlZW4oV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0
bWxfdmlkZW9fZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3dpZHRoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vs
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MVmlkZW9F
bGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92
aWRlb19lbGVtZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVv
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVt
ZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X2hlaWdodDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKiBAdmFsdWU6IEEgI2d1bG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfdmlkZW9fZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNl
bGYsIGd1bG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1l
bnRfZ2V0X3ZpZGVvX3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9n
ZXRfdmlkZW9fd2lkdGgoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3ZpZGVvX2hlaWdodDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vs
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZwor
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3ZpZGVvX2hlaWdodChXZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9nZXRfcG9zdGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dl
dF9wb3N0ZXIoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3Bvc3RlcjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MVmlkZW9FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF92aWRl
b19lbGVtZW50X3NldF9wb3N0ZXIoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVu
dF9nZXRfcGxheXNfaW5saW5lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1l
bnRfZ2V0X3BsYXlzX2lubGluZShXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfcGxheXNfaW5saW5lOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3BsYXlzX2lubGluZShXZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9zdXBwb3J0c19mdWxsc2NyZWVuOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9zdXBwb3J0
c19mdWxsc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfZGlzcGxheWluZ19mdWxs
c2NyZWVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtp
dF9kaXNwbGF5aW5nX2Z1bGxzY3JlZW4oV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF93aXJl
bGVzc192aWRlb19wbGF5YmFja19kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VmlkZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF92
aWRlb19lbGVtZW50X2dldF93ZWJraXRfd2lyZWxlc3NfdmlkZW9fcGxheWJhY2tfZGlzYWJsZWQo
V2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3dlYmtpdF93aXJlbGVzc192aWRlb19wbGF5YmFja19kaXNh
YmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF93ZWJraXRfd2lyZWxlc3Nf
dmlkZW9fcGxheWJhY2tfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X2dldF93ZWJraXRfZGVjb2RlZF9mcmFtZV9jb3VudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX3Zp
ZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kZWNvZGVkX2ZyYW1lX2NvdW50KFdlYktpdERPTUhUTUxW
aWRlb0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVt
ZW50X2dldF93ZWJraXRfZHJvcHBlZF9mcmFtZV9jb3VudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVmlkZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kcm9wcGVkX2ZyYW1lX2NvdW50KFdlYktpdERPTUhU
TUxWaWRlb0VsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFZpZGVvRWxl
bWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxWaWRlb0VsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWI3MWQwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVu
dFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MVmlkZW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxWaWRl
b0VsZW1lbnQuaD4KKyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogd3JhcEhUTUxWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudCopOworV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCoga2l0KFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU8pICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVmlkZW9FbGVt
ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnkuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IaXN0
b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhjYzgxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IaXN0b3J5LmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhpc3RvcnkuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01IaXN0b3J5UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2RlZmluZSBXRUJLSVRfRE9NX0hJU1RPUllfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfSElTVE9SWSwgV2ViS2l0RE9N
SGlzdG9yeVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IaXN0b3J5UHJpdmF0
ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6Okhpc3Rvcnk+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERP
TUhpc3RvcnlQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSGlzdG9y
eSoga2l0KFdlYkNvcmU6Okhpc3RvcnkqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9ISVNUT1JZKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcEhpc3Rvcnkob2JqKTsKK30KKworV2ViQ29yZTo6SGlzdG9yeSogY29yZShXZWJLaXRE
T01IaXN0b3J5KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SGlzdG9yeSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Cit9CisKK1dlYktpdERPTUhpc3RvcnkqIHdyYXBIaXN0b3J5KFdlYkNvcmU6Okhpc3Rv
cnkqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0hJU1RPUlkoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ISVNUT1JZLCAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUhpc3RvcnksIHdlYmtpdF9kb21faGlz
dG9yeSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9oaXN0b3J5X2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01IaXN0b3J5UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fSElTVE9SWV9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAg
cHJpdi0+fldlYktpdERPTUhpc3RvcnlQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9oaXN0b3J5X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faGlzdG9yeV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IaXN0b3J5KiBzZWxmID0gV0VCS0lUX0RPTV9ISVNUT1JZKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAg
ICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9oaXN0b3J5X2dldF9sZW5n
dGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21faGlz
dG9yeV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBH
T2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2hpc3RvcnlfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTUhpc3RvcnlQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9ISVNUT1JZX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Okhpc3RvcnkqPihXRUJLSVRfRE9NX09CSkVDVChv
YmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faGlzdG9yeV9jbGFzc19pbml0KFdlYktpdERPTUhpc3Rv
cnlDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NSGlzdG9yeVByaXZhdGUpKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9oaXN0b3J5X2NvbnN0cnVj
dG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2hpc3RvcnlfZmlu
YWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2hpc3Rv
cnlfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiSGlz
dG9yeTpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgSGlzdG9yeTpsZW5n
dGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faGlzdG9yeV9p
bml0KFdlYktpdERPTUhpc3RvcnkqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NSGlzdG9yeVBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0hJU1RPUllfR0VUX1BSSVZBVEUocmVxdWVzdCk7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRET01IaXN0b3J5UHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtp
dF9kb21faGlzdG9yeV9iYWNrKFdlYktpdERPTUhpc3RvcnkqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ISVNUT1JZKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIaXN0b3J5KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmJhY2soKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2hpc3RvcnlfZm9yd2FyZChXZWJLaXRET01IaXN0b3J5KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSElTVE9SWShzZWxmKSk7CisgICAgV2ViQ29yZTo6SGlzdG9yeSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5mb3J3YXJkKCk7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9oaXN0b3J5X2dvKFdlYktpdERPTUhpc3RvcnkqIHNlbGYsIGdsb25nIGRpc3RhbmNl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSElTVE9SWShzZWxmKSk7CisgICAgV2ViQ29yZTo6
SGlzdG9yeSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5nbyhkaXN0YW5j
ZSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2hpc3RvcnlfZ2V0X2xlbmd0aChXZWJLaXRET01I
aXN0b3J5KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hJU1RPUlkoc2VsZiks
IDApOworICAgIFdlYkNvcmU6Okhpc3RvcnkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSGlzdG9yeS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IaXN0b3J5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3YzQzZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSGlzdG9yeS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSGlzdG9yeV9oCisjZGVmaW5lIFdlYktpdERPTUhpc3Rv
cnlfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hJU1RPUlkgICAgICAgICAgICAod2Vi
a2l0X2RvbV9oaXN0b3J5X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSElTVE9SWShv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfSElTVE9SWSwgV2ViS2l0RE9NSGlzdG9yeSkpCisjZGVmaW5lIFdFQktJVF9ET01f
SElTVE9SWV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSElTVE9SWSwgV2ViS2l0RE9NSGlzdG9yeUNsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hJU1RPUlkob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hJU1RPUlkpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0hJU1RPUllfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hJU1RPUlkpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hJU1RP
UllfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hJU1RPUlksIFdlYktpdERPTUhpc3RvcnlDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NSGlzdG9yeSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NSGlzdG9yeUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmpl
Y3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2hpc3RvcnlfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9oaXN0b3J5X2Jh
Y2s6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSGlzdG9yeQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2hpc3RvcnlfYmFjayhXZWJL
aXRET01IaXN0b3J5KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2hpc3RvcnlfZm9yd2Fy
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IaXN0b3J5CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faGlzdG9yeV9mb3J3YXJkKFdl
YktpdERPTUhpc3RvcnkqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faGlzdG9yeV9nbzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IaXN0b3J5CisgKiBAZGlzdGFuY2U6IEEgI2dsb25nCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faGlzdG9yeV9nbyhXZWJLaXRET01IaXN0b3J5KiBzZWxmLCBnbG9uZyBkaXN0YW5jZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9oaXN0b3J5X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSGlzdG9yeQorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faGlzdG9yeV9n
ZXRfbGVuZ3RoKFdlYktpdERPTUhpc3RvcnkqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
SGlzdG9yeV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnlQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhp
c3RvcnlQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4OGE4
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSGlzdG9yeVByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhp
c3RvcnlQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSGlzdG9yeVByaXZhdGVfaAorCisjaW5j
bHVkZSA8V2ViQ29yZS9IaXN0b3J5Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhp
c3RvcnkuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IaXN0b3J5KiB3cmFwSGlz
dG9yeShXZWJDb3JlOjpIaXN0b3J5Kik7CitXZWJLaXRET01IaXN0b3J5KiBraXQoV2ViQ29yZTo6
SGlzdG9yeSopOworV2ViQ29yZTo6SGlzdG9yeSogY29yZShXZWJLaXRET01IaXN0b3J5Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhpc3RvcnlQcml2YXRl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5Ym9hcmRFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJk
RXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDcwMTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZlbnQuY3BwCkBAIC0wLDAgKzEsMjcyIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9D
U1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTVdp
bmRvd1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01LZXlib2FyZEV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTUtleWJvYXJkRXZlbnQqIGtpdChXZWJDb3JlOjpLZXlib2FyZEV2ZW50
KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlQoa2l0KHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkV2ZW50Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpLZXlib2FyZEV2
ZW50KiBjb3JlKFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NS2V5Ym9h
cmRFdmVudCogd3JhcEtleWJvYXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
S0VZQk9BUkRfRVZFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9LRVlCT0FSRF9FVkVO
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01LZXlib2FyZEV2ZW50LCB3ZWJr
aXRfZG9tX2tleWJvYXJkX2V2ZW50LCBXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX0tFWV9JREVOVElGSUVSLAorICAgIFBST1BfS0VZX0xP
Q0FUSU9OLAorICAgIFBST1BfQ1RSTF9LRVksCisgICAgUFJPUF9TSElGVF9LRVksCisgICAgUFJP
UF9BTFRfS0VZLAorICAgIFBST1BfTUVUQV9LRVksCisgICAgUFJPUF9BTFRfR1JBUEhfS0VZLAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9LRVlCT0FSRF9FVkVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX0tFWV9JREVOVElGSUVSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9rZXlfaWRlbnRpZmllcihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9LRVlfTE9DQVRJT046CisgICAg
ICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dl
dF9rZXlfbG9jYXRpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1RS
TF9LRVk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fa2V5
Ym9hcmRfZXZlbnRfZ2V0X2N0cmxfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1NISUZUX0tFWToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfc2hpZnRfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0FMVF9LRVk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2FsdF9rZXkoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVUQV9LRVk6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X21ldGFfa2V5KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMVF9HUkFQSF9LRVk6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRf
Z2V0X2FsdF9ncmFwaF9rZXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9rZXlib2FyZF9ldmVudF9jbGFzc19pbml0KFdlYktpdERPTUtleWJvYXJkRXZlbnRD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0tFWV9JREVOVElGSUVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgImtleS1pZGVudGlmaWVyIiwKKyAgICAgICAgICAgICJLZXlib2FyZEV2ZW50
OmtleS1pZGVudGlmaWVyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEtleWJvYXJk
RXZlbnQ6a2V5LWlkZW50aWZpZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9LRVlfTE9DQVRJT04sCisg
ICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJrZXktbG9jYXRpb24iLAor
ICAgICAgICAgICAgIktleWJvYXJkRXZlbnQ6a2V5LWxvY2F0aW9uIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3Vsb25nIEtleWJvYXJkRXZlbnQ6a2V5LWxvY2F0aW9uIiwKKyAgICAgICAgICAg
IDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DVFJMX0tFWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAiY3RybC1rZXkiLAorICAgICAgICAgICAgIktleWJvYXJkRXZlbnQ6
Y3RybC1rZXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBLZXlib2FyZEV2ZW50
OmN0cmwta2V5IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0hJRlRfS0VZLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJzaGlmdC1rZXkiLAorICAgICAgICAgICAg
IktleWJvYXJkRXZlbnQ6c2hpZnQta2V5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xl
YW4gS2V5Ym9hcmRFdmVudDpzaGlmdC1rZXkiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTFRfS0VZ
LAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhbHQta2V5IiwK
KyAgICAgICAgICAgICJLZXlib2FyZEV2ZW50OmFsdC1rZXkiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnYm9vbGVhbiBLZXlib2FyZEV2ZW50OmFsdC1rZXkiLAorICAgICAgICAgICAgRkFMU0Us
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9NRVRBX0tFWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAi
bWV0YS1rZXkiLAorICAgICAgICAgICAgIktleWJvYXJkRXZlbnQ6bWV0YS1rZXkiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBLZXlib2FyZEV2ZW50Om1ldGEta2V5IiwKKyAgICAg
ICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQUxUX0dSQVBIX0tFWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAiYWx0LWdyYXBoLWtleSIsCisgICAgICAgICAgICAiS2V5Ym9hcmRF
dmVudDphbHQtZ3JhcGgta2V5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gS2V5
Ym9hcmRFdmVudDphbHQtZ3JhcGgta2V5IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9rZXlib2FyZF9ldmVudF9pbml0KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHJlcXVlc3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2tl
eWJvYXJkX2V2ZW50X2dldF9tb2RpZmllcl9zdGF0ZShXZWJLaXRET01LZXlib2FyZEV2ZW50KiBz
ZWxmLCBjb25zdCBnY2hhcioga2V5SWRlbnRpZmllckFyZykKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19LRVlCT0FSRF9FVkVOVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGtleUlkZW50aWZpZXJBcmcsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpLZXlib2FyZEV2
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZEtleUlkZW50aWZpZXJBcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoa2V5SWRlbnRpZmllckFy
Zyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Z2V0TW9kaWZpZXJTdGF0ZShjb252ZXJ0
ZWRLZXlJZGVudGlmaWVyQXJnKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21fa2V5Ym9hcmRfZXZlbnRfaW5pdF9rZXlib2FyZF9ldmVudChXZWJLaXRET01LZXlib2Fy
ZEV2ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdHlwZSwgZ2Jvb2xlYW4gY2FuQnViYmxlLCBnYm9v
bGVhbiBjYW5jZWxhYmxlLCBXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIGNvbnN0IGdjaGFyKiBr
ZXlJZGVudGlmaWVyLCBndWxvbmcgbG9jYXRpb24sIGdib29sZWFuIGN0cmxLZXksIGdib29sZWFu
IGFsdEtleSwgZ2Jvb2xlYW4gc2hpZnRLZXksIGdib29sZWFuIG1ldGFLZXksIGdib29sZWFuIGFs
dEdyYXBoS2V5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHlwZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPTV9XSU5ET1codmlldykpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoa2V5SWRl
bnRpZmllcik7CisgICAgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUeXBlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHR5cGUpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogY29udmVydGVkVmlldyA9IFdl
YktpdDo6Y29yZSh2aWV3KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRLZXlJZGVudGlmaWVy
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGtleUlkZW50aWZpZXIpOworICAgIGl0ZW0tPmluaXRL
ZXlib2FyZEV2ZW50KGNvbnZlcnRlZFR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgY29udmVy
dGVkVmlldywgY29udmVydGVkS2V5SWRlbnRpZmllciwgbG9jYXRpb24sIGN0cmxLZXksIGFsdEtl
eSwgc2hpZnRLZXksIG1ldGFLZXksIGFsdEdyYXBoS2V5KTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2tleV9pZGVudGlmaWVyKFdlYktpdERPTUtleWJvYXJkRXZl
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+a2V5
SWRlbnRpZmllcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9rZXlib2FyZF9ldmVudF9nZXRfa2V5X2xvY2F0aW9uKFdlYktpdERPTUtleWJvYXJkRXZlbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxvY2F0aW9uKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfY3RybF9r
ZXkoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19LRVlCT0FSRF9FVkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OktleWJvYXJk
RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+Y3RybEtleSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X3NoaWZ0X2tleShXZWJLaXRET01LZXlib2FyZEV2ZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VWRU5UKHNlbGYp
LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zaGlmdEtleSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0
X2FsdF9rZXkoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Oktl
eWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+YWx0S2V5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfbWV0YV9rZXkoV2ViS2l0RE9NS2V5Ym9hcmRF
dmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWV0YUtleSgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRf
Z2V0X2FsdF9ncmFwaF9rZXkoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdl
YkNvcmU6OktleWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+YWx0R3JhcGhLZXkoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5Ym9hcmRFdmVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkN2QwNTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZlbnQuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0
ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudF9oCisjZGVmaW5lIFdlYktpdERPTUtleWJvYXJk
RXZlbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NVUlFdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfS0VZQk9BUkRf
RVZFTlQgICAgICAgICAgICAod2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9LRVlCT0FSRF9FVkVO
VCwgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fS0VZQk9BUkRf
RVZFTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0tFWUJPQVJEX0VWRU5ULCBXZWJLaXRET01LZXlib2FyZEV2ZW50Q2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0tFWUJPQVJE
X0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfS0VZ
Qk9BUkRfRVZFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9LRVlCT0FSRF9FVkVOVCwgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudENsYXNzKSkKKworLyoqCisg
KiBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElPTl9TVEFOREFSRDoKKyAqLwor
I2RlZmluZSBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElPTl9TVEFOREFSRCAw
eDAwCisKKy8qKgorICogV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlfTE9DQVRJT05fTEVG
VDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElPTl9M
RUZUIDB4MDEKKworLyoqCisgKiBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElP
Tl9SSUdIVDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NB
VElPTl9SSUdIVCAweDAyCisKKy8qKgorICogV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlf
TE9DQVRJT05fTlVNUEFEOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRf
S0VZX0xPQ0FUSU9OX05VTVBBRCAweDAzCisKK3N0cnVjdCBfV2ViS2l0RE9NS2V5Ym9hcmRFdmVu
dCB7CisgICAgV2ViS2l0RE9NVUlFdmVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERPTUtleWJvYXJkRXZlbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NVUlFdmVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fa2V5Ym9h
cmRfZXZlbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9rZXlib2FyZF9l
dmVudF9nZXRfbW9kaWZpZXJfc3RhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NS2V5Ym9hcmRF
dmVudAorICogQGtleUlkZW50aWZpZXJBcmc6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9rZXlib2FyZF9l
dmVudF9nZXRfbW9kaWZpZXJfc3RhdGUoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIGtleUlkZW50aWZpZXJBcmcpOworCisvKioKKyAqIHdlYmtpdF9kb21fa2V5Ym9h
cmRfZXZlbnRfaW5pdF9rZXlib2FyZF9ldmVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01LZXli
b2FyZEV2ZW50CisgKiBAdHlwZTogQSAjZ2NoYXIKKyAqIEBjYW5CdWJibGU6IEEgI2dib29sZWFu
CisgKiBAY2FuY2VsYWJsZTogQSAjZ2Jvb2xlYW4KKyAqIEB2aWV3OiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqIEBrZXlJZGVudGlmaWVyOiBBICNnY2hhcgorICogQGxvY2F0aW9uOiBBICNndWxv
bmcKKyAqIEBjdHJsS2V5OiBBICNnYm9vbGVhbgorICogQGFsdEtleTogQSAjZ2Jvb2xlYW4KKyAq
IEBzaGlmdEtleTogQSAjZ2Jvb2xlYW4KKyAqIEBtZXRhS2V5OiBBICNnYm9vbGVhbgorICogQGFs
dEdyYXBoS2V5OiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2tleWJvYXJkX2V2ZW50X2luaXRfa2V5Ym9hcmRfZXZlbnQoV2ViS2l0RE9NS2V5Ym9hcmRF
dmVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHR5cGUsIGdib29sZWFuIGNhbkJ1YmJsZSwgZ2Jvb2xl
YW4gY2FuY2VsYWJsZSwgV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBjb25zdCBnY2hhcioga2V5
SWRlbnRpZmllciwgZ3Vsb25nIGxvY2F0aW9uLCBnYm9vbGVhbiBjdHJsS2V5LCBnYm9vbGVhbiBh
bHRLZXksIGdib29sZWFuIHNoaWZ0S2V5LCBnYm9vbGVhbiBtZXRhS2V5LCBnYm9vbGVhbiBhbHRH
cmFwaEtleSk7CisKKy8qKgorICogd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfa2V5X2lk
ZW50aWZpZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NS2V5Ym9hcmRFdmVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2tleWJv
YXJkX2V2ZW50X2dldF9rZXlfaWRlbnRpZmllcihXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9rZXlfbG9jYXRpb246
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NS2V5Ym9hcmRFdmVudAorICoKKyAqIFJldHVybnM6IEEg
I2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9rZXlib2FyZF9ldmVu
dF9nZXRfa2V5X2xvY2F0aW9uKFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2N0cmxfa2V5OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUtleWJvYXJkRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9jdHJs
X2tleShXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2tleWJvYXJkX2V2ZW50X2dldF9zaGlmdF9rZXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NS2V5
Ym9hcmRFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X3NoaWZ0X2tleShXZWJLaXRE
T01LZXlib2FyZEV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2
ZW50X2dldF9hbHRfa2V5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUtleWJvYXJkRXZlbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9hbHRfa2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X21ldGFfa2V5
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUtleWJvYXJkRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2tleWJvYXJk
X2V2ZW50X2dldF9tZXRhX2tleShXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9hbHRfZ3JhcGhfa2V5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUtleWJvYXJkRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVh
bgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dl
dF9hbHRfZ3JhcGhfa2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NS2V5Ym9hcmRFdmVudF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUtleWJvYXJkRXZlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZlbnRQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmYTYwZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NS2V5Ym9hcmRFdmVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUtleWJvYXJk
RXZlbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUtleWJvYXJkRXZlbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRE
T01LZXlib2FyZEV2ZW50KiB3cmFwS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50
Kik7CitXZWJLaXRET01LZXlib2FyZEV2ZW50KiBraXQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCop
OworV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCogY29yZShXZWJLaXRET01LZXlib2FyZEV2ZW50Kik7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUtleWJvYXJkRXZl
bnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01LZXlmcmFtZUVmZmVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OGNmZTk0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QuY3BwCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01LZXlmcmFtZUVmZmVjdC5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTUtleWZyYW1lRWZmZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShXRUJfQU5JTUFU
SU9OUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUtleWZyYW1lRWZmZWN0KiBr
aXQoV2ViQ29yZTo6S2V5ZnJhbWVFZmZlY3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9LRVlGUkFNRV9FRkZFQ1QocmV0KTsK
KworICAgIHJldHVybiB3cmFwS2V5ZnJhbWVFZmZlY3Qob2JqKTsKK30KKworV2ViQ29yZTo6S2V5
ZnJhbWVFZmZlY3QqIGNvcmUoV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdCo+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTUtleWZyYW1lRWZmZWN0KiB3cmFwS2V5ZnJhbWVFZmZlY3QoV2ViQ29yZTo6S2V5ZnJhbWVF
ZmZlY3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0tFWUZSQU1FX0VGRkVDVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBF
X0tFWUZSQU1FX0VGRkVDVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFU
SU9OUykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01LZXlmcmFtZUVmZmVjdCwgd2Via2l0X2Rv
bV9rZXlmcmFtZV9lZmZlY3QsIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fRUZGRUNUKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2tleWZyYW1lX2VmZmVjdF9jbGFzc19pbml0KFdlYktpdERP
TUtleWZyYW1lRWZmZWN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
cmVxdWVzdENsYXNzKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9rZXlmcmFtZV9lZmZl
Y3RfaW5pdChXZWJLaXRET01LZXlmcmFtZUVmZmVjdCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0ocmVxdWVzdCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NS2V5ZnJhbWVFZmZlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43OWQzZDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdC5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NS2V5ZnJhbWVFZmZlY3RfaAorI2RlZmluZSBXZWJLaXRET01LZXlmcmFtZUVmZmVjdF9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfS0VZRlJBTUVfRUZGRUNUICAg
ICAgICAgICAgKHdlYmtpdF9kb21fa2V5ZnJhbWVfZWZmZWN0X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fS0VZRlJBTUVfRUZGRUNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9LRVlGUkFNRV9FRkZFQ1QsIFdl
YktpdERPTUtleWZyYW1lRWZmZWN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlGUkFNRV9FRkZF
Q1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0tFWUZSQU1FX0VGRkVDVCwgV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19LRVlGUkFNRV9FRkZFQ1Qob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0tFWUZSQU1F
X0VGRkVDVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfS0VZRlJBTUVfRUZGRUNUX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9L
RVlGUkFNRV9FRkZFQ1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0tFWUZSQU1FX0VGRkVDVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfS0VZRlJBTUVfRUZGRUNULCBXZWJLaXRET01LZXlmcmFtZUVmZmVjdENsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01LZXlmcmFtZUVmZmVjdCB7CisgICAgV2ViS2l0RE9NQW5pbWF0aW9u
RWZmZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NS2V5ZnJhbWVF
ZmZlY3RDbGFzcyB7CisgICAgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9rZXlmcmFtZV9lZmZlY3Rf
Z2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01LZXlmcmFtZUVmZmVjdF9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlmcmFt
ZUVmZmVjdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk2
ZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdFByaXZhdGUuaApAQCAt
MCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTUtleWZyYW1lRWZmZWN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUtleWZyYW1l
RWZmZWN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWZyYW1lRWZmZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUtleWZyYW1lRWZmZWN0Lmg+CisjaWYgRU5BQkxF
KFdFQl9BTklNQVRJT05TKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUtleWZyYW1l
RWZmZWN0KiB3cmFwS2V5ZnJhbWVFZmZlY3QoV2ViQ29yZTo6S2V5ZnJhbWVFZmZlY3QqKTsKK1dl
YktpdERPTUtleWZyYW1lRWZmZWN0KiBraXQoV2ViQ29yZTo6S2V5ZnJhbWVFZmZlY3QqKTsKK1dl
YkNvcmU6OktleWZyYW1lRWZmZWN0KiBjb3JlKFdlYktpdERPTUtleWZyYW1lRWZmZWN0Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShXRUJfQU5JTUFUSU9OUykg
Ki8KKworI2VuZGlmIC8qIFdlYktpdERPTUtleWZyYW1lRWZmZWN0UHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUxvY2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9jYXRpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxY2IxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUxvY2F0aW9uLmNwcApAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUxvY2F0aW9u
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJ
VF9ET01fTE9DQVRJT05fR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfTE9DQVRJT04sIFdlYktpdERPTUxvY2F0aW9uUHJpdmF0
ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUxvY2F0aW9uUHJpdmF0ZSB7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkxvY2F0aW9uPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01Mb2NhdGlvblBy
aXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Mb2NhdGlvbioga2l0KFdl
YkNvcmU6OkxvY2F0aW9uKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fTE9DQVRJT04ocmV0KTsKKworICAgIHJldHVybiB3cmFw
TG9jYXRpb24ob2JqKTsKK30KKworV2ViQ29yZTo6TG9jYXRpb24qIGNvcmUoV2ViS2l0RE9NTG9j
YXRpb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpMb2NhdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTUxvY2F0aW9uKiB3cmFwTG9jYXRpb24oV2ViQ29yZTo6TG9jYXRp
b24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0xPQ0FUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTE9DQVRJT04s
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTG9jYXRpb24sIHdlYmtpdF9kb21f
bG9jYXRpb24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX0hSRUYsCisgICAgUFJPUF9QUk9UT0NPTCwKKyAgICBQUk9QX0hPU1QsCisgICAg
UFJPUF9IT1NUTkFNRSwKKyAgICBQUk9QX1BPUlQsCisgICAgUFJPUF9QQVRITkFNRSwKKyAgICBQ
Uk9QX1NFQVJDSCwKKyAgICBQUk9QX0hBU0gsCisgICAgUFJPUF9PUklHSU4sCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2xvY2F0aW9uX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01Mb2NhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0xPQ0FUSU9O
X0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3Jn
ZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NTG9jYXRp
b25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9sb2NhdGlvbl9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2xvY2F0aW9uX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUxvY2F0
aW9uKiBzZWxmID0gV0VCS0lUX0RPTV9MT0NBVElPTihvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hyZWYoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3Byb3RvY29sKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1Q6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hvc3Qoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfSE9TVE5BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hvc3RuYW1lKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPUlQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3BvcnQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFUSE5BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3BhdGhuYW1lKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFQVJDSDoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfc2VhcmNoKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hBU0g6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hhc2goc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9vcmlnaW4oc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fbG9jYXRpb25fY29uc3RydWN0b3Io
R1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3Ry
dWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0g
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9sb2NhdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMp
OworCisgICAgV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9MT0NB
VElPTl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpMb2NhdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVP
YmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0
LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9sb2NhdGlvbl9jbGFzc19pbml0KFdlYktpdERPTUxvY2F0aW9uQ2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmpl
Y3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUxvY2F0aW9uUHJpdmF0ZSkpOworICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2xvY2F0aW9uX2NvbnN0cnVjdG9yOworICAg
IGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2xvY2F0aW9uX2ZpbmFsaXplOwor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFJFRiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJocmVmIiwKKyAgICAgICAgICAgICJMb2NhdGlvbjpocmVm
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIExvY2F0aW9uOmhyZWYiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9QUk9UT0NPTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJwcm90b2NvbCIsCisgICAgICAgICAgICAiTG9jYXRpb246cHJvdG9jb2wiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnY2hhciogTG9jYXRpb246cHJvdG9jb2wiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9IT1NULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
Imhvc3QiLAorICAgICAgICAgICAgIkxvY2F0aW9uOmhvc3QiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogTG9jYXRpb246aG9zdCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hPU1ROQU1FLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhvc3RuYW1lIiwKKyAg
ICAgICAgICAgICJMb2NhdGlvbjpob3N0bmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdj
aGFyKiBMb2NhdGlvbjpob3N0bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BPUlQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicG9ydCIsCisgICAgICAgICAgICAi
TG9jYXRpb246cG9ydCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBMb2NhdGlvbjpw
b3J0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFUSE5BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAicGF0aG5hbWUiLAorICAgICAgICAgICAgIkxvY2F0aW9uOnBh
dGhuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIExvY2F0aW9uOnBhdGhuYW1l
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfU0VBUkNILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgInNlYXJjaCIsCisgICAgICAgICAgICAiTG9jYXRpb246c2VhcmNoIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIExvY2F0aW9uOnNlYXJjaCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0hBU0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiaGFzaCIsCisgICAgICAgICAgICAiTG9jYXRpb246aGFzaCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBMb2NhdGlvbjpoYXNoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1JJR0lOLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm9yaWdpbiIsCisgICAg
ICAgICAgICAiTG9jYXRpb246b3JpZ2luIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IExvY2F0aW9uOm9yaWdpbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbG9jYXRpb25f
aW5pdChXZWJLaXRET01Mb2NhdGlvbiogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01Mb2NhdGlv
blByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0xPQ0FUSU9OX0dFVF9QUklWQVRFKHJlcXVlc3Qp
OworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlKCk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ocmVmKFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpMb2NhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ocmVmKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wcm90b2NvbChXZWJLaXRE
T01Mb2NhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19MT0NBVElPTihz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cHJvdG9j
b2woKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbG9jYXRp
b25fZ2V0X2hvc3QoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTE9DQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmhvc3QoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21fbG9jYXRpb25fZ2V0X2hvc3RuYW1lKFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpMb2NhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ob3N0bmFtZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfcG9ydChXZWJLaXRE
T01Mb2NhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19MT0NBVElPTihz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cG9ydCgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9n
ZXRfcGF0aG5hbWUoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTE9DQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPnBhdGhuYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9zZWFyY2goV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTE9DQVRJT04oc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkxvY2F0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnNlYXJjaCgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfaGFzaChXZWJLaXRE
T01Mb2NhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19MT0NBVElPTihz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aGFzaCgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9n
ZXRfb3JpZ2luKFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpMb2NhdGlvbiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5vcmlnaW4oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Mb2NhdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Mb2NhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjMzNjNiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0aW9u
LmgKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NTG9jYXRpb25faAorI2RlZmluZSBXZWJLaXRET01Mb2NhdGlvbl9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTE9DQVRJT04gICAgICAgICAgICAod2Via2l0X2Rv
bV9sb2NhdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0xPQ0FUSU9OKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9MT0NBVElPTiwgV2ViS2l0RE9NTG9jYXRpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX0xP
Q0FUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9MT0NBVElPTiwgV2ViS2l0RE9NTG9jYXRpb25DbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19MT0NBVElPTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTE9DQVRJT04pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0xPQ0FUSU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9MT0NBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01f
TE9DQVRJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgV0VCS0lUX0RPTV9UWVBFX0xPQ0FUSU9OLCBXZWJLaXRET01Mb2NhdGlvbkNsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01Mb2NhdGlvbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTG9jYXRpb25DbGFzcyB7CisgICAgV2Vi
S2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQor
d2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2xvY2F0aW9uX2dldF9ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUxvY2F0aW9uCisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ocmVmKFdlYktpdERPTUxv
Y2F0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wcm90b2Nv
bDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Mb2NhdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfcHJvdG9jb2woV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hvc3Q6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NTG9jYXRpb24KKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbG9jYXRp
b25fZ2V0X2hvc3QoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fbG9jYXRpb25fZ2V0X2hvc3RuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUxvY2F0aW9u
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ob3N0bmFtZShX
ZWJLaXRET01Mb2NhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9sb2NhdGlvbl9n
ZXRfcG9ydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Mb2NhdGlvbgorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfcG9ydChXZWJLaXRET01Mb2NhdGlvbiogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfcGF0aG5hbWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NTG9jYXRpb24KKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
bG9jYXRpb25fZ2V0X3BhdGhuYW1lKFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9zZWFyY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
TG9jYXRpb24KKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3Nl
YXJjaChXZWJLaXRET01Mb2NhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9sb2Nh
dGlvbl9nZXRfaGFzaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Mb2NhdGlvbgorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfaGFzaChXZWJLaXRET01Mb2NhdGlv
biogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfb3JpZ2luOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUxvY2F0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2xvY2F0aW9uX2dldF9vcmlnaW4oV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5k
aWYgLyogV2ViS2l0RE9NTG9jYXRpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Mb2NhdGlvblBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMzk4N2Q1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9jYXRpb25Qcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01Mb2NhdGlvblByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01Mb2Nh
dGlvblByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Mb2NhdGlvbi5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01Mb2NhdGlvbi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTUxvY2F0aW9uKiB3cmFwTG9jYXRpb24oV2ViQ29yZTo6TG9jYXRpb24qKTsKK1dlYktp
dERPTUxvY2F0aW9uKiBraXQoV2ViQ29yZTo6TG9jYXRpb24qKTsKK1dlYkNvcmU6OkxvY2F0aW9u
KiBjb3JlKFdlYktpdERPTUxvY2F0aW9uKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUxvY2F0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1l
ZGlhQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3NjBiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TWVkaWFDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDY1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTU1l
ZGlhQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRpbWVSYW5nZXNQ
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9NRURJQV9DT05UUk9MTEVSX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX01FRElBX0NPTlRST0xMRVIsIFdlYktpdERPTU1l
ZGlhQ29udHJvbGxlclByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYUNv
bnRyb2xsZXJQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgUmVmUHRyPFdlYkNvcmU6
Ok1lZGlhQ29udHJvbGxlcj4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCit9
IFdlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGU7CisKKyNpZiBFTkFCTEUoVklERU8pCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIGtpdChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xsZXIqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmop
KQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9NRURJQV9DT05UUk9MTEVSKHJldCk7CisKKyAg
ICByZXR1cm4gd3JhcE1lZGlhQ29udHJvbGxlcihvYmopOworfQorCitXZWJDb3JlOjpNZWRpYUNv
bnRyb2xsZXIqIGNvcmUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyKiB3cmFwTWVkaWFDb250cm9sbGVyKFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbGxlciogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fTUVESUFfQ09OVFJPTExFUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX01FRElBX0NPTlRST0xMRVIsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8p
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNo
RXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVO
VVNFRF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fbWVk
aWFfY29udHJvbGxlcl9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6TWVkaWFDb250
cm9sbGVyKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFDb250cm9sbGVy
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7
CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJl
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6TWVkaWFDb250cm9sbGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVO
VVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01F
dmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3
ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFk
ZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
bWVkaWFfY29udHJvbGxlcl9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZ
UEVfV0lUSF9DT0RFKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciwgd2Via2l0X2RvbV9tZWRpYV9j
b250cm9sbGVyLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0Uo
V0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0JVRkZFUkVELAorICAgIFBST1Bf
U0VFS0FCTEUsCisgICAgUFJPUF9EVVJBVElPTiwKKyAgICBQUk9QX0NVUlJFTlRfVElNRSwKKyAg
ICBQUk9QX1BBVVNFRCwKKyAgICBQUk9QX1BMQVlFRCwKKyAgICBQUk9QX1BMQVlCQUNLX1NUQVRF
LAorICAgIFBST1BfREVGQVVMVF9QTEFZQkFDS19SQVRFLAorICAgIFBST1BfUExBWUJBQ0tfUkFU
RSwKKyAgICBQUk9QX1ZPTFVNRSwKKyAgICBQUk9QX01VVEVELAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9N
RURJQV9DT05UUk9MTEVSX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgp
KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisgICAgcHJpdi0+fldlYktpdERPTU1lZGlhQ29u
dHJvbGxlclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX21lZGlhX2Nv
bnRyb2xsZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZiA9IFdFQktJVF9ET01f
TUVESUFfQ09OVFJPTExFUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0NVUlJFTlRfVElNRToKKyAgICAgICAgd2Via2l0X2RvbV9tZWRpYV9jb250
cm9sbGVyX3NldF9jdXJyZW50X3RpbWUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZBVUxUX1BMQVlCQUNLX1JBVEU6Cisg
ICAgICAgIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfZGVmYXVsdF9wbGF5YmFja19y
YXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUExBWUJBQ0tfUkFURToKKyAgICAgICAgd2Via2l0X2RvbV9tZWRpYV9jb250
cm9sbGVyX3NldF9wbGF5YmFja19yYXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVk9MVU1FOgorICAgICAgICB3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X3ZvbHVtZShzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUo
dmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01VVEVEOgor
ICAgICAgICB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X211dGVkKHNlbGYsIGdfdmFs
dWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYgPSBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xM
RVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9C
VUZGRVJFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX21l
ZGlhX2NvbnRyb2xsZXJfZ2V0X2J1ZmZlcmVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NFRUtBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfc2Vla2FibGUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRFVSQVRJT046CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJs
ZSh2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9kdXJhdGlvbihzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJSRU5UX1RJTUU6CisgICAgICAgIGdf
dmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9j
dXJyZW50X3RpbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFVU0VE
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2Nv
bnRyb2xsZXJfZ2V0X3BhdXNlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9QTEFZRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9t
ZWRpYV9jb250cm9sbGVyX2dldF9wbGF5ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUExBWUJBQ0tfU1RBVEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGxheWJhY2tfc3RhdGUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9QTEFZQkFDS19SQVRFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1BMQVlCQUNLX1JBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2
YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wbGF5YmFja19yYXRlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZPTFVNRToKKyAgICAgICAgZ192YWx1
ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3ZvbHVt
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NVVRFRDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dl
dF9tdXRlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2Rv
bV9tZWRpYV9jb250cm9sbGVyX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVj
dFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0
aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
bWVkaWFfY29udHJvbGxlcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9NRURJQV9DT05UUk9MTEVSX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlcio+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShW
SURFTykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21l
ZGlhX2NvbnRyb2xsZXJfY2xhc3NfaW5pdChXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZSkpOworICAg
IGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJf
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbWVk
aWFfY29udHJvbGxlcl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3Byb3Bl
cnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0JVRkZFUkVELAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgImJ1ZmZlcmVkIiwKKyAgICAgICAgICAgICJNZWRpYUNvbnRy
b2xsZXI6YnVmZmVyZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UaW1lUmFu
Z2VzKiBNZWRpYUNvbnRyb2xsZXI6YnVmZmVyZWQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX1RJTUVfUkFOR0VTLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU0VFS0FCTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAic2Vla2FibGUiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpz
ZWVrYWJsZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRpbWVSYW5nZXMqIE1l
ZGlhQ29udHJvbGxlcjpzZWVrYWJsZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVElN
RV9SQU5HRVMsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9EVVJBVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAg
ICAgICAgICJkdXJhdGlvbiIsCisgICAgICAgICAgICAiTWVkaWFDb250cm9sbGVyOmR1cmF0aW9u
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBNZWRpYUNvbnRyb2xsZXI6ZHVyYXRp
b24iLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NVUlJFTlRf
VElNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJjdXJyZW50
LXRpbWUiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpjdXJyZW50LXRpbWUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBNZWRpYUNvbnRyb2xsZXI6Y3VycmVudC10aW1l
IiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFVU0VELAor
ICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJwYXVzZWQiLAorICAg
ICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpwYXVzZWQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnYm9vbGVhbiBNZWRpYUNvbnRyb2xsZXI6cGF1c2VkIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
UExBWUVELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBsYXll
ZCIsCisgICAgICAgICAgICAiTWVkaWFDb250cm9sbGVyOnBsYXllZCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTVRpbWVSYW5nZXMqIE1lZGlhQ29udHJvbGxlcjpwbGF5ZWQiLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VTLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUExBWUJBQ0tfU1RBVEUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicGxheWJhY2stc3Rh
dGUiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpwbGF5YmFjay1zdGF0ZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBNZWRpYUNvbnRyb2xsZXI6cGxheWJhY2stc3RhdGUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX1BMQVlCQUNLX1JBVEUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAiZGVmYXVsdC1wbGF5YmFjay1yYXRlIiwKKyAg
ICAgICAgICAgICJNZWRpYUNvbnRyb2xsZXI6ZGVmYXVsdC1wbGF5YmFjay1yYXRlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgTWVkaWFDb250cm9sbGVyOmRlZmF1bHQtcGxheWJh
Y2stcmF0ZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BM
QVlCQUNLX1JBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAi
cGxheWJhY2stcmF0ZSIsCisgICAgICAgICAgICAiTWVkaWFDb250cm9sbGVyOnBsYXliYWNrLXJh
dGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBNZWRpYUNvbnRyb2xsZXI6cGxh
eWJhY2stcmF0ZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1ZPTFVNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJ2b2x1
bWUiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjp2b2x1bWUiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2RvdWJsZSBNZWRpYUNvbnRyb2xsZXI6dm9sdW1lIiwKKyAgICAgICAgICAg
IC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTVVURUQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKAorICAgICAgICAgICAgIm11dGVkIiwKKyAgICAgICAgICAgICJNZWRpYUNv
bnRyb2xsZXI6bXV0ZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gTWVkaWFD
b250cm9sbGVyOm11dGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFf
Y29udHJvbGxlcl9pbml0KFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJ
QV9DT05UUk9MTEVSX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21fbWVkaWFf
Y29udHJvbGxlcl9wbGF5KFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+cGxheSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVO
QUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfcGF1
c2UoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZikpOworICAgIFdlYkNv
cmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5wYXVzZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykg
Ki8KK30KKwordm9pZCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfdW5wYXVzZShXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSk7CisgICAgV2ViQ29yZTo6TWVkaWFD
b250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnVucGF1c2Uo
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisK
K1dlYktpdERPTVRpbWVSYW5nZXMqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfYnVm
ZmVyZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5idWZmZXJlZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCitXZWJLaXRET01UaW1lUmFuZ2VzKiB3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfZ2V0X3NlZWthYmxlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciog
c2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVE
SUFfQ09OVFJPTExFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2Vz
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2Vla2FibGUoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8i
KQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2RvdWJs
ZSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2R1cmF0aW9uKFdlYktpdERPTU1lZGlh
Q29udHJvbGxlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFD
b250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0
ID0gaXRlbS0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dl
dF9jdXJyZW50X3RpbWUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5jdXJyZW50VGltZSgpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3
ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X2N1cnJlbnRfdGltZShXZWJLaXRET01NZWRp
YUNvbnRyb2xsZXIqIHNlbGYsIGdkb3VibGUgdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSk7CisgICAgV2ViQ29y
ZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldEN1cnJlbnRUaW1lKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wYXVzZWQoV2ViS2l0RE9NTWVkaWFDb250
cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6TWVkaWFD
b250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPnBhdXNlZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRl
byIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKK1dlYktpdERPTVRpbWVSYW5nZXMqIHdlYmtpdF9kb21fbWVkaWFf
Y29udHJvbGxlcl9nZXRfcGxheWVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJP
TExFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGxheWVkKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXliYWNrX3N0YXRlKFdlYktpdERPTU1lZGlhQ29udHJv
bGxlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9s
bGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnBsYXliYWNrU3RhdGUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUo
VklERU8pICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9k
ZWZhdWx0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9M
TEVSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5kZWZhdWx0UGxheWJh
Y2tSYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAq
LworfQorCit2b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfZGVmYXVsdF9wbGF5
YmFja19yYXRlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZiwgZ2RvdWJsZSB2YWx1ZSkK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9M
TEVSKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0RGVmYXVsdFBsYXliYWNrUmF0ZSh2YWx1ZSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBF
TkFCTEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVy
X2dldF9wbGF5YmFja19yYXRlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExF
UihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+cGxheWJhY2tSYXRlKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2
b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfcGxheWJhY2tfcmF0ZShXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXIqIHNlbGYsIGdkb3VibGUgdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJ
REVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSk7CisgICAg
V2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldFBsYXliYWNrUmF0ZSh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dk
b3VibGUgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF92b2x1bWUoV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRp
YUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1
bHQgPSBpdGVtLT52b2x1bWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF92
b2x1bWUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19N
RURJQV9DT05UUk9MTEVSKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAh
KmVycm9yKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+
c2V0Vm9sdW1lKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9n
ZXRfbXV0ZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm11dGVkKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X211dGVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciog
c2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250
cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldE11dGVkKHZh
bHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2Vu
ZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWM0OTE3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFDb250cm9s
bGVyLmgKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9NRURJQV9DT05UUk9M
TEVSICAgICAgICAgICAgKHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xMRVIob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX0NPTlRS
T0xMRVIsIFdlYktpdERPTU1lZGlhQ29udHJvbGxlcikpCisjZGVmaW5lIFdFQktJVF9ET01fTUVE
SUFfQ09OVFJPTExFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfQ09OVFJPTExFUiwgV2ViS2l0RE9NTWVkaWFD
b250cm9sbGVyQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfTUVESUFfQ09OVFJPTExFUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfQ09O
VFJPTExFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfTUVESUFfQ09OVFJPTExFUikpCisjZGVmaW5lIFdFQktJVF9ET01fTUVE
SUFfQ09OVFJPTExFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfQ09OVFJPTExFUiwgV2ViS2l0RE9NTWVkaWFD
b250cm9sbGVyQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTU1lZGlhQ29udHJvbGxlciB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVu
dF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xs
ZXJfcGxheToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9tZWRp
YV9jb250cm9sbGVyX3BsYXkoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfcGF1c2U6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NTWVkaWFDb250cm9sbGVyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9wYXVzZShXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29u
dHJvbGxlcl91bnBhdXNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfdW5wYXVzZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfYnVmZmVyZWQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRpbWVSYW5nZXMqCit3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2J1ZmZlcmVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxl
ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9zZWVr
YWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGltZVJhbmdlcyoKK3dl
YmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfc2Vla2FibGUoV2ViS2l0RE9NTWVkaWFDb250
cm9sbGVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0
X2R1cmF0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAq
IFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9kdXJhdGlv
bihXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bWVkaWFfY29udHJvbGxlcl9nZXRfY3VycmVudF90aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERP
TU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9tZWRp
YV9jb250cm9sbGVyX2dldF9jdXJyZW50X3RpbWUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X2N1cnJlbnRf
dGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqIEB2YWx1ZTog
QSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X2N1cnJlbnRfdGltZShXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXIqIHNlbGYsIGdkb3VibGUgdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGF1c2VkOgorICogQHNlbGY6IEEgI1dlYktpdERP
TU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX21l
ZGlhX2NvbnRyb2xsZXJfZ2V0X3BhdXNlZChXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGxheWVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVGltZVJhbmdlcworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UaW1lUmFuZ2VzKgord2Via2l0X2RvbV9t
ZWRpYV9jb250cm9sbGVyX2dldF9wbGF5ZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXliYWNrX3N0
YXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wbGF5YmFja19zdGF0ZShX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVk
aWFfY29udHJvbGxlcl9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rv
bV9tZWRpYV9jb250cm9sbGVyX2dldF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xs
ZXJfc2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRp
YUNvbnRyb2xsZXIKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJf
c2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYs
IGdkb3VibGUgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9n
ZXRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIK
KyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRf
cGxheWJhY2tfcmF0ZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfc2V0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NTWVkaWFDb250cm9s
bGVyKiBzZWxmLCBnZG91YmxlIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2Nv
bnRyb2xsZXJfZ2V0X3ZvbHVtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXIKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9n
ZXRfdm9sdW1lKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF92b2x1bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyCisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X3ZvbHVtZShXZWJLaXRET01NZWRpYUNvbnRy
b2xsZXIqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X211dGVkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfZ2V0X211dGVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9tdXRlZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9tdXRlZChXZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXIqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlhQ29u
dHJvbGxlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmYwZGEyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhQ29udHJvbGxl
clByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvTWVk
aWFDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU1lZGlhQ29udHJv
bGxlci5oPgorI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXIqIHdyYXBNZWRpYUNvbnRyb2xsZXIoV2ViQ29yZTo6TWVkaWFDb250
cm9sbGVyKik7CitXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIGtpdChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xsZXIqKTsKK1dlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogY29yZShXZWJLaXRET01NZWRp
YUNvbnRyb2xsZXIqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxF
KFZJREVPKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNl
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwNzc4YwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTU1lZGlhRGV2aWNlcy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBv
cnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU1lZGlhRGV2aWNl
c1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3Ry
YWludHNQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfREVWSUNFU19HRVRf
UFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01f
VFlQRV9NRURJQV9ERVZJQ0VTLCBXZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZSB7CisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBSZWZQdHI8V2ViQ29yZTo6TWVkaWFEZXZpY2VzPiBjb3JlT2JqZWN0
OworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCit9IFdlYktpdERPTU1lZGlhRGV2aWNl
c1ByaXZhdGU7CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiBraXQoV2ViQ29yZTo6TWVkaWFEZXZpY2VzKiBv
YmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2lu
dGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJ
VF9ET01fTUVESUFfREVWSUNFUyhyZXQpOworCisgICAgcmV0dXJuIHdyYXBNZWRpYURldmljZXMo
b2JqKTsKK30KKworV2ViQ29yZTo6TWVkaWFEZXZpY2VzKiBjb3JlKFdlYktpdERPTU1lZGlhRGV2
aWNlcyogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6Ok1lZGlhRGV2aWNlcyo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Cit9CisKK1dlYktpdERPTU1lZGlhRGV2aWNlcyogd3JhcE1lZGlhRGV2aWNlcyhXZWJD
b3JlOjpNZWRpYURldmljZXMqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX01FRElBX0RFVklDRVMoZ19vYmplY3RfbmV3KFdFQktJ
VF9ET01fVFlQRV9NRURJQV9ERVZJQ0VTLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01NZWRpYURldmljZXMsIHdlYmtp
dF9kb21fbWVkaWFfZGV2aWNlcywgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJ
QV9ERVZJQ0VTX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSk7CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBwcml2LT5+V2ViS2l0RE9N
TWVkaWFEZXZpY2VzUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVk
aWFfZGV2aWNlc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMg
R09iamVjdCogd2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUs
IGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBj
b25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9kb21fbWVkaWFfZGV2aWNlc19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0
eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fTUVESUFfREVWSUNFU19HRVRfUFJJVkFURShvYmplY3QpOworICAg
IHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYURldmljZXMqPihX
RUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fbWVkaWFfZGV2aWNlc19jbGFzc19pbml0KFdlYktpdERPTU1lZGlhRGV2
aWNlc0NsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01NZWRpYURldmljZXNQcml2YXRl
KSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbWVkaWFfZGV2
aWNlc19jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rv
bV9tZWRpYV9kZXZpY2VzX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21l
ZGlhX2RldmljZXNfaW5pdChXZWJLaXRET01NZWRpYURldmljZXMqIHJlcXVlc3QpCit7CisgICAg
V2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVESUFfREVW
SUNFU19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU1lZGlh
RGV2aWNlc1ByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0
cmFpbnRzKiB3ZWJraXRfZG9tX21lZGlhX2RldmljZXNfZ2V0X3N1cHBvcnRlZF9jb25zdHJhaW50
cyhXZWJLaXRET01NZWRpYURldmljZXMqIHNlbGYpCit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9ERVZJQ0VTKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpNZWRpYURldmljZXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cz4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldFN1cHBvcnRlZENvbnN0cmFpbnRzKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1l
ZGlhIFN0cmVhbSIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NUUkVB
TSkgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNl
cy5oCnNpbWlsYXJpdHkgaW5kZXggNTAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU1lZGlhRGV2aWNlcy5oCmluZGV4IDhjNzY2NjguLmU5MWM1ODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RFdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzLmgKQEAgLTE4LDggKzE4
LDggQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdl
YktpdERPTVRlc3RFdmVudFRhcmdldF9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RFdmVudFRhcmdl
dF9oCisjaWZuZGVmIFdlYktpdERPTU1lZGlhRGV2aWNlc19oCisjZGVmaW5lIFdlYktpdERPTU1l
ZGlhRGV2aWNlc19oCiAKICNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKIApAQCAt
MjksMzcgKzI5LDM2IEBACiAKIEdfQkVHSU5fREVDTFMKIAotI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9FVkVOVF9UQVJHRVQgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3Rh
cmdldF9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9URVNUX0VWRU5UX1RBUkdFVCwgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9U
QVJHRVQsIFdlYktpdERPTVRlc3RFdmVudFRhcmdldENsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9N
X0lTX1RFU1RfRVZFTlRfVEFSR0VUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0VWRU5UX1RBUkdFVCkpCi0jZGVmaW5l
IFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9UQVJHRVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRfVEFSR0VU
KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9F
VkVOVF9UQVJHRVQsIFdlYktpdERPTVRlc3RFdmVudFRhcmdldENsYXNzKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX01FRElBX0RFVklDRVMgICAgICAgICAgICAod2Via2l0X2RvbV9tZWRpYV9k
ZXZpY2VzX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfREVWSUNFUyhvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfTUVESUFfREVWSUNFUywgV2ViS2l0RE9NTWVkaWFEZXZpY2VzKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9NRURJQV9ERVZJQ0VTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9NRURJQV9ERVZJQ0VTLCBXZWJLaXRET01N
ZWRpYURldmljZXNDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9ERVZJQ0VTKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9NRURJQV9ERVZJQ0VTKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9ERVZJQ0VT
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9NRURJQV9ERVZJQ0VTKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9ERVZJQ0VT
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9NRURJQV9ERVZJQ0VTLCBXZWJLaXRET01NZWRpYURldmljZXNDbGFzcykpCiAK
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0IHsKK3N0cnVjdCBfV2ViS2l0RE9NTWVk
aWFEZXZpY2VzIHsKICAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwogfTsKIAot
c3RydWN0IF9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRDbGFzcyB7CitzdHJ1Y3QgX1dlYktpdERP
TU1lZGlhRGV2aWNlc0NsYXNzIHsKICAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0
X2dldF90eXBlKHZvaWQpOword2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX2dldF90eXBlKHZvaWQp
OwogCiAvKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfaXRlbToKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQKLSAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiB3
ZWJraXRfZG9tX21lZGlhX2RldmljZXNfZ2V0X3N1cHBvcnRlZF9jb25zdHJhaW50czoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01NZWRpYURldmljZXMKICAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzCiAgKgogICogU3RhYmlsaXR5
OiBVbnN0YWJsZQogKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCi13ZWJraXRfZG9tX3Rl
c3RfZXZlbnRfdGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBzZWxmLCBndWxv
bmcgaW5kZXgpOworV0VCS0lUX0FQSSBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3Ry
YWludHMqCit3ZWJraXRfZG9tX21lZGlhX2RldmljZXNfZ2V0X3N1cHBvcnRlZF9jb25zdHJhaW50
cyhXZWJLaXRET01NZWRpYURldmljZXMqIHNlbGYpOwogCiBHX0VORF9ERUNMUwogCiAjZW5kaWYg
LyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0X2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYURldmljZXNfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNl
c1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmMxNjExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlLmgKQEAgLTAsMCArMSwz
NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01N
ZWRpYURldmljZXNQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhRGV2aWNlcy5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01NZWRpYURldmljZXMuaD4KKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU1lZGlhRGV2aWNlcyogd3JhcE1lZGlhRGV2
aWNlcyhXZWJDb3JlOjpNZWRpYURldmljZXMqKTsKK1dlYktpdERPTU1lZGlhRGV2aWNlcyoga2l0
KFdlYkNvcmU6Ok1lZGlhRGV2aWNlcyopOworV2ViQ29yZTo6TWVkaWFEZXZpY2VzKiBjb3JlKFdl
YktpdERPTU1lZGlhRGV2aWNlcyopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
KiBFTkFCTEUoTUVESUFfU1RSRUFNKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFEZXZp
Y2VzUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3IuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01N
ZWRpYUVycm9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzBkYjc5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUVycm9yLmNwcApAQCAtMCwwICsxLDE1NiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTU1lZGlhRXJyb3IuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYUVy
cm9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0VSUk9SX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X01FRElBX0VSUk9SLCBXZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
UmVmUHRyPFdlYkNvcmU6Ok1lZGlhRXJyb3I+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxF
KFZJREVPKQorfSBXZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZTsKKworI2lmIEVOQUJMRShWSURF
TykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU1lZGlhRXJyb3IqIGtpdChXZWJD
b3JlOjpNZWRpYUVycm9yKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fTUVESUFfRVJST1IocmV0KTsKKworICAgIHJldHVybiB3
cmFwTWVkaWFFcnJvcihvYmopOworfQorCitXZWJDb3JlOjpNZWRpYUVycm9yKiBjb3JlKFdlYktp
dERPTU1lZGlhRXJyb3IqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpNZWRpYUVycm9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NTWVkaWFFcnJvciogd3JhcE1lZGlhRXJyb3Io
V2ViQ29yZTo6TWVkaWFFcnJvciogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fTUVESUFfRVJST1IoZ19vYmplY3RfbmV3KFdFQktJ
VF9ET01fVFlQRV9NRURJQV9FUlJPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURF
TykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01NZWRpYUVycm9yLCB3ZWJraXRfZG9tX21lZGlh
X2Vycm9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9DT0RFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9lcnJvcl9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NTWVkaWFFcnJvclByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0VSUk9SX0dFVF9QUklWQVRFKG9iamVjdCk7Cisj
aWYgRU5BQkxFKFZJREVPKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisgICAgcHJpdi0+
fldlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV9tZWRpYV9lcnJvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTU1lZGlhRXJyb3IqIHNlbGYgPSBXRUJLSVRfRE9NX01FRElBX0VS
Uk9SKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
Q09ERToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9l
cnJvcl9nZXRfY29kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Vi
a2l0X2RvbV9tZWRpYV9lcnJvcl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVy
dGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X21lZGlhX2Vycm9yX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9F
UlJPUl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpNZWRpYUVycm9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorICAgIHJldHVybiBv
YmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfZXJyb3JfY2xhc3NfaW5p
dChXZWJLaXRET01NZWRpYUVycm9yQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTU1l
ZGlhRXJyb3JQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtp
dF9kb21fbWVkaWFfZXJyb3JfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21fbWVkaWFfZXJyb3JfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAg
ICAgICJjb2RlIiwKKyAgICAgICAgICAgICJNZWRpYUVycm9yOmNvZGUiLAorICAgICAgICAgICAg
InJlYWQtb25seSBndXNob3J0IE1lZGlhRXJyb3I6Y29kZSIsCisgICAgICAgICAgICAwLCBHX01B
WFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2luaXQoV2ViS2l0RE9NTWVkaWFFcnJv
ciogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fTUVESUFfRVJST1JfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2
KSBXZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZSgpOworfQorCitndXNob3J0IHdlYmtpdF9kb21f
bWVkaWFfZXJyb3JfZ2V0X2NvZGUoV2ViS2l0RE9NTWVkaWFFcnJvciogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfRVJST1Ioc2VsZiks
IDApOworICAgIFdlYkNvcmU6Ok1lZGlhRXJyb3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVtLT5jb2RlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VzaG9ydD4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlh
RXJyb3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTWVkaWFFcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmVlNmU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3IuaApAQCAt
MCwwICsxLDg0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTU1lZGlhRXJyb3JfaAorI2RlZmluZSBXZWJLaXRET01NZWRpYUVycm9yX2gKKworI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9NRURJQV9FUlJPUiAgICAgICAgICAgICh3ZWJraXRfZG9t
X21lZGlhX2Vycm9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfRVJST1Io
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX01FRElBX0VSUk9SLCBXZWJLaXRET01NZWRpYUVycm9yKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9NRURJQV9FUlJPUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfRVJST1IsIFdlYktpdERPTU1lZGlh
RXJyb3JDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9FUlJPUihvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTUVE
SUFfRVJST1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX0VSUk9SX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9NRURJ
QV9FUlJPUikpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfRVJST1JfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX01FRElB
X0VSUk9SLCBXZWJLaXRET01NZWRpYUVycm9yQ2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01f
TUVESUFfRVJST1JfTUVESUFfRVJSX0FCT1JURUQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9N
RURJQV9FUlJPUl9NRURJQV9FUlJfQUJPUlRFRCAxCisKKy8qKgorICogV0VCS0lUX0RPTV9NRURJ
QV9FUlJPUl9NRURJQV9FUlJfTkVUV09SSzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX01FRElB
X0VSUk9SX01FRElBX0VSUl9ORVRXT1JLIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX01FRElBX0VS
Uk9SX01FRElBX0VSUl9ERUNPREU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9FUlJP
Ul9NRURJQV9FUlJfREVDT0RFIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX01FRElBX0VSUk9SX01F
RElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX01FRElB
X0VSUk9SX01FRElBX0VSUl9TUkNfTk9UX1NVUFBPUlRFRCA0CisKK3N0cnVjdCBfV2ViS2l0RE9N
TWVkaWFFcnJvciB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFFcnJvckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX21l
ZGlhX2Vycm9yX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfZXJy
b3JfZ2V0X2NvZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFFcnJvcgorICoKKyAqIFJl
dHVybnM6IEEgI2d1c2hvcnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ3VzaG9ydAord2Via2l0X2RvbV9tZWRpYV9lcnJvcl9nZXRfY29kZShXZWJLaXRET01N
ZWRpYUVycm9yKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlhRXJyb3JfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUVycm9yUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwY2JlMGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZWRpYUVy
cm9yUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvTWVkaWFFcnJvci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01NZWRpYUVycm9yLmg+CisjaWYgRU5BQkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTU1lZGlhRXJyb3IqIHdyYXBNZWRpYUVycm9yKFdlYkNvcmU6Ok1lZGlhRXJyb3Iq
KTsKK1dlYktpdERPTU1lZGlhRXJyb3IqIGtpdChXZWJDb3JlOjpNZWRpYUVycm9yKik7CitXZWJD
b3JlOjpNZWRpYUVycm9yKiBjb3JlKFdlYktpdERPTU1lZGlhRXJyb3IqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworCisjZW5kaWYgLyogV2Vi
S2l0RE9NTWVkaWFFcnJvclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3Qu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01NZWRpYUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjgzODk2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdC5jcHAKQEAgLTAs
MCArMSwyMzkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYUxpc3QuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRE
T01NZWRpYUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfTElTVF9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9NRURJQV9MSVNULCBXZWJLaXRET01NZWRpYUxpc3RQcml2YXRlKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6
Ok1lZGlhTGlzdD4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU1lZGlhTGlzdCoga2l0KFdlYkNvcmU6Ok1l
ZGlhTGlzdCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX01FRElBX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwTWVkaWFM
aXN0KG9iaik7Cit9CisKK1dlYkNvcmU6Ok1lZGlhTGlzdCogY29yZShXZWJLaXRET01NZWRpYUxp
c3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpNZWRpYUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01NZWRpYUxpc3QqIHdyYXBNZWRpYUxpc3QoV2ViQ29yZTo6TWVkaWFM
aXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9NRURJQV9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTUVESUFf
TElTVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01NZWRpYUxpc3QsIHdlYmtp
dF9kb21fbWVkaWFfbGlzdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfTUVESUFfVEVYVCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVE
SUFfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNo
ZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERP
TU1lZGlhTGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX21lZGlh
X2xpc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9tZWRpYV9saXN0X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTU1lZGlhTGlzdCogc2VsZiA9IFdFQktJVF9ET01fTUVESUFfTElTVChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX01FRElBX1RF
WFQ6CisgICAgICAgIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9zZXRfbWVkaWFfdGV4dChzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYgPSBXRUJLSVRfRE9NX01FRElBX0xJU1Qob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9NRURJQV9U
RVhUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlh
X2xpc3RfZ2V0X21lZGlhX3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9t
ZWRpYV9saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0
UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX21lZGlhX2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERP
TU1lZGlhTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0xJU1RfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
TWVkaWFMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVj
dCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21l
ZGlhX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01NZWRpYUxpc3RDbGFzcyogcmVxdWVzdENsYXNz
KQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVx
dWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBz
aXplb2YoV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29u
c3RydWN0b3IgPSB3ZWJraXRfZG9tX21lZGlhX2xpc3RfY29uc3RydWN0b3I7CisgICAgZ29iamVj
dENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbWVkaWFfbGlzdF9maW5hbGl6ZTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbWVkaWFfbGlzdF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX21lZGlh
X2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FRElBX1RFWFQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWVkaWEtdGV4dCIsCisgICAg
ICAgICAgICAiTWVkaWFMaXN0Om1lZGlhLXRleHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIE1lZGlhTGlzdDptZWRpYS10ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAg
ICAgICAgICAiTWVkaWFMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9u
ZyBNZWRpYUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX21lZGlhX2xpc3RfaW5pdChXZWJLaXRET01NZWRpYUxpc3QqIHJlcXVlc3QpCit7Cisg
ICAgV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVESUFfTElT
VF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU1lZGlhTGlz
dFByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9pdGVtKFdlYktp
dERPTU1lZGlhTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX01FRElBX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlhTGlzdCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX21lZGlhX2xpc3RfZGVsZXRlX21lZGl1bShXZWJLaXRET01NZWRpYUxpc3Qq
IHNlbGYsIGNvbnN0IGdjaGFyKiBvbGRNZWRpdW0sIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfTUVESUFfTElTVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChv
bGRNZWRpdW0pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAg
IFdlYkNvcmU6Ok1lZGlhTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRPbGRNZWRpdW0gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgob2xkTWVk
aXVtKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5kZWxl
dGVNZWRpdW0oY29udmVydGVkT2xkTWVkaXVtLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9k
b21fbWVkaWFfbGlzdF9hcHBlbmRfbWVkaXVtKFdlYktpdERPTU1lZGlhTGlzdCogc2VsZiwgY29u
c3QgZ2NoYXIqIG5ld01lZGl1bSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19NRURJQV9MSVNUKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5ld01lZGl1bSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6
TWVkaWFMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5ld01lZGl1bSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuZXdNZWRpdW0pOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmFwcGVuZE1lZGl1bShj
b252ZXJ0ZWROZXdNZWRpdW0sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX21lZGlh
X2xpc3RfZ2V0X21lZGlhX3RleHQoV2ViS2l0RE9NTWVkaWFMaXN0KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1l
ZGlhTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5tZWRpYVRleHQoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX21lZGlhX2xpc3Rfc2V0X21lZGlhX3RleHQoV2ViS2l0
RE9NTWVkaWFMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfTElTVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7
CisgICAgV2ViQ29yZTo6TWVkaWFMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRNZWRp
YVRleHQoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX21l
ZGlhX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTUVESUFfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVk
aWFMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBp
dGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TU1lZGlhTGlzdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43ZTI5NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3QuaApA
QCAtMCwwICsxLDExMiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJ
VCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NTWVkaWFMaXN0X2gKKyNkZWZp
bmUgV2ViS2l0RE9NTWVkaWFMaXN0X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfTUVESUFfTElTVCAgICAgICAgICAgICh3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9MSVNUKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9MSVNU
LCBXZWJLaXRET01NZWRpYUxpc3QpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0xJU1RfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX01FRElBX0xJU1QsIFdlYktpdERPTU1lZGlhTGlzdENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX01FRElBX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX0xJU1QpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX01FRElBX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9N
X01FRElBX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0xJU1QsIFdlYktpdERPTU1lZGlhTGlzdENsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01NZWRpYUxpc3QgeworICAgIFdlYktpdERPTU9iamVjdCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTU1lZGlhTGlzdENsYXNzIHsK
KyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9tZWRpYV9saXN0X2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFM
aXN0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX21lZGlhX2xpc3RfaXRlbShXZWJLaXRET01N
ZWRpYUxpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRp
YV9saXN0X2RlbGV0ZV9tZWRpdW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFMaXN0Cisg
KiBAb2xkTWVkaXVtOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFfbGlzdF9kZWxldGVfbWVkaXVtKFdlYktpdERP
TU1lZGlhTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIG9sZE1lZGl1bSwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9hcHBlbmRfbWVkaXVtOgorICogQHNl
bGY6IEEgI1dlYktpdERPTU1lZGlhTGlzdAorICogQG5ld01lZGl1bTogQSAjZ2NoYXIKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX21lZGlh
X2xpc3RfYXBwZW5kX21lZGl1bShXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuZXdNZWRpdW0sIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlh
X2xpc3RfZ2V0X21lZGlhX3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFMaXN0Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fbWVkaWFfbGlzdF9nZXRfbWVkaWFfdGV4dChXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9zZXRfbWVkaWFfdGV4dDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01NZWRpYUxpc3QKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjog
I0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX21lZGlhX2xpc3Rf
c2V0X21lZGlhX3RleHQoV2ViS2l0RE9NTWVkaWFMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0
X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUxpc3QKKyAqCisgKiBSZXR1cm5z
OiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fbWVkaWFfbGlz
dF9nZXRfbGVuZ3RoKFdlYktpdERPTU1lZGlhTGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYUxpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YUxpc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42NjIzYTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YUxpc3RQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZWRpYUxpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NTWVkaWFMaXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhTGlzdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01NZWRpYUxpc3QuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01NZWRpYUxpc3QqIHdyYXBNZWRpYUxpc3QoV2ViQ29yZTo6TWVk
aWFMaXN0Kik7CitXZWJLaXRET01NZWRpYUxpc3QqIGtpdChXZWJDb3JlOjpNZWRpYUxpc3QqKTsK
K1dlYkNvcmU6Ok1lZGlhTGlzdCogY29yZShXZWJLaXRET01NZWRpYUxpc3QqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFRdWVyeUxp
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODUyYzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0LmNwcApAQCAtMCwwICsxLDE2NyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU1lZGlhUXVlcnlMaXN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFR
dWVyeUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfUVVFUllfTElT
VF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJ
VF9ET01fVFlQRV9NRURJQV9RVUVSWV9MSVNULCBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZh
dGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUgewor
ICAgIFJlZlB0cjxXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdD4gY29yZU9iamVjdDsKK30gV2ViS2l0
RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NTWVkaWFRdWVyeUxpc3QqIGtpdChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdCogb2JqKQorewor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX01F
RElBX1FVRVJZX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwTWVkaWFRdWVyeUxpc3Qob2Jq
KTsKK30KKworV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqIGNvcmUoV2ViS2l0RE9NTWVkaWFRdWVy
eUxpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpNZWRpYVF1ZXJ5TGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTU1lZGlhUXVlcnlMaXN0KiB3cmFwTWVkaWFRdWVyeUxp
c3QoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX01FRElBX1FVRVJZX0xJU1QoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9NRURJQV9RVUVSWV9MSVNULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RF
RklORV9UWVBFKFdlYktpdERPTU1lZGlhUXVlcnlMaXN0LCB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5
X2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX01FRElBLAorICAgIFBST1BfTUFUQ0hFUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fbWVkaWFfcXVlcnlfbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9R
VUVSWV9MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0
RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV9tZWRpYV9xdWVyeV9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCogc2VsZiA9IFdFQktJVF9E
T01fTUVESUFfUVVFUllfTElTVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX01FRElBOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X21lZGlhKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX01BVENIRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfbWF0Y2hlcyhzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9s
aXN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdP
YmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlz
dF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9RVUVSWV9MSVNUX0dFVF9QUklWQVRFKG9i
amVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlh
UXVlcnlMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVj
dCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21l
ZGlhX3F1ZXJ5X2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdENsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUpKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2Nv
bnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX21lZGlh
X3F1ZXJ5X2xpc3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX01FRElBLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1l
ZGlhIiwKKyAgICAgICAgICAgICJNZWRpYVF1ZXJ5TGlzdDptZWRpYSIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdjaGFyKiBNZWRpYVF1ZXJ5TGlzdDptZWRpYSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X01BVENIRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIm1h
dGNoZXMiLAorICAgICAgICAgICAgIk1lZGlhUXVlcnlMaXN0Om1hdGNoZXMiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnYm9vbGVhbiBNZWRpYVF1ZXJ5TGlzdDptYXRjaGVzIiwKKyAgICAgICAg
ICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2luaXQoV2ViS2l0RE9NTWVk
aWFRdWVyeUxpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9RVUVSWV9MSVNUX0dFVF9QUklWQVRFKHJlcXVl
c3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlKCk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X21lZGlhKFdlYktpdERP
TU1lZGlhUXVlcnlMaXN0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElB
X1FVRVJZX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlhUXVlcnlMaXN0KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPm1lZGlhKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfbWF0Y2hlcyhXZWJLaXRET01NZWRpYVF1
ZXJ5TGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9RVUVSWV9M
SVNUKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWF0Y2hlcygp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFRdWVyeUxp
c3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43NDFiNTM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdC5o
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RfaAorI2RlZmluZSBXZWJLaXRET01NZWRpYVF1ZXJ5
TGlzdF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTUVESUFfUVVFUllfTElTVCAgICAg
ICAgICAgICh3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9NRURJQV9RVUVSWV9MSVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9RVUVSWV9MSVNULCBX
ZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfUVVFUllf
TElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfTUVESUFfUVVFUllfTElTVCwgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RD
bGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9RVUVSWV9MSVNUKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJ
QV9RVUVSWV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9RVUVSWV9MSVNUX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9NRURJQV9RVUVSWV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9RVUVSWV9M
SVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9NRURJQV9RVUVSWV9MSVNULCBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdENs
YXNzKSkKKworc3RydWN0IF9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCB7CisgICAgV2ViS2l0RE9N
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFRdWVy
eUxpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfbWVkaWE6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfbWVkaWEoV2ViS2l0RE9NTWVkaWFR
dWVyeUxpc3QqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9n
ZXRfbWF0Y2hlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdAorICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X21hdGNo
ZXMoV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
TWVkaWFRdWVyeUxpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODU1MzY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFRdWVy
eUxpc3RQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9N
ZWRpYVF1ZXJ5TGlzdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01NZWRpYVF1ZXJ5
TGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU1lZGlhUXVlcnlMaXN0KiB3
cmFwTWVkaWFRdWVyeUxpc3QoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqKTsKK1dlYktpdERPTU1l
ZGlhUXVlcnlMaXN0KiBraXQoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqKTsKK1dlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0KiBjb3JlKFdlYktpdERPTU1lZGlhUXVlcnlMaXN0Kik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkY2FhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVk
aWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmNwcApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktp
dERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFNfR0VUX1BSSVZBVEUo
b2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfTUVE
SUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTLCBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9y
dGVkQ29uc3RyYWludHNQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFU
cmFja1N1cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZSB7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBSZWZQdHI8V2ViQ29yZTo6TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzPiBj
b3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCit9IFdlYktpdERPTU1l
ZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGU7CisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBv
cnRlZENvbnN0cmFpbnRzKiBraXQoV2ViQ29yZTo6TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFp
bnRzKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTKHJldCk7CisKKyAg
ICByZXR1cm4gd3JhcE1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyhvYmopOworfQorCitX
ZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMqIGNvcmUoV2ViS2l0RE9NTWVk
aWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRz
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiB3cmFwTWVkaWFUcmFja1N1cHBv
cnRlZENvbnN0cmFpbnRzKFdlYkNvcmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTLCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworR19ERUZJTkVfVFlQRShXZWJLaXRE
T01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMsIHdlYmtpdF9kb21fbWVkaWFfdHJhY2tf
c3VwcG9ydGVkX2NvbnN0cmFpbnRzLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50c19maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENv
bnN0cmFpbnRzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVESUFfVFJBQ0tfU1VQUE9SVEVE
X0NPTlNUUkFJTlRTX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBwcml2LT5+V2ViS2l0
RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fbWVkaWFfdHJhY2tfc3VwcG9ydGVkX2NvbnN0cmFpbnRzX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50c19jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50c19wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNv
bnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgV2ViS2l0
RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTX0dFVF9QUklWQVRFKG9iamVjdCk7
CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhVHJhY2tT
dXBwb3J0ZWRDb25zdHJhaW50cyo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmpl
Y3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgcmV0dXJu
IG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV90cmFja19zdXBwb3J0
ZWRfY29uc3RyYWludHNfY2xhc3NfaW5pdChXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29u
c3RyYWludHNDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBv
cnRlZENvbnN0cmFpbnRzUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3Ig
PSB3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50c19jb25zdHJ1Y3Rv
cjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9tZWRpYV90cmFja19z
dXBwb3J0ZWRfY29uc3RyYWludHNfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fbWVkaWFfdHJhY2tfc3VwcG9ydGVkX2NvbnN0cmFpbnRzX2luaXQoV2ViS2l0RE9NTWVkaWFU
cmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTU1lZGlh
VHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElB
X1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UU19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBu
ZXcgKHByaXYpIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUo
KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzMDQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVk
aWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9y
dGVkQ29uc3RyYWludHNfaAorI2RlZmluZSBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29u
c3RyYWludHNfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX01FRElBX1RSQUNLX1NVUFBP
UlRFRF9DT05TVFJBSU5UUyAgICAgICAgICAgICh3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBv
cnRlZF9jb25zdHJhaW50c19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX1RS
QUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTUVESUFfVFJBQ0tfU1VQUE9SVEVE
X0NPTlNUUkFJTlRTLCBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMpKQor
I2RlZmluZSBXRUJLSVRfRE9NX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UU19DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTLCBXZWJLaXRET01NZWRpYVRy
YWNrU3VwcG9ydGVkQ29uc3RyYWludHNDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJ
QV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX1RSQUNLX1NVUFBPUlRF
RF9DT05TVFJBSU5UUykpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfVFJBQ0tfU1VQUE9S
VEVEX0NPTlNUUkFJTlRTX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFMp
KQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UU19H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
RE9NX1RZUEVfTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTLCBXZWJLaXRET01NZWRp
YVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NTWVk
aWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29u
c3RyYWludHNDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9tZWRpYV90cmFja19zdXBwb3J0ZWRf
Y29uc3RyYWludHNfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYVRy
YWNrU3VwcG9ydGVkQ29uc3RyYWludHNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNr
U3VwcG9ydGVkQ29uc3RyYWludHNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRD
b25zdHJhaW50c1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
NDE2ZWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3Ry
YWludHNQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRz
UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJh
aW50cy5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMuaD4KKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyogd3JhcE1lZGlh
VHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyhXZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29u
c3RyYWludHMqKTsKK1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyoga2l0
KFdlYkNvcmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyopOworV2ViQ29yZTo6TWVk
aWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiBjb3JlKFdlYktpdERPTU1lZGlhVHJhY2tTdXBw
b3J0ZWRDb25zdHJhaW50cyopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBF
TkFCTEUoTUVESUFfU1RSRUFNKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFUcmFja1N1
cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQ
b3J0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTWVzc2FnZVBvcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjI5ZTA3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0LmNw
cApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTU1lc3NhZ2VQb3J0LmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktp
dERPTU1lc3NhZ2VQb3J0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX01FU1NBR0Vf
UE9SVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9NRVNTQUdFX1BPUlQsIFdlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZSB7CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01NZXNzYWdl
UG9ydFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01NZXNzYWdlUG9y
dCoga2l0KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpn
ZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTUVTU0FHRV9QT1JUKHJldCk7CisK
KyAgICByZXR1cm4gd3JhcE1lc3NhZ2VQb3J0KG9iaik7Cit9CisKK1dlYkNvcmU6Ok1lc3NhZ2VQ
b3J0KiBjb3JlKFdlYktpdERPTU1lc3NhZ2VQb3J0KiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVzc2FnZVBvcnQqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01NZXNzYWdlUG9y
dCogd3JhcE1lc3NhZ2VQb3J0KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0KiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9NRVNTQUdFX1BP
UlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9NRVNTQUdFX1BPUlQsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6TWVzc2FnZVBvcnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpNZXNzYWdlUG9ydCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlw
dGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6Ok1lc3NhZ2VQb3J0KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVzc2FnZVBvcnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6TWVzc2FnZVBvcnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZXNzYWdlUG9ydCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNv
cmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9tZXNz
YWdlX3BvcnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01NZXNz
YWdlUG9ydCwgd2Via2l0X2RvbV9tZXNzYWdlX3BvcnQsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZXNz
YWdlX3BvcnRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU1lc3Nh
Z2VQb3J0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVTU0FHRV9QT1JUX0dFVF9QUklWQVRF
KG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRl
KCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21f
bWVzc2FnZV9wb3J0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQor
eworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVzc2Fn
ZV9wb3J0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01NZXNzYWdlUG9y
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVF9HRVRfUFJJVkFURShvYmpl
Y3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZXNzYWdl
UG9ydCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwor
CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZXNzYWdl
X3BvcnRfY2xhc3NfaW5pdChXZWJLaXRET01NZXNzYWdlUG9ydENsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdG9yID0gd2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfY29uc3RydWN0b3I7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X2ZpbmFsaXplOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9pbml0KFdlYktpdERPTU1l
c3NhZ2VQb3J0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fTUVTU0FHRV9QT1JUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAg
IG5ldyAocHJpdikgV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TXJlYWRvbmx5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0LmgKc2ltaWxhcml0eSBpbmRleCA1NiUKcmVu
YW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NcmVhZG9ubHkuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZXNzYWdlUG9ydC5oCmluZGV4IDc0Mjg2
YjguLmIzMWNkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZXNzYWdlUG9ydC5o
CkBAIC0xOCw4ICsxOCw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBXZWJLaXRET01yZWFkb25seV9oCi0jZGVmaW5lIFdlYktpdERPTXJlYWRvbmx5
X2gKKyNpZm5kZWYgV2ViS2l0RE9NTWVzc2FnZVBvcnRfaAorI2RlZmluZSBXZWJLaXRET01NZXNz
YWdlUG9ydF9oCiAKICNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKIApAQCAtMjks
MjkgKzI5LDI1IEBACiAKIEdfQkVHSU5fREVDTFMKIAotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9SRUFET05MWSAgICAgICAgICAgICh3ZWJraXRfZG9tX3JlYWRvbmx5
X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fUkVBRE9OTFkob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1JFQURP
TkxZLCBXZWJLaXRET01yZWFkb25seSkpCi0jZGVmaW5lIFdFQktJVF9ET01fUkVBRE9OTFlfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX1JFQURPTkxZLCBXZWJLaXRET01yZWFkb25seUNsYXNzKQotI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1JFQURPTkxZKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9SRUFET05MWSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNf
UkVBRE9OTFlfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1JFQURPTkxZKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9SRUFET05MWV9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
RE9NX1RZUEVfUkVBRE9OTFksIFdlYktpdERPTXJlYWRvbmx5Q2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfTUVTU0FHRV9QT1JUICAgICAgICAgICAgKHdlYmtpdF9kb21fbWVzc2FnZV9w
b3J0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVTU0FHRV9QT1JUKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9NRVNTQUdFX1BPUlQsIFdlYktpdERPTU1lc3NhZ2VQb3J0KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9NRVNTQUdFX1BPUlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FU1NBR0VfUE9SVCwgV2ViS2l0RE9NTWVzc2FnZVBv
cnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRVNTQUdFX1BPUlQob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FU1NB
R0VfUE9SVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVTU0FHRV9QT1JUX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9NRVNT
QUdFX1BPUlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfTUVT
U0FHRV9QT1JULCBXZWJLaXRET01NZXNzYWdlUG9ydENsYXNzKSkKIAotc3RydWN0IF9XZWJLaXRE
T01yZWFkb25seSB7CitzdHJ1Y3QgX1dlYktpdERPTU1lc3NhZ2VQb3J0IHsKICAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwogfTsKIAotc3RydWN0IF9XZWJLaXRET01yZWFkb25s
eUNsYXNzIHsKK3N0cnVjdCBfV2ViS2l0RE9NTWVzc2FnZVBvcnRDbGFzcyB7CiAgICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Vi
a2l0X2RvbV9yZWFkb25seV9nZXRfdHlwZSh2b2lkKTsKK3dlYmtpdF9kb21fbWVzc2FnZV9wb3J0
X2dldF90eXBlKHZvaWQpOwogCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLyogV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEludGVyZmFjZV9oICov
Ci0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2Vi
S2l0RE9NcmVhZG9ubHlfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTU1lc3NhZ2VQb3J0X2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWExNGQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTWVz
c2FnZVBvcnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvTWVzc2FnZVBvcnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NTWVzc2FnZVBvcnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01N
ZXNzYWdlUG9ydCogd3JhcE1lc3NhZ2VQb3J0KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Kik7CitXZWJL
aXRET01NZXNzYWdlUG9ydCoga2l0KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Kik7CitXZWJDb3JlOjpN
ZXNzYWdlUG9ydCogY29yZShXZWJLaXRET01NZXNzYWdlUG9ydCopOworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3MDNkNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTW91c2VFdmVudC5jcHAKQEAgLTAsMCArMSw1MjkgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01N
b3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU1vdXNlRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTU1vdXNlRXZlbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Nb3Vz
ZUV2ZW50KiBraXQoV2ViQ29yZTo6TW91c2VFdmVudCogb2JqKQoreworICAgIHJldHVybiBXRUJL
SVRfRE9NX01PVVNFX0VWRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpFdmVudCo+KG9iaikp
KTsKK30KKworV2ViQ29yZTo6TW91c2VFdmVudCogY29yZShXZWJLaXRET01Nb3VzZUV2ZW50KiBy
ZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TW91
c2VFdmVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTU1vdXNlRXZlbnQqIHdyYXBNb3VzZUV2ZW50KFdlYkNvcmU6Ok1vdXNlRXZl
bnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX01PVVNFX0VWRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTU9VU0Vf
RVZFTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTW91c2VFdmVudCwgd2Vi
a2l0X2RvbV9tb3VzZV9ldmVudCwgV0VCS0lUX0RPTV9UWVBFX1VJX0VWRU5UKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9TQ1JFRU5fWCwKKyAgICBQUk9QX1NDUkVFTl9ZLAorICAg
IFBST1BfQ0xJRU5UX1gsCisgICAgUFJPUF9DTElFTlRfWSwKKyAgICBQUk9QX0NUUkxfS0VZLAor
ICAgIFBST1BfU0hJRlRfS0VZLAorICAgIFBST1BfQUxUX0tFWSwKKyAgICBQUk9QX01FVEFfS0VZ
LAorICAgIFBST1BfQlVUVE9OLAorICAgIFBST1BfUkVMQVRFRF9UQVJHRVQsCisgICAgUFJPUF9N
T1ZFTUVOVF9YLAorICAgIFBST1BfTU9WRU1FTlRfWSwKKyAgICBQUk9QX09GRlNFVF9YLAorICAg
IFBST1BfT0ZGU0VUX1ksCisgICAgUFJPUF9YLAorICAgIFBST1BfWSwKKyAgICBQUk9QX0ZST01f
RUxFTUVOVCwKKyAgICBQUk9QX1RPX0VMRU1FTlQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX21vdXNlX2V2ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TU1vdXNlRXZlbnQqIHNlbGYgPSBXRUJLSVRfRE9NX01PVVNFX0VWRU5UKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU0NSRUVOX1g6CisgICAgICAg
IGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NjcmVl
bl94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9ZOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9z
Y3JlZW5feShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTElFTlRfWDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9n
ZXRfY2xpZW50X3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0xJRU5U
X1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X2NsaWVudF95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NU
UkxfS0VZOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9jdHJsX2tleShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9TSElGVF9LRVk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtp
dF9kb21fbW91c2VfZXZlbnRfZ2V0X3NoaWZ0X2tleShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9BTFRfS0VZOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9hbHRfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX01FVEFfS0VZOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tZXRhX2tleShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CVVRUT046CisgICAgICAgIGdfdmFsdWVfc2V0X3Vp
bnQodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2J1dHRvbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUxBVEVEX1RBUkdFVDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9yZWxhdGVkX3Rh
cmdldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NT1ZFTUVOVF9YOgor
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dl
dF9tb3ZlbWVudF94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01PVkVN
RU5UX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2Vf
ZXZlbnRfZ2V0X21vdmVtZW50X3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfT0ZGU0VUX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
bW91c2VfZXZlbnRfZ2V0X29mZnNldF94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX09GRlNFVF9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X21vdXNlX2V2ZW50X2dldF94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRlJPTV9FTEVN
RU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbW91c2Vf
ZXZlbnRfZ2V0X2Zyb21fZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9UT19FTEVNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fbW91c2VfZXZlbnRfZ2V0X3RvX2VsZW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9jbGFzc19pbml0KFdlYktpdERPTU1v
dXNlRXZlbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NDUkVFTl9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAg
ICAgICAgICAgICJzY3JlZW4teCIsCisgICAgICAgICAgICAiTW91c2VFdmVudDpzY3JlZW4teCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIE1vdXNlRXZlbnQ6c2NyZWVuLXgiLAorICAg
ICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JFRU5fWSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2NyZWVuLXkiLAorICAgICAgICAgICAgIk1v
dXNlRXZlbnQ6c2NyZWVuLXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3VzZUV2
ZW50OnNjcmVlbi15IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0xJ
RU5UX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImNsaWVudC14
IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OmNsaWVudC14IiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2xvbmcgTW91c2VFdmVudDpjbGllbnQteCIsCisgICAgICAgICAgICBHX01JTkxPTkcs
IEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0NMSUVOVF9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAg
ICAgICAgICAgICJjbGllbnQteSIsCisgICAgICAgICAgICAiTW91c2VFdmVudDpjbGllbnQteSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIE1vdXNlRXZlbnQ6Y2xpZW50LXkiLAorICAg
ICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DVFJMX0tFWSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY3RybC1rZXkiLAorICAgICAgICAgICAg
Ik1vdXNlRXZlbnQ6Y3RybC1rZXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBN
b3VzZUV2ZW50OmN0cmwta2V5IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0hJRlRfS0VZLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJzaGlmdC1rZXkiLAorICAg
ICAgICAgICAgIk1vdXNlRXZlbnQ6c2hpZnQta2V5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2Jvb2xlYW4gTW91c2VFdmVudDpzaGlmdC1rZXkiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTFRf
S0VZLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhbHQta2V5
IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OmFsdC1rZXkiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnYm9vbGVhbiBNb3VzZUV2ZW50OmFsdC1rZXkiLAorICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9N
RVRBX0tFWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibWV0
YS1rZXkiLAorICAgICAgICAgICAgIk1vdXNlRXZlbnQ6bWV0YS1rZXkiLAorICAgICAgICAgICAg
InJlYWQtb25seSBnYm9vbGVhbiBNb3VzZUV2ZW50Om1ldGEta2V5IiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQlVUVE9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAgICAgICJi
dXR0b24iLAorICAgICAgICAgICAgIk1vdXNlRXZlbnQ6YnV0dG9uIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3VzaG9ydCBNb3VzZUV2ZW50OmJ1dHRvbiIsCisgICAgICAgICAgICAwLCBHX01B
WFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9SRUxBVEVEX1RBUkdFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJyZWxhdGVkLXRhcmdldCIsCisgICAgICAgICAgICAiTW91c2VFdmVudDpy
ZWxhdGVkLXRhcmdldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUV2ZW50VGFy
Z2V0KiBNb3VzZUV2ZW50OnJlbGF0ZWQtdGFyZ2V0IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9NT1ZFTUVOVF9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9u
ZygKKyAgICAgICAgICAgICJtb3ZlbWVudC14IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50Om1v
dmVtZW50LXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3VzZUV2ZW50Om1vdmVt
ZW50LXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NT1ZFTUVOVF9Z
LAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJtb3ZlbWVudC15IiwK
KyAgICAgICAgICAgICJNb3VzZUV2ZW50Om1vdmVtZW50LXkiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnbG9uZyBNb3VzZUV2ZW50Om1vdmVtZW50LXkiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9PRkZTRVRfWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisg
ICAgICAgICAgICAib2Zmc2V0LXgiLAorICAgICAgICAgICAgIk1vdXNlRXZlbnQ6b2Zmc2V0LXgi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3VzZUV2ZW50Om9mZnNldC14IiwKKyAg
ICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT0ZGU0VUX1ksCisgICAgICAgIGdf
cGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIm9mZnNldC15IiwKKyAgICAgICAgICAgICJN
b3VzZUV2ZW50Om9mZnNldC15IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgTW91c2VF
dmVudDpvZmZzZXQteSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1gs
CisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIngiLAorICAgICAgICAg
ICAgIk1vdXNlRXZlbnQ6eCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIE1vdXNlRXZl
bnQ6eCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ksCisgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInkiLAorICAgICAgICAgICAgIk1vdXNl
RXZlbnQ6eSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIE1vdXNlRXZlbnQ6eSIsCisg
ICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZST01fRUxFTUVOVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJmcm9tLWVsZW1lbnQiLAorICAg
ICAgICAgICAgIk1vdXNlRXZlbnQ6ZnJvbS1lbGVtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NTm9kZSogTW91c2VFdmVudDpmcm9tLWVsZW1lbnQiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9UT19FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgInRvLWVsZW1lbnQiLAorICAgICAgICAgICAgIk1vdXNlRXZl
bnQ6dG8tZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIE1v
dXNlRXZlbnQ6dG8tZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fbW91c2VfZXZlbnRfaW5pdChXZWJLaXRET01Nb3VzZUV2ZW50KiByZXF1ZXN0
KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHR5cGUsIGdib29sZWFuIGNhbkJ1YmJsZSwgZ2Jvb2xlYW4gY2FuY2VsYWJsZSwg
V2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBnbG9uZyBkZXRhaWwsIGdsb25nIHNjcmVlblgsIGds
b25nIHNjcmVlblksIGdsb25nIGNsaWVudFgsIGdsb25nIGNsaWVudFksIGdib29sZWFuIGN0cmxL
ZXksIGdib29sZWFuIGFsdEtleSwgZ2Jvb2xlYW4gc2hpZnRLZXksIGdib29sZWFuIG1ldGFLZXks
IGd1c2hvcnQgYnV0dG9uLCBXZWJLaXRET01FdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHR5cGUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lO
RE9XKHZpZXcpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlRfVEFS
R0VUKHJlbGF0ZWRUYXJnZXQpKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFR5cGUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodHlwZSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBjb252ZXJ0ZWRW
aWV3ID0gV2ViS2l0Ojpjb3JlKHZpZXcpOworICAgIFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiBjb252
ZXJ0ZWRSZWxhdGVkVGFyZ2V0ID0gV2ViS2l0Ojpjb3JlKHJlbGF0ZWRUYXJnZXQpOworICAgIGl0
ZW0tPmluaXRNb3VzZUV2ZW50KGNvbnZlcnRlZFR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwg
Y29udmVydGVkVmlldywgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBjbGllbnRYLCBjbGllbnRZ
LCBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sIGNvbnZlcnRlZFJl
bGF0ZWRUYXJnZXQpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9zY3Jl
ZW5feChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcmVlblgo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX21vdXNlX2V2ZW50
X2dldF9zY3JlZW5feShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
PnNjcmVlblkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9jbGllbnRfeChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3Vs
dCA9IGl0ZW0tPmNsaWVudFgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJr
aXRfZG9tX21vdXNlX2V2ZW50X2dldF9jbGllbnRfeShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGds
b25nIHJlc3VsdCA9IGl0ZW0tPmNsaWVudFkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9jdHJsX2tleShXZWJLaXRET01Nb3Vz
ZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jdHJsS2V5KCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2hp
ZnRfa2V5KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PnNoaWZ0S2V5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9tb3VzZV9ldmVudF9nZXRfYWx0X2tleShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAg
V2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT5hbHRLZXkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tZXRhX2tleShXZWJLaXRET01Nb3Vz
ZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tZXRhS2V5KCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9idXR0
b24oV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPmJ1dHRvbigp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUV2ZW50VGFyZ2V0KiB3ZWJraXRf
ZG9tX21vdXNlX2V2ZW50X2dldF9yZWxhdGVkX3RhcmdldChXZWJLaXRET01Nb3VzZUV2ZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpFdmVudFRhcmdldD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnJlbGF0ZWRUYXJnZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tb3Zl
bWVudF94KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFBPSU5URVJf
TE9DSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
bG9uZyByZXN1bHQgPSBpdGVtLT5tb3ZlbWVudFgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiUG9pbnRlciBMb2NrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDAp
OworI2VuZGlmIC8qIEVOQUJMRShQT0lOVEVSX0xPQ0spICovCit9CisKK2dsb25nIHdlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X21vdmVtZW50X3koV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikK
K3sKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01P
VVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm1vdmVtZW50WSgpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJQb2ludGVyIExvY2siKQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFBPSU5URVJfTE9DSykg
Ki8KK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfb2Zmc2V0X3goV2ViS2l0
RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9F
VkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5vZmZzZXRYKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfb2Zmc2V0
X3koV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5vZmZzZXRZKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9n
ZXRfeChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPngoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF95
KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
TU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+eSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRf
Z2V0X2Zyb21fZWxlbWVudChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3Vz
ZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpO
b2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZnJvbUVsZW1lbnQoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01Ob2RlKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF90b19lbGVtZW50KFdlYktpdERPTU1v
dXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT50b0VsZW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TW91c2VFdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNDU3ZGYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnQuaApAQCAtMCwwICsxLDIyMSBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9N
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8
d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlm
CisKKyNpZm5kZWYgV2ViS2l0RE9NTW91c2VFdmVudF9oCisjZGVmaW5lIFdlYktpdERPTU1vdXNl
RXZlbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NVUlFdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTU9VU0VfRVZF
TlQgICAgICAgICAgICAod2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX01PVVNFX0VWRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NT1VTRV9FVkVOVCwgV2ViS2l0RE9N
TW91c2VFdmVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fTU9VU0VfRVZFTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01P
VVNFX0VWRU5ULCBXZWJLaXRET01Nb3VzZUV2ZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfTU9VU0VfRVZFTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX01PVVNFX0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19NT1VTRV9FVkVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfTU9VU0VfRVZFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX01P
VVNFX0VWRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9NT1VTRV9FVkVOVCwgV2ViS2l0RE9NTW91c2VFdmVudENsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01Nb3VzZUV2ZW50IHsKKyAgICBXZWJLaXRET01VSUV2ZW50
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTW91c2VFdmVudENsYXNz
IHsKKyAgICBXZWJLaXRET01VSUV2ZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NTW91c2VFdmVudAorICogQHR5cGU6IEEgI2djaGFyCisgKiBAY2FuQnViYmxl
OiBBICNnYm9vbGVhbgorICogQGNhbmNlbGFibGU6IEEgI2dib29sZWFuCisgKiBAdmlldzogQSAj
V2ViS2l0RE9NRE9NV2luZG93CisgKiBAZGV0YWlsOiBBICNnbG9uZworICogQHNjcmVlblg6IEEg
I2dsb25nCisgKiBAc2NyZWVuWTogQSAjZ2xvbmcKKyAqIEBjbGllbnRYOiBBICNnbG9uZworICog
QGNsaWVudFk6IEEgI2dsb25nCisgKiBAY3RybEtleTogQSAjZ2Jvb2xlYW4KKyAqIEBhbHRLZXk6
IEEgI2dib29sZWFuCisgKiBAc2hpZnRLZXk6IEEgI2dib29sZWFuCisgKiBAbWV0YUtleTogQSAj
Z2Jvb2xlYW4KKyAqIEBidXR0b246IEEgI2d1c2hvcnQKKyAqIEByZWxhdGVkVGFyZ2V0OiBBICNX
ZWJLaXRET01FdmVudFRhcmdldAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHR5cGUsIGdib29sZWFuIGNhbkJ1YmJsZSwgZ2Jvb2xlYW4gY2FuY2VsYWJs
ZSwgV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBnbG9uZyBkZXRhaWwsIGdsb25nIHNjcmVlblgs
IGdsb25nIHNjcmVlblksIGdsb25nIGNsaWVudFgsIGdsb25nIGNsaWVudFksIGdib29sZWFuIGN0
cmxLZXksIGdib29sZWFuIGFsdEtleSwgZ2Jvb2xlYW4gc2hpZnRLZXksIGdib29sZWFuIG1ldGFL
ZXksIGd1c2hvcnQgYnV0dG9uLCBXZWJLaXRET01FdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2NyZWVuX3g6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8K
K1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NjcmVlbl94KFdl
YktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X3NjcmVlbl95OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9zY3JlZW5feShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9jbGllbnRfeDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lU
X0FQSSBnbG9uZword2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY2xpZW50X3goV2ViS2l0RE9N
TW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRf
Y2xpZW50X3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X2NsaWVudF95KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2N0cmxfa2V5OgorICogQHNlbGY6IEEgI1dlYktpdERP
TU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9jdHJsX2tleShXZWJLaXRET01N
b3VzZUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9z
aGlmdF9rZXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbW91
c2VfZXZlbnRfZ2V0X3NoaWZ0X2tleShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9hbHRfa2V5OgorICogQHNlbGY6IEEgI1dl
YktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9hbHRfa2V5KFdlYktp
dERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRf
Z2V0X21ldGFfa2V5OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X21vdXNlX2V2ZW50X2dldF9tZXRhX2tleShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9idXR0b246CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQKKyoqLworV0VC
S0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9idXR0b24oV2ViS2l0
RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9n
ZXRfcmVsYXRlZF90YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRXZlbnRUYXJnZXQKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01FdmVudFRhcmdldCoKK3dlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X3JlbGF0ZWRfdGFyZ2V0KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X29mZnNldF94OgorICogQHNlbGY6IEEgI1dl
YktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRf
QVBJIGdsb25nCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeChXZWJLaXRET01N
b3VzZUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9v
ZmZzZXRfeToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJu
czogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfb2Zmc2V0X3koV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Vi
a2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfeChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF95OgorICogQHNlbGY6IEEgI1dlYktp
dERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJ
IGdsb25nCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF95KFdlYktpdERPTU1vdXNlRXZlbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2Zyb21fZWxlbWVu
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
Tm9kZSoKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2Zyb21fZWxlbWVudChXZWJLaXRET01N
b3VzZUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF90
b19lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfdG9fZWxlbWVudChXZWJL
aXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTU1vdXNlRXZlbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50UHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Nb3VzZUV2ZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjgzNzI1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnRQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01Nb3VzZUV2ZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU1vdXNl
RXZlbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvTW91c2VFdmVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Nb3VzZUV2ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworV2ViS2l0RE9NTW91c2VFdmVudCogd3JhcE1vdXNlRXZlbnQoV2ViQ29yZTo6TW91c2VFdmVu
dCopOworV2ViS2l0RE9NTW91c2VFdmVudCoga2l0KFdlYkNvcmU6Ok1vdXNlRXZlbnQqKTsKK1dl
YkNvcmU6Ok1vdXNlRXZlbnQqIGNvcmUoV2ViS2l0RE9NTW91c2VFdmVudCopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01Nb3VzZUV2ZW50UHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50
VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWIwNzY2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDU2
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTU1v
dXNlRXZlbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTU1vdXNlRXZlbnRVbnN0YWJsZV9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoq
CisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tb3ZlbWVudF94OgorICogQHNlbGY6IEEg
I1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9tb3Vz
ZV9ldmVudF9nZXRfbW92ZW1lbnRfeChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tb3ZlbWVudF95OgorICogQHNlbGY6IEEg
I1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9tb3Vz
ZV9ldmVudF9nZXRfbW92ZW1lbnRfeShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NTW91c2VFdmVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTJhMzA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01O
YW1lZE5vZGVNYXAuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTmFtZWRO
b2RlTWFwLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTkFNRURf
Tk9ERV9NQVBfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2Jq
LCBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVAsIFdlYktpdERPTU5hbWVkTm9kZU1hcFBy
aXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlIHsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6TmFtZWROb2RlTWFwPiBjb3JlT2JqZWN0OworfSBXZWJLaXRE
T01OYW1lZE5vZGVNYXBQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9N
TmFtZWROb2RlTWFwKiBraXQoV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBvYmopCit7CisgICAgaWYg
KCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9i
amVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTkFNRURfTk9E
RV9NQVAocmV0KTsKKworICAgIHJldHVybiB3cmFwTmFtZWROb2RlTWFwKG9iaik7Cit9CisKK1dl
YkNvcmU6Ok5hbWVkTm9kZU1hcCogY29yZShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHJlcXVlc3Qp
Cit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOYW1lZE5vZGVN
YXAqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01OYW1lZE5vZGVNYXAqIHdyYXBOYW1lZE5vZGVNYXAoV2ViQ29yZTo6TmFtZWROb2Rl
TWFwKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX05B
TUVEX05PREVfTUFQLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTU5hbWVkTm9k
ZU1hcCwgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTkFN
RURfTk9ERV9NQVBfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJL
aXRET01OYW1lZE5vZGVNYXBQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV9uYW1lZF9ub2RlX21hcF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiA9IFdFQktJVF9ET01fTkFN
RURfTk9ERV9NQVAob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX25hbWVkX25vZGVfbWFwX2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIEdPYmplY3QqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfY29uc3RydWN0b3IoR1R5cGUg
dHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFy
YW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMp
OworCisgICAgV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
TkFNRURfTk9ERV9NQVBfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TmFtZWROb2RlTWFwKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
b2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHBy
aXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2NsYXNzX2luaXQoV2ViS2l0
RE9NTmFtZWROb2RlTWFwQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTU5hbWVkTm9k
ZU1hcFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV9uYW1lZF9ub2RlX21hcF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXpl
ID0gd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X3Byb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAor
ICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiTmFtZWROb2RlTWFwOmxlbmd0aCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBOYW1lZE5vZGVNYXA6bGVuZ3RoIiwKKyAg
ICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2lu
aXQoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTU5hbWVk
Tm9kZU1hcFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05BTUVEX05PREVfTUFQX0dFVF9QUklW
QVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0
ZSgpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9u
YW1lZF9pdGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFNRURfTk9ERV9NQVAoc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIDApOworICAgIFdlYkNvcmU6Ok5hbWVkTm9k
ZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0TmFtZWRJdGVtKGNv
bnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25h
bWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2Rl
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQU1FRF9OT0RF
X01BUChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19O
T0RFKG5vZGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJv
ciwgMCk7CisgICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUobm9k
ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zZXROYW1lZEl0ZW0o
KmNvbnZlcnRlZE5vZGUsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9yZW1vdmVfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0
IGdjaGFyKiBuYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OQU1FRF9OT0RFX01BUChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFt
ZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwor
ICAgIFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVtb3ZlTmFtZWRJdGVt
KGNvbnZlcnRlZE5hbWUsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9pdGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgZ3Vsb25nIGluZGV4KQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVt
KGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9uYW1lZF9p
dGVtX25zKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFj
ZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OQU1FRF9OT0RFX01BUChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFt
ZXNwYWNlVVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsb2NhbE5hbWUsIDApOwor
ICAgIFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRMb2NhbE5hbWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgobG9jYWxOYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9k
ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldE5hbWVkSXRlbU5TKGNvbnZl
cnRlZE5hbWVzcGFjZVVSSSwgY29udmVydGVkTG9jYWxOYW1lKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRf
ZG9tX25hbWVkX25vZGVfbWFwX3NldF9uYW1lZF9pdGVtX25zKFdlYktpdERPTU5hbWVkTm9kZU1h
cCogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTkFNRURfTk9ERV9NQVAoc2VsZiksIDApOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShub2RlKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5hbWVkTm9k
ZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252
ZXJ0ZWROb2RlID0gV2ViS2l0Ojpjb3JlKG5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+c2V0TmFtZWRJdGVtKCpjb252ZXJ0ZWROb2RlLCBlYykpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERP
TU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnMoV2Vi
S2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25z
dCBnY2hhciogbG9jYWxOYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19OQU1FRF9OT0RFX01BUChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwobmFtZXNwYWNlVVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsb2NhbE5hbWUs
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAg
ICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KGxvY2FsTmFtZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5yZW1vdmVOYW1lZEl0ZW1OUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNv
bnZlcnRlZExvY2FsTmFtZSwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9n
ZXRfbGVuZ3RoKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OQU1FRF9OT0RFX01BUChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmFtZWRO
b2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBp
dGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TU5hbWVkTm9kZU1hcC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45Mzk2N2JmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5v
ZGVNYXAuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxE
SU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUg
aW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NTmFtZWROb2Rl
TWFwX2gKKyNkZWZpbmUgV2ViS2l0RE9NTmFtZWROb2RlTWFwX2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVAgICAgICAgICAgICAod2Via2l0X2Rv
bV9uYW1lZF9ub2RlX21hcF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX05BTUVEX05P
REVfTUFQKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCwgV2ViS2l0RE9NTmFtZWROb2RlTWFwKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9N
QVAsIFdlYktpdERPTU5hbWVkTm9kZU1hcENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX05B
TUVEX05PREVfTUFQKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfTkFNRURfTk9ERV9NQVBfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05BTUVEX05PREVfTUFQKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9OQU1FRF9OT0RFX01BUF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVAsIFdlYktpdERPTU5h
bWVkTm9kZU1hcENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01OYW1lZE5vZGVNYXAgeworICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TU5hbWVkTm9kZU1hcENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X25h
bWVkX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmFtZWROb2RlTWFwCisgKiBAbmFtZTog
QSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5v
ZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9nZXRfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdj
aGFyKiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3NldF9uYW1l
ZF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAorICogQG5vZGU6IEEg
I1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5v
ZGUqCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3NldF9uYW1lZF9pdGVtKFdlYktpdERPTU5h
bWVkTm9kZU1hcCogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW06Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTmFtZWROb2RlTWFwCisgKiBAbmFtZTogQSAjZ2NoYXIKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25h
bWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG5hbWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX25hbWVkX25vZGVfbWFwX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmFtZWROb2Rl
TWFwCisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJr
aXRfZG9tX25hbWVkX25vZGVfbWFwX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBn
dWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X25h
bWVkX2l0ZW1fbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmFtZWROb2RlTWFwCisgKiBAbmFt
ZXNwYWNlVVJJOiBBICNnY2hhcgorICogQGxvY2FsTmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbmFtZWRfaXRlbV9u
cyhXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkks
IGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9k
ZV9tYXBfc2V0X25hbWVkX2l0ZW1fbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmFtZWROb2Rl
TWFwCisgKiBAbm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25hbWVk
X2l0ZW1fbnMoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2Rl
LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9y
ZW1vdmVfbmFtZWRfaXRlbV9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAK
KyAqIEBuYW1lc3BhY2VVUkk6IEEgI2djaGFyCisgKiBAbG9jYWxOYW1lOiBBICNnY2hhcgorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbmFt
ZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnMoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBz
ZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRf
bGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAorICoKKyAqIFJldHVy
bnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9uYW1lZF9u
b2RlX21hcF9nZXRfbGVuZ3RoKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZik7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01OYW1lZE5vZGVNYXBfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQ2ZGI4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01OYW1lZE5vZGVN
YXBQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL05hbWVkTm9kZU1hcC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01OYW1lZE5vZGVNYXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01OYW1l
ZE5vZGVNYXAqIHdyYXBOYW1lZE5vZGVNYXAoV2ViQ29yZTo6TmFtZWROb2RlTWFwKik7CitXZWJL
aXRET01OYW1lZE5vZGVNYXAqIGtpdChXZWJDb3JlOjpOYW1lZE5vZGVNYXAqKTsKK1dlYkNvcmU6
Ok5hbWVkTm9kZU1hcCogY29yZShXZWJLaXRET01OYW1lZE5vZGVNYXAqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiMmZlMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTmF2aWdhdG9yLmNwcApAQCAtMCwwICsxLDY5MSBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERP
TU5hdmlnYXRvci5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdG9yQmF0dGVyeS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvTmF2aWdhdG9yQ29udGVudFV0aWxzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
YXZpZ2F0b3JHZW9sb2NhdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdG9yTWVkaWFE
ZXZpY2VzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0b3JWaWJyYXRpb24uaD4KKyNpbmNs
dWRlICJXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVBsdWdp
bkFycmF5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTU1lZGlhRGV2aWNlc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTkFWSUdB
VE9SX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VC
S0lUX0RPTV9UWVBFX05BVklHQVRPUiwgV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5hdmlnYXRvclByaXZhdGUgeworICAgIFJlZlB0cjxXZWJD
b3JlOjpOYXZpZ2F0b3I+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTU5hdmlnYXRvclByaXZhdGU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01OYXZpZ2F0b3IqIGtpdChXZWJDb3Jl
OjpOYXZpZ2F0b3IqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9OQVZJR0FUT1IocmV0KTsKKworICAgIHJldHVybiB3cmFwTmF2
aWdhdG9yKG9iaik7Cit9CisKK1dlYkNvcmU6Ok5hdmlnYXRvciogY29yZShXZWJLaXRET01OYXZp
Z2F0b3IqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOYXZpZ2F0b3IqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01OYXZpZ2F0b3IqIHdyYXBOYXZpZ2F0b3IoV2ViQ29yZTo6TmF2
aWdhdG9yKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9OQVZJR0FUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9OQVZJ
R0FUT1IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTmF2aWdhdG9yLCB3ZWJr
aXRfZG9tX25hdmlnYXRvciwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfUExVR0lOUywKKyAgICBQUk9QX01JTUVfVFlQRVMsCisgICAgUFJP
UF9DT09LSUVfRU5BQkxFRCwKKyAgICBQUk9QX1dFQktJVF9CQVRURVJZLAorICAgIFBST1BfR0VP
TE9DQVRJT04sCisgICAgUFJPUF9NRURJQV9ERVZJQ0VTLAorICAgIFBST1BfSEFSRFdBUkVfQ09O
Q1VSUkVOQ1ksCisgICAgUFJPUF9BUFBfQ09ERV9OQU1FLAorICAgIFBST1BfQVBQX05BTUUsCisg
ICAgUFJPUF9BUFBfVkVSU0lPTiwKKyAgICBQUk9QX1BMQVRGT1JNLAorICAgIFBST1BfUFJPRFVD
VCwKKyAgICBQUk9QX1BST0RVQ1RfU1VCLAorICAgIFBST1BfVVNFUl9BR0VOVCwKKyAgICBQUk9Q
X1ZFTkRPUiwKKyAgICBQUk9QX1ZFTkRPUl9TVUIsCisgICAgUFJPUF9MQU5HVUFHRSwKKyAgICBQ
Uk9QX09OX0xJTkUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25hdmlnYXRvcl9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fTkFWSUdBVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisK
KyAgICBwcml2LT5+V2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9kb21fbmF2aWdhdG9yX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTU5hdmlnYXRvciogc2VsZiA9IFdFQktJVF9ET01fTkFW
SUdBVE9SKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBS
T1BfUExVR0lOUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X25hdmlnYXRvcl9nZXRfcGx1Z2lucyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9NSU1FX1RZUEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fbmF2aWdhdG9yX2dldF9taW1lX3R5cGVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NPT0tJRV9FTkFCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfY29va2llX2VuYWJsZWQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0JBVFRFUlk6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3dlYmtpdF9i
YXR0ZXJ5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0dFT0xPQ0FUSU9O
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9y
X2dldF9nZW9sb2NhdGlvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9N
RURJQV9ERVZJQ0VTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21fbmF2aWdhdG9yX2dldF9tZWRpYV9kZXZpY2VzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0hBUkRXQVJFX0NPTkNVUlJFTkNZOgorICAgICAgICBnX3ZhbHVlX3NldF91
aW50NjQodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9oYXJkd2FyZV9jb25jdXJyZW5j
eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BUFBfQ09ERV9OQU1FOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9n
ZXRfYXBwX2NvZGVfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9B
UFBfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9u
YXZpZ2F0b3JfZ2V0X2FwcF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0FQUF9WRVJTSU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX25hdmlnYXRvcl9nZXRfYXBwX3ZlcnNpb24oc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUExBVEZPUk06CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wbGF0Zm9ybShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QUk9EVUNUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvZHVjdChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9EVUNUX1NVQjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Byb2R1Y3Rfc3ViKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRVJfQUdFTlQ6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF91c2VyX2Fn
ZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZFTkRPUjoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Zl
bmRvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WRU5ET1JfU1VCOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9n
ZXRfdmVuZG9yX3N1YihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQU5H
VUFHRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9uYXZp
Z2F0b3JfZ2V0X2xhbmd1YWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X09OX0xJTkU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
bmF2aWdhdG9yX2dldF9vbl9saW5lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX25hdmlnYXRvcl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0
UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX25hdmlnYXRvcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9N
TmF2aWdhdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTkFWSUdBVE9SX0dFVF9QUklWQVRF
KG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5h
dmlnYXRvcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdl
YktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3Qp
OworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9uYXZp
Z2F0b3JfY2xhc3NfaW5pdChXZWJLaXRET01OYXZpZ2F0b3JDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXpl
b2YoV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3Ry
dWN0b3IgPSB3ZWJraXRfZG9tX25hdmlnYXRvcl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9uYXZpZ2F0b3JfZmluYWxpemU7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfUExVR0lOUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJwbHVnaW5zIiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6cGx1Z2lu
cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVBsdWdpbkFycmF5KiBOYXZp
Z2F0b3I6cGx1Z2lucyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJTl9B
UlJBWSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX01JTUVfVFlQRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAibWltZS10eXBlcyIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOm1pbWUtdHlwZXMiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiBOYXZpZ2F0
b3I6bWltZS10eXBlcyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQ
RV9BUlJBWSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NPT0tJRV9FTkFCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigK
KyAgICAgICAgICAgICJjb29raWUtZW5hYmxlZCIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOmNv
b2tpZS1lbmFibGVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gTmF2aWdhdG9y
OmNvb2tpZS1lbmFibGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0JBVFRFUlksCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAid2Via2l0LWJhdHRlcnki
LAorICAgICAgICAgICAgIk5hdmlnYXRvcjp3ZWJraXQtYmF0dGVyeSIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiBOYXZpZ2F0b3I6d2Via2l0LWJhdHRl
cnkiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0JBVFRFUllfTUFOQUdFUiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0dFT0xP
Q0FUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImdlb2xv
Y2F0aW9uIiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6Z2VvbG9jYXRpb24iLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01HZW9sb2NhdGlvbiogTmF2aWdhdG9yOmdlb2xvY2F0aW9u
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9HRU9MT0NBVElPTiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FRElBX0RFVklD
RVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibWVkaWEtZGV2
aWNlcyIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOm1lZGlhLWRldmljZXMiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01NZWRpYURldmljZXMqIE5hdmlnYXRvcjptZWRpYS1kZXZp
Y2VzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9NRURJQV9ERVZJQ0VTLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEFSRFdB
UkVfQ09OQ1VSUkVOQ1ksCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAg
ICAiaGFyZHdhcmUtY29uY3VycmVuY3kiLAorICAgICAgICAgICAgIk5hdmlnYXRvcjpoYXJkd2Fy
ZS1jb25jdXJyZW5jeSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgTmF2aWdhdG9y
OmhhcmR3YXJlLWNvbmN1cnJlbmN5IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QVBQX0NPREVfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJhcHAtY29kZS1uYW1lIiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6YXBwLWNvZGUtbmFtZSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBOYXZpZ2F0b3I6YXBwLWNvZGUtbmFtZSIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0FQUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImFwcC1uYW1lIiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6YXBwLW5h
bWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdhdG9yOmFwcC1uYW1lIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQVBQX1ZFUlNJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiYXBwLXZlcnNpb24iLAorICAgICAgICAgICAgIk5hdmlnYXRvcjph
cHAtdmVyc2lvbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBOYXZpZ2F0b3I6YXBw
LXZlcnNpb24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QTEFURk9STSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJwbGF0Zm9ybSIsCisgICAgICAgICAgICAiTmF2aWdh
dG9yOnBsYXRmb3JtIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5hdmlnYXRvcjpw
bGF0Zm9ybSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BST0RVQ1QsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAicHJvZHVjdCIsCisgICAgICAgICAgICAiTmF2aWdhdG9y
OnByb2R1Y3QiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdhdG9yOnByb2R1
Y3QiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9QUk9EVUNUX1NVQiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJwcm9kdWN0LXN1YiIsCisgICAgICAgICAgICAiTmF2aWdh
dG9yOnByb2R1Y3Qtc3ViIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5hdmlnYXRv
cjpwcm9kdWN0LXN1YiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1VTRVJfQUdFTlQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidXNlci1hZ2VudCIsCisgICAgICAgICAg
ICAiTmF2aWdhdG9yOnVzZXItYWdlbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
TmF2aWdhdG9yOnVzZXItYWdlbnQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WRU5ET1IsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmVuZG9yIiwKKyAgICAgICAgICAg
ICJOYXZpZ2F0b3I6dmVuZG9yIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5hdmln
YXRvcjp2ZW5kb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WRU5ET1JfU1VCLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZlbmRvci1zdWIiLAorICAgICAgICAgICAg
Ik5hdmlnYXRvcjp2ZW5kb3Itc3ViIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5h
dmlnYXRvcjp2ZW5kb3Itc3ViIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFOR1VBR0UsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibGFuZ3VhZ2UiLAorICAgICAgICAg
ICAgIk5hdmlnYXRvcjpsYW5ndWFnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBO
YXZpZ2F0b3I6bGFuZ3VhZ2UiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PTl9MSU5FLAorICAgICAgICBn
X3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJvbi1saW5lIiwKKyAgICAgICAgICAg
ICJOYXZpZ2F0b3I6b24tbGluZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIE5h
dmlnYXRvcjpvbi1saW5lIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9uYXZpZ2F0
b3JfaW5pdChXZWJLaXRET01OYXZpZ2F0b3IqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NTmF2
aWdhdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTkFWSUdBVE9SX0dFVF9QUklWQVRFKHJl
cXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZSgpOworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX25hdmlnYXRvcl9qYXZhX2VuYWJsZWQoV2ViS2l0RE9NTmF2
aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxm
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5qYXZhRW5hYmxlZCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3N0b3JhZ2Vf
dXBkYXRlcyhXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OQVZJR0FUT1Ioc2VsZikpOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5nZXRTdG9yYWdlVXBkYXRlcygpOworfQorCit2b2lk
IHdlYmtpdF9kb21fbmF2aWdhdG9yX3JlZ2lzdGVyX3Byb3RvY29sX2hhbmRsZXIoV2ViS2l0RE9N
TmF2aWdhdG9yKiBzZWxmLCBjb25zdCBnY2hhciogc2NoZW1lLCBjb25zdCBnY2hhciogdXJsLCBj
b25zdCBnY2hhciogdGl0bGUsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShOQVZJR0FU
T1JfQ09OVEVOVF9VVElMUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChzY2hlbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJs
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHRpdGxlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2NoZW1lID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHNjaGVtZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVXJsID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHVybCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGl0bGUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGl0bGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvckNvbnRlbnRVdGlsczo6cmVnaXN0ZXJQ
cm90b2NvbEhhbmRsZXIoKml0ZW0sIGNvbnZlcnRlZFNjaGVtZSwgY29udmVydGVkVXJsLCBjb252
ZXJ0ZWRUaXRsZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFVOVVNFRF9QQVJBTShzY2hlbWUpOworICAgIFVOVVNFRF9QQVJBTSh1cmwpOworICAgIFVOVVNF
RF9QQVJBTSh0aXRsZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJOYXZpZ2F0b3IgQ29udGVudCBVdGlscyIpCisjZW5kaWYg
LyogRU5BQkxFKE5BVklHQVRPUl9DT05URU5UX1VUSUxTKSAqLworfQorCitnY2hhciogd2Via2l0
X2RvbV9uYXZpZ2F0b3JfaXNfcHJvdG9jb2xfaGFuZGxlcl9yZWdpc3RlcmVkKFdlYktpdERPTU5h
dmlnYXRvciogc2VsZiwgY29uc3QgZ2NoYXIqIHNjaGVtZSwgY29uc3QgZ2NoYXIqIHVybCwgR0Vy
cm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKENVU1RPTV9TQ0hFTUVfSEFORExFUikgJiYgRU5B
QkxFKE5BVklHQVRPUl9DT05URU5UX1VUSUxTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05B
VklHQVRPUihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2NoZW1lLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh1cmwsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2NoZW1lID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VXJsID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHVybCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoV2Vi
Q29yZTo6TmF2aWdhdG9yQ29udGVudFV0aWxzOjppc1Byb3RvY29sSGFuZGxlclJlZ2lzdGVyZWQo
aXRlbSwgY29udmVydGVkU2NoZW1lLCBjb252ZXJ0ZWRVcmwsIGVjKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShz
Y2hlbWUpOworICAgIFVOVVNFRF9QQVJBTSh1cmwpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7
CisjaWYgIUVOQUJMRShOQVZJR0FUT1JfQ09OVEVOVF9VVElMUykKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJOYXZpZ2F0b3IgQ29udGVudCBVdGlscyIpCisjZW5kaWYKKyNp
ZiAhRU5BQkxFKENVU1RPTV9TQ0hFTUVfSEFORExFUikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDdXN0b20gU2NoZW1lIEhhbmRsZXIiKQorI2VuZGlmCisgICAgcmV0dXJu
IDA7CisjZW5kaWYgLyogRU5BQkxFKENVU1RPTV9TQ0hFTUVfSEFORExFUikgJiYgRU5BQkxFKE5B
VklHQVRPUl9DT05URU5UX1VUSUxTKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fbmF2aWdhdG9y
X3VucmVnaXN0ZXJfcHJvdG9jb2xfaGFuZGxlcihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYsIGNv
bnN0IGdjaGFyKiBzY2hlbWUsIGNvbnN0IGdjaGFyKiB1cmwsIEdFcnJvcioqIGVycm9yKQorewor
I2lmIEVOQUJMRShDVVNUT01fU0NIRU1FX0hBTkRMRVIpICYmIEVOQUJMRShOQVZJR0FUT1JfQ09O
VEVOVF9VVElMUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChzY2hlbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJsKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpOYXZp
Z2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkU2NoZW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSk7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVXJsID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHVybCk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yQ29udGVudFV0
aWxzOjp1bnJlZ2lzdGVyUHJvdG9jb2xIYW5kbGVyKCppdGVtLCBjb252ZXJ0ZWRTY2hlbWUsIGNv
bnZlcnRlZFVybCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFVOVVNFRF9QQVJBTShzY2hlbWUpOworICAgIFVOVVNFRF9QQVJBTSh1cmwpOworICAgIFVOVVNF
RF9QQVJBTShlcnJvcik7CisjaWYgIUVOQUJMRShOQVZJR0FUT1JfQ09OVEVOVF9VVElMUykKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJOYXZpZ2F0b3IgQ29udGVudCBVdGls
cyIpCisjZW5kaWYKKyNpZiAhRU5BQkxFKENVU1RPTV9TQ0hFTUVfSEFORExFUikKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDdXN0b20gU2NoZW1lIEhhbmRsZXIiKQorI2Vu
ZGlmCisjZW5kaWYgLyogRU5BQkxFKENVU1RPTV9TQ0hFTUVfSEFORExFUikgJiYgRU5BQkxFKE5B
VklHQVRPUl9DT05URU5UX1VUSUxTKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX25hdmln
YXRvcl92aWJyYXRlKFdlYktpdERPTU5hdmlnYXRvciogc2VsZiwgZ3Vsb25nIHRpbWUpCit7Cisj
aWYgRU5BQkxFKFZJQlJBVElPTikKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Io
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gV2ViQ29yZTo6TmF2aWdhdG9yVmlicmF0
aW9uOjp2aWJyYXRlKCppdGVtLCB0aW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpYnJhdGlvbiIpCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklCUkFUSU9OKSAqLworfQor
CitXZWJLaXRET01ET01QbHVnaW5BcnJheSogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3BsdWdp
bnMoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01QbHVnaW5BcnJheT4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBsdWdpbnMoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01ET01NaW1lVHlw
ZUFycmF5KiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbWltZV90eXBlcyhXZWJLaXRET01OYXZp
Z2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXk+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5taW1lVHlwZXMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX25hdmlnYXRvcl9n
ZXRfY29va2llX2VuYWJsZWQoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5h
dmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT5jb29raWVFbmFibGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0
RE9NQmF0dGVyeU1hbmFnZXIqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF93ZWJraXRfYmF0dGVy
eShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVT
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKFdlYkNv
cmU6Ok5hdmlnYXRvckJhdHRlcnk6OndlYmtpdEJhdHRlcnkoKml0ZW0pKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJCYXR0ZXJ5IFN0
YXR1cyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKEJBVFRFUllfU1RBVFVTKSAq
LworfQorCitXZWJLaXRET01HZW9sb2NhdGlvbiogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2dl
b2xvY2F0aW9uKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyNpZiBFTkFCTEUoR0VPTE9D
QVRJT04pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoV2Vi
Q29yZTo6TmF2aWdhdG9yR2VvbG9jYXRpb246Omdlb2xvY2F0aW9uKCppdGVtKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiR2VvbG9j
YXRpb24iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShHRU9MT0NBVElPTikgKi8K
K30KKworV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbWVk
aWFfZGV2aWNlcyhXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6TWVkaWFEZXZpY2VzPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
V2ViQ29yZTo6TmF2aWdhdG9yTWVkaWFEZXZpY2VzOjptZWRpYURldmljZXMoKml0ZW0pKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJN
ZWRpYSBTdHJlYW0iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9TVFJF
QU0pICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2hhcmR3YXJlX2Nv
bmN1cnJlbmN5KFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyNpZiBFTkFCTEUoTkFWSUdB
VE9SX0hXQ09OQ1VSUkVOQ1kpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5oYXJkd2FyZUNvbmN1cnJlbmN5KCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk5hdmlnYXRvciBId2NvbmN1cnJlbmN5IikK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKE5B
VklHQVRPUl9IV0NPTkNVUlJFTkNZKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9uYXZpZ2F0
b3JfZ2V0X2FwcF9jb2RlX25hbWUoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2
aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmFwcENvZGVOYW1lKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfYXBwX25hbWUoV2ViS2l0
RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRP
UihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmFw
cE5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbmF2
aWdhdG9yX2dldF9hcHBfdmVyc2lvbihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpO
YXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXBwVmVyc2lvbigpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3BsYXRmb3JtKFdlYktp
dERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FU
T1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5w
bGF0Zm9ybSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9u
YXZpZ2F0b3JfZ2V0X3Byb2R1Y3QoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2
aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnByb2R1Y3QoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wcm9kdWN0X3N1YihXZWJLaXRE
T01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9S
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cHJv
ZHVjdFN1YigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9u
YXZpZ2F0b3JfZ2V0X3VzZXJfYWdlbnQoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnVzZXJBZ2VudCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3ZlbmRvcihXZWJLaXRE
T01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9S
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmVu
ZG9yKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmln
YXRvcl9nZXRfdmVuZG9yX3N1YihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZp
Z2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmVuZG9yU3ViKCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbGFuZ3VhZ2UoV2ViS2l0RE9N
TmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxhbmd1
YWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbmF2
aWdhdG9yX2dldF9vbl9saW5lKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpO
YXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+b25MaW5lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01OYXZpZ2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzBjMjAzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9y
LmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NTmF2aWdhdG9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NTmF2aWdhdG9yX2gK
KworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IgICAgICAgICAgICAod2Via2l0
X2RvbV9uYXZpZ2F0b3JfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9OQVZJR0FUT1Io
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX05BVklHQVRPUiwgV2ViS2l0RE9NTmF2aWdhdG9yKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9OQVZJR0FUT1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05BVklHQVRPUiwgV2ViS2l0RE9NTmF2aWdhdG9yQ2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX05BVklHQVRPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTkFWSUdBVE9SKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9OQVZJR0FUT1JfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX05BVklHQVRPUiwgV2ViS2l0RE9NTmF2
aWdhdG9yQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTU5hdmlnYXRvciB7CisgICAgV2ViS2l0
RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTmF2aWdh
dG9yQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF90eXBlKHZvaWQpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2phdmFfZW5hYmxlZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9uYXZpZ2F0b3JfamF2YV9lbmFibGVkKFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3N0b3JhZ2VfdXBkYXRlczoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3N0b3JhZ2VfdXBkYXRl
cyhXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdh
dG9yX3JlZ2lzdGVyX3Byb3RvY29sX2hhbmRsZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2
aWdhdG9yCisgKiBAc2NoZW1lOiBBICNnY2hhcgorICogQHVybDogQSAjZ2NoYXIKKyAqIEB0aXRs
ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX25hdmlnYXRvcl9yZWdpc3Rlcl9w
cm90b2NvbF9oYW5kbGVyKFdlYktpdERPTU5hdmlnYXRvciogc2VsZiwgY29uc3QgZ2NoYXIqIHNj
aGVtZSwgY29uc3QgZ2NoYXIqIHVybCwgY29uc3QgZ2NoYXIqIHRpdGxlLCBHRXJyb3IqKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfaXNfcHJvdG9jb2xfaGFuZGxlcl9y
ZWdpc3RlcmVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICogQHNjaGVtZTog
QSAjZ2NoYXIKKyAqIEB1cmw6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2lzX3Byb3RvY29sX2hhbmRsZXJfcmVn
aXN0ZXJlZChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYsIGNvbnN0IGdjaGFyKiBzY2hlbWUsIGNv
bnN0IGdjaGFyKiB1cmwsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25h
dmlnYXRvcl91bnJlZ2lzdGVyX3Byb3RvY29sX2hhbmRsZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTmF2aWdhdG9yCisgKiBAc2NoZW1lOiBBICNnY2hhcgorICogQHVybDogQSAjZ2NoYXIKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX25hdmlnYXRvcl91bnJlZ2lzdGVyX3Byb3RvY29sX2hhbmRs
ZXIoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmLCBjb25zdCBnY2hhciogc2NoZW1lLCBjb25zdCBn
Y2hhciogdXJsLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0
b3JfdmlicmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqIEB0aW1lOiBB
ICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9uYXZpZ2F0b3Jf
dmlicmF0ZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYsIGd1bG9uZyB0aW1lKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcGx1Z2luczoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TURPTVBsdWdpbkFycmF5CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTURPTVBsdWdpbkFycmF5Kgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Bs
dWdpbnMoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25h
dmlnYXRvcl9nZXRfbWltZV90eXBlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTU1pbWVUeXBl
QXJyYXkKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NRE9NTWltZVR5cGVBcnJheSoKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9taW1lX3R5cGVz
KFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0
b3JfZ2V0X2Nvb2tpZV9lbmFibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfY29va2ll
X2VuYWJsZWQoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X25hdmlnYXRvcl9nZXRfd2Via2l0X2JhdHRlcnk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2
aWdhdG9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01CYXR0
ZXJ5TWFuYWdlcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01CYXR0ZXJ5TWFuYWdlcioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF93ZWJraXRf
YmF0dGVyeShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bmF2aWdhdG9yX2dldF9nZW9sb2NhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0
b3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUdlb2xvY2F0
aW9uCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUdlb2xvY2F0aW9uKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2dlb2xvY2F0aW9uKFdlYktp
dERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0
X21lZGlhX2RldmljZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01NZWRpYURldmljZXMKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTWVkaWFEZXZp
Y2VzKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X21lZGlhX2RldmljZXMoV2ViS2l0RE9NTmF2
aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfaGFyZHdh
cmVfY29uY3VycmVuY3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICog
UmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfaGFyZHdhcmVfY29uY3Vy
cmVuY3koV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25h
dmlnYXRvcl9nZXRfYXBwX2NvZGVfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0
b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9hcHBfY29k
ZV9uYW1lKFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9u
YXZpZ2F0b3JfZ2V0X2FwcF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2FwcF9uYW1lKFdl
YktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3Jf
Z2V0X2FwcF92ZXJzaW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2FwcF92ZXJzaW9uKFdlYktp
dERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0
X3BsYXRmb3JtOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3BsYXRmb3JtKFdlYktpdERPTU5hdmln
YXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Byb2R1Y3Q6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvZHVjdChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wcm9kdWN0X3N1YjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fbmF2aWdhdG9yX2dldF9wcm9kdWN0X3N1YihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF91c2VyX2FnZW50OgorICogQHNlbGY6
IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9u
YXZpZ2F0b3JfZ2V0X3VzZXJfYWdlbnQoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdmVuZG9yOgorICogQHNlbGY6IEEgI1dlYktp
dERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3Jf
Z2V0X3ZlbmRvcihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fbmF2aWdhdG9yX2dldF92ZW5kb3Jfc3ViOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmln
YXRvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3ZlbmRv
cl9zdWIoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25h
dmlnYXRvcl9nZXRfbGFuZ3VhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbGFuZ3VhZ2UoV2Vi
S2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9n
ZXRfb25fbGluZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1
cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X29uX2xpbmUoV2ViS2l0RE9N
TmF2aWdhdG9yKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTU5hdmlnYXRvcl9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRv
ck1lZGlhRGV2aWNlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVh
MmYyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcApA
QCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRl
bGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGFu
ZAorICAgIFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgYXJlIGNyZWF0ZWQgZm9y
IE5hdmlnYXRvck1lZGlhRGV2aWNlcy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVp
bGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01OYXZpZ2F0b3JNZWRp
YURldmljZXMuaCBhbmQKKyAgICBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwIGF0
IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0
b3JNZWRpYURldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEy
ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuaApAQCAt
MCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwg
YnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGFuZAor
ICAgIFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgYXJlIGNyZWF0ZWQgZm9yIE5h
dmlnYXRvck1lZGlhRGV2aWNlcy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQg
c2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURl
dmljZXMuaCBhbmQKKyAgICBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwIGF0IGV2
ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU5hdmlnYXRvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjY3OWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU5hdmlnYXRvclByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTU5hdmlnYXRvclBy
aXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvTmF2aWdhdG9yLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5hdmln
YXRvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU5hdmlnYXRvciogd3JhcE5h
dmlnYXRvcihXZWJDb3JlOjpOYXZpZ2F0b3IqKTsKK1dlYktpdERPTU5hdmlnYXRvcioga2l0KFdl
YkNvcmU6Ok5hdmlnYXRvciopOworV2ViQ29yZTo6TmF2aWdhdG9yKiBjb3JlKFdlYktpdERPTU5h
dmlnYXRvciopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01O
YXZpZ2F0b3JQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5v
ZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MjcyYWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU5vZGUuY3BwCkBAIC0wLDAgKzEsNzMzIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NTm9kZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Ob2RlVW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9HRVRfUFJJVkFU
RShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9O
T0RFLCBXZWJLaXRET01Ob2RlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5v
ZGVQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gY29yZU9iamVjdDsKK30gV2Vi
S2l0RE9NTm9kZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Ob2Rl
KiBraXQoV2ViQ29yZTo6Tm9kZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX05PREUocmV0KTsKKworICAgIHJldHVybiB3cmFw
KG9iaik7Cit9CisKK1dlYkNvcmU6Ok5vZGUqIGNvcmUoV2ViS2l0RE9NTm9kZSogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01O
b2RlKiB3cmFwTm9kZShXZWJDb3JlOjpOb2RlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfTk9ERSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
bm9kZV9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRE
T01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBj
b3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6Tm9kZSogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6Ok5vZGUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX25vZGVfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6Tm9kZSogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUs
IGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9u
b2RlX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQoreworICAgIFdlYkNvcmU6Ok5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOb2RlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0
dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJL
aXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZl
bnQgPSB3ZWJraXRfZG9tX25vZGVfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21fbm9kZV9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfZXZlbnRf
bGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTU5vZGUsIHdl
YmtpdF9kb21fbm9kZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJG
QUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OT0RFX05BTUUsCisgICAg
UFJPUF9OT0RFX1ZBTFVFLAorICAgIFBST1BfTk9ERV9UWVBFLAorICAgIFBST1BfUEFSRU5UX05P
REUsCisgICAgUFJPUF9DSElMRF9OT0RFUywKKyAgICBQUk9QX0ZJUlNUX0NISUxELAorICAgIFBS
T1BfTEFTVF9DSElMRCwKKyAgICBQUk9QX1BSRVZJT1VTX1NJQkxJTkcsCisgICAgUFJPUF9ORVhU
X1NJQkxJTkcsCisgICAgUFJPUF9PV05FUl9ET0NVTUVOVCwKKyAgICBQUk9QX0JBU0VfVVJJLAor
ICAgIFBST1BfVEVYVF9DT05URU5ULAorICAgIFBST1BfSVNfQ09OTkVDVEVELAorICAgIFBST1Bf
UEFSRU5UX0VMRU1FTlQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU5vZGVQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9OT0RFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+
V2ViS2l0RE9NTm9kZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX25v
ZGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ub2RlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dERPTU5vZGUqIHNlbGYgPSBXRUJLSVRfRE9NX05PREUob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OT0RFX1ZBTFVFOgorICAgICAgICB3ZWJraXRf
ZG9tX25vZGVfc2V0X25vZGVfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwg
bnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URVhUX0NPTlRFTlQ6Cisg
ICAgICAgIHdlYmtpdF9kb21fbm9kZV9zZXRfdGV4dF9jb250ZW50KHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ub2RlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTU5v
ZGUqIHNlbGYgPSBXRUJLSVRfRE9NX05PREUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9OT0RFX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV9uYW1lKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05PREVfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV92YWx1ZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT0RFX1RZUEU6CisgICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV90eXBlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVF9OT0RFOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hJTERfTk9ERVM6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2Rlcyhz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GSVJTVF9DSElMRDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X2ZpcnN0X2No
aWxkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBU1RfQ0hJTEQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9sYXN0
X2NoaWxkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BSRVZJT1VTX1NJ
QkxJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2Rl
X2dldF9wcmV2aW91c19zaWJsaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX05FWFRfU0lCTElORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9PV05FUl9ET0NVTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X293bmVyX2RvY3VtZW50KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0JBU0VfVVJJOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X2Jhc2VfdXJpKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1RFWFRfQ09OVEVOVDoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dldF90ZXh0X2NvbnRlbnQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSVNfQ09OTkVDVEVEOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X2lzX2Nvbm5lY3RlZChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVJFTlRfRUxFTUVOVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVu
dF9lbGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX25vZGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGll
c0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7Cisg
ICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ub2RlX3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29u
c3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01Ob2RlUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fTk9ERV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3Qg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX25vZGVfY2xhc3NfaW5pdChXZWJLaXRET01Ob2RlQ2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTU5vZGVQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5j
b25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbm9kZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9ub2RlX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9ub2RlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfTk9ERV9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgIm5vZGUtbmFtZSIsCisgICAgICAgICAgICAiTm9kZTpub2RlLW5hbWUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTm9kZTpub2RlLW5hbWUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9OT0RFX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgIm5vZGUtdmFsdWUiLAorICAgICAgICAgICAgIk5vZGU6bm9kZS12YWx1ZSIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogTm9kZTpub2RlLXZhbHVlIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX05PREVfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAg
ICAgICAibm9kZS10eXBlIiwKKyAgICAgICAgICAgICJOb2RlOm5vZGUtdHlwZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1c2hvcnQgTm9kZTpub2RlLXR5cGUiLAorICAgICAgICAgICAgMCwg
R19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfUEFSRU5UX05PREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAicGFyZW50LW5vZGUiLAorICAgICAgICAgICAgIk5vZGU6cGFyZW50LW5v
ZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBOb2RlOnBhcmVudC1u
b2RlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hJTERfTk9ERVMsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY2hpbGQtbm9kZXMiLAor
ICAgICAgICAgICAgIk5vZGU6Y2hpbGQtbm9kZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBX
ZWJLaXRET01Ob2RlTGlzdCogTm9kZTpjaGlsZC1ub2RlcyIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfTk9ERV9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfRklSU1RfQ0hJTEQsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAiZmlyc3QtY2hpbGQiLAorICAgICAgICAgICAgIk5vZGU6Zmly
c3QtY2hpbGQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBOb2RlOmZp
cnN0LWNoaWxkIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFTVF9DSElM
RCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJsYXN0LWNoaWxk
IiwKKyAgICAgICAgICAgICJOb2RlOmxhc3QtY2hpbGQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBXZWJLaXRET01Ob2RlKiBOb2RlOmxhc3QtY2hpbGQiLAorICAgICAgICAgICAgV0VCS0lUX0RP
TV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9QUkVWSU9VU19TSUJMSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgInByZXZpb3VzLXNpYmxpbmciLAorICAgICAgICAgICAgIk5vZGU6
cHJldmlvdXMtc2libGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUq
IE5vZGU6cHJldmlvdXMtc2libGluZyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9E
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX05FWFRfU0lCTElORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJuZXh0LXNpYmxpbmciLAorICAgICAgICAgICAgIk5vZGU6bmV4dC1zaWJsaW5nIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogTm9kZTpuZXh0LXNpYmxpbmciLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PV05FUl9ET0NVTUVOVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJvd25lci1kb2N1bWVudCIsCisg
ICAgICAgICAgICAiTm9kZTpvd25lci1kb2N1bWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTURvY3VtZW50KiBOb2RlOm93bmVyLWRvY3VtZW50IiwKKyAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9ET0NVTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0JBU0VfVVJJLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImJhc2UtdXJpIiwKKyAgICAgICAgICAgICJOb2RlOmJhc2Ut
dXJpIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5vZGU6YmFzZS11cmkiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9URVhUX0NPTlRFTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAidGV4dC1jb250ZW50IiwKKyAgICAgICAgICAgICJOb2RlOnRleHQtY29u
dGVudCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogTm9kZTp0ZXh0LWNvbnRlbnQi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfSVNfQ09OTkVDVEVELAorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym9vbGVhbigKKyAgICAgICAgICAgICJpcy1jb25uZWN0ZWQiLAorICAgICAgICAgICAgIk5vZGU6
aXMtY29ubmVjdGVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gTm9kZTppcy1j
b25uZWN0ZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVJFTlRfRUxFTUVOVCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwYXJlbnQtZWxlbWVudCIsCisgICAg
ICAgICAgICAiTm9kZTpwYXJlbnQtZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTUVsZW1lbnQqIE5vZGU6cGFyZW50LWVsZW1lbnQiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfaW5pdChXZWJLaXRET01Ob2RlKiBy
ZXF1ZXN0KQoreworICAgIFdlYktpdERPTU5vZGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9O
T0RFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTm9kZVBy
aXZhdGUoKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZv
cmUoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV3Q2hpbGQsIFdlYktpdERP
TU5vZGUqIHJlZkNoaWxkLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUobmV3Q2hpbGQpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghcmVmQ2hp
bGQgfHwgV0VCS0lUX0RPTV9JU19OT0RFKHJlZkNoaWxkKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTmV3Q2hp
bGQgPSBXZWJLaXQ6OmNvcmUobmV3Q2hpbGQpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRl
ZFJlZkNoaWxkID0gV2ViS2l0Ojpjb3JlKHJlZkNoaWxkKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBib29sIG9rID0gaXRlbS0+aW5zZXJ0QmVmb3JlKCpjb252ZXJ0
ZWROZXdDaGlsZCwgY29udmVydGVkUmVmQ2hpbGQsIGVjKTsKKyAgICBpZiAob2spCisgICAgICAg
IHJldHVybiBXZWJLaXQ6OmtpdChjb252ZXJ0ZWROZXdDaGlsZCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtp
dF9kb21fbm9kZV9yZXBsYWNlX2NoaWxkKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERPTU5v
ZGUqIG5ld0NoaWxkLCBXZWJLaXRET01Ob2RlKiBvbGRDaGlsZCwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5ld0NoaWxkKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG9sZENoaWxkKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5v
ZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVy
dGVkTmV3Q2hpbGQgPSBXZWJLaXQ6OmNvcmUobmV3Q2hpbGQpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZE9sZENoaWxkID0gV2ViS2l0Ojpjb3JlKG9sZENoaWxkKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBib29sIG9rID0gaXRlbS0+cmVwbGFjZUNoaWxk
KCpjb252ZXJ0ZWROZXdDaGlsZCwgKmNvbnZlcnRlZE9sZENoaWxkLCBlYyk7CisgICAgaWYgKG9r
KQorICAgICAgICByZXR1cm4gV2ViS2l0OjpraXQoY29udmVydGVkT2xkQ2hpbGQpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIHJldHVybiAwOworfQorCitXZWJLaXRET01O
b2RlKiB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkKFdlYktpdERPTU5vZGUqIHNlbGYsIFdl
YktpdERPTU5vZGUqIG9sZENoaWxkLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREUob2xkQ2hpbGQpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRPbGRDaGlsZCA9IFdlYktp
dDo6Y29yZShvbGRDaGlsZCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgYm9vbCBvayA9IGl0ZW0tPnJlbW92ZUNoaWxkKCpjb252ZXJ0ZWRPbGRDaGlsZCwgZWMpOwor
ICAgIGlmIChvaykKKyAgICAgICAgcmV0dXJuIFdlYktpdDo6a2l0KGNvbnZlcnRlZE9sZENoaWxk
KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKwor
V2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2FwcGVuZF9jaGlsZChXZWJLaXRET01Ob2Rl
KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBuZXdDaGlsZCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5ld0NoaWxkKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTmV3Q2hp
bGQgPSBXZWJLaXQ6OmNvcmUobmV3Q2hpbGQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGJvb2wgb2sgPSBpdGVtLT5hcHBlbmRDaGlsZCgqY29udmVydGVkTmV3Q2hp
bGQsIGVjKTsKKyAgICBpZiAob2spCisgICAgICAgIHJldHVybiBXZWJLaXQ6OmtpdChjb252ZXJ0
ZWROZXdDaGlsZCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV2ViS2l0
RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNDaGlsZE5vZGVzKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2Nsb25lX25vZGVfd2l0
aF9lcnJvcihXZWJLaXRET01Ob2RlKiBzZWxmLCBnYm9vbGVhbiBkZWVwLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6Tm9k
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmNsb25lTm9kZUZvckJpbmRpbmdzKGRlZXAsIGVjKSk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX25vZGVfbm9ybWFsaXplKFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19OT0RFKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPm5vcm1hbGl6ZSgpOworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX25vZGVfaXNfc3VwcG9ydGVkKFdlYktpdERPTU5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiBm
ZWF0dXJlLCBjb25zdCBnY2hhciogdmVyc2lvbikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OT0RFKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZmVhdHVyZSwg
RkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHZlcnNpb24sIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZEZlYXR1cmUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZmVhdHVyZSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmVyc2lvbiA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2ZXJz
aW9uKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc1N1cHBvcnRlZEZvckJpbmRpbmdz
KGNvbnZlcnRlZEZlYXR1cmUsIGNvbnZlcnRlZFZlcnNpb24pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV2ViS2l0RE9NTm9k
ZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogb3RoZXIpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTk9ERShzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTk9ERShvdGhlciksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE90aGVyID0gV2Vi
S2l0Ojpjb3JlKG90aGVyKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc1NhbWVOb2Rl
KGNvbnZlcnRlZE90aGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX25vZGVfaXNfZXF1YWxfbm9kZShXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01O
b2RlKiBvdGhlcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCBGQUxT
RSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG90aGVyKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkT3RoZXIgPSBXZWJLaXQ6OmNvcmUob3RoZXIpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmlzRXF1YWxOb2RlKGNvbnZlcnRlZE90aGVyKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9ub2RlX2xvb2t1cF9w
cmVmaXgoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChuYW1lc3BhY2VVUkksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJ
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bG9va3VwUHJlZml4KGNvbnZlcnRlZE5hbWVz
cGFjZVVSSSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25v
ZGVfbG9va3VwX25hbWVzcGFjZV91cmkoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIq
IHByZWZpeCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChwcmVmaXgsIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHJlZml4
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHByZWZpeCk7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bG9va3VwTmFtZXNwYWNlVVJJKGNvbnZlcnRlZFByZWZp
eCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbm9kZV9p
c19kZWZhdWx0X25hbWVzcGFjZShXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogbmFt
ZXNwYWNlVVJJKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIEZBTFNF
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lc3BhY2VVUkksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VV
UkkpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmlzRGVmYXVsdE5hbWVzcGFjZShjb252
ZXJ0ZWROYW1lc3BhY2VVUkkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1c2hvcnQgd2Vi
a2l0X2RvbV9ub2RlX2NvbXBhcmVfZG9jdW1lbnRfcG9zaXRpb24oV2ViS2l0RE9NTm9kZSogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogb3RoZXIpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9E
RShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RF
KG90aGVyKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRPdGhlciA9IFdlYktpdDo6Y29yZShvdGhl
cik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVtLT5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigq
Y29udmVydGVkT3RoZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fbm9kZV9jb250YWlucyhXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBv
dGhlcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCBGQUxTRSk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG90aGVyKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6Tm9kZSogY29udmVydGVkT3RoZXIgPSBXZWJLaXQ6OmNvcmUob3RoZXIpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNvbnRhaW5zKGNvbnZlcnRlZE90aGVyKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUoV2Vi
S2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5vZGVOYW1lKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVf
dmFsdWUoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19O
T0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5vZGVW
YWx1ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fbm9kZV9z
ZXRfbm9kZV92YWx1ZShXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvcik7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0
Tm9kZVZhbHVlKGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitndXNob3J0IHdlYmtpdF9k
b21fbm9kZV9nZXRfbm9kZV90eXBlKFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPm5vZGVUeXBl
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9u
b2RlX2dldF9wYXJlbnRfbm9kZShXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wYXJlbnROb2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtp
dF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNoaWxkTm9kZXMoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2Rl
KiB3ZWJraXRfZG9tX25vZGVfZ2V0X2ZpcnN0X2NoaWxkKFdlYktpdERPTU5vZGUqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9k
ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZpcnN0Q2hpbGQoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01O
b2RlKiB3ZWJraXRfZG9tX25vZGVfZ2V0X2xhc3RfY2hpbGQoV2ViS2l0RE9NTm9kZSogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpO
b2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bGFzdENoaWxkKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9N
Tm9kZSogd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdlYktpdERPTU5vZGUq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnByZXZpb3VzU2li
bGluZygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nKFdlYktp
dERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5l
eHRTaWJsaW5nKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworV2ViS2l0RE9NRG9jdW1lbnQqIHdlYmtpdF9kb21fbm9kZV9nZXRfb3duZXJfZG9j
dW1lbnQoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19O
T0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPm93bmVyRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9ub2RlX2dldF9iYXNl
X3VyaShXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05P
REUoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YmFzZVVS
SSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9ub2RlX2dl
dF90ZXh0X2NvbnRlbnQoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPnRleHRDb250ZW50KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9ub2RlX3NldF90ZXh0X2NvbnRlbnQoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPnNldFRleHRDb250ZW50KGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX25vZGVfZ2V0X2lzX2Nvbm5lY3RlZChXZWJLaXRET01Ob2RlKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmluRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitX
ZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9lbGVtZW50KFdlYktp
dERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PnBhcmVudEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YmJlYmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU5vZGUuaApAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NTm9k
ZV9oCisjZGVmaW5lIFdlYktpdERPTU5vZGVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9OT0RFICAgICAgICAgICAgKHdlYmtpdF9kb21fbm9kZV9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX05PREUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX05PREUsIFdlYktpdERPTU5vZGUpKQor
I2RlZmluZSBXRUJLSVRfRE9NX05PREVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05PREUsIFdlYktpdERPTU5vZGVDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OT0RFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9OT0RFKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19OT0RFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9OT0RFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9OT0RFLCBXZWJLaXRET01Ob2RlQ2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01f
Tk9ERV9FTEVNRU5UX05PREU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0VMRU1FTlRf
Tk9ERSAxCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0FUVFJJQlVURV9OT0RFOgorICovCisj
ZGVmaW5lIFdFQktJVF9ET01fTk9ERV9BVFRSSUJVVEVfTk9ERSAyCisKKy8qKgorICogV0VCS0lU
X0RPTV9OT0RFX1RFWFRfTk9ERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfVEVYVF9O
T0RFIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfQ0RBVEFfU0VDVElPTl9OT0RFOgorICov
CisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9DREFUQV9TRUNUSU9OX05PREUgNAorCisvKioKKyAq
IFdFQktJVF9ET01fTk9ERV9FTlRJVFlfUkVGRVJFTkNFX05PREU6CisgKi8KKyNkZWZpbmUgV0VC
S0lUX0RPTV9OT0RFX0VOVElUWV9SRUZFUkVOQ0VfTk9ERSA1CisKKy8qKgorICogV0VCS0lUX0RP
TV9OT0RFX0VOVElUWV9OT0RFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9FTlRJVFlf
Tk9ERSA2CisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT05f
Tk9ERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfUFJPQ0VTU0lOR19JTlNUUlVDVElP
Tl9OT0RFIDcKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfQ09NTUVOVF9OT0RFOgorICovCisj
ZGVmaW5lIFdFQktJVF9ET01fTk9ERV9DT01NRU5UX05PREUgOAorCisvKioKKyAqIFdFQktJVF9E
T01fTk9ERV9ET0NVTUVOVF9OT0RFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9ET0NV
TUVOVF9OT0RFIDkKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfVFlQRV9OT0RF
OgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9UWVBFX05PREUgMTAKKwor
LyoqCisgKiBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAxMQorCisvKioKKyAq
IFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQ6CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCAweDAx
CisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORzoK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5H
IDB4MDIKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9X
SU5HOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9GT0xM
T1dJTkcgMHgwNAorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9D
T05UQUlOUzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05f
Q09OVEFJTlMgMHgwOAorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElP
Tl9DT05UQUlORURfQlk6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BP
U0lUSU9OX0NPTlRBSU5FRF9CWSAweDEwCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VN
RU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDOgorICovCisjZGVmaW5lIFdFQktJ
VF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQyAweDIw
CisKK3N0cnVjdCBfV2ViS2l0RE9NTm9kZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTm9kZUNsYXNzIHsKKyAgICBXZWJLaXRE
T01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX25vZGVfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2lu
c2VydF9iZWZvcmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG5ld0NoaWxkOiBB
ICNXZWJLaXRET01Ob2RlCisgKiBAcmVmQ2hpbGQ6IChhbGxvdy1ub25lKTogQSAjV2ViS2l0RE9N
Tm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtp
dF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERPTU5v
ZGUqIG5ld0NoaWxkLCBXZWJLaXRET01Ob2RlKiByZWZDaGlsZCwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9yZXBsYWNlX2NoaWxkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTU5vZGUKKyAqIEBuZXdDaGlsZDogQSAjV2ViS2l0RE9NTm9kZQorICogQG9sZENoaWxk
OiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Ob2RlKgord2Via2l0X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQoV2ViS2l0RE9NTm9kZSogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogbmV3Q2hpbGQsIFdlYktpdERPTU5vZGUqIG9sZENoaWxkLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX3JlbW92ZV9jaGlsZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb2xkQ2hpbGQ6IEEgI1dlYktpdERPTU5vZGUK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9t
X25vZGVfcmVtb3ZlX2NoaWxkKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG9s
ZENoaWxkLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2FwcGVu
ZF9jaGlsZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAbmV3Q2hpbGQ6IEEgI1dl
YktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUq
Cit3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktp
dERPTU5vZGUqIG5ld0NoaWxkLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ub2RlX2hhc19jaGlsZF9ub2RlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZV93aXRoX2Vycm9yOgorICogQHNlbGY6IEEgI1dl
YktpdERPTU5vZGUKKyAqIEBkZWVwOiBBICNnYm9vbGVhbgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisgKgorICog
U2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9u
b2RlX2Nsb25lX25vZGVfd2l0aF9lcnJvcihXZWJLaXRET01Ob2RlKiBzZWxmLCBnYm9vbGVhbiBk
ZWVwLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX25vcm1hbGl6
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fbm9kZV9ub3JtYWxpemUoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9ub2RlX2lzX3N1cHBvcnRlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01O
b2RlCisgKiBAZmVhdHVyZTogQSAjZ2NoYXIKKyAqIEB2ZXJzaW9uOiBBICNnY2hhcgorICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21fbm9kZV9pc19zdXBwb3J0ZWQoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIGZl
YXR1cmUsIGNvbnN0IGdjaGFyKiB2ZXJzaW9uKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVf
aXNfc2FtZV9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBvdGhlcjogQSAj
V2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUoV2ViS2l0RE9NTm9kZSog
c2VsZiwgV2ViS2l0RE9NTm9kZSogb3RoZXIpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9p
c19lcXVhbF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBvdGhlcjogQSAj
V2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbm9kZV9pc19lcXVhbF9ub2RlKFdlYktpdERPTU5vZGUq
IHNlbGYsIFdlYktpdERPTU5vZGUqIG90aGVyKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVf
bG9va3VwX3ByZWZpeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAbmFtZXNwYWNl
VVJJOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX25vZGVfbG9va3VwX3ByZWZpeChXZWJLaXRET01Ob2RlKiBzZWxm
LCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVf
bG9va3VwX25hbWVzcGFjZV91cmk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQHBy
ZWZpeDogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9ub2RlX2xvb2t1cF9uYW1lc3BhY2VfdXJpKFdlYktpdERPTU5v
ZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiBwcmVmaXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9k
ZV9pc19kZWZhdWx0X25hbWVzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBA
bmFtZXNwYWNlVVJJOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8K
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbm9kZV9pc19kZWZhdWx0X25hbWVzcGFj
ZShXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX25vZGVfY29tcGFyZV9kb2N1bWVudF9wb3NpdGlvbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Ob2RlCisgKiBAb3RoZXI6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBS
ZXR1cm5zOiBBICNndXNob3J0CisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0X2RvbV9u
b2RlX2NvbXBhcmVfZG9jdW1lbnRfcG9zaXRpb24oV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0
RE9NTm9kZSogb3RoZXIpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9jb250YWluczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb3RoZXI6IEEgI1dlYktpdERPTU5vZGUKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX25vZGVfY29udGFpbnMoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSog
b3RoZXIpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV9uYW1lOgorICogQHNl
bGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUoV2ViS2l0RE9NTm9k
ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3ZhbHVlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3ZhbHVlKFdlYktpdERP
TU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9zZXRfbm9kZV92YWx1ZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9ub2RlX3Nl
dF9ub2RlX3ZhbHVlKFdlYktpdERPTU5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vy
cm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV90eXBlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0Cisq
Ki8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3R5cGUoV2Vi
S2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRf
bm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9k
ZSoKK3dlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUoV2ViS2l0RE9NTm9kZSogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlczoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJL
aXRET01Ob2RlTGlzdAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0
X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX25vZGVfZ2V0X2ZpcnN0X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERP
TU5vZGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9ub2RlX2dldF9maXJz
dF9jaGlsZChXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVf
Z2V0X2xhc3RfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfZ2V0X2xhc3RfY2hpbGQoV2ViS2l0RE9NTm9k
ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5n
OgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgor
d2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nKFdlYktpdERPTU5vZGUqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nOgorICogQHNlbGY6
IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dl
YktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9u
b2RlX2dldF9uZXh0X3NpYmxpbmcoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9ub2RlX2dldF9vd25lcl9kb2N1bWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01O
b2RlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50Kgord2Via2l0X2RvbV9ub2RlX2dl
dF9vd25lcl9kb2N1bWVudChXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX25vZGVfZ2V0X2Jhc2VfdXJpOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9u
b2RlX2dldF9iYXNlX3VyaShXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX25vZGVfZ2V0X3RleHRfY29udGVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fbm9kZV9nZXRfdGV4dF9jb250ZW50KFdlYktpdERPTU5vZGUqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fbm9kZV9zZXRfdGV4dF9jb250ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERP
TU5vZGUKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX25vZGVfc2V0X3RleHRfY29udGVudChXZWJLaXRE
T01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9lbGVtZW50OgorICogQHNlbGY6IEEgI1dl
YktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERP
TUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9u
b2RlX2dldF9wYXJlbnRfZWxlbWVudChXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdlYktpdERPTU5vZGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9k
ZUZpbHRlci5jcHAKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLmNwcApyZW5hbWUgdG8gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Ob2RlRmlsdGVyLmNwcAppbmRleCBkODBmZTcwLi44ZmU2ZWM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTm9kZUZpbHRlci5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlRmlsdGVyLmgiCiAKICNpbmNsdWRlICJHT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5o
IgotI2luY2x1ZGUgIk5hdGl2ZU5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05hdGl2
ZU5vZGVGaWx0ZXIuaD4KICNpbmNsdWRlICJXZWJLaXRET01Ob2RlLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0RE9NTm9kZUZpbHRlclByaXZhdGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAt
NzIsNyArNzIsNyBAQCBSZWZQdHI8V2ViQ29yZTo6Tm9kZUZpbHRlcj4gY29yZShXZWJLaXRET01O
b2RlRmlsdGVyKiBub2RlRmlsdGVyKQogCiAgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVGaWx0ZXI+
IGNvcmVOb2RlRmlsdGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZUZpbHRlcio+KGdfb2Jq
ZWN0X2dldF9kYXRhKEdfT0JKRUNUKG5vZGVGaWx0ZXIpLCAid2Via2l0LWNvcmUtbm9kZS1maWx0
ZXIiKSk7CiAgICAgaWYgKCFjb3JlTm9kZUZpbHRlcikgewotICAgICAgICBjb3JlTm9kZUZpbHRl
ciA9IFdlYkNvcmU6Ok5hdGl2ZU5vZGVGaWx0ZXI6OmNyZWF0ZShXZWJDb3JlOjpHT2JqZWN0Tm9k
ZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRlKG5vZGVGaWx0ZXIpKTsKKyAgICAgICAgY29yZU5vZGVG
aWx0ZXIgPSBXZWJDb3JlOjpOYXRpdmVOb2RlRmlsdGVyOjpjcmVhdGUoV2ViS2l0OjpHT2JqZWN0
Tm9kZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRlKG5vZGVGaWx0ZXIpKTsKICAgICAgICAgbm9kZUZp
bHRlck1hcCgpLmFkZChjb3JlTm9kZUZpbHRlci5nZXQoKSwgbm9kZUZpbHRlcik7CiAgICAgICAg
IGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKG5vZGVGaWx0ZXIpLCBub2RlRmlsdGVyT2JqZWN0
RGVzdHJveWVkQ2FsbGJhY2ssIGNvcmVOb2RlRmlsdGVyLmdldCgpKTsKICAgICAgICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1Qobm9kZUZpbHRlciksICJ3ZWJraXQtY29yZS1ub2RlLWZpbHRl
ciIsIGNvcmVOb2RlRmlsdGVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmlsdGVyLmgK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVGaWx0ZXIu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01O
b2RlRmlsdGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmlsdGVyUHJpdmF0ZS5oCnNpbWlsYXJpdHkg
aW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTU5vZGVGaWx0ZXJQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUZpbHRlclByaXZh
dGUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlSXRlcmF0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MzEyYzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRvci5jcHAKQEAgLTAsMCArMSwyNjYgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Ob2RlSXRlcmF0b3IuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlRmlsdGVy
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVJdGVyYXRvclByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX05P
REVfSVRFUkFUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfTk9ERV9JVEVSQVRPUiwgV2ViS2l0RE9NTm9kZUl0ZXJhdG9y
UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5vZGVJdGVyYXRvclByaXZhdGUg
eworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlSXRlcmF0b3I+IGNvcmVPYmplY3Q7Cit9IFdlYktp
dERPTU5vZGVJdGVyYXRvclByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01Ob2RlSXRlcmF0b3IqIGtpdChXZWJDb3JlOjpOb2RlSXRlcmF0b3IqIG9iaikKK3sKKyAgICBp
ZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9N
T2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFX0lU
RVJBVE9SKHJldCk7CisKKyAgICByZXR1cm4gd3JhcE5vZGVJdGVyYXRvcihvYmopOworfQorCitX
ZWJDb3JlOjpOb2RlSXRlcmF0b3IqIGNvcmUoV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZUl0ZXJh
dG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiB3cmFwTm9kZUl0ZXJhdG9yKFdlYkNvcmU6Ok5vZGVJdGVy
YXRvciogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fTk9ERV9JVEVSQVRPUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX05P
REVfSVRFUkFUT1IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTm9kZUl0ZXJh
dG9yLCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3IsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1JPT1QsCisgICAgUFJPUF9XSEFUX1RPX1NI
T1csCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJPUF9SRUZFUkVOQ0VfTk9ERSwKKyAgICBQUk9Q
X1BPSU5URVJfQkVGT1JFX1JFRkVSRU5DRV9OT0RFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9ub2RlX2l0ZXJhdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRET01Ob2RlSXRlcmF0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OT0RFX0lURVJBVE9S
X0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3Jn
ZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NTm9kZUl0
ZXJhdG9yUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbm9kZV9pdGVy
YXRvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmID0gV0VCS0lUX0RPTV9OT0RFX0lURVJBVE9SKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUk9PVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0
b3JfZ2V0X3Jvb3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0hBVF9U
T19TSE9XOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9ub2Rl
X2l0ZXJhdG9yX2dldF93aGF0X3RvX3Nob3coc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRklMVEVSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfZmlsdGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1JFRkVSRU5DRV9OT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcmVmZXJlbmNlX25vZGUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9JTlRFUl9CRUZPUkVfUkVGRVJFTkNF
X05PREU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fbm9k
ZV9pdGVyYXRvcl9nZXRfcG9pbnRlcl9iZWZvcmVfcmVmZXJlbmNlX25vZGUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9jb25z
dHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmpl
Y3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBv
YmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTU5vZGVJdGVyYXRvclByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX05PREVfSVRFUkFUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKj4oV0VCS0lU
X0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RD
YWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4g
b2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfY2xhc3Nf
aW5pdChXZWJLaXRET01Ob2RlSXRlcmF0b3JDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3Ig
PSB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9maW5hbGl6ZTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUk9PVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJyb290IiwKKyAgICAgICAgICAgICJOb2RlSXRlcmF0b3I6cm9v
dCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIE5vZGVJdGVyYXRvcjpy
b290IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0hBVF9UT19TSE9XLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAid2hhdC10by1zaG93IiwK
KyAgICAgICAgICAgICJOb2RlSXRlcmF0b3I6d2hhdC10by1zaG93IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3Vsb25nIE5vZGVJdGVyYXRvcjp3aGF0LXRvLXNob3ciLAorICAgICAgICAgICAg
MCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0ZJTFRFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJmaWx0ZXIiLAorICAgICAgICAgICAgIk5vZGVJdGVyYXRvcjpmaWx0ZXIi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlRmlsdGVyKiBOb2RlSXRlcmF0
b3I6ZmlsdGVyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFX0ZJTFRFUiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JF
RkVSRU5DRV9OT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
InJlZmVyZW5jZS1ub2RlIiwKKyAgICAgICAgICAgICJOb2RlSXRlcmF0b3I6cmVmZXJlbmNlLW5v
ZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBOb2RlSXRlcmF0b3I6
cmVmZXJlbmNlLW5vZGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QT0lO
VEVSX0JFRk9SRV9SRUZFUkVOQ0VfTk9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAicG9pbnRlci1iZWZvcmUtcmVmZXJlbmNlLW5vZGUiLAorICAgICAgICAg
ICAgIk5vZGVJdGVyYXRvcjpwb2ludGVyLWJlZm9yZS1yZWZlcmVuY2Utbm9kZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdib29sZWFuIE5vZGVJdGVyYXRvcjpwb2ludGVyLWJlZm9yZS1yZWZl
cmVuY2Utbm9kZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRv
cl9pbml0KFdlYktpdERPTU5vZGVJdGVyYXRvciogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01O
b2RlSXRlcmF0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OT0RFX0lURVJBVE9SX0dFVF9Q
UklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJp
dmF0ZSgpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfbmV4
dF9ub2RlKFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUihzZWxmKSwgMCk7CisgICAgVU5V
U0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpOb2RlSXRlcmF0b3IqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5uZXh0Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9k
ZV9pdGVyYXRvcl9wcmV2aW91c19ub2RlKFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZiwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUihz
ZWxmKSwgMCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpOb2RlSXRl
cmF0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wcmV2aW91c05vZGUoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdl
YmtpdF9kb21fbm9kZV9pdGVyYXRvcl9kZXRhY2goV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUihzZWxmKSk7CisgICAgV2Vi
Q29yZTo6Tm9kZUl0ZXJhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PmRldGFjaCgpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3Jf
Z2V0X3Jvb3QoV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREVfSVRFUkFUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGVJdGVy
YXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9k
ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJvb3QoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9ub2RlX2l0ZXJhdG9yX2dldF93aGF0X3RvX3Nob3coV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREVfSVRFUkFUT1Ioc2VsZiksIDAp
OworICAgIFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+d2hhdFRvU2hvdygpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1dlYktpdERPTU5vZGVGaWx0ZXIqIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9n
ZXRfZmlsdGVyKFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFX0lURVJBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlSXRl
cmF0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGVGaWx0ZXI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5maWx0ZXIoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3JlZmVyZW5jZV9ub2RlKFdlYktp
dERPTU5vZGVJdGVyYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RF
X0lURVJBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlSXRlcmF0b3IqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yZWZlcmVuY2VOb2RlKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9u
b2RlX2l0ZXJhdG9yX2dldF9wb2ludGVyX2JlZm9yZV9yZWZlcmVuY2Vfbm9kZShXZWJLaXRET01O
b2RlSXRlcmF0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERV9JVEVS
QVRPUihzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5wb2ludGVyQmVm
b3JlUmVmZXJlbmNlTm9kZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTm9kZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDQ3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5v
ZGVJdGVyYXRvci5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01Ob2Rl
SXRlcmF0b3JfaAorI2RlZmluZSBXZWJLaXRET01Ob2RlSXRlcmF0b3JfaAorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9OT0RFX0lURVJBVE9SICAgICAgICAgICAgKHdlYmtp
dF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX05PREVf
SVRFUkFUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX05PREVfSVRFUkFUT1IsIFdlYktpdERPTU5vZGVJdGVyYXRvcikp
CisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9JVEVSQVRPUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9JVEVSQVRP
UiwgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTk9E
RV9JVEVSQVRPUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfTk9ERV9JVEVSQVRPUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
Tk9ERV9JVEVSQVRPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9JVEVSQVRPUikpCisjZGVmaW5lIFdFQktJVF9ET01f
Tk9ERV9JVEVSQVRPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9JVEVSQVRPUiwgV2ViS2l0RE9NTm9kZUl0ZXJh
dG9yQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTU5vZGVJdGVyYXRvciB7CisgICAgV2ViS2l0
RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTm9kZUl0
ZXJhdG9yQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfdHlwZSh2
b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfbmV4dF9ub2RlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTU5vZGVJdGVyYXRvcgorICogQGVycm9yOiAjR0Vycm9yCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9uZXh0X25vZGUo
V2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX3ByZXZpb3VzX25vZGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NTm9kZUl0ZXJhdG9yCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Ob2RlKgord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX3ByZXZpb3VzX25vZGUoV2ViS2l0RE9N
Tm9kZUl0ZXJhdG9yKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ub2RlX2l0ZXJhdG9yX2RldGFjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRlcmF0
b3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2Rl
dGFjaChXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bm9kZV9pdGVyYXRvcl9nZXRfcm9vdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRlcmF0
b3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dl
dF9yb290KFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ub2RlX2l0ZXJhdG9yX2dldF93aGF0X3RvX3Nob3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
Tm9kZUl0ZXJhdG9yCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8KK1dFQktJVF9BUEkg
Z3Vsb25nCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3doYXRfdG9fc2hvdyhXZWJLaXRE
T01Ob2RlSXRlcmF0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRv
cl9nZXRfZmlsdGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGVJdGVyYXRvcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9kZUZpbHRlcgorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTU5vZGVGaWx0ZXIqCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3Jf
Z2V0X2ZpbHRlcihXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcmVmZXJlbmNlX25vZGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NTm9kZUl0ZXJhdG9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNX
ZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21f
bm9kZV9pdGVyYXRvcl9nZXRfcmVmZXJlbmNlX25vZGUoV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3BvaW50ZXJfYmVm
b3JlX3JlZmVyZW5jZV9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGVJdGVyYXRvcgor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcG9pbnRlcl9iZWZvcmVfcmVmZXJlbmNlX25vZGUo
V2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdlYktpdERPTU5vZGVJdGVyYXRvcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRv
clByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjE5MGFlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJ
dGVyYXRvclByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTU5vZGVJdGVyYXRvclByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvTm9k
ZUl0ZXJhdG9yLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGVJdGVyYXRvci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU5vZGVJdGVyYXRvciogd3JhcE5vZGVJ
dGVyYXRvcihXZWJDb3JlOjpOb2RlSXRlcmF0b3IqKTsKK1dlYktpdERPTU5vZGVJdGVyYXRvciog
a2l0KFdlYkNvcmU6Ok5vZGVJdGVyYXRvciopOworV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBjb3Jl
KFdlYktpdERPTU5vZGVJdGVyYXRvciopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiBXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Tm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTZjYjVmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUxpc3QuY3Bw
CkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxpc3QuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJX
ZWJLaXRET01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfTElTVF9HRVRfUFJJVkFURShvYmopIEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9OT0RFX0xJU1Qs
IFdlYktpdERPTU5vZGVMaXN0UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5v
ZGVMaXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBjb3JlT2JqZWN0
OworfSBXZWJLaXRET01Ob2RlTGlzdFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01Ob2RlTGlzdCoga2l0KFdlYkNvcmU6Ok5vZGVMaXN0KiBvYmopCit7CisgICAgaWYg
KCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9i
amVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERV9MSVNU
KHJldCk7CisKKyAgICByZXR1cm4gd3JhcE5vZGVMaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6Ok5v
ZGVMaXN0KiBjb3JlKFdlYktpdERPTU5vZGVMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZUxpc3QqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01Ob2RlTGlzdCogd3Jh
cE5vZGVMaXN0KFdlYkNvcmU6Ok5vZGVMaXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFX0xJU1QoZ19vYmplY3RfbmV3
KFdFQktJVF9ET01fVFlQRV9OT0RFX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NTm9kZUxpc3QsIHdlYmtpdF9kb21fbm9kZV9saXN0LCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OT0RFX0xJ
U1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZv
cmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01Ob2Rl
TGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX25vZGVfbGlzdF9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX25vZGVfbGlzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01O
b2RlTGlzdCogc2VsZiA9IFdFQktJVF9ET01fTk9ERV9MSVNUKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVl
X3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9ub2RlX2xpc3RfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ub2RlX2xpc3RfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTU5vZGVMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fTk9ERV9MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGVMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2Jq
ZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYt
PmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfbGlzdF9jbGFzc19pbml0KFdlYktpdERPTU5vZGVM
aXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTU5vZGVMaXN0UHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9jb25z
dHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X25vZGVfbGlzdF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAg
ICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAg
ICAgICJOb2RlTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgTm9k
ZUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X25vZGVfbGlzdF9pbml0KFdlYktpdERPTU5vZGVMaXN0KiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTU5vZGVMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTk9ERV9MSVNUX0dFVF9QUklW
QVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlKCk7
Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0oV2ViS2l0RE9N
Tm9kZUxpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OT0RFX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGVMaXN0KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fbm9kZV9saXN0
X2dldF9sZW5ndGgoV2ViS2l0RE9NTm9kZUxpc3QqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTk9ERV9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlTGlzdCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3Ro
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlTGlzdC5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Ob2RlTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRm
YjA1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVMaXN0LmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
RE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25s
eSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2Vu
ZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NTm9kZUxpc3RfaAorI2RlZmluZSBXZWJLaXRET01Ob2Rl
TGlzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCAg
ICAgICAgICAgICh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX05PREVfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNULCBXZWJLaXRET01Ob2RlTGlzdCkp
CisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9MSVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9OT0RFX0xJU1QsIFdlYktp
dERPTU5vZGVMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTk9ERV9MSVNUKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9OT0RFX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX05PREVfTElTVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTk9E
RV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0xJU1RfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX05PREVfTElT
VCwgV2ViS2l0RE9NTm9kZUxpc3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NTm9kZUxpc3Qg
eworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTU5vZGVMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbm9kZV9saXN0X2dldF90
eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW06CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0oV2ViS2l0RE9NTm9kZUxp
c3QqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2xpc3Rf
Z2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlTGlzdAorICoKKyAqIFJldHVy
bnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9ub2RlX2xp
c3RfZ2V0X2xlbmd0aChXZWJLaXRET01Ob2RlTGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01Ob2RlTGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVM
aXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlTGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40YTQ4NWZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlTGlz
dFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTU5vZGVMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TU5vZGVMaXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL05vZGVMaXN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGVMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworV2ViS2l0RE9NTm9kZUxpc3QqIHdyYXBOb2RlTGlzdChXZWJDb3JlOjpOb2RlTGlzdCopOwor
V2ViS2l0RE9NTm9kZUxpc3QqIGtpdChXZWJDb3JlOjpOb2RlTGlzdCopOworV2ViQ29yZTo6Tm9k
ZUxpc3QqIGNvcmUoV2ViS2l0RE9NTm9kZUxpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLyogV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTm9kZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iNTNhMGMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlUHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NTm9kZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01Ob2RlUHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL05vZGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NTm9kZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU5vZGUqIHdy
YXBOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKK1dlYktpdERPTU5vZGUqIGtpdChXZWJDb3JlOjpOb2Rl
Kik7CitXZWJDb3JlOjpOb2RlKiBjb3JlKFdlYktpdERPTU5vZGUqKTsKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NTm9kZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Ob2RlVW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZVVuc3RhYmxlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViYmQ2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Tm9kZVVuc3RhYmxlLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Ob2RlVW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRE
T01Ob2RlVW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisK
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX05PVEFUSU9OX05PREU6CisgKi8K
KyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX05PVEFUSU9OX05PREUgMTIKKworLyoqCisgKiB3ZWJr
aXRfZG9tX25vZGVfZ2V0X2lzX2Nvbm5lY3RlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2Rl
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbm9kZV9nZXRfaXNfY29ubmVj
dGVkKFdlYktpdERPTU5vZGUqIHNlbGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01Ob2RlVW5z
dGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01PYmplY3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3QuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAw
JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU9i
amVjdC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NT2JqZWN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01PYmplY3QuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NT2JqZWN0LmgK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NT2JqZWN0LmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NT2JqZWN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3RQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiMTFhNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NT2JqZWN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworCisjaWZuZGVmIFdlYktpdERPTU9iamVjdFByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01PYmplY3RQcml2YXRlX2gKKworI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01PYmplY3QuaD4KKworc3RydWN0IF9XZWJLaXRET01PYmplY3QgeworICAgIEdPYmpl
Y3QgcGFyZW50OworfTsKKworc3RydWN0IF9XZWJLaXRET01PYmplY3RDbGFzcyB7CisgICAgR09i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCogd3JhcCkgKFdlYktpdERPTU9i
amVjdCosIHZvaWQqIGNvcmVPYmplY3QpOworfTsKKwordm9pZCB3ZWJraXRET01PYmplY3RXcmFw
KFdlYktpdERPTU9iamVjdCosIHZvaWQqIGNvcmVPYmplY3QpOworCisjZW5kaWYgLyogV2ViS2l0
RE9NT2JqZWN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2UuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Q
ZXJmb3JtYW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzZjJi
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2UuY3BwCkBAIC0wLDAgKzEsMzc3
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAi
R09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VO
YXZpZ2F0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
I2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFLCBXZWJL
aXRET01QZXJmb3JtYW5jZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01QZXJm
b3JtYW5jZVByaXZhdGUgeworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFJlZlB0cjxXZWJD
b3JlOjpQZXJmb3JtYW5jZT4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlO
RykKK30gV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlOworCisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01QZXJmb3JtYW5jZSoga2l0KFdl
YkNvcmU6OlBlcmZvcm1hbmNlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fUEVSRk9STUFOQ0UocmV0KTsKKworICAgIHJldHVy
biB3cmFwUGVyZm9ybWFuY2Uob2JqKTsKK30KKworV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGNvcmUo
V2ViS2l0RE9NUGVyZm9ybWFuY2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpQZXJmb3JtYW5jZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVBlcmZvcm1hbmNlKiB3cmFwUGVy
Zm9ybWFuY2UoV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1RJTUlORykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2VfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykK
KyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAg
ICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OlBl
cmZvcm1hbmNlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2Uq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQt
PmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OworICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAg
IFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
UGVyZm9ybWFuY2UqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0o
ZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFN
KHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBU
aW1pbmciKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5B
QkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpQZXJmb3JtYW5jZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5k
bGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
IC8vIEVOQUJMRShXRUJfVElNSU5HKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlm
YWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZGlzcGF0Y2hfZXZl
bnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2VfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIg
PSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NUGVyZm9ybWFuY2UsIHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2UsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFWSUdBVElPTiwKKyAgICBQUk9Q
X1RJTUlORywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBF
TkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisgICAg
cHJpdi0+fldlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiA9IFdFQktJVF9ET01f
UEVSRk9STUFOQ0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9OQVZJR0FUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21fcGVyZm9ybWFuY2VfZ2V0X25hdmlnYXRpb24oc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVElNSU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZ2V0X3RpbWluZyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9jb25zdHJ1Y3RvcihH
VHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1
Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9HRVRfUFJJVkFURShvYmplY3QpOwor
ICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQZXJmb3JtYW5jZSo+
KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlm
IC8vIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfY2xhc3NfaW5pdChXZWJLaXRET01QZXJmb3JtYW5j
ZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGUpKTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9j
b25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BVklH
QVRJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibmF2aWdh
dGlvbiIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2U6bmF2aWdhdGlvbiIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogUGVyZm9ybWFuY2U6
bmF2aWdhdGlvbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfTkFW
SUdBVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1RJTUlORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJ0aW1pbmciLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlOnRpbWluZyIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBQZXJmb3JtYW5jZTp0
aW1pbmciLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJTUlORywK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfaW5pdChXZWJLaXRET01QZXJmb3JtYW5jZSogcmVxdWVz
dCkKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X1BFUkZPUk1BTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0
RE9NUGVyZm9ybWFuY2VQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV9jbGVhcl9yZXNvdXJjZV90aW1pbmdzKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmKQorewor
I2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0Uo
c2VsZikpOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPmNsZWFyUmVzb3VyY2VUaW1pbmdzKCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIg
VGltaW5nIikKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKwordm9pZCB3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX3NldF9yZXNvdXJjZV90aW1pbmdfYnVmZmVyX3NpemUoV2ViS2l0
RE9NUGVyZm9ybWFuY2UqIHNlbGYsIGd1bG9uZyBtYXhTaXplKQoreworI2lmIEVOQUJMRShXRUJf
VElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0Uoc2VsZikpOworICAgIFdl
YkNvcmU6OlBlcmZvcm1hbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldFJlc291cmNlVGltaW5nQnVmZmVyU2l6ZShtYXhTaXplKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShtYXhTaXplKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyNlbmRpZiAvKiBFTkFCTEUoV0VC
X1RJTUlORykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3dlYmtpdF9tYXJr
KFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBjb25zdCBnY2hhciogbWFya05hbWUsIEdFcnJv
cioqIGVycm9yKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUEVSRk9STUFOQ0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobWFya05hbWUpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlBl
cmZvcm1hbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE1hcmtOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1hcmtOYW1lKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT53ZWJraXRNYXJrKGNvbnZl
cnRlZE1hcmtOYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgVU5VU0VEX1BBUkFNKG1hcmtOYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorI2VuZGlmIC8q
IEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
d2Via2l0X2NsZWFyX21hcmtzKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBjb25zdCBnY2hh
ciogbWFya05hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19QRVJGT1JNQU5DRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChtYXJrTmFtZSk7
CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkTWFya05hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
bWFya05hbWUpOworICAgIGl0ZW0tPndlYmtpdENsZWFyTWFya3MoY29udmVydGVkTWFya05hbWUp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKG1hcmtO
YW1lKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikK
KyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3dlYmtpdF9tZWFzdXJlKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBjb25z
dCBnY2hhciogbWVhc3VyZU5hbWUsIGNvbnN0IGdjaGFyKiBzdGFydE1hcmssIGNvbnN0IGdjaGFy
KiBlbmRNYXJrLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKG1lYXN1cmVOYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHN0YXJ0TWFyayk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChlbmRNYXJrKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRNZWFzdXJlTmFtZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChtZWFzdXJlTmFtZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3Rh
cnRNYXJrID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0YXJ0TWFyayk7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkRW5kTWFyayA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChlbmRNYXJrKTsKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT53ZWJraXRNZWFzdXJl
KGNvbnZlcnRlZE1lYXN1cmVOYW1lLCBjb252ZXJ0ZWRTdGFydE1hcmssIGNvbnZlcnRlZEVuZE1h
cmssIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0obWVhc3VyZU5hbWUpOworICAgIFVOVVNFRF9QQVJBTShzdGFydE1hcmspOworICAgIFVO
VVNFRF9QQVJBTShlbmRNYXJrKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorI2VuZGlmIC8qIEVOQUJM
RShXRUJfVElNSU5HKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vfd2Via2l0
X2NsZWFyX21lYXN1cmVzKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBjb25zdCBnY2hhciog
bWVhc3VyZU5hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19QRVJGT1JNQU5DRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChtZWFzdXJlTmFt
ZSk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTWVhc3VyZU5hbWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgobWVhc3VyZU5hbWUpOworICAgIGl0ZW0tPndlYmtpdENsZWFyTWVhc3VyZXMoY29udmVy
dGVkTWVhc3VyZU5hbWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5V
U0VEX1BBUkFNKG1lYXN1cmVOYW1lKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJXZWIgVGltaW5nIikKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKwor
Z2RvdWJsZSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25vdyhXZWJLaXRET01QZXJmb3JtYW5jZSog
c2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19QRVJGT1JNQU5DRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5ub3coKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAq
LworfQorCitXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24qIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfZ2V0X25hdmlnYXRpb24oV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYpCit7CisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0Uo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRpb24+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5uYXZpZ2F0aW9uKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmci
KQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitX
ZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9nZXRfdGlt
aW5nKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmc+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT50aW1pbmcoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYg
LyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFu
Y2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NUGVyZm9ybWFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yZDllMTIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZS5oCkBAIC0w
LDAgKzEsMTQ5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTVBlcmZvcm1hbmNlX2gKKyNkZWZpbmUgV2ViS2l0RE9NUGVyZm9ybWFuY2VfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFICAgICAgICAgICAgKHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5D
RShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfUEVSRk9STUFOQ0UsIFdlYktpdERPTVBlcmZvcm1hbmNlKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0UsIFdlYktpdERPTVBl
cmZvcm1hbmNlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0Uob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1BFUkZPUk1BTkNFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
UEVSRk9STUFOQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9Q
RVJGT1JNQU5DRSwgV2ViS2l0RE9NUGVyZm9ybWFuY2VDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0
RE9NUGVyZm9ybWFuY2UgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlQ2xhc3MgeworICAgIFdlYktpdERPTU9i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21fcGVyZm9ybWFuY2VfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV9jbGVhcl9yZXNvdXJjZV90aW1pbmdzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBl
cmZvcm1hbmNlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfY2xlYXJfcmVzb3VyY2VfdGltaW5ncyhXZWJLaXRE
T01QZXJmb3JtYW5jZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9z
ZXRfcmVzb3VyY2VfdGltaW5nX2J1ZmZlcl9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBl
cmZvcm1hbmNlCisgKiBAbWF4U2l6ZTogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2Vfc2V0X3Jl
c291cmNlX3RpbWluZ19idWZmZXJfc2l6ZShXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiwgZ3Vs
b25nIG1heFNpemUpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vfd2Via2l0X21h
cms6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqIEBtYXJrTmFtZTogQSAj
Z2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3dlYmtpdF9tYXJrKFdl
YktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBjb25zdCBnY2hhciogbWFya05hbWUsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3dlYmtpdF9jbGVhcl9t
YXJrczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZQorICogQG1hcmtOYW1lOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3dlYmtpdF9jbGVhcl9tYXJrcyhXZWJLaXRET01QZXJm
b3JtYW5jZSogc2VsZiwgY29uc3QgZ2NoYXIqIG1hcmtOYW1lKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX3dlYmtpdF9tZWFzdXJlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBl
cmZvcm1hbmNlCisgKiBAbWVhc3VyZU5hbWU6IEEgI2djaGFyCisgKiBAc3RhcnRNYXJrOiBBICNn
Y2hhcgorICogQGVuZE1hcms6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9wZXJm
b3JtYW5jZV93ZWJraXRfbWVhc3VyZShXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiwgY29uc3Qg
Z2NoYXIqIG1lYXN1cmVOYW1lLCBjb25zdCBnY2hhciogc3RhcnRNYXJrLCBjb25zdCBnY2hhciog
ZW5kTWFyaywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2Vfd2Via2l0X2NsZWFyX21lYXN1cmVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1h
bmNlCisgKiBAbWVhc3VyZU5hbWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2Vfd2Via2l0X2Ns
ZWFyX21lYXN1cmVzKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBjb25zdCBnY2hhciogbWVh
c3VyZU5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vfbm93OgorICogQHNl
bGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX25vdyhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9nZXRfbmF2aWdhdGlvbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01QZXJmb3JtYW5jZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbioKK3dl
YmtpdF9kb21fcGVyZm9ybWFuY2VfZ2V0X25hdmlnYXRpb24oV2ViS2l0RE9NUGVyZm9ybWFuY2Uq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZ2V0X3RpbWluZzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqCit3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF90aW1pbmcoV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNl
bGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVf
QVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NUGVyZm9ybWFuY2VfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01QZXJmb3JtYW5jZUVudHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmNDYzYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5jcHAKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VF
bnRyeVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWV9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9QRVJGT1JNQU5DRV9FTlRSWSwgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZh
dGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSB7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgUmVmUHRyPFdlYkNvcmU6OlBlcmZvcm1hbmNl
RW50cnk+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCit9IFdlYktp
dERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlOworCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBraXQoV2Vi
Q29yZTo6UGVyZm9ybWFuY2VFbnRyeSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9i
aikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZKHJldCk7CisK
KyAgICByZXR1cm4gd3JhcFBlcmZvcm1hbmNlRW50cnkob2JqKTsKK30KKworV2ViQ29yZTo6UGVy
Zm9ybWFuY2VFbnRyeSogY29yZShXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2VF
bnRyeSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIHdyYXBQZXJmb3JtYW5jZUVudHJ5KFdlYkNvcmU6
OlBlcmZvcm1hbmNlRW50cnkqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfRU5UUlksICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1RJTUlORykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01QZXJmb3JtYW5jZUVu
dHJ5LCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNU
KQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfRU5UUllf
VFlQRSwKKyAgICBQUk9QX1NUQVJUX1RJTUUsCisgICAgUFJPUF9EVVJBVElPTiwKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQoreworICAgIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWV9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVO
QUJMRShXRUJfVElNSU5HKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBw
cml2LT5+V2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRy
eSogc2VsZiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfRU5UUlkob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF9uYW1l
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOVFJZX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50
cnlfZ2V0X2VudHJ5X3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
U1RBUlRfVElNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX2VudHJ5X2dldF9zdGFydF90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RVUkFUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFs
dWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X2R1cmF0aW9uKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5
X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
R09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmpl
Y3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlf
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJL
aXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUEVSRk9STUFO
Q0VfRU5UUllfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2VFbnRyeSo+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfZW50cnlfY2xhc3NfaW5pdChXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5Q2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmpl
Y3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlKSk7CisgICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlf
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfZW50cnlfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
Im5hbWUiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlRW50cnk6bmFtZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdjaGFyKiBQZXJmb3JtYW5jZUVudHJ5Om5hbWUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9FTlRSWV9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgImVudHJ5LXR5cGUiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlRW50cnk6ZW50cnktdHlw
ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBQZXJmb3JtYW5jZUVudHJ5OmVudHJ5
LXR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVEFSVF9USU1FLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfZG91YmxlKAorICAgICAgICAgICAgInN0YXJ0LXRpbWUiLAorICAgICAgICAgICAgIlBlcmZv
cm1hbmNlRW50cnk6c3RhcnQtdGltZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUg
UGVyZm9ybWFuY2VFbnRyeTpzdGFydC10aW1lIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwg
R19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9EVVJBVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgK
KyAgICAgICAgICAgICJkdXJhdGlvbiIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VFbnRyeTpk
dXJhdGlvbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgUGVyZm9ybWFuY2VFbnRy
eTpkdXJhdGlvbiIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9pbml0KFdlYktpdERPTVBlcmZvcm1hbmNlRW50
cnkqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZX0dFVF9QUklWQVRFKHJlcXVlc3QpOwor
ICAgIG5ldyAocHJpdikgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUoKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X25hbWUoV2ViS2l0RE9NUGVy
Zm9ybWFuY2VFbnRyeSogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9FTlRSWShzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6UGVyZm9ybWFuY2VFbnRyeSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5uYW1lKCkpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfZW50cnlfZ2V0X2VudHJ5X3R5cGUoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19Q
RVJGT1JNQU5DRV9FTlRSWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VFbnRy
eSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5lbnRyeVR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShX
RUJfVElNSU5HKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlf
Z2V0X3N0YXJ0X3RpbWUoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogc2VsZikKK3sKKyNpZiBF
TkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9F
TlRSWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VFbnRyeSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnN0YXJ0VGltZSgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcp
ICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfZHVyYXRp
b24oV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9FTlRSWShzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VFbnRyeSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmR1cmF0aW9uKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzc5NTkwNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUGVyZm9ybWFuY2VF
bnRyeV9oCisjZGVmaW5lIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlfaAorCisjaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX0VOVFJZICAgICAgICAgICAgKHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfZW50cnlfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JN
QU5DRV9FTlRSWShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfRU5UUlksIFdlYktpdERPTVBlcmZvcm1h
bmNlRW50cnkpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9QRVJGT1JNQU5DRV9FTlRSWSwgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeUNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX0VOVFJZKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9F
TlRSWSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfRU5UUllfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BF
UkZPUk1BTkNFX0VOVFJZKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWV9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
RE9NX1RZUEVfUEVSRk9STUFOQ0VfRU5UUlksIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSB7CisgICAgV2ViS2l0RE9N
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFu
Y2VFbnRyeUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF90
eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X25h
bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeQorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfbmFtZShXZWJLaXRET01Q
ZXJmb3JtYW5jZUVudHJ5KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X2VudHJ5X2dldF9lbnRyeV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNl
RW50cnkKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlf
Z2V0X2VudHJ5X3R5cGUoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfc3RhcnRfdGltZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJs
ZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF9zdGFydF90aW1lKFdlYktpdERPTVBlcmZv
cm1hbmNlRW50cnkqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50
cnlfZ2V0X2R1cmF0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkK
KyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0
X2R1cmF0aW9uKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIHNlbGYpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyog
V2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXgg
NjclCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9y
bWFuY2VFbnRyeVByaXZhdGUuaAppbmRleCAyODA1Nzc1Li5lMWNkZTRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
SW50ZXJmYWNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUuaApA
QCAtMTgsMTkgKzE4LDE5IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBXZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktp
dERPTVRlc3RJbnRlcmZhY2VQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NUGVyZm9ybWFuY2VF
bnRyeVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZV9o
CiAKLSNpbmNsdWRlICJUZXN0SW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVRlc3RJbnRlcmZhY2UuaD4KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCisjaW5jbHVkZSA8V2ViQ29yZS9QZXJmb3JtYW5jZUVudHJ5Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkuaD4KKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0SW50ZXJmYWNlKiB3
cmFwVGVzdEludGVyZmFjZShXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKik7Ci1XZWJLaXRET01UZXN0
SW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVyZmFjZSopOwotV2ViQ29yZTo6VGVzdElu
dGVyZmFjZSogY29yZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKik7CitXZWJLaXRET01QZXJmb3Jt
YW5jZUVudHJ5KiB3cmFwUGVyZm9ybWFuY2VFbnRyeShXZWJDb3JlOjpQZXJmb3JtYW5jZUVudHJ5
Kik7CitXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBraXQoV2ViQ29yZTo6UGVyZm9ybWFuY2VF
bnRyeSopOworV2ViQ29yZTo6UGVyZm9ybWFuY2VFbnRyeSogY29yZShXZWJLaXRET01QZXJmb3Jt
YW5jZUVudHJ5Kik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyNlbmRpZiAvKiBFTkFCTEUoV0VC
X1RJTUlORykgKi8KIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlX2gg
Ki8KKyNlbmRpZiAvKiBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNl
TmF2aWdhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4N2U4
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcApAQCAt
MCwwICsxLDE4NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNF
X05BVklHQVRJT04sIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZhdGUpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlIHsKKyNp
ZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZp
Z2F0aW9uPiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorfSBXZWJL
aXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlOworCisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRp
b24qIGtpdChXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRpb24qIG9iaikKK3sKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9QRVJGT1JNQU5D
RV9OQVZJR0FUSU9OKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFBlcmZvcm1hbmNlTmF2aWdhdGlv
bihvYmopOworfQorCitXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRpb24qIGNvcmUoV2ViS2l0
RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9uKj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uKiB3cmFwUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKFdlYkNvcmU6OlBlcmZv
cm1hbmNlTmF2aWdhdGlvbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTihnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX05BVklHQVRJT04sICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb24sIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbiwgV0VC
S0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVFlQ
RSwKKyAgICBQUk9QX1JFRElSRUNUX0NPVU5ULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxF
KFdFQl9USU1JTkcpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHByaXYt
Pn5XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
bmF2aWdhdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb24qIHNlbGYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJ
T04ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9U
WVBFOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX25hdmlnYXRpb25fZ2V0X25hdmlnYXRpb25fdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9SRURJUkVDVF9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWlu
dCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9yZWRpcmVjdF9j
b3VudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBl
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVO
QUJMRShXRUJfVElNSU5HKQorICAgIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT05fR0VUX1BSSVZBVEUo
b2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9u
X2NsYXNzX2luaXQoV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uQ2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFz
cywgc2l6ZW9mKFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZhdGUpKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0
aW9uX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX25hdmlnYXRpb25fZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAor
ICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlTmF2aWdhdGlvbjp0
eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VzaG9ydCBQZXJmb3JtYW5jZU5hdmlnYXRp
b246dHlwZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRURJUkVDVF9DT1VOVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAgICAgICAicmVkaXJlY3QtY291bnQi
LAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlTmF2aWdhdGlvbjpyZWRpcmVjdC1jb3VudCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGd1c2hvcnQgUGVyZm9ybWFuY2VOYXZpZ2F0aW9uOnJlZGly
ZWN0LWNvdW50IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfbmF2aWdhdGlvbl9pbml0KFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiog
cmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX0dFVF9QUklWQVRFKHJlcXVl
c3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0
ZSgpOworfQorCitndXNob3J0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRf
bmF2aWdhdGlvbl90eXBlKFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogc2VsZikKK3sK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JN
QU5DRV9OQVZJR0FUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmln
YXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBp
dGVtLT50eXBlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmci
KQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndXNob3J0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUo
V0VCX1RJTUlORykgKi8KK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmln
YXRpb25fZ2V0X3JlZGlyZWN0X2NvdW50KFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiog
c2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19QRVJGT1JNQU5DRV9OQVZJR0FUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3Jt
YW5jZU5hdmlnYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCBy
ZXN1bHQgPSBpdGVtLT5yZWRpcmVjdENvdW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndXNob3J0PigwKTsK
KyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Q
ZXJmb3JtYW5jZU5hdmlnYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzNDEzOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01QZXJmb3JtYW5jZU5h
dmlnYXRpb25faAorI2RlZmluZSBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25faAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX05BVklHQVRJT04gICAgICAgICAg
ICAod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTihvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0Vf
TkFWSUdBVElPTiwgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9OQVZJ
R0FUSU9OLCBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25DbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19QRVJGT1JNQU5DRV9OQVZJR0FUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9OQVZJ
R0FUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JN
QU5DRV9OQVZJR0FUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OLCBXZWJLaXRE
T01QZXJmb3JtYW5jZU5hdmlnYXRpb25DbGFzcykpCisKKy8qKgorICogV0VCS0lUX0RPTV9QRVJG
T1JNQU5DRV9OQVZJR0FUSU9OX1RZUEVfTkFWSUdBVEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX1RZUEVfTkFWSUdBVEUgMAorCisvKioKKyAqIFdFQktJ
VF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9UWVBFX1JFTE9BRDoKKyAqLworI2RlZmluZSBX
RUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT05fVFlQRV9SRUxPQUQgMQorCisvKioKKyAq
IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9UWVBFX0JBQ0tfRk9SV0FSRDoKKyAq
LworI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT05fVFlQRV9CQUNLX0ZP
UldBUkQgMgorCisvKioKKyAqIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9UWVBF
X1JFU0VSVkVEOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElP
Tl9UWVBFX1JFU0VSVkVEIDI1NQorCitzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdh
dGlvbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVj
dCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uQ2xhc3MgeworICAgIFdlYktpdERPTU9i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fZ2V0X25hdmlnYXRpb25fdHlwZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24KKyAqCisgKiBSZXR1cm5zOiBB
ICNndXNob3J0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1
c2hvcnQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfbmF2aWdhdGlvbl90
eXBlKFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9yZWRpcmVjdF9jb3VudDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24KKyAqCisgKiBSZXR1cm5zOiBB
ICNndXNob3J0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1
c2hvcnQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfcmVkaXJlY3RfY291
bnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBzZWxmKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZv
cm1hbmNlTmF2aWdhdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGJiNzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZhdGUuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvUGVyZm9ybWFu
Y2VOYXZpZ2F0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVBlcmZvcm1hbmNl
TmF2aWdhdGlvbi5oPgorI2lmIEVOQUJMRShXRUJfVElNSU5HKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogd3JhcFBlcmZvcm1hbmNlTmF2aWdh
dGlvbihXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRpb24qKTsKK1dlYktpdERPTVBlcmZvcm1h
bmNlTmF2aWdhdGlvbioga2l0KFdlYkNvcmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbiopOworV2Vi
Q29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBjb3JlKFdlYktpdERPTVBlcmZvcm1hbmNlTmF2
aWdhdGlvbiopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoV0VC
X1RJTUlORykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
UGVyZm9ybWFuY2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZjEwMWFmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlLmgKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01QZXJmb3JtYW5j
ZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9QZXJmb3JtYW5jZS5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01QZXJmb3JtYW5jZS5oPgorI2lmIEVOQUJMRShXRUJfVElNSU5H
KQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVBlcmZvcm1hbmNlKiB3cmFwUGVyZm9y
bWFuY2UoV2ViQ29yZTo6UGVyZm9ybWFuY2UqKTsKK1dlYktpdERPTVBlcmZvcm1hbmNlKiBraXQo
V2ViQ29yZTo6UGVyZm9ybWFuY2UqKTsKK1dlYkNvcmU6OlBlcmZvcm1hbmNlKiBjb3JlKFdlYktp
dERPTVBlcmZvcm1hbmNlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVO
QUJMRShXRUJfVElNSU5HKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Q
ZXJmb3JtYW5jZVRpbWluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTY2MTFhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuY3BwCkBA
IC0wLDAgKzEsNzM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuaCIKKwor
I2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENh
Y2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9QRVJGT1JNQU5DRV9USU1JTkdfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5HLCBX
ZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUgeworI2lmIEVOQUJMRShXRUJfVElNSU5HKQor
ICAgIFJlZlB0cjxXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZz4gY29yZU9iamVjdDsKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKK30gV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2
YXRlOworCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyoga2l0KFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5n
KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdw
b2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFBlcmZv
cm1hbmNlVGltaW5nKG9iaik7Cit9CisKK1dlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBjb3Jl
KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZyogd3JhcFBlcmZvcm1hbmNlVGltaW5nKFdlYkNvcmU6OlBlcmZvcm1hbmNlVGlt
aW5nKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9USU1JTkcoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQ
RV9QRVJGT1JNQU5DRV9USU1JTkcsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJ
TUlORykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZywgd2Via2l0
X2RvbV9wZXJmb3JtYW5jZV90aW1pbmcsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX05BVklHQVRJT05fU1RBUlQsCisgICAgUFJPUF9VTkxP
QURfRVZFTlRfU1RBUlQsCisgICAgUFJPUF9VTkxPQURfRVZFTlRfRU5ELAorICAgIFBST1BfUkVE
SVJFQ1RfU1RBUlQsCisgICAgUFJPUF9SRURJUkVDVF9FTkQsCisgICAgUFJPUF9GRVRDSF9TVEFS
VCwKKyAgICBQUk9QX0RPTUFJTl9MT09LVVBfU1RBUlQsCisgICAgUFJPUF9ET01BSU5fTE9PS1VQ
X0VORCwKKyAgICBQUk9QX0NPTk5FQ1RfU1RBUlQsCisgICAgUFJPUF9DT05ORUNUX0VORCwKKyAg
ICBQUk9QX1NFQ1VSRV9DT05ORUNUSU9OX1NUQVJULAorICAgIFBST1BfUkVRVUVTVF9TVEFSVCwK
KyAgICBQUk9QX1JFU1BPTlNFX1NUQVJULAorICAgIFBST1BfUkVTUE9OU0VfRU5ELAorICAgIFBS
T1BfRE9NX0xPQURJTkcsCisgICAgUFJPUF9ET01fSU5URVJBQ1RJVkUsCisgICAgUFJPUF9ET01f
Q09OVEVOVF9MT0FERURfRVZFTlRfU1RBUlQsCisgICAgUFJPUF9ET01fQ09OVEVOVF9MT0FERURf
RVZFTlRfRU5ELAorICAgIFBST1BfRE9NX0NPTVBMRVRFLAorICAgIFBST1BfTE9BRF9FVkVOVF9T
VEFSVCwKKyAgICBQUk9QX0xPQURfRVZFTlRfRU5ELAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUEVS
Rk9STUFOQ0VfVElNSU5HX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHByaXYtPn5XZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZiA9
IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFWSUdBVElPTl9TVEFSVDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRf
bmF2aWdhdGlvbl9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9V
TkxPQURfRVZFTlRfU1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Vi
a2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3VubG9hZF9ldmVudF9zdGFydChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VTkxPQURfRVZFTlRfRU5EOgorICAgICAg
ICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5n
X2dldF91bmxvYWRfZXZlbnRfZW5kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1JFRElSRUNUX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdl
YmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZWRpcmVjdF9zdGFydChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRURJUkVDVF9FTkQ6CisgICAgICAgIGdfdmFs
dWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Jl
ZGlyZWN0X2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GRVRDSF9T
VEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX3RpbWluZ19nZXRfZmV0Y2hfc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfRE9NQUlOX0xPT0tVUF9TVEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWlu
dDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tYWluX2xvb2t1
cF9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ET01BSU5fTE9P
S1VQX0VORDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tYWluX2xvb2t1cF9lbmQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQ09OTkVDVF9TVEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfY29ubmVjdF9z
dGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05ORUNUX0VORDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3RpbWluZ19nZXRfY29ubmVjdF9lbmQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU0VDVVJFX0NPTk5FQ1RJT05fU1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2
NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3NlY3VyZV9jb25uZWN0
aW9uX3N0YXJ0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFUVVFU1Rf
U1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV90aW1pbmdfZ2V0X3JlcXVlc3Rfc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUkVTUE9OU0VfU1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2
NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Jlc3BvbnNlX3N0YXJ0
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFU1BPTlNFX0VORDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3Rp
bWluZ19nZXRfcmVzcG9uc2VfZW5kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0RPTV9MT0FESU5HOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fbG9hZGluZyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9ET01fSU5URVJBQ1RJVkU6CisgICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9p
bnRlcmFjdGl2ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ET01fQ09O
VEVOVF9MT0FERURfRVZFTlRfU1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1
ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb250ZW50X2xvYWRlZF9l
dmVudF9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ET01fQ09O
VEVOVF9MT0FERURfRVZFTlRfRU5EOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUs
IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29udGVudF9sb2FkZWRfZXZl
bnRfZW5kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RPTV9DT01QTEVU
RToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX3RpbWluZ19nZXRfZG9tX2NvbXBsZXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0xPQURfRVZFTlRfU1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2
YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2xvYWRfZXZlbnRfc3RhcnQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9BRF9FVkVOVF9FTkQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90
aW1pbmdfZ2V0X2xvYWRfZXZlbnRfZW5kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBH
T2JqZWN0KiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19wYXJlbnRfY2xhc3MpLT5jb25z
dHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRp
ZXMpOworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYktpdERPTVBlcmZvcm1hbmNlVGlt
aW5nUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HX0dFVF9QUklW
QVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlBlcmZvcm1hbmNlVGltaW5nKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfY2xh
c3NfaW5pdChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ0NsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfY29uc3RydWN0b3I7
CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGlt
aW5nX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05B
VklHQVRJT05fU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAg
ICAibmF2aWdhdGlvbi1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6bmF2
aWdhdGlvbi1zdGFydCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFu
Y2VUaW1pbmc6bmF2aWdhdGlvbi1zdGFydCIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1VOTE9BRF9FVkVOVF9TVEFSVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAg
ICAgICAgICAgICJ1bmxvYWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNl
VGltaW5nOnVubG9hZC1ldmVudC1zdGFydCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50
NjQgUGVyZm9ybWFuY2VUaW1pbmc6dW5sb2FkLWV2ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgIDAs
IEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfVU5MT0FEX0VWRU5UX0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3VpbnQ2NCgKKyAgICAgICAgICAgICJ1bmxvYWQtZXZlbnQtZW5kIiwKKyAgICAgICAgICAgICJQ
ZXJmb3JtYW5jZVRpbWluZzp1bmxvYWQtZXZlbnQtZW5kIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzp1bmxvYWQtZXZlbnQtZW5kIiwKKyAgICAgICAg
ICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVESVJFQ1RfU1RBUlQsCisgICAgICAgIGdfcGFyYW1f
c3BlY191aW50NjQoCisgICAgICAgICAgICAicmVkaXJlY3Qtc3RhcnQiLAorICAgICAgICAgICAg
IlBlcmZvcm1hbmNlVGltaW5nOnJlZGlyZWN0LXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpyZWRpcmVjdC1zdGFydCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1JFRElSRUNUX0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3VpbnQ2NCgKKyAgICAgICAgICAgICJyZWRpcmVjdC1lbmQiLAorICAgICAgICAgICAgIlBlcmZv
cm1hbmNlVGltaW5nOnJlZGlyZWN0LWVuZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50
NjQgUGVyZm9ybWFuY2VUaW1pbmc6cmVkaXJlY3QtZW5kIiwKKyAgICAgICAgICAgIDAsIEdfTUFY
VUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRkVUQ0hfU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisg
ICAgICAgICAgICAiZmV0Y2gtc3RhcnQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5n
OmZldGNoLXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5j
ZVRpbWluZzpmZXRjaC1zdGFydCIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RP
TUFJTl9MT09LVVBfU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAg
ICAgICAiZG9tYWluLWxvb2t1cC1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1p
bmc6ZG9tYWluLWxvb2t1cC1zdGFydCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQg
UGVyZm9ybWFuY2VUaW1pbmc6ZG9tYWluLWxvb2t1cC1zdGFydCIsCisgICAgICAgICAgICAwLCBH
X01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0RPTUFJTl9MT09LVVBfRU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNf
dWludDY0KAorICAgICAgICAgICAgImRvbWFpbi1sb29rdXAtZW5kIiwKKyAgICAgICAgICAgICJQ
ZXJmb3JtYW5jZVRpbWluZzpkb21haW4tbG9va3VwLWVuZCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6ZG9tYWluLWxvb2t1cC1lbmQiLAorICAgICAg
ICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05ORUNUX1NUQVJULAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWludDY0KAorICAgICAgICAgICAgImNvbm5lY3Qtc3RhcnQiLAorICAgICAgICAgICAg
IlBlcmZvcm1hbmNlVGltaW5nOmNvbm5lY3Qtc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOmNvbm5lY3Qtc3RhcnQiLAorICAgICAgICAgICAg
MCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DT05ORUNUX0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vp
bnQ2NCgKKyAgICAgICAgICAgICJjb25uZWN0LWVuZCIsCisgICAgICAgICAgICAiUGVyZm9ybWFu
Y2VUaW1pbmc6Y29ubmVjdC1lbmQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBl
cmZvcm1hbmNlVGltaW5nOmNvbm5lY3QtZW5kIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfU0VDVVJFX0NPTk5FQ1RJT05fU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50
NjQoCisgICAgICAgICAgICAic2VjdXJlLWNvbm5lY3Rpb24tc3RhcnQiLAorICAgICAgICAgICAg
IlBlcmZvcm1hbmNlVGltaW5nOnNlY3VyZS1jb25uZWN0aW9uLXN0YXJ0IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpzZWN1cmUtY29ubmVjdGlvbi1z
dGFydCIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFUVVFU1RfU1RBUlQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAicmVxdWVzdC1zdGFydCIs
CisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6cmVxdWVzdC1zdGFydCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6cmVxdWVzdC1zdGFydCIs
CisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFU1BPTlNFX1NUQVJULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgInJlc3BvbnNlLXN0YXJ0IiwKKyAg
ICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpyZXNwb25zZS1zdGFydCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6cmVzcG9uc2Utc3RhcnQiLAor
ICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVNQT05TRV9FTkQsCisgICAgICAgIGdf
cGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAicmVzcG9uc2UtZW5kIiwKKyAgICAgICAg
ICAgICJQZXJmb3JtYW5jZVRpbWluZzpyZXNwb25zZS1lbmQiLAorICAgICAgICAgICAgInJlYWQt
b25seSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOnJlc3BvbnNlLWVuZCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0RPTV9MT0FESU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNf
dWludDY0KAorICAgICAgICAgICAgImRvbS1sb2FkaW5nIiwKKyAgICAgICAgICAgICJQZXJmb3Jt
YW5jZVRpbWluZzpkb20tbG9hZGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQg
UGVyZm9ybWFuY2VUaW1pbmc6ZG9tLWxvYWRpbmciLAorICAgICAgICAgICAgMCwgR19NQVhVSU5U
NjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9ET01fSU5URVJBQ1RJVkUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisg
ICAgICAgICAgICAiZG9tLWludGVyYWN0aXZlIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRp
bWluZzpkb20taW50ZXJhY3RpdmUiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBl
cmZvcm1hbmNlVGltaW5nOmRvbS1pbnRlcmFjdGl2ZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJ
TlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0RPTV9DT05URU5UX0xPQURFRF9FVkVOVF9TVEFSVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJkb20tY29udGVudC1sb2FkZWQtZXZlbnQtc3Rh
cnQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5nOmRvbS1jb250ZW50LWxvYWRlZC1l
dmVudC1zdGFydCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VU
aW1pbmc6ZG9tLWNvbnRlbnQtbG9hZGVkLWV2ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgIDAsIEdf
TUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRE9NX0NPTlRFTlRfTE9BREVEX0VWRU5UX0VORCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJkb20tY29udGVudC1sb2FkZWQtZXZlbnQt
ZW5kIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpkb20tY29udGVudC1sb2FkZWQt
ZXZlbnQtZW5kIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRp
bWluZzpkb20tY29udGVudC1sb2FkZWQtZXZlbnQtZW5kIiwKKyAgICAgICAgICAgIDAsIEdfTUFY
VUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRE9NX0NPTVBMRVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAor
ICAgICAgICAgICAgImRvbS1jb21wbGV0ZSIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1p
bmc6ZG9tLWNvbXBsZXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3Jt
YW5jZVRpbWluZzpkb20tY29tcGxldGUiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9MT0FEX0VWRU5UX1NUQVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAg
ICAgICAgImxvYWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5n
OmxvYWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZv
cm1hbmNlVGltaW5nOmxvYWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5U
NjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9MT0FEX0VWRU5UX0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAg
ICAgICAgICAgICJsb2FkLWV2ZW50LWVuZCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1p
bmc6bG9hZC1ldmVudC1lbmQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZv
cm1hbmNlVGltaW5nOmxvYWQtZXZlbnQtZW5kIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfaW5pdChXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZyogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX1RJTUlOR19HRVRfUFJJVkFURShy
ZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0
ZSgpOworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9uYXZp
Z2F0aW9uX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVO
QUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJ
TUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5uYXZpZ2F0aW9u
U3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJf
VElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dl
dF91bmxvYWRfZXZlbnRfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9S
TUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnVu
bG9hZEV2ZW50U3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRp
bWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVO
QUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
dGltaW5nX2dldF91bmxvYWRfZXZlbnRfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBz
ZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VU
aW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBp
dGVtLT51bmxvYWRFdmVudEVuZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJX
ZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV90aW1pbmdfZ2V0X3JlZGlyZWN0X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5n
KiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFu
Y2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQg
PSBpdGVtLT5yZWRpcmVjdFN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX3RpbWluZ19nZXRfcmVkaXJlY3RfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5n
KiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFu
Y2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQg
PSBpdGVtLT5yZWRpcmVjdEVuZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJX
ZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV90aW1pbmdfZ2V0X2ZldGNoX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBz
ZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VU
aW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBp
dGVtLT5mZXRjaFN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBU
aW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBF
TkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3RpbWluZ19nZXRfZG9tYWluX2xvb2t1cF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
Zyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1h
bmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0
ID0gaXRlbS0+ZG9tYWluTG9va3VwU3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21haW5fbG9va3VwX2VuZChXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50
NjQgcmVzdWx0ID0gaXRlbS0+ZG9tYWluTG9va3VwRW5kKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfY29ubmVjdF9zdGFydChXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
aW50NjQgcmVzdWx0ID0gaXRlbS0+Y29ubmVjdFN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfY29ubmVjdF9lbmQoV2ViS2l0RE9NUGVyZm9y
bWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWlu
dDY0IHJlc3VsdCA9IGl0ZW0tPmNvbm5lY3RFbmQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDAp
OworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9zZWN1cmVfY29ubmVjdGlvbl9zdGFydChXZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+c2VjdXJlQ29ubmVjdGlvblN0YXJ0KCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30K
KworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVxdWVzdF9zdGFy
dChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+cmVxdWVzdFN0YXJ0KCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30K
KworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVzcG9uc2Vfc3Rh
cnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnJlc3BvbnNlU3RhcnQoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLwor
fQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXNwb25zZV9l
bmQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnJlc3BvbnNlRW5kKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30K
KworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2xvYWRpbmco
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmRvbUxvYWRpbmcoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitn
dWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21faW50ZXJhY3RpdmUo
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmRvbUludGVyYWN0aXZlKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30K
KworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbnRlbnRf
bG9hZGVkX2V2ZW50X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQorewor
I2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1B
TkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5kb21D
b250ZW50TG9hZGVkRXZlbnRTdGFydCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb250ZW50X2xvYWRlZF9ldmVudF9lbmQoV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCgpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9
CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb21wbGV0
ZShXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+ZG9tQ29tcGxldGUoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQor
CitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9sb2FkX2V2ZW50X3N0
YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJf
VElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5sb2FkRXZlbnRTdGFydCgpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICov
Cit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2xvYWRfZXZl
bnRfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShX
RUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5sb2FkRXZlbnRFbmQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAq
LworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZv
cm1hbmNlVGltaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBjNWUw
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuaApAQCAtMCwwICsx
LDI4NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZ19oCisjZGVmaW5lIFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5n
X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9USU1JTkcgICAgICAg
ICAgICAod2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9USU1JTkcob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJTUlO
RywgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZP
Uk1BTkNFX1RJTUlOR19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5HLCBXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZ0NsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJ
TUlORyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5HKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19Q
RVJGT1JNQU5DRV9USU1JTkdfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJTUlORykpCisjZGVmaW5lIFdF
QktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9USU1JTkcs
IFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVBl
cmZvcm1hbmNlVGltaW5nIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ0NsYXNzIHsKKyAgICBXZWJL
aXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfbmF2aWdhdGlvbl9zdGFydDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1
aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2
NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X25hdmlnYXRpb25fc3RhcnQoV2Vi
S2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfdGltaW5nX2dldF91bmxvYWRfZXZlbnRfc3RhcnQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF91bmxvYWRfZXZlbnRfc3RhcnQoV2ViS2l0RE9NUGVy
Zm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
dGltaW5nX2dldF91bmxvYWRfZXZlbnRfZW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZv
cm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX3RpbWluZ19nZXRfdW5sb2FkX2V2ZW50X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
Zyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Jl
ZGlyZWN0X3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisg
KgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRf
cmVkaXJlY3Rfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZWRpcmVjdF9lbmQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNn
dWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50
NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZWRpcmVjdF9lbmQoV2ViS2l0
RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfdGltaW5nX2dldF9mZXRjaF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV90aW1pbmdfZ2V0X2ZldGNoX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tYWlu
X2xvb2t1cF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZwor
ICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0
X2RvbWFpbl9sb29rdXBfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21haW5fbG9va3Vw
X2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJl
dHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbWFpbl9s
b29rdXBfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfY29ubmVjdF9zdGFydDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50
NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAor
d2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2Nvbm5lY3Rfc3RhcnQoV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2VfdGltaW5nX2dldF9jb25uZWN0X2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV90aW1pbmdfZ2V0X2Nvbm5lY3RfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfc2VjdXJlX2Nv
bm5lY3Rpb25fc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcK
KyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dl
dF9zZWN1cmVfY29ubmVjdGlvbl9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3JlcXVlc3Rf
c3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBS
ZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXF1ZXN0
X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVzcG9uc2Vfc3RhcnQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dl
YmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXNwb25zZV9zdGFydChXZWJLaXRET01Q
ZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV90aW1pbmdfZ2V0X3Jlc3BvbnNlX2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV90aW1pbmdfZ2V0X3Jlc3BvbnNlX2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9sb2Fk
aW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0
dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2xvYWRp
bmcoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21faW50ZXJhY3RpdmU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21faW50ZXJhY3RpdmUoV2ViS2l0RE9NUGVy
Zm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
dGltaW5nX2dldF9kb21fY29udGVudF9sb2FkZWRfZXZlbnRfc3RhcnQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29udGVudF9sb2FkZWRfZXZlbnRfc3Rh
cnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29udGVudF9sb2FkZWRfZXZlbnRfZW5kOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczog
QSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
dWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbnRlbnRfbG9h
ZGVkX2V2ZW50X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb21wbGV0ZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1
aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2
NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb21wbGV0ZShXZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV90aW1pbmdfZ2V0X2xvYWRfZXZlbnRfc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfdGltaW5nX2dldF9sb2FkX2V2ZW50X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNl
VGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19n
ZXRfbG9hZF9ldmVudF9lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1p
bmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5n
X2dldF9sb2FkX2V2ZW50X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8K
KyNlbmRpZiAvKiBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ19oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1By
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWFhODllCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUuaApAQCAtMCwwICsx
LDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVBlcmZvcm1hbmNl
VGltaW5nUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1BlcmZvcm1hbmNlVGltaW5nLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nLmg+CisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NUGVyZm9y
bWFuY2VUaW1pbmcqIHdyYXBQZXJmb3JtYW5jZVRpbWluZyhXZWJDb3JlOjpQZXJmb3JtYW5jZVRp
bWluZyopOworV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIGtpdChXZWJDb3JlOjpQZXJmb3Jt
YW5jZVRpbWluZyopOworV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGNvcmUoV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
RU5BQkxFKFdFQl9USU1JTkcpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01QZXJmb3JtYW5jZVRp
bWluZ1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01Qcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJpdmF0ZS5jcHAKc2ltaWxhcml0eSBp
bmRleCA5MyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01Qcml2YXRlLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcml2YXRlLmNwcAppbmRleCAyMWRmYjM2
Li4zMjY2YzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTVByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJpdmF0ZS5jcHAKQEAgLTI0LDE4ICsyNCwx
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
IAotI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Jsb2IuaD4KICNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFdmVu
dC5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgotI2luY2x1
ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiS2V5
Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJTdHlsZVNo
ZWV0LmgiCi0jaW5jbHVkZSAiVUlFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50VGFy
Z2V0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TdHlsZVNoZWV0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VSUV2ZW50
Lmg+CiAjaW5jbHVkZSAiV2ViS2l0RE9NQXR0clByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRE
T01CbG9iUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTUNEQVRBU2VjdGlvblByaXZhdGUu
aCIKQEAgLTYzLDggKzYzLDggQEAKICNpbmNsdWRlICJXZWJLaXRET01XaGVlbEV2ZW50UHJpdmF0
ZS5oIgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotI2luY2x1ZGUgIkRhdGFDdWUuaCIKLSNp
bmNsdWRlICJWVFRDdWUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RhdGFDdWUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1ZUVEN1ZS5oPgogI2luY2x1ZGUgIldlYktpdERPTURhdGFDdWVQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YktpdERPTVZUVEN1ZVByaXZhdGUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcml2YXRlLmgKc2ltaWxhcml0
eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
V2ViS2l0RE9NUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByaXZhdGUuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzMwYzgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKQEAgLTAsMCArMSwx
NzAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVN0eWxlU2hlZXRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGtpdChX
ZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2Rl
Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGNvcmUoV2Vi
S2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NUHJv
Y2Vzc2luZ0luc3RydWN0aW9uKiB3cmFwUHJvY2Vzc2luZ0luc3RydWN0aW9uKFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTihnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04sICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVu
dEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fcHJvY2Vzc2luZ19p
bnN0cnVjdGlvbl9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6
OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVF
dmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2Ut
PmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2Rpc3Bh
dGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3By
b2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1v
dmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRE
T01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlv
biwgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBLCBHX0lNUExFTUVOVF9JTlRFUkZBQ0Uo
V0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RBUkdFVCwKKyAgICBQUk9QX1NI
RUVULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9u
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbiogc2VsZiA9IFdFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTihvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9wcm9jZXNzaW5nX2lu
c3RydWN0aW9uX2dldF90YXJnZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU0hFRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9w
cm9jZXNzaW5nX2luc3RydWN0aW9uX2dldF9zaGVldChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fY2xhc3NfaW5pdChX
ZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fcHJvY2Vzc2lu
Z19pbnN0cnVjdGlvbl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEFSR0VULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRhcmdldCIsCisgICAg
ICAgICAgICAiUHJvY2Vzc2luZ0luc3RydWN0aW9uOnRhcmdldCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246dGFyZ2V0IiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfU0hFRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAi
c2hlZXQiLAorICAgICAgICAgICAgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbjpzaGVldCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVN0eWxlU2hlZXQqIFByb2Nlc3NpbmdJbnN0cnVj
dGlvbjpzaGVldCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25faW5pdChXZWJLaXRET01Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24qIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2dldF90YXJnZXQoV2Vi
S2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50YXJnZXQoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NU3R5bGVTaGVldCogd2Via2l0X2RvbV9wcm9jZXNz
aW5nX2luc3RydWN0aW9uX2dldF9zaGVldChXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24q
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUFJPQ0VTU0lOR19JTlNUUlVDVElP
TihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdHlsZVNoZWV0PiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2hlZXQoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByb2Nl
c3NpbmdJbnN0cnVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzBhMzFkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20v
d2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25faAorI2RlZmluZSBXZWJLaXRET01Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX3By
b2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QUk9D
RVNTSU5HX0lOU1RSVUNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OLCBXZWJL
aXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX1BST0NFU1NJ
TkdfSU5TVFJVQ1RJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04sIFdlYktpdERP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbkNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1BST0NF
U1NJTkdfSU5TVFJVQ1RJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04pKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX1BST0NFU1NJTkdfSU5TVFJVQ1RJT05fQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BST0NFU1NJTkdf
SU5TVFJVQ1RJT04pKQorI2RlZmluZSBXRUJLSVRfRE9NX1BST0NFU1NJTkdfSU5TVFJVQ1RJT05f
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04sIFdlYktpdERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24g
eworICAgIFdlYktpdERPTUNoYXJhY3RlckRhdGEgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DbGFzcyB7CisgICAgV2ViS2l0RE9N
Q2hhcmFjdGVyRGF0YUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3RhcmdldDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9wcm9jZXNzaW5nX2lu
c3RydWN0aW9uX2dldF90YXJnZXQoV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3NoZWV0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NU3R5bGVTaGVldAorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTVN0eWxlU2hlZXQqCit3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1
Y3Rpb25fZ2V0X3NoZWV0KFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogc2VsZik7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25f
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iMjNlZGIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2
YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uUHJpdmF0ZV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHdyYXBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24oV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKik7CitXZWJLaXRET01Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24qIGtpdChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qKTsK
K1dlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiogY29yZShXZWJLaXRET01Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0
RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJh
bmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmIwMDM4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcApAQCAtMCwwICsx
LDY1MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTVJhbmdlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1l
bnRGcmFnbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01SYW5nZVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NUmFuZ2VVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9HRVRfUFJJVkFURShv
YmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9SQU5H
RSwgV2ViS2l0RE9NUmFuZ2VQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUmFu
Z2VQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGNvcmVPYmplY3Q7Cit9IFdl
YktpdERPTVJhbmdlUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVJh
bmdlKiBraXQoV2ViQ29yZTo6UmFuZ2UqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9SQU5HRShyZXQpOworCisgICAgcmV0dXJu
IHdyYXBSYW5nZShvYmopOworfQorCitXZWJDb3JlOjpSYW5nZSogY29yZShXZWJLaXRET01SYW5n
ZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlJhbmdlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30K
KworV2ViS2l0RE9NUmFuZ2UqIHdyYXBSYW5nZShXZWJDb3JlOjpSYW5nZSogY29yZU9iamVjdCkK
K3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fUkFOR0Uo
Z19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9SQU5HRSwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVf
VFlQRShXZWJLaXRET01SYW5nZSwgd2Via2l0X2RvbV9yYW5nZSwgV0VCS0lUX0RPTV9UWVBFX09C
SkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfU1RBUlRfQ09OVEFJTkVSLAor
ICAgIFBST1BfU1RBUlRfT0ZGU0VULAorICAgIFBST1BfRU5EX0NPTlRBSU5FUiwKKyAgICBQUk9Q
X0VORF9PRkZTRVQsCisgICAgUFJPUF9DT0xMQVBTRUQsCisgICAgUFJPUF9DT01NT05fQU5DRVNU
T1JfQ09OVEFJTkVSLAorICAgIFBST1BfVEVYVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fcmFuZ2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVJhbmdl
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkFOR0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKwor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgp
KTsKKworICAgIHByaXYtPn5XZWJLaXRET01SYW5nZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3JhbmdlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NUmFuZ2UqIHNlbGYgPSBXRUJLSVRfRE9NX1JBTkdFKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU1RBUlRfQ09OVEFJ
TkVSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fcmFuZ2Vf
Z2V0X3N0YXJ0X2NvbnRhaW5lcihzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9TVEFSVF9PRkZTRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0YXJ0X29mZnNldChzZWxmLCBudWxscHRyKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkRfQ09OVEFJTkVSOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2VuZF9jb250YWluZXIoc2Vs
ZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRU5EX09GRlNFVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9yYW5nZV9nZXRfZW5k
X29mZnNldChzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
T0xMQVBTRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
cmFuZ2VfZ2V0X2NvbGxhcHNlZChzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9DT01NT05fQU5DRVNUT1JfQ09OVEFJTkVSOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbW1vbl9hbmNlc3Rvcl9jb250
YWluZXIoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVY
VDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9yYW5nZV9n
ZXRfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2Rv
bV9yYW5nZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAg
ICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3JhbmdlX3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29u
c3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01SYW5nZVByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1JBTkdFX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlJhbmdlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0
KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3JhbmdlX2NsYXNzX2luaXQoV2ViS2l0RE9NUmFuZ2VDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NUmFuZ2VQcml2YXRlKSk7CisgICAgZ29iamVjdENs
YXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fcmFuZ2VfY29uc3RydWN0b3I7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fcmFuZ2VfZmluYWxpemU7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3JhbmdlX2dldF9wcm9wZXJ0eTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9TVEFSVF9DT05UQUlORVIsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAic3RhcnQtY29udGFpbmVyIiwKKyAgICAgICAgICAgICJS
YW5nZTpzdGFydC1jb250YWluZXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01O
b2RlKiBSYW5nZTpzdGFydC1jb250YWluZXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TVEFSVF9PRkZTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAg
ICAgICAgInN0YXJ0LW9mZnNldCIsCisgICAgICAgICAgICAiUmFuZ2U6c3RhcnQtb2Zmc2V0IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgUmFuZ2U6c3RhcnQtb2Zmc2V0IiwKKyAgICAg
ICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5EX0NPTlRBSU5FUiwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJlbmQtY29udGFpbmVyIiwKKyAgICAg
ICAgICAgICJSYW5nZTplbmQtY29udGFpbmVyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NTm9kZSogUmFuZ2U6ZW5kLWNvbnRhaW5lciIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0VORF9PRkZTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgImVuZC1vZmZzZXQiLAorICAgICAgICAgICAgIlJhbmdlOmVuZC1vZmZzZXQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBSYW5nZTplbmQtb2Zmc2V0IiwKKyAgICAgICAg
ICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09MTEFQU0VELAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjb2xsYXBzZWQiLAorICAgICAgICAgICAgIlJh
bmdlOmNvbGxhcHNlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFJhbmdlOmNv
bGxhcHNlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTU1PTl9BTkNFU1RPUl9DT05UQUlORVIs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY29tbW9uLWFuY2Vz
dG9yLWNvbnRhaW5lciIsCisgICAgICAgICAgICAiUmFuZ2U6Y29tbW9uLWFuY2VzdG9yLWNvbnRh
aW5lciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIFJhbmdlOmNvbW1v
bi1hbmNlc3Rvci1jb250YWluZXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRleHQi
LAorICAgICAgICAgICAgIlJhbmdlOnRleHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hh
ciogUmFuZ2U6dGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcmFuZ2VfaW5pdChX
ZWJLaXRET01SYW5nZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01SYW5nZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1JBTkdFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJp
dikgV2ViS2l0RE9NUmFuZ2VQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9z
ZXRfc3RhcnQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIGds
b25nIG9mZnNldCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5H
RShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9k
ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0U3RhcnQoKmNvbnZlcnRlZFJlZk5v
ZGUsIG9mZnNldCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmQo
V2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIGdsb25nIG9mZnNl
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9kZSkpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRl
ZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0RW5kKCpjb252ZXJ0ZWRSZWZOb2RlLCBvZmZzZXQs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9zZXRfc3RhcnRfYmVmb3JlKFdl
YktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktp
dDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBpdGVtLT5zZXRTdGFydEJlZm9yZSgqY29udmVydGVkUmVmTm9kZSwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwor
dm9pZCB3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydF9hZnRlcihXZWJLaXRET01SYW5nZSogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUocmVmTm9kZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0U3RhcnRB
ZnRlcigqY29udmVydGVkUmVmTm9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX3Jh
bmdlX3NldF9lbmRfYmVmb3JlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBy
ZWZOb2RlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6
UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29u
dmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRFbmRCZWZvcmUoKmNvbnZlcnRlZFJlZk5v
ZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9zZXRfZW5kX2FmdGVyKFdl
YktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktp
dDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBpdGVtLT5zZXRFbmRBZnRlcigqY29udmVydGVkUmVmTm9kZSwgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9p
ZCB3ZWJraXRfZG9tX3JhbmdlX2NvbGxhcHNlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBnYm9vbGVh
biB0b1N0YXJ0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdF
KHNlbGYpKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmNvbGxhcHNlKHRvU3RhcnQpOwor
fQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2Vfc2VsZWN0X25vZGUoV2ViS2l0RE9NUmFuZ2UqIHNl
bGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OT0RFKHJlZk5vZGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNlbGVjdE5v
ZGUoKmNvbnZlcnRlZFJlZk5vZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5n
ZV9zZWxlY3Rfbm9kZV9jb250ZW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9k
ZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5H
RShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9k
ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpjb252
ZXJ0ZWRSZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnc2hvcnQgd2Via2l0X2RvbV9yYW5nZV9jb21w
YXJlX2JvdW5kYXJ5X3BvaW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgZ3VzaG9ydCBob3csIFdl
YktpdERPTVJhbmdlKiBzb3VyY2VSYW5nZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfUkFOR0Uoc291cmNlUmFuZ2UpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGNvbnZlcnRlZFNvdXJj
ZVJhbmdlID0gV2ViS2l0Ojpjb3JlKHNvdXJjZVJhbmdlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBnc2hvcnQgcmVzdWx0ID0gaXRlbS0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzRm9yQmluZGluZ3MoaG93LCAqY29udmVydGVkU291cmNlUmFuZ2UsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX3JhbmdlX2RlbGV0ZV9jb250
ZW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+ZGVsZXRlQ29u
dGVudHMoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogd2Via2l0X2Rv
bV9yYW5nZV9leHRyYWN0X2NvbnRlbnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6
OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50PiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZXh0cmFjdENvbnRlbnRzKGVjKSk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NRG9jdW1lbnRGcmFnbWVudCogd2Via2l0X2RvbV9yYW5nZV9jbG9uZV9jb250ZW50cyhXZWJL
aXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfUkFOR0Uoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6RG9jdW1lbnRGcmFnbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmNsb25lQ29udGVudHMoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2VfaW5zZXJ0X25vZGUoV2Vi
S2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5ld05vZGUsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5ld05vZGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROZXdOb2RlID0gV2ViS2l0
Ojpjb3JlKG5ld05vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGl0ZW0tPmluc2VydE5vZGUoKmNvbnZlcnRlZE5ld05vZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9yYW5nZV9zdXJyb3VuZF9jb250ZW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwg
V2ViS2l0RE9NTm9kZSogbmV3UGFyZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTk9ERShuZXdQYXJlbnQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROZXdQYXJlbnQgPSBXZWJLaXQ6OmNvcmUobmV3UGFy
ZW50KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zdXJy
b3VuZENvbnRlbnRzKCpjb252ZXJ0ZWROZXdQYXJlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERP
TVJhbmdlKiB3ZWJraXRfZG9tX3JhbmdlX2Nsb25lX3JhbmdlKFdlYktpdERPTVJhbmdlKiBzZWxm
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxm
KSwgMCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jbG9uZVJhbmdlKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
cmFuZ2VfdG9fc3RyaW5nKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CisgICAgVU5VU0VEX1BB
UkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50b1N0cmlu
ZygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2VfZGV0
YWNoKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdl
YkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmRldGFj
aCgpOworfQorCitXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiB3ZWJraXRfZG9tX3JhbmdlX2Ny
ZWF0ZV9jb250ZXh0dWFsX2ZyYWdtZW50KFdlYktpdERPTVJhbmdlKiBzZWxmLCBjb25zdCBnY2hh
ciogaHRtbCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFO
R0Uoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGh0bWwsIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpS
YW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRIdG1sID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGh0bWwpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50PiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KGNvbnZlcnRlZEh0bWwsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworZ3Nob3J0IHdlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9ub2Rl
KFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHJlZk5vZGUpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29y
ZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSog
Y29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnc2hvcnQgcmVzdWx0ID0gaXRlbS0+Y29tcGFyZU5v
ZGUoKmNvbnZlcnRlZFJlZk5vZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0X2RvbV9yYW5nZV9pbnRlcnNlY3RzX25vZGUoV2ViS2l0RE9NUmFuZ2Uq
IHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHJlZk5vZGUpLCBGQUxTRSk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpS
YW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252
ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmludGVyc2VjdHNO
b2RlKCpjb252ZXJ0ZWRSZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dzaG9ydCB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfcG9pbnQoV2ViS2l0RE9NUmFuZ2UqIHNl
bGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIGdsb25nIG9mZnNldCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlJh
bmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZl
cnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ3Nob3J0IHJlc3VsdCA9IGl0ZW0tPmNvbXBhcmVQb2ludCgq
Y29udmVydGVkUmVmTm9kZSwgb2Zmc2V0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2dib29sZWFuIHdlYmtpdF9kb21fcmFuZ2VfaXNfcG9pbnRfaW5fcmFuZ2UoV2ViS2l0RE9N
UmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIGdsb25nIG9mZnNldCwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIEZBTFNF
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9kZSks
IEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFM
U0UpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+aXNQb2ludEluUmFuZ2UoKmNvbnZlcnRlZFJlZk5vZGUsIG9mZnNldCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2VfZXhwYW5k
KFdlYktpdERPTVJhbmdlKiBzZWxmLCBjb25zdCBnY2hhciogdW5pdCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh1bml0KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAg
ICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRVbml0ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHVuaXQpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmV4cGFuZChjb252ZXJ0ZWRV
bml0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3JhbmdlX2dldF9z
dGFydF9jb250YWluZXIoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBVTlVTRURfUEFS
QU0oZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+c3RhcnRDb250YWluZXIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9vZmZz
ZXQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwor
ICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPnN0YXJ0T2Zmc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
V2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9yYW5nZV9nZXRfZW5kX2NvbnRhaW5lcihXZWJLaXRE
T01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUkFOR0Uoc2VsZiksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29y
ZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5lbmRDb250YWluZXIoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnbG9u
ZyB3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfb2Zmc2V0KFdlYktpdERPTVJhbmdlKiBzZWxmLCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwg
MCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5lbmRPZmZzZXQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3JhbmdlX2dl
dF9jb2xsYXBzZWQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCBGQUxTRSk7CisgICAgVU5VU0VEX1BB
UkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jb2xsYXBzZWQoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3JhbmdlX2dldF9jb21tb25f
YW5jZXN0b3JfY29udGFpbmVyKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CisgICAgVU5VU0VE
X1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fcmFuZ2Vf
Z2V0X3RleHQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUkFOR0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnRleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5n
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01SYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZi
NjJiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmgKQEAgLTAsMCArMSw0MDIgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERP
TV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkg
PHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERPTVJhbmdlX2gKKyNkZWZpbmUgV2ViS2l0RE9NUmFuZ2VfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
T2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9SQU5HRSAgICAgICAgICAgICh3
ZWJraXRfZG9tX3JhbmdlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0Uob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1JBTkdFLCBXZWJLaXRET01SYW5nZSkpCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0Vf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1JBTkdFLCBXZWJLaXRET01SYW5nZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX1JBTkdFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9SQU5HRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUkFOR0VfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1JBTkdFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfUkFOR0UsIFdl
YktpdERPTVJhbmdlQ2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01fUkFOR0VfU1RBUlRfVE9f
U1RBUlQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9TVEFSVF9UT19TVEFSVCAwCisK
Ky8qKgorICogV0VCS0lUX0RPTV9SQU5HRV9TVEFSVF9UT19FTkQ6CisgKi8KKyNkZWZpbmUgV0VC
S0lUX0RPTV9SQU5HRV9TVEFSVF9UT19FTkQgMQorCisvKioKKyAqIFdFQktJVF9ET01fUkFOR0Vf
RU5EX1RPX0VORDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1JBTkdFX0VORF9UT19FTkQgMgor
CisvKioKKyAqIFdFQktJVF9ET01fUkFOR0VfRU5EX1RPX1NUQVJUOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fUkFOR0VfRU5EX1RPX1NUQVJUIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX1JBTkdF
X05PREVfQkVGT1JFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0VfTk9ERV9CRUZPUkUg
MAorCisvKioKKyAqIFdFQktJVF9ET01fUkFOR0VfTk9ERV9BRlRFUjoKKyAqLworI2RlZmluZSBX
RUJLSVRfRE9NX1JBTkdFX05PREVfQUZURVIgMQorCisvKioKKyAqIFdFQktJVF9ET01fUkFOR0Vf
Tk9ERV9CRUZPUkVfQU5EX0FGVEVSOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0VfTk9E
RV9CRUZPUkVfQU5EX0FGVEVSIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX1JBTkdFX05PREVfSU5T
SURFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0VfTk9ERV9JTlNJREUgMworCitzdHJ1
Y3QgX1dlYktpdERPTVJhbmdlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNl
OworfTsKKworc3RydWN0IF9XZWJLaXRET01SYW5nZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmpl
Y3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X3JhbmdlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0
YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0
RE9NTm9kZQorICogQG9mZnNldDogQSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydChXZWJLaXRET01S
YW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgZ2xvbmcgb2Zmc2V0LCBHRXJyb3Iq
KiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9zZXRfZW5kOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVJhbmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQG9m
ZnNldDogQSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktp
dERPTU5vZGUqIHJlZk5vZGUsIGdsb25nIG9mZnNldCwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0X2JlZm9yZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFy
dF9iZWZvcmUoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdF
cnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydF9hZnRl
cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERP
TU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3JhbmdlX3NldF9zdGFydF9hZnRlcihXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0
RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21f
cmFuZ2Vfc2V0X2VuZF9iZWZvcmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBy
ZWZOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9zZXRfZW5kX2JlZm9yZShXZWJLaXRET01S
YW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZF9hZnRlcjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmRf
YWZ0ZXIoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2NvbGxhcHNlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAdG9TdGFydDogQSAjZ2Jvb2xlYW4KKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3JhbmdlX2Nv
bGxhcHNlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBnYm9vbGVhbiB0b1N0YXJ0LCBHRXJyb3IqKiBl
cnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9zZWxlY3Rfbm9kZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Jhbmdl
X3NlbGVjdF9ub2RlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2Rl
LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9zZWxlY3Rfbm9k
ZV9jb250ZW50czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHJlZk5vZGU6IEEg
I1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX3JhbmdlX3NlbGVjdF9ub2RlX2NvbnRlbnRzKFdlYktpdERPTVJhbmdl
KiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX2JvdW5kYXJ5X3BvaW50czoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01SYW5nZQorICogQGhvdzogQSAjZ3VzaG9ydAorICogQHNvdXJjZVJhbmdlOiBB
ICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAj
Z3Nob3J0CisqKi8KK1dFQktJVF9BUEkgZ3Nob3J0Cit3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVf
Ym91bmRhcnlfcG9pbnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBndXNob3J0IGhvdywgV2ViS2l0
RE9NUmFuZ2UqIHNvdXJjZVJhbmdlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9yYW5nZV9kZWxldGVfY29udGVudHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X3JhbmdlX2RlbGV0ZV9jb250ZW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfZXh0cmFjdF9jb250ZW50czoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCoKK3dlYmtpdF9kb21fcmFuZ2VfZXh0
cmFjdF9jb250ZW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfY2xvbmVfY29udGVudHM6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTURvY3VtZW50RnJhZ21lbnQqCit3ZWJraXRfZG9tX3JhbmdlX2Nsb25lX2NvbnRlbnRz
KFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9yYW5nZV9pbnNlcnRfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICog
QG5ld05vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3JhbmdlX2luc2VydF9ub2RlKFdlYktpdERPTVJh
bmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBuZXdOb2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9yYW5nZV9zdXJyb3VuZF9jb250ZW50czoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01SYW5nZQorICogQG5ld1BhcmVudDogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9y
OiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2Vfc3Vy
cm91bmRfY29udGVudHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5ld1Bh
cmVudCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfY2xvbmVf
cmFuZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NUmFuZ2UKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01SYW5nZSoKK3dlYmtpdF9kb21fcmFuZ2VfY2xvbmVfcmFuZ2Uo
V2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3JhbmdlX3RvX3N0cmluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGVy
cm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fcmFuZ2VfdG9fc3RyaW5nKFdlYktpdERPTVJhbmdlKiBzZWxmLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9kZXRhY2g6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3JhbmdlX2RldGFjaChXZWJLaXRET01SYW5nZSogc2Vs
ZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfY3JlYXRlX2Nv
bnRleHR1YWxfZnJhZ21lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBodG1s
OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NRG9jdW1lbnRGcmFnbWVudCoKK3dlYmtpdF9kb21fcmFuZ2VfY3JlYXRlX2NvbnRleHR1
YWxfZnJhZ21lbnQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBodG1sLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX25vZGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2Rl
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnc2hvcnQKKyoqLworV0VC
S0lUX0FQSSBnc2hvcnQKK3dlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9ub2RlKFdlYktpdERPTVJh
bmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9yYW5nZV9pbnRlcnNlY3RzX25vZGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX3JhbmdlX2ludGVyc2VjdHNfbm9kZShXZWJLaXRET01SYW5nZSogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fcmFuZ2VfY29tcGFyZV9wb2ludDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5n
ZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBvZmZzZXQ6IEEgI2dsb25nCisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnc2hvcnQKKyoqLworV0VCS0lU
X0FQSSBnc2hvcnQKK3dlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9wb2ludChXZWJLaXRET01SYW5n
ZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgZ2xvbmcgb2Zmc2V0LCBHRXJyb3IqKiBl
cnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9pc19wb2ludF9pbl9yYW5nZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUK
KyAqIEBvZmZzZXQ6IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3Jhbmdl
X2lzX3BvaW50X2luX3JhbmdlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBy
ZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3JhbmdlX2dldF9zdGFydF9jb250YWluZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFu
Z2UKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRf
ZG9tX3JhbmdlX2dldF9zdGFydF9jb250YWluZXIoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9vZmZzZXQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fcmFu
Z2VfZ2V0X3N0YXJ0X29mZnNldChXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2VuZF9jb250YWluZXI6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTU5vZGUqCit3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfY29udGFpbmVyKFdlYktpdERPTVJh
bmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9n
ZXRfZW5kX29mZnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZwor
d2Via2l0X2RvbV9yYW5nZV9nZXRfZW5kX29mZnNldChXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vy
cm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbGxhcHNlZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9yYW5nZV9nZXRfY29sbGFwc2VkKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9nZXRfY29tbW9uX2FuY2VzdG9yX2NvbnRh
aW5lcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAjR0Vycm9yCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbW1vbl9hbmNl
c3Rvcl9jb250YWluZXIoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVJhbmdlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fcmFuZ2VfZ2V0X3RleHQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NUmFuZ2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01SYW5nZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjY4OWRiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2VQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01SYW5nZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01SYW5n
ZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01SYW5nZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVJh
bmdlKiB3cmFwUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqKTsKK1dlYktpdERPTVJhbmdlKiBraXQoV2Vi
Q29yZTo6UmFuZ2UqKTsKK1dlYkNvcmU6OlJhbmdlKiBjb3JlKFdlYktpdERPTVJhbmdlKik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVJhbmdlUHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlVW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2VVbnN0YWJs
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMTA5ZWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVJhbmdlVW5zdGFibGUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVJhbmdlVW5zdGFibGVf
aAorI2RlZmluZSBXZWJLaXRET01SYW5nZVVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMt
dW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vf
ZXhwYW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAdW5pdDogQSAjZ2NoYXIK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3JhbmdlX2V4cGFuZChXZWJLaXRET01SYW5nZSogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHVuaXQsIEdFcnJvcioqIGVycm9yKTsKKworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NUmFuZ2VVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNjcmVlbi5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVNjcmVlbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3M2Mz
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2NyZWVuLmNwcApAQCAtMCwwICsxLDMwNSBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVNjcmVlbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01TY3JlZW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9TQ1JFRU5fR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfU0NSRUVOLCBXZWJLaXRE
T01TY3JlZW5Qcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU2NyZWVuUHJpdmF0
ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcmVlbj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9N
U2NyZWVuUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVNjcmVlbiog
a2l0KFdlYkNvcmU6OlNjcmVlbiogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1NDUkVFTihyZXQpOworCisgICAgcmV0dXJuIHdy
YXBTY3JlZW4ob2JqKTsKK30KKworV2ViQ29yZTo6U2NyZWVuKiBjb3JlKFdlYktpdERPTVNjcmVl
biogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlNjcmVlbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTVNjcmVlbiogd3JhcFNjcmVlbihXZWJDb3JlOjpTY3JlZW4qIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1ND
UkVFTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1NDUkVFTiwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19E
RUZJTkVfVFlQRShXZWJLaXRET01TY3JlZW4sIHdlYmtpdF9kb21fc2NyZWVuLCBXRUJLSVRfRE9N
X1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9IRUlHSFQsCisg
ICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0NPTE9SX0RFUFRILAorICAgIFBST1BfUElYRUxfREVQ
VEgsCisgICAgUFJPUF9BVkFJTF9MRUZULAorICAgIFBST1BfQVZBSUxfVE9QLAorICAgIFBST1Bf
QVZBSUxfSEVJR0hULAorICAgIFBST1BfQVZBSUxfV0lEVEgsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3NjcmVlbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NU2NyZWVuUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU0NSRUVOX0dFVF9QUklWQVRFKG9i
amVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NU2NyZWVuUHJpdmF0ZSgpOworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc2NyZWVuX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc2NyZWVuX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVNjcmVlbiogc2VsZiA9IFdFQktJVF9ET01f
U0NSRUVOKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBS
T1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9z
Y3JlZW5fZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9X
SURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fc2NyZWVu
X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0xPUl9E
RVBUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fc2NyZWVu
X2dldF9jb2xvcl9kZXB0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
SVhFTF9ERVBUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21f
c2NyZWVuX2dldF9waXhlbF9kZXB0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9BVkFJTF9MRUZUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3NjcmVlbl9nZXRfYXZhaWxfbGVmdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9BVkFJTF9UT1A6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtp
dF9kb21fc2NyZWVuX2dldF9hdmFpbF90b3Aoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQVZBSUxfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9zY3JlZW5fZ2V0X2F2YWlsX2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9BVkFJTF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmco
dmFsdWUsIHdlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF93aWR0aChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9zY3JlZW5fY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zY3JlZW5fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKwor
ICAgIFdlYktpdERPTVNjcmVlblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NDUkVFTl9HRVRf
UFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpTY3JlZW4qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2Jq
ZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
c2NyZWVuX2NsYXNzX2luaXQoV2ViS2l0RE9NU2NyZWVuQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTVNjcmVlblByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9y
ID0gd2Via2l0X2RvbV9zY3JlZW5fY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdF9kb21fc2NyZWVuX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zY3JlZW5fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAg
ImhlaWdodCIsCisgICAgICAgICAgICAiU2NyZWVuOmhlaWdodCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGd1bG9uZyBTY3JlZW46aGVpZ2h0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgIndp
ZHRoIiwKKyAgICAgICAgICAgICJTY3JlZW46d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWxvbmcgU2NyZWVuOndpZHRoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9D
T0xPUl9ERVBUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImNv
bG9yLWRlcHRoIiwKKyAgICAgICAgICAgICJTY3JlZW46Y29sb3ItZGVwdGgiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBndWxvbmcgU2NyZWVuOmNvbG9yLWRlcHRoIiwKKyAgICAgICAgICAgIDAs
IEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9QSVhFTF9ERVBUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25n
KAorICAgICAgICAgICAgInBpeGVsLWRlcHRoIiwKKyAgICAgICAgICAgICJTY3JlZW46cGl4ZWwt
ZGVwdGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgU2NyZWVuOnBpeGVsLWRlcHRo
IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVkFJTF9MRUZULAorICAgICAgICBn
X3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJhdmFpbC1sZWZ0IiwKKyAgICAgICAgICAg
ICJTY3JlZW46YXZhaWwtbGVmdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFNjcmVl
bjphdmFpbC1sZWZ0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVZB
SUxfVE9QLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJhdmFpbC10
b3AiLAorICAgICAgICAgICAgIlNjcmVlbjphdmFpbC10b3AiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnbG9uZyBTY3JlZW46YXZhaWwtdG9wIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19N
QVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfQVZBSUxfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisg
ICAgICAgICAgICAiYXZhaWwtaGVpZ2h0IiwKKyAgICAgICAgICAgICJTY3JlZW46YXZhaWwtaGVp
Z2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFNjcmVlbjphdmFpbC1oZWlnaHQi
LAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FWQUlMX1dJRFRILAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiYXZhaWwtd2lkdGgiLAorICAgICAgICAg
ICAgIlNjcmVlbjphdmFpbC13aWR0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBT
Y3JlZW46YXZhaWwtd2lkdGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fc2NyZWVuX2luaXQoV2ViS2l0RE9NU2NyZWVuKiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTVNjcmVlblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NDUkVFTl9HRVRfUFJJVkFURShy
ZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVNjcmVlblByaXZhdGUoKTsKK30KKwor
Z3Vsb25nIHdlYmtpdF9kb21fc2NyZWVuX2dldF9oZWlnaHQoV2ViS2l0RE9NU2NyZWVuKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NDUkVFTihzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6U2NyZWVuKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1
bHQgPSBpdGVtLT5oZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Vi
a2l0X2RvbV9zY3JlZW5fZ2V0X3dpZHRoKFdlYktpdERPTVNjcmVlbiogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNjcmVl
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+
d2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2RvbV9zY3Jl
ZW5fZ2V0X2NvbG9yX2RlcHRoKFdlYktpdERPTVNjcmVlbiogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNjcmVlbiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+Y29sb3JE
ZXB0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3NjcmVl
bl9nZXRfcGl4ZWxfZGVwdGgoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1NDUkVFTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U2NyZWVuKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5waXhlbERl
cHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9zY3JlZW5f
Z2V0X2F2YWlsX2xlZnQoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1NDUkVFTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U2NyZWVuKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmF2YWlsTGVmdCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fc2NyZWVuX2dldF9h
dmFpbF90b3AoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1NDUkVFTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U2NyZWVuKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmF2YWlsVG9wKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF9o
ZWlnaHQoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1NDUkVFTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U2NyZWVuKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5hdmFpbEhlaWdodCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxf
d2lkdGgoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1NDUkVFTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U2NyZWVuKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5hdmFpbFdpZHRoKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TY3JlZW4uaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2Ny
ZWVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkY2ZlYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU2NyZWVuLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU2NyZWVuX2gKKyNkZWZpbmUg
V2ViS2l0RE9NU2NyZWVuX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
T2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9TQ1JFRU4gICAg
ICAgICAgICAod2Via2l0X2RvbV9zY3JlZW5fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9TQ1JFRU4ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1NDUkVFTiwgV2ViS2l0RE9NU2NyZWVuKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9TQ1JFRU5fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NDUkVFTiwgV2ViS2l0RE9NU2NyZWVuQ2xhc3MpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfU0NSRUVOKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TQ1JFRU4pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1NDUkVFTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU0NSRUVOKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TQ1JF
RU5fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX1NDUkVFTiwgV2ViS2l0RE9NU2NyZWVuQ2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTVNjcmVlbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307
CisKK3N0cnVjdCBfV2ViS2l0RE9NU2NyZWVuQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fc2Ny
ZWVuX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fc2NyZWVuX2dldF9oZWln
aHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU2NyZWVuCisgKgorICogUmV0dXJuczogQSAjZ3Vs
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZwor
d2Via2l0X2RvbV9zY3JlZW5fZ2V0X2hlaWdodChXZWJLaXRET01TY3JlZW4qIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fc2NyZWVuX2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01TY3JlZW4KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3NjcmVlbl9nZXRfd2lk
dGgoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NjcmVlbl9n
ZXRfY29sb3JfZGVwdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU2NyZWVuCisgKgorICogUmV0
dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGd1bG9uZword2Via2l0X2RvbV9zY3JlZW5fZ2V0X2NvbG9yX2RlcHRoKFdlYktpdERPTVNj
cmVlbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zY3JlZW5fZ2V0X3BpeGVsX2RlcHRo
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVNjcmVlbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9u
ZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dl
YmtpdF9kb21fc2NyZWVuX2dldF9waXhlbF9kZXB0aChXZWJLaXRET01TY3JlZW4qIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF9sZWZ0OgorICogQHNlbGY6IEEg
I1dlYktpdERPTVNjcmVlbgorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3NjcmVlbl9n
ZXRfYXZhaWxfbGVmdChXZWJLaXRET01TY3JlZW4qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fc2NyZWVuX2dldF9hdmFpbF90b3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU2NyZWVuCisg
KgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF90b3AoV2ViS2l0
RE9NU2NyZWVuKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxf
aGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVNjcmVlbgorICoKKyAqIFJldHVybnM6IEEg
I2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxv
bmcKK3dlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF9oZWlnaHQoV2ViS2l0RE9NU2NyZWVuKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfd2lkdGg6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NU2NyZWVuCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2Rv
bV9zY3JlZW5fZ2V0X2F2YWlsX3dpZHRoKFdlYktpdERPTVNjcmVlbiogc2VsZik7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01TY3JlZW5faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TY3JlZW5Qcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVNjcmVlblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iNDYxZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TY3JlZW5Qcml2YXRlLmgKQEAg
LTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01TY3JlZW5Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NU2NyZWVuUHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL1NjcmVlbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01TY3JlZW4uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01TY3JlZW4qIHdy
YXBTY3JlZW4oV2ViQ29yZTo6U2NyZWVuKik7CitXZWJLaXRET01TY3JlZW4qIGtpdChXZWJDb3Jl
OjpTY3JlZW4qKTsKK1dlYkNvcmU6OlNjcmVlbiogY29yZShXZWJLaXRET01TY3JlZW4qKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NU2NyZWVuUHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5
bnRoZXNpcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3ODMxNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzLmNwcApAQCAtMCwwICsxLDI3
MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTVNwZWVjaFN5bnRoZXNpcy5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZ
TlRIRVNJU19HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmos
IFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTLCBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJp
dmF0ZSB7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgUmVmUHRyPFdlYkNvcmU6
OlNwZWVjaFN5bnRoZXNpcz4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKK30gV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZTsKKworI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzKiBraXQoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fU1BFRUNI
X1NZTlRIRVNJUyhyZXQpOworCisgICAgcmV0dXJuIHdyYXBTcGVlY2hTeW50aGVzaXMob2JqKTsK
K30KKworV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBjb3JlKFdlYktpdERPTVNwZWVjaFN5bnRo
ZXNpcyogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpcyo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogd3JhcFNwZWVjaFN5bnRo
ZXNpcyhXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVMoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTLCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXMsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1BFTkRJTkcs
CisgICAgUFJPUF9TUEVBS0lORywKKyAgICBQUk9QX1BBVVNFRCwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
U1BFRUNIX1NZTlRIRVNJU19HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShTUEVFQ0hf
U1lOVEhFU0lTKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBw
cml2LT5+V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBz
ZWxmID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUEVORElORzoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2dldF9wZW5kaW5n
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NQRUFLSU5HOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNf
Z2V0X3NwZWFraW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVVNF
RDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX2dldF9wYXVzZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBn
dWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29u
c3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNp
ZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX0dFVF9QUklWQVRFKG9i
amVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNwZWVj
aFN5bnRoZXNpcyo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmpl
Y3QpOworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19jbGFzc19p
bml0KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0NsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1
Y3RvciA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19jb25zdHJ1Y3RvcjsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2ZpbmFsaXpl
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zcGVlY2hfc3lu
dGhlc2lzX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QRU5ESU5HLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJwZW5kaW5nIiwKKyAgICAgICAg
ICAgICJTcGVlY2hTeW50aGVzaXM6cGVuZGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdi
b29sZWFuIFNwZWVjaFN5bnRoZXNpczpwZW5kaW5nIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1BF
QUtJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInNwZWFr
aW5nIiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVzaXM6c3BlYWtpbmciLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnYm9vbGVhbiBTcGVlY2hTeW50aGVzaXM6c3BlYWtpbmciLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9QQVVTRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAg
ICAgICAgICAgInBhdXNlZCIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzOnBhdXNlZCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFNwZWVjaFN5bnRoZXNpczpwYXVzZWQi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfaW5pdChX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19HRVRf
UFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ByaXZhdGUoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfc3BlYWso
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxmLCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UqIHV0dGVyYW5jZSkKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVMoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRSh1dHRlcmFu
Y2UpKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBjb252ZXJ0ZWRV
dHRlcmFuY2UgPSBXZWJLaXQ6OmNvcmUodXR0ZXJhbmNlKTsKKyAgICBpdGVtLT5zcGVhaygqY29u
dmVydGVkVXR0ZXJhbmNlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVO
VVNFRF9QQVJBTSh1dHRlcmFuY2UpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlNwZWVjaCBTeW50aGVzaXMiKQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19jYW5jZWwoV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJUyhzZWxmKSk7CisgICAgV2Vi
Q29yZTo6U3BlZWNoU3ludGhlc2lzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPmNhbmNlbCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisjZW5kaWYgLyog
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3BhdXNlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZikKK3sKKyNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5U
SEVTSVMoc2VsZikpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpcyogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5wYXVzZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5
bnRoZXNpcyIpCisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK3Zv
aWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3Jlc3VtZShXZWJLaXRET01TcGVlY2hTeW50
aGVzaXMqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hT
eW50aGVzaXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVzdW1lKCk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X2dldF9wZW5kaW5nKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZikKK3sKKyNpZiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lO
VEhFU0lTKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnBlbmRp
bmcoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9zcGVlY2hfc3lu
dGhlc2lzX2dldF9zcGVha2luZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYpCit7Cisj
aWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BF
RUNIX1NZTlRIRVNJUyhzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
cyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5zcGVha2luZygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3lu
dGhlc2lzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8q
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfZ2V0X3BhdXNlZChXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfU1BFRUNIX1NZTlRIRVNJUyhzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5
bnRoZXNpcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT5wYXVzZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNo
IFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01T
cGVlY2hTeW50aGVzaXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlYjczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9TUEVF
Q0hfU1lOVEhFU0lTICAgICAgICAgICAgKHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVMob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NQ
RUVDSF9TWU5USEVTSVMsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcykpCisjZGVmaW5lIFdFQktJ
VF9ET01fU1BFRUNIX1NZTlRIRVNJU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUywgV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1BFRUNIX1NZ
TlRIRVNJUyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUykpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
U1BFRUNIX1NZTlRIRVNJU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUykpCisjZGVmaW5lIFdFQktJ
VF9ET01fU1BFRUNIX1NZTlRIRVNJU19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUywgV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRo
ZXNpcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVj
dCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc19nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfc3BlYWs6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
CisgKiBAdXR0ZXJhbmNlOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX3NwZWFrKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZiwg
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiB1dHRlcmFuY2UpOworCisvKioKKyAq
IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19jYW5jZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19jYW5jZWwoV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfcGF1c2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc19wYXVzZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19yZXN1bWU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19yZXN1bWUo
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfZ2V0X3BlbmRpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc19nZXRfcGVuZGluZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19nZXRfc3BlYWtpbmc6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19nZXRfc3BlYWtpbmcoV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNf
Z2V0X3BhdXNlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXMKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2dldF9wYXVz
ZWQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjIyNDI2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpc0V2ZW50LmNwcApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc0V2ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUu
aD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVNwZWVjaFN5
bnRoZXNpc0V2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYg
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNFdmVudCoga2l0KFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc0V2ZW50
KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19FVkVOVChr
aXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnQqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OlNw
ZWVjaFN5bnRoZXNpc0V2ZW50KiBjb3JlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBy
ZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzRXZlbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVj
dCkgOiAwOworfQorCitXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCogd3JhcFNwZWVjaFN5
bnRoZXNpc0V2ZW50KFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc0V2ZW50KiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9TUEVFQ0hf
U1lOVEhFU0lTX0VWRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRI
RVNJU19FVkVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50LCB3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnQsIFdFQktJVF9ET01fVFlQRV9FVkVOVCkKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0hBUl9JTkRFWCwKKyAgICBQUk9QX0VMQVBTRURf
VElNRSwKKyAgICBQUk9QX05BTUUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfZXZlbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIHNlbGYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVT
SVNfRVZFTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9DSEFSX0lOREVYOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9jaGFyX2luZGV4KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VMQVBTRURfVElNRToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfZmxvYXQodmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19ldmVudF9nZXRfZWxh
cHNlZF90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc19ldmVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfY2xhc3NfaW5pdChXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXNFdmVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSEFSX0lOREVYLAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiY2hhci1pbmRleCIsCisgICAgICAgICAg
ICAiU3BlZWNoU3ludGhlc2lzRXZlbnQ6Y2hhci1pbmRleCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGd1bG9uZyBTcGVlY2hTeW50aGVzaXNFdmVudDpjaGFyLWluZGV4IiwKKyAgICAgICAgICAg
IDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9FTEFQU0VEX1RJTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19m
bG9hdCgKKyAgICAgICAgICAgICJlbGFwc2VkLXRpbWUiLAorICAgICAgICAgICAgIlNwZWVjaFN5
bnRoZXNpc0V2ZW50OmVsYXBzZWQtdGltZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdmbG9h
dCBTcGVlY2hTeW50aGVzaXNFdmVudDplbGFwc2VkLXRpbWUiLAorICAgICAgICAgICAgLUdfTUFY
RkxPQVQsIEdfTUFYRkxPQVQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc0V2ZW50
Om5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogU3BlZWNoU3ludGhlc2lzRXZl
bnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19l
dmVudF9pbml0KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiByZXF1ZXN0KQoreworICAg
IFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc19ldmVudF9nZXRfY2hhcl9pbmRleChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVu
dCogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpTcGVlY2hTeW50aGVzaXNFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
dWxvbmcgcmVzdWx0ID0gaXRlbS0+Y2hhckluZGV4KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxv
bmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitnZmxv
YXQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9lbGFwc2VkX3RpbWUoV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19FVkVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzRXZlbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Zsb2F0IHJlc3VsdCA9IGl0ZW0tPmVsYXBzZWRUaW1l
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZmxvYXQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X2V2ZW50X2dldF9uYW1lKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBzZWxmKQorewor
I2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQ
RUVDSF9TWU5USEVTSVNfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRo
ZXNpc0V2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8q
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpc0V2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNhN2YxMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50
X2gKKyNkZWZpbmUgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRfaAorCisjaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01FdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19FVkVOVCAgICAgICAgICAgICh3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9TUEVFQ0hfU1lOVEhFU0lTX0VWRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX0VWRU5U
LCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fU1BF
RUNIX1NZTlRIRVNJU19FVkVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19FVkVOVCwgV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19T
UEVFQ0hfU1lOVEhFU0lTX0VWRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX0VWRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX0VWRU5UX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hf
U1lOVEhFU0lTX0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX0VW
RU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX0VWRU5ULCBXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNFdmVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVu
dCB7CisgICAgV2ViS2l0RE9NRXZlbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudENsYXNzIHsKKyAgICBXZWJLaXRET01FdmVudENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc19ldmVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X2NoYXJfaW5kZXg6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X2NoYXJfaW5kZXgoV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc19ldmVudF9nZXRfZWxhcHNlZF90aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpc0V2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Zsb2F0CisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX2V2ZW50X2dldF9lbGFwc2VkX3RpbWUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
RXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19ldmVu
dF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dl
dF9uYW1lKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBzZWxmKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8q
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFj
a0Z1bmN0aW9uUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudFByaXZhdGUuaApz
aW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUu
aApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudFByaXZhdGUuaAppbmRleCA5ODkw
YTkyLi4xYzMzNmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50UHJpdmF0ZS5oCkBAIC0xOCwxOSArMTgsMTkgQEAK
ICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERP
TVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RDYWxs
YmFja0Z1bmN0aW9uUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2
ZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50UHJpdmF0
ZV9oCiAKLSNpbmNsdWRlICJUZXN0Q2FsbGJhY2tGdW5jdGlvbi5oIgotI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U3BlZWNoU3ludGhlc2lzRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzRXZlbnQuaD4KICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKIAogbmFt
ZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogd3JhcFRlc3RD
YWxsYmFja0Z1bmN0aW9uKFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uKik7Ci1XZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvbioga2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9u
Kik7Ci1XZWJDb3JlOjpUZXN0Q2FsbGJhY2tGdW5jdGlvbiogY29yZShXZWJLaXRET01UZXN0Q2Fs
bGJhY2tGdW5jdGlvbiopOworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIHdyYXBTcGVl
Y2hTeW50aGVzaXNFdmVudChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNFdmVudCopOworV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIGtpdChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNFdmVu
dCopOworV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzRXZlbnQqIGNvcmUoV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzRXZlbnQqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLyogRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpICovCiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2FsbGJh
Y2tGdW5jdGlvblByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c0V2ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDcxJQpyZW5hbWUgZnJv
bSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0Q2FsbGJhY2tQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0
ZS5oCmluZGV4IDA5NzIzODguLjYxM2JkNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUuaApAQCAtMTgsMTkgKzE4LDE5IEBA
CiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRE
T01UZXN0Q2FsbGJhY2tQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJp
dmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlX2gKIAotI2luY2x1ZGUgIlRlc3RDYWxs
YmFjay5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0Q2FsbGJhY2suaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1NwZWVjaFN5bnRoZXNpcy5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01TcGVlY2hTeW50aGVzaXMuaD4KICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
IAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Q2FsbGJhY2sqIHdyYXBUZXN0Q2Fs
bGJhY2soV2ViQ29yZTo6VGVzdENhbGxiYWNrKik7Ci1XZWJLaXRET01UZXN0Q2FsbGJhY2sqIGtp
dChXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqKTsKLVdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZShX
ZWJLaXRET01UZXN0Q2FsbGJhY2sqKTsKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogd3JhcFNw
ZWVjaFN5bnRoZXNpcyhXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqKTsKK1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpcyoga2l0KFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpcyopOworV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzKiBjb3JlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyopOwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KIAot
I2VuZGlmIC8qIFdlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdl
YktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTRlODMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAKQEAgLTAsMCArMSw0
ODMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1NQ
RUVDSF9TWU5USEVTSVNfVVRURVJBTkNFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVVRURVJB
TkNFLCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZSB7CisjaWYg
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZT4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRI
RVNJUykKK30gV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZTsKKworI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBraXQoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAg
cmV0dXJuIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0UocmV0KTsKKworICAg
IHJldHVybiB3cmFwU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKG9iaik7Cit9CisKK1dlYkNvcmU6
OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogY29yZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UqIHdyYXBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UoV2ViQ29yZTo6U3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFLCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2Rpc3BhdGNoX2V2ZW50KFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiog
ZXJyb3IpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNv
cmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24u
bmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVy
cm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhl
c2lzIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0
ZXJhbmNlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OlNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVO
VVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBV
TlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVO
QUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9z
cGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJ
UykKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVT
RURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdl
dElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9t
X3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5h
ZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNl
X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZSwgV0VCS0lU
X0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9F
VkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAg
ICBQUk9QXzAsCisgICAgUFJPUF9URVhULAorICAgIFBST1BfTEFORywKKyAgICBQUk9QX1ZPSUNF
LAorICAgIFBST1BfVk9MVU1FLAorICAgIFBST1BfUkFURSwKKyAgICBQUk9QX1BJVENILAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFO
Q0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgcHJpdi0+fldlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3BhcmVudF9jbGFzcyktPmZpbmFs
aXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c191dHRlcmFuY2Vfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lO
VEhFU0lTX1VUVEVSQU5DRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191
dHRlcmFuY2Vfc2V0X3RleHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQU5HOgorICAgICAgICB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF9sYW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVk9MVU1FOgorICAgICAgICB3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF92b2x1bWUoc2VsZiwgZ192
YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JB
VEU6CisgICAgICAgIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3Jh
dGUoc2VsZiwgZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1BJVENIOgorICAgICAgICB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0
ZXJhbmNlX3NldF9waXRjaChzZWxmLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5j
ZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNF
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVEVY
VDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MQU5HOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9sYW5nKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZPSUNFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3ZvaWNl
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZPTFVNRToKKyAgICAgICAg
Z192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRl
cmFuY2VfZ2V0X3ZvbHVtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9S
QVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfcmF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9QSVRDSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHdlYmtp
dF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3BpdGNoKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0
ZXJhbmNlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc191dHRlcmFuY2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRV9HRVRfUFJJVkFU
RShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpT
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3Jl
T2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVj
dC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfdXR0ZXJhbmNlX2NsYXNzX2luaXQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9maW5h
bGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ0ZXh0IiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2U6dGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlOnRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFORywKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsYW5nIiwKKyAgICAgICAgICAgICJT
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6bGFuZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOmxhbmciLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Vk9JQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidm9pY2Ui
LAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTp2b2ljZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBTcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2U6dm9pY2UiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NQRUVD
SF9TWU5USEVTSVNfVk9JQ0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9WT0xVTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgK
KyAgICAgICAgICAgICJ2b2x1bWUiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZTp2b2x1bWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Zsb2F0IFNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZTp2b2x1bWUiLAorICAgICAgICAgICAgLUdfTUFYRkxPQVQsIEdfTUFYRkxP
QVQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfUkFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAg
InJhdGUiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTpyYXRlIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdmbG9hdCBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6cmF0
ZSIsCisgICAgICAgICAgICAtR19NQVhGTE9BVCwgR19NQVhGTE9BVCwgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QSVRDSCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgInBpdGNoIiwKKyAgICAgICAg
ICAgICJTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6cGl0Y2giLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2Zsb2F0IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTpwaXRjaCIsCisgICAgICAgICAg
ICAtR19NQVhGTE9BVCwgR19NQVhGTE9BVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdXR0ZXJhbmNlX2luaXQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiByZXF1
ZXN0KQoreworICAgIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFX0dFVF9QUklWQVRFKHJl
cXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
UHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVy
YW5jZV9nZXRfdGV4dChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
U1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gMDsK
KyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF90ZXh0KFdlYktpdERPTVNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJ
U19VVFRFUkFOQ0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VGV4dChjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorI2VuZGlmIC8q
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfbGFuZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5s
YW5nKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lz
IikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8K
K30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF9sYW5n
KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0TGFuZyhjb252ZXJ0ZWRW
YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50
aGVzaXMiKQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0
dGVyYW5jZV9nZXRfdm9pY2UoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxm
KQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpT
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+dm9pY2UoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJu
IDA7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdm9pY2UoV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2lj
ZSogdmFsdWUpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0UodmFsdWUpKTsKKyAg
ICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UqIGNvbnZlcnRlZFZhbHVl
ID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICBpdGVtLT5zZXRWb2ljZShjb252ZXJ0ZWRWYWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVz
aXMiKQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitnZmxvYXQg
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdm9sdW1lKFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVS
QU5DRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCByZXN1bHQgPSBpdGVtLT52b2x1
bWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdmbG9hdD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3V0dGVyYW5jZV9zZXRfdm9sdW1lKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSog
c2VsZiwgZ2Zsb2F0IHZhbHVlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2VsZikpOworICAg
IFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRWb2x1bWUodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykgKi8KK30KKworZ2Zsb2F0IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c191dHRlcmFuY2VfZ2V0X3JhdGUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBz
ZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Zsb2F0IHJlc3VsdCA9IGl0ZW0tPnJhdGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdmbG9h
dD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfcmF0ZShXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYsIGdmbG9hdCB2YWx1ZSkKK3sKKyNpZiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVT
SVNfVVRURVJBTkNFKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0UmF0ZSh2YWx1ZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMi
KQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitnZmxvYXQgd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfcGl0Y2goV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNF
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Zsb2F0IHJlc3VsdCA9IGl0ZW0tPnBpdGNoKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnZmxvYXQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hf
U1lOVEhFU0lTKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRl
cmFuY2Vfc2V0X3BpdGNoKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwg
Z2Zsb2F0IHZhbHVlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2VsZikpOworICAgIFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRQaXRjaCh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lO
VEhFU0lTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YWRlMzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2UuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Vf
aAorI2RlZmluZSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VfaAorCisjaWZkZWYg
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFICAgICAgICAgICAg
KHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfU1BFRUNI
X1NZTlRIRVNJU19VVFRFUkFOQ0UsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSkp
CisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0VfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFLCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2VDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVS
QU5DRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0UpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lT
X1VUVEVSQU5DRSkpCisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFO
Q0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFLCBXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2VDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsK
Kworc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VDbGFzcyB7CisgICAg
V2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdHlwZSh2b2lkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF90ZXh0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRf
dGV4dChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3RleHQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3RleHQoV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X2xhbmc6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9sYW5nKFdl
YktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfbGFuZzoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfbGFuZyhXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdm9pY2U6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZQorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNWb2ljZSoKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3ZvaWNl
KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdm9pY2U6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisgKiBAdmFsdWU6IEEgI1dlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vf
c2V0X3ZvaWNlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwgV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF92b2x1bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisgKgorICogUmV0dXJuczogQSAjZ2Zsb2F0Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdm9sdW1lKFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdm9sdW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICogQHZhbHVlOiBBICNnZmxvYXQKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdm9sdW1lKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZSogc2VsZiwgZ2Zsb2F0IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9yYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICoKKyAqIFJldHVybnM6IEEgI2dmbG9hdAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3JhdGUoV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdXR0ZXJhbmNlX3NldF9yYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZQorICogQHZhbHVlOiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3V0dGVyYW5jZV9zZXRfcmF0ZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNl
bGYsIGdmbG9hdCB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3V0dGVyYW5jZV9nZXRfcGl0Y2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlCisgKgorICogUmV0dXJuczogQSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X2RvbV9zcGVlY2hfc3lu
dGhlc2lzX3V0dGVyYW5jZV9nZXRfcGl0Y2goV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJh
bmNlX3NldF9waXRjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UKKyAqIEB2YWx1ZTogQSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFu
Y2Vfc2V0X3BpdGNoKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwgZ2Zs
b2F0IHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNTVlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2VQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZS5oPgorI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogd3JhcFNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZShXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqKTsKK1dlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSoga2l0KFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZSopOworV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBjb3JlKFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KKworI2VuZGlmIC8qIFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDA2MTc2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAKQEAgLTAsMCArMSwyNzIgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZS5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1NQ
RUVDSF9TWU5USEVTSVNfVk9JQ0VfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSwgV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlIHsKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2U+IGNvcmVP
YmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCit9IFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZTsKKworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2Uq
IGtpdChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSogb2JqKQoreworICAgIGlmICghb2Jq
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RD
YWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVT
SVNfVk9JQ0UocmV0KTsKKworICAgIHJldHVybiB3cmFwU3BlZWNoU3ludGhlc2lzVm9pY2Uob2Jq
KTsKK30KKworV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UqIGNvcmUoV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVm9pY2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlKiB3cmFwU3BlZWNoU3ludGhlc2lzVm9pY2UoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
Vm9pY2UqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0UoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0
LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVm9pY2UsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZSwgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVk9JQ0VfVVJJ
LAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX0xBTkcsCisgICAgUFJPUF9MT0NBTF9TRVJWSUNF
LAorICAgIFBST1BfREVGQVVMVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc192b2ljZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hf
U1lOVEhFU0lTX1ZPSUNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIHBy
aXYtPn5XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3lu
dGhlc2lzX3ZvaWNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlKiBzZWxmID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1ZP
SUNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
Vk9JQ0VfVVJJOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X3ZvaWNlX3VyaShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X25hbWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFORzoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9sYW5n
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPQ0FMX1NFUlZJQ0U6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc192b2ljZV9nZXRfbG9jYWxfc2VydmljZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9ERUZBVUxUOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X2RlZmF1bHQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192
b2ljZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBH
T2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdm9pY2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRI
RVNJUykKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
Vm9pY2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsK
KyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICByZXR1cm4gb2JqZWN0Owor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfY2xhc3Nf
aW5pdChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2NvbnN0
cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdm9pY2VfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1ZPSUNFX1VSSSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ2b2ljZS11cmkiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc1ZvaWNl
OnZvaWNlLXVyaSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBTcGVlY2hTeW50aGVz
aXNWb2ljZTp2b2ljZS11cmkiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIlNwZWVj
aFN5bnRoZXNpc1ZvaWNlOm5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogU3Bl
ZWNoU3ludGhlc2lzVm9pY2U6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBTkcsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibGFuZyIsCisgICAgICAgICAgICAi
U3BlZWNoU3ludGhlc2lzVm9pY2U6bGFuZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFy
KiBTcGVlY2hTeW50aGVzaXNWb2ljZTpsYW5nIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTE9DQUxfU0VS
VklDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibG9jYWwt
c2VydmljZSIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzVm9pY2U6bG9jYWwtc2Vydmlj
ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFNwZWVjaFN5bnRoZXNpc1ZvaWNl
OmxvY2FsLXNlcnZpY2UiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxULAorICAgICAgICBn
X3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkZWZhdWx0IiwKKyAgICAgICAgICAg
ICJTcGVlY2hTeW50aGVzaXNWb2ljZTpkZWZhdWx0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2Jvb2xlYW4gU3BlZWNoU3ludGhlc2lzVm9pY2U6ZGVmYXVsdCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9pbml0KFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1ZvaWNlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19WT0lDRV9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc1ZvaWNlUHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhl
c2lzX3ZvaWNlX2dldF92b2ljZV91cmkoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfU1BFRUNIX1NZTlRIRVNJU19WT0lDRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzVm9pY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dm9pY2VVUkkoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiAw
OworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9uYW1lKFdlYktpdERPTVNwZWVjaFN5
bnRoZXNpc1ZvaWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0Uoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQor
ICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQor
CitnY2hhciogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9sYW5nKFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lO
VEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0Uo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmxhbmcoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBT
eW50aGVzaXMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2Vf
Z2V0X2xvY2FsX3NlcnZpY2UoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
U1BFRUNIX1NZTlRIRVNJU19WT0lDRShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlNwZWVj
aFN5bnRoZXNpc1ZvaWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmxvY2FsU2VydmljZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xl
YW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCitnYm9v
bGVhbiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X2RlZmF1bHQoV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5U
SEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19WT0lDRShz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmlzRGVmYXVs
dCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMWRkN2U4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVm9pY2UuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZV9oCisjZGVm
aW5lIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlX2gKKworI2lmZGVmIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFICAgICAgICAgICAgKHdlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVD
SF9TWU5USEVTSVNfVk9JQ0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0UsIFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lO
VEhFU0lTX1ZPSUNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFLCBXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NQRUVDSF9T
WU5USEVTSVNfVk9JQ0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0UpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVT
SVNfVk9JQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0VfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0UsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1Zv
aWNlQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlIHsKKyAg
ICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdm9pY2VfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX3ZvaWNlX2dldF92b2ljZV91cmk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzVm9pY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfdm9pY2VfdXJpKFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9p
Y2VfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9n
ZXRfbmFtZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9sYW5nOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X2xhbmcoV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVm9pY2UqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c192b2ljZV9nZXRfbG9jYWxfc2VydmljZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNWb2ljZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdm9pY2VfZ2V0X2xvY2FsX3NlcnZpY2UoV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVm9pY2UqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192
b2ljZV9nZXRfZGVmYXVsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNW
b2ljZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdm9pY2VfZ2V0X2RlZmF1bHQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHNlbGYp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVm9pY2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDIzOTQwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2
YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9TcGVlY2hTeW50aGVzaXNWb2ljZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01T
cGVlY2hTeW50aGVzaXNWb2ljZS5oPgorI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiB3cmFwU3Bl
ZWNoU3ludGhlc2lzVm9pY2UoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UqKTsKK1dlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBraXQoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9p
Y2UqKTsKK1dlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBjb3JlKFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1ZvaWNlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVO
QUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVm9pY2VQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVN0b3JhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTlh
NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2UuY3BwCkBAIC0wLDAgKzEsMjIyIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NU3RvcmFnZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBv
cnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01TdG9yYWdlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fU1RPUkFHRV9HRVRfUFJJVkFURShvYmopIEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9TVE9SQUdFLCBX
ZWJLaXRET01TdG9yYWdlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0b3Jh
Z2VQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZT4gY29yZU9iamVjdDsKK30g
V2ViS2l0RE9NU3RvcmFnZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01TdG9yYWdlKiBraXQoV2ViQ29yZTo6U3RvcmFnZSogb2JqKQoreworICAgIGlmICghb2JqKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1NUT1JBR0UocmV0KTsKKwor
ICAgIHJldHVybiB3cmFwU3RvcmFnZShvYmopOworfQorCitXZWJDb3JlOjpTdG9yYWdlKiBjb3Jl
KFdlYktpdERPTVN0b3JhZ2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTdG9yYWdlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NU3RvcmFnZSogd3JhcFN0b3JhZ2UoV2ViQ29y
ZTo6U3RvcmFnZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fU1RPUkFHRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1NU
T1JBR0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NU3RvcmFnZSwgd2Via2l0
X2RvbV9zdG9yYWdlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0b3Jh
Z2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVN0b3JhZ2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVE9SQUdFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
CisKKyAgICBwcml2LT5+V2ViS2l0RE9NU3RvcmFnZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3N0b3JhZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdG9yYWdlX2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTVN0b3JhZ2UqIHNlbGYgPSBXRUJLSVRfRE9NX1NUT1JBR0Uo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5H
VEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3N0b3JhZ2Vf
Z2V0X2xlbmd0aChzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV9zdG9yYWdlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fc3RvcmFnZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NU3RvcmFn
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NUT1JBR0VfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3RvcmFnZSo+KFdF
QktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0
dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdG9yYWdlX2NsYXNzX2lu
aXQoV2ViS2l0RE9NU3RvcmFnZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01TdG9y
YWdlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9t
X3N0b3JhZ2VfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9kb21fc3RvcmFnZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fc3RvcmFnZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVO
R1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwK
KyAgICAgICAgICAgICJTdG9yYWdlOmxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1
bG9uZyBTdG9yYWdlOmxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9zdG9yYWdlX2luaXQoV2ViS2l0RE9NU3RvcmFnZSogcmVxdWVzdCkKK3sKKyAgICBX
ZWJLaXRET01TdG9yYWdlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1RPUkFHRV9HRVRfUFJJ
VkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVN0b3JhZ2VQcml2YXRlKCk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3N0b3JhZ2Vfa2V5KFdlYktpdERPTVN0b3JhZ2UqIHNl
bGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfU1RPUkFHRShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlN0b3JhZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+a2V5KGluZGV4LCBlYykpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0X2l0ZW0o
V2ViS2l0RE9NU3RvcmFnZSogc2VsZiwgY29uc3QgZ2NoYXIqIGtleSwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RPUkFHRShzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoa2V5LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJy
b3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6U3RvcmFnZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRLZXkgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoa2V5KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRJdGVtKGNvbnZlcnRl
ZEtleSwgZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fc3Rv
cmFnZV9zZXRfaXRlbShXZWJLaXRET01TdG9yYWdlKiBzZWxmLCBjb25zdCBnY2hhcioga2V5LCBj
b25zdCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19TVE9SQUdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGtleSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChkYXRhKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
KTsKKyAgICBXZWJDb3JlOjpTdG9yYWdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZEtleSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChrZXkpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZERhdGEgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0
YSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0SXRl
bShjb252ZXJ0ZWRLZXksIGNvbnZlcnRlZERhdGEsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9zdG9yYWdlX3JlbW92ZV9pdGVtKFdlYktpdERPTVN0b3JhZ2UqIHNlbGYsIGNvbnN0IGdj
aGFyKiBrZXksIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RPUkFH
RShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChrZXkpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlN0b3JhZ2UqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkS2V5ID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KGtleSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+cmVtb3ZlSXRlbShjb252ZXJ0ZWRLZXksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9zdG9yYWdlX2NsZWFyKFdlYktpdERPTVN0b3JhZ2UqIHNlbGYsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RPUkFHRShzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6U3RvcmFnZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT5jbGVhcihlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitndWxvbmcgd2Via2l0X2RvbV9zdG9y
YWdlX2dldF9sZW5ndGgoV2ViS2l0RE9NU3RvcmFnZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RPUkFHRShzZWxmKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlN0b3Jh
Z2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aChlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01T
dG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlZjEwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZS5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVN0b3JhZ2VfaAorI2Rl
ZmluZSBXZWJLaXRET01TdG9yYWdlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9TVE9S
QUdFICAgICAgICAgICAgKHdlYmtpdF9kb21fc3RvcmFnZV9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1NUT1JBR0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UsIFdlYktpdERPTVN0b3JhZ2UpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1NUT1JBR0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UsIFdlYktpdERPTVN0
b3JhZ2VDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TVE9SQUdFKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TVE9SQUdF
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TVE9SQUdFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TVE9SQUdFKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9TVE9SQUdFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9TVE9SQUdFLCBXZWJLaXRET01TdG9yYWdl
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVN0b3JhZ2UgeworICAgIFdlYktpdERPTU9iamVj
dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVN0b3JhZ2VDbGFzcyB7
CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2RvbV9zdG9yYWdlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdl
YmtpdF9kb21fc3RvcmFnZV9rZXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3RvcmFnZQorICog
QGluZGV4OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9zdG9yYWdlX2tleShXZWJLaXRET01TdG9yYWdlKiBzZWxmLCBndWxvbmcg
aW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0
X2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3RvcmFnZQorICogQGtleTogQSAjZ2NoYXIK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zdG9y
YWdlX2dldF9pdGVtKFdlYktpdERPTVN0b3JhZ2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBrZXksIEdF
cnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0b3JhZ2Vfc2V0X2l0ZW06Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NU3RvcmFnZQorICogQGtleTogQSAjZ2NoYXIKKyAqIEBkYXRh
OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fc3RvcmFnZV9zZXRfaXRlbShXZWJL
aXRET01TdG9yYWdlKiBzZWxmLCBjb25zdCBnY2hhcioga2V5LCBjb25zdCBnY2hhciogZGF0YSwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3RvcmFnZV9yZW1vdmVfaXRl
bToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdG9yYWdlCisgKiBAa2V5OiBBICNnY2hhcgorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fc3RvcmFnZV9yZW1vdmVfaXRlbShXZWJLaXRET01TdG9yYWdl
KiBzZWxmLCBjb25zdCBnY2hhcioga2V5LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9zdG9yYWdlX2NsZWFyOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0b3JhZ2UKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX3N0b3JhZ2VfY2xlYXIoV2ViS2l0RE9NU3RvcmFnZSogc2Vs
ZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3RvcmFnZV9nZXRfbGVu
Z3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0b3JhZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fc3RvcmFnZV9nZXRfbGVuZ3RoKFdlYktp
dERPTVN0b3JhZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERP
TVN0b3JhZ2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlSW5mby5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0
b3JhZ2VJbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNhMGI4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlSW5mby5jcHAKQEAgLTAsMCArMSw2IEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlw
dHMgdGhhdCBXZWJLaXRET01TdG9yYWdlSW5mby5oIGFuZAorICAgIFdlYktpdERPTVN0b3JhZ2VJ
bmZvLmNwcCBhcmUgY3JlYXRlZCBmb3IgU3RvcmFnZUluZm8uaWRsLCBhbmQgdGh1cworICAgIHBy
ZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9N
U3RvcmFnZUluZm8uaCBhbmQKKyAgICBXZWJLaXRET01TdG9yYWdlSW5mby5jcHAgYXQgZXZlcnkg
YnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NU3RvcmFnZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZUluZm8uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNhMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01TdG9yYWdlSW5mby5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2Vu
ZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NU3RvcmFnZUlu
Zm8uaCBhbmQKKyAgICBXZWJLaXRET01TdG9yYWdlSW5mby5jcHAgYXJlIGNyZWF0ZWQgZm9yIFN0
b3JhZ2VJbmZvLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZy
b20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVN0b3JhZ2VJbmZvLmggYW5kCisgICAgV2Vi
S2l0RE9NU3RvcmFnZUluZm8uY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3Qg
YmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVN0b3JhZ2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMWMyYmY5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUuaApA
QCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTVN0b3JhZ2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NU3RvcmFnZVByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9TdG9yYWdlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTVN0b3JhZ2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01TdG9y
YWdlKiB3cmFwU3RvcmFnZShXZWJDb3JlOjpTdG9yYWdlKik7CitXZWJLaXRET01TdG9yYWdlKiBr
aXQoV2ViQ29yZTo6U3RvcmFnZSopOworV2ViQ29yZTo6U3RvcmFnZSogY29yZShXZWJLaXRET01T
dG9yYWdlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVN0
b3JhZ2VQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NU3RvcmFnZVF1b3RhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
ZGI1NjIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUXVvdGEuY3BwCkBAIC0wLDAg
KzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWls
ZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmggYW5kCisgICAgV2ViS2l0RE9N
U3RvcmFnZVF1b3RhLmNwcCBhcmUgY3JlYXRlZCBmb3IgU3RvcmFnZVF1b3RhLmlkbCwgYW5kIHRo
dXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRl
IFdlYktpdERPTVN0b3JhZ2VRdW90YS5oIGFuZAorICAgIFdlYktpdERPTVN0b3JhZ2VRdW90YS5j
cHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxl
LgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VRdW90
YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjU2MjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVN0b3JhZ2VRdW90YS5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2Vi
S2l0RE9NU3RvcmFnZVF1b3RhLmggYW5kCisgICAgV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmNwcCBh
cmUgY3JlYXRlZCBmb3IgU3RvcmFnZVF1b3RhLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRo
ZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVN0b3JhZ2VR
dW90YS5oIGFuZAorICAgIFdlYktpdERPTVN0b3JhZ2VRdW90YS5jcHAgYXQgZXZlcnkgYnVpbGQu
IFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3R5bGVNZWRpYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlTWVkaWEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTQxMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0
eWxlTWVkaWEuY3BwCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3R5bGVNZWRp
YS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHls
ZU1lZGlhUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdF
QktJVF9ET01fU1RZTEVfTUVESUFfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfTUVESUEsIFdlYktpdERPTVN0eWxl
TWVkaWFQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZh
dGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpTdHlsZU1lZGlhPiBjb3JlT2JqZWN0OworfSBXZWJL
aXRET01TdHlsZU1lZGlhUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TVN0eWxlTWVkaWEqIGtpdChXZWJDb3JlOjpTdHlsZU1lZGlhKiBvYmopCit7CisgICAgaWYgKCFv
YmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVj
dENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fU1RZTEVfTUVESUEo
cmV0KTsKKworICAgIHJldHVybiB3cmFwU3R5bGVNZWRpYShvYmopOworfQorCitXZWJDb3JlOjpT
dHlsZU1lZGlhKiBjb3JlKFdlYktpdERPTVN0eWxlTWVkaWEqIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTdHlsZU1lZGlhKj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NU3R5bGVN
ZWRpYSogd3JhcFN0eWxlTWVkaWEoV2ViQ29yZTo6U3R5bGVNZWRpYSogY29yZU9iamVjdCkKK3sK
KyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fU1RZTEVfTUVE
SUEoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9TVFlMRV9NRURJQSwgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
R19ERUZJTkVfVFlQRShXZWJLaXRET01TdHlsZU1lZGlhLCB3ZWJraXRfZG9tX3N0eWxlX21lZGlh
LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9UWVBFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1NUWUxFX01FRElBX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisK
KyAgICBwcml2LT5+V2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3N0eWxlX21lZGlhX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NU3R5bGVNZWRpYSogc2VsZiA9IFdFQktJVF9E
T01fU1RZTEVfTUVESUEob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX3N0eWxlX21lZGlhX2dldF9tZWRpYV90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2NvbnN0cnVjdG9yKEdUeXBl
IHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBh
cmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KworICAgIFdlYktpdERPTVN0eWxlTWVkaWFQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlM
RV9NRURJQV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTdHlsZU1lZGlhKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2NsYXNzX2luaXQoV2ViS2l0RE9NU3R5bGVNZWRp
YUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2Nv
bnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3N0eWxl
X21lZGlhX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9zdHlsZV9tZWRpYV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAg
ICAgICAgICJTdHlsZU1lZGlhOnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
U3R5bGVNZWRpYTp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdHlsZV9tZWRp
YV9pbml0KFdlYktpdERPTVN0eWxlTWVkaWEqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NU3R5
bGVNZWRpYVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NUWUxFX01FRElBX0dFVF9QUklWQVRF
KHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGUoKTsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9tYXRjaF9tZWRpdW0oV2ViS2l0
RE9NU3R5bGVNZWRpYSogc2VsZiwgY29uc3QgZ2NoYXIqIG1lZGlhcXVlcnkpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfU1RZTEVfTUVESUEoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChtZWRpYXF1ZXJ5LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6U3R5bGVNZWRp
YSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRN
ZWRpYXF1ZXJ5ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1lZGlhcXVlcnkpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPm1hdGNoTWVkaXVtKGNvbnZlcnRlZE1lZGlhcXVlcnkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2dldF9t
ZWRpYV90eXBlKFdlYktpdERPTVN0eWxlTWVkaWEqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfU1RZTEVfTUVESUEoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlTWVkaWEq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVN0eWxlTWVkaWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVNZWRpYS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYTdiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVN0eWxlTWVkaWEuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTVN0eWxlTWVkaWFfaAorI2RlZmluZSBXZWJLaXRET01T
dHlsZU1lZGlhX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9TVFlMRV9NRURJQSAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fU1RZTEVfTUVESUEob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX01FRElBLCBXZWJLaXRET01TdHlsZU1l
ZGlhKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9NRURJQV9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfTUVE
SUEsIFdlYktpdERPTVN0eWxlTWVkaWFDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TVFlM
RV9NRURJQShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfU1RZTEVfTUVESUEpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NUWUxF
X01FRElBX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9TVFlMRV9NRURJQSkpCisjZGVmaW5lIFdFQktJVF9ET01fU1RZTEVfTUVE
SUFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX1NUWUxFX01FRElBLCBXZWJLaXRET01TdHlsZU1lZGlhQ2xhc3MpKQorCitz
dHJ1Y3QgX1dlYktpdERPTVN0eWxlTWVkaWEgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRf
aW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVN0eWxlTWVkaWFDbGFzcyB7CisgICAg
V2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9zdHlsZV9tZWRpYV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3N0eWxlX21lZGlhX21hdGNoX21lZGl1bToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01T
dHlsZU1lZGlhCisgKiBAbWVkaWFxdWVyeTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNn
Ym9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV9zdHlsZV9tZWRpYV9tYXRjaF9tZWRpdW0oV2ViS2l0RE9NU3R5bGVN
ZWRpYSogc2VsZiwgY29uc3QgZ2NoYXIqIG1lZGlhcXVlcnkpOworCisvKioKKyAqIHdlYmtpdF9k
b21fc3R5bGVfbWVkaWFfZ2V0X21lZGlhX3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3R5
bGVNZWRpYQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zdHlsZV9tZWRpYV9nZXRf
bWVkaWFfdHlwZShXZWJLaXRET01TdHlsZU1lZGlhKiBzZWxmKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktp
dERPTVN0eWxlTWVkaWFfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA5NGJjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlTWVkaWFQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVN0eWxl
TWVkaWFQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvU3R5bGVNZWRpYS5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TdHlsZU1lZGlhLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworV2ViS2l0RE9NU3R5bGVNZWRpYSogd3JhcFN0eWxlTWVkaWEoV2ViQ29yZTo6U3R5bGVNZWRp
YSopOworV2ViS2l0RE9NU3R5bGVNZWRpYSoga2l0KFdlYkNvcmU6OlN0eWxlTWVkaWEqKTsKK1dl
YkNvcmU6OlN0eWxlTWVkaWEqIGNvcmUoV2ViS2l0RE9NU3R5bGVNZWRpYSopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDZkMGU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TdHlsZVNoZWV0LmNwcApAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTVN0eWxlU2hlZXQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYUxpc3RQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX1NUWUxFX1NIRUVULCBXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
U3R5bGVTaGVldD4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01TdHlsZVNoZWV0KiBraXQoV2ViQ29yZTo6
U3R5bGVTaGVldCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAg
IHJldHVybiBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUKHJldCk7CisKKyAgICByZXR1cm4gd3JhcChv
YmopOworfQorCitXZWJDb3JlOjpTdHlsZVNoZWV0KiBjb3JlKFdlYktpdERPTVN0eWxlU2hlZXQq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpT
dHlsZVNoZWV0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NU3R5bGVTaGVldCogd3JhcFN0eWxlU2hlZXQoV2ViQ29yZTo6U3R5bGVT
aGVldCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fU1RZTEVfU0hFRVQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9TVFlM
RV9TSEVFVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01TdHlsZVNoZWV0LCB3
ZWJraXRfZG9tX3N0eWxlX3NoZWV0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfRElTQUJMRUQsCisgICAgUFJP
UF9PV05FUl9OT0RFLAorICAgIFBST1BfUEFSRU5UX1NUWUxFX1NIRUVULAorICAgIFBST1BfSFJF
RiwKKyAgICBQUk9QX1RJVExFLAorICAgIFBST1BfTUVESUEsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBX
ZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1RZTEVfU0hFRVRf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01TdHlsZVNo
ZWV0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc3R5bGVfc2hlZXRf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9zdHlsZV9zaGVldF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgor
ICAgICAgICB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X3NldF9kaXNhYmxlZChzZWxmLCBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3N0eWxlX3NoZWV0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TVN0eWxlU2hlZXQqIHNlbGYgPSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfY29udGVu
dF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0
X2dldF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PV05F
Ul9OT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fc3R5
bGVfc2hlZXRfZ2V0X293bmVyX25vZGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfUEFSRU5UX1NUWUxFX1NIRUVUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3BhcmVudF9zdHlsZV9zaGVldChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IUkVGOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9ocmVmKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RJVExFOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF90aXRsZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRURJQToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9tZWRpYShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9j
b25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdP
YmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0
KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3Ry
dWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fU1RZTEVfU0hFRVRfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5j
b3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3R5bGVTaGVldCo+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9jbGFzc19pbml0KFdl
YktpdERPTVN0eWxlU2hlZXRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NU3R5bGVT
aGVldFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV9zdHlsZV9zaGVldF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X2RvbV9zdHlsZV9zaGVldF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfc2V0X3Byb3BlcnR5OworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfcHJvcGVy
dHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJTdHlsZVNoZWV0OnR5cGUiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogU3R5bGVTaGVldDp0eXBlIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAg
ICAgICAgImRpc2FibGVkIiwKKyAgICAgICAgICAgICJTdHlsZVNoZWV0OmRpc2FibGVkIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIFN0eWxlU2hlZXQ6ZGlzYWJsZWQiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfT1dORVJfTk9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJvd25lci1ub2RlIiwKKyAgICAgICAgICAgICJTdHlsZVNoZWV0Om93
bmVyLW5vZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBTdHlsZVNo
ZWV0Om93bmVyLW5vZGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVJF
TlRfU1RZTEVfU0hFRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAg
ICAicGFyZW50LXN0eWxlLXNoZWV0IiwKKyAgICAgICAgICAgICJTdHlsZVNoZWV0OnBhcmVudC1z
dHlsZS1zaGVldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVN0eWxlU2hlZXQq
IFN0eWxlU2hlZXQ6cGFyZW50LXN0eWxlLXNoZWV0IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9TVFlMRV9TSEVFVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0hSRUYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiaHJlZiIsCisgICAgICAgICAgICAiU3R5bGVTaGVldDpocmVmIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFN0eWxlU2hlZXQ6aHJlZiIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1RJVExFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRp
dGxlIiwKKyAgICAgICAgICAgICJTdHlsZVNoZWV0OnRpdGxlIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2NoYXIqIFN0eWxlU2hlZXQ6dGl0bGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NRURJQSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJtZWRpYSIsCisgICAg
ICAgICAgICAiU3R5bGVTaGVldDptZWRpYSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTU1lZGlhTGlzdCogU3R5bGVTaGVldDptZWRpYSIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfTUVESUFfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfaW5pdChXZWJLaXRET01T
dHlsZVNoZWV0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX3N0eWxlX3NoZWV0X2dldF9jb250ZW50X3R5cGUoV2ViS2l0RE9NU3R5bGVTaGVldCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6U3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50eXBlKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0
X2Rpc2FibGVkKFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfU1RZTEVfU0hFRVQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpTdHlsZVNo
ZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0
ZW0tPmRpc2FibGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X3N0eWxlX3NoZWV0X3NldF9kaXNhYmxlZChXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmLCBnYm9v
bGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpKTsK
KyAgICBXZWJDb3JlOjpTdHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldERpc2FibGVkKHZhbHVlKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2Rv
bV9zdHlsZV9zaGVldF9nZXRfb3duZXJfbm9kZShXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpTdHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b3duZXJO
b2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NU3R5bGVTaGVldCogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfcGFyZW50
X3N0eWxlX3NoZWV0KFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfU1RZTEVfU0hFRVQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlU2hl
ZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0eWxl
U2hlZXQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wYXJlbnRTdHlsZVNoZWV0
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2hyZWYoV2ViS2l0RE9NU3R5bGVTaGVl
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6U3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ocmVmKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dl
dF90aXRsZShXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTdHlsZVNoZWV0KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnRpdGxlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktp
dERPTU1lZGlhTGlzdCogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfbWVkaWEoV2ViS2l0RE9N
U3R5bGVTaGVldCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9TSEVF
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TWVkaWFMaXN0PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+bWVkaWEoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NU3R5bGVTaGVldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyN2Y3
OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXQuaApAQCAtMCwwICsxLDEyNiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
RE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25s
eSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2Vu
ZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NU3R5bGVTaGVldF9oCisjZGVmaW5lIFdlYktpdERPTVN0
eWxlU2hlZXRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9TVFlMRV9T
SEVFVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fU1RZTEVfU0hFRVQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVULCBXZWJLaXRE
T01TdHlsZVNoZWV0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
U1RZTEVfU0hFRVQsIFdlYktpdERPTVN0eWxlU2hlZXRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19TVFlMRV9TSEVFVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX1NUWUxFX1NIRUVUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
U1RZTEVfU0hFRVRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVULCBXZWJLaXRET01TdHlsZVNoZWV0Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVN0eWxlU2hlZXQgeworICAgIFdlYktpdERPTU9iamVj
dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVN0eWxlU2hlZXRDbGFz
cyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9jb250ZW50X3R5cGU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9jb250ZW50X3R5cGUo
V2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zdHlsZV9z
aGVldF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3R5bGVTaGVldAorICoK
KyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21fc3R5bGVfc2hlZXRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfc2V0X2Rpc2FibGVkOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVN0eWxlU2hlZXQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9zdHlsZV9zaGVldF9zZXRfZGlzYWJsZWQo
V2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X293bmVyX25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3N0eWxl
X3NoZWV0X2dldF9vd25lcl9ub2RlKFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3BhcmVudF9zdHlsZV9zaGVldDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01TdHlsZVNoZWV0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3R5
bGVTaGVldCoKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3BhcmVudF9zdHlsZV9zaGVldChX
ZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0eWxlX3No
ZWV0X2dldF9ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0eWxlU2hlZXQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zdHls
ZV9zaGVldF9nZXRfaHJlZihXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF90aXRsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01T
dHlsZVNoZWV0CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3RpdGxlKFdlYktpdERPTVN0eWxlU2hlZXQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X21lZGlhOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVN0eWxlU2hlZXQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTU1lZGlhTGlzdAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU1l
ZGlhTGlzdCoKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X21lZGlhKFdlYktpdERPTVN0eWxl
U2hlZXQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NU3R5bGVT
aGVldF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5
bGVTaGVldExpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjZi
MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0LmNwcApAQCAtMCwwICsx
LDE1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX1NUWUxFX1NIRUVUX0xJU1QsIFdlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZSB7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01TdHls
ZVNoZWV0TGlzdFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01TdHls
ZVNoZWV0TGlzdCoga2l0KFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0KiBvYmopCit7CisgICAgaWYg
KCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9i
amVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fU1RZTEVfU0hF
RVRfTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBTdHlsZVNoZWV0TGlzdChvYmopOworfQor
CitXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCogY29yZShXZWJLaXRET01TdHlsZVNoZWV0TGlzdCog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlN0
eWxlU2hlZXRMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NU3R5bGVTaGVldExpc3QqIHdyYXBTdHlsZVNoZWV0TGlzdChXZWJD
b3JlOjpTdHlsZVNoZWV0TGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fU1RZTEVfU0hFRVRfTElTVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVUX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZ
UEUoV2ViS2l0RE9NU3R5bGVTaGVldExpc3QsIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdCwg
V0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
TEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01TdHlsZVNoZWV0TGlzdFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJU1RfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9z
dHlsZV9zaGVldF9saXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TVN0eWxlU2hlZXRMaXN0KiBzZWxmID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgor
ICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9s
aXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdl
YmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0
UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdl
YktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1RZTEVfU0hF
RVRfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVj
dCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5j
b3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9N
U3R5bGVTaGVldExpc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NU3R5bGVTaGVl
dExpc3RQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9k
b21fc3R5bGVfc2hlZXRfbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191
bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIlN0eWxlU2hlZXRMaXN0
Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBTdHlsZVNoZWV0TGlzdDps
ZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVf
c2hlZXRfbGlzdF9pbml0KFdlYktpdERPTVN0eWxlU2hlZXRMaXN0KiByZXF1ZXN0KQoreworICAg
IFdlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1RZTEVf
U0hFRVRfTElTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERP
TVN0eWxlU2hlZXRMaXN0UHJpdmF0ZSgpOworfQorCitXZWJLaXRET01TdHlsZVNoZWV0KiB3ZWJr
aXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfaXRlbShXZWJLaXRET01TdHlsZVNoZWV0TGlzdCogc2Vs
ZiwgZ3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVU
X0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpTdHlsZVNoZWV0PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fc3R5
bGVfc2hlZXRfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTVN0eWxlU2hlZXRMaXN0KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUX0xJU1Qoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRM
aXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNjNjcxNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuaApAQCAtMCwwICsxLDczIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01TdHlsZVNoZWV0TGlzdF9oCisjZGVmaW5lIFdlYktpdERPTVN0eWxl
U2hlZXRMaXN0X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfU1RZTEVf
U0hFRVRfTElTVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TVFlM
RV9TSEVFVF9MSVNULCBXZWJLaXRET01TdHlsZVNoZWV0TGlzdCkpCisjZGVmaW5lIFdFQktJVF9E
T01fU1RZTEVfU0hFRVRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVRfTElTVCwgV2ViS2l0RE9N
U3R5bGVTaGVldExpc3RDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVF9M
SVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TVFlM
RV9TSEVFVF9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9TVFlMRV9TSEVFVF9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNULCBXZWJLaXRET01T
dHlsZVNoZWV0TGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01TdHlsZVNoZWV0TGlzdCB7
CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NU3R5bGVTaGVldExpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9zdHlsZV9zaGVl
dF9saXN0X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRf
bGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0eWxlU2hlZXRMaXN0CisgKiBAaW5k
ZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NU3R5bGVTaGVldAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVN0eWxlU2hlZXQqCit3ZWJr
aXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfaXRlbShXZWJLaXRET01TdHlsZVNoZWV0TGlzdCogc2Vs
ZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3Rf
Z2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0TGlzdAorICoKKyAq
IFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9z
dHlsZV9zaGVldF9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NU3R5bGVTaGVldExpc3QqIHNlbGYp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NU3R5bGVTaGVldExpc3RfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVT
aGVldExpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBk
YmI5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3RQcml2YXRlLmgKQEAg
LTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01TdHlsZVNo
ZWV0TGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZVNoZWV0TGlzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK1dlYktpdERPTVN0eWxlU2hlZXRMaXN0KiB3cmFwU3R5bGVTaGVldExpc3Qo
V2ViQ29yZTo6U3R5bGVTaGVldExpc3QqKTsKK1dlYktpdERPTVN0eWxlU2hlZXRMaXN0KiBraXQo
V2ViQ29yZTo6U3R5bGVTaGVldExpc3QqKTsKK1dlYkNvcmU6OlN0eWxlU2hlZXRMaXN0KiBjb3Jl
KFdlYktpdERPTVN0eWxlU2hlZXRMaXN0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVN0eWxlU2hlZXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2YjIzNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3R5bGVTaGVldFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9TdHlsZVNoZWV0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVN0eWxlU2hlZXQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01TdHlsZVNoZWV0KiB3cmFwU3R5bGVT
aGVldChXZWJDb3JlOjpTdHlsZVNoZWV0Kik7CitXZWJLaXRET01TdHlsZVNoZWV0KiBraXQoV2Vi
Q29yZTo6U3R5bGVTaGVldCopOworV2ViQ29yZTo6U3R5bGVTaGVldCogY29yZShXZWJLaXRET01T
dHlsZVNoZWV0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERP
TVN0eWxlU2hlZXRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNzI5NjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHQuY3BwCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NVGV4dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVGV4
dCoga2l0KFdlYkNvcmU6OlRleHQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVhU
KGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpU
ZXh0KiBjb3JlKFdlYktpdERPTVRleHQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCkt
PmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVGV4dCogd3JhcFRleHQoV2ViQ29yZTo6
VGV4dCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fVEVYVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFWFQsICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfZGlzcGF0Y2hfZXZlbnQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3Jl
KGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFdlYkNvcmU6OlRleHQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90
ZXh0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25z
dCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJl
KQoreworICAgIFdlYkNvcmU6OlRleHQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXh0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGV4dF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBH
Q2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpU
ZXh0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSog
aWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV90ZXh0X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X3RleHRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX3RleHRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklO
RV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01UZXh0LCB3ZWJraXRfZG9tX3RleHQsIFdFQktJVF9E
T01fVFlQRV9DSEFSQUNURVJfREFUQSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9XSE9MRV9URVhULAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXh0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TVRleHQqIHNlbGYgPSBXRUJLSVRfRE9NX1RFWFQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9XSE9MRV9URVhUOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfZ2V0X3dob2xlX3RleHQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X2NsYXNzX2luaXQoV2Vi
S2l0RE9NVGV4dENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXh0X2dldF9wcm9wZXJ0eTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9XSE9MRV9URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgIndob2xlLXRleHQiLAorICAgICAgICAgICAgIlRleHQ6d2hvbGUtdGV4dCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXh0Ondob2xlLXRleHQiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfaW5pdChXZWJLaXRET01UZXh0KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NVGV4dCogd2Via2l0X2Rv
bV90ZXh0X3NwbGl0X3RleHQoV2ViS2l0RE9NVGV4dCogc2VsZiwgZ3Vsb25nIG9mZnNldCwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVChzZWxmKSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdl
YkNvcmU6OlRleHQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHQ+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zcGxpdFRleHQob2Zmc2V0LCBlYykpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX3RleHRfZ2V0X3dob2xlX3RleHQoV2ViS2l0RE9NVGV4dCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPndob2xlVGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmQ2NzQyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHQuaApA
QCAtMCwwICsxLDc0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01UZXh0X2gKKyNkZWZpbmUgV2Vi
S2l0RE9NVGV4dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVhUICAgICAgICAgICAgKHdlYmtpdF9kb21fdGV4dF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1RFWFQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFWFQsIFdlYktpdERPTVRleHQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1RFWFRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFQsIFdlYktpdERPTVRleHRDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19URVhUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVhUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19URVhUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9URVhUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9U
RVhULCBXZWJLaXRET01UZXh0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRleHQgeworICAg
IFdlYktpdERPTUNoYXJhY3RlckRhdGEgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01UZXh0Q2xhc3MgeworICAgIFdlYktpdERPTUNoYXJhY3RlckRhdGFDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3RleHRfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3NwbGl0X3RleHQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGV4dAorICogQG9mZnNldDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRleHQK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UZXh0Kgord2Via2l0X2RvbV90ZXh0X3NwbGl0X3Rl
eHQoV2ViS2l0RE9NVGV4dCogc2VsZiwgZ3Vsb25nIG9mZnNldCwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF9nZXRfd2hvbGVfdGV4dDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXh0CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fdGV4dF9nZXRfd2hvbGVfdGV4dChXZWJLaXRET01UZXh0KiBzZWxm
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVRleHRfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01UZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0UHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDQ3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXh0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TVRleHRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvVGV4dC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01UZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
VGV4dCogd3JhcFRleHQoV2ViQ29yZTo6VGV4dCopOworV2ViS2l0RE9NVGV4dCoga2l0KFdlYkNv
cmU6OlRleHQqKTsKK1dlYkNvcmU6OlRleHQqIGNvcmUoV2ViS2l0RE9NVGV4dCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXh0UHJpdmF0ZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVRleHRUcmFjay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFjay5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzYjU3MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVGV4dFRyYWNrLmNwcApAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRl
eHRUcmFjay5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19HRVRfUFJJ
VkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLLCBXZWJLaXRET01UZXh0VHJhY2tQcml2YXRlKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0VHJhY2s+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorfSBXZWJLaXRET01UZXh0VHJhY2tQcml2YXRlOworCisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVGV4dFRy
YWNrKiBraXQoV2ViQ29yZTo6VGV4dFRyYWNrKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpn
ZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVYVF9UUkFDSyhyZXQpOworCisg
ICAgcmV0dXJuIHdyYXBUZXh0VHJhY2sob2JqKTsKK30KKworV2ViQ29yZTo6VGV4dFRyYWNrKiBj
b3JlKFdlYktpdERPTVRleHRUcmFjayogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFjayo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRleHRUcmFjayogd3JhcFRleHRU
cmFjayhXZWJDb3JlOjpUZXh0VHJhY2sqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RFWFRfVFJBQ0soZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9URVhUX1RSQUNLLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdl
YkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICgh
Y29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNr
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrKj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2
ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVT
RURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX3RleHRfdHJhY2tfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29s
ZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6
OlRleHRUcmFjayogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFjayo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOwor
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIFdlYkNvcmU6OlRleHRUcmFjayogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlRleHRUcmFjayo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVT
RURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU9fVFJBQ0spCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQo
V2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNo
X2V2ZW50ID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNl
LT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfYWRkX2V2ZW50X2xp
c3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRET01UZXh0VHJhY2ssIHdlYmtpdF9kb21fdGV4dF90cmFjaywgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVO
VF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9JRCwKKyAgICBQUk9QX0xBQkVMLAorICAgIFBST1BfTEFOR1VBR0Us
CisgICAgUFJPUF9JTl9CQU5EX01FVEFEQVRBX1RSQUNLX0RJU1BBVENIX1RZUEUsCisgICAgUFJP
UF9DVUVTLAorICAgIFBST1BfQUNUSVZFX0NVRVMsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERP
TVRleHRUcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBwcml2LT5+V2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGV4dF90cmFja19wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxm
ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfSUQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfaWQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTEFCRUw6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfbGFiZWwoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTEFOR1VBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfbGFuZ3VhZ2Uoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSU5fQkFORF9NRVRBREFUQV9UUkFDS19ESVNQQVRDSF9UWVBF
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfZ2V0X2luX2JhbmRfbWV0YWRhdGFfdHJhY2tfZGlzcGF0Y2hfdHlwZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVUVTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfY3VlcyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9BQ1RJVkVfQ1VFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2FjdGl2ZV9jdWVzKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBH
T2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVj
dCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXh0X3RyYWNrX3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3Ry
dWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdERPTVRl
eHRUcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfR0VUX1BSSVZBVEUo
b2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4
dFRyYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19jbGFzc19pbml0KFdlYktpdERPTVRl
eHRUcmFja0NsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXh0VHJhY2tQcml2YXRl
KSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGV4dF90cmFj
a19jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90
ZXh0X3RyYWNrX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JRCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJpZCIsCisgICAgICAg
ICAgICAiVGV4dFRyYWNrOmlkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRleHRU
cmFjazppZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBQkVMLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImxhYmVsIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2s6bGFi
ZWwiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGV4dFRyYWNrOmxhYmVsIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTEFOR1VBR0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAibGFuZ3VhZ2UiLAorICAgICAgICAgICAgIlRleHRUcmFjazpsYW5ndWFnZSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXh0VHJhY2s6bGFuZ3VhZ2UiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9JTl9CQU5EX01FVEFEQVRBX1RSQUNLX0RJU1BBVENIX1RZUEUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaW4tYmFuZC1tZXRhZGF0YS10
cmFjay1kaXNwYXRjaC10eXBlIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2s6aW4tYmFuZC1tZXRh
ZGF0YS10cmFjay1kaXNwYXRjaC10eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IFRleHRUcmFjazppbi1iYW5kLW1ldGFkYXRhLXRyYWNrLWRpc3BhdGNoLXR5cGUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9DVUVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgImN1ZXMiLAorICAgICAgICAgICAgIlRleHRUcmFjazpjdWVzIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCogVGV4dFRyYWNrOmN1ZXMiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFX0xJU1QsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BQ1RJVkVfQ1VF
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJhY3RpdmUtY3Vl
cyIsCisgICAgICAgICAgICAiVGV4dFRyYWNrOmFjdGl2ZS1jdWVzIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCogVGV4dFRyYWNrOmFjdGl2ZS1jdWVz
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRV9MSVNULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2luaXQoV2ViS2l0RE9NVGV4dFRyYWNrKiByZXF1ZXN0KQorewor
ICAgIFdlYktpdERPTVRleHRUcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFWFRfVFJB
Q0tfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UZXh0VHJh
Y2tQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2FkZF9jdWUoV2Vi
S2l0RE9NVGV4dFRyYWNrKiBzZWxmLCBXZWJLaXRET01UZXh0VHJhY2tDdWUqIGN1ZSwgR0Vycm9y
KiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVYVF9UUkFDSyhzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFWFRfVFJBQ0tfQ1VFKGN1ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEq
ZXJyb3IpOworICAgIFdlYkNvcmU6OlRleHRUcmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGNvbnZlcnRlZEN1ZSA9IFdlYktpdDo6Y29y
ZShjdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmFk
ZEN1ZShjb252ZXJ0ZWRDdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0oY3VlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAv
KiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNr
X3JlbW92ZV9jdWUoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxmLCBXZWJLaXRET01UZXh0VHJhY2tD
dWUqIGN1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDSyhzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFKGN1ZSkpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlRleHRUcmFjayogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGNvbnZlcnRlZEN1
ZSA9IFdlYktpdDo6Y29yZShjdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGl0ZW0tPnJlbW92ZUN1ZShjb252ZXJ0ZWRDdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oY3VlKTsKKyAgICBVTlVTRURf
UEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2lkKFdlYktpdERPTVRleHRUcmFjayogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9U
UkFDSyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmlkKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisg
ICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hh
ciogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9sYWJlbChXZWJLaXRET01UZXh0VHJhY2sqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFWFRfVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFjayogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5sYWJlbCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8K
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfbGFuZ3VhZ2UoV2ViS2l0RE9N
VGV4dFRyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVhUX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJh
Y2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+bGFuZ3VhZ2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUo
VklERU9fVFJBQ0spICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2lu
X2JhbmRfbWV0YWRhdGFfdHJhY2tfZGlzcGF0Y2hfdHlwZShXZWJLaXRET01UZXh0VHJhY2sqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFWFRfVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFjayogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5pbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0
KiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2N1ZXMoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxm
KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVhUX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jdWVzKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikK
KyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK1dl
YktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfYWN0aXZl
X2N1ZXMoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpUZXh0VHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5hY3RpdmVDdWVzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRy
YWNrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVRleHRUcmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY0MTNhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFjay5oCkBAIC0wLDAg
KzEsMTQxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTVRleHRUcmFja19oCisjZGVmaW5lIFdlYktpdERPTVRleHRUcmFja19oCisKKyNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDSyAgICAgICAgICAgICh3ZWJraXRfZG9tX3RleHRf
dHJhY2tfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLLCBXZWJLaXRET01UZXh0VHJhY2spKQorI2RlZmluZSBXRUJLSVRfRE9NX1RF
WFRfVFJBQ0tfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0ssIFdlYktpdERPTVRleHRUcmFja0NsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0sob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0spKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0spKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0ssIFdlYktpdERPTVRl
eHRUcmFja0NsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2sgeworICAgIFdlYktp
dERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRleHRU
cmFja0NsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2FkZF9jdWU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGV4dFRyYWNrCisgKiBAY3VlOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfYWRkX2N1ZShXZWJLaXRET01UZXh0VHJh
Y2sqIHNlbGYsIFdlYktpdERPTVRleHRUcmFja0N1ZSogY3VlLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX3JlbW92ZV9jdWU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGV4dFRyYWNrCisgKiBAY3VlOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfcmVtb3ZlX2N1ZShXZWJLaXRET01UZXh0
VHJhY2sqIHNlbGYsIFdlYktpdERPTVRleHRUcmFja0N1ZSogY3VlLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9pZDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXh0VHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGV4dF90
cmFja19nZXRfaWQoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfZ2V0X2xhYmVsOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFj
aworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9sYWJlbChX
ZWJLaXRET01UZXh0VHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFj
a19nZXRfbGFuZ3VhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrCisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2xhbmd1YWdlKFdlYktpdERP
TVRleHRUcmFjayogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9p
bl9iYW5kX21ldGFkYXRhX3RyYWNrX2Rpc3BhdGNoX3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGV4dFRyYWNrCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Z2V0X2luX2JhbmRfbWV0YWRhdGFfdHJhY2tfZGlzcGF0Y2hfdHlwZShXZWJLaXRET01UZXh0VHJh
Y2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfY3VlczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2sKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCoKK3dlYmtp
dF9kb21fdGV4dF90cmFja19nZXRfY3VlcyhXZWJLaXRET01UZXh0VHJhY2sqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfYWN0aXZlX2N1ZXM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGV4dFRyYWNrCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqCit3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfZ2V0X2FjdGl2ZV9jdWVzKFdlYktpdERPTVRleHRUcmFjayogc2VsZik7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01UZXh0VHJhY2tfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJh
Y2tDdWUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM1MmQ2ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1
ZS5jcHAKQEAgLTAsMCArMSw0MzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tDdWUuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja0N1ZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9HRVRf
UFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01f
VFlQRV9URVhUX1RSQUNLX0NVRSwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUgeworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlPiBjb3JlT2JqZWN0
OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30gV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
UHJpdmF0ZTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTVRleHRUcmFja0N1ZSoga2l0KFdlYkNvcmU6OlRleHRUcmFja0N1ZSogb2Jq
KQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRl
ciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRf
RE9NX1RFWFRfVFJBQ0tfQ1VFKHJldCk7CisKKyAgICByZXR1cm4gd3JhcChvYmopOworfQorCitX
ZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGNvcmUoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNr
Q3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiB3cmFwVGV4dFRyYWNrQ3VlKFdlYkNvcmU6OlRleHRUcmFj
a0N1ZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9U
RVhUX1RSQUNLX0NVRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykK
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6
RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZl
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tDdWUqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZl
bnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fdGV4dF90cmFja19jdWVfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNv
cmU6OlRleHRUcmFja0N1ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRU
cmFja0N1ZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVu
dE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNl
Q2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJh
Y2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tDdWUqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0o
aGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQorewor
ICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZGlz
cGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
dGV4dF90cmFja19jdWVfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3JlbW92ZV9ldmVudF9saXN0
ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
LCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNULCBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RS
QUNLLAorICAgIFBST1BfSUQsCisgICAgUFJPUF9TVEFSVF9USU1FLAorICAgIFBST1BfRU5EX1RJ
TUUsCisgICAgUFJPUF9QQVVTRV9PTl9FWElULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXh0X3RyYWNrX2N1ZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUVf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlm
IC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBwcml2LT5+V2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYgPSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VF
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfSUQ6
CisgICAgICAgIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X2lkKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RBUlRf
VElNRToKKyAgICAgICAgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfc3RhcnRfdGltZShz
ZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0VORF9USU1FOgorICAgICAgICB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX3NldF9lbmRfdGltZShzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUpLCBudWxscHRy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVVNFX09OX0VYSVQ6CisgICAgICAg
IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X3BhdXNlX29uX2V4aXQoc2VsZiwgZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01UZXh0VHJhY2tDdWUqIHNlbGYgPSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVFJBQ0s6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1
ZV9nZXRfdHJhY2soc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSUQ6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfZ2V0X2lkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NUQVJUX1RJ
TUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X3Ry
YWNrX2N1ZV9nZXRfc3RhcnRfdGltZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9FTkRfVElNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfY3VlX2dldF9lbmRfdGltZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9QQVVTRV9PTl9FWElUOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9wYXVzZV9vbl9leGl0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdP
YmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVf
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
S2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19D
VUVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVf
Y2xhc3NfaW5pdChXZWJLaXRET01UZXh0VHJhY2tDdWVDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2Yo
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3Ry
dWN0b3IgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2NvbnN0cnVjdG9yOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2ZpbmFsaXplOwor
ICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1
ZV9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfY3VlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UUkFD
SywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ0cmFjayIsCisg
ICAgICAgICAgICAiVGV4dFRyYWNrQ3VlOnRyYWNrIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NVGV4dFRyYWNrKiBUZXh0VHJhY2tDdWU6dHJhY2siLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0ssCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJpZCIsCisgICAgICAgICAgICAiVGV4dFRyYWNrQ3VlOmlkIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXh0VHJhY2tDdWU6aWQiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfU1RBUlRfVElNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAg
ICAgICAgICJzdGFydC10aW1lIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2tDdWU6c3RhcnQtdGlt
ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZG91YmxlIFRleHRUcmFja0N1ZTpzdGFydC10
aW1lIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5EX1RJ
TUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAiZW5kLXRpbWUi
LAorICAgICAgICAgICAgIlRleHRUcmFja0N1ZTplbmQtdGltZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnZG91YmxlIFRleHRUcmFja0N1ZTplbmQtdGltZSIsCisgICAgICAgICAgICAtR19N
QVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBVVNFX09OX0VYSVQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInBhdXNlLW9uLWV4aXQiLAorICAgICAgICAg
ICAgIlRleHRUcmFja0N1ZTpwYXVzZS1vbi1leGl0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdib29sZWFuIFRleHRUcmFja0N1ZTpwYXVzZS1vbi1leGl0IiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfaW5pdChXZWJLaXRET01UZXh0VHJhY2tDdWUq
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVYVF9UUkFDS19DVUVfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChw
cml2KSBXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTVRleHRU
cmFjayogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfdHJhY2soV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRy
YWNrQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpU
ZXh0VHJhY2s+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT50cmFjaygpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNL
KSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfaWQoV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmlkKCkpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfc2V0X2lkKFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRf
VFJBQ0tfQ1VFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpUZXh0VHJhY2tDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldElkKGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykg
Ki8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9zdGFydF90aW1l
KFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlRleHRUcmFja0N1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
ZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnN0YXJ0VGltZSgpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+
KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfY3VlX3NldF9zdGFydF90aW1lKFdlYktpdERPTVRleHRUcmFja0N1ZSog
c2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlRleHRU
cmFja0N1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRTdGFydFRpbWUodmFsdWUsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30K
KworZ2RvdWJsZSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9lbmRfdGltZShXZWJLaXRE
T01UZXh0VHJhY2tDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpUZXh0VHJhY2tDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSBy
ZXN1bHQgPSBpdGVtLT5lbmRUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdGV4dF90
cmFja19jdWVfc2V0X2VuZF90aW1lKFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZiwgZ2RvdWJs
ZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT5zZXRFbmRUaW1lKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2dib29sZWFuIHdl
YmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3BhdXNlX29uX2V4aXQoV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlRl
eHRUcmFja0N1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5wYXVzZU9uRXhpdCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2N1ZV9zZXRfcGF1c2Vfb25fZXhpdChXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYs
IGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tD
dWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0UGF1c2VPbkV4aXQo
dmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFj
ayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVRleHRUcmFja0N1ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jMzQ4ZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0
VHJhY2tDdWUuaApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01UZXh0VHJhY2tDdWVfaAorI2RlZmluZSBXZWJLaXRET01U
ZXh0VHJhY2tDdWVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VF
ICAgICAgICAgICAgKHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUUsIFdl
YktpdERPTVRleHRUcmFja0N1ZSkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUVf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFLCBXZWJLaXRET01UZXh0VHJhY2tDdWVDbGFzcykKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUUp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNL
X0NVRSkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUVfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRf
VFJBQ0tfQ1VFLCBXZWJLaXRET01UZXh0VHJhY2tDdWVDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tDdWVDbGFzcyB7CisgICAgV2ViS2l0RE9N
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3RleHRfdHJhY2tfY3VlX2dldF90cmFjazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJh
Y2tDdWUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRleHRU
cmFjaworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01UZXh0VHJhY2sqCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF90cmFjayhXZWJLaXRE
T01UZXh0VHJhY2tDdWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfZ2V0X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfaWQoV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3Nl
dF9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfaWQoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFj
a19jdWVfZ2V0X3N0YXJ0X3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9z
dGFydF90aW1lKFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfc3RhcnRfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXh0VHJhY2tDdWUKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICogQGVycm9yOiAjR0Vycm9y
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fdGV4dF90cmFja19jdWVfc2V0X3N0YXJ0X3RpbWUoV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
KiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfZW5kX3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGV4dFRyYWNrQ3VlCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfY3VlX2dldF9lbmRfdGltZShXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X2VuZF90aW1lOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVRleHRUcmFja0N1ZQorICogQHZhbHVlOiBBICNnZG91YmxlCisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfZW5kX3RpbWUoV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlKiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfcGF1c2Vfb25fZXhpdDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfcGF1c2Vfb25fZXhpdChXZWJLaXRET01UZXh0VHJhY2tD
dWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X3BhdXNl
X29uX2V4aXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlCisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X3BhdXNlX29uX2V4aXQoV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJL
aXRET01UZXh0VHJhY2tDdWVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOTY4NDRiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tDdWVM
aXN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRl
eHRUcmFja0N1ZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9E
T01fVEVYVF9UUkFDS19DVUVfTElTVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRV9MSVNULCBXZWJL
aXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVRleHRUcmFja0N1ZUxpc3RQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
UmVmUHRyPFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3Q+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8g
RU5BQkxFKFZJREVPX1RSQUNLKQorfSBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZTsK
KworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTVRleHRUcmFja0N1ZUxpc3QqIGtpdChXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0KiBvYmop
Cit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVy
IHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9E
T01fVEVYVF9UUkFDS19DVUVfTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBUZXh0VHJhY2tD
dWVMaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqIGNvcmUoV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlTGlzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0
KiB3cmFwVGV4dFRyYWNrQ3VlTGlzdChXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0KiBjb3JlT2Jq
ZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9U
RVhUX1RSQUNLX0NVRV9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFD
S19DVUVfTElTVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKwor
R19ERUZJTkVfVFlQRShXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0LCB3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBS
T1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4
dF90cmFja19jdWVfbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tf
Q1VFX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBwcml2LT5+V2ViS2l0RE9NVGV4
dFRyYWNrQ3VlTGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfY3VlX2xpc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHNlbGYgPSBXRUJL
SVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25n
KHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X2xlbmd0aChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1
ZV9saXN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfbGlzdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
VEVYVF9UUkFDS19DVUVfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0Kj4oV0VCS0lUX0RP
TV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNo
ZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9jbGFzc19pbml0KFdlYktpdERPTVRleHRUcmFja0N1
ZUxpc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFBy
aXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2N1ZV9saXN0X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZmluYWxpemU7CisgICAgZ29iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiVGV4dFRyYWNrQ3Vl
TGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgVGV4dFRyYWNrQ3Vl
TGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGV4dF90cmFja19jdWVfbGlzdF9pbml0KFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHJlcXVl
c3QpCit7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3
IChwcml2KSBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZSgpOworfQorCitXZWJLaXRE
T01UZXh0VHJhY2tDdWUqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9pdGVtKFdlYktp
dERPTVRleHRUcmFja0N1ZUxpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUVfTElT
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJM
RShWSURFT19UUkFDSykgKi8KK30KKworV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiB3ZWJraXRfZG9t
X3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X2N1ZV9ieV9pZChXZWJLaXRET01UZXh0VHJhY2tDdWVM
aXN0KiBzZWxmLCBjb25zdCBnY2hhciogaWQpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFX0xJU1Qoc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGlkLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tD
dWVMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZElkID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGlkKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
VGV4dFRyYWNrQ3VlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0Q3VlQnlJ
ZChjb252ZXJ0ZWRJZCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShp
ZCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQor
ICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ3Vs
b25nIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTVRl
eHRUcmFja0N1ZUxpc3QqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFX0xJU1Qoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFja0N1ZUxpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjgyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFja0N1ZUxpc3QuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RfaAorI2RlZmlu
ZSBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLX0NVRV9MSVNUICAgICAgICAgICAgKHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJ
U1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFX0xJU1QsIFdlYktpdERPTVRleHRUcmFja0N1ZUxp
c3QpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJU1RfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
WFRfVFJBQ0tfQ1VFX0xJU1QsIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRV9MSVNUKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NV
RV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRV9MSVNUX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLX0NVRV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NV
RV9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRV9MSVNULCBXZWJLaXRET01UZXh0VHJhY2tD
dWVMaXN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QgeworICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TVRleHRUcmFja0N1ZUxpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1
ZV9saXN0X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfbGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QKKyAq
IEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01UZXh0VHJhY2tDdWUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1
ZV9saXN0X2l0ZW0oV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X2N1ZV9ieV9p
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0CisgKiBAaWQ6IEEgI2dj
aGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UZXh0VHJh
Y2tDdWUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9jdWVf
YnlfaWQoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIGlkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X2xlbmd0aDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0CisgKgorICogUmV0dXJuczogQSAj
Z3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9u
Zword2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlTGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXh0VHJhY2tDdWVM
aXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yZDg3NjVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Rl
eHRUcmFja0N1ZUxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlTGlzdC5oPgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7
CitXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0KiB3cmFwVGV4dFRyYWNrQ3VlTGlzdChXZWJDb3Jl
OjpUZXh0VHJhY2tDdWVMaXN0Kik7CitXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0KiBraXQoV2Vi
Q29yZTo6VGV4dFRyYWNrQ3VlTGlzdCopOworV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdCogY29y
ZShXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVRl
eHRUcmFja0N1ZUxpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTAwNjNmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
VHJhY2tDdWUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlLmg+
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TVRleHRUcmFja0N1ZSogd3JhcFRleHRUcmFja0N1ZShXZWJDb3JlOjpUZXh0VHJhY2tDdWUqKTsK
K1dlYktpdERPTVRleHRUcmFja0N1ZSoga2l0KFdlYkNvcmU6OlRleHRUcmFja0N1ZSopOworV2Vi
Q29yZTo6VGV4dFRyYWNrQ3VlKiBjb3JlKFdlYktpdERPTVRleHRUcmFja0N1ZSopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCisKKyNl
bmRpZiAvKiBXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVGV4dFRyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0xpc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNWMyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFja0xpc3QuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4
dFRyYWNrTGlzdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4
dFRyYWNrTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tQcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhU
X1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19MSVNULCBXZWJLaXRET01UZXh0VHJhY2tM
aXN0UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0xpc3RQcml2
YXRlIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRU
cmFja0xpc3Q+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfSBX
ZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVRleHRUcmFja0xpc3QqIGtpdChXZWJD
b3JlOjpUZXh0VHJhY2tMaXN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVYVF9UUkFDS19MSVNUKHJldCk7CisKKyAgICBy
ZXR1cm4gd3JhcFRleHRUcmFja0xpc3Qob2JqKTsKK30KKworV2ViQ29yZTo6VGV4dFRyYWNrTGlz
dCogY29yZShXZWJLaXRET01UZXh0VHJhY2tMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrTGlzdCo+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRleHRUcmFj
a0xpc3QqIHdyYXBUZXh0VHJhY2tMaXN0KFdlYkNvcmU6OlRleHRUcmFja0xpc3QqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RF
WFRfVFJBQ0tfTElTVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfTElT
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJy
b3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkV2ZW50KiBjb3Jl
RXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShl
dmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8v
IEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGV4
dF90cmFja19saXN0X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpUZXh0
VHJhY2tMaXN0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrTGlz
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUp
OworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVy
ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAg
IGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2Rpc3Bh
dGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfbGlzdF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X3JlbW92ZV9ldmVudF9saXN0
ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVGV4dFRyYWNrTGlz
dCwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
TEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVRleHRUcmFja0xpc3RQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0
KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBwcml2LT5+V2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUoKTsKKyAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
bGlzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2tM
aXN0KiBzZWxmID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0xJU1Qob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFs
dWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRfbGVuZ3Ro
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3RleHRf
dHJhY2tfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sK
KyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfbGlzdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBXZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVY
VF9UUkFDS19MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVChv
YmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01UZXh0VHJhY2tMaXN0Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlKSk7CisgICAgZ29iamVj
dENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2NvbnN0cnVj
dG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
bGlzdF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fdGV4dF90cmFja19saXN0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5H
VEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAor
ICAgICAgICAgICAgIlRleHRUcmFja0xpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ3Vsb25nIFRleHRUcmFja0xpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9pbml0KFdlYktpdERPTVRleHRUcmFj
a0xpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfTElTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAg
ICBuZXcgKHByaXYpIFdlYktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlKCk7Cit9CisKK1dlYktp
dERPTVRleHRUcmFjayogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfaXRlbShXZWJLaXRET01U
ZXh0VHJhY2tMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfTElTVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRyYWNrPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9Q
QVJBTShpbmRleCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8K
K30KKworV2ViS2l0RE9NVGV4dFRyYWNrKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRf
dHJhY2tfYnlfaWQoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIGlk
KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVhUX1RSQUNLX0xJU1Qoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGlkLCAw
KTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZElkID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGlk
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRyYWNrPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+Z2V0VHJhY2tCeUlkKGNvbnZlcnRlZElkKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPX1RSQUNLKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZ2V0
X2xlbmd0aChXZWJLaXRET01UZXh0VHJhY2tMaXN0KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0xJU1Qoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OlRleHRUcmFja0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1
bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVRleHRUcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrTGlzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMWQxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVRleHRUcmFja0xpc3QuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRleHRUcmFja0xpc3RfaAorI2RlZmluZSBX
ZWJLaXRET01UZXh0VHJhY2tMaXN0X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVhU
X1RSQUNLX0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0xJU1Qob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFWFRf
VFJBQ0tfTElTVCwgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCkpCisjZGVmaW5lIFdFQktJVF9ET01f
VEVYVF9UUkFDS19MSVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0xJU1QsIFdlYktpdERPTVRleHRU
cmFja0xpc3RDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0xJU1Qob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX1RFWFRfVFJBQ0tfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19M
SVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9URVhUX1RSQUNLX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJB
Q0tfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19MSVNULCBXZWJLaXRET01UZXh0VHJhY2tMaXN0
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0xpc3QgeworICAgIFdlYktpdERP
TU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFj
a0xpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfaXRlbToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tMaXN0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVGV4dFRyYWNrCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRleHRUcmFj
ayoKK3dlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2l0ZW0oV2ViS2l0RE9NVGV4dFRyYWNrTGlz
dCogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
bGlzdF9nZXRfdHJhY2tfYnlfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrTGlz
dAorICogQGlkOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAj
V2ViS2l0RE9NVGV4dFRyYWNrCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTVRleHRUcmFjayoKK3dlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dl
dF90cmFja19ieV9pZChXZWJLaXRET01UZXh0VHJhY2tMaXN0KiBzZWxmLCBjb25zdCBnY2hhciog
aWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dldF9sZW5ndGg6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1
bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcK
K3dlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NVGV4dFRyYWNr
TGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXh0VHJhY2tMaXN0X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrTGlz
dFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDhlN2YyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
VGV4dFRyYWNrTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01UZXh0VHJhY2tMaXN0UHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRUcmFja0xpc3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NVGV4dFRyYWNrTGlzdC5oPgorI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXh0VHJhY2tMaXN0KiB3cmFwVGV4
dFRyYWNrTGlzdChXZWJDb3JlOjpUZXh0VHJhY2tMaXN0Kik7CitXZWJLaXRET01UZXh0VHJhY2tM
aXN0KiBraXQoV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCopOworV2ViQ29yZTo6VGV4dFRyYWNrTGlz
dCogY29yZShXZWJLaXRET01UZXh0VHJhY2tMaXN0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERP
TVRleHRUcmFja0xpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01UZXh0VHJhY2tQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzZkODM5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrUHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRl
eHRUcmFja1ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0VHJhY2suaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGV4dFRyYWNrLmg+CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRleHRUcmFjayogd3JhcFRleHRU
cmFjayhXZWJDb3JlOjpUZXh0VHJhY2sqKTsKK1dlYktpdERPTVRleHRUcmFjayoga2l0KFdlYkNv
cmU6OlRleHRUcmFjayopOworV2ViQ29yZTo6VGV4dFRyYWNrKiBjb3JlKFdlYktpdERPTVRleHRU
cmFjayopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXh0VHJhY2tQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVGltZVJhbmdlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRpbWVSYW5nZXMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTczMWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVRpbWVSYW5nZXMuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
VGltZVJhbmdlcy5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01UaW1lUmFuZ2VzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
ZGVmaW5lIFdFQktJVF9ET01fVElNRV9SQU5HRVNfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVElNRV9SQU5HRVMsIFdlYktp
dERPTVRpbWVSYW5nZXNQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGltZVJh
bmdlc1ByaXZhdGUgeworI2lmIEVOQUJMRShWSURFTykKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGlt
ZVJhbmdlcz4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCit9IFdlYktpdERP
TVRpbWVSYW5nZXNQcml2YXRlOworCisjaWYgRU5BQkxFKFZJREVPKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViS2l0RE9NVGltZVJhbmdlcyoga2l0KFdlYkNvcmU6OlRpbWVSYW5nZXMqIG9i
aikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50
ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lU
X0RPTV9USU1FX1JBTkdFUyhyZXQpOworCisgICAgcmV0dXJuIHdyYXBUaW1lUmFuZ2VzKG9iaik7
Cit9CisKK1dlYkNvcmU6OlRpbWVSYW5nZXMqIGNvcmUoV2ViS2l0RE9NVGltZVJhbmdlcyogcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRpbWVS
YW5nZXMqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQor
CitXZWJLaXRET01UaW1lUmFuZ2VzKiB3cmFwVGltZVJhbmdlcyhXZWJDb3JlOjpUaW1lUmFuZ2Vz
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9USU1FX1JBTkdFUyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFO
R0VTLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCitHX0RFRklORV9UWVBF
KFdlYktpdERPTVRpbWVSYW5nZXMsIHdlYmtpdF9kb21fdGltZV9yYW5nZXMsIFdFQktJVF9ET01f
VFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGltZV9yYW5nZXNfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQoreworICAgIFdlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9USU1FX1JBTkdFU19HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShWSURFTykK
KyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorICAgIHByaXYtPn5XZWJLaXRET01UaW1lUmFu
Z2VzUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGltZV9yYW5nZXNf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90aW1lX3Jhbmdlc19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01UaW1lUmFuZ2VzKiBzZWxmID0gV0VCS0lUX0RPTV9USU1FX1JBTkdFUyhvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fdGltZV9yYW5nZXNfZ2V0X2xlbmd0
aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90aW1l
X3Jhbmdlc19jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAg
ICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RpbWVfcmFuZ2Vz
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYktpdERP
TVRpbWVSYW5nZXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9USU1FX1JBTkdFU19HRVRfUFJJ
VkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUaW1lUmFuZ2VzKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Cisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9i
amVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGltZV9yYW5nZXNfY2xhc3NfaW5pdChXZWJLaXRET01U
aW1lUmFuZ2VzQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRpbWVSYW5nZXNQcml2
YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGltZV9y
YW5nZXNfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9k
b21fdGltZV9yYW5nZXNfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5n
dGgiLAorICAgICAgICAgICAgIlRpbWVSYW5nZXM6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ3Vsb25nIFRpbWVSYW5nZXM6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2luaXQoV2ViS2l0RE9NVGltZVJhbmdlcyog
cmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fVElNRV9SQU5HRVNfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZSgpOworfQorCitnZG91YmxlIHdlYmtpdF9kb21fdGlt
ZV9yYW5nZXNfc3RhcnQoV2ViS2l0RE9NVGltZVJhbmdlcyogc2VsZiwgZ3Vsb25nIGluZGV4LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVElNRV9SQU5HRVMoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpUaW1lUmFuZ2VzKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+c3RhcnQoaW5kZXgsIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJB
TShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+
KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9t
X3RpbWVfcmFuZ2VzX2VuZChXZWJLaXRET01UaW1lUmFuZ2VzKiBzZWxmLCBndWxvbmcgaW5kZXgs
IEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19USU1FX1JBTkdFUyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlRpbWVSYW5nZXMqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5lbmQoaW5kZXgsIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJB
TShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+
KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21f
dGltZV9yYW5nZXNfZ2V0X2xlbmd0aChXZWJLaXRET01UaW1lUmFuZ2VzKiBzZWxmKQoreworI2lm
IEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19USU1FX1JBTkdFUyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6VGltZVJhbmdlcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigw
KTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGlt
ZVJhbmdlcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMzI4NGRlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJhbmdlcy5oCkBA
IC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NVGltZVJhbmdlc19oCisjZGVmaW5lIFdlYktpdERPTVRpbWVSYW5nZXNfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VTICAgICAgICAgICAgKHdlYmtpdF9k
b21fdGltZV9yYW5nZXNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9USU1FX1JBTkdF
UyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfVElNRV9SQU5HRVMsIFdlYktpdERPTVRpbWVSYW5nZXMpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1RJTUVfUkFOR0VTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9USU1FX1JBTkdFUywgV2ViS2l0RE9NVGlt
ZVJhbmdlc0NsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RJTUVfUkFOR0VTKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9U
SU1FX1JBTkdFUykpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVElNRV9SQU5HRVNfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RJ
TUVfUkFOR0VTKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9USU1FX1JBTkdFU19HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVElN
RV9SQU5HRVMsIFdlYktpdERPTVRpbWVSYW5nZXNDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
VGltZVJhbmdlcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NVGltZVJhbmdlc0NsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rp
bWVfcmFuZ2VzX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGltZV9yYW5n
ZXNfc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGltZVJhbmdlcworICogQGluZGV4OiBB
ICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Vi
a2l0X2RvbV90aW1lX3Jhbmdlc19zdGFydChXZWJLaXRET01UaW1lUmFuZ2VzKiBzZWxmLCBndWxv
bmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RpbWVfcmFu
Z2VzX2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisgKiBAaW5kZXg6IEEg
I2d1bG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJr
aXRfZG9tX3RpbWVfcmFuZ2VzX2VuZChXZWJLaXRET01UaW1lUmFuZ2VzKiBzZWxmLCBndWxvbmcg
aW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RpbWVfcmFuZ2Vz
X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGltZVJhbmdlcworICoKKyAqIFJl
dHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBndWxvbmcKK3dlYmtpdF9kb21fdGltZV9yYW5nZXNfZ2V0X2xlbmd0aChXZWJLaXRET01U
aW1lUmFuZ2VzKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVRpbWVSYW5nZXNfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODFiMjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UaW1lUmFu
Z2VzUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltZVJhbmdlcy5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01UaW1lUmFuZ2VzLmg+CisjaWYgRU5BQkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTVRpbWVSYW5nZXMqIHdyYXBUaW1lUmFuZ2VzKFdlYkNvcmU6OlRpbWVSYW5nZXMq
KTsKK1dlYktpdERPTVRpbWVSYW5nZXMqIGtpdChXZWJDb3JlOjpUaW1lUmFuZ2VzKik7CitXZWJD
b3JlOjpUaW1lUmFuZ2VzKiBjb3JlKFdlYktpdERPTVRpbWVSYW5nZXMqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworCisjZW5kaWYgLyogV2Vi
S2l0RE9NVGltZVJhbmdlc1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVRvdWNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWMy
NTlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaC5jcHAKQEAgLTAsMCArMSw0NzYgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Ub3VjaC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Ub3VjaFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBX
RUJLSVRfRE9NX1RPVUNIX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RPVUNILCBXZWJLaXRET01Ub3VjaFByaXZhdGUpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ub3VjaFByaXZhdGUgeworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisgICAgUmVmUHRyPFdlYkNvcmU6OlRvdWNoPiBjb3JlT2JqZWN0OworI2VuZGlm
IC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCit9IFdlYktpdERPTVRvdWNoUHJpdmF0ZTsKKworI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01U
b3VjaCoga2l0KFdlYkNvcmU6OlRvdWNoKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVE9VQ0gocmV0KTsKKworICAgIHJldHVy
biB3cmFwVG91Y2gob2JqKTsKK30KKworV2ViQ29yZTo6VG91Y2gqIGNvcmUoV2ViS2l0RE9NVG91
Y2gqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUb3VjaCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTVRvdWNoKiB3cmFwVG91Y2goV2ViQ29yZTo6VG91Y2gqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RPVUNI
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVE9VQ0gsICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRvdWNoLCB3
ZWJraXRfZG9tX3RvdWNoLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9DTElFTlRfWCwKKyAgICBQUk9QX0NMSUVOVF9ZLAorICAgIFBST1Bf
U0NSRUVOX1gsCisgICAgUFJPUF9TQ1JFRU5fWSwKKyAgICBQUk9QX1BBR0VfWCwKKyAgICBQUk9Q
X1BBR0VfWSwKKyAgICBQUk9QX1RBUkdFVCwKKyAgICBQUk9QX0lERU5USUZJRVIsCisgICAgUFJP
UF9XRUJLSVRfUkFESVVTX1gsCisgICAgUFJPUF9XRUJLSVRfUkFESVVTX1ksCisgICAgUFJPUF9X
RUJLSVRfUk9UQVRJT05fQU5HTEUsCisgICAgUFJPUF9XRUJLSVRfRk9SQ0UsCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3RvdWNoX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXZWJLaXRET01Ub3VjaFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RPVUNIX0dFVF9QUklW
QVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBwcml2LT5+V2ViS2l0RE9NVG91Y2hQcml2YXRlKCk7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90b3VjaF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RvdWNoX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRvdWNoKiBzZWxmID0gV0VCS0lUX0RPTV9U
T1VDSChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X0NMSUVOVF9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rv
dWNoX2dldF9jbGllbnRfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
TElFTlRfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90b3Vj
aF9nZXRfY2xpZW50X3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NS
RUVOX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdG91Y2hf
Z2V0X3NjcmVlbl94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUkVF
Tl9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dl
dF9zY3JlZW5feShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQUdFX1g6
CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3Bh
Z2VfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQUdFX1k6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3BhZ2VfeShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90b3VjaF9nZXRfdGFyZ2V0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lERU5USUZJRVI6CisgICAgICAgIGdf
dmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF9pZGVudGlmaWVyKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9SQURJVVNfWDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0
X3JhZGl1c194KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9S
QURJVVNfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90b3Vj
aF9nZXRfd2Via2l0X3JhZGl1c195KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1dFQktJVF9ST1RBVElPTl9BTkdMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFs
dWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9yb3RhdGlvbl9hbmdsZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfRk9SQ0U6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Zsb2F0KHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfZm9yY2Uoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdG91Y2hfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90b3VjaF9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViS2l0RE9NVG91Y2hQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9UT1VDSF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHBy
aXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUb3VjaCo+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShU
T1VDSF9FVkVOVFMpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90b3VjaF9jbGFzc19pbml0KFdlYktpdERPTVRvdWNoQ2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6
ZW9mKFdlYktpdERPTVRvdWNoUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0
b3IgPSB3ZWJraXRfZG9tX3RvdWNoX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX3RvdWNoX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90b3VjaF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ0xJRU5UX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
ImNsaWVudC14IiwKKyAgICAgICAgICAgICJUb3VjaDpjbGllbnQteCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdsb25nIFRvdWNoOmNsaWVudC14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywg
R19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQ0xJRU5UX1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgImNsaWVudC15IiwKKyAgICAgICAgICAgICJUb3VjaDpjbGllbnQteSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRvdWNoOmNsaWVudC15IiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NSRUVOX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19s
b25nKAorICAgICAgICAgICAgInNjcmVlbi14IiwKKyAgICAgICAgICAgICJUb3VjaDpzY3JlZW4t
eCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRvdWNoOnNjcmVlbi14IiwKKyAgICAg
ICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NSRUVOX1ksCisgICAgICAgIGdfcGFy
YW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNjcmVlbi15IiwKKyAgICAgICAgICAgICJUb3Vj
aDpzY3JlZW4teSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRvdWNoOnNjcmVlbi15
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFHRV9YLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJwYWdlLXgiLAorICAgICAgICAgICAg
IlRvdWNoOnBhZ2UteCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRvdWNoOnBhZ2Ut
eCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBR0VfWSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAicGFnZS15IiwKKyAgICAgICAgICAg
ICJUb3VjaDpwYWdlLXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUb3VjaDpwYWdl
LXkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UQVJHRVQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidGFyZ2V0IiwKKyAgICAgICAg
ICAgICJUb3VjaDp0YXJnZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FdmVu
dFRhcmdldCogVG91Y2g6dGFyZ2V0IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FVkVO
VF9UQVJHRVQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9JREVOVElGSUVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAg
ICAgICAgICAiaWRlbnRpZmllciIsCisgICAgICAgICAgICAiVG91Y2g6aWRlbnRpZmllciIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBUb3VjaDppZGVudGlmaWVyIiwKKyAgICAgICAg
ICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfUkFESVVTX1gsCisgICAgICAgIGdfcGFyYW1f
c3BlY19sb25nKAorICAgICAgICAgICAgIndlYmtpdC1yYWRpdXMteCIsCisgICAgICAgICAgICAi
VG91Y2g6d2Via2l0LXJhZGl1cy14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVG91
Y2g6d2Via2l0LXJhZGl1cy14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfV0VCS0lUX1JBRElVU19ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAg
ICAgICJ3ZWJraXQtcmFkaXVzLXkiLAorICAgICAgICAgICAgIlRvdWNoOndlYmtpdC1yYWRpdXMt
eSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRvdWNoOndlYmtpdC1yYWRpdXMteSIs
CisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9ST1RBVElPTl9B
TkdMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgIndlYmtpdC1y
b3RhdGlvbi1hbmdsZSIsCisgICAgICAgICAgICAiVG91Y2g6d2Via2l0LXJvdGF0aW9uLWFuZ2xl
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Zsb2F0IFRvdWNoOndlYmtpdC1yb3RhdGlvbi1h
bmdsZSIsCisgICAgICAgICAgICAtR19NQVhGTE9BVCwgR19NQVhGTE9BVCwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9G
T1JDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgIndlYmtpdC1m
b3JjZSIsCisgICAgICAgICAgICAiVG91Y2g6d2Via2l0LWZvcmNlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2Zsb2F0IFRvdWNoOndlYmtpdC1mb3JjZSIsCisgICAgICAgICAgICAtR19NQVhG
TE9BVCwgR19NQVhGTE9BVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdG91Y2hfaW5pdChXZWJLaXRET01Ub3Vj
aCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01Ub3VjaFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RPVUNIX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9N
VG91Y2hQcml2YXRlKCk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X2NsaWVudF94
KFdlYktpdERPTVRvdWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNo
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNs
aWVudFgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VD
SF9FVkVOVFMpICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X2NsaWVudF95KFdl
YktpdERPTVRvdWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNsaWVu
dFkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9F
VkVOVFMpICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3NjcmVlbl94KFdlYktp
dERPTVRvdWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcmVlblgo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVO
VFMpICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3NjcmVlbl95KFdlYktpdERP
TVRvdWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcmVlblkoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMp
ICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3BhZ2VfeChXZWJLaXRET01Ub3Vj
aCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5wYWdlWCgpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30K
KworZ2xvbmcgd2Via2l0X2RvbV90b3VjaF9nZXRfcGFnZV95KFdlYktpdERPTVRvdWNoKiBzZWxm
KQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnBhZ2VZKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAqLworfQorCitXZWJL
aXRET01FdmVudFRhcmdldCogd2Via2l0X2RvbV90b3VjaF9nZXRfdGFyZ2V0KFdlYktpdERPTVRv
dWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudFRhcmdldD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRhcmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQor
ICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMpICovCit9CisKK2d1
bG9uZyB3ZWJraXRfZG9tX3RvdWNoX2dldF9pZGVudGlmaWVyKFdlYktpdERPTVRvdWNoKiBzZWxm
KQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5pZGVudGlmaWVyKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIpCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30K
KworZ2xvbmcgd2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0X3JhZGl1c194KFdlYktpdERPTVRv
dWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndlYmtpdFJhZGl1c1go
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVO
VFMpICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9yYWRpdXNfeShX
ZWJLaXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT53ZWJr
aXRSYWRpdXNZKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50
cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKSAqLworfQorCitnZmxvYXQgd2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0
X3JvdGF0aW9uX2FuZ2xlKFdlYktpdERPTVRvdWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCBy
ZXN1bHQgPSBpdGVtLT53ZWJraXRSb3RhdGlvbkFuZ2xlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdmbG9h
dD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30KKworZ2Zsb2F0IHdl
YmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9mb3JjZShXZWJLaXRET01Ub3VjaCogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RPVUNI
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnZmxvYXQgcmVzdWx0ID0gaXRlbS0+d2Via2l0Rm9yY2UoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Z2Zsb2F0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAqLworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVRvdWNoLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRvdWNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTg0OWQ3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVG91Y2gu
aApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01Ub3VjaF9oCisjZGVmaW5lIFdlYktpdERPTVRvdWNoX2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9UT1VDSCAgICAgICAgICAgICh3ZWJraXRfZG9tX3RvdWNoX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVE9VQ0gob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RPVUNILCBXZWJL
aXRET01Ub3VjaCkpCisjZGVmaW5lIFdFQktJVF9ET01fVE9VQ0hfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RPVUNILCBX
ZWJLaXRET01Ub3VjaENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RPVUNIKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9U
T1VDSCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVE9VQ0hfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RPVUNIKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UT1VDSF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVE9VQ0gsIFdlYktpdERPTVRvdWNoQ2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTVRvdWNoIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01Ub3VjaENsYXNzIHsKKyAgICBXZWJL
aXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX3RvdWNoX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdG91
Y2hfZ2V0X2NsaWVudF94OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNoCisgKgorICogUmV0
dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X2NsaWVudF94KFdlYktpdERPTVRvdWNoKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF9jbGllbnRfeToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3RvdWNo
X2dldF9jbGllbnRfeShXZWJLaXRET01Ub3VjaCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV90b3VjaF9nZXRfc2NyZWVuX3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnbG9uZword2Via2l0X2RvbV90b3VjaF9nZXRfc2NyZWVuX3goV2ViS2l0RE9NVG91
Y2gqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3NjcmVlbl95OgorICog
QHNlbGY6IEEgI1dlYktpdERPTVRvdWNoCisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21f
dG91Y2hfZ2V0X3NjcmVlbl95KFdlYktpdERPTVRvdWNoKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3RvdWNoX2dldF9wYWdlX3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAq
CisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV90b3VjaF9nZXRfcGFnZV94KFdlYktpdERPTVRv
dWNoKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF9wYWdlX3k6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV90
b3VjaF9nZXRfcGFnZV95KFdlYktpdERPTVRvdWNoKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3RvdWNoX2dldF90YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUV2ZW50VGFyZ2V0CisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUV2ZW50VGFy
Z2V0Kgord2Via2l0X2RvbV90b3VjaF9nZXRfdGFyZ2V0KFdlYktpdERPTVRvdWNoKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF9pZGVudGlmaWVyOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVRvdWNoCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV90b3VjaF9n
ZXRfaWRlbnRpZmllcihXZWJLaXRET01Ub3VjaCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV90b3VjaF9nZXRfd2Via2l0X3JhZGl1c194OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNo
CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9yYWRpdXNf
eChXZWJLaXRET01Ub3VjaCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90b3VjaF9nZXRf
d2Via2l0X3JhZGl1c195OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNoCisgKgorICogUmV0
dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9yYWRpdXNfeShXZWJLaXRET01U
b3VjaCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0X3JvdGF0
aW9uX2FuZ2xlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNoCisgKgorICogUmV0dXJuczog
QSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdm
bG9hdAord2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0X3JvdGF0aW9uX2FuZ2xlKFdlYktpdERP
TVRvdWNoKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfZm9y
Y2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5zOiBBICNnZmxv
YXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Zsb2F0Cit3
ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfZm9yY2UoV2ViS2l0RE9NVG91Y2gqIHNlbGYpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICov
CisjZW5kaWYgLyogV2ViS2l0RE9NVG91Y2hfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVG91Y2hQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOGZjMGZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVG91Y2hQcml2YXRlLmgK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01Ub3VjaFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01Ub3VjaFByaXZhdGVf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9Ub3VjaC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01Ub3VjaC5oPgorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NVG91Y2gqIHdyYXBUb3VjaChXZWJDb3JlOjpUb3VjaCopOworV2ViS2l0
RE9NVG91Y2gqIGtpdChXZWJDb3JlOjpUb3VjaCopOworV2ViQ29yZTo6VG91Y2gqIGNvcmUoV2Vi
S2l0RE9NVG91Y2gqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxF
KFRPVUNIX0VWRU5UUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVRvdWNoUHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmFja0V2ZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M0YmU3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01UcmFja0V2ZW50LmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NVHJhY2tFdmVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UcmFja0V2ZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVHJhY2tFdmVudCoga2l0KFdl
YkNvcmU6OlRyYWNrRXZlbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9UUkFDS19F
VkVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnQqPihvYmopKSk7Cit9CisKK1dlYkNv
cmU6OlRyYWNrRXZlbnQqIGNvcmUoV2ViS2l0RE9NVHJhY2tFdmVudCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRyYWNrRXZlbnQqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01U
cmFja0V2ZW50KiB3cmFwVHJhY2tFdmVudChXZWJDb3JlOjpUcmFja0V2ZW50KiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9UUkFD
S19FVkVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RSQUNLX0VWRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCitHX0RFRklORV9UWVBFKFdlYktp
dERPTVRyYWNrRXZlbnQsIHdlYmtpdF9kb21fdHJhY2tfZXZlbnQsIFdFQktJVF9ET01fVFlQRV9F
VkVOVCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90cmFja19ldmVudF9jbGFzc19pbml0KFdl
YktpdERPTVRyYWNrRXZlbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIFVOVVNFRF9QQVJB
TShyZXF1ZXN0Q2xhc3MpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RyYWNrX2V2ZW50
X2luaXQoV2ViS2l0RE9NVHJhY2tFdmVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
cmVxdWVzdCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJhY2tFdmVudC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmFj
a0V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2ODczMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVHJhY2tFdmVudC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVHJhY2tFdmVudF9o
CisjZGVmaW5lIFdlYktpdERPTVRyYWNrRXZlbnRfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01FdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfVFJBQ0tfRVZFTlQgICAgICAgICAgICAod2Via2l0X2RvbV90cmFja19ldmVudF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RSQUNLX0VWRU5UKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9UUkFDS19FVkVO
VCwgV2ViS2l0RE9NVHJhY2tFdmVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fVFJBQ0tfRVZFTlRf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1RSQUNLX0VWRU5ULCBXZWJLaXRET01UcmFja0V2ZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfVFJBQ0tfRVZFTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RSQUNLX0VWRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19UUkFDS19FVkVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVFJBQ0tfRVZFTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1RSQUNLX0VWRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9UUkFDS19FVkVOVCwgV2ViS2l0RE9NVHJh
Y2tFdmVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UcmFja0V2ZW50IHsKKyAgICBXZWJL
aXRET01FdmVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRyYWNr
RXZlbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NRXZlbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3RyYWNrX2V2ZW50X2dldF90eXBlKHZvaWQp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NVHJhY2tFdmVudF9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRyYWNrRXZlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlOWZjOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVHJhY2tFdmVudFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRyYWNrRXZlbnRQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NVHJhY2tFdmVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9U
cmFja0V2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRyYWNrRXZlbnQuaD4K
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
VHJhY2tFdmVudCogd3JhcFRyYWNrRXZlbnQoV2ViQ29yZTo6VHJhY2tFdmVudCopOworV2ViS2l0
RE9NVHJhY2tFdmVudCoga2l0KFdlYkNvcmU6OlRyYWNrRXZlbnQqKTsKK1dlYkNvcmU6OlRyYWNr
RXZlbnQqIGNvcmUoV2ViS2l0RE9NVHJhY2tFdmVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCisKKyNlbmRpZiAvKiBXZWJLaXRE
T01UcmFja0V2ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyZWVXYWxrZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UcmVlV2Fsa2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kYjdiODVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fsa2VyLmNwcApAQCAtMCww
ICsxLDI4OSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRyZWVXYWxrZXIuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlRmlsdGVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRyZWVX
YWxrZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UUkVFX1dBTEtFUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUiwgV2ViS2l0RE9NVHJlZVdh
bGtlclByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0
ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRyZWVXYWxrZXI+IGNvcmVPYmplY3Q7Cit9IFdlYktp
dERPTVRyZWVXYWxrZXJQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9N
VHJlZVdhbGtlcioga2l0KFdlYkNvcmU6OlRyZWVXYWxrZXIqIG9iaikKK3sKKyAgICBpZiAoIW9i
aikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0
Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9UUkVFX1dBTEtFUihy
ZXQpOworCisgICAgcmV0dXJuIHdyYXBUcmVlV2Fsa2VyKG9iaik7Cit9CisKK1dlYkNvcmU6OlRy
ZWVXYWxrZXIqIGNvcmUoV2ViS2l0RE9NVHJlZVdhbGtlciogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRyZWVXYWxrZXIqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01UcmVlV2Fs
a2VyKiB3cmFwVHJlZVdhbGtlcihXZWJDb3JlOjpUcmVlV2Fsa2VyKiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9UUkVFX1dBTEtF
UihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RSRUVfV0FMS0VSLCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitH
X0RFRklORV9UWVBFKFdlYktpdERPTVRyZWVXYWxrZXIsIHdlYmtpdF9kb21fdHJlZV93YWxrZXIs
IFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9Q
X1JPT1QsCisgICAgUFJPUF9XSEFUX1RPX1NIT1csCisgICAgUFJPUF9GSUxURVIsCisgICAgUFJP
UF9DVVJSRU5UX05PREUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2Vy
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UcmVlV2Fsa2VyUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVFJFRV9XQUxLRVJfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZSgpOworICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdHJlZV93YWxrZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxmID0g
V0VCS0lUX0RPTV9UUkVFX1dBTEtFUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX1JPT1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfcm9vdChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9XSEFUX1RPX1NIT1c6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25n
KHZhbHVlLCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF93aGF0X3RvX3Nob3coc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklMVEVSOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X2ZpbHRlcihzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVVJSRU5UX05PREU6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfY3VycmVu
dF9ub2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9t
X3RyZWVfd2Fsa2VyX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQor
eworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdHJlZV93
YWxrZXJfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGll
c0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVRyZWVXYWxrZXJQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9UUkVFX1dBTEtFUl9HRVRfUFJJVkFURShvYmplY3Qp
OworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUcmVlV2Fsa2Vy
Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2Vy
X2NsYXNzX2luaXQoV2ViS2l0RE9NVHJlZVdhbGtlckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihX
ZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0
b3IgPSB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2ZpbmFsaXplOworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfcHJvcGVy
dHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUk9PVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJyb290IiwKKyAgICAgICAgICAgICJUcmVlV2Fsa2VyOnJvb3QiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBUcmVlV2Fsa2VyOnJvb3QiLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSEFUX1RPX1NIT1csCisgICAgICAg
IGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJ3aGF0LXRvLXNob3ciLAorICAgICAg
ICAgICAgIlRyZWVXYWxrZXI6d2hhdC10by1zaG93IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z3Vsb25nIFRyZWVXYWxrZXI6d2hhdC10by1zaG93IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9GSUxURVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAg
ICAiZmlsdGVyIiwKKyAgICAgICAgICAgICJUcmVlV2Fsa2VyOmZpbHRlciIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGVGaWx0ZXIqIFRyZWVXYWxrZXI6ZmlsdGVyIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFX0ZJTFRFUiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NVUlJFTlRfTk9ERSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjdXJyZW50LW5vZGUiLAor
ICAgICAgICAgICAgIlRyZWVXYWxrZXI6Y3VycmVudC1ub2RlIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NTm9kZSogVHJlZVdhbGtlcjpjdXJyZW50LW5vZGUiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2luaXQoV2Vi
S2l0RE9NVHJlZVdhbGtlciogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01UcmVlV2Fsa2VyUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVFJFRV9XQUxLRVJfR0VUX1BSSVZBVEUocmVxdWVzdCk7
CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZSgpOworfQorCitXZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3BhcmVudF9ub2RlKFdlYktpdERPTVRy
ZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlRyZWVXYWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5wYXJlbnROb2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90cmVlX3dhbGtl
cl9maXJzdF9jaGlsZChXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fs
a2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zmlyc3RDaGlsZCgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5v
ZGUqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfbGFzdF9jaGlsZChXZWJLaXRET01UcmVlV2Fsa2Vy
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+bGFzdENoaWxkKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9wcmV2aW91
c19zaWJsaW5nKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVFJFRV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRyZWVXYWxrZXIq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01O
b2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfc2libGluZyhXZWJLaXRET01UcmVlV2Fs
a2VyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+bmV4dFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3By
ZXZpb3VzX25vZGUoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19UUkVFX1dBTEtFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VHJlZVdhbGtl
ciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnByZXZpb3VzTm9kZSgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5v
ZGUqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfbmV4dF9ub2RlKFdlYktpdERPTVRyZWVXYWxrZXIq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OlRyZWVXYWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5uZXh0Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X3Jvb3Qo
V2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
UkVFX1dBTEtFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VHJlZVdhbGtlciogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJvb3QoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV90cmVlX3dhbGtlcl9n
ZXRfd2hhdF90b19zaG93KFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRyZWVX
YWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPndoYXRUb1Nob3coKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2Rl
RmlsdGVyKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9maWx0ZXIoV2ViS2l0RE9NVHJlZVdh
bGtlciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUZpbHRlcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmZpbHRlcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJf
Z2V0X2N1cnJlbnRfbm9kZShXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUcmVl
V2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpO
b2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3VycmVudE5vZGUoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdl
YmtpdF9kb21fdHJlZV93YWxrZXJfc2V0X2N1cnJlbnRfbm9kZShXZWJLaXRET01UcmVlV2Fsa2Vy
KiBzZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX05PREUodmFsdWUpKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdlYkNvcmU6OlRyZWVXYWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6Tm9kZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgIGl0
ZW0tPnNldEN1cnJlbnROb2RlKCpjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVHJlZVdhbGtlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMzBjNWFiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtl
ci5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdf
V0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNs
dWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01UcmVlV2Fsa2VyX2gK
KyNkZWZpbmUgV2ViS2l0RE9NVHJlZVdhbGtlcl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX1RSRUVfV0FMS0VSICAgICAgICAgICAgKHdlYmtpdF9kb21fdHJlZV93YWxr
ZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9UUkVFX1dBTEtFUihvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
VFJFRV9XQUxLRVIsIFdlYktpdERPTVRyZWVXYWxrZXIpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RS
RUVfV0FMS0VSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUiwgV2ViS2l0RE9NVHJlZVdhbGtlckNsYXNz
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUikp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RSRUVfV0FMS0VSKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UUkVFX1dBTEtFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVFJFRV9XQUxLRVIsIFdl
YktpdERPTVRyZWVXYWxrZXJDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVHJlZVdhbGtlciB7
CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NVHJlZVdhbGtlckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfcGFyZW50X25v
ZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TU5vZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3BhcmVudF9ub2RlKFdlYktpdERPTVRyZWVX
YWxrZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZmlyc3RfY2hp
bGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TU5vZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2ZpcnN0X2NoaWxkKFdlYktpdERPTVRyZWVX
YWxrZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfbGFzdF9jaGls
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
Tm9kZSoKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfbGFzdF9jaGlsZChXZWJLaXRET01UcmVlV2Fs
a2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3ByZXZpb3VzX3Np
Ymxpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTU5vZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3ByZXZpb3VzX3NpYmxpbmcoV2ViS2l0
RE9NVHJlZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9u
ZXh0X3NpYmxpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfc2libGluZyhXZWJL
aXRET01UcmVlV2Fsa2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2Vy
X3ByZXZpb3VzX25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3ByZXZpb3VzX25vZGUo
V2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVlX3dh
bGtlcl9uZXh0X25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfbm9kZShXZWJL
aXRET01UcmVlV2Fsa2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2Vy
X2dldF9yb290OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfcm9vdChXZWJLaXRET01U
cmVlV2Fsa2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF93
aGF0X3RvX3Nob3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJl
dHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV90cmVl
X3dhbGtlcl9nZXRfd2hhdF90b19zaG93KFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X2ZpbHRlcjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01Ob2RlRmlsdGVyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZUZpbHRlcioK
K3dlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X2ZpbHRlcihXZWJLaXRET01UcmVlV2Fsa2VyKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9jdXJyZW50X25vZGU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5v
ZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9jdXJyZW50X25vZGUoV2ViS2l0RE9NVHJl
ZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9zZXRfY3Vy
cmVudF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAqIEB2YWx1ZTog
QSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfc2V0X2N1cnJlbnRfbm9kZShXZWJLaXRET01U
cmVlV2Fsa2VyKiBzZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NVHJlZVdhbGtlcl9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyZWVXYWxrZXJQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UyYWQxMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRyZWVXYWxrZXJQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGVfaAorCisjaW5jbHVk
ZSA8V2ViQ29yZS9UcmVlV2Fsa2VyLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRy
ZWVXYWxrZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UcmVlV2Fsa2VyKiB3
cmFwVHJlZVdhbGtlcihXZWJDb3JlOjpUcmVlV2Fsa2VyKik7CitXZWJLaXRET01UcmVlV2Fsa2Vy
KiBraXQoV2ViQ29yZTo6VHJlZVdhbGtlciopOworV2ViQ29yZTo6VHJlZVdhbGtlciogY29yZShX
ZWJLaXRET01UcmVlV2Fsa2VyKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IFdlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVVJRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjBiYzQ1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnQuY3BwCkBAIC0wLDAg
KzEsMzA2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVUlFdmVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29y
ZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURP
TVdpbmRvd1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVUlFdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NVUlFdmVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVVJRXZl
bnQqIGtpdChXZWJDb3JlOjpVSUV2ZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
VUlfRVZFTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50Kj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpVSUV2ZW50KiBjb3JlKFdlYktpdERPTVVJRXZlbnQqIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpVSUV2ZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVUlFdmVu
dCogd3JhcFVJRXZlbnQoV2ViQ29yZTo6VUlFdmVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVUlfRVZFTlQoZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9VSV9FVkVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01VSUV2ZW50LCB3ZWJraXRfZG9tX3VpX2V2ZW50LCBXRUJLSVRfRE9NX1RZUEVfRVZF
TlQpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1ZJRVcsCisgICAgUFJPUF9ERVRB
SUwsCisgICAgUFJPUF9LRVlfQ09ERSwKKyAgICBQUk9QX0NIQVJfQ09ERSwKKyAgICBQUk9QX0xB
WUVSX1gsCisgICAgUFJPUF9MQVlFUl9ZLAorICAgIFBST1BfUEFHRV9YLAorICAgIFBST1BfUEFH
RV9ZLAorICAgIFBST1BfV0hJQ0gsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3VpX2V2
ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVVJRXZlbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX1VJX0VWRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfVklFVzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF92aWV3KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RFVEFJTDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV91aV9ldmVudF9nZXRfZGV0YWlsKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0tFWV9DT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3
ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9rZXlfY29kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DSEFSX0NPREU6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2NoYXJfY29kZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9MQVlFUl9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVl
LCB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9sYXllcl94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0xBWUVSX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2xheWVyX3koc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUEFHRV9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3
ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9wYWdlX3goc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUEFHRV9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX3VpX2V2ZW50X2dldF9wYWdlX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfV0hJQ0g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9k
b21fdWlfZXZlbnRfZ2V0X3doaWNoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdWlfZXZlbnRfY2xhc3NfaW5pdChXZWJLaXRET01VSUV2ZW50Q2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WSUVX
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZpZXciLAorICAg
ICAgICAgICAgIlVJRXZlbnQ6dmlldyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERP
TURPTVdpbmRvdyogVUlFdmVudDp2aWV3IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9E
T01fV0lORE9XLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfREVUQUlMLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAg
ICAgICJkZXRhaWwiLAorICAgICAgICAgICAgIlVJRXZlbnQ6ZGV0YWlsIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgVUlFdmVudDpkZXRhaWwiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9LRVlfQ09ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisg
ICAgICAgICAgICAia2V5LWNvZGUiLAorICAgICAgICAgICAgIlVJRXZlbnQ6a2V5LWNvZGUiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBVSUV2ZW50OmtleS1jb2RlIiwKKyAgICAgICAg
ICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hBUl9DT0RFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfbG9uZygKKyAgICAgICAgICAgICJjaGFyLWNvZGUiLAorICAgICAgICAgICAgIlVJRXZl
bnQ6Y2hhci1jb2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVUlFdmVudDpjaGFy
LWNvZGUiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQVlFUl9YLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJsYXllci14IiwKKyAgICAg
ICAgICAgICJVSUV2ZW50OmxheWVyLXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBV
SUV2ZW50OmxheWVyLXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
QVlFUl9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJsYXllci15
IiwKKyAgICAgICAgICAgICJVSUV2ZW50OmxheWVyLXkiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnbG9uZyBVSUV2ZW50OmxheWVyLXkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9QQUdFX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
InBhZ2UteCIsCisgICAgICAgICAgICAiVUlFdmVudDpwYWdlLXgiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnbG9uZyBVSUV2ZW50OnBhZ2UteCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdf
TUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1BBR0VfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAg
ICAgICAicGFnZS15IiwKKyAgICAgICAgICAgICJVSUV2ZW50OnBhZ2UteSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdsb25nIFVJRXZlbnQ6cGFnZS15IiwKKyAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfV0hJQ0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgIndoaWNoIiwKKyAgICAgICAgICAgICJVSUV2ZW50OndoaWNoIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2xvbmcgVUlFdmVudDp3aGljaCIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdWlfZXZlbnRfaW5pdChXZWJLaXRET01VSUV2
ZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3
ZWJraXRfZG9tX3VpX2V2ZW50X2luaXRfdWlfZXZlbnQoV2ViS2l0RE9NVUlFdmVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHR5cGUsIGdib29sZWFuIGNhbkJ1YmJsZSwgZ2Jvb2xlYW4gY2FuY2VsYWJs
ZSwgV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBnbG9uZyBkZXRhaWwpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19VSV9FVkVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh0eXBlKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyh2aWV3KSk7Cisg
ICAgV2ViQ29yZTo6VUlFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRUeXBlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHR5cGUpOworICAg
IFdlYkNvcmU6OkRPTVdpbmRvdyogY29udmVydGVkVmlldyA9IFdlYktpdDo6Y29yZSh2aWV3KTsK
KyAgICBpdGVtLT5pbml0VUlFdmVudChjb252ZXJ0ZWRUeXBlLCBjYW5CdWJibGUsIGNhbmNlbGFi
bGUsIGNvbnZlcnRlZFZpZXcsIGRldGFpbCk7Cit9CisKK1dlYktpdERPTURPTVdpbmRvdyogd2Vi
a2l0X2RvbV91aV9ldmVudF9nZXRfdmlldyhXZWJLaXRET01VSUV2ZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpV
SUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpE
T01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT52aWV3KCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2xvbmcgd2Vi
a2l0X2RvbV91aV9ldmVudF9nZXRfZGV0YWlsKFdlYktpdERPTVVJRXZlbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVUlfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlVJRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0g
aXRlbS0+ZGV0YWlsKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2Rv
bV91aV9ldmVudF9nZXRfa2V5X2NvZGUoV2ViS2l0RE9NVUlFdmVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19VSV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VUlF
dmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVt
LT5rZXlDb2RlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV91
aV9ldmVudF9nZXRfY2hhcl9jb2RlKFdlYktpdERPTVVJRXZlbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVUlfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlVJRXZl
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+
Y2hhckNvZGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3Vp
X2V2ZW50X2dldF9sYXllcl94KFdlYktpdERPTVVJRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVUlfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlVJRXZlbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+bGF5
ZXJYKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV91aV9ldmVu
dF9nZXRfbGF5ZXJfeShXZWJLaXRET01VSUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpVSUV2ZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmxheWVyWSgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0
X3BhZ2VfeChXZWJLaXRET01VSUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpVSUV2ZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnBhZ2VYKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV95
KFdlYktpdERPTVVJRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVUlf
RVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlVJRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+cGFnZVkoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF93aGljaChXZWJLaXRE
T01VSUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1VJX0VWRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpVSUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndoaWNoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmU2ZmI3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01VSUV2ZW50LmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4g
Y2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVVJ
RXZlbnRfaAorI2RlZmluZSBXZWJLaXRET01VSUV2ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUV2ZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9VSV9FVkVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3VpX2V2ZW50
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVUlfRVZFTlQob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1VJX0VW
RU5ULCBXZWJLaXRET01VSUV2ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9VSV9FVkVOVF9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfVUlfRVZFTlQsIFdlYktpdERPTVVJRXZlbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19VSV9FVkVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1VJ
X0VWRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9VSV9FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fVUlfRVZFTlRfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX1VJX0VWRU5ULCBXZWJLaXRET01VSUV2ZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTVVJRXZlbnQgeworICAgIFdlYktpdERPTUV2ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NVUlFdmVudENsYXNzIHsKKyAgICBXZWJLaXRET01FdmVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdWlfZXZl
bnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9pbml0X3Vp
X2V2ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqIEB0eXBlOiBBICNnY2hh
cgorICogQGNhbkJ1YmJsZTogQSAjZ2Jvb2xlYW4KKyAqIEBjYW5jZWxhYmxlOiBBICNnYm9vbGVh
bgorICogQHZpZXc6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGRldGFpbDogQSAjZ2xvbmcK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV91aV9ldmVudF9pbml0X3VpX2V2
ZW50KFdlYktpdERPTVVJRXZlbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlLCBnYm9vbGVhbiBj
YW5CdWJibGUsIGdib29sZWFuIGNhbmNlbGFibGUsIFdlYktpdERPTURPTVdpbmRvdyogdmlldywg
Z2xvbmcgZGV0YWlsKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF92aWV3Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTURPTVdpbmRvdworKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURP
TVdpbmRvdyoKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3ZpZXcoV2ViS2l0RE9NVUlFdmVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9nZXRfZGV0YWlsOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitX
RUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9kZXRhaWwoV2ViS2l0RE9N
VUlFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9nZXRfa2V5X2Nv
ZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVUlFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2ds
b25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2tleV9j
b2RlKFdlYktpdERPTVVJRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdWlfZXZl
bnRfZ2V0X2NoYXJfY29kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01VSUV2ZW50CisgKgorICog
UmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV91aV9l
dmVudF9nZXRfY2hhcl9jb2RlKFdlYktpdERPTVVJRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdWlfZXZlbnRfZ2V0X2xheWVyX3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVUlF
dmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dl
YmtpdF9kb21fdWlfZXZlbnRfZ2V0X2xheWVyX3goV2ViS2l0RE9NVUlFdmVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9nZXRfbGF5ZXJfeToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01VSUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQ
SSBnbG9uZword2Via2l0X2RvbV91aV9ldmVudF9nZXRfbGF5ZXJfeShXZWJLaXRET01VSUV2ZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9wYWdlX3g6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVUlFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8K
K1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3BhZ2VfeChXZWJLaXRE
T01VSUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9wYWdl
X3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVUlFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2ds
b25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3BhZ2Vf
eShXZWJLaXRET01VSUV2ZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdl
YktpdERPTVVJRXZlbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01VSUV2ZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmU5ZTQzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnRQcml2YXRlLmgKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01VSUV2ZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVVJRXZlbnRQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvVUlFdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01VSUV2ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVUlFdmVudCog
d3JhcFVJRXZlbnQoV2ViQ29yZTo6VUlFdmVudCopOworV2ViS2l0RE9NVUlFdmVudCoga2l0KFdl
YkNvcmU6OlVJRXZlbnQqKTsKK1dlYkNvcmU6OlVJRXZlbnQqIGNvcmUoV2ViS2l0RE9NVUlFdmVu
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01VSUV2ZW50
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnRVbnN0YWJsZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01V
SUV2ZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQx
OTE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50VW5zdGFibGUuaApAQCAtMCwwICsx
LDQ1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TVVJRXZlbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTVVJRXZlbnRVbnN0YWJsZV9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisg
KiB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF93aGljaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01V
SUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3doaWNo
KFdlYktpdERPTVVJRXZlbnQqIHNlbGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01VSUV2ZW50
VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI3Y2ZmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
ci5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRs
ZXIuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRs
ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9VU0VSX01FU1NBR0VfSEFORExFUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUiwg
V2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZhdGUgeworI2lmIEVOQUJMRShVU0VSX01FU1NB
R0VfSEFORExFUlMpCisgICAgUmVmUHRyPFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcj4gY29y
ZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorfSBXZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlOworCisjaWYgRU5BQkxFKFVTRVJfTUVTU0FH
RV9IQU5ETEVSUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlcioga2l0KFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlciogb2JqKQoreworICAgIGlm
ICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01P
YmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1VTRVJfTUVT
U0FHRV9IQU5ETEVSKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFVzZXJNZXNzYWdlSGFuZGxlcihv
YmopOworfQorCitXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXIqIGNvcmUoV2ViS2l0RE9NVXNl
ck1lc3NhZ2VIYW5kbGVyKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVy
KiB3cmFwVXNlck1lc3NhZ2VIYW5kbGVyKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlciogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fVVNFUl9NRVNTQUdFX0hBTkRMRVIoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9VU0VS
X01FU1NBR0VfSEFORExFUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShVU0VSX01FU1NB
R0VfSEFORExFUlMpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVy
LCB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNU
KQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUl9HRVRfUFJJVkFURShv
YmplY3QpOworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8v
IEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgcHJpdi0+fldlYktpdERPTVVzZXJN
ZXNzYWdlSGFuZGxlclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Vz
ZXJfbWVzc2FnZV9oYW5kbGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX2NvbnN0cnVj
dG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENv
bnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVj
dCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAg
IFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1VT
RVJfTUVTU0FHRV9IQU5ETEVSX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcio+KFdFQktJVF9E
T01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJM
RShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9jbGFzc19pbml0KFdlYktpdERP
TVVzZXJNZXNzYWdlSGFuZGxlckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01Vc2Vy
TWVzc2FnZUhhbmRsZXJQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9
IHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfY29uc3RydWN0b3I7CisgICAgZ29iamVj
dENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfZmluYWxp
emU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfaW5p
dChXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9N
VXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVVNFUl9NRVNTQUdF
X0hBTkRMRVJfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01V
c2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV91c2VyX21l
c3NhZ2VfaGFuZGxlcl9wb3N0X21lc3NhZ2UoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyKiBz
ZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxF
KFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1VTRVJfTUVTU0FH
RV9IQU5ETEVSKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG1lc3NhZ2UpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlVzZXJNZXNz
YWdlSGFuZGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5wb3N0TWVzc2FnZShXZWJDb3JlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFN
KG1lc3NhZ2UpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVXNlciBNZXNzYWdlIEhhbmRsZXJzIikKKyNlbmRpZiAvKiBFTkFC
TEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJN
ZXNzYWdlSGFuZGxlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjcwNDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01V
c2VyTWVzc2FnZUhhbmRsZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcl9oCisjZGVm
aW5lIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVIgICAgICAgICAgICAod2Via2l0X2RvbV91c2VyX21l
c3NhZ2VfaGFuZGxlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FH
RV9IQU5ETEVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUiwgV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUl9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVIsIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
ckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1VTRVJfTUVTU0FHRV9IQU5ETEVSKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9VU0VSX01FU1NBR0VfSEFORExFUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVVNFUl9NRVNT
QUdFX0hBTkRMRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9VU0VSX01FU1NBR0VfSEFORExFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVIs
IFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlckNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01V
c2VyTWVzc2FnZUhhbmRsZXIgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlckNsYXNzIHsKKyAgICBX
ZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX2dldF90eXBlKHZvaWQpOworCisvKioK
KyAqIHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfcG9zdF9tZXNzYWdlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcgorICogQG1lc3NhZ2U6IEEgI2djaGFy
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9wb3N0X21lc3Nh
Z2UoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyKiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2Fn
ZSwgR0Vycm9yKiogZXJyb3IpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5k
bGVyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjRhYmE1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VI
YW5kbGVyUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9Vc2VyTWVzc2FnZUhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NVXNlck1lc3NhZ2VIYW5kbGVyLmg+CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVS
UykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIqIHdy
YXBVc2VyTWVzc2FnZUhhbmRsZXIoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyKik7CitXZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXIqIGtpdChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXIq
KTsKK1dlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlciogY29yZShXZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXIqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExN2JkMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAKQEAgLTAsMCArMSwxMTAg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVVzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2VQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UsIFdlYktpdERPTVVzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2VQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGUgeworI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCisgICAgUmVmUHRyPFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2U+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykK
K30gV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGU7CisKKyNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSoga2l0KFdlYkNvcmU6OlVzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2UqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmop
KQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQ
QUNFKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uo
b2JqKTsKK30KKworV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSogY29yZShX
ZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqIHdyYXBVc2VyTWVzc2Fn
ZUhhbmRsZXJzTmFtZXNwYWNlKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uq
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UoZ19vYmplY3RfbmV3KFdFQktJ
VF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFLCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLCB3ZWJraXRfZG9tX3VzZXJfbWVz
c2FnZV9oYW5kbGVyc19uYW1lc3BhY2UsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19O
QU1FU1BBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hB
TkRMRVJTKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAg
IHByaXYtPn5XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVz
cGFjZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFj
ZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExF
UlMpCisgICAgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0VfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCkt
PmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFO
RExFUlMpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV91
c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlX2NsYXNzX2luaXQoV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01V
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+
Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyc19uYW1lc3BhY2Vf
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdXNl
cl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlX2luaXQoV2ViS2l0RE9N
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01V
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVVNF
Ul9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlKCk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzQ3YmE2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3Nh
Z2VIYW5kbGVyc05hbWVzcGFjZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZV9oCisjZGVmaW5lIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VfaAor
CisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UgICAgICAg
ICAgICAod2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlX2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRShv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRSwgV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZSkpCisjZGVmaW5lIFdFQktJVF9ET01fVVNFUl9NRVNTQUdF
X0hBTkRMRVJTX05BTUVTUEFDRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVT
UEFDRSwgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUNsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0Uob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1VT
RVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1VT
RVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVS
U19OQU1FU1BBQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19O
QU1FU1BBQ0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UsIFdlYktp
dERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0
RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBh
cmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVy
c05hbWVzcGFjZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVy
c19uYW1lc3BhY2VfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01Vc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFj
ZVByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNC
dWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5k
bGVyc05hbWVzcGFjZVByaXZhdGUuaAppbmRleCA4NzhiNjIyLi4wMjQxZTBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZS5oCkBAIC0xOCwxNiArMTgsMTkgQEAKICAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRE
T01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlX2gKKyNpZm5kZWYgV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJU
ZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaD4KKyNpZiBFTkFCTEUo
VVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iq
KTsKLVdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcioga2l0KFdlYkNv
cmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciopOwotV2ViQ29yZTo6VGVzdENs
YXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvciopOworV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZSogd3JhcFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UoV2ViQ29yZTo6VXNlck1lc3Nh
Z2VIYW5kbGVyc05hbWVzcGFjZSopOworV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZSoga2l0KFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqKTsKK1dlYkNv
cmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqIGNvcmUoV2ViS2l0RE9NVXNlck1lc3Nh
Z2VIYW5kbGVyc05hbWVzcGFjZSopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAv
KiBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlX2ggKi8K
KyNlbmRpZiAvKiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAqLworCisjZW5kaWYgLyog
V2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01WVFRDdWUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WVFRDdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmQ5NTJmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZUVEN1
ZS5jcHAKQEAgLTAsMCArMSw1OTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WVFRDdWUuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50RnJh
Z21lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVZUVEN1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TVZUVEN1ZSoga2l0KFdlYkNvcmU6OlZUVEN1ZSogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRf
RE9NX1ZUVF9DVUUoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0N1ZSo+KG9iaikp
KTsKK30KKworV2ViQ29yZTo6VlRUQ3VlKiBjb3JlKFdlYktpdERPTVZUVEN1ZSogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZUVEN1ZSo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TVZUVEN1ZSogd3JhcFZUVEN1ZShXZWJDb3JlOjpWVFRDdWUqIGNvcmVPYmplY3QpCit7CisgICAg
QVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1ZUVF9DVUUoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9WVFRfQ1VFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0
LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV92dHRfY3VlX2Rp
c3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50
KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlm
ICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6VlRUQ3Vl
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VlRUQ3VlKj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50
Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX3Z0dF9jdWVfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OlZUVEN1
ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZUVEN1ZSo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9Q
QVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX3Z0dF9jdWVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNv
cmU6OlZUVEN1ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZUVEN1ZSo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6
OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOwor
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV92
dHRfY3VlX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX3Z0dF9jdWVfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3Z0dF9jdWVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01WVFRDdWUsIHdlYmtpdF9k
b21fdnR0X2N1ZSwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFLCBHX0lNUExFTUVOVF9J
TlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1ZFUlRJQ0FMLAor
ICAgIFBST1BfU05BUF9UT19MSU5FUywKKyAgICBQUk9QX0xJTkUsCisgICAgUFJPUF9QT1NJVElP
TiwKKyAgICBQUk9QX1NJWkUsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX1RFWFQsCisgICAg
UFJPUF9SRUdJT05fSUQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVlRUQ3VlKiBzZWxm
ID0gV0VCS0lUX0RPTV9WVFRfQ1VFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfVkVSVElDQUw6CisgICAgICAgIHdlYmtpdF9kb21fdnR0X2N1ZV9z
ZXRfdmVydGljYWwoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TTkFQX1RPX0xJTkVTOgorICAgICAgICB3ZWJr
aXRfZG9tX3Z0dF9jdWVfc2V0X3NuYXBfdG9fbGluZXMoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTElORToKKyAgICAgICAg
d2Via2l0X2RvbV92dHRfY3VlX3NldF9saW5lKHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1
ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9TSVRJT046Cisg
ICAgICAgIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcG9zaXRpb24oc2VsZiwgZ192YWx1ZV9nZXRf
ZG91YmxlKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9T
SVpFOgorICAgICAgICB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3NpemUoc2VsZiwgZ192YWx1ZV9n
ZXRfZG91YmxlKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV92dHRfY3VlX3NldF9hbGlnbihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1RFWFQ6CisgICAgICAgIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfdGV4dChzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1JFR0lPTl9JRDoKKyAgICAgICAgd2Via2l0X2RvbV92dHRfY3VlX3NldF9yZWdpb25faWQoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NVlRUQ3VlKiBzZWxmID0gV0VCS0lUX0RPTV9WVFRfQ1VFKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVkVSVElDQUw6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfdmVydGljYWwo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU05BUF9UT19MSU5FUzoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3VlX2dldF9z
bmFwX3RvX2xpbmVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xJTkU6
CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3VlX2dl
dF9saW5lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPU0lUSU9OOgor
ICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRf
cG9zaXRpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Np
emUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfYWxpZ24o
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3VlX2dldF90ZXh0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFR0lPTl9JRDoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3VlX2dldF9yZWdpb25faWQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92dHRfY3VlX2Ns
YXNzX2luaXQoV2ViS2l0RE9NVlRUQ3VlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV92dHRf
Y3VlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WRVJUSUNBTCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2ZXJ0aWNhbCIsCisgICAgICAgICAg
ICAiVlRUQ3VlOnZlcnRpY2FsIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBWVFRD
dWU6dmVydGljYWwiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU05BUF9UT19MSU5FUywKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic25hcC10by1saW5lcyIsCisgICAg
ICAgICAgICAiVlRUQ3VlOnNuYXAtdG8tbGluZXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gVlRUQ3VlOnNuYXAtdG8tbGluZXMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTElO
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJsaW5lIiwKKyAg
ICAgICAgICAgICJWVFRDdWU6bGluZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZG91Ymxl
IFZUVEN1ZTpsaW5lIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfUE9TSVRJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAi
cG9zaXRpb24iLAorICAgICAgICAgICAgIlZUVEN1ZTpwb3NpdGlvbiIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnZG91YmxlIFZUVEN1ZTpwb3NpdGlvbiIsCisgICAgICAgICAgICAtR19NQVhE
T1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NJWkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3Vi
bGUoCisgICAgICAgICAgICAic2l6ZSIsCisgICAgICAgICAgICAiVlRUQ3VlOnNpemUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBWVFRDdWU6c2l6ZSIsCisgICAgICAgICAgICAt
R19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAgICJWVFRDdWU6YWxp
Z24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFZUVEN1ZTphbGlnbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgInRleHQiLAorICAgICAgICAgICAgIlZUVEN1ZTp0ZXh0IiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBWVFRDdWU6dGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUdJT05f
SUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicmVnaW9uLWlk
IiwKKyAgICAgICAgICAgICJWVFRDdWU6cmVnaW9uLWlkIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBWVFRDdWU6cmVnaW9uLWlkIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdnR0X2N1ZV9pbml0KFdlYktpdERPTVZUVEN1ZSogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0ocmVxdWVzdCk7Cit9CisKK1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHdlYmtpdF9k
b21fdnR0X2N1ZV9nZXRfY3VlX2FzX2h0bWwoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKQoreworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5nZXRDdWVBc0hUTUwoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJl
dHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdl
YmtpdF9kb21fdnR0X2N1ZV9nZXRfdmVydGljYWwoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKQorewor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VF
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmVydGlj
YWwoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAg
ICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV92dHRfY3VlX3NldF92ZXJ0aWNhbChXZWJLaXRET01WVFRDdWUqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7
CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRWZXJ0aWNh
bChjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5kaWYg
LyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3Z0dF9j
dWVfZ2V0X3NuYXBfdG9fbGluZXMoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKQoreworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnNuYXBUb0xpbmVzKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9p
ZCB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3NuYXBfdG9fbGluZXMoV2ViS2l0RE9NVlRUQ3VlKiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U25hcFRvTGluZXModmFsdWUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5k
aWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fdnR0
X2N1ZV9nZXRfbGluZShXZWJLaXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91Ymxl
IHJlc3VsdCA9IGl0ZW0tPmxpbmUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
VmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV92dHRfY3Vl
X3NldF9saW5lKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiog
ZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VlRUX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7
CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldExpbmUodmFsdWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFD
SykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Bvc2l0aW9uKFdlYktp
dERPTVZUVEN1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+cG9z
aXRpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV92dHRfY3VlX3NldF9wb3NpdGlvbihX
ZWJLaXRET01WVFRDdWUqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKQorewor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRQb3NpdGlvbih2YWx1ZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLwor
fQorCitnZG91YmxlIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfc2l6ZShXZWJLaXRET01WVFRDdWUq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnNpemUoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9
CisKK3ZvaWQgd2Via2l0X2RvbV92dHRfY3VlX3NldF9zaXplKFdlYktpdERPTVZUVEN1ZSogc2Vs
ZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPnNldFNpemUodmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJv
cik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
dnR0X2N1ZV9nZXRfYWxpZ24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YWxpZ24oKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV92dHRf
Y3VlX3NldF9hbGlnbihXZWJLaXRET01WVFRDdWUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwg
R0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVlRUX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6VlRU
Q3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRBbGlnbihjb252ZXJ0ZWRWYWx1ZSwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwor
ICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNL
KSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV92dHRfY3VlX2dldF90ZXh0KFdlYktpdERPTVZU
VEN1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVlRUX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnRleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICov
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV92dHRfY3VlX3NldF90ZXh0KFdlYktpdERPTVZUVEN1ZSog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0VGV4dChjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUo
VklERU9fVFJBQ0spICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3JlZ2lv
bl9pZChXZWJLaXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5yZWdpb25JZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVO
QUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3Jl
Z2lvbl9pZChXZWJLaXRET01WVFRDdWUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFJlZ2lvbklkKGNv
bnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01WVFRDdWUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMWZlZGVmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlLmgK
QEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NVlRUQ3VlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVlRUQ3VlX2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlLmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9WVFRfQ1VFICAgICAgICAgICAgKHdlYmtpdF9kb21f
dnR0X2N1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZUVF9DVUUob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1ZUVF9DVUUsIFdlYktpdERPTVZUVEN1ZSkpCisjZGVmaW5lIFdFQktJVF9ET01fVlRUX0NVRV9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVlRUX0NVRSwgV2ViS2l0RE9NVlRUQ3VlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfVlRUX0NVRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfVlRUX0NVRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVlRU
X0NVRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfVlRUX0NVRSkpCisjZGVmaW5lIFdFQktJVF9ET01fVlRUX0NVRV9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZ
UEVfVlRUX0NVRSwgV2ViS2l0RE9NVlRUQ3VlQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVZU
VEN1ZSB7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlIHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NVlRUQ3VlQ2xhc3MgeworICAgIFdlYktpdERPTVRleHRUcmFja0N1
ZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
dnR0X2N1ZV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0
X2N1ZV9hc19odG1sOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50Kgord2Via2l0X2RvbV92dHRfY3VlX2dldF9jdWVfYXNfaHRtbChXZWJLaXRET01WVFRD
dWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfdmVydGljYWw6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX3Z0dF9jdWVfZ2V0X3ZlcnRpY2FsKFdlYktpdERPTVZUVEN1ZSogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV92dHRfY3VlX3NldF92ZXJ0aWNhbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01WVFRDdWUKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Z0
dF9jdWVfc2V0X3ZlcnRpY2FsKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX2dldF9z
bmFwX3RvX2xpbmVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3NuYXBfdG9fbGluZXMoV2ViS2l0
RE9NVlRUQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3NuYXBf
dG9fbGluZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fdnR0X2N1ZV9zZXRfc25hcF90b19saW5lcyhXZWJLaXRET01WVFRDdWUqIHNl
bGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X2xp
bmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJuczogQSAjZ2Rv
dWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91Ymxl
Cit3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X2xpbmUoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X2xpbmU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVlRUQ3VlCisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X3Z0dF9jdWVfc2V0X2xpbmUoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBnZG91YmxlIHZhbHVlLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX2dldF9wb3NpdGlv
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91
YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUK
K3dlYmtpdF9kb21fdnR0X2N1ZV9nZXRfcG9zaXRpb24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3Bvc2l0aW9uOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVZUVEN1ZQorICogQHZhbHVlOiBBICNnZG91YmxlCisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV92dHRfY3VlX3NldF9wb3NpdGlvbihXZWJLaXRET01WVFRDdWUqIHNlbGYsIGdkb3Vi
bGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVf
Z2V0X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJuczog
QSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
ZG91YmxlCit3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3NpemUoV2ViS2l0RE9NVlRUQ3VlKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3NpemU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVlRUQ3VlCisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Z0dF9jdWVfc2V0X3NpemUoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBnZG91YmxlIHZh
bHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX2dldF9h
bGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fdnR0X2N1ZV9nZXRfYWxpZ24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVZUVEN1ZQorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
dnR0X2N1ZV9zZXRfYWxpZ24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Rl
eHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3RleHQoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VlRUQ3VlCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdnR0X2N1ZV9zZXRfdGV4dChXZWJLaXRE
T01WVFRDdWUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV92dHRfY3VlX2dldF9yZWdpb25faWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3JlZ2lvbl9pZChXZWJL
aXRET01WVFRDdWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcmVn
aW9uX2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Z0dF9jdWVfc2V0X3JlZ2lvbl9pZChXZWJLaXRET01WVFRDdWUqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01WVFRDdWVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01WVFRDdWVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZUVEN1ZVByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJiYWRlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01WVFRDdWVQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01WVFRDdWVQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NVlRUQ3VlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1ZUVEN1ZS5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01WVFRDdWUuaD4KKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVlRUQ3VlKiB3cmFwVlRUQ3Vl
KFdlYkNvcmU6OlZUVEN1ZSopOworV2ViS2l0RE9NVlRUQ3VlKiBraXQoV2ViQ29yZTo6VlRUQ3Vl
Kik7CitXZWJDb3JlOjpWVFRDdWUqIGNvcmUoV2ViS2l0RE9NVlRUQ3VlKik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlm
IC8qIFdlYktpdERPTVZUVEN1ZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0
eVN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjQ2YzVkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmFsaWRpdHlT
dGF0ZS5jcHAKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WYWxpZGl0eVN0YXRl
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVZhbGlk
aXR5U3RhdGVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9WQUxJRElUWV9TVEFURV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwgV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01WYWxp
ZGl0eVN0YXRlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU+IGNv
cmVPYmplY3Q7Cit9IFdlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSoga2l0KFdlYkNvcmU6OlZhbGlkaXR5
U3RhdGUqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9WQUxJRElUWV9TVEFURShyZXQpOworCisgICAgcmV0dXJuIHdyYXBWYWxp
ZGl0eVN0YXRlKG9iaik7Cit9CisKK1dlYkNvcmU6OlZhbGlkaXR5U3RhdGUqIGNvcmUoV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlZhbGlkaXR5U3RhdGUqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiB3cmFwVmFs
aWRpdHlTdGF0ZShXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBjb3JlT2JqZWN0KQoreworICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9WQUxJRElUWV9TVEFURShn
X29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFLCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitH
X0RFRklORV9UWVBFKFdlYktpdERPTVZhbGlkaXR5U3RhdGUsIHdlYmtpdF9kb21fdmFsaWRpdHlf
c3RhdGUsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX1ZBTFVFX01JU1NJTkcsCisgICAgUFJPUF9UWVBFX01JU01BVENILAorICAgIFBST1Bf
UEFUVEVSTl9NSVNNQVRDSCwKKyAgICBQUk9QX1RPT19MT05HLAorICAgIFBST1BfUkFOR0VfVU5E
RVJGTE9XLAorICAgIFBST1BfUkFOR0VfT1ZFUkZMT1csCisgICAgUFJPUF9TVEVQX01JU01BVENI
LAorICAgIFBST1BfQkFEX0lOUFVULAorICAgIFBST1BfQ1VTVE9NX0VSUk9SLAorICAgIFBST1Bf
VkFMSUQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fVkFMSURJVFlfU1RBVEVfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZSgpOworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92YWxpZGl0eV9z
dGF0ZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01WYWxpZGl0eVN0
YXRlKiBzZWxmID0gV0VCS0lUX0RPTV9WQUxJRElUWV9TVEFURShvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZBTFVFX01JU1NJTkc6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0
X3ZhbHVlX21pc3Npbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQ
RV9NSVNNQVRDSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV92YWxpZGl0eV9zdGF0ZV9nZXRfdHlwZV9taXNtYXRjaChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9QQVRURVJOX01JU01BVENIOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9wYXR0ZXJuX21pc21h
dGNoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RPT19MT05HOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRl
X2dldF90b29fbG9uZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SQU5H
RV9VTkRFUkZMT1c6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21fdmFsaWRpdHlfc3RhdGVfZ2V0X3JhbmdlX3VuZGVyZmxvdyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9SQU5HRV9PVkVSRkxPVzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcmFuZ2Vfb3ZlcmZs
b3coc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RFUF9NSVNNQVRDSDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9z
dGF0ZV9nZXRfc3RlcF9taXNtYXRjaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9CQURfSU5QVVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtp
dF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X2JhZF9pbnB1dChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9DVVNUT01fRVJST1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X2N1c3RvbV9lcnJvcihzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJRDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdmFsaWQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdmFsaWRp
dHlfc3RhdGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGll
c0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7Cisg
ICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV92YWxpZGl0eV9z
dGF0ZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NVmFsaWRpdHlTdGF0
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZBTElESVRZX1NUQVRFX0dFVF9QUklWQVRFKG9i
amVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZhbGlk
aXR5U3RhdGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0
KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmFs
aWRpdHlfc3RhdGVfY2xhc3NfaW5pdChXZWJLaXRET01WYWxpZGl0eVN0YXRlQ2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlKSk7CisgICAgZ29iamVj
dENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfY29uc3RydWN0
b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdmFsaWRpdHlfc3Rh
dGVfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X3ZhbGlkaXR5X3N0YXRlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxVRV9N
SVNTSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ2YWx1
ZS1taXNzaW5nIiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0YXRlOnZhbHVlLW1pc3NpbmciLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBWYWxpZGl0eVN0YXRlOnZhbHVlLW1pc3Np
bmciLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFX01JU01BVENILAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ0eXBlLW1pc21hdGNoIiwKKyAgICAgICAgICAg
ICJWYWxpZGl0eVN0YXRlOnR5cGUtbWlzbWF0Y2giLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Ym9vbGVhbiBWYWxpZGl0eVN0YXRlOnR5cGUtbWlzbWF0Y2giLAorICAgICAgICAgICAgRkFMU0Us
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9QQVRURVJOX01JU01BVENILAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJwYXR0ZXJuLW1pc21hdGNoIiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0YXRlOnBh
dHRlcm4tbWlzbWF0Y2giLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBWYWxpZGl0
eVN0YXRlOnBhdHRlcm4tbWlzbWF0Y2giLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UT09fTE9ORywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAidG9vLWxvbmciLAor
ICAgICAgICAgICAgIlZhbGlkaXR5U3RhdGU6dG9vLWxvbmciLAorICAgICAgICAgICAgInJlYWQt
b25seSBnYm9vbGVhbiBWYWxpZGl0eVN0YXRlOnRvby1sb25nIiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfUkFOR0VfVU5ERVJGTE9XLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJyYW5nZS11bmRlcmZsb3ciLAorICAgICAgICAgICAgIlZhbGlkaXR5U3RhdGU6cmFu
Z2UtdW5kZXJmbG93IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gVmFsaWRpdHlT
dGF0ZTpyYW5nZS11bmRlcmZsb3ciLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SQU5HRV9PVkVSRkxP
VywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicmFuZ2Utb3Zl
cmZsb3ciLAorICAgICAgICAgICAgIlZhbGlkaXR5U3RhdGU6cmFuZ2Utb3ZlcmZsb3ciLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBWYWxpZGl0eVN0YXRlOnJhbmdlLW92ZXJmbG93
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RFUF9NSVNNQVRDSCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic3RlcC1taXNtYXRjaCIsCisgICAgICAgICAgICAi
VmFsaWRpdHlTdGF0ZTpzdGVwLW1pc21hdGNoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jv
b2xlYW4gVmFsaWRpdHlTdGF0ZTpzdGVwLW1pc21hdGNoIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QkFEX0lOUFVULAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJi
YWQtaW5wdXQiLAorICAgICAgICAgICAgIlZhbGlkaXR5U3RhdGU6YmFkLWlucHV0IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gVmFsaWRpdHlTdGF0ZTpiYWQtaW5wdXQiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9DVVNUT01fRVJST1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImN1c3RvbS1lcnJvciIsCisgICAgICAgICAgICAiVmFsaWRpdHlT
dGF0ZTpjdXN0b20tZXJyb3IiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBWYWxp
ZGl0eVN0YXRlOmN1c3RvbS1lcnJvciIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElELAorICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ2YWxpZCIsCisgICAgICAg
ICAgICAiVmFsaWRpdHlTdGF0ZTp2YWxpZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29s
ZWFuIFZhbGlkaXR5U3RhdGU6dmFsaWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3ZhbGlkaXR5X3N0YXRlX2luaXQoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogcmVxdWVzdCkKK3sK
KyAgICBXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVkFM
SURJVFlfU1RBVEVfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRE
T01WYWxpZGl0eVN0YXRlUHJpdmF0ZSgpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3ZhbGlk
aXR5X3N0YXRlX2dldF92YWx1ZV9taXNzaW5nKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnZhbHVlTWlzc2luZygpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3R5
cGVfbWlzbWF0Y2goV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19WQUxJRElUWV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OlZhbGlkaXR5U3RhdGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+dHlwZU1pc21hdGNoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcGF0dGVybl9taXNtYXRjaChX
ZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1ZBTElESVRZX1NUQVRFKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5wYXR0ZXJuTWlzbWF0Y2goKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3
ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF90b29fbG9uZyhXZWJLaXRET01WYWxpZGl0eVN0
YXRlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT50b29Mb25nKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9n
ZXRfcmFuZ2VfdW5kZXJmbG93KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPnJhbmdlVW5kZXJmbG93KCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcmFuZ2Vfb3Zl
cmZsb3coV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19WQUxJRElUWV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZhbGlk
aXR5U3RhdGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+cmFuZ2VPdmVyZmxvdygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3N0ZXBfbWlzbWF0Y2goV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WQUxJRElU
WV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZhbGlkaXR5U3RhdGUqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+c3RlcE1p
c21hdGNoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV92
YWxpZGl0eV9zdGF0ZV9nZXRfYmFkX2lucHV0KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmJhZElucHV0KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfY3VzdG9t
X2Vycm9yKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpWYWxp
ZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmN1c3RvbUVycm9yKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdmFsaWQoV2ViS2l0RE9NVmFsaWRpdHlT
dGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WQUxJRElUWV9TVEFURShz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZhbGlkaXR5U3RhdGUqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dmFsaWQoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5U3RhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0
NjE5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5U3RhdGUuaApAQCAtMCwwICsx
LDE2MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01WYWxpZGl0eVN0YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZV9oCisKKyNp
ZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUgICAgICAgICAgICAod2Via2l0
X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZBTElE
SVRZX1NUQVRFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwgV2ViS2l0RE9NVmFsaWRpdHlTdGF0
ZSkpCisjZGVmaW5lIFdFQktJVF9ET01fVkFMSURJVFlfU1RBVEVfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZ
X1NUQVRFLCBXZWJLaXRET01WYWxpZGl0eVN0YXRlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfVkFMSURJVFlfU1RBVEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19WQUxJRElUWV9TVEFURV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1ZBTElESVRZX1NUQVRFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwgV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01WYWxpZGl0eVN0YXRl
IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01WYWxpZGl0eVN0YXRlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdmFsaWRpdHlf
c3RhdGVfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0
ZV9nZXRfdmFsdWVfbWlzc2luZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRl
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0
X3ZhbHVlX21pc3NpbmcoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdHlwZV9taXNtYXRjaDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3R5cGVfbWlzbWF0Y2goV2ViS2l0RE9NVmFsaWRpdHlT
dGF0ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcGF0
dGVybl9taXNtYXRjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3BhdHRl
cm5fbWlzbWF0Y2goV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdG9vX2xvbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3Zh
bGlkaXR5X3N0YXRlX2dldF90b29fbG9uZyhXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9yYW5nZV91bmRlcmZsb3c6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9yYW5nZV91bmRlcmZsb3coV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92YWxpZGl0
eV9zdGF0ZV9nZXRfcmFuZ2Vfb3ZlcmZsb3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0
YXRlX2dldF9yYW5nZV9vdmVyZmxvdyhXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9zdGVwX21pc21hdGNoOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfc3RlcF9taXNtYXRjaChXZWJLaXRET01W
YWxpZGl0eVN0YXRlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRl
X2dldF9iYWRfaW5wdXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQorICoK
KyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9iYWRf
aW5wdXQoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV92YWxpZGl0eV9zdGF0ZV9nZXRfY3VzdG9tX2Vycm9yOgorICogQHNlbGY6IEEgI1dlYktpdERP
TVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV92YWxp
ZGl0eV9zdGF0ZV9nZXRfY3VzdG9tX2Vycm9yKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3ZhbGlkOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVh
bgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgor
d2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdmFsaWQoV2ViS2l0RE9NVmFsaWRpdHlTdGF0
ZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01WYWxpZGl0eVN0YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjY4ZGY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVmFs
aWRpdHlTdGF0ZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1ZhbGlkaXR5U3RhdGUuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTVZhbGlkaXR5U3RhdGUqIHdyYXBWYWxpZGl0eVN0YXRlKFdlYkNvcmU6OlZhbGlkaXR5
U3RhdGUqKTsKK1dlYktpdERPTVZhbGlkaXR5U3RhdGUqIGtpdChXZWJDb3JlOjpWYWxpZGl0eVN0
YXRlKik7CitXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBjb3JlKFdlYktpdERPTVZhbGlkaXR5U3Rh
dGUqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41YTkzNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1Bs
YXliYWNrUXVhbGl0eS5jcHAKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WaWRl
b1BsYXliYWNrUXVhbGl0eS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252
ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFlf
R0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRf
RE9NX1RZUEVfVklERU9fUExBWUJBQ0tfUVVBTElUWSwgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1
YWxpdHlQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1
YWxpdHlQcml2YXRlIHsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFJlZlB0cjxXZWJD
b3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eT4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUo
TUVESUFfU09VUkNFKQorfSBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGU7CisK
KyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIGtpdChXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0
eSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFkocmV0KTsKKworICAgIHJldHVybiB3cmFw
VmlkZW9QbGF5YmFja1F1YWxpdHkob2JqKTsKK30KKworV2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1
YWxpdHkqIGNvcmUoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVh
bGl0eSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiB3cmFwVmlkZW9QbGF5YmFja1F1YWxpdHko
V2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1YWxpdHkqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1ZJREVPX1BMQVlCQUNLX1FVQUxJ
VFkoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9WSURFT19QTEFZQkFDS19RVUFMSVRZLCAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NPVVJDRSkKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSwgd2Via2l0X2RvbV92aWRlb19wbGF5YmFj
a19xdWFsaXR5LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAs
CisgICAgUFJPUF9DUkVBVElPTl9USU1FLAorICAgIFBST1BfVE9UQUxfVklERU9fRlJBTUVTLAor
ICAgIFBST1BfRFJPUFBFRF9WSURFT19GUkFNRVMsCisgICAgUFJPUF9DT1JSVVBURURfVklERU9f
RlJBTUVTLAorICAgIFBST1BfVE9UQUxfRlJBTUVfREVMQVksCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVklERU9fUExBWUJBQ0tfUVVBTElUWV9HRVRfUFJJVkFURShvYmplY3QpOworI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0Up
CisgICAgcHJpdi0+fldlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZSgpOworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Zp
ZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYgPSBXRUJLSVRfRE9NX1ZJREVPX1BMQVlC
QUNLX1FVQUxJVFkob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9DUkVBVElPTl9USU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUs
IHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfY3JlYXRpb25fdGltZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT1RBTF9WSURFT19GUkFNRVM6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNr
X3F1YWxpdHlfZ2V0X3RvdGFsX3ZpZGVvX2ZyYW1lcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9EUk9QUEVEX1ZJREVPX0ZSQU1FUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWxvbmcodmFsdWUsIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfZHJvcHBl
ZF92aWRlb19mcmFtZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09S
UlVQVEVEX1ZJREVPX0ZSQU1FUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdl
YmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfY29ycnVwdGVkX3ZpZGVvX2ZyYW1l
cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT1RBTF9GUkFNRV9ERUxB
WToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3Bs
YXliYWNrX3F1YWxpdHlfZ2V0X3RvdGFsX2ZyYW1lX2RlbGF5KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBX
ZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZJ
REVPX1BMQVlCQUNLX1FVQUxJVFlfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1YWxpdHkqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU09VUkNFKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9jbGFzc19pbml0KFdlYktpdERPTVZp
ZGVvUGxheWJhY2tRdWFsaXR5Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVZpZGVv
UGxheWJhY2tRdWFsaXR5UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3Ig
PSB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfY29uc3RydWN0b3I7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdmlk
ZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1JF
QVRJT05fVElNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJj
cmVhdGlvbi10aW1lIiwKKyAgICAgICAgICAgICJWaWRlb1BsYXliYWNrUXVhbGl0eTpjcmVhdGlv
bi10aW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBWaWRlb1BsYXliYWNrUXVh
bGl0eTpjcmVhdGlvbi10aW1lIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VC
TEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9UT1RBTF9WSURFT19GUkFNRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygK
KyAgICAgICAgICAgICJ0b3RhbC12aWRlby1mcmFtZXMiLAorICAgICAgICAgICAgIlZpZGVvUGxh
eWJhY2tRdWFsaXR5OnRvdGFsLXZpZGVvLWZyYW1lcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGd1bG9uZyBWaWRlb1BsYXliYWNrUXVhbGl0eTp0b3RhbC12aWRlby1mcmFtZXMiLAorICAgICAg
ICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0RST1BQRURfVklERU9fRlJBTUVTLAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiZHJvcHBlZC12aWRlby1mcmFtZXMiLAor
ICAgICAgICAgICAgIlZpZGVvUGxheWJhY2tRdWFsaXR5OmRyb3BwZWQtdmlkZW8tZnJhbWVzIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFZpZGVvUGxheWJhY2tRdWFsaXR5OmRyb3Bw
ZWQtdmlkZW8tZnJhbWVzIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT1JSVVBU
RURfVklERU9fRlJBTUVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAg
ICAiY29ycnVwdGVkLXZpZGVvLWZyYW1lcyIsCisgICAgICAgICAgICAiVmlkZW9QbGF5YmFja1F1
YWxpdHk6Y29ycnVwdGVkLXZpZGVvLWZyYW1lcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1
bG9uZyBWaWRlb1BsYXliYWNrUXVhbGl0eTpjb3JydXB0ZWQtdmlkZW8tZnJhbWVzIiwKKyAgICAg
ICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UT1RBTF9GUkFNRV9ERUxBWSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJ0b3RhbC1mcmFtZS1kZWxheSIsCisgICAg
ICAgICAgICAiVmlkZW9QbGF5YmFja1F1YWxpdHk6dG90YWwtZnJhbWUtZGVsYXkiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnZG91YmxlIFZpZGVvUGxheWJhY2tRdWFsaXR5OnRvdGFsLWZyYW1l
LWRlbGF5IiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfaW5pdChXZWJLaXRET01WaWRlb1BsYXliYWNr
UXVhbGl0eSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFlfR0VUX1BSSVZB
VEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0
eVByaXZhdGUoKTsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxp
dHlfZ2V0X2NyZWF0aW9uX3RpbWUoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19W
SURFT19QTEFZQkFDS19RVUFMSVRZKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1BsYXli
YWNrUXVhbGl0eSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3Vs
dCA9IGl0ZW0tPmNyZWF0aW9uVGltZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJNZWRpYSBTb3VyY2UiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNl
bmRpZiAvKiBFTkFCTEUoTUVESUFfU09VUkNFKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV92
aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF90b3RhbF92aWRlb19mcmFtZXMoV2ViS2l0RE9NVmlk
ZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYpCit7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WSURFT19QTEFZQkFDS19RVUFMSVRZKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+dG90YWxWaWRlb0ZyYW1lcygpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJNZWRpYSBTb3VyY2UiKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9TT1VSQ0UpICov
Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2Ryb3Bw
ZWRfdmlkZW9fZnJhbWVzKFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBzZWxmKQorewor
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9f
UExBWUJBQ0tfUVVBTElUWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1
YWxpdHkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPmRyb3BwZWRWaWRlb0ZyYW1lcygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJNZWRpYSBTb3VyY2UiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2Vu
ZGlmIC8qIEVOQUJMRShNRURJQV9TT1VSQ0UpICovCit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3Zp
ZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2NvcnJ1cHRlZF92aWRlb19mcmFtZXMoV2ViS2l0RE9N
VmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYpCit7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WSURFT19QTEFZQkFDS19RVUFMSVRZKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+Y29ycnVwdGVkVmlkZW9GcmFtZXMo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgU291cmNlIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU09V
UkNFKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9n
ZXRfdG90YWxfZnJhbWVfZGVsYXkoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19W
SURFT19QTEFZQkFDS19RVUFMSVRZKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1BsYXli
YWNrUXVhbGl0eSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3Vs
dCA9IGl0ZW0tPnRvdGFsRnJhbWVEZWxheSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJNZWRpYSBTb3VyY2UiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsK
KyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU09VUkNFKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVZpZGVvUGxheWJhY2tRdWFsaXR5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzYmE3MWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVmlkZW9QbGF5YmFj
a1F1YWxpdHlfaAorI2RlZmluZSBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eV9oCisKKyNp
ZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVklERU9fUExBWUJBQ0tfUVVBTElUWSAgICAgICAgICAg
ICh3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9WSURFT19QTEFZQkFDS19RVUFMSVRZKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9WSURFT19QTEFZQkFD
S19RVUFMSVRZLCBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSkpCisjZGVmaW5lIFdFQktJ
VF9ET01fVklERU9fUExBWUJBQ0tfUVVBTElUWV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVklERU9fUExBWUJBQ0tfUVVB
TElUWSwgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19WSURFT19QTEFZQkFDS19RVUFMSVRZKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9WSURFT19QTEFZQkFDS19RVUFM
SVRZKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19WSURFT19QTEFZQkFDS19RVUFMSVRZX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9WSURFT19QTEFZQkFDS19RVUFMSVRZKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9WSURFT19QTEFZ
QkFDS19RVUFMSVRZX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9WSURFT19QTEFZQkFDS19RVUFMSVRZLCBXZWJLaXRET01W
aWRlb1BsYXliYWNrUXVhbGl0eUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01WaWRlb1BsYXli
YWNrUXVhbGl0eSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlDbGFzcyB7CisgICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF90eXBlKHZvaWQpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfY3JlYXRpb25fdGltZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eQorICoKKyAqIFJldHVybnM6
IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2RvdWJsZQord2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF9jcmVhdGlvbl90
aW1lKFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X3RvdGFsX3ZpZGVvX2ZyYW1lczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eQorICoKKyAqIFJldHVybnM6
IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
dWxvbmcKK3dlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfdG90YWxfdmlkZW9f
ZnJhbWVzKFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2Ryb3BwZWRfdmlkZW9fZnJhbWVz
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5CisgKgorICogUmV0
dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGd1bG9uZword2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF9kcm9wcGVk
X3ZpZGVvX2ZyYW1lcyhXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF9jb3JydXB0ZWRfdmlk
ZW9fZnJhbWVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5Cisg
KgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dl
dF9jb3JydXB0ZWRfdmlkZW9fZnJhbWVzKFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X3Rv
dGFsX2ZyYW1lX2RlbGF5OgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFs
aXR5CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1
YWxpdHlfZ2V0X3RvdGFsX2ZyYW1lX2RlbGF5KFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5
KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5X2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZp
ZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI4ZGNlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFs
aXR5UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvVmlkZW9QbGF5YmFja1F1YWxpdHkuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkuaD4KKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiB3cmFw
VmlkZW9QbGF5YmFja1F1YWxpdHkoV2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1YWxpdHkqKTsKK1dl
YktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBraXQoV2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1
YWxpdHkqKTsKK1dlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5KiBjb3JlKFdlYktpdERPTVZp
ZGVvUGxheWJhY2tRdWFsaXR5Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IEVOQUJMRShNRURJQV9TT1VSQ0UpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01WaWRlb1BsYXli
YWNrUXVhbGl0eVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVmlkZW9UcmFjay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWFiOGQ0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFjay5jcHAKQEAgLTAsMCAr
MSwzMDEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WaWRlb1RyYWNrLmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlLmgiCisjaW5j
bHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9WSURFT19UUkFDS19H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9WSURFT19UUkFDSywgV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrPiBjb3JlT2JqZWN0OworI2Vu
ZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30gV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGU7
CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01WaWRlb1RyYWNrKiBraXQoV2ViQ29yZTo6VmlkZW9UcmFjayogb2JqKQoreworICAgIGlm
ICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01P
YmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1ZJREVPX1RS
QUNLKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFZpZGVvVHJhY2sob2JqKTsKK30KKworV2ViQ29y
ZTo6VmlkZW9UcmFjayogY29yZShXZWJLaXRET01WaWRlb1RyYWNrKiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFjayo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVZp
ZGVvVHJhY2sqIHdyYXBWaWRlb1RyYWNrKFdlYkNvcmU6OlZpZGVvVHJhY2sqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1ZJREVP
X1RSQUNLKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0ssICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NVmlkZW9UcmFjaywgd2Via2l0X2RvbV92aWRlb190cmFjaywgV0VCS0lUX0RPTV9UWVBFX09C
SkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfSUQsCisgICAgUFJPUF9LSU5E
LAorICAgIFBST1BfTEFCRUwsCisgICAgUFJPUF9MQU5HVUFHRSwKKyAgICBQUk9QX1NFTEVDVEVE
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92aWRlb190cmFja19maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1ZJREVPX1RSQUNLX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcHJpdi0+
fldlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV92aWRlb190cmFja19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYgPSBXRUJLSVRfRE9NX1ZJ
REVPX1RSQUNLKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfU0VMRUNURUQ6CisgICAgICAgIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfc2V0X3NlbGVj
dGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZiA9IFdFQktJVF9ET01fVklERU9fVFJB
Q0sob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9J
RDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV92aWRlb190
cmFja19nZXRfaWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfS0lORDoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV92aWRlb190cmFj
a19nZXRfa2luZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQUJFTDoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV92aWRlb190cmFj
a19nZXRfbGFiZWwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFOR1VB
R0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdmlkZW9f
dHJhY2tfZ2V0X2xhbmd1YWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NFTEVDVEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2dldF9zZWxlY3RlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
R09iamVjdCogd2Via2l0X2RvbV92aWRlb190cmFja19jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBn
dWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29u
c3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUs
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9WSURFT19UUkFDS19HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNv
cmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1RyYWNrKj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdmlkZW9fdHJhY2tfY2xhc3NfaW5pdChXZWJLaXRET01WaWRlb1RyYWNrQ2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlKSk7CisgICAgZ29iamVjdENs
YXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZmluYWxp
emU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3ZpZGVvX3Ry
YWNrX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fdmlkZW9fdHJhY2tfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lELAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImlkIiwKKyAgICAgICAg
ICAgICJWaWRlb1RyYWNrOmlkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFZpZGVv
VHJhY2s6aWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9LSU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImtpbmQiLAorICAgICAgICAgICAgIlZpZGVvVHJhY2s6a2lu
ZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBWaWRlb1RyYWNrOmtpbmQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9MQUJFTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJsYWJlbCIsCisgICAgICAgICAgICAiVmlkZW9UcmFjazpsYWJlbCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBWaWRlb1RyYWNrOmxhYmVsIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTEFOR1VBR0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
bGFuZ3VhZ2UiLAorICAgICAgICAgICAgIlZpZGVvVHJhY2s6bGFuZ3VhZ2UiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogVmlkZW9UcmFjazpsYW5ndWFnZSIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1NFTEVDVEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAg
ICJzZWxlY3RlZCIsCisgICAgICAgICAgICAiVmlkZW9UcmFjazpzZWxlY3RlZCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBWaWRlb1RyYWNrOnNlbGVjdGVkIiwKKyAgICAgICAg
ICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfaW5pdChXZWJLaXRET01WaWRlb1Ry
YWNrKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9WSURFT19UUkFDS19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHBy
aXYpIFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2dldF9pZChXZWJLaXRET01WaWRlb1RyYWNrKiBzZWxmKQoreworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WSURFT19UUkFDSyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5pZCgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJl
dHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdl
YmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X2tpbmQoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklE
RU9fVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvVHJhY2sqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+a2luZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJh
Y2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X2xhYmVsKFdlYktpdERPTVZpZGVv
VHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1ZJREVPX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNr
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmxhYmVsKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVP
X1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV92aWRlb190cmFja19nZXRfbGFuZ3Vh
Z2UoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9fVFJBQ0soc2VsZiksIDApOworICAgIFdl
YkNvcmU6OlZpZGVvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGFuZ3VhZ2UoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
dmlkZW9fdHJhY2tfZ2V0X3NlbGVjdGVkKFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYpCit7Cisj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RS
QUNLKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFjayogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zZWxlY3RlZCgpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0sp
ICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV92aWRlb190cmFja19zZXRfc2VsZWN0ZWQoV2ViS2l0
RE9NVmlkZW9UcmFjayogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9fVFJBQ0soc2VsZikpOworICAgIFdl
YkNvcmU6OlZpZGVvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c2V0U2VsZWN0ZWQodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2suaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFjay5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhN2Y4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVZpZGVvVHJhY2suaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01WaWRlb1RyYWNrX2gKKyNkZWZpbmUgV2ViS2l0
RE9NVmlkZW9UcmFja19oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0sg
ICAgICAgICAgICAod2Via2l0X2RvbV92aWRlb190cmFja19nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1ZJREVPX1RSQUNLKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDSywgV2ViS2l0RE9NVmlk
ZW9UcmFjaykpCisjZGVmaW5lIFdFQktJVF9ET01fVklERU9fVFJBQ0tfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZJREVP
X1RSQUNLLCBXZWJLaXRET01WaWRlb1RyYWNrQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
VklERU9fVFJBQ0sob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19W
SURFT19UUkFDS19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0spKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVP
X1RSQUNLX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDSywgV2ViS2l0RE9NVmlkZW9UcmFja0NsYXNzKSkK
Kworc3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNrIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFy
ZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNrQ2xhc3Mgewor
ICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkg
R1R5cGUKK3dlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV92aWRlb190cmFja19nZXRfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlk
ZW9UcmFjaworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV92aWRlb190cmFja19nZXRf
aWQoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92aWRl
b190cmFja19nZXRfa2luZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1RyYWNrCisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9raW5kKFdlYktpdERP
TVZpZGVvVHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0
X2xhYmVsOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2sKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X2xhYmVsKFdlYktpdERPTVZpZGVvVHJh
Y2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X2xhbmd1YWdl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X2xhbmd1YWdlKFdlYktpdERPTVZpZGVvVHJhY2sq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X3NlbGVjdGVkOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV92aWRlb190cmFja19nZXRfc2VsZWN0ZWQoV2ViS2l0RE9NVmlkZW9UcmFj
ayogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92aWRlb190cmFja19zZXRfc2VsZWN0ZWQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlkZW9UcmFjaworICogQHZhbHVlOiBBICNnYm9vbGVh
bgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3ZpZGVvX3RyYWNrX3NldF9zZWxlY3RlZChXZWJLaXRET01WaWRlb1RyYWNrKiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01WaWRlb1RyYWNrX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrTGlz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3NWQ4ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QuY3BwCkBAIC0wLDAgKzEsMjg0IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09i
amVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVZpZGVvVHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9WSURFT19UUkFDS19MSVNUX0dFVF9QUklWQVRFKG9iaikgR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLX0xJ
U1QsIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdD4gY29yZU9iamVjdDsKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU9fVFJBQ0spCit9IFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZTsK
KworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTVZpZGVvVHJhY2tMaXN0KiBraXQoV2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqIG9iaikKK3sK
KyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9W
SURFT19UUkFDS19MSVNUKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFZpZGVvVHJhY2tMaXN0KG9i
aik7Cit9CisKK1dlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBjb3JlKFdlYktpdERPTVZpZGVvVHJh
Y2tMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VmlkZW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9i
amVjdCkgOiAwOworfQorCitXZWJLaXRET01WaWRlb1RyYWNrTGlzdCogd3JhcFZpZGVvVHJhY2tM
aXN0KFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9WSURFT19UUkFDS19MSVNUKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0tfTElTVCwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
dmlkZW9fdHJhY2tfbGlzdF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VmlkZW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAgVU5V
U0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19U
UkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9h
ZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNF
RF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgIFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAg
ICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7Cisg
ICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5k
aXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9kaXNwYXRjaF9ldmVu
dDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV92aWRlb190cmFj
a19saXN0X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsK
K30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QsIHdl
YmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBM
RU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5H
VEgsCisgICAgUFJPUF9TRUxFQ1RFRF9JTkRFWCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdmlkZW9fdHJhY2tfbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2Vi
S2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9WSURFT19UUkFD
S19MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsK
KyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcHJpdi0+fldlYktpdERPTVZpZGVv
VHJhY2tMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdmlkZW9f
dHJhY2tfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHNlbGYgPSBXRUJLSVRfRE9NX1ZJREVP
X1RSQUNLX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9zZWxlY3RlZF9pbmRleChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV92aWRlb190cmFj
a19saXN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdmlkZW9fdHJhY2tf
bGlzdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZJREVP
X1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVChv
YmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92aWRl
b190cmFja19saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RDbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVj
dENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlKSk7CisgICAgZ29i
amVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9jb25z
dHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV92aWRlb190
cmFja19saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5n
dGgiLAorICAgICAgICAgICAgIlZpZGVvVHJhY2tMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGd1bG9uZyBWaWRlb1RyYWNrTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgMCwg
R19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NFTEVDVEVEX0lOREVYLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9u
ZygKKyAgICAgICAgICAgICJzZWxlY3RlZC1pbmRleCIsCisgICAgICAgICAgICAiVmlkZW9UcmFj
a0xpc3Q6c2VsZWN0ZWQtaW5kZXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBWaWRl
b1RyYWNrTGlzdDpzZWxlY3RlZC1pbmRleCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFY
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9pbml0KFdlYktpdERPTVZpZGVv
VHJhY2tMaXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fVklERU9fVFJBQ0tfTElTVF9HRVRfUFJJVkFURShyZXF1ZXN0
KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZSgpOworfQor
CitXZWJLaXRET01WaWRlb1RyYWNrKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfaXRlbShX
ZWJLaXRET01WaWRlb1RyYWNrTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WSURFT19UUkFDS19MSVNU
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmlkZW9UcmFjaz4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU9fVFJBQ0spICovCit9CisKK1dlYktpdERPTVZpZGVvVHJhY2sqIHdlYmtpdF9kb21fdmlkZW9f
dHJhY2tfbGlzdF9nZXRfdHJhY2tfYnlfaWQoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHNlbGYs
IGNvbnN0IGdjaGFyKiBpZCkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVklERU9fVFJBQ0tfTElTVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoaWQsIDApOworICAgIFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZElkID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KGlkKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmlkZW9UcmFjaz4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldFRyYWNrQnlJZChjb252ZXJ0ZWRJZCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21f
dmlkZW9fdHJhY2tfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBzZWxm
KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19W
SURFT19UUkFDS19MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVu
Z3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfc2Vs
ZWN0ZWRfaW5kZXgoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLX0xJU1Qo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNlbGVjdGVkSW5kZXgoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tM
aXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI5N2QwMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QuaApAQCAtMCwwICsxLDk5IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVZpZGVvVHJhY2tM
aXN0X2gKKyNkZWZpbmUgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RfaAorCisjaWZkZWYgV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLX0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV92aWRl
b190cmFja19saXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVklERU9fVFJBQ0tf
TElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0tfTElTVCwgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3Qp
KQorI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RS
QUNLX0xJU1QsIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfVklERU9fVFJBQ0tfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0tfTElTVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfVklERU9fVFJBQ0tfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0tfTElTVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fVklERU9fVFJBQ0tfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJB
Q0tfTElTVCwgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0
RE9NVmlkZW9UcmFja0xpc3QgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVZpZGVvVHJhY2tMaXN0Q2xhc3MgeworICAgIFdlYktp
dERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRl
b1RyYWNrTGlzdAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTVZpZGVvVHJhY2sKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVmlkZW9UcmFjayoKK3dlYmtpdF9kb21fdmlk
ZW9fdHJhY2tfbGlzdF9pdGVtKFdlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBzZWxmLCBndWxvbmcg
aW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfdHJhY2tf
YnlfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QKKyAqIEBpZDogQSAj
Z2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVZpZGVv
VHJhY2sKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NVmlkZW9UcmFjayoKK3dlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfdHJhY2tfYnlf
aWQoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBpZCk7CisKKy8q
KgorICogd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9sZW5ndGg6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRf
ZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01WaWRlb1RyYWNrTGlzdCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9zZWxlY3Rl
ZF9pbmRleDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1RyYWNrTGlzdAorICoKKyAqIFJl
dHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdsb25nCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X3NlbGVjdGVkX2luZGV4
KFdlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVZp
ZGVvVHJhY2tMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjUwZWYzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tM
aXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvVmlk
ZW9UcmFja0xpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVmlkZW9UcmFja0xp
c3QuaD4KKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2Vi
S2l0RE9NVmlkZW9UcmFja0xpc3QqIHdyYXBWaWRlb1RyYWNrTGlzdChXZWJDb3JlOjpWaWRlb1Ry
YWNrTGlzdCopOworV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIGtpdChXZWJDb3JlOjpWaWRlb1Ry
YWNrTGlzdCopOworV2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqIGNvcmUoV2ViS2l0RE9NVmlkZW9U
cmFja0xpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPX1RSQUNLKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9U
cmFja1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzkxMDVm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
VmlkZW9UcmFja1ByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZGVvVHJhY2suaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NVmlkZW9UcmFjay5oPgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01WaWRlb1RyYWNrKiB3cmFwVmlkZW9UcmFjayhXZWJDb3Jl
OjpWaWRlb1RyYWNrKik7CitXZWJLaXRET01WaWRlb1RyYWNrKiBraXQoV2ViQ29yZTo6VmlkZW9U
cmFjayopOworV2ViQ29yZTo6VmlkZW9UcmFjayogY29yZShXZWJLaXRET01WaWRlb1RyYWNrKik7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykg
Ki8KKworI2VuZGlmIC8qIFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViQW5pbWF0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmY4ZDI3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01XZWJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
V2ViQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XZWJBbmltYXRpb25Q
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9XRUJfQU5JTUFUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1dFQl9BTklNQVRJT04sIFdlYktpdERPTVdlYkFuaW1h
dGlvblByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XZWJBbmltYXRpb25Qcml2
YXRlIHsKKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgUmVmUHRyPFdlYkNvcmU6Oldl
YkFuaW1hdGlvbj4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMp
Cit9IFdlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGU7CisKKyNpZiBFTkFCTEUoV0VCX0FOSU1B
VElPTlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01XZWJBbmltYXRpb24qIGtp
dChXZWJDb3JlOjpXZWJBbmltYXRpb24qIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9XRUJfQU5JTUFUSU9OKHJldCk7CisKKyAg
ICByZXR1cm4gd3JhcFdlYkFuaW1hdGlvbihvYmopOworfQorCitXZWJDb3JlOjpXZWJBbmltYXRp
b24qIGNvcmUoV2ViS2l0RE9NV2ViQW5pbWF0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViQW5pbWF0aW9uKj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NV2ViQW5pbWF0
aW9uKiB3cmFwV2ViQW5pbWF0aW9uKFdlYkNvcmU6OldlYkFuaW1hdGlvbiogY29yZU9iamVjdCkK
K3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fV0VCX0FO
SU1BVElPTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1dFQl9BTklNQVRJT04sICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0RE9NV2ViQW5pbWF0aW9uLCB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb24sIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0VGRkVDVCwK
KyAgICBQUk9QX1RJTUVMSU5FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJfYW5p
bWF0aW9uX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01XZWJBbmlt
YXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9XRUJfQU5JTUFUSU9OX0dFVF9QUklWQVRF
KG9iamVjdCk7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FOSU1BVElPTlMpCisgICAgcHJpdi0+fldlYktpdERPTVdlYkFuaW1hdGlvblByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93
ZWJfYW5pbWF0aW9uX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVdl
YkFuaW1hdGlvbiogc2VsZiA9IFdFQktJVF9ET01fV0VCX0FOSU1BVElPTihvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0VGRkVDVDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZ2V0X2Vm
ZmVjdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9USU1FTElORToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25f
Z2V0X3RpbWVsaW5lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJr
aXRfZG9tX3dlYl9hbmltYXRpb25fY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3Bl
cnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV93ZWJfYW5pbWF0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVj
dFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFdFQl9B
TklNQVRJT05TKQorICAgIFdlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1dFQl9BTklNQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViQW5pbWF0aW9uKj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BTklNQVRJT05TKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fd2ViX2FuaW1hdGlvbl9jbGFzc19pbml0KFdlYktpdERPTVdlYkFuaW1hdGlvbkNsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlKSk7CisgICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fd2ViX2FuaW1hdGlvbl9jb25z
dHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV93ZWJfYW5p
bWF0aW9uX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV93ZWJfYW5pbWF0aW9uX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9FRkZF
Q1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZWZmZWN0IiwK
KyAgICAgICAgICAgICJXZWJBbmltYXRpb246ZWZmZWN0IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0KiBXZWJBbmltYXRpb246ZWZmZWN0IiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fRUZGRUNULAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVElNRUxJTkUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidGltZWxpbmUiLAorICAgICAg
ICAgICAgIldlYkFuaW1hdGlvbjp0aW1lbGluZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTUFuaW1hdGlvblRpbWVsaW5lKiBXZWJBbmltYXRpb246dGltZWxpbmUiLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9USU1FTElORSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Vi
X2FuaW1hdGlvbl9pbml0KFdlYktpdERPTVdlYkFuaW1hdGlvbiogcmVxdWVzdCkKK3sKKyAgICBX
ZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9XRUJfQU5JTUFU
SU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NV2ViQW5p
bWF0aW9uUHJpdmF0ZSgpOworfQorCitXZWJLaXRET01BbmltYXRpb25FZmZlY3QqIHdlYmtpdF9k
b21fd2ViX2FuaW1hdGlvbl9nZXRfZWZmZWN0KFdlYktpdERPTVdlYkFuaW1hdGlvbiogc2VsZikK
K3sKKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
V0VCX0FOSU1BVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2ViQW5pbWF0aW9uKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpBbmltYXRpb25FZmZl
Y3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5lZmZlY3QoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIEFu
aW1hdGlvbnMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShXRUJfQU5JTUFUSU9O
UykgKi8KK30KKworV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUqIHdlYmtpdF9kb21fd2ViX2Fu
aW1hdGlvbl9nZXRfdGltZWxpbmUoV2ViS2l0RE9NV2ViQW5pbWF0aW9uKiBzZWxmKQoreworI2lm
IEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJfQU5J
TUFUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXZWJBbmltYXRpb24qIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dGltZWxpbmUoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIEFuaW1h
dGlvbnMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShXRUJfQU5JTUFUSU9OUykg
Ki8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViQW5pbWF0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzYWYwZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NV2ViQW5pbWF0aW9uLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01XZWJBbmltYXRpb25f
aAorI2RlZmluZSBXZWJLaXRET01XZWJBbmltYXRpb25faAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX1dFQl9BTklNQVRJT04gICAgICAgICAgICAod2Via2l0X2RvbV93ZWJfYW5pbWF0aW9u
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fV0VCX0FOSU1BVElPTihvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
V0VCX0FOSU1BVElPTiwgV2ViS2l0RE9NV2ViQW5pbWF0aW9uKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9XRUJfQU5JTUFUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9XRUJfQU5JTUFUSU9OLCBXZWJLaXRET01XZWJBbmlt
YXRpb25DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19XRUJfQU5JTUFUSU9OKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9X
RUJfQU5JTUFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19XRUJfQU5JTUFUSU9OX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9XRUJfQU5JTUFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XRUJfQU5JTUFUSU9OX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01f
VFlQRV9XRUJfQU5JTUFUSU9OLCBXZWJLaXRET01XZWJBbmltYXRpb25DbGFzcykpCisKK3N0cnVj
dCBfV2ViS2l0RE9NV2ViQW5pbWF0aW9uIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01XZWJBbmltYXRpb25DbGFzcyB7CisgICAg
V2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV93ZWJfYW5pbWF0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdl
YmtpdF9kb21fd2ViX2FuaW1hdGlvbl9nZXRfZWZmZWN0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVdlYkFuaW1hdGlvbgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NQW5pbWF0aW9uRWZmZWN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdCoKK3dlYmtpdF9kb21fd2ViX2FuaW1hdGlv
bl9nZXRfZWZmZWN0KFdlYktpdERPTVdlYkFuaW1hdGlvbiogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV93ZWJfYW5pbWF0aW9uX2dldF90aW1lbGluZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01XZWJBbmltYXRpb24KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTUFuaW1hdGlvblRpbWVsaW5lCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lKgord2Via2l0X2RvbV93ZWJfYW5p
bWF0aW9uX2dldF90aW1lbGluZShXZWJLaXRET01XZWJBbmltYXRpb24qIHNlbGYpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5k
aWYgLyogV2ViS2l0RE9NV2ViQW5pbWF0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViQW5p
bWF0aW9uUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4MTUyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
V2ViQW5pbWF0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9XZWJBbmltYXRpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NV2ViQW5pbWF0
aW9uLmg+CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTVdlYkFuaW1hdGlvbiogd3JhcFdlYkFuaW1hdGlvbihXZWJDb3JlOjpXZWJBbmlt
YXRpb24qKTsKK1dlYktpdERPTVdlYkFuaW1hdGlvbioga2l0KFdlYkNvcmU6OldlYkFuaW1hdGlv
biopOworV2ViQ29yZTo6V2ViQW5pbWF0aW9uKiBjb3JlKFdlYktpdERPTVdlYkFuaW1hdGlvbiop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX0FOSU1BVElP
TlMpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmQyMzFlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuY3BwCkBAIC0wLDAgKzEsMjU5IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdP
YmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJ
VF9OQU1FRF9GTE9XX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KG9iaiwgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FRF9GTE9XLCBXZWJLaXRET01XZWJLaXRO
YW1lZEZsb3dQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2ViS2l0TmFtZWRG
bG93UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdz4gY29yZU9i
amVjdDsKK30gV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTVdlYktpdE5hbWVkRmxvdyoga2l0KFdlYkNvcmU6OldlYktpdE5h
bWVkRmxvdyogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XKHJldCk7CisKKyAgICByZXR1cm4gd3Jh
cFdlYktpdE5hbWVkRmxvdyhvYmopOworfQorCitXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGNv
cmUoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NV2ViS2l0TmFt
ZWRGbG93KiB3cmFwV2ViS2l0TmFtZWRGbG93KFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fV0VCS0lUX05BTUVEX0ZMT1coZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9XRUJLSVRf
TkFNRURfRkxPVywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fd2Via2l0
X25hbWVkX2Zsb3dfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpF
dmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0
Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fd2Via2l0
X25hbWVkX2Zsb3dfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fd2Via2l0X25hbWVkX2Zsb3dfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6
R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdl
dElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lZF9mbG93X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRf
bGlzdGVuZXIgPSB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2FkZF9ldmVudF9saXN0ZW5l
cjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV93ZWJraXRf
bmFtZWRfZmxvd19yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYktpdERPTVdlYktpdE5hbWVkRmxvdywgd2Via2l0X2RvbV93ZWJraXRfbmFtZWRf
ZmxvdywgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfT1ZFUlNFVCwK
KyAgICBQUk9QX0ZJUlNUX0VNUFRZX1JFR0lPTl9JTkRFWCwKK307CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQorewor
ICAgIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dF
QktJVF9OQU1FRF9GTE9XX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+
V2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYg
PSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfbmFtZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PVkVSU0VUOgorICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9vdmVy
c2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZJUlNUX0VNUFRZX1JF
R0lPTl9JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV93
ZWJraXRfbmFtZWRfZmxvd19nZXRfZmlyc3RfZW1wdHlfcmVnaW9uX2luZGV4KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93
X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
R09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmpl
Y3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3df
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XX0dFVF9QUklWQVRFKG9i
amVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYktp
dE5hbWVkRmxvdyo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmpl
Y3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93
ZWJraXRfbmFtZWRfZmxvd19jbGFzc19pbml0KFdlYktpdERPTVdlYktpdE5hbWVkRmxvd0NsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlKSk7Cisg
ICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zs
b3dfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21f
d2Via2l0X25hbWVkX2Zsb3dfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9wcm9wZXJ0eTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgIm5hbWUiLAorICAgICAgICAgICAgIldlYktpdE5hbWVkRmxvdzpuYW1lIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2NoYXIqIFdlYktpdE5hbWVkRmxvdzpuYW1lIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfT1ZFUlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAib3ZlcnNldCIsCisgICAgICAgICAgICAiV2ViS2l0TmFtZWRGbG93Om92ZXJzZXQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBXZWJLaXROYW1lZEZsb3c6b3ZlcnNldCIsCisg
ICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0ZJUlNUX0VNUFRZX1JFR0lPTl9JTkRFWCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiZmlyc3QtZW1wdHktcmVnaW9uLWluZGV4IiwK
KyAgICAgICAgICAgICJXZWJLaXROYW1lZEZsb3c6Zmlyc3QtZW1wdHktcmVnaW9uLWluZGV4IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgV2ViS2l0TmFtZWRGbG93OmZpcnN0LWVtcHR5
LXJlZ2lvbi1pbmRleCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfaW5pdChXZWJLaXRET01XZWJLaXROYW1lZEZsb3cq
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fV0VCS0lUX05BTUVEX0ZMT1dfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAg
bmV3IChwcml2KSBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlKCk7Cit9CisKK1dlYktp
dERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9yZWdpb25zX2J5
X2NvbnRlbnQoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBj
b250ZW50Tm9kZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfTkFNRURfRkxP
VyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RF
KGNvbnRlbnROb2RlKSwgMCk7CisgICAgV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZENvbnRlbnRO
b2RlID0gV2ViS2l0Ojpjb3JlKGNvbnRlbnROb2RlKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9k
ZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRSZWdpb25zQnlDb250
ZW50KGNvbnZlcnRlZENvbnRlbnROb2RlKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV93ZWJr
aXRfbmFtZWRfZmxvd19nZXRfcmVnaW9ucyhXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX05BTUVEX0ZMT1coc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5nZXRSZWdpb25zKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21fd2Via2l0
X25hbWVkX2Zsb3dfZ2V0X2NvbnRlbnQoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQktJVF9OQU1FRF9GTE9XKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+Z2V0Q29udGVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dl
dF9uYW1lKFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19XRUJLSVRfTkFNRURfRkxPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2Vi
S2l0TmFtZWRGbG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfb3ZlcnNl
dChXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfV0VCS0lUX05BTUVEX0ZMT1coc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpXZWJL
aXROYW1lZEZsb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+b3ZlcnNldCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdl
YmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X2ZpcnN0X2VtcHR5X3JlZ2lvbl9pbmRleChX
ZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfV0VCS0lUX05BTUVEX0ZMT1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OldlYktpdE5hbWVk
RmxvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVt
LT5maXJzdEVtcHR5UmVnaW9uSW5kZXgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVdlYktpdE5hbWVkRmxvdy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjQ0N2QxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01XZWJLaXROYW1lZEZsb3df
aAorI2RlZmluZSBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dfaAorCisjaWZkZWYgV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX1dFQktJVF9OQU1FRF9GTE9XICAgICAgICAgICAgKHdlYmtpdF9kb21fd2Via2l0
X25hbWVkX2Zsb3dfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XRUJLSVRfTkFNRURf
RkxPVyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVEX0ZMT1csIFdlYktpdERPTVdlYktpdE5hbWVkRmxv
dykpCisjZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX05BTUVEX0ZMT1dfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1dFQktJ
VF9OQU1FRF9GTE9XLCBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19XRUJLSVRfTkFNRURfRkxPVyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVEX0ZMT1cpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1dFQktJVF9OQU1FRF9GTE9XX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFN
RURfRkxPVykpCisjZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX05BTUVEX0ZMT1dfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X1dFQktJVF9OQU1FRF9GTE9XLCBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dDbGFzcykpCisKK3N0
cnVjdCBfV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFy
ZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01XZWJLaXROYW1lZEZsb3dDbGFz
cyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfdHlwZSh2b2lkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9yZWdpb25zX2J5X2Nv
bnRlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93CisgKiBAY29udGVu
dE5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6
IEEgI1dlYktpdERPTU5vZGVMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxv
d19nZXRfcmVnaW9uc19ieV9jb250ZW50KFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZiwg
V2ViS2l0RE9NTm9kZSogY29udGVudE5vZGUpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2Via2l0
X25hbWVkX2Zsb3dfZ2V0X3JlZ2lvbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2ViS2l0TmFt
ZWRGbG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2Rl
TGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Ob2RlTGlzdCoKK3dlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X3JlZ2lvbnMoV2Vi
S2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3dlYmtp
dF9uYW1lZF9mbG93X2dldF9jb250ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdE5h
bWVkRmxvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9k
ZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9jb250ZW50KFdl
YktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJr
aXRfbmFtZWRfZmxvd19nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XZWJLaXROYW1l
ZEZsb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3df
Z2V0X25hbWUoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9vdmVyc2V0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTVdlYktpdE5hbWVkRmxvdworICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lZF9mbG93X2dldF9vdmVyc2V0KFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfZmlyc3Rf
ZW1wdHlfcmVnaW9uX2luZGV4OgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdE5hbWVkRmxv
dworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9m
aXJzdF9lbXB0eV9yZWdpb25faW5kZXgoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd19oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTBhZTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVdlYktp
dE5hbWVkRmxvd1ByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2
YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvV2ViS2l0TmFtZWRGbG93Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTVdlYktpdE5hbWVkRmxvdy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTVdlYktpdE5hbWVkRmxvdyogd3JhcFdlYktpdE5hbWVkRmxvdyhXZWJDb3Jl
OjpXZWJLaXROYW1lZEZsb3cqKTsKK1dlYktpdERPTVdlYktpdE5hbWVkRmxvdyoga2l0KFdlYkNv
cmU6OldlYktpdE5hbWVkRmxvdyopOworV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBjb3JlKFdl
YktpdERPTVdlYktpdE5hbWVkRmxvdyopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NV2ViS2l0TmFtZXNwYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE4NDViCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01XZWJLaXROYW1lc3BhY2UuY3BwCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NV2ViS2l0TmFtZXNwYWNlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUu
aD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX05BTUVTUEFDRV9HRVRfUFJJ
VkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQ
RV9XRUJLSVRfTkFNRVNQQUNFLCBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0ZSB7CisjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBSZWZQdHI8V2ViQ29yZTo6V2ViS2l0TmFt
ZXNwYWNlPiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExF
UlMpCit9IFdlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGU7CisKKyNpZiBFTkFCTEUoVVNF
Ul9NRVNTQUdFX0hBTkRMRVJTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NV2Vi
S2l0TmFtZXNwYWNlKiBraXQoV2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fV0VCS0lU
X05BTUVTUEFDRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBXZWJLaXROYW1lc3BhY2Uob2JqKTsK
K30KKworV2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKiBjb3JlKFdlYktpdERPTVdlYktpdE5hbWVz
cGFjZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OldlYktpdE5hbWVzcGFjZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVdlYktpdE5hbWVzcGFjZSogd3JhcFdlYktpdE5hbWVz
cGFjZShXZWJDb3JlOjpXZWJLaXROYW1lc3BhY2UqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1dFQktJVF9OQU1FU1BBQ0UoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRVNQQUNFLCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01XZWJLaXROYW1lc3BhY2UsIHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZSwgV0VC
S0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTUVT
U0FHRV9IQU5ETEVSUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Via2l0X25hbWVz
cGFjZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NV2ViS2l0TmFt
ZXNwYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fV0VCS0lUX05BTUVTUEFDRV9HRVRfUFJJ
VkFURShvYmplY3QpOworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2Vu
ZGlmIC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgcHJpdi0+fldlYktpdERP
TVdlYktpdE5hbWVzcGFjZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lc3BhY2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZSogc2VsZiA9IFdFQktJVF9E
T01fV0VCS0lUX05BTUVTUEFDRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX01FU1NBR0VfSEFORExFUlM6CisgICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2dldF9tZXNzYWdlX2hhbmRs
ZXJzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3dl
YmtpdF9uYW1lc3BhY2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Cit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV93ZWJr
aXRfbmFtZXNwYWNlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFVTRVJfTUVT
U0FHRV9IQU5ETEVSUykKKyAgICBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAg
cHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYktpdE5hbWVzcGFjZSo+
KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlm
IC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgcmV0dXJuIG9iamVjdDsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2NsYXNzX2luaXQoV2Vi
S2l0RE9NV2ViS2l0TmFtZXNwYWNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVdl
YktpdE5hbWVzcGFjZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0g
d2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfZmluYWxpemU7CisgICAg
Z29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3BhY2Vf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FU1NBR0VfSEFORExFUlMsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibWVzc2FnZS1oYW5kbGVycyIs
CisgICAgICAgICAgICAiV2ViS2l0TmFtZXNwYWNlOm1lc3NhZ2UtaGFuZGxlcnMiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiBX
ZWJLaXROYW1lc3BhY2U6bWVzc2FnZS1oYW5kbGVycyIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Via2l0
X25hbWVzcGFjZV9pbml0KFdlYktpdERPTVdlYktpdE5hbWVzcGFjZSogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9XRUJL
SVRfTkFNRVNQQUNFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0
RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0ZSgpOworfQorCitXZWJLaXRET01Vc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlKiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfZ2V0X21lc3NhZ2Vf
aGFuZGxlcnMoV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShV
U0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX05B
TUVTUEFDRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bWVzc2FnZUhh
bmRsZXJzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlVzZXIgTWVzc2FnZSBIYW5kbGVycyIpCisgICAgcmV0dXJuIDA7CisjZW5k
aWYgLyogRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykgKi8KK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01XZWJLaXROYW1lc3BhY2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkZWU1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NV2ViS2l0TmFtZXNwYWNlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VfaAorI2RlZmlu
ZSBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X1dFQktJVF9OQU1FU1BBQ0UgICAgICAgICAgICAod2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNl
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX05BTUVTUEFDRShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfV0VCS0lUX05BTUVTUEFDRSwgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQQUNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRVNQQUNFLCBX
ZWJLaXRET01XZWJLaXROYW1lc3BhY2VDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19XRUJL
SVRfTkFNRVNQQUNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRVNQQUNFKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19XRUJLSVRfTkFNRVNQQUNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRVNQQUNFKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQQUNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRVNQQUNFLCBX
ZWJLaXRET01XZWJLaXROYW1lc3BhY2VDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NV2ViS2l0
TmFtZXNwYWNlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01XZWJLaXROYW1lc3BhY2VDbGFzcyB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rv
bV93ZWJraXRfbmFtZXNwYWNlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
d2Via2l0X25hbWVzcGFjZV9nZXRfbWVzc2FnZV9oYW5kbGVyczoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01XZWJLaXROYW1lc3BhY2UKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZSoKK3dlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9nZXRfbWVzc2FnZV9oYW5kbGVy
cyhXZWJLaXRET01XZWJLaXROYW1lc3BhY2UqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
V2ViS2l0TmFtZXNwYWNlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTNiOGZjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0
TmFtZXNwYWNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9XZWJLaXROYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NV2Vi
S2l0TmFtZXNwYWNlLmg+CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKworbmFt
ZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01XZWJLaXROYW1lc3BhY2UqIHdyYXBXZWJLaXROYW1l
c3BhY2UoV2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKik7CitXZWJLaXRET01XZWJLaXROYW1lc3Bh
Y2UqIGtpdChXZWJDb3JlOjpXZWJLaXROYW1lc3BhY2UqKTsKK1dlYkNvcmU6OldlYktpdE5hbWVz
cGFjZSogY29yZShXZWJLaXRET01XZWJLaXROYW1lc3BhY2UqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykgKi8KKworI2Vu
ZGlmIC8qIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01XZWJLaXRQb2ludC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdFBvaW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE1Nzc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01X
ZWJLaXRQb2ludC5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XZWJLaXRQ
b2ludC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01X
ZWJLaXRQb2ludFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1dFQktJVF9QT0lOVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfUE9JTlQsIFdlYktpdERP
TVdlYktpdFBvaW50UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdFBv
aW50UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OldlYktpdFBvaW50PiBjb3JlT2JqZWN0
OworfSBXZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJLaXRET01XZWJLaXRQb2ludCoga2l0KFdlYkNvcmU6OldlYktpdFBvaW50KiBvYmopCit7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
V0VCS0lUX1BPSU5UKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFdlYktpdFBvaW50KG9iaik7Cit9
CisKK1dlYkNvcmU6OldlYktpdFBvaW50KiBjb3JlKFdlYktpdERPTVdlYktpdFBvaW50KiByZXF1
ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0
UG9pbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQor
CitXZWJLaXRET01XZWJLaXRQb2ludCogd3JhcFdlYktpdFBvaW50KFdlYkNvcmU6OldlYktpdFBv
aW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9XRUJLSVRfUE9JTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9XRUJL
SVRfUE9JTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NV2ViS2l0UG9pbnQs
IHdlYmtpdF9kb21fd2Via2l0X3BvaW50LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9YLAorICAgIFBST1BfWSwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dFQktJ
VF9QT0lOVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNo
ZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERP
TVdlYktpdFBvaW50UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fd2Vi
a2l0X3BvaW50X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmID0gV0VCS0lUX0RPTV9XRUJLSVRf
UE9JTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9YOgorICAgICAgICB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9zZXRfeChzZWxmLCBnX3ZhbHVl
X2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfWToKKyAg
ICAgICAgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfc2V0X3koc2VsZiwgZ192YWx1ZV9nZXRfZmxv
YXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Via2l0
X3BvaW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVdlYktpdFBv
aW50KiBzZWxmID0gV0VCS0lUX0RPTV9XRUJLSVRfUE9JTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9YOgorICAgICAgICBnX3ZhbHVlX3NldF9m
bG9hdCh2YWx1ZSwgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3goc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFs
dWUsIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2dldF95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9jb25zdHJ1Y3RvcihHVHlw
ZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQ
YXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMp
OworCisgICAgV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9X
RUJLSVRfUE9JTlRfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0UG9pbnQqPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2NsYXNzX2luaXQoV2ViS2l0RE9NV2Vi
S2l0UG9pbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2
YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fd2Via2l0
X3BvaW50X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZG9tX3dlYmtpdF9wb2ludF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fd2Via2l0X3BvaW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2dldF9wcm9wZXJ0eTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAg
ICAgICAgICAieCIsCisgICAgICAgICAgICAiV2ViS2l0UG9pbnQ6eCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnZmxvYXQgV2ViS2l0UG9pbnQ6eCIsCisgICAgICAgICAgICAtR19NQVhGTE9B
VCwgR19NQVhGTE9BVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAg
ICAgICAgICAieSIsCisgICAgICAgICAgICAiV2ViS2l0UG9pbnQ6eSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnZmxvYXQgV2ViS2l0UG9pbnQ6eSIsCisgICAgICAgICAgICAtR19NQVhGTE9B
VCwgR19NQVhGTE9BVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9pbml0KFdlYktpdERP
TVdlYktpdFBvaW50KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVdlYktpdFBvaW50UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fV0VCS0lUX1BPSU5UX0dFVF9QUklWQVRFKHJlcXVlc3QpOwor
ICAgIG5ldyAocHJpdikgV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlKCk7Cit9CisKK2dmbG9h
dCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9nZXRfeChXZWJLaXRET01XZWJLaXRQb2ludCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfUE9JTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OldlYktpdFBvaW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdmbG9hdCByZXN1bHQgPSBpdGVtLT54KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9zZXRfeChXZWJLaXRET01XZWJLaXRQb2ludCogc2Vs
ZiwgZ2Zsb2F0IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX1BPSU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpXZWJLaXRQb2ludCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXRYKHZhbHVlKTsKK30KKworZ2Zsb2F0IHdlYmtpdF9kb21fd2Via2l0
X3BvaW50X2dldF95KFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1dFQktJVF9QT0lOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2ViS2l0
UG9pbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Zsb2F0IHJlc3VsdCA9IGl0
ZW0tPnkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fd2Via2l0
X3BvaW50X3NldF95KFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmLCBnZmxvYXQgdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfUE9JTlQoc2VsZikpOworICAgIFdlYkNvcmU6
OldlYktpdFBvaW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFko
dmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdFBvaW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktp
dFBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiZTc4MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0UG9pbnQuaApAQCAtMCwwICsxLDk1IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVdlYktpdFBvaW50
X2gKKyNkZWZpbmUgV2ViS2l0RE9NV2ViS2l0UG9pbnRfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX1dFQktJVF9QT0lOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJVF9QT0lOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfV0VC
S0lUX1BPSU5ULCBXZWJLaXRET01XZWJLaXRQb2ludCkpCisjZGVmaW5lIFdFQktJVF9ET01fV0VC
S0lUX1BPSU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfUE9JTlQsIFdlYktpdERPTVdlYktpdFBvaW50Q2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfV0VCS0lUX1BPSU5UKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfUE9J
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1dFQktJVF9QT0lOVF9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX1BP
SU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XRUJLSVRfUE9JTlRfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9Q
T0lOVCwgV2ViS2l0RE9NV2ViS2l0UG9pbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NV2Vi
S2l0UG9pbnQgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTVdlYktpdFBvaW50Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fd2Vi
a2l0X3BvaW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2Via2l0X3Bv
aW50X2dldF94OgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdFBvaW50CisgKgorICogUmV0
dXJuczogQSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdmbG9hdAord2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3goV2ViS2l0RE9NV2ViS2l0
UG9pbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X3NldF94Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdFBvaW50CisgKiBAdmFsdWU6IEEgI2dmbG9hdAor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX3dlYmtpdF9wb2ludF9zZXRfeChXZWJLaXRET01XZWJLaXRQb2ludCogc2VsZiwgZ2Zsb2F0
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9nZXRfeToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01XZWJLaXRQb2ludAorICoKKyAqIFJldHVybnM6IEEgI2dmbG9hdAor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtp
dF9kb21fd2Via2l0X3BvaW50X2dldF95KFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9zZXRfeToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01XZWJLaXRQb2ludAorICogQHZhbHVlOiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV93ZWJraXRfcG9pbnRf
c2V0X3koV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHNlbGYsIGdmbG9hdCB2YWx1ZSk7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01XZWJLaXRQb2ludF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdFBv
aW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zNWJlYWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJL
aXRQb2ludFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVdlYktpdFBvaW50UHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTVdlYktpdFBvaW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dlYktp
dFBvaW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVdlYktpdFBvaW50Lmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHdyYXBXZWJLaXRQb2lu
dChXZWJDb3JlOjpXZWJLaXRQb2ludCopOworV2ViS2l0RE9NV2ViS2l0UG9pbnQqIGtpdChXZWJD
b3JlOjpXZWJLaXRQb2ludCopOworV2ViQ29yZTo6V2ViS2l0UG9pbnQqIGNvcmUoV2ViS2l0RE9N
V2ViS2l0UG9pbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0
RE9NV2ViS2l0UG9pbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVdoZWVsRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE5OWRlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZlbnQuY3BwCkBAIC0w
LDAgKzEsMjgxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NV2hlZWxFdmVudC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktp
dERPTURPTVdpbmRvd1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NV2hl
ZWxFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NV2hlZWxFdmVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YktpdERPTVdoZWVsRXZlbnQqIGtpdChXZWJDb3JlOjpXaGVlbEV2ZW50KiBvYmopCit7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fV0hFRUxfRVZFTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2
ZW50Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpXaGVlbEV2ZW50KiBjb3JlKFdlYktpdERPTVdo
ZWVsRXZlbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpXaGVlbEV2ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NV2hlZWxFdmVudCogd3JhcFdoZWVsRXZlbnQoV2ViQ29y
ZTo6V2hlZWxFdmVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fV0hFRUxfRVZFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9XSEVFTF9FVkVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01XaGVl
bEV2ZW50LCB3ZWJraXRfZG9tX3doZWVsX2V2ZW50LCBXRUJLSVRfRE9NX1RZUEVfTU9VU0VfRVZF
TlQpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0RFTFRBX1gsCisgICAgUFJPUF9E
RUxUQV9ZLAorICAgIFBST1BfREVMVEFfWiwKKyAgICBQUk9QX0RFTFRBX01PREUsCisgICAgUFJP
UF9XSEVFTF9ERUxUQV9YLAorICAgIFBST1BfV0hFRUxfREVMVEFfWSwKKyAgICBQUk9QX1dIRUVM
X0RFTFRBLAorICAgIFBST1BfV0VCS0lUX0RJUkVDVElPTl9JTlZFUlRFRF9GUk9NX0RFVklDRSwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZiA9IFdFQktJVF9ET01f
V0hFRUxfRVZFTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9ERUxUQV9YOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtp
dF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3goc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfREVMVEFfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3
ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RFTFRBX1o6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1
ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9ERUxUQV9NT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfbW9kZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSEVFTF9ERUxUQV9YOgorICAgICAgICBnX3Zh
bHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0
YV94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dIRUVMX0RFTFRBX1k6
CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRf
Z2V0X3doZWVsX2RlbHRhX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
V0hFRUxfREVMVEE6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
d2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1dFQktJVF9ESVJFQ1RJT05fSU5WRVJURURfRlJPTV9ERVZJQ0U6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3dl
YmtpdF9kaXJlY3Rpb25faW52ZXJ0ZWRfZnJvbV9kZXZpY2Uoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93aGVlbF9ldmVudF9jbGFzc19pbml0KFdlYktpdERP
TVdoZWVsRXZlbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3Byb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0RFTFRBX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUo
CisgICAgICAgICAgICAiZGVsdGEteCIsCisgICAgICAgICAgICAiV2hlZWxFdmVudDpkZWx0YS14
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBXaGVlbEV2ZW50OmRlbHRhLXgiLAor
ICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFTFRBX1ksCisgICAg
ICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAiZGVsdGEteSIsCisgICAgICAg
ICAgICAiV2hlZWxFdmVudDpkZWx0YS15IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJs
ZSBXaGVlbEV2ZW50OmRlbHRhLXkiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERP
VUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0RFTFRBX1osCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAg
ICAgICAiZGVsdGEteiIsCisgICAgICAgICAgICAiV2hlZWxFdmVudDpkZWx0YS16IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBXaGVlbEV2ZW50OmRlbHRhLXoiLAorICAgICAgICAg
ICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFTFRBX01PREUsCisgICAgICAgIGdf
cGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJkZWx0YS1tb2RlIiwKKyAgICAgICAgICAg
ICJXaGVlbEV2ZW50OmRlbHRhLW1vZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcg
V2hlZWxFdmVudDpkZWx0YS1tb2RlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9X
SEVFTF9ERUxUQV9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ3
aGVlbC1kZWx0YS14IiwKKyAgICAgICAgICAgICJXaGVlbEV2ZW50OndoZWVsLWRlbHRhLXgiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBXaGVlbEV2ZW50OndoZWVsLWRlbHRhLXgiLAor
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSEVFTF9ERUxUQV9ZLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ3aGVlbC1kZWx0YS15IiwKKyAg
ICAgICAgICAgICJXaGVlbEV2ZW50OndoZWVsLWRlbHRhLXkiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnbG9uZyBXaGVlbEV2ZW50OndoZWVsLWRlbHRhLXkiLAorICAgICAgICAgICAgR19NSU5M
T05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9XSEVFTF9ERUxUQSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoCisgICAgICAgICAgICAid2hlZWwtZGVsdGEiLAorICAgICAgICAgICAgIldoZWVsRXZlbnQ6
d2hlZWwtZGVsdGEiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBXaGVlbEV2ZW50Ondo
ZWVsLWRlbHRhIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lU
X0RJUkVDVElPTl9JTlZFUlRFRF9GUk9NX0RFVklDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jv
b2xlYW4oCisgICAgICAgICAgICAid2Via2l0LWRpcmVjdGlvbi1pbnZlcnRlZC1mcm9tLWRldmlj
ZSIsCisgICAgICAgICAgICAiV2hlZWxFdmVudDp3ZWJraXQtZGlyZWN0aW9uLWludmVydGVkLWZy
b20tZGV2aWNlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gV2hlZWxFdmVudDp3
ZWJraXQtZGlyZWN0aW9uLWludmVydGVkLWZyb20tZGV2aWNlIiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV93aGVlbF9ldmVudF9pbml0KFdlYktpdERPTVdoZWVsRXZlbnQqIHJlcXVl
c3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21f
d2hlZWxfZXZlbnRfaW5pdF93aGVlbF9ldmVudChXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmLCBn
bG9uZyB3aGVlbERlbHRhWCwgZ2xvbmcgd2hlZWxEZWx0YVksIFdlYktpdERPTURPTVdpbmRvdyog
dmlldywgZ2xvbmcgc2NyZWVuWCwgZ2xvbmcgc2NyZWVuWSwgZ2xvbmcgY2xpZW50WCwgZ2xvbmcg
Y2xpZW50WSwgZ2Jvb2xlYW4gY3RybEtleSwgZ2Jvb2xlYW4gYWx0S2V5LCBnYm9vbGVhbiBzaGlm
dEtleSwgZ2Jvb2xlYW4gbWV0YUtleSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VW
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRP
Vyh2aWV3KSk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGNvbnZlcnRlZFZpZXcgPSBXZWJLaXQ6OmNv
cmUodmlldyk7CisgICAgaXRlbS0+aW5pdFdoZWVsRXZlbnQod2hlZWxEZWx0YVgsIHdoZWVsRGVs
dGFZLCBjb252ZXJ0ZWRWaWV3LCBzY3JlZW5YLCBzY3JlZW5ZLCBjbGllbnRYLCBjbGllbnRZLCBj
dHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5KTsKK30KKworZ2RvdWJsZSB3ZWJraXRf
ZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV94KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OldoZWVsRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJs
ZSByZXN1bHQgPSBpdGVtLT5kZWx0YVgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnZG91
YmxlIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3koV2ViS2l0RE9NV2hlZWxFdmVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XSEVFTF9FVkVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmRlbHRhWSgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeihXZWJLaXRE
T01XaGVlbEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VW
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+ZGVsdGFaKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRh
X21vZGUoV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19XSEVFTF9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+ZGVsdGFN
b2RlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV93aGVlbF9l
dmVudF9nZXRfd2hlZWxfZGVsdGFfeChXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3Vs
dCA9IGl0ZW0tPndoZWVsRGVsdGFYKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcg
d2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hlZWxfZGVsdGFfeShXZWJLaXRET01XaGVlbEV2
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndoZWVsRGVsdGFZKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hlZWxfZGVsdGEo
V2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19X
SEVFTF9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT53aGVlbERlbHRhKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV93aGVlbF9ldmVu
dF9nZXRfd2Via2l0X2RpcmVjdGlvbl9pbnZlcnRlZF9mcm9tX2RldmljZShXZWJLaXRET01XaGVl
bEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53ZWJraXREaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVdoZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUxM2U5MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZl
bnQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5H
X1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NV2hlZWxFdmVudF9o
CisjZGVmaW5lIFdlYktpdERPTVdoZWVsRXZlbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTW91c2VFdmVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfV0hFRUxfRVZFTlQgICAgICAgICAgICAod2Via2l0X2RvbV93aGVl
bF9ldmVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9XSEVFTF9FVkVOVCwgV2ViS2l0RE9NV2hlZWxFdmVudCkpCisjZGVmaW5lIFdFQktJVF9E
T01fV0hFRUxfRVZFTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1dIRUVMX0VWRU5ULCBXZWJLaXRET01XaGVlbEV2ZW50
Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1dIRUVMX0VW
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19XSEVFTF9FVkVOVF9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0hFRUxfRVZF
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9XSEVFTF9FVkVO
VCwgV2ViS2l0RE9NV2hlZWxFdmVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01XaGVlbEV2
ZW50IHsKKyAgICBXZWJLaXRET01Nb3VzZUV2ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NV2hlZWxFdmVudENsYXNzIHsKKyAgICBXZWJLaXRET01Nb3VzZUV2ZW50
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV93
aGVlbF9ldmVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3doZWVsX2V2
ZW50X2luaXRfd2hlZWxfZXZlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2hlZWxFdmVudAor
ICogQHdoZWVsRGVsdGFYOiBBICNnbG9uZworICogQHdoZWVsRGVsdGFZOiBBICNnbG9uZworICog
QHZpZXc6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHNjcmVlblg6IEEgI2dsb25nCisgKiBA
c2NyZWVuWTogQSAjZ2xvbmcKKyAqIEBjbGllbnRYOiBBICNnbG9uZworICogQGNsaWVudFk6IEEg
I2dsb25nCisgKiBAY3RybEtleTogQSAjZ2Jvb2xlYW4KKyAqIEBhbHRLZXk6IEEgI2dib29sZWFu
CisgKiBAc2hpZnRLZXk6IEEgI2dib29sZWFuCisgKiBAbWV0YUtleTogQSAjZ2Jvb2xlYW4KKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV93aGVlbF9ldmVudF9pbml0X3doZWVs
X2V2ZW50KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYsIGdsb25nIHdoZWVsRGVsdGFYLCBnbG9u
ZyB3aGVlbERlbHRhWSwgV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBnbG9uZyBzY3JlZW5YLCBn
bG9uZyBzY3JlZW5ZLCBnbG9uZyBjbGllbnRYLCBnbG9uZyBjbGllbnRZLCBnYm9vbGVhbiBjdHJs
S2V5LCBnYm9vbGVhbiBhbHRLZXksIGdib29sZWFuIHNoaWZ0S2V5LCBnYm9vbGVhbiBtZXRhS2V5
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YV94Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTVdoZWVsRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVl
bF9kZWx0YV94KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhX3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
V2hlZWxFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xv
bmcKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhX3koV2ViS2l0RE9NV2hl
ZWxFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hl
ZWxfZGVsdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2hlZWxFdmVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fd2hlZWxfZXZl
bnRfZ2V0X3doZWVsX2RlbHRhKFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NV2hlZWxFdmVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVdoZWVsRXZlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZlbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYzFlMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NV2hlZWxFdmVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVdoZWVsRXZlbnRQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NV2hlZWxFdmVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9XaGVlbEV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVdoZWVsRXZlbnQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01XaGVlbEV2ZW50KiB3cmFwV2hlZWxF
dmVudChXZWJDb3JlOjpXaGVlbEV2ZW50Kik7CitXZWJLaXRET01XaGVlbEV2ZW50KiBraXQoV2Vi
Q29yZTo6V2hlZWxFdmVudCopOworV2ViQ29yZTo6V2hlZWxFdmVudCogY29yZShXZWJLaXRET01X
aGVlbEV2ZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERP
TVdoZWVsRXZlbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudFVuc3Rh
YmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVdoZWVsRXZlbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjc4MDY1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZlbnRV
bnN0YWJsZS5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTVdoZWVsRXZlbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktp
dERPTVdoZWVsRXZlbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+
CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0RPTV9E
RUxUQV9QSVhFTDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0RPTV9ERUxU
QV9QSVhFTCAweDAwCisKKy8qKgorICogV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9ET01fREVMVEFf
TElORToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0RPTV9ERUxUQV9MSU5F
IDB4MDEKKworLyoqCisgKiBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0RPTV9ERUxUQV9QQUdFOgor
ICovCisjZGVmaW5lIFdFQktJVF9ET01fV0hFRUxfRVZFTlRfRE9NX0RFTFRBX1BBR0UgMHgwMgor
CisvKioKKyAqIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3g6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NV2hlZWxFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rv
bV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeChXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV95OgorICogQHNlbGY6IEEg
I1dlYktpdERPTVdoZWVsRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21f
d2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3koV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfejoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01XaGVlbEV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3do
ZWVsX2V2ZW50X2dldF9kZWx0YV96KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX21vZGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NV2hlZWxFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fd2hl
ZWxfZXZlbnRfZ2V0X2RlbHRhX21vZGUoV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2Via2l0X2RpcmVjdGlvbl9pbnZlcnRl
ZF9mcm9tX2RldmljZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XaGVlbEV2ZW50CisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3dlYmtpdF9kaXJl
Y3Rpb25faW52ZXJ0ZWRfZnJvbV9kZXZpY2UoV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZik7CisK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTVdoZWVsRXZlbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVhQYXRoRXhwcmVzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3YzkzOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTVhQYXRoRXhwcmVzc2lvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVhQYXRo
RXhwcmVzc2lvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01YUGF0aFJlc3VsdFByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1hQ
QVRIX0VYUFJFU1NJT05fR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVTU0lPTiwgV2ViS2l0RE9NWFBhdGhF
eHByZXNzaW9uUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVhQYXRoRXhwcmVz
c2lvblByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb24+IGNvcmVP
YmplY3Q7Cit9IFdlYktpdERPTVhQYXRoRXhwcmVzc2lvblByaXZhdGU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01YUGF0aEV4cHJlc3Npb24qIGtpdChXZWJDb3JlOjpYUGF0aEV4
cHJlc3Npb24qIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9YUEFUSF9FWFBSRVNTSU9OKHJldCk7CisKKyAgICByZXR1cm4gd3Jh
cFhQYXRoRXhwcmVzc2lvbihvYmopOworfQorCitXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb24qIGNv
cmUoV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uKj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NWFBhdGhFeHBy
ZXNzaW9uKiB3cmFwWFBhdGhFeHByZXNzaW9uKFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbiogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fWFBBVEhfRVhQUkVTU0lPTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1hQQVRIX0VY
UFJFU1NJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NWFBhdGhFeHByZXNz
aW9uLCB3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qp
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTl9HRVRfUFJJVkFURShvYmplY3QpOworCisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OworCisgICAgcHJpdi0+fldlYktpdERPTVhQYXRoRXhwcmVzc2lvblByaXZhdGUoKTsKKyAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21feHBhdGhf
ZXhwcmVzc2lvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sK
KyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3hwYXRoX2V4
cHJlc3Npb25fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVhQYXRoRXhw
cmVzc2lvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1hQQVRIX0VYUFJFU1NJT05fR0VUX1BS
SVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6WFBhdGhFeHByZXNzaW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fY2xhc3NfaW5pdChXZWJLaXRET01YUGF0aEV4cHJlc3Np
b25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0
ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3hwYXRoX2V4
cHJlc3Npb25fY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9kb21feHBhdGhfZXhwcmVzc2lvbl9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV94cGF0aF9leHByZXNzaW9uX2luaXQoV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uKiByZXF1
ZXN0KQoreworICAgIFdlYktpdERPTVhQYXRoRXhwcmVzc2lvblByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1hQQVRIX0VYUFJFU1NJT05fR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChw
cml2KSBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlKCk7Cit9CisKK1dlYktpdERPTVhQ
YXRoUmVzdWx0KiB3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZXZhbHVhdGUoV2ViS2l0RE9N
WFBhdGhFeHByZXNzaW9uKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBjb250ZXh0Tm9kZSwgZ3VzaG9y
dCB0eXBlLCBXZWJLaXRET01YUGF0aFJlc3VsdCogaW5SZXN1bHQsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX0VYUFJFU1NJT04oc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShjb250ZXh0Tm9kZSks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxU
KGluUmVzdWx0KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IsIDApOworICAgIFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRDb250ZXh0Tm9kZSA9IFdlYktp
dDo6Y29yZShjb250ZXh0Tm9kZSk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGNvbnZlcnRl
ZEluUmVzdWx0ID0gV2ViS2l0Ojpjb3JlKGluUmVzdWx0KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6WFBhdGhSZXN1bHQ+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5ldmFsdWF0ZShjb252ZXJ0ZWRDb250ZXh0Tm9kZSwg
dHlwZSwgY29udmVydGVkSW5SZXN1bHQsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aEV4cHJl
c3Npb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZjA2NmFkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNz
aW9uLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5H
X1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NWFBhdGhFeHByZXNz
aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uX2gKKworI2luY2x1ZGUgPGds
aWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVTU0lPTiAgICAgICAgICAgICh3ZWJr
aXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9Y
UEFUSF9FWFBSRVNTSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9YUEFUSF9FWFBSRVNTSU9OLCBXZWJLaXRET01YUGF0
aEV4cHJlc3Npb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX0VYUFJFU1NJT05fQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1hQQVRIX0VYUFJFU1NJT04sIFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbkNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1hQQVRIX0VYUFJFU1NJT04ob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1hQQVRIX0VYUFJFU1NJ
T04pKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1hQQVRIX0VYUFJFU1NJT05fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1hQQVRI
X0VYUFJFU1NJT04pKQorI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX0VYUFJFU1NJT05fR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX1hQQVRIX0VYUFJFU1NJT04sIFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbkNsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01YUGF0aEV4cHJlc3Npb24geworICAgIFdlYktpdERPTU9iamVjdCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbkNs
YXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2V2YWx1YXRlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbgorICogQGNvbnRleHROb2RlOiBBICNXZWJL
aXRET01Ob2RlCisgKiBAdHlwZTogQSAjZ3VzaG9ydAorICogQGluUmVzdWx0OiBBICNXZWJLaXRE
T01YUGF0aFJlc3VsdAorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTVhQYXRoUmVzdWx0Kgord2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2V2YWx1YXRlKFdl
YktpdERPTVhQYXRoRXhwcmVzc2lvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogY29udGV4dE5vZGUs
IGd1c2hvcnQgdHlwZSwgV2ViS2l0RE9NWFBhdGhSZXN1bHQqIGluUmVzdWx0LCBHRXJyb3IqKiBl
cnJvcik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01YUGF0aEV4cHJlc3Np
b25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVhQYXRoRXhwcmVzc2lvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5iMGU4ZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1hQYXRoRXhw
cmVzc2lvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01YUGF0aEV4cHJlc3Npb24u
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01YUGF0aEV4cHJlc3Npb24qIHdyYXBY
UGF0aEV4cHJlc3Npb24oV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uKik7CitXZWJLaXRET01YUGF0
aEV4cHJlc3Npb24qIGtpdChXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb24qKTsKK1dlYkNvcmU6OlhQ
YXRoRXhwcmVzc2lvbiogY29yZShXZWJLaXRET01YUGF0aEV4cHJlc3Npb24qKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTVhQYXRoTlNSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5jcHAKc2ltaWxh
cml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoTlNSZXNv
bHZlci5jcHAKaW5kZXggYWMyODIwOC4uYzRiZTM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NWFBhdGhOU1Jlc29sdmVyLmNwcApAQCAtMjEsMTAgKzIxLDEwIEBACiAKICNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkdPYmplY3RYUGF0aE5TUmVzb2x2ZXIuaCIKLSNp
bmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oPgogI2luY2x1ZGUgIldlYktpdERPTU9iamVjdC5oIgogI2luY2x1
ZGUgIldlYktpdERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0
L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAt
MTE3LDcgKzExNyw3IEBAIFJlZlB0cjxXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI+IGNvcmUoV2Vi
S2l0RE9NWFBhdGhOU1Jlc29sdmVyKiB4UGF0aE5TUmVzb2x2ZXIpCiAgICAgaWYgKFdFQktJVF9E
T01fSVNfTkFUSVZFX1hQQVRIX05TX1JFU09MVkVSKHhQYXRoTlNSZXNvbHZlcikpCiAgICAgICAg
IGNvcmVSZXNvbHZlciA9IGNvcmUoV0VCS0lUX0RPTV9OQVRJVkVfWFBBVEhfTlNfUkVTT0xWRVIo
eFBhdGhOU1Jlc29sdmVyKSk7CiAgICAgZWxzZQotICAgICAgICBjb3JlUmVzb2x2ZXIgPSBXZWJD
b3JlOjpHT2JqZWN0WFBhdGhOU1Jlc29sdmVyOjpjcmVhdGUoeFBhdGhOU1Jlc29sdmVyKTsKKyAg
ICAgICAgY29yZVJlc29sdmVyID0gV2ViS2l0OjpHT2JqZWN0WFBhdGhOU1Jlc29sdmVyOjpjcmVh
dGUoeFBhdGhOU1Jlc29sdmVyKTsKICAgICByZXR1cm4gY29yZVJlc29sdmVyOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRoTlNS
ZXNvbHZlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUK
cmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0
aE5TUmVzb2x2ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0aE5TUmVzb2x2
ZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGUuaApzaW1pbGFyaXR5IGlu
ZGV4IDk4JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2
ZXJQcml2YXRlLmgKaW5kZXggZmZiYTZjNC4uODJiMGQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJQcml2YXRlLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNp
Zm5kZWYgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyUHJpdmF0ZV9oCiAjZGVmaW5lIFdlYktpdERP
TVhQYXRoTlNSZXNvbHZlclByaXZhdGVfaAogCi0jaW5jbHVkZSAiWFBhdGhOU1Jlc29sdmVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9YUGF0aE5TUmVzb2x2ZXIuaD4KICNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmg+CiAKICNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X05BVElWRV9YUEFUSF9OU19SRVNPTFZFUiAgICAgICAgICAgICh3ZWJraXRfZG9tX25hdGl2ZV94
cGF0aF9uc19yZXNvbHZlcl9nZXRfdHlwZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3Vs
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVhQYXRoUmVzdWx0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45MTlmMGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5jcHAK
QEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01YUGF0aFJlc3VsdC5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0dFVF9QUklWQVRF
KG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1hQ
QVRIX1JFU1VMVCwgV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6WFBh
dGhSZXN1bHQ+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVhQYXRoUmVzdWx0KiBraXQoV2ViQ29yZTo6
WFBhdGhSZXN1bHQqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFQocmV0KTsKKworICAgIHJldHVybiB3cmFw
WFBhdGhSZXN1bHQob2JqKTsKK30KKworV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGNvcmUoV2ViS2l0
RE9NWFBhdGhSZXN1bHQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpYUGF0aFJlc3VsdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVhQYXRoUmVzdWx0KiB3cmFwWFBhdGhSZXN1
bHQoV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX1hQQVRIX1JFU1VMVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01YUGF0aFJlc3VsdCwgd2Via2l0X2RvbV94cGF0aF9yZXN1bHQsIFdFQktJVF9ET01f
VFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1JFU1VMVF9UWVBF
LAorICAgIFBST1BfTlVNQkVSX1ZBTFVFLAorICAgIFBST1BfU1RSSU5HX1ZBTFVFLAorICAgIFBS
T1BfQk9PTEVBTl9WQUxVRSwKKyAgICBQUk9QX1NJTkdMRV9OT0RFX1ZBTFVFLAorICAgIFBST1Bf
SU5WQUxJRF9JVEVSQVRPUl9TVEFURSwKKyAgICBQUk9QX1NOQVBTSE9UX0xFTkdUSCwKK307CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1hQQVRIX1JFU1VMVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+
fldlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21feHBhdGhfcmVzdWx0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmID0gV0VCS0lUX0RPTV9YUEFU
SF9SRVNVTFQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9SRVNVTFRfVFlQRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0
X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3Jlc3VsdF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX05VTUJFUl9WQUxVRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91Ymxl
KHZhbHVlLCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfbnVtYmVyX3ZhbHVlKHNlbGYsIG51
bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NUUklOR19WQUxVRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV94cGF0aF9yZXN1bHRf
Z2V0X3N0cmluZ192YWx1ZShzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9CT09MRUFOX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfYm9vbGVhbl92YWx1ZShzZWxmLCBudWxscHRy
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSU5HTEVfTk9ERV9WQUxVRToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9n
ZXRfc2luZ2xlX25vZGVfdmFsdWUoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfSU5WQUxJRF9JVEVSQVRPUl9TVEFURToKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2ludmFsaWRfaXRlcmF0
b3Jfc3RhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU05BUFNIT1Rf
TEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV94cGF0
aF9yZXN1bHRfZ2V0X3NuYXBzaG90X2xlbmd0aChzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfY29uc3RydWN0b3Io
R1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3Ry
dWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0g
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV94cGF0aF9yZXN1bHRfcGFyZW50X2NsYXNzKS0+Y29u
c3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzKTsKKworICAgIFdlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fWFBBVEhfUkVTVUxUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlhQYXRoUmVzdWx0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
b2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHBy
aXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9jbGFzc19pbml0KFdlYktpdERP
TVhQYXRoUmVzdWx0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVhQYXRoUmVzdWx0
UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3hw
YXRoX3Jlc3VsdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0X2RvbV94cGF0aF9yZXN1bHRfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfUkVTVUxUX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAg
ICAgICAgInJlc3VsdC10eXBlIiwKKyAgICAgICAgICAgICJYUGF0aFJlc3VsdDpyZXN1bHQtdHlw
ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1c2hvcnQgWFBhdGhSZXN1bHQ6cmVzdWx0LXR5
cGUiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTlVNQkVSX1ZBTFVFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgIm51bWJlci12YWx1ZSIsCisgICAg
ICAgICAgICAiWFBhdGhSZXN1bHQ6bnVtYmVyLXZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2RvdWJsZSBYUGF0aFJlc3VsdDpudW1iZXItdmFsdWUiLAorICAgICAgICAgICAgLUdfTUFY
RE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NUUklOR19WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJzdHJpbmctdmFsdWUiLAorICAgICAgICAgICAgIlhQ
YXRoUmVzdWx0OnN0cmluZy12YWx1ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBY
UGF0aFJlc3VsdDpzdHJpbmctdmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CT09MRUFOX1ZBTFVF
LAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJib29sZWFuLXZh
bHVlIiwKKyAgICAgICAgICAgICJYUGF0aFJlc3VsdDpib29sZWFuLXZhbHVlIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gWFBhdGhSZXN1bHQ6Ym9vbGVhbi12YWx1ZSIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NJTkdMRV9OT0RFX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgInNpbmdsZS1ub2RlLXZhbHVlIiwKKyAgICAgICAgICAgICJY
UGF0aFJlc3VsdDpzaW5nbGUtbm9kZS12YWx1ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTU5vZGUqIFhQYXRoUmVzdWx0OnNpbmdsZS1ub2RlLXZhbHVlIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSU5WQUxJRF9JVEVSQVRPUl9TVEFURSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaW52YWxpZC1pdGVyYXRvci1zdGF0
ZSIsCisgICAgICAgICAgICAiWFBhdGhSZXN1bHQ6aW52YWxpZC1pdGVyYXRvci1zdGF0ZSIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFhQYXRoUmVzdWx0OmludmFsaWQtaXRlcmF0
b3Itc3RhdGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TTkFQU0hPVF9MRU5HVEgsCisgICAgICAg
IGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJzbmFwc2hvdC1sZW5ndGgiLAorICAg
ICAgICAgICAgIlhQYXRoUmVzdWx0OnNuYXBzaG90LWxlbmd0aCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGd1bG9uZyBYUGF0aFJlc3VsdDpzbmFwc2hvdC1sZW5ndGgiLAorICAgICAgICAgICAg
MCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2luaXQoV2ViS2l0RE9N
WFBhdGhSZXN1bHQqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfR0VUX1BSSVZBVEUocmVxdWVzdCk7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUoKTsKK30KKworV2ViS2l0
RE9NTm9kZSogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfaXRlcmF0ZV9uZXh0KFdlYktpdERPTVhQ
YXRoUmVzdWx0KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19YUEFUSF9SRVNVTFQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
Pml0ZXJhdGVOZXh0KGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRf
c25hcHNob3RfaXRlbShXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwgZ3Vsb25nIGluZGV4LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQo
c2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAw
KTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNuYXBzaG90SXRlbShpbmRl
eCwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitndXNob3J0IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9yZXN1bHRfdHlwZShX
ZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19Y
UEFUSF9SRVNVTFQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+cmVzdWx0VHlw
ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV94cGF0aF9y
ZXN1bHRfZ2V0X251bWJlcl92YWx1ZShXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxUKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Cisg
ICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVt
LT5udW1iZXJWYWx1ZShlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc3RyaW5nX3ZhbHVlKFdlYktpdERPTVhQYXRoUmVz
dWx0KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19Y
UEFUSF9SRVNVTFQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdWYWx1ZShlYykpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0
X2dldF9ib29sZWFuX3ZhbHVlKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQoc2VsZiksIEZB
TFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0Up
OworICAgIFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9
IGl0ZW0tPmJvb2xlYW5WYWx1ZShlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dl
YktpdERPTU5vZGUqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9zaW5nbGVfbm9kZV92YWx1
ZShXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1
bHQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5zaW5nbGVOb2RlVmFsdWUoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3hw
YXRoX3Jlc3VsdF9nZXRfaW52YWxpZF9pdGVyYXRvcl9zdGF0ZShXZWJLaXRET01YUGF0aFJlc3Vs
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQoc2VsZiks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pbnZhbGlkSXRlcmF0b3JTdGF0ZSgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3hwYXRoX3Jlc3Vs
dF9nZXRfc25hcHNob3RfbGVuZ3RoKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQoc2VsZiks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAg
ICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+
c25hcHNob3RMZW5ndGgoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVhQYXRoUmVzdWx0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoUmVzdWx0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhNWFhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
WFBhdGhSZXN1bHQuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NWFBh
dGhSZXN1bHRfaAorI2RlZmluZSBXZWJLaXRET01YUGF0aFJlc3VsdF9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1hQQVRIX1JFU1VMVCAgICAgICAgICAgICh3ZWJraXRf
ZG9tX3hwYXRoX3Jlc3VsdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JF
U1VMVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfWFBBVEhfUkVTVUxULCBXZWJLaXRET01YUGF0aFJlc3VsdCkpCisjZGVm
aW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9YUEFUSF9SRVNVTFQsIFdlYktp
dERPTVhQYXRoUmVzdWx0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxU
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9YUEFUSF9SRVNVTFQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VM
VF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfWFBBVEhfUkVTVUxUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX1hQQVRIX1JFU1VMVCwgV2ViS2l0RE9NWFBhdGhSZXN1bHRDbGFzcykpCisKKy8q
KgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfQU5ZX1RZUEU6CisgKi8KKyNkZWZpbmUgV0VC
S0lUX0RPTV9YUEFUSF9SRVNVTFRfQU5ZX1RZUEUgMAorCisvKioKKyAqIFdFQktJVF9ET01fWFBB
VEhfUkVTVUxUX05VTUJFUl9UWVBFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVT
VUxUX05VTUJFUl9UWVBFIDEKKworLyoqCisgKiBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9TVFJJ
TkdfVFlQRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9TVFJJTkdfVFlQ
RSAyCisKKy8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfQk9PTEVBTl9UWVBFOgorICov
CisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0JPT0xFQU5fVFlQRSAzCisKKy8qKgor
ICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRToK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9VTk9SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFIDQKKworLyoqCisgKiBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9PUkRFUkVEX05P
REVfSVRFUkFUT1JfVFlQRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA1CisKKy8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9S
RVNVTFRfVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRToKKyAqLworI2RlZmluZSBXRUJLSVRf
RE9NX1hQQVRIX1JFU1VMVF9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIDYKKworLyoqCisg
KiBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRToKKyAq
LworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRSA3CisKKy8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfQU5ZX1VOT1JERVJFRF9O
T0RFX1RZUEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfQU5ZX1VOT1JE
RVJFRF9OT0RFX1RZUEUgOAorCisvKioKKyAqIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0ZJUlNU
X09SREVSRURfTk9ERV9UWVBFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxU
X0ZJUlNUX09SREVSRURfTk9ERV9UWVBFIDkKKworc3RydWN0IF9XZWJLaXRET01YUGF0aFJlc3Vs
dCB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NWFBhdGhSZXN1bHRDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV94cGF0aF9yZXN1
bHRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfaXRl
cmF0ZV9uZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVhQYXRoUmVzdWx0CisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5v
ZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV94cGF0aF9yZXN1
bHRfaXRlcmF0ZV9uZXh0KFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJyb3IqKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfc25hcHNob3RfaXRlbToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorICogQGluZGV4OiBBICNndWxvbmcKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3hw
YXRoX3Jlc3VsdF9zbmFwc2hvdF9pdGVtKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBndWxv
bmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3hwYXRoX3Jl
c3VsdF9nZXRfcmVzdWx0X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQK
KyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0CisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Vi
a2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3Jlc3VsdF90eXBlKFdlYktpdERPTVhQYXRoUmVzdWx0
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfbnVtYmVyX3Zh
bHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVhQYXRoUmVzdWx0CisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQor
d2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X251bWJlcl92YWx1ZShXZWJLaXRET01YUGF0aFJl
c3VsdCogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhf
cmVzdWx0X2dldF9zdHJpbmdfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NWFBhdGhSZXN1
bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc3RyaW5nX3ZhbHVl
KFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2Jvb2xlYW5fdmFsdWU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NWFBhdGhSZXN1bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21feHBhdGhf
cmVzdWx0X2dldF9ib29sZWFuX3ZhbHVlKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3Npbmds
ZV9ub2RlX3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVhQYXRoUmVzdWx0CisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERP
TU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV94cGF0aF9y
ZXN1bHRfZ2V0X3NpbmdsZV9ub2RlX3ZhbHVlKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2lu
dmFsaWRfaXRlcmF0b3Jfc3RhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQK
KyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfaW52YWxpZF9pdGVyYXRvcl9zdGF0ZShXZWJLaXRE
T01YUGF0aFJlc3VsdCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRf
Z2V0X3NuYXBzaG90X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8KK1dFQktJ
VF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc25hcHNob3RfbGVuZ3Ro
KFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01YUGF0aFJlc3VsdF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVhQYXRoUmVzdWx0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNlZGY3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL1hQYXRoUmVzdWx0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVhQYXRo
UmVzdWx0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHdy
YXBYUGF0aFJlc3VsdChXZWJDb3JlOjpYUGF0aFJlc3VsdCopOworV2ViS2l0RE9NWFBhdGhSZXN1
bHQqIGtpdChXZWJDb3JlOjpYUGF0aFJlc3VsdCopOworV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGNv
cmUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vZG9jcy93ZWJr
aXRkb21ndGstNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vZG9jcy93ZWJraXRkb21ndGstNC4wLXNlY3Rpb25zLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDA3MzU0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9kb2NzL3dlYmtpdGRvbWd0ay00LjAtc2VjdGlvbnMudHh0CkBAIC0wLDAgKzEsMzAxOSBA
QAorPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01DdXN0b208L0ZJTEU+Cis8VElUTEU+V2ViS2l0
RE9NQ3VzdG9tPC9USVRMRT4KKword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2lz
X2VkaXRlZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfaXNfZWRpdGVkCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfd2Via2l0X21lc3NhZ2VfaGFuZGxlcnNfcG9zdF9tZXNzYWdlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NRXZlbnRUYXJnZXQ8L0ZJTEU+Cis8
VElUTEU+V2ViS2l0RE9NRXZlbnRUYXJnZXQ8L1RJVExFPgorCit3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9kaXNwYXRjaF9ldmVudAord2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xp
c3RlbmVyCit3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIKK3dl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmUKK3dl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcl93aXRoX2Nsb3N1cmUK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01FdmVudFRhcmdldElmYWNlCitXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VUCitXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVAorV0VCS0lU
X0RPTV9JU19FVkVOVF9UQVJHRVQKK1dFQktJVF9ET01fRVZFTlRfVEFSR0VUX0NMQVNTCitXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVF9HRVRfSUZBQ0UKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgor
PEZJTEU+V2ViS2l0RE9NTm9kZUZpbHRlcjwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01Ob2RlRmls
dGVyPC9USVRMRT4KKworV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9BQ0NFUFQKK1dFQktJVF9ET01f
Tk9ERV9GSUxURVJfUkVKRUNUCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfQUxMCitXRUJL
SVRfRE9NX05PREVfRklMVEVSX1NIT1dfQVRUUklCVVRFCitXRUJLSVRfRE9NX05PREVfRklMVEVS
X1NIT1dfQ0RBVEFfU0VDVElPTgorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0NPTU1FTlQK
K1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19ET0NVTUVOVAorV0VCS0lUX0RPTV9OT0RFX0ZJ
TFRFUl9TSE9XX0RPQ1VNRU5UX0ZSQUdNRU5UCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1df
RE9DVU1FTlRfVFlQRQorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0VMRU1FTlQKK1dFQktJ
VF9ET01fTk9ERV9GSUxURVJfU0hPV19FTlRJVFkKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hP
V19FTlRJVFlfUkVGRVJFTkNFCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfTk9UQVRJT04K
K1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OCitXRUJL
SVRfRE9NX05PREVfRklMVEVSX1NIT1dfVEVYVAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TS0lQ
Cit3ZWJraXRfZG9tX25vZGVfZmlsdGVyX2FjY2VwdF9ub2RlCisKKzxTVUJTRUNUSU9OIFN0YW5k
YXJkPgorV2ViS2l0RE9NTm9kZUZpbHRlcklmYWNlCitXRUJLSVRfRE9NX1RZUEVfTk9ERV9GSUxU
RVIKK1dFQktJVF9ET01fTk9ERV9GSUxURVIKK1dFQktJVF9ET01fSVNfTk9ERV9GSUxURVIKK1dF
QktJVF9ET01fTk9ERV9GSUxURVJfQ0xBU1MKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfR0VUX0lG
QUNFCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX25vZGVfZmlsdGVyX2dldF90
eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NT2JqZWN0PC9GSUxF
PgorPFRJVExFPldlYktpdERPTU9iamVjdDwvVElUTEU+CitXZWJLaXRET01PYmplY3QKKworCisK
KzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NT2JqZWN0Q2xhc3MKK1dFQktJVF9ET01f
VFlQRV9PQkpFQ1QKK1dFQktJVF9ET01fT0JKRUNUCitXRUJLSVRfRE9NX0lTX09CSkVDVAorV0VC
S0lUX0RPTV9PQkpFQ1RfQ0xBU1MKK1dFQktJVF9ET01fSVNfT0JKRUNUX0NMQVNTCitXRUJLSVRf
RE9NX09CSkVDVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdERPTU9i
amVjdFByaXZhdGUKK3dlYmtpdF9kb21fb2JqZWN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyPC9GSUxFPgorPFRJVExFPldl
YktpdERPTVhQYXRoTlNSZXNvbHZlcjwvVElUTEU+CisKK3dlYmtpdF9kb21feHBhdGhfbnNfcmVz
b2x2ZXJfbG9va3VwX25hbWVzcGFjZV91cmkKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJL
aXRET01YUGF0aE5TUmVzb2x2ZXJJZmFjZQorV0VCS0lUX0RPTV9UWVBFX1hQQVRIX05TX1JFU09M
VkVSCitXRUJLSVRfRE9NX1hQQVRIX05TX1JFU09MVkVSCitXRUJLSVRfRE9NX0lTX1hQQVRIX05T
X1JFU09MVkVSCitXRUJLSVRfRE9NX1hQQVRIX05TX1JFU09MVkVSX0NMQVNTCitXRUJLSVRfRE9N
X1hQQVRIX05TX1JFU09MVkVSX0dFVF9JRkFDRQorCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Vi
a2l0X2RvbV94cGF0aF9uc19yZXNvbHZlcl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTUNTU1J1bGU8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NQ1NTUnVs
ZTwvVElUTEU+CitXZWJLaXRET01DU1NSdWxlCisKK1dFQktJVF9ET01fQ1NTX1JVTEVfVU5LTk9X
Tl9SVUxFCitXRUJLSVRfRE9NX0NTU19SVUxFX1NUWUxFX1JVTEUKK1dFQktJVF9ET01fQ1NTX1JV
TEVfQ0hBUlNFVF9SVUxFCitXRUJLSVRfRE9NX0NTU19SVUxFX0lNUE9SVF9SVUxFCitXRUJLSVRf
RE9NX0NTU19SVUxFX01FRElBX1JVTEUKK1dFQktJVF9ET01fQ1NTX1JVTEVfRk9OVF9GQUNFX1JV
TEUKK1dFQktJVF9ET01fQ1NTX1JVTEVfUEFHRV9SVUxFCit3ZWJraXRfZG9tX2Nzc19ydWxlX2dl
dF9ydWxlX3R5cGUKK3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X2Nzc190ZXh0Cit3ZWJraXRfZG9t
X2Nzc19ydWxlX3NldF9jc3NfdGV4dAord2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcGFyZW50X3N0
eWxlX3NoZWV0Cit3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wYXJlbnRfcnVsZQorCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUNTU1J1bGVDbGFzcworV0VCS0lUX0RPTV9UWVBFX0NT
U19SVUxFCitXRUJLSVRfRE9NX0NTU19SVUxFCitXRUJLSVRfRE9NX0lTX0NTU19SVUxFCitXRUJL
SVRfRE9NX0NTU19SVUxFX0NMQVNTCitXRUJLSVRfRE9NX0lTX0NTU19SVUxFX0NMQVNTCitXRUJL
SVRfRE9NX0NTU19SVUxFX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9jc3NfcnVsZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldl
YktpdERPTUNTU1J1bGVMaXN0PC9GSUxFPgorPFRJVExFPldlYktpdERPTUNTU1J1bGVMaXN0PC9U
SVRMRT4KK1dlYktpdERPTUNTU1J1bGVMaXN0CisKK3dlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9p
dGVtCit3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X2xlbmd0aAorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUNTU1J1bGVMaXN0Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9DU1Nf
UlVMRV9MSVNUCitXRUJLSVRfRE9NX0NTU19SVUxFX0xJU1QKK1dFQktJVF9ET01fSVNfQ1NTX1JV
TEVfTElTVAorV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUX0NMQVNTCitXRUJLSVRfRE9NX0lTX0NT
U19SVUxFX0xJU1RfQ0xBU1MKK1dFQktJVF9ET01fQ1NTX1JVTEVfTElTVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9nZXRfdHlwZQor
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRp
b248L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjwvVElUTEU+CitX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xh
cmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZQord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRp
b25fcmVtb3ZlX3Byb3BlcnR5Cit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRf
cHJvcGVydHlfcHJpb3JpdHkKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3NldF9w
cm9wZXJ0eQord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faXRlbQord2Via2l0X2Rv
bV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3Nob3J0aGFuZAord2Via2l0X2Rv
bV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faXNfcHJvcGVydHlfaW1wbGljaXQKK3dlYmtpdF9kb21f
Y3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9jc3NfdGV4dAord2Via2l0X2RvbV9jc3Nfc3R5bGVf
ZGVjbGFyYXRpb25fc2V0X2Nzc190ZXh0Cit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlv
bl9nZXRfbGVuZ3RoCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcGFyZW50
X3J1bGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJT04KK1dFQktJVF9E
T01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OCitXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJB
VElPTgorV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT05fQ0xBU1MKK1dFQktJVF9ET01f
SVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OX0NMQVNTCitXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNM
QVJBVElPTl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fY3Nz
X3N0eWxlX2RlY2xhcmF0aW9uX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NQ1NTU3R5bGVTaGVldDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01DU1NTdHls
ZVNoZWV0PC9USVRMRT4KK1dlYktpdERPTUNTU1N0eWxlU2hlZXQKKword2Via2l0X2RvbV9jc3Nf
c3R5bGVfc2hlZXRfaW5zZXJ0X3J1bGUKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2RlbGV0
ZV9ydWxlCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9hZGRfcnVsZQord2Via2l0X2RvbV9j
c3Nfc3R5bGVfc2hlZXRfcmVtb3ZlX3J1bGUKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dl
dF9vd25lcl9ydWxlCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfY3NzX3J1bGVzCit3
ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfcnVsZXMKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXZWJLaXRET01DU1NTdHlsZVNoZWV0Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9DU1NfU1RZ
TEVfU0hFRVQKK1dFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUCitXRUJLSVRfRE9NX0lTX0NTU19T
VFlMRV9TSEVFVAorV0VCS0lUX0RPTV9DU1NfU1RZTEVfU0hFRVRfQ0xBU1MKK1dFQktJVF9ET01f
SVNfQ1NTX1NUWUxFX1NIRUVUX0NMQVNTCitXRUJLSVRfRE9NX0NTU19TVFlMRV9TSEVFVF9HRVRf
Q0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0
X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NQ1NTVmFs
dWU8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NQ1NTVmFsdWU8L1RJVExFPgorV2ViS2l0RE9NQ1NT
VmFsdWUKKworV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX0lOSEVSSVQKK1dFQktJVF9ET01fQ1NT
X1ZBTFVFX0NTU19QUklNSVRJVkVfVkFMVUUKK1dFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19WQUxV
RV9MSVNUCitXRUJLSVRfRE9NX0NTU19WQUxVRV9DU1NfQ1VTVE9NCit3ZWJraXRfZG9tX2Nzc192
YWx1ZV9nZXRfY3NzX3RleHQKK3dlYmtpdF9kb21fY3NzX3ZhbHVlX3NldF9jc3NfdGV4dAord2Vi
a2l0X2RvbV9jc3NfdmFsdWVfZ2V0X2Nzc192YWx1ZV90eXBlCisKKzxTVUJTRUNUSU9OIFN0YW5k
YXJkPgorV2ViS2l0RE9NQ1NTVmFsdWVDbGFzcworV0VCS0lUX0RPTV9UWVBFX0NTU19WQUxVRQor
V0VCS0lUX0RPTV9DU1NfVkFMVUUKK1dFQktJVF9ET01fSVNfQ1NTX1ZBTFVFCitXRUJLSVRfRE9N
X0NTU19WQUxVRV9DTEFTUworV0VCS0lUX0RPTV9JU19DU1NfVkFMVUVfQ0xBU1MKK1dFQktJVF9E
T01fQ1NTX1ZBTFVFX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2Rv
bV9jc3NfdmFsdWVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJL
aXRET01NZWRpYUxpc3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NTWVkaWFMaXN0PC9USVRMRT4K
K1dlYktpdERPTU1lZGlhTGlzdAorCit3ZWJraXRfZG9tX21lZGlhX2xpc3RfaXRlbQord2Via2l0
X2RvbV9tZWRpYV9saXN0X2RlbGV0ZV9tZWRpdW0KK3dlYmtpdF9kb21fbWVkaWFfbGlzdF9hcHBl
bmRfbWVkaXVtCit3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X21lZGlhX3RleHQKK3dlYmtpdF9k
b21fbWVkaWFfbGlzdF9zZXRfbWVkaWFfdGV4dAord2Via2l0X2RvbV9tZWRpYV9saXN0X2dldF9s
ZW5ndGgKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01NZWRpYUxpc3RDbGFzcwor
V0VCS0lUX0RPTV9UWVBFX01FRElBX0xJU1QKK1dFQktJVF9ET01fTUVESUFfTElTVAorV0VCS0lU
X0RPTV9JU19NRURJQV9MSVNUCitXRUJLSVRfRE9NX01FRElBX0xJU1RfQ0xBU1MKK1dFQktJVF9E
T01fSVNfTUVESUFfTElTVF9DTEFTUworV0VCS0lUX0RPTV9NRURJQV9MSVNUX0dFVF9DTEFTUwor
Cis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9tZWRpYV9saXN0X2dldF90eXBlCis8
L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NU3R5bGVTaGVldDwvRklMRT4K
KzxUSVRMRT5XZWJLaXRET01TdHlsZVNoZWV0PC9USVRMRT4KK1dlYktpdERPTVN0eWxlU2hlZXQK
Kword2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfY29udGVudF90eXBlCit3ZWJraXRfZG9tX3N0
eWxlX3NoZWV0X2dldF9kaXNhYmxlZAord2Via2l0X2RvbV9zdHlsZV9zaGVldF9zZXRfZGlzYWJs
ZWQKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X293bmVyX25vZGUKK3dlYmtpdF9kb21fc3R5
bGVfc2hlZXRfZ2V0X3BhcmVudF9zdHlsZV9zaGVldAord2Via2l0X2RvbV9zdHlsZV9zaGVldF9n
ZXRfaHJlZgord2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfdGl0bGUKK3dlYmtpdF9kb21fc3R5
bGVfc2hlZXRfZ2V0X21lZGlhCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NU3R5
bGVTaGVldENsYXNzCitXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQKK1dFQktJVF9ET01fU1RZ
TEVfU0hFRVQKK1dFQktJVF9ET01fSVNfU1RZTEVfU0hFRVQKK1dFQktJVF9ET01fU1RZTEVfU0hF
RVRfQ0xBU1MKK1dFQktJVF9ET01fSVNfU1RZTEVfU0hFRVRfQ0xBU1MKK1dFQktJVF9ET01fU1RZ
TEVfU0hFRVRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX3N0
eWxlX3NoZWV0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0
RE9NU3R5bGVTaGVldExpc3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NU3R5bGVTaGVldExpc3Q8
L1RJVExFPgorV2ViS2l0RE9NU3R5bGVTaGVldExpc3QKKword2Via2l0X2RvbV9zdHlsZV9zaGVl
dF9saXN0X2l0ZW0KK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9nZXRfbGVuZ3RoCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NU3R5bGVTaGVldExpc3RDbGFzcworV0VCS0lU
X0RPTV9UWVBFX1NUWUxFX1NIRUVUX0xJU1QKK1dFQktJVF9ET01fU1RZTEVfU0hFRVRfTElTVAor
V0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVF9MSVNUCitXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJ
U1RfQ0xBU1MKK1dFQktJVF9ET01fSVNfU1RZTEVfU0hFRVRfTElTVF9DTEFTUworV0VCS0lUX0RP
TV9TVFlMRV9TSEVFVF9MSVNUX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Vi
a2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9O
PgorPEZJTEU+V2ViS2l0RE9NQXR0cjwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01BdHRyPC9USVRM
RT4KK1dlYktpdERPTUF0dHIKKword2Via2l0X2RvbV9hdHRyX2dldF9uYW1lCit3ZWJraXRfZG9t
X2F0dHJfZ2V0X3NwZWNpZmllZAord2Via2l0X2RvbV9hdHRyX2dldF92YWx1ZQord2Via2l0X2Rv
bV9hdHRyX3NldF92YWx1ZQord2Via2l0X2RvbV9hdHRyX2dldF9vd25lcl9lbGVtZW50Cit3ZWJr
aXRfZG9tX2F0dHJfZ2V0X25hbWVzcGFjZV91cmkKK3dlYmtpdF9kb21fYXR0cl9nZXRfcHJlZml4
Cit3ZWJraXRfZG9tX2F0dHJfZ2V0X2xvY2FsX25hbWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
CitXZWJLaXRET01BdHRyQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9BVFRSCitXRUJLSVRfRE9NX0FU
VFIKK1dFQktJVF9ET01fSVNfQVRUUgorV0VCS0lUX0RPTV9BVFRSX0NMQVNTCitXRUJLSVRfRE9N
X0lTX0FUVFJfQ0xBU1MKK1dFQktJVF9ET01fQVRUUl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04g
UHJpdmF0ZT4KK3dlYmtpdF9kb21fYXR0cl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTUNEQVRBU2VjdGlvbjwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01D
REFUQVNlY3Rpb248L1RJVExFPgorV2ViS2l0RE9NQ0RBVEFTZWN0aW9uCisKKworCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUNEQVRBU2VjdGlvbkNsYXNzCitXRUJLSVRfRE9NX1RZ
UEVfQ0RBVEFfU0VDVElPTgorV0VCS0lUX0RPTV9DREFUQV9TRUNUSU9OCitXRUJLSVRfRE9NX0lT
X0NEQVRBX1NFQ1RJT04KK1dFQktJVF9ET01fQ0RBVEFfU0VDVElPTl9DTEFTUworV0VCS0lUX0RP
TV9JU19DREFUQV9TRUNUSU9OX0NMQVNTCitXRUJLSVRfRE9NX0NEQVRBX1NFQ1RJT05fR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25fZ2V0
X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01DaGFyYWN0ZXJE
YXRhPC9GSUxFPgorPFRJVExFPldlYktpdERPTUNoYXJhY3RlckRhdGE8L1RJVExFPgorV2ViS2l0
RE9NQ2hhcmFjdGVyRGF0YQorCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3N1YnN0cmluZ19k
YXRhCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2FwcGVuZF9kYXRhCit3ZWJraXRfZG9tX2No
YXJhY3Rlcl9kYXRhX2luc2VydF9kYXRhCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2RlbGV0
ZV9kYXRhCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3JlcGxhY2VfZGF0YQord2Via2l0X2Rv
bV9jaGFyYWN0ZXJfZGF0YV9nZXRfZGF0YQord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9zZXRf
ZGF0YQord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YUNsYXNzCitXRUJLSVRfRE9NX1RZUEVf
Q0hBUkFDVEVSX0RBVEEKK1dFQktJVF9ET01fQ0hBUkFDVEVSX0RBVEEKK1dFQktJVF9ET01fSVNf
Q0hBUkFDVEVSX0RBVEEKK1dFQktJVF9ET01fQ0hBUkFDVEVSX0RBVEFfQ0xBU1MKK1dFQktJVF9E
T01fSVNfQ0hBUkFDVEVSX0RBVEFfQ0xBU1MKK1dFQktJVF9ET01fQ0hBUkFDVEVSX0RBVEFfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRh
X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NQ29tbWVu
dDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01Db21tZW50PC9USVRMRT4KK1dlYktpdERPTUNvbW1l
bnQKKworCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NQ29tbWVudENsYXNzCitX
RUJLSVRfRE9NX1RZUEVfQ09NTUVOVAorV0VCS0lUX0RPTV9DT01NRU5UCitXRUJLSVRfRE9NX0lT
X0NPTU1FTlQKK1dFQktJVF9ET01fQ09NTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19DT01NRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0NPTU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZh
dGU+Cit3ZWJraXRfZG9tX2NvbW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbjwvRklMRT4KKzxUSVRMRT5XZWJLaXRE
T01ET01JbXBsZW1lbnRhdGlvbjwvVElUTEU+CitXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbgor
Cit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9oYXNfZmVhdHVyZQord2Via2l0X2RvbV9k
b21faW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50X3R5cGUKK3dlYmtpdF9kb21fZG9tX2lt
cGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVudAord2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRp
b25fY3JlYXRlX2Nzc19zdHlsZV9zaGVldAord2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25f
Y3JlYXRlX2h0bWxfZG9jdW1lbnQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01E
T01JbXBsZW1lbnRhdGlvbkNsYXNzCitXRUJLSVRfRE9NX1RZUEVfRE9NX0lNUExFTUVOVEFUSU9O
CitXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTgorV0VCS0lUX0RPTV9JU19ET01fSU1QTEVN
RU5UQVRJT04KK1dFQktJVF9ET01fRE9NX0lNUExFTUVOVEFUSU9OX0NMQVNTCitXRUJLSVRfRE9N
X0lTX0RPTV9JTVBMRU1FTlRBVElPTl9DTEFTUworV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJ
T05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2RvbV9pbXBs
ZW1lbnRhdGlvbl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktp
dERPTURvY3VtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTURvY3VtZW50PC9USVRMRT4KK1dl
YktpdERPTURvY3VtZW50CisKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQKK3dl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2RvY3VtZW50X2ZyYWdtZW50Cit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV90ZXh0X25vZGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2NvbW1l
bnQKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2NkYXRhX3NlY3Rpb24KK3dlYmtpdF9kb21f
ZG9jdW1lbnRfY3JlYXRlX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24KK3dlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2F0dHJpYnV0ZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlf
dGFnX25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uCit3ZWJraXRfZG9tX2RvY3VtZW50X2ltcG9ydF9u
b2RlCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50X25zCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9hdHRyaWJ1dGVfbnMKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRzX2J5X3RhZ19uYW1lX25zX2FzX2h0bWxfY29sbGVjdGlvbgord2Via2l0X2RvbV9kb2N1bWVu
dF9hZG9wdF9ub2RlCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9ldmVudAord2Via2l0X2Rv
bV9kb2N1bWVudF9jcmVhdGVfcmFuZ2UKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVf
aXRlcmF0b3IKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVfd2Fsa2VyCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9vdmVycmlkZV9zdHlsZQord2Via2l0X2RvbV9kb2N1bWVudF9jcmVh
dGVfZXhwcmVzc2lvbgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfbnNfcmVzb2x2ZXIKK3dl
YmtpdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfZXhlY19jb21t
YW5kCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfZW5hYmxlZAord2Via2l0X2Rv
bV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX2luZGV0ZXJtCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1
ZXJ5X2NvbW1hbmRfc3RhdGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9zdXBw
b3J0ZWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF92YWx1ZQord2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfbmFtZQord2Via2l0X2RvbV9kb2N1bWVudF9lbGVt
ZW50X2Zyb21fcG9pbnQKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2Nzc19zdHlsZV9kZWNs
YXJhdGlvbgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZV9h
c19odG1sX2NvbGxlY3Rpb24KK3dlYmtpdF9kb21fZG9jdW1lbnRfaGFzX2ZvY3VzCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5
X3NlbGVjdG9yCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X3NlbGVjdG9yX2FsbAord2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZG9jdHlwZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW1wbGVt
ZW50YXRpb24KK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvY3VtZW50X2VsZW1lbnQKK3dlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2lucHV0X2VuY29kaW5nCit3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF94bWxfZW5jb2RpbmcKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF92ZXJzaW9uCit3ZWJr
aXRfZG9tX2RvY3VtZW50X3NldF94bWxfdmVyc2lvbgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
eG1sX3N0YW5kYWxvbmUKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3htbF9zdGFuZGFsb25lCit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF91cmkKK3dlYmtpdF9kb21fZG9jdW1lbnRf
c2V0X2RvY3VtZW50X3VyaQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVsdF92aWV3Cit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zdHlsZV9zaGVldHMKK3dlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X3RpdGxlCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF90aXRsZQord2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfZGVzaWduX21vZGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2Rlc2lnbl9tb2Rl
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9yZWZlcnJlcgord2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZG9tYWluCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF91cmwKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2Nvb2tpZQord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfY29va2llCit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9ib2R5Cit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9ib2R5Cit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9oZWFkCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbWFnZXMKK3dl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2FwcGxldHMKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xp
bmtzCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9mb3Jtcword2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfYW5jaG9ycword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZW1iZWRzCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9wbHVnaW5zCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3JpcHRzCit3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9sYXN0X21vZGlmaWVkCit3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9jaGFyc2V0Cit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9jaGFyc2V0Cit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9yZWFkeV9zdGF0ZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hhcmFjdGVy
X3NldAord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcHJlZmVycmVkX3N0eWxlc2hlZXRfc2V0Cit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zZWxlY3RlZF9zdHlsZXNoZWV0X3NldAord2Via2l0X2Rv
bV9kb2N1bWVudF9zZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2FjdGl2ZV9lbGVtZW50Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb21wYXRfbW9k
ZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZQord2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9lbnRpdHlfcmVmZXJlbmNlCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X2NoYXJz
ZXQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01Eb2N1bWVudENsYXNzCitXRUJL
SVRfRE9NX1RZUEVfRE9DVU1FTlQKK1dFQktJVF9ET01fRE9DVU1FTlQKK1dFQktJVF9ET01fSVNf
RE9DVU1FTlQKK1dFQktJVF9ET01fRE9DVU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfRE9DVU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fRE9DVU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNU
SU9OPgorPEZJTEU+V2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudDwvRklMRT4KKzxUSVRMRT5XZWJL
aXRET01Eb2N1bWVudEZyYWdtZW50PC9USVRMRT4KK1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQK
KworCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudENs
YXNzCitXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQKK1dFQktJVF9ET01fRE9DVU1F
TlRfRlJBR01FTlQKK1dFQktJVF9ET01fSVNfRE9DVU1FTlRfRlJBR01FTlQKK1dFQktJVF9ET01f
RE9DVU1FTlRfRlJBR01FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfRE9DVU1FTlRfRlJBR01FTlRf
Q0xBU1MKK1dFQktJVF9ET01fRE9DVU1FTlRfRlJBR01FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNU
SU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NRG9jdW1lbnRUeXBlPC9GSUxFPgor
PFRJVExFPldlYktpdERPTURvY3VtZW50VHlwZTwvVElUTEU+CitXZWJLaXRET01Eb2N1bWVudFR5
cGUKKword2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9uYW1lCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X3R5cGVfZ2V0X2VudGl0aWVzCit3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X25vdGF0
aW9ucword2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9pbnRlcm5hbF9zdWJzZXQKK3dlYmtp
dF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfcHVibGljX2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3R5
cGVfZ2V0X3N5c3RlbV9pZAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTURvY3Vt
ZW50VHlwZUNsYXNzCitXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVFlQRQorV0VCS0lUX0RPTV9E
T0NVTUVOVF9UWVBFCitXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RZUEUKK1dFQktJVF9ET01fRE9D
VU1FTlRfVFlQRV9DTEFTUworV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9UWVBFX0NMQVNTCitXRUJL
SVRfRE9NX0RPQ1VNRU5UX1RZUEVfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRET01FbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUVsZW1lbnQ8
L1RJVExFPgorV2ViS2l0RE9NRWxlbWVudAorCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJp
YnV0ZQord2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUKK3dlYmtpdF9kb21fZWxlbWVu
dF9yZW1vdmVfYXR0cmlidXRlCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2Rl
Cit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlCit3ZWJraXRfZG9tX2VsZW1l
bnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRz
X2J5X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbgord2Via2l0X2RvbV9lbGVtZW50X2hhc19h
dHRyaWJ1dGVzCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ucword2Via2l0X2Rv
bV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMKK3dlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0
cmlidXRlX25zCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25z
X2FzX2h0bWxfY29sbGVjdGlvbgord2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9k
ZV9ucword2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZV9ucword2Via2l0X2Rv
bV9lbGVtZW50X2hhc19hdHRyaWJ1dGUKK3dlYmtpdF9kb21fZWxlbWVudF9oYXNfYXR0cmlidXRl
X25zCit3ZWJraXRfZG9tX2VsZW1lbnRfZm9jdXMKK3dlYmtpdF9kb21fZWxlbWVudF9ibHVyCit3
ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2ludG9fdmlldword2Via2l0X2RvbV9lbGVtZW50X3Nj
cm9sbF9pbnRvX3ZpZXdfaWZfbmVlZGVkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2J5X2xp
bmVzCit3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2J5X3BhZ2VzCit3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uCit3ZWJraXRf
ZG9tX2VsZW1lbnRfcXVlcnlfc2VsZWN0b3IKK3dlYmtpdF9kb21fZWxlbWVudF9xdWVyeV9zZWxl
Y3Rvcl9hbGwKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfdGFnX25hbWUKK3dlYmtpdF9kb21fZWxl
bWVudF9nZXRfYXR0cmlidXRlcword2Via2l0X2RvbV9lbGVtZW50X2dldF9zdHlsZQord2Via2l0
X2RvbV9lbGVtZW50X2dldF9pZAord2Via2l0X2RvbV9lbGVtZW50X3NldF9pZAord2Via2l0X2Rv
bV9lbGVtZW50X2dldF9uYW1lc3BhY2VfdXJpCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3ByZWZp
eAord2Via2l0X2RvbV9lbGVtZW50X2dldF9sb2NhbF9uYW1lCit3ZWJraXRfZG9tX2VsZW1lbnRf
Z2V0X29mZnNldF9sZWZ0Cit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF90b3AKK3dlYmtp
dF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3dpZHRoCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29m
ZnNldF9oZWlnaHQKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2xlZnQKK3dlYmtpdF9k
b21fZWxlbWVudF9nZXRfY2xpZW50X3RvcAord2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRf
d2lkdGgKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2hlaWdodAord2Via2l0X2RvbV9l
bGVtZW50X2dldF9zY3JvbGxfbGVmdAord2Via2l0X2RvbV9lbGVtZW50X3NldF9zY3JvbGxfbGVm
dAord2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfdG9wCit3ZWJraXRfZG9tX2VsZW1lbnRf
c2V0X3Njcm9sbF90b3AKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX3dpZHRoCit3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9oZWlnaHQKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRf
b2Zmc2V0X3BhcmVudAord2Via2l0X2RvbV9lbGVtZW50X2dldF9pbm5lcl9odG1sCit3ZWJraXRf
ZG9tX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb3V0ZXJf
aHRtbAord2Via2l0X2RvbV9lbGVtZW50X3NldF9vdXRlcl9odG1sCit3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X2NsYXNzX25hbWUKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfY2xhc3NfbmFtZQord2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9wcmV2aW91c19lbGVtZW50X3NpYmxpbmcKK3dlYmtpdF9kb21f
ZWxlbWVudF9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmcKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRf
Y2hpbGRyZW4KK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZAord2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQKK3dlYmtpdF9kb21fZWxlbWVu
dF9nZXRfY2hpbGRfZWxlbWVudF9jb3VudAord2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50
c19ieV90YWdfbmFtZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFt
ZV9ucword2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZ
UEVfRUxFTUVOVAorV0VCS0lUX0RPTV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0VMRU1FTlQKK1dF
QktJVF9ET01fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19FTEVNRU5UX0NMQVNTCitXRUJL
SVRfRE9NX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJL
aXRET01FdmVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01FdmVudDwvVElUTEU+CitXZWJLaXRE
T01FdmVudAorCitXRUJLSVRfRE9NX0VWRU5UX05PTkUKK1dFQktJVF9ET01fRVZFTlRfQ0FQVFVS
SU5HX1BIQVNFCitXRUJLSVRfRE9NX0VWRU5UX0FUX1RBUkdFVAorV0VCS0lUX0RPTV9FVkVOVF9C
VUJCTElOR19QSEFTRQorV0VCS0lUX0RPTV9FVkVOVF9NT1VTRURPV04KK1dFQktJVF9ET01fRVZF
TlRfTU9VU0VVUAorV0VCS0lUX0RPTV9FVkVOVF9NT1VTRU9WRVIKK1dFQktJVF9ET01fRVZFTlRf
TU9VU0VPVVQKK1dFQktJVF9ET01fRVZFTlRfTU9VU0VNT1ZFCitXRUJLSVRfRE9NX0VWRU5UX01P
VVNFRFJBRworV0VCS0lUX0RPTV9FVkVOVF9DTElDSworV0VCS0lUX0RPTV9FVkVOVF9EQkxDTElD
SworV0VCS0lUX0RPTV9FVkVOVF9LRVlET1dOCitXRUJLSVRfRE9NX0VWRU5UX0tFWVVQCitXRUJL
SVRfRE9NX0VWRU5UX0tFWVBSRVNTCitXRUJLSVRfRE9NX0VWRU5UX0RSQUdEUk9QCitXRUJLSVRf
RE9NX0VWRU5UX0ZPQ1VTCitXRUJLSVRfRE9NX0VWRU5UX0JMVVIKK1dFQktJVF9ET01fRVZFTlRf
U0VMRUNUCitXRUJLSVRfRE9NX0VWRU5UX0NIQU5HRQord2Via2l0X2RvbV9ldmVudF9zdG9wX3By
b3BhZ2F0aW9uCit3ZWJraXRfZG9tX2V2ZW50X3ByZXZlbnRfZGVmYXVsdAord2Via2l0X2RvbV9l
dmVudF9pbml0X2V2ZW50Cit3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF90eXBlCit3ZWJraXRf
ZG9tX2V2ZW50X2dldF90YXJnZXQKK3dlYmtpdF9kb21fZXZlbnRfZ2V0X2N1cnJlbnRfdGFyZ2V0
Cit3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZQord2Via2l0X2RvbV9ldmVudF9nZXRf
YnViYmxlcword2Via2l0X2RvbV9ldmVudF9nZXRfY2FuY2VsYWJsZQord2Via2l0X2RvbV9ldmVu
dF9nZXRfdGltZV9zdGFtcAord2Via2l0X2RvbV9ldmVudF9nZXRfc3JjX2VsZW1lbnQKK3dlYmtp
dF9kb21fZXZlbnRfZ2V0X3JldHVybl92YWx1ZQord2Via2l0X2RvbV9ldmVudF9zZXRfcmV0dXJu
X3ZhbHVlCit3ZWJraXRfZG9tX2V2ZW50X2dldF9jYW5jZWxfYnViYmxlCit3ZWJraXRfZG9tX2V2
ZW50X3NldF9jYW5jZWxfYnViYmxlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9N
RXZlbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0VWRU5UCitXRUJLSVRfRE9NX0VWRU5UCitXRUJL
SVRfRE9NX0lTX0VWRU5UCitXRUJLSVRfRE9NX0VWRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0VW
RU5UX0NMQVNTCitXRUJLSVRfRE9NX0VWRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9ldmVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4K
KzxGSUxFPldlYktpdERPTUtleWJvYXJkRXZlbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NS2V5
Ym9hcmRFdmVudDwvVElUTEU+CitXZWJLaXRET01LZXlib2FyZEV2ZW50CisKK1dFQktJVF9ET01f
S0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FUSU9OX1NUQU5EQVJECitXRUJLSVRfRE9NX0tFWUJPQVJE
X0VWRU5UX0tFWV9MT0NBVElPTl9MRUZUCitXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9M
T0NBVElPTl9SSUdIVAorV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlfTE9DQVRJT05fTlVN
UEFECit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9tb2RpZmllcl9zdGF0ZQord2Via2l0
X2RvbV9rZXlib2FyZF9ldmVudF9pbml0X2tleWJvYXJkX2V2ZW50Cit3ZWJraXRfZG9tX2tleWJv
YXJkX2V2ZW50X2dldF9rZXlfaWRlbnRpZmllcgord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9n
ZXRfa2V5X2xvY2F0aW9uCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9jdHJsX2tleQor
d2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfc2hpZnRfa2V5Cit3ZWJraXRfZG9tX2tleWJv
YXJkX2V2ZW50X2dldF9hbHRfa2V5Cit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9tZXRh
X2tleQord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2dyYXBoX2tleQorCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUtleWJvYXJkRXZlbnRDbGFzcworV0VCS0lUX0RP
TV9UWVBFX0tFWUJPQVJEX0VWRU5UCitXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UCitXRUJLSVRf
RE9NX0lTX0tFWUJPQVJEX0VWRU5UCitXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0NMQVNTCitX
RUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VWRU5UX0NMQVNTCitXRUJLSVRfRE9NX0tFWUJPQVJEX0VW
RU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9rZXlib2Fy
ZF9ldmVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TU1vdXNlRXZlbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NTW91c2VFdmVudDwvVElUTEU+CitX
ZWJLaXRET01Nb3VzZUV2ZW50CisKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfaW5pdF9tb3VzZV9l
dmVudAord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2NyZWVuX3gKK3dlYmtpdF9kb21fbW91
c2VfZXZlbnRfZ2V0X3NjcmVlbl95Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9jbGllbnRf
eAord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY2xpZW50X3kKK3dlYmtpdF9kb21fbW91c2Vf
ZXZlbnRfZ2V0X2N0cmxfa2V5Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9zaGlmdF9rZXkK
K3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2FsdF9rZXkKK3dlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X21ldGFfa2V5Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9idXR0b24KK3dlYmtp
dF9kb21fbW91c2VfZXZlbnRfZ2V0X3JlbGF0ZWRfdGFyZ2V0Cit3ZWJraXRfZG9tX21vdXNlX2V2
ZW50X2dldF9vZmZzZXRfeAord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfb2Zmc2V0X3kKK3dl
YmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3gKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3kK
K3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2Zyb21fZWxlbWVudAord2Via2l0X2RvbV9tb3Vz
ZV9ldmVudF9nZXRfdG9fZWxlbWVudAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERP
TU1vdXNlRXZlbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX01PVVNFX0VWRU5UCitXRUJLSVRfRE9N
X01PVVNFX0VWRU5UCitXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UCitXRUJLSVRfRE9NX01PVVNF
X0VWRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UX0NMQVNTCitXRUJLSVRfRE9N
X01PVVNFX0VWRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2Rv
bV9tb3VzZV9ldmVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldl
YktpdERPTU5hbWVkTm9kZU1hcDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01OYW1lZE5vZGVNYXA8
L1RJVExFPgorV2ViS2l0RE9NTmFtZWROb2RlTWFwCisKK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9t
YXBfZ2V0X25hbWVkX2l0ZW0KK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0
ZW0KK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW0KK3dlYmtpdF9k
b21fbmFtZWRfbm9kZV9tYXBfaXRlbQord2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbmFt
ZWRfaXRlbV9ucword2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbV9ucwor
d2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbV9ucword2Via2l0X2Rv
bV9uYW1lZF9ub2RlX21hcF9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NTmFtZWROb2RlTWFwQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUAor
V0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUAorV0VCS0lUX0RPTV9JU19OQU1FRF9OT0RFX01BUAor
V0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUF9DTEFTUworV0VCS0lUX0RPTV9JU19OQU1FRF9OT0RF
X01BUF9DTEFTUworV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUF9HRVRfQ0xBU1MKKworPFNVQlNF
Q1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01Ob2RlPC9GSUxFPgorPFRJVExFPldl
YktpdERPTU5vZGU8L1RJVExFPgorV2ViS2l0RE9NTm9kZQorCitXRUJLSVRfRE9NX05PREVfRUxF
TUVOVF9OT0RFCitXRUJLSVRfRE9NX05PREVfQVRUUklCVVRFX05PREUKK1dFQktJVF9ET01fTk9E
RV9URVhUX05PREUKK1dFQktJVF9ET01fTk9ERV9DREFUQV9TRUNUSU9OX05PREUKK1dFQktJVF9E
T01fTk9ERV9FTlRJVFlfUkVGRVJFTkNFX05PREUKK1dFQktJVF9ET01fTk9ERV9FTlRJVFlfTk9E
RQorV0VCS0lUX0RPTV9OT0RFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERQorV0VCS0lUX0RP
TV9OT0RFX0NPTU1FTlRfTk9ERQorV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX05PREUKK1dFQktJ
VF9ET01fTk9ERV9ET0NVTUVOVF9UWVBFX05PREUKK1dFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9G
UkFHTUVOVF9OT0RFCitXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVD
VEVECitXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HCitXRUJLSVRf
RE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HCitXRUJLSVRfRE9NX05PREVfRE9D
VU1FTlRfUE9TSVRJT05fQ09OVEFJTlMKK1dFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElP
Tl9DT05UQUlORURfQlkKK1dFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1F
TlRBVElPTl9TUEVDSUZJQword2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUKK3dlYmtpdF9k
b21fbm9kZV9yZXBsYWNlX2NoaWxkCit3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkCit3ZWJr
aXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkCit3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
Cit3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZV93aXRoX2Vycm9yCit3ZWJraXRfZG9tX25vZGVf
bm9ybWFsaXplCit3ZWJraXRfZG9tX25vZGVfaXNfc3VwcG9ydGVkCit3ZWJraXRfZG9tX25vZGVf
aXNfc2FtZV9ub2RlCit3ZWJraXRfZG9tX25vZGVfaXNfZXF1YWxfbm9kZQord2Via2l0X2RvbV9u
b2RlX2xvb2t1cF9wcmVmaXgKK3dlYmtpdF9kb21fbm9kZV9sb29rdXBfbmFtZXNwYWNlX3VyaQor
d2Via2l0X2RvbV9ub2RlX2lzX2RlZmF1bHRfbmFtZXNwYWNlCit3ZWJraXRfZG9tX25vZGVfY29t
cGFyZV9kb2N1bWVudF9wb3NpdGlvbgord2Via2l0X2RvbV9ub2RlX2NvbnRhaW5zCit3ZWJraXRf
ZG9tX25vZGVfZ2V0X25vZGVfbmFtZQord2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3ZhbHVlCit3
ZWJraXRfZG9tX25vZGVfc2V0X25vZGVfdmFsdWUKK3dlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV90
eXBlCit3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9ub2RlCit3ZWJraXRfZG9tX25vZGVfZ2V0
X2NoaWxkX25vZGVzCit3ZWJraXRfZG9tX25vZGVfZ2V0X2ZpcnN0X2NoaWxkCit3ZWJraXRfZG9t
X25vZGVfZ2V0X2xhc3RfY2hpbGQKK3dlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2libGlu
Zword2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcKK3dlYmtpdF9kb21fbm9kZV9nZXRf
b3duZXJfZG9jdW1lbnQKK3dlYmtpdF9kb21fbm9kZV9nZXRfYmFzZV91cmkKK3dlYmtpdF9kb21f
bm9kZV9nZXRfdGV4dF9jb250ZW50Cit3ZWJraXRfZG9tX25vZGVfc2V0X3RleHRfY29udGVudAor
d2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfZWxlbWVudAord2Via2l0X2RvbV9ub2RlX2Nsb25l
X25vZGUKK3dlYmtpdF9kb21fbm9kZV9nZXRfbmFtZXNwYWNlX3VyaQord2Via2l0X2RvbV9ub2Rl
X2dldF9wcmVmaXgKK3dlYmtpdF9kb21fbm9kZV9zZXRfcHJlZml4Cit3ZWJraXRfZG9tX25vZGVf
Z2V0X2xvY2FsX25hbWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01Ob2RlQ2xh
c3MKK1dFQktJVF9ET01fVFlQRV9OT0RFCitXRUJLSVRfRE9NX05PREUKK1dFQktJVF9ET01fSVNf
Tk9ERQorV0VCS0lUX0RPTV9OT0RFX0NMQVNTCitXRUJLSVRfRE9NX0lTX05PREVfQ0xBU1MKK1dF
QktJVF9ET01fTk9ERV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9k
b21fbm9kZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TU5vZGVJdGVyYXRvcjwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01Ob2RlSXRlcmF0b3I8L1RJVExF
PgorV2ViS2l0RE9NTm9kZUl0ZXJhdG9yCisKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9uZXh0
X25vZGUKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9wcmV2aW91c19ub2RlCit3ZWJraXRfZG9t
X25vZGVfaXRlcmF0b3JfZGV0YWNoCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3Jvb3QK
K3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfd2hhdF90b19zaG93Cit3ZWJraXRfZG9tX25v
ZGVfaXRlcmF0b3JfZ2V0X2ZpbHRlcgord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9yZWZl
cmVuY2Vfbm9kZQord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9wb2ludGVyX2JlZm9yZV9y
ZWZlcmVuY2Vfbm9kZQord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9leHBhbmRfZW50aXR5
X3JlZmVyZW5jZXMKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01Ob2RlSXRlcmF0
b3JDbGFzcworV0VCS0lUX0RPTV9UWVBFX05PREVfSVRFUkFUT1IKK1dFQktJVF9ET01fTk9ERV9J
VEVSQVRPUgorV0VCS0lUX0RPTV9JU19OT0RFX0lURVJBVE9SCitXRUJLSVRfRE9NX05PREVfSVRF
UkFUT1JfQ0xBU1MKK1dFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUl9DTEFTUworV0VCS0lUX0RP
TV9OT0RFX0lURVJBVE9SX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NTm9kZUxpc3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NTm9kZUxpc3Q8L1RJ
VExFPgorV2ViS2l0RE9NTm9kZUxpc3QKKword2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbQord2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdERPTU5vZGVMaXN0Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9OT0RFX0xJU1QKK1dFQktJVF9E
T01fTk9ERV9MSVNUCitXRUJLSVRfRE9NX0lTX05PREVfTElTVAorV0VCS0lUX0RPTV9OT0RFX0xJ
U1RfQ0xBU1MKK1dFQktJVF9ET01fSVNfTk9ERV9MSVNUX0NMQVNTCitXRUJLSVRfRE9NX05PREVf
TElTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fbm9kZV9s
aXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NUHJv
Y2Vzc2luZ0luc3RydWN0aW9uPC9GSUxFPgorPFRJVExFPldlYktpdERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbjwvVElUTEU+CitXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKword2Via2l0
X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2dldF90YXJnZXQKK3dlYmtpdF9kb21fcHJvY2Vz
c2luZ19pbnN0cnVjdGlvbl9nZXRfc2hlZXQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJL
aXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DbGFzcworV0VCS0lUX0RPTV9UWVBFX1BST0NFU1NJ
TkdfSU5TVFJVQ1RJT04KK1dFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTgorV0VCS0lU
X0RPTV9JU19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OCitXRUJLSVRfRE9NX1BST0NFU1NJTkdfSU5T
VFJVQ1RJT05fQ0xBU1MKK1dFQktJVF9ET01fSVNfUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9DTEFT
UworV0VCS0lUX0RPTV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NUmFuZ2U8L0ZJTEU+Cis8
VElUTEU+V2ViS2l0RE9NUmFuZ2U8L1RJVExFPgorV2ViS2l0RE9NUmFuZ2UKKworV0VCS0lUX0RP
TV9SQU5HRV9TVEFSVF9UT19TVEFSVAorV0VCS0lUX0RPTV9SQU5HRV9TVEFSVF9UT19FTkQKK1dF
QktJVF9ET01fUkFOR0VfRU5EX1RPX0VORAorV0VCS0lUX0RPTV9SQU5HRV9FTkRfVE9fU1RBUlQK
K1dFQktJVF9ET01fUkFOR0VfTk9ERV9CRUZPUkUKK1dFQktJVF9ET01fUkFOR0VfTk9ERV9BRlRF
UgorV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0JFRk9SRV9BTkRfQUZURVIKK1dFQktJVF9ET01fUkFO
R0VfTk9ERV9JTlNJREUKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0Cit3ZWJraXRfZG9tX3Jh
bmdlX3NldF9lbmQKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0X2JlZm9yZQord2Via2l0X2Rv
bV9yYW5nZV9zZXRfc3RhcnRfYWZ0ZXIKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZF9iZWZvcmUK
K3dlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZF9hZnRlcgord2Via2l0X2RvbV9yYW5nZV9jb2xsYXBz
ZQord2Via2l0X2RvbV9yYW5nZV9zZWxlY3Rfbm9kZQord2Via2l0X2RvbV9yYW5nZV9zZWxlY3Rf
bm9kZV9jb250ZW50cword2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX2JvdW5kYXJ5X3BvaW50cwor
d2Via2l0X2RvbV9yYW5nZV9kZWxldGVfY29udGVudHMKK3dlYmtpdF9kb21fcmFuZ2VfZXh0cmFj
dF9jb250ZW50cword2Via2l0X2RvbV9yYW5nZV9jbG9uZV9jb250ZW50cword2Via2l0X2RvbV9y
YW5nZV9pbnNlcnRfbm9kZQord2Via2l0X2RvbV9yYW5nZV9zdXJyb3VuZF9jb250ZW50cword2Vi
a2l0X2RvbV9yYW5nZV9jbG9uZV9yYW5nZQord2Via2l0X2RvbV9yYW5nZV90b19zdHJpbmcKK3dl
YmtpdF9kb21fcmFuZ2VfZGV0YWNoCit3ZWJraXRfZG9tX3JhbmdlX2NyZWF0ZV9jb250ZXh0dWFs
X2ZyYWdtZW50Cit3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfbm9kZQord2Via2l0X2RvbV9yYW5n
ZV9pbnRlcnNlY3RzX25vZGUKK3dlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9wb2ludAord2Via2l0
X2RvbV9yYW5nZV9pc19wb2ludF9pbl9yYW5nZQord2Via2l0X2RvbV9yYW5nZV9nZXRfc3RhcnRf
Y29udGFpbmVyCit3ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9vZmZzZXQKK3dlYmtpdF9kb21f
cmFuZ2VfZ2V0X2VuZF9jb250YWluZXIKK3dlYmtpdF9kb21fcmFuZ2VfZ2V0X2VuZF9vZmZzZXQK
K3dlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbGxhcHNlZAord2Via2l0X2RvbV9yYW5nZV9nZXRfY29t
bW9uX2FuY2VzdG9yX2NvbnRhaW5lcgord2Via2l0X2RvbV9yYW5nZV9nZXRfdGV4dAorCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTVJhbmdlQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9S
QU5HRQorV0VCS0lUX0RPTV9SQU5HRQorV0VCS0lUX0RPTV9JU19SQU5HRQorV0VCS0lUX0RPTV9S
QU5HRV9DTEFTUworV0VCS0lUX0RPTV9JU19SQU5HRV9DTEFTUworV0VCS0lUX0RPTV9SQU5HRV9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fcmFuZ2VfZ2V0X3R5
cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01UZXh0PC9GSUxFPgor
PFRJVExFPldlYktpdERPTVRleHQ8L1RJVExFPgorV2ViS2l0RE9NVGV4dAorCit3ZWJraXRfZG9t
X3RleHRfc3BsaXRfdGV4dAord2Via2l0X2RvbV90ZXh0X2dldF93aG9sZV90ZXh0Cit3ZWJraXRf
ZG9tX3RleHRfcmVwbGFjZV93aG9sZV90ZXh0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NVGV4dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfVEVYVAorV0VCS0lUX0RPTV9URVhUCitX
RUJLSVRfRE9NX0lTX1RFWFQKK1dFQktJVF9ET01fVEVYVF9DTEFTUworV0VCS0lUX0RPTV9JU19U
RVhUX0NMQVNTCitXRUJLSVRfRE9NX1RFWFRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZh
dGU+Cit3ZWJraXRfZG9tX3RleHRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01UcmVlV2Fsa2VyPC9GSUxFPgorPFRJVExFPldlYktpdERPTVRyZWVXYWxr
ZXI8L1RJVExFPgorV2ViS2l0RE9NVHJlZVdhbGtlcgorCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2Vy
X3BhcmVudF9ub2RlCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2ZpcnN0X2NoaWxkCit3ZWJraXRf
ZG9tX3RyZWVfd2Fsa2VyX2xhc3RfY2hpbGQKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfcHJldmlv
dXNfc2libGluZword2Via2l0X2RvbV90cmVlX3dhbGtlcl9uZXh0X3NpYmxpbmcKK3dlYmtpdF9k
b21fdHJlZV93YWxrZXJfcHJldmlvdXNfbm9kZQord2Via2l0X2RvbV90cmVlX3dhbGtlcl9uZXh0
X25vZGUKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X3Jvb3QKK3dlYmtpdF9kb21fdHJlZV93
YWxrZXJfZ2V0X3doYXRfdG9fc2hvdword2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfZmlsdGVy
Cit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9jdXJyZW50X25vZGUKK3dlYmtpdF9kb21fdHJl
ZV93YWxrZXJfc2V0X2N1cnJlbnRfbm9kZQord2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfZXhw
YW5kX2VudGl0eV9yZWZlcmVuY2VzCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9N
VHJlZVdhbGtlckNsYXNzCitXRUJLSVRfRE9NX1RZUEVfVFJFRV9XQUxLRVIKK1dFQktJVF9ET01f
VFJFRV9XQUxLRVIKK1dFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIKK1dFQktJVF9ET01fVFJFRV9X
QUxLRVJfQ0xBU1MKK1dFQktJVF9ET01fSVNfVFJFRV9XQUxLRVJfQ0xBU1MKK1dFQktJVF9ET01f
VFJFRV9XQUxLRVJfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9t
X3RyZWVfd2Fsa2VyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2Vi
S2l0RE9NVUlFdmVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01VSUV2ZW50PC9USVRMRT4KK1dl
YktpdERPTVVJRXZlbnQKKword2Via2l0X2RvbV91aV9ldmVudF9pbml0X3VpX2V2ZW50Cit3ZWJr
aXRfZG9tX3VpX2V2ZW50X2dldF92aWV3Cit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9kZXRhaWwK
K3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2tleV9jb2RlCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dl
dF9jaGFyX2NvZGUKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2xheWVyX3gKK3dlYmtpdF9kb21f
dWlfZXZlbnRfZ2V0X2xheWVyX3kKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3BhZ2VfeAord2Vi
a2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV95CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NVUlFdmVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQKK1dFQktJVF9ET01f
VUlfRVZFTlQKK1dFQktJVF9ET01fSVNfVUlfRVZFTlQKK1dFQktJVF9ET01fVUlfRVZFTlRfQ0xB
U1MKK1dFQktJVF9ET01fSVNfVUlfRVZFTlRfQ0xBU1MKK1dFQktJVF9ET01fVUlfRVZFTlRfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF90
eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NV2hlZWxFdmVudDwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01XaGVlbEV2ZW50PC9USVRMRT4KK1dlYktpdERPTVdoZWVs
RXZlbnQKKword2Via2l0X2RvbV93aGVlbF9ldmVudF9pbml0X3doZWVsX2V2ZW50Cit3ZWJraXRf
ZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YV94Cit3ZWJraXRfZG9tX3doZWVsX2V2ZW50
X2dldF93aGVlbF9kZWx0YV95Cit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0
YQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTVdoZWVsRXZlbnRDbGFzcworV0VC
S0lUX0RPTV9UWVBFX1dIRUVMX0VWRU5UCitXRUJLSVRfRE9NX1dIRUVMX0VWRU5UCitXRUJLSVRf
RE9NX0lTX1dIRUVMX0VWRU5UCitXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0NMQVNTCitXRUJLSVRf
RE9NX0lTX1dIRUVMX0VWRU5UX0NMQVNTCitXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0dFVF9DTEFT
UworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfdHlw
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUJsb2I8L0ZJTEU+Cis8
VElUTEU+V2ViS2l0RE9NQmxvYjwvVElUTEU+CitXZWJLaXRET01CbG9iCisKK3dlYmtpdF9kb21f
YmxvYl9nZXRfc2l6ZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUJsb2JDbGFz
cworV0VCS0lUX0RPTV9UWVBFX0JMT0IKK1dFQktJVF9ET01fQkxPQgorV0VCS0lUX0RPTV9JU19C
TE9CCitXRUJLSVRfRE9NX0JMT0JfQ0xBU1MKK1dFQktJVF9ET01fSVNfQkxPQl9DTEFTUworV0VC
S0lUX0RPTV9CTE9CX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2Rv
bV9ibG9iX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9N
RmlsZTwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01GaWxlPC9USVRMRT4KK1dlYktpdERPTUZpbGUK
Kword2Via2l0X2RvbV9maWxlX2dldF9uYW1lCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NRmlsZUNsYXNzCitXRUJLSVRfRE9NX1RZUEVfRklMRQorV0VCS0lUX0RPTV9GSUxFCitX
RUJLSVRfRE9NX0lTX0ZJTEUKK1dFQktJVF9ET01fRklMRV9DTEFTUworV0VCS0lUX0RPTV9JU19G
SUxFX0NMQVNTCitXRUJLSVRfRE9NX0ZJTEVfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZh
dGU+Cit3ZWJraXRfZG9tX2ZpbGVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01GaWxlTGlzdDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01GaWxlTGlzdDwv
VElUTEU+CitXZWJLaXRET01GaWxlTGlzdAorCit3ZWJraXRfZG9tX2ZpbGVfbGlzdF9pdGVtCit3
ZWJraXRfZG9tX2ZpbGVfbGlzdF9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
V2ViS2l0RE9NRmlsZUxpc3RDbGFzcworV0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVAorV0VCS0lU
X0RPTV9GSUxFX0xJU1QKK1dFQktJVF9ET01fSVNfRklMRV9MSVNUCitXRUJLSVRfRE9NX0ZJTEVf
TElTVF9DTEFTUworV0VCS0lUX0RPTV9JU19GSUxFX0xJU1RfQ0xBU1MKK1dFQktJVF9ET01fRklM
RV9MSVNUX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9maWxl
X2xpc3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dDwvVElUTEU+CitXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfZ2V0X2NoYXJzZXQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9zZXRfY2hhcnNldAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9jb29yZHMK
K3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfY29vcmRzCit3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWZsYW5nCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfc2V0X2hyZWZsYW5nCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X25h
bWUKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfbmFtZQord2Via2l0X2RvbV9o
dG1sX2FuY2hvcl9lbGVtZW50X2dldF9yZWwKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9zZXRfcmVsCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Jldgord2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9yZXYKK3dlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9nZXRfc2hhcGUKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfc2hh
cGUKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdGFyZ2V0Cit3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3RhcmdldAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
dHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3RleHQKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJlZgord2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X3NldF9ocmVmCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3By
b3RvY29sCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Byb3RvY29sCit3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hvc3QKK3dlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9zZXRfaG9zdAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9o
b3N0bmFtZQord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ob3N0bmFtZQord2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wb3J0Cit3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfc2V0X3BvcnQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
cGF0aG5hbWUKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGF0aG5hbWUKK3dl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfc2VhcmNoCit3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfc2V0X3NlYXJjaAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X2dldF9oYXNoCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hhc2gKKworPFNV
QlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudENsYXNzCitXRUJL
SVRfRE9NX1RZUEVfSFRNTF9BTkNIT1JfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9F
TEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQKK1dFQktJVF9ET01fSFRN
TF9BTkNIT1JfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfQU5DSE9SX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3R5cGUK
KzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudDwvVElUTEU+CitXZWJL
aXRET01IVE1MQXBwbGV0RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRf
Z2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FsaWduCit3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FsdAord2Via2l0X2RvbV9odG1sX2FwcGxl
dF9lbGVtZW50X3NldF9hbHQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYXJj
aGl2ZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hcmNoaXZlCit3ZWJraXRf
ZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2NvZGUKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRf
ZWxlbWVudF9zZXRfY29kZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9jb2Rl
X2Jhc2UKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfY29kZV9iYXNlCit3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2hlaWdodAord2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X3NldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9n
ZXRfaHNwYWNlCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2hzcGFjZQord2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfYXBw
bGV0X2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRf
b2JqZWN0Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X29iamVjdAord2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF92c3BhY2UKK3dlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9zZXRfdnNwYWNlCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0
X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3dpZHRoCisKKzxTVUJT
RUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRDbGFzcworV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQVBQTEVUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxF
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
QVBQTEVUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVF9D
TEFTUworV0VCS0lUX0RPTV9IVE1MX0FQUExFVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF90eXBlCis8
L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50PC9G
SUxFPgorPFRJVExFPldlYktpdERPTUhUTUxBcmVhRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfYWx0Cit3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9hbHQKK3dlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfZ2V0X2Nvb3Jkcword2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfY29v
cmRzCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ub19ocmVmCit3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X3NldF9ub19ocmVmCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X2dldF9zaGFwZQord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfc2hhcGUKK3dl
YmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3RhcmdldAord2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9zZXRfdGFyZ2V0Cit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9o
cmVmCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ocmVmCit3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X2dldF9wcm90b2NvbAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9nZXRfaG9zdAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaG9zdG5hbWUKK3dl
YmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BvcnQKK3dlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfZ2V0X3BhdGhuYW1lCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9z
ZWFyY2gKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hhc2gKKworPFNVQlNFQ1RJ
T04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9U
WVBFX0hUTUxfQVJFQV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQVJFQV9FTEVNRU5UCitXRUJL
SVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQVJFQV9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9N
X0hUTUxfQVJFQV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTUhUTUxCUkVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
SFRNTEJSRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MQlJFbGVtZW50CisKK3dlYmtpdF9k
b21faHRtbF9icl9lbGVtZW50X2dldF9jbGVhcgord2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRf
c2V0X2NsZWFyCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEJSRWxlbWVu
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9CUl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
QlJfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0JSX0VMRU1FTlQKK1dFQktJVF9ET01fSFRN
TF9CUl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQlJfRUxFTUVOVF9DTEFTUwor
V0VCS0lUX0RPTV9IVE1MX0JSX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZh
dGU+Cit3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxCYXNlRWxlbWVudDwvRklMRT4KKzxUSVRMRT5X
ZWJLaXRET01IVE1MQmFzZUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50
CisKK3dlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X2hyZWYKK3dlYmtpdF9kb21faHRt
bF9iYXNlX2VsZW1lbnRfc2V0X2hyZWYKK3dlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0
X3RhcmdldAord2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9zZXRfdGFyZ2V0CisKKzxTVUJT
RUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50Q2xhc3MKK1dFQktJVF9E
T01fVFlQRV9IVE1MX0JBU0VfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0JBU0VfRUxFTUVOVAor
V0VCS0lUX0RPTV9JU19IVE1MX0JBU0VfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0JBU0VfRUxF
TUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0JBU0VfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9IVE1MX0JBU0VfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MQm9keUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2Vi
S2l0RE9NSFRNTEJvZHlFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAor
Cit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9hX2xpbmsKK3dlYmtpdF9kb21faHRt
bF9ib2R5X2VsZW1lbnRfc2V0X2FfbGluaword2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9n
ZXRfYmFja2dyb3VuZAord2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYmFja2dyb3Vu
ZAord2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYmdfY29sb3IKK3dlYmtpdF9kb21f
aHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JnX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVt
ZW50X2dldF9saW5rCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9saW5rCit3ZWJr
aXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF90ZXh0Cit3ZWJraXRfZG9tX2h0bWxfYm9keV9l
bGVtZW50X3NldF90ZXh0Cit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF92X2xpbmsK
K3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3ZfbGluaworCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUhUTUxCb2R5RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVf
SFRNTF9CT0RZX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQKK1dFQktJVF9E
T01fSVNfSFRNTF9CT0RZX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlRfQ0xB
U1MKK1dFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRN
TF9CT0RZX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRf
ZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgor
PEZJTEU+V2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKwor
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9hdXRvZm9jdXMKK3dlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9zZXRfYXV0b2ZvY3VzCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfZ2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0
X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm0KK3dlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfYnV0dG9uX3R5cGUKK3dlYmtpdF9kb21faHRt
bF9idXR0b25fZWxlbWVudF9zZXRfYnV0dG9uX3R5cGUKK3dlYmtpdF9kb21faHRtbF9idXR0b25f
ZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9uYW1l
Cit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbHVlCit3ZWJraXRfZG9tX2h0
bWxfYnV0dG9uX2VsZW1lbnRfc2V0X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1l
bnRfZ2V0X3dpbGxfdmFsaWRhdGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9CVVRUT05fRUxFTUVO
VAorV0VCS0lUX0RPTV9IVE1MX0JVVFRPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfQlVU
VE9OX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CVVRUT05fRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfQlVUVE9O
X0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0
bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklM
RT5XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1M
Q2FudmFzRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudAorCit3ZWJr
aXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfY2Fu
dmFzX2VsZW1lbnRfc2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0
X2hlaWdodAord2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X3NldF9oZWlnaHQKKworPFNV
QlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudENsYXNzCitXRUJL
SVRfRE9NX1RZUEVfSFRNTF9DQU5WQVNfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0NBTlZBU19F
TEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfQ0FOVkFTX0VMRU1FTlQKK1dFQktJVF9ET01fSFRN
TF9DQU5WQVNfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0NBTlZBU19FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X3R5cGUK
KzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MQ29sbGVjdGlvbjwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQ29sbGVjdGlvbjwvVElUTEU+CitXZWJLaXRET01I
VE1MQ29sbGVjdGlvbgorCit3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtCit3ZWJraXRf
ZG9tX2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVtCit3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlv
bl9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb25DbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTgorV0VCS0lUX0RPTV9I
VE1MX0NPTExFQ1RJT04KK1dFQktJVF9ET01fSVNfSFRNTF9DT0xMRUNUSU9OCitXRUJLSVRfRE9N
X0hUTUxfQ09MTEVDVElPTl9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT05fQ0xB
U1MKK1dFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQ
cml2YXRlPgord2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4K
KworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MRExpc3RFbGVtZW50PC9GSUxFPgorPFRJ
VExFPldlYktpdERPTUhUTUxETGlzdEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTERMaXN0
RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfZ2V0X2NvbXBhY3QKK3dl
YmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdAorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBF
X0hUTUxfRF9MSVNUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9EX0xJU1RfRUxFTUVOVAorV0VC
S0lUX0RPTV9JU19IVE1MX0RfTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRF9MSVNUX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9EX0xJU1RfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX0RfTElTVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+
CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQ8L0ZJTEU+
Cis8VElUTEU+V2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9N
SFRNTERpcmVjdG9yeUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50
X2dldF9jb21wYWN0Cit3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfc2V0X2NvbXBh
Y3QKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVu
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVAorV0VCS0lUX0RP
TV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfRElSRUNUT1JZX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9ESVJFQ1RPUllfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RP
TV9JU19IVE1MX0RJUkVDVE9SWV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRElSRUNU
T1JZX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9t
X2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRET01IVE1MRGl2RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01I
VE1MRGl2RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRGl2RWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfZGl2X2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1l
bnRfc2V0X2FsaWduCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTERpdkVs
ZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElWX0VMRU1FTlQKK1dFQktJVF9ET01f
SFRNTF9ESVZfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0RJVl9FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfRElWX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9ESVZfRUxFTUVO
VF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0RJVl9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTERvY3VtZW50PC9GSUxFPgor
PFRJVExFPldlYktpdERPTUhUTUxEb2N1bWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRG9jdW1l
bnQKKword2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2Nsb3NlCit3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfY2xlYXIKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jYXB0dXJlX2V2ZW50cword2Vi
a2l0X2RvbV9odG1sX2RvY3VtZW50X3JlbGVhc2VfZXZlbnRzCit3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2hlaWdodAord2Vi
a2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9kaXIKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9z
ZXRfZGlyCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2JnX2NvbG9yCit3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfc2V0X2JnX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0
X2ZnX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2ZnX2NvbG9yCit3ZWJraXRf
ZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2FsaW5rX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1l
bnRfc2V0X2FsaW5rX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2xpbmtfY29s
b3IKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfbGlua19jb2xvcgord2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X2dldF92bGlua19jb2xvcgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3Nl
dF92bGlua19jb2xvcgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9kZXNpZ25fbW9kZQor
d2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9kZXNpZ25fbW9kZQord2Via2l0X2RvbV9odG1s
X2RvY3VtZW50X2dldF9jb21wYXRfbW9kZQord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9z
Y3JpcHRzCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2VtYmVkcword2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X2dldF9wbHVnaW5zCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RE9NSFRNTERvY3VtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0RPQ1VNRU5UCitXRUJL
SVRfRE9NX0hUTUxfRE9DVU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVAorV0VCS0lU
X0RPTV9IVE1MX0RPQ1VNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlRfQ0xB
U1MKK1dFQktJVF9ET01fSFRNTF9ET0NVTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJp
dmF0ZT4KK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktp
dERPTUhUTUxFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxFbGVtZW50CisKK3dlYmtpdF9k
b21faHRtbF9lbGVtZW50X2NsaWNrCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdGl0bGUK
K3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90aXRsZQord2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfZ2V0X2xhbmcKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9sYW5nCit3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9nZXRfZGlyCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfZGlyCit3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdGFiX2luZGV4Cit3ZWJraXRfZG9tX2h0bWxfZWxl
bWVudF9zZXRfdGFiX2luZGV4Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfYWNjZXNzX2tl
eQord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2FjY2Vzc19rZXkKK3dlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9pbm5lcl90ZXh0Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfaW5u
ZXJfdGV4dAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X291dGVyX3RleHQKK3dlYmtpdF9k
b21faHRtbF9lbGVtZW50X3NldF9vdXRlcl90ZXh0Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9n
ZXRfY29udGVudF9lZGl0YWJsZQord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2NvbnRlbnRf
ZWRpdGFibGUKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pc19jb250ZW50X2VkaXRhYmxl
Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfaW5uZXJfaHRtbAord2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfZ2V0X291dGVyX2h0bWwKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5l
cl9odG1sCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfb3V0ZXJfaHRtbAord2Via2l0X2Rv
bV9odG1sX2VsZW1lbnRfZ2V0X2NoaWxkcmVuCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NSFRNTEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVAorV0VC
S0lUX0RPTV9IVE1MX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSFRNTF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRl
Pgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudAor
Cit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRt
bF9lbWJlZF9lbGVtZW50X3NldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
Z2V0X2hlaWdodAord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X2hlaWdodAord2Vi
a2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9lbWJl
ZF9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfc3Jj
Cit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfc3JjCit3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9nZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVu
dF9zZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfd2lkdGgK
K3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF93aWR0aAorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBF
X0hUTUxfRU1CRURfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0VNQkVEX0VMRU1FTlQKK1dFQktJ
VF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRU1CRURfRUxFTUVO
VF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSFRNTF9FTUJFRF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgor
d2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50PC9GSUxFPgorPFRJVExF
PldlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEZpZWxk
U2V0RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Zvcm0K
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50Q2xh
c3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfRklFTERfU0VUX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVO
VAorV0VCS0lUX0RPTV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lT
X0hUTUxfRklFTERfU0VUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9GSUVMRF9TRVRf
RUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRt
bF9maWVsZF9zZXRfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxG
SUxFPldlYktpdERPTUhUTUxGb250RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1M
Rm9udEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50CisKK3dlYmtpdF9k
b21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVt
ZW50X3NldF9jb2xvcgord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfZmFjZQord2Vi
a2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfZmFjZQord2Via2l0X2RvbV9odG1sX2ZvbnRf
ZWxlbWVudF9nZXRfc2l6ZQord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZQor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxGb250RWxlbWVudENsYXNzCitX
RUJLSVRfRE9NX1RZUEVfSFRNTF9GT05UX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9GT05UX0VM
RU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9G
T05UX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSFRNTF9GT05UX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+
CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50PC9GSUxFPgorPFRJ
VExFPldlYktpdERPTUhUTUxGb3JtRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQKKword2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zdWJtaXQKK3dlYmtpdF9kb21f
aHRtbF9mb3JtX2VsZW1lbnRfcmVzZXQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0
X2FjY2VwdF9jaGFyc2V0Cit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hY2NlcHRf
Y2hhcnNldAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWN0aW9uCit3ZWJraXRf
ZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hY3Rpb24KK3dlYmtpdF9kb21faHRtbF9mb3JtX2Vs
ZW1lbnRfZ2V0X2VuY3R5cGUKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2VuY3R5
cGUKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VuY29kaW5nCit3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X3NldF9lbmNvZGluZword2Via2l0X2RvbV9odG1sX2Zvcm1fZWxl
bWVudF9nZXRfbWV0aG9kCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9tZXRob2QK
K3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9m
b3JtX2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X3Rh
cmdldAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfdGFyZ2V0Cit3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbGVtZW50cword2Via2l0X2RvbV9odG1sX2Zvcm1fZWxl
bWVudF9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX0ZPUk1fRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0ZP
Uk1fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVF9HRVRfQ0xBU1MK
KworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0
X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MRnJhbWVF
bGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQ8L1RJVExFPgor
V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVu
dF9nZXRfZnJhbWVfYm9yZGVyCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfZnJh
bWVfYm9yZGVyCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19kZXNjCit3
ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19kZXNjCit3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX2hlaWdodAord2Via2l0X2RvbV9odG1sX2ZyYW1l
X2VsZW1lbnRfc2V0X21hcmdpbl9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X2dldF9tYXJnaW5fd2lkdGgKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9tYXJn
aW5fd2lkdGgKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2ZyYW1lX2Vs
ZW1lbnRfZ2V0X25vX3Jlc2l6ZQord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X25v
X3Jlc2l6ZQord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3Njcm9sbGluZword2Vi
a2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X3Njcm9sbGluZword2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X3NyYword2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0
X3NyYword2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQK
K3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdword2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9nZXRfaGVpZ2h0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRN
TEZyYW1lRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9FTEVNRU5UCitX
RUJLSVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9GUkFNRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lT
X0hUTUxfRlJBTUVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VMRU1FTlRf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUhUTUxGcmFtZVNldEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEZyYW1lU2V0
RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50CisKK3dlYmtpdF9k
b21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfY29scword2Via2l0X2RvbV9odG1sX2ZyYW1l
X3NldF9lbGVtZW50X3NldF9jb2xzCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRf
Z2V0X3Jvd3MKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfcm93cworCis8
U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRDbGFzcwor
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9G
UkFNRV9TRVRfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UCitX
RUJLSVRfRE9NX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRN
TF9GUkFNRV9TRVRfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVN
RU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2Zy
YW1lX3NldF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+
V2ViS2l0RE9NSFRNTEhSRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MSFJFbGVt
ZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxIUkVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2hy
X2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfYWxpZ24K
K3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF9ub19zaGFkZQord2Via2l0X2RvbV9odG1s
X2hyX2VsZW1lbnRfc2V0X25vX3NoYWRlCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRf
c2l6ZQord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3NpemUKK3dlYmtpdF9kb21faHRt
bF9ocl9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3dp
ZHRoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEhSRWxlbWVudENsYXNz
CitXRUJLSVRfRE9NX1RZUEVfSFRNTF9IUl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfSFJfRUxF
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0hSX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9IUl9F
TEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9IVE1MX0hSX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTUhUTUxIZWFkRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRE
T01IVE1MSGVhZEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50CisKK3dl
YmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfZ2V0X3Byb2ZpbGUKK3dlYmtpdF9kb21faHRtbF9o
ZWFkX2VsZW1lbnRfc2V0X3Byb2ZpbGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRE
T01IVE1MSGVhZEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRF9FTEVNRU5U
CitXRUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9F
TEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lT
X0hUTUxfSEVBRF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2hlYWRfZWxl
bWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhU
TUxIZWFkaW5nRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1l
bnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50CisKK3dlYmtpdF9kb21faHRt
bF9oZWFkaW5nX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVt
ZW50X3NldF9hbGlnbgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxIZWFk
aW5nRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFESU5HX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9IRUFESU5HX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9IRUFESU5H
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9IRUFESU5HX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSVNfSFRNTF9IRUFESU5HX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9IRUFESU5H
X0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0
bWxfaGVhZGluZ19lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxI
dG1sRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQKKword2Via2l0X2Rv
bV9odG1sX2h0bWxfZWxlbWVudF9nZXRfdmVyc2lvbgord2Via2l0X2RvbV9odG1sX2h0bWxfZWxl
bWVudF9zZXRfdmVyc2lvbgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxI
dG1sRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9IVE1MX0VMRU1FTlQKK1dFQktJ
VF9ET01fSFRNTF9IVE1MX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VMRU1FTlQK
K1dFQktJVF9ET01fSFRNTF9IVE1MX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9I
VE1MX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9IVE1MX0VMRU1FTlRfR0VUX0NMQVNT
CisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQ8L1RJVExF
PgorV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9hbGln
bgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9mcmFtZV9ib3JkZXIKK3dlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfZnJhbWVfYm9yZGVyCit3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVt
ZW50X3NldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19k
ZXNjCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2xvbmdfZGVzYword2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5faGVpZ2h0Cit3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9pZnJh
bWVfZWxlbWVudF9nZXRfbWFyZ2luX3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfc2V0X21hcmdpbl93aWR0aAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9u
YW1lCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21f
aHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xsaW5nCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1l
X2VsZW1lbnRfc2V0X3Njcm9sbGluZword2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dl
dF9zcmMKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc3JjCit3ZWJraXRfZG9t
X2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2Vs
ZW1lbnRfc2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRl
bnRfZG9jdW1lbnQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93
aW5kb3cKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9JRlJBTUVfRUxFTUVOVAorV0VCS0lUX0RPTV9I
VE1MX0lGUkFNRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0lG
UkFNRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlRfR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQ8L1RJ
VExFPgorV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2Vf
ZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X25hbWUK
K3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfc2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9n
ZXRfYWx0Cit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfYWx0Cit3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYm9yZGVyCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfYm9yZGVyCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaGVpZ2h0
Cit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfaHNwYWNlCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9zZXRfaHNwYWNlCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaXNfbWFwCit3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaXNfbWFwCit3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfbG9uZ19kZXNjCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9zZXRfbG9uZ19kZXNjCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc3JjCit3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfc3JjCit3ZWJraXRfZG9tX2h0bWxfaW1h
Z2VfZWxlbWVudF9nZXRfdXNlX21hcAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0
X3VzZV9tYXAKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF92c3BhY2UKK3dlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF92c3BhY2UKK3dlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3dp
ZHRoCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY29tcGxldGUKK3dlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9sb3dzcmMKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X3NldF9sb3dzcmMKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1
cmFsX2hlaWdodAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVyYWxfd2lk
dGgKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF94Cit3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfeQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU1BR0VfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX0lNQUdFX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9F
TEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfSU1BR0VfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9J
U19IVE1MX0lNQUdFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9JTUFHRV9FTEVNRU5U
X0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9zZWxlY3QKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9h
Y2NlcHQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hY2NlcHQKK3dlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hbHQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9hbHQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvZm9jdXMK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvZm9jdXMKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9kZWZhdWx0X2NoZWNrZWQKK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9jaGVja2VkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfY2hlY2tlZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkCit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9mb3JtCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfZmlsZXMKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9maWxlcword2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2hlaWdodAord2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfc2V0X2hlaWdodAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2lu
ZGV0ZXJtaW5hdGUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbmRldGVybWlu
YXRlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbWF4X2xlbmd0aAord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X21heF9sZW5ndGgKK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9tdWx0aXBsZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X211bHRpcGxlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbmFtZQord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9yZWFkX29ubHkKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9zaXplCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2l6ZQord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3NyYword2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X3NyYword2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2lucHV0X3R5cGUK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbnB1dF90eXBlCit3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF92YWx1ZQord2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X2RlZmF1bHRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF92YWx1ZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlCit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF93aWR0aAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X3dpbGxfdmFsaWRhdGUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hbGlnbgor
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9nZXRfdXNlX21hcAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3VzZV9tYXAKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlX3R5
cGUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlCisKKzxTVUJTRUNU
SU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudENsYXNzCitXRUJLSVRfRE9N
X1RZUEVfSFRNTF9JTlBVVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfSU5QVVRfRUxFTUVOVAor
V0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9JTlBVVF9F
TEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZh
dGU+Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgor
Cis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxMSUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+
V2ViS2l0RE9NSFRNTExJRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MTElFbGVtZW50CisK
K3dlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRt
bF9saV9lbGVtZW50X3NldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dl
dF92YWx1ZQord2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfc2V0X3ZhbHVlCisKKzxTVUJTRUNU
SU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTExJRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9MSV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTElfRUxFTUVOVAorV0VCS0lUX0RP
TV9JU19IVE1MX0xJX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9MSV9FTEVNRU5UX0NMQVNTCitX
RUJLSVRfRE9NX0lTX0hUTUxfTElfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0xJX0VM
RU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxf
bGlfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktp
dERPTUhUTUxMYWJlbEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTExhYmVsRWxl
bWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50CisKK3dlYmtpdF9kb21faHRt
bF9sYWJlbF9lbGVtZW50X2dldF9mb3JtCit3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9n
ZXRfaHRtbF9mb3IKK3dlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X3NldF9odG1sX2Zvcgor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRDbGFzcwor
V0VCS0lUX0RPTV9UWVBFX0hUTUxfTEFCRUxfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0xBQkVM
X0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9MQUJFTF9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfTEFCRUxfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0xBQkVMX0VMRU1FTlRf
Q0xBU1MKK1dFQktJVF9ET01fSFRNTF9MQUJFTF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X3R5cGUKKzwv
U0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudDwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudDwvVElUTEU+CitXZWJLaXRE
T01IVE1MTGVnZW5kRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0
X2Zvcm0KK3dlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9k
b21faHRtbF9sZWdlbmRfZWxlbWVudF9zZXRfYWxpZ24KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
CitXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9M
RUdFTkRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UCitXRUJLSVRfRE9N
X0lTX0hUTUxfTEVHRU5EX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxFTUVOVF9D
TEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0xFR0VORF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9N
X0hUTUxfTEVHRU5EX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MTGlua0VsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAor
Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9kaXNhYmxlZAord2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9zZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfZ2V0X2NoYXJzZXQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2NoYXJzZXQK
K3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hyZWYKK3dlYmtpdF9kb21faHRtbF9s
aW5rX2VsZW1lbnRfc2V0X2hyZWYKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hy
ZWZsYW5nCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9ocmVmbGFuZword2Via2l0
X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfbWVkaWEKK3dlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfc2V0X21lZGlhCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZWwKK3dl
YmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3JlbAord2Via2l0X2RvbV9odG1sX2xpbmtf
ZWxlbWVudF9nZXRfcmV2Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9yZXYKK3dl
YmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3RhcmdldAord2Via2l0X2RvbV9odG1sX2xp
bmtfZWxlbWVudF9zZXRfdGFyZ2V0Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90
eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3R5cGVfYXR0cgord2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2hlZXQKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXZWJLaXRET01IVE1MTGlua0VsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TElOS19FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTElOS19FTEVNRU5UCitXRUJLSVRfRE9NX0lT
X0hUTUxfTElOS19FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTElOS19FTEVNRU5UX0NMQVNTCitX
RUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfTElO
S19FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxF
PldlYktpdERPTUhUTUxNYXBFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxNYXBF
bGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxNYXBFbGVtZW50CisKK3dlYmtpdF9kb21faHRt
bF9tYXBfZWxlbWVudF9nZXRfYXJlYXMKK3dlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRf
bmFtZQord2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X3NldF9uYW1lCisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBF
X0hUTUxfTUFQX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9NQVBfRUxFTUVOVAorV0VCS0lUX0RP
TV9JU19IVE1MX01BUF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSVNfSFRNTF9NQVBfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX01B
UF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9o
dG1sX21hcF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKword2Vi
a2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zdGFydAord2Via2l0X2RvbV9odG1sX21hcnF1
ZWVfZWxlbWVudF9zdG9wCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTE1h
cnF1ZWVFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX01BUlFVRUVfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX01BUlFVRUVfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX01BUlFV
RUVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX01BUlFVRUVfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX01BUlFV
RUVfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
aHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01IVE1MTWVudUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRN
TE1lbnVFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxNZW51RWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfbWVudV9lbGVtZW50X2dldF9jb21wYWN0Cit3ZWJraXRfZG9tX2h0bWxfbWVudV9l
bGVtZW50X3NldF9jb21wYWN0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRN
TE1lbnVFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX01FTlVfRUxFTUVOVAorV0VC
S0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX01FTlVfRUxFTUVO
VAorV0VCS0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1M
X01FTlVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVF9HRVRfQ0xB
U1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRf
Z2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MTWV0
YUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50PC9USVRMRT4K
K1dlYktpdERPTUhUTUxNZXRhRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50
X2dldF9jb250ZW50Cit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9jb250ZW50Cit3
ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9odHRwX2VxdWl2Cit3ZWJraXRfZG9tX2h0
bWxfbWV0YV9lbGVtZW50X3NldF9odHRwX2VxdWl2Cit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVt
ZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9uYW1lCit3ZWJr
aXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9zY2hlbWUKK3dlYmtpdF9kb21faHRtbF9tZXRh
X2VsZW1lbnRfc2V0X3NjaGVtZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhU
TUxNZXRhRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRVRBX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9NRVRBX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRN
TF9NRVRBX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlRfR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50
X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTE1v
ZEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQ8L1RJVExFPgor
V2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dl
dF9jaXRlCit3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfc2V0X2NpdGUKK3dlYmtpdF9kb21f
aHRtbF9tb2RfZWxlbWVudF9nZXRfZGF0ZV90aW1lCit3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1l
bnRfc2V0X2RhdGVfdGltZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxN
b2RFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX01PRF9FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfTU9EX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9NT0RfRUxFTUVOVAorV0VC
S0lUX0RPTV9IVE1MX01PRF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfTU9EX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfdHlwZQor
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQ8
L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudDwvVElUTEU+CitXZWJLaXRE
T01IVE1MT0xpc3RFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRf
Y29tcGFjdAord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9jb21wYWN0Cit3ZWJr
aXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3N0YXJ0Cit3ZWJraXRfZG9tX2h0bWxfb19s
aXN0X2VsZW1lbnRfc2V0X3N0YXJ0Cit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0
X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF90eXBlX2F0dHIK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50Q2xhc3MK
K1dFQktJVF9ET01fVFlQRV9IVE1MX09fTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT19M
SVNUX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9PX0xJU1RfRUxFTUVOVAorV0VCS0lUX0RP
TV9IVE1MX09fTElTVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9PX0xJU1RfRUxFTUVOVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxPYmplY3RFbGVtZW50PC9USVRMRT4K
K1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9nZXRfZm9ybQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlCit3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGUKK3dlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9z
ZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYXJjaGl2ZQord2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9hcmNoaXZlCit3ZWJraXRfZG9tX2h0bWxf
b2JqZWN0X2VsZW1lbnRfZ2V0X2JvcmRlcgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X3NldF9ib3JkZXIKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZV9iYXNl
Cit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGVfYmFzZQord2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlX3R5cGUKK3dlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9zZXRfY29kZV90eXBlCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X2RhdGEKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfZGF0YQord2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9kZWNsYXJlCit3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfc2V0X2RlY2xhcmUKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9n
ZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hlaWdodAord2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9oc3BhY2UKK3dlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9zZXRfaHNwYWNlCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfbmFtZQord2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9zdGFuZGJ5Cit3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfc2V0X3N0YW5kYnkKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9n
ZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0
cgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF91c2VfbWFwCit3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3VzZV9tYXAKK3dlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9nZXRfdnNwYWNlCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3Zz
cGFjZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X3NldF93aWR0aAord2Via2l0X2RvbV9odG1sX29iamVjdF9l
bGVtZW50X2dldF9jb250ZW50X2RvY3VtZW50CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfT0JKRUNU
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9PQkpFQ1RfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19I
VE1MX09CSkVDVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT0JKRUNUX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1M
X09CSkVDVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9O
PgorPEZJTEU+V2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJL
aXRET01IVE1MT3B0R3JvdXBFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxPcHRHcm91cEVs
ZW1lbnQKKword2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF9kaXNhYmxlZAor
d2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3NldF9kaXNhYmxlZAord2Via2l0X2Rv
bV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF9sYWJlbAord2Via2l0X2RvbV9odG1sX29wdF9n
cm91cF9lbGVtZW50X3NldF9sYWJlbAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERP
TUhUTUxPcHRHcm91cEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUX0dST1VQ
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVAorV0VCS0lUX0RPTV9J
U19IVE1MX09QVF9HUk9VUF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT1BUX0dST1VQX0VMRU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX09QVF9HUk9VUF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQ
cml2YXRlPgord2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQ8L0ZJ
TEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9N
SFRNTE9wdGlvbkVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9k
aXNhYmxlZAord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9kaXNhYmxlZAord2Vi
a2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9mb3JtCit3ZWJraXRfZG9tX2h0bWxfb3B0
aW9uX2VsZW1lbnRfZ2V0X2xhYmVsCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0
X2xhYmVsCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2RlZmF1bHRfc2VsZWN0
ZWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfZGVmYXVsdF9zZWxlY3RlZAor
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9zZWxlY3RlZAord2Via2l0X2RvbV9o
dG1sX29wdGlvbl9lbGVtZW50X3NldF9zZWxlY3RlZAord2Via2l0X2RvbV9odG1sX29wdGlvbl9l
bGVtZW50X2dldF92YWx1ZQord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF92YWx1
ZQord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF90ZXh0Cit3ZWJraXRfZG9tX2h0
bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2luZGV4CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9O
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9PUFRJT05fRUxFTUVOVAorV0VCS0lUX0RPTV9JU19I
VE1MX09QVElPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT1BUSU9OX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1M
X09QVElPTl9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9O
PgorPEZJTEU+V2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uPC9GSUxFPgorPFRJVExFPldl
YktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbjwvVElUTEU+CitXZWJLaXRET01IVE1MT3B0aW9u
c0NvbGxlY3Rpb24KKword2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9uYW1lZF9p
dGVtCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2dldF9zZWxlY3RlZF9pbmRl
eAord2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9zZXRfc2VsZWN0ZWRfaW5kZXgK
K3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aAorCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbkNsYXNzCitXRUJL
SVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04KK1dFQktJVF9ET01fSFRNTF9PUFRJ
T05TX0NPTExFQ1RJT04KK1dFQktJVF9ET01fSVNfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04KK1dF
QktJVF9ET01fSFRNTF9PUFRJT05TX0NPTExFQ1RJT05fQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRN
TF9PUFRJT05TX0NPTExFQ1RJT05fQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9PUFRJT05TX0NPTExF
Q1RJT05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uc19jb2xsZWN0aW9uX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
SFRNTFBhcmFncmFwaEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1l
bnQKKword2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2dldF9hbGlnbgord2Via2l0
X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3NldF9hbGlnbgorCis8U1VCU0VDVElPTiBTdGFu
ZGFyZD4KK1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQ
RV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfUEFSQUdSQVBIX0VMRU1F
TlQKK1dFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1M
X1BBUkFHUkFQSF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVF9HRVRfQ0xBU1MK
KworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVu
dF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxQ
YXJhbUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudDwvVElU
TEU+CitXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9l
bGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfbmFtZQor
d2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9o
dG1sX3BhcmFtX2VsZW1lbnRfc2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX3BhcmFtX2Vs
ZW1lbnRfZ2V0X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfdmFsdWUK
K3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF92YWx1ZV90eXBlCit3ZWJraXRfZG9t
X2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfdmFsdWVfdHlwZQorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxf
UEFSQU1fRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1FTlQKK1dFQktJVF9ET01f
SVNfSFRNTF9QQVJBTV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRN
TF9QQVJBTV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRET01IVE1MUHJlRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01I
VE1MUHJlRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MUHJlRWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1l
bnRfc2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3dyYXAKK3dlYmtp
dF9kb21faHRtbF9wcmVfZWxlbWVudF9zZXRfd3JhcAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4K
K1dlYktpdERPTUhUTUxQcmVFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1BSRV9F
TEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9Q
UkVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1BSRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9N
X0lTX0hUTUxfUFJFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVF9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9wcmVfZWxl
bWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhU
TUxRdW90ZUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudDwv
VElUTEU+CitXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9xdW90
ZV9lbGVtZW50X2dldF9jaXRlCit3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9zZXRfY2l0
ZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRDbGFz
cworV0VCS0lUX0RPTV9UWVBFX0hUTUxfUVVPVEVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1FV
T1RFX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9RVU9URV9FTEVNRU5UCitXRUJLSVRfRE9N
X0hUTUxfUVVPVEVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX1FVT1RFX0VMRU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9RVU9URV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VC
U0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfZ2V0X3R5cGUK
KzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVu
dDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudDwvVElUTEU+CitXZWJL
aXRET01IVE1MU2NyaXB0RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
Z2V0X3RleHQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdGV4dAord2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9odG1sX2Zvcgord2Via2l0X2RvbV9odG1sX3Nj
cmlwdF9lbGVtZW50X3NldF9odG1sX2Zvcgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50
X2dldF9ldmVudAord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9ldmVudAord2Vi
a2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9jaGFyc2V0Cit3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfZ2V0X2RlZmVyCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
c2V0X2RlZmVyCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3NyYword2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9zcmMKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRf
ZWxlbWVudF9nZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0
X3R5cGVfYXR0cgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1NDUklQVF9FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfU0NSSVBUX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVO
VAorV0VCS0lUX0RPTV9IVE1MX1NDUklQVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hU
TUxfU0NSSVBUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVOVF9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9zY3JpcHRf
ZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxTZWxlY3RFbGVt
ZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisKK3dlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9pdGVtCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfbmFt
ZWRfaXRlbQord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2FkZAord2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X3JlbW92ZQord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF9hdXRvZm9jdXMKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfYXV0b2Zv
Y3VzCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkCit3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfZ2V0X2Zvcm0KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRf
bXVsdGlwbGUKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbXVsdGlwbGUKK3dl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0
X3NpemUKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfc2l6ZQord2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3RfdHlwZQord2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X2dldF9vcHRpb25zCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRf
Z2V0X2xlbmd0aAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9sZW5ndGgKK3dl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfaW5kZXgKK3dlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfc2VsZWN0ZWRfaW5kZXgKK3dlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9zZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfd2lsbF92YWxp
ZGF0ZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50
Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1NFTEVDVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfU0VMRUNUX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVAorV0VC
S0lUX0RPTV9IVE1MX1NFTEVDVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfU0VM
RUNUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVOVF9HRVRfQ0xB
U1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxT
dHlsZUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudDwvVElU
TEU+CitXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9l
bGVtZW50X2dldF9kaXNhYmxlZAord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X2Rp
c2FibGVkCit3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfbWVkaWEKK3dlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X3NldF9tZWRpYQord2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfZ2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X3R5
cGVfYXR0cgord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3NoZWV0CisKKzxTVUJT
RUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudENsYXNzCitXRUJLSVRf
RE9NX1RZUEVfSFRNTF9TVFlMRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfU1RZTEVfRUxFTUVO
VAorV0VCS0lUX0RPTV9JU19IVE1MX1NUWUxFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9TVFlM
RV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVfRUxFTUVOVF9DTEFTUwor
V0VCS0lUX0RPTV9IVE1MX1NUWUxFX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50PC9G
SUxFPgorPFRJVExFPldlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50PC9USVRMRT4KK1dl
YktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF90YWJsZV9j
YXB0aW9uX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9l
bGVtZW50X3NldF9hbGlnbgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxU
YWJsZUNhcHRpb25FbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NBUFRJ
T05fRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVAorV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RBQkxF
X0NBUFRJT05fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NBUFRJT05f
RUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVF9HRVRf
Q0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0
aW9uX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jZWxsX2luZGV4Cit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9zZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2Vs
ZW1lbnRfZ2V0X2F4aXMKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2F4
aXMKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2JnX2NvbG9yCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9iZ19jb2xvcgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2gKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfc2V0X2NoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9j
aF9vZmYKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NoX29mZgord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY29sX3NwYW4KK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NvbF9zcGFuCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X2dldF9yb3dfc3Bhbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfcm93X3NwYW4KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
Z2V0X2hlYWRlcnMKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlYWRl
cnMKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2hlaWdodAord2Via2l0
X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X2dldF9ub193cmFwCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2Vs
bF9lbGVtZW50X3NldF9ub193cmFwCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2dldF92X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF92X2Fs
aWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF93aWR0aAord2Via2l0
X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2FiYnIKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2Vs
ZW1lbnRfc2V0X2FiYnIKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3Nj
b3BlCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9zY29wZQorCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Q2xhc3MKK1dF
QktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RB
QkxFX0NFTExfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19I
VE1MX1RBQkxFX0NFTExfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExf
RUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRt
bF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVu
dAorCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY29sX2VsZW1lbnRfZ2V0X2NoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRf
c2V0X2NoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2NoX29mZgord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9jaF9vZmYKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9jb2xfZWxlbWVudF9nZXRfc3Bhbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9l
bGVtZW50X3NldF9zcGFuCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3Zf
YWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfdl9hbGlnbgord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1s
X3RhYmxlX2NvbF9lbGVtZW50X3NldF93aWR0aAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFC
TEVfQ09MX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVAorV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ09M
X0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MVGFibGVFbGVtZW50PC9USVRMRT4KK1dlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY3Jl
YXRlX3RfaGVhZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3RfaGVhZAor
d2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY3JlYXRlX3RfZm9vdAord2Via2l0X2RvbV9o
dG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3RfZm9vdAord2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfY3JlYXRlX2NhcHRpb24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0
ZV9jYXB0aW9uCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9pbnNlcnRfcm93Cit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfcm93Cit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfZWxlbWVudF9nZXRfY2FwdGlvbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0
X2NhcHRpb24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2hlYWQKK3dlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF90X2hlYWQKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X2dldF90X2Zvb3QKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF90
X2Zvb3QKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9yb3dzCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9ib2RpZXMKK3dlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2FsaWdu
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfYmdfY29sb3IKK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9lbGVtZW50X3NldF9iZ19jb2xvcgord2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X2JvcmRlcgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2JvcmRl
cgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxfcGFkZGluZword2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NlbGxfcGFkZGluZword2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxfc3BhY2luZword2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfc2V0X2NlbGxfc3BhY2luZword2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0
X3J1bGVzCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfcnVsZXMKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF9zdW1tYXJ5Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9zZXRfc3VtbWFyeQord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3dp
ZHRoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfd2lkdGgKKworPFNVQlNFQ1RJ
T04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MVGFibGVFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01f
VFlQRV9IVE1MX1RBQkxFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UCitX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UX0NMQVNTCitXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0
ZT4KK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisK
KzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudDwvRklMRT4KKzxU
SVRMRT5XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxU
YWJsZVJvd0VsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2luc2Vy
dF9jZWxsCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZGVsZXRlX2NlbGwKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfcm93X2luZGV4Cit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3NlY3Rpb25fcm93X2luZGV4Cit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2NlbGxzCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
cm93X2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRf
c2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2JnX2NvbG9y
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2JnX2NvbG9yCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2NoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
cm93X2VsZW1lbnRfc2V0X2NoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0
X2NoX29mZgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9jaF9vZmYKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfdl9hbGlnbgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF92X2FsaWduCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRN
TF9UQUJMRV9ST1dfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UCitX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJM
RV9ST1dfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxT
VUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0
X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MVGFibGVT
ZWN0aW9uRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxl
bWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2luc2VydF9yb3cKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZGVsZXRlX3Jvdword2Via2l0X2RvbV9odG1sX3RhYmxl
X3NlY3Rpb25fZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9u
X2VsZW1lbnRfc2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50
X2dldF9jaAord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2gKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2NoX29mZgord2Via2l0X2Rv
bV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2hfb2ZmCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF92X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X3NldF92X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlv
bl9lbGVtZW50X2dldF9yb3dzCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VD
VElPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UCitXRUJL
SVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFC
TEVfU0VDVElPTl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElP
Tl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Nl
Y3Rpb25fZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisKK3dl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZWxlY3QKK3dlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3JhbmdlCit3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9mb2N1cword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X3NldF9hdXRvZm9jdXMKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGlzYWJs
ZWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZm9ybQord2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfcmVhZF9vbmx5Cit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JlYWRf
b25seQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yb3dzCit3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3Jvd3MKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfY29scword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NldF9jb2xzCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2FyZWFfdHlw
ZQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlCit3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2RlZmF1bHRfdmFsdWUKK3dlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9zZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9nZXRfd2lsbF92YWxpZGF0ZQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2dldF9zZWxlY3Rpb25fc3RhcnQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9z
ZXRfc2VsZWN0aW9uX3N0YXJ0Cit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X3NlbGVjdGlvbl9lbmQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2Vs
ZWN0aW9uX2VuZAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9URVhUX0FSRUFfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRf
QVJFQV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlRfQ0xBU1MKK1dF
QktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1M
X1RFWFRfQVJFQV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudDwvRklMRT4KKzxUSVRMRT5X
ZWJLaXRET01IVE1MVGl0bGVFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxUaXRsZUVsZW1l
bnQKKword2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3RleHQKK3dlYmtpdF9kb21f
aHRtbF90aXRsZV9lbGVtZW50X3NldF90ZXh0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NSFRNTFRpdGxlRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9USVRMRV9F
TEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1M
X1RJVExFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9USVRMRV9FTEVNRU5UX0NMQVNTCitXRUJL
SVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1RJVExF
X0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0
bWxfdGl0bGVfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxF
PldlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFVM
aXN0RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50CisKK3dlYmtpdF9k
b21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdAord2Via2l0X2RvbV9odG1sX3VfbGlz
dF9lbGVtZW50X3NldF9jb21wYWN0Cit3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0
X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF90eXBlX2F0dHIK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Q2xhc3MK
K1dFQktJVF9ET01fVFlQRV9IVE1MX1VfTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVV9M
SVNUX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9VX0xJU1RfRUxFTUVOVAorV0VCS0lUX0RP
TV9IVE1MX1VfTElTVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVV9MSVNUX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9VX0xJU1RfRUxFTUVOVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTURPTVdpbmRvdzwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01ET01XaW5kb3c8L1RJVExFPgorV2ViS2l0RE9NRE9NV2lu
ZG93CisKKworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTURPTVdpbmRvd0NsYXNz
CitXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVworV0VCS0lUX0RPTV9ET01fV0lORE9XCitXRUJL
SVRfRE9NX0lTX0RPTV9XSU5ET1cKK1dFQktJVF9ET01fRE9NX1dJTkRPV19DTEFTUworV0VCS0lU
X0RPTV9JU19ET01fV0lORE9XX0NMQVNTCitXRUJLSVRfRE9NX0RPTV9XSU5ET1dfR0VUX0NMQVNT
CisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3R5cGUK
KzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01YUGF0aEV4cHJlc3Npb248
L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uPC9USVRMRT4KK1dlYktpdERP
TVhQYXRoRXhwcmVzc2lvbgorCit3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZXZhbHVhdGUK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01YUGF0aEV4cHJlc3Npb25DbGFzcwor
V0VCS0lUX0RPTV9UWVBFX1hQQVRIX0VYUFJFU1NJT04KK1dFQktJVF9ET01fWFBBVEhfRVhQUkVT
U0lPTgorV0VCS0lUX0RPTV9JU19YUEFUSF9FWFBSRVNTSU9OCitXRUJLSVRfRE9NX1hQQVRIX0VY
UFJFU1NJT05fQ0xBU1MKK1dFQktJVF9ET01fSVNfWFBBVEhfRVhQUkVTU0lPTl9DTEFTUworV0VC
S0lUX0RPTV9YUEFUSF9FWFBSRVNTSU9OX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRl
Pgord2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NWFBhdGhSZXN1bHQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0
RE9NWFBhdGhSZXN1bHQ8L1RJVExFPgorV2ViS2l0RE9NWFBhdGhSZXN1bHQKKworV0VCS0lUX0RP
TV9YUEFUSF9SRVNVTFRfQU5ZX1RZUEUKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUX05VTUJFUl9U
WVBFCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9TVFJJTkdfVFlQRQorV0VCS0lUX0RPTV9YUEFU
SF9SRVNVTFRfQk9PTEVBTl9UWVBFCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9VTk9SREVSRURf
Tk9ERV9JVEVSQVRPUl9UWVBFCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9PUkRFUkVEX05PREVf
SVRFUkFUT1JfVFlQRQorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfVU5PUkRFUkVEX05PREVfU05B
UFNIT1RfVFlQRQorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUX0FOWV9VTk9SREVSRURfTk9ERV9UWVBFCitX
RUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9GSVJTVF9PUkRFUkVEX05PREVfVFlQRQord2Via2l0X2Rv
bV94cGF0aF9yZXN1bHRfaXRlcmF0ZV9uZXh0Cit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9zbmFw
c2hvdF9pdGVtCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfcmVzdWx0X3R5cGUKK3dlYmtp
dF9kb21feHBhdGhfcmVzdWx0X2dldF9udW1iZXJfdmFsdWUKK3dlYmtpdF9kb21feHBhdGhfcmVz
dWx0X2dldF9zdHJpbmdfdmFsdWUKK3dlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9ib29sZWFu
X3ZhbHVlCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc2luZ2xlX25vZGVfdmFsdWUKK3dl
YmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9pbnZhbGlkX2l0ZXJhdG9yX3N0YXRlCit3ZWJraXRf
ZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc25hcHNob3RfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5k
YXJkPgorV2ViS2l0RE9NWFBhdGhSZXN1bHRDbGFzcworV0VCS0lUX0RPTV9UWVBFX1hQQVRIX1JF
U1VMVAorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFQKK1dFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxU
CitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9DTEFTUworV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNV
TFRfQ0xBU1MKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3R5cGUKKzwvU0VDVElPTj4K
KworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01FbnRpdHlSZWZlcmVuY2U8L0ZJTEU+Cis8VElU
TEU+V2ViS2l0RE9NRW50aXR5UmVmZXJlbmNlPC9USVRMRT4KKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXRUJLSVRfRE9NX1RZUEVfRU5USVRZX1JFRkVSRU5DRQorV0VCS0lUX0RPTV9FTlRJVFlf
UkVGRVJFTkNFCitXRUJLSVRfRE9NX0lTX0VOVElUWV9SRUZFUkVOQ0UKK1dFQktJVF9ET01fRU5U
SVRZX1JFRkVSRU5DRV9DTEFTUworV0VCS0lUX0RPTV9JU19FTlRJVFlfUkVGRVJFTkNFX0NMQVNT
CitXRUJLSVRfRE9NX0VOVElUWV9SRUZFUkVOQ0VfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+Cit3ZWJraXRfZG9tX2VudGl0eV9yZWZlcmVuY2VfZ2V0X3R5cGUKKzwvU0VDVElPTj4K
KworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MQmFzZUZvbnRFbGVtZW50PC9GSUxFPgor
PFRJVExFPldlYktpdERPTUhUTUxCYXNlRm9udEVsZW1lbnQ8L1RJVExFPgord2Via2l0X2RvbV9o
dG1sX2Jhc2VfZm9udF9lbGVtZW50X2dldF9jb2xvcgord2Via2l0X2RvbV9odG1sX2Jhc2VfZm9u
dF9lbGVtZW50X2dldF9mYWNlCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfZ2V0
X3NpemUKK3dlYmtpdF9kb21faHRtbF9iYXNlX2ZvbnRfZWxlbWVudF9zZXRfY29sb3IKK3dlYmtp
dF9kb21faHRtbF9iYXNlX2ZvbnRfZWxlbWVudF9zZXRfZmFjZQord2Via2l0X2RvbV9odG1sX2Jh
c2VfZm9udF9lbGVtZW50X3NldF9zaXplCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQkFTRV9GT05UX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CQVNFX0ZP
TlRfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0JBU0VfRk9OVF9FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfQkFTRV9GT05UX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9CQVNF
X0ZPTlRfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0JBU0VfRk9OVF9FTEVNRU5UX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2Jhc2VfZm9u
dF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+d2Via2l0
ZG9tZGVmaW5lczwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01EZWZpbmVzPC9USVRMRT4KKzxTVUJT
RUNUSU9OIFByaXZhdGU+CitXRUJLSVRfQVBJCitXRUJLSVRfREVQUkVDQVRFRAorV0VCS0lUX0RF
UFJFQ0FURURfRk9SCis8L1NFQ1RJT04+CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vZG9jcy93ZWJraXRkb21ndGstZG9j
cy5zZ21sIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9kb2NzL3dlYmtpdGRvbWd0ay1kb2NzLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzlhMjViYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vZG9jcy93ZWJraXRkb21ndGstZG9j
cy5zZ21sCkBAIC0wLDAgKzEsMTI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQ
RSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorICAg
ICAgICAgICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIv
ZG9jYm9va3guZHRkIiBbCis8IUVOVElUWSB2ZXJzaW9uIFNZU1RFTSAidmVyc2lvbi54bWwiPgor
XT4KKzxib29rIGlkPSJpbmRleCIgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWElu
Y2x1ZGUiPgorICA8Ym9va2luZm8+CisgICAgPHRpdGxlPldlYktpdERPTUdUSysgUmVmZXJlbmNl
IE1hbnVhbDwvdGl0bGU+CisgICAgPHJlbGVhc2VpbmZvPmZvciBXZWJLaXRET01HVEsrICZ2ZXJz
aW9uOzwvcmVsZWFzZWluZm8+CisgIDwvYm9va2luZm8+CisKKyAgPGNoYXB0ZXI+CisgICAgPHRp
dGxlPkNsYXNzIE92ZXJ2aWV3PC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0RE9NQ3VzdG9tLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01F
dmVudFRhcmdldC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NTm9k
ZUZpbHRlci54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NT2JqZWN0
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01YUGF0aE5TUmVzb2x2
ZXIueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUNTU1J1bGUueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUNTU1J1bGVMaXN0LnhtbCIv
PgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01DU1NTdHlsZVNoZWV0
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01DU1NWYWx1ZS54bWwi
Lz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NTWVkaWFMaXN0LnhtbCIvPgor
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01TdHlsZVNoZWV0LnhtbCIvPgorICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC54bWwiLz4KKyAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQXR0ci54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01Db21tZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0RE9NRG9jdW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTURvY3VtZW50VHlwZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0RE9NRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0RE9NRXZlbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dERPTUtleWJvYXJkRXZlbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dERPTU1vdXNlRXZlbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TU5hbWVkTm9kZU1hcC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9N
Tm9kZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NTm9kZUl0ZXJh
dG9yLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01Ob2RlTGlzdC54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01SYW5nZS54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NVGV4dC54bWwiLz4KKyAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NVHJlZVdhbGtlci54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NVUlFdmVudC54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NV2hlZWxFdmVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0RE9NQmxvYi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0RE9NRmlsZS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RE9NRmlsZUxpc3QueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01IVE1MQlJFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01IVE1MQmFzZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdERPTUhUTUxCb2R5RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQueG1sIi8+CisgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxEaXZFbGVtZW50LnhtbCIvPgorICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRG9jdW1lbnQueG1sIi8+CisgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxFbGVtZW50LnhtbCIvPgorICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LnhtbCIvPgorICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50LnhtbCIv
PgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudC54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVu
dC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEZyYW1lU2V0
RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEhS
RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEhl
YWRFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1M
SGVhZGluZ0VsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TUhUTUxIdG1sRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdERPTUhUTUxMSUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxNYXBFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxNZW51RWxlbWVudC54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LnhtbCIvPgorICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MTW9kRWxlbWVudC54bWwiLz4KKyAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC54bWwiLz4K
KyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1l
bnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MT3B0
aW9uc0NvbGxlY3Rpb24ueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TUhUTUxQYXJhZ3JhcGhFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01IVE1MUGFyYW1FbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRET01IVE1MUHJlRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudC54bWwiLz4K
KyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQu
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxUYWJsZUNvbEVs
ZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxU
YWJsZVJvd0VsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01ET01XaW5kb3cueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0RE9NWFBhdGhSZXN1bHQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTUVudGl0eVJlZmVyZW5jZS54bWwiLz4KKyAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudC54bWwiLz4KKyAgPC9jaGFw
dGVyPgorCisgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KKyAgICA8dGl0bGU+SW5kZXg8L3RpdGxl
PgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtZnVsbC54bWwiPjx4aTpmYWxs
YmFjayAvPjwveGk6aW5jbHVkZT4KKyAgPC9pbmRleD4KKyAgPGluZGV4IGlkPSJhcGktaW5kZXgt
ZGVwcmVjYXRlZCIgcm9sZT0iZGVwcmVjYXRlZCI+CisgICAgPHRpdGxlPkluZGV4IG9mIGRlcHJl
Y2F0ZWQgc3ltYm9sczwvdGl0bGU+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRl
eC1kZXByZWNhdGVkLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgorICA8L2luZGV4
PgorCisgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5LnhtbCI+PHhp
OmZhbGxiYWNrIC8+PC94aTppbmNsdWRlPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb20uaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Vi
a2l0ZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4OWNhNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vd2Via2l0ZG9tLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ29iamVjdC1nZW5lcmF0ZS1oZWFkZXJzLnBsLiAgRE8gTk9U
IE1PRElGWSEKKyAgIAorICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIHdlYmtpdGRvbV9oCisjZGVmaW5lIHdlYmtpdGRvbV9oCisKKyNkZWZpbmUg
X19XRUJLSVRET01fSF9JTlNJREVfXworCisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUF0
dHIuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQmxvYi5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01DREFUQVNlY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NQ1NTUnVsZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NSdWxlTGlz
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNTU1N0eWxlU2hlZXQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NQ1NTVmFsdWUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NQ2hhcmFjdGVyRGF0YS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Db21t
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUN1c3RvbS5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01ET01XaW5kb3cuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
RGVwcmVjYXRlZC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTURvY3VtZW50VHlwZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUV2ZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUV2ZW50VGFyZ2V0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUZpbGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NRmlsZUxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxCUkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxCb2R5RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQ2Fu
dmFzRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQ29sbGVjdGlv
bi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxEaXZFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUhUTUxEb2N1bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRW1i
ZWRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxGaWVsZFNldEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MSGVhZEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEhl
YWRpbmdFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxIdG1sRWxl
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MTGFiZWxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUhUTUxMZWdlbmRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxM
aW5rRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTWFwRWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01IVE1MTW9kRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MT0xpc3RFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPcHRH
cm91cEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE9wdGlvbkVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0
aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJs
ZUNlbGxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJsZUNv
bEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUtleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NTWVkaWFMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU1vdXNlRXZlbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NTm9kZUZpbHRlci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlSXRlcmF0
b3IuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9kZUxpc3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01SYW5nZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TdHlsZVNoZWV0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTVRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
VHJlZVdhbGtlci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01VSUV2ZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVdoZWVsRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTVhQYXRoTlNSZXNvbHZlci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Y
UGF0aFJlc3VsdC5oPgorCisjdW5kZWYgX19XRUJLSVRET01fSF9JTlNJREVfXworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qvd2Via2l0ZG9tLnN5
bWJvbHMgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL3dlYmtpdGRvbS5zeW1ib2xzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L3dlYmtpdGRvbS5zeW1ib2xzCnJlbmFtZSB0
byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dl
YmtpdGRvbS5zeW1ib2xzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWF1dG9jbGVhbnVwcy11bnN0YWJsZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93
ZWJraXRkb21hdXRvY2xlYW51cHMtdW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi44NTM5ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21hdXRvY2xlYW51cHMt
dW5zdGFibGUuaApAQCAtMCwwICsxLDEwNSBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwuICBETyBOT1QgTU9ESUZZIQorICAg
CisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
d2Via2l0ZG9tYXV0b2NsZWFudXBzX2gKKyNkZWZpbmUgd2Via2l0ZG9tYXV0b2NsZWFudXBzX2gK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKKyNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQworI2lmbmRlZiBfX0dJX1NDQU5ORVJfXworCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NQW5pbWF0YWJsZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01BbmltYXRp
b25UaW1lbGluZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NQXVkaW9UcmFjaywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUJhclByb3AsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUJhdHRlcnlN
YW5hZ2VyLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01DU1NOYW1lc3BhY2UsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURPTU1pbWVUeXBl
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01ET01NaW1lVHlwZUFycmF5LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xF
QU5VUF9GVU5DIChXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01QbHVnaW4sIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURP
TVBsdWdpbkFycmF5LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01ET01TZWxlY3Rpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURPTVN0cmluZ0xpc3QsIGdfb2JqZWN0X3VucmVm
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURPTVN0cmluZ01hcCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
RE9NVG9rZW5MaXN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURhdGFDdWUsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURhdGFiYXNl
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01Eb2N1bWVudEFuaW1hdGlvbiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NR2FtZXBhZCwgZ19vYmplY3Rf
dW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NR2FtZXBhZExp
c3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dERPTUdlb2xvY2F0aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhU
TUxLZXlnZW5FbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50LCBnX29i
amVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IaXN0
b3J5LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01LZXlmcmFtZUVmZmVjdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NTG9jYXRpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciwgZ19vYmplY3Rf
dW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTWVkaWFEZXZp
Y2VzLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01NZWRpYUVycm9yLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0
cmFpbnRzLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01NZXNzYWdlUG9ydCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NTmF2aWdhdG9yLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVBl
cmZvcm1hbmNlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24sIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVBlcmZv
cm1hbmNlVGltaW5nLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01TY3JlZW4sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9D
TEVBTlVQX0ZVTkMgKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcywgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZl
bnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVN0b3Jh
Z2UsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dERPTVN0b3JhZ2VJbmZvLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01TdG9yYWdlUXVvdGEsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVN0eWxlTWVkaWEsIGdfb2JqZWN0X3VucmVm
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVRleHRUcmFjaywgZ19v
YmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01UZXh0VHJhY2tMaXN0LCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01UaW1lUmFuZ2VzLCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01U
b3VjaCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NVHJhY2tFdmVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyLCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01WVFRDdWUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTVZhbGlkaXR5U3RhdGUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5LCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01W
aWRlb1RyYWNrLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01WaWRlb1RyYWNrTGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRP
UFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NV2ViQW5pbWF0aW9uLCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01XZWJLaXROYW1lZEZsb3cs
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TVdlYktpdE5hbWVzcGFjZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NV2ViS2l0UG9pbnQsIGdfb2JqZWN0X3VucmVmKQorCisjZW5kaWYK
KyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tYXV0b2NsZWFudXBzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRv
bWF1dG9jbGVhbnVwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZGM2
MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5oCkBAIC0wLDAgKzEsMTI5
IEBACisvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdvYmplY3QtZ2VuZXJhdGUt
aGVhZGVycy5wbC4gIERPIE5PVCBNT0RJRlkhCisgICAKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiB3ZWJraXRkb21hdXRvY2xlYW51cHNfaAor
I2RlZmluZSB3ZWJraXRkb21hdXRvY2xlYW51cHNfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKworI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCisjaWZuZGVmIF9fR0lf
U0NBTk5FUl9fCisKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01BdHRy
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01CbG9iLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01DREFUQVNlY3Rpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9D
TEVBTlVQX0ZVTkMgKFdlYktpdERPTUNTU1J1bGUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUNTU1J1bGVMaXN0LCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01DU1NTdHlsZVNoZWV0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01DU1NWYWx1ZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSwgZ19vYmplY3Rf
dW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQ29tbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
RE9NSW1wbGVtZW50YXRpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTURPTVdpbmRvdywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRG9jdW1lbnQsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQs
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TURvY3VtZW50VHlwZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRXZlbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUV2ZW50VGFyZ2V0LCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01GaWxlLCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01GaWxlTGlz
dCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9D
TEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQs
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TUhUTUxCUkVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxDb2xsZWN0aW9uLCBnX29iamVjdF91
bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MRExpc3RF
bGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxEb2N1bWVu
dCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NSFRNTEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhU
TUxGb250RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MRnJh
bWVTZXRFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01IVE1MSFJFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxIZWFkaW5n
RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9Q
VFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCwgZ19vYmplY3RfdW5y
ZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTExJRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTExlZ2VuZEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxNb2RF
bGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9Q
VFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCwgZ19vYmplY3RfdW5y
ZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTE9wdEdyb3Vw
RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFBh
cmFncmFwaEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxQcmVFbGVtZW50LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MUXVv
dGVFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTFRhYmxlQ29sRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxUaXRs
ZUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUtleWJvYXJkRXZlbnQsIGdfb2JqZWN0X3VucmVm
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU1lZGlhTGlzdCwgZ19v
YmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTW91
c2VFdmVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0RE9NTmFtZWROb2RlTWFwLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01Ob2RlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01Ob2RlRmlsdGVyLCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01Ob2RlSXRlcmF0b3IsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU5v
ZGVMaXN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01PYmplY3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NUmFuZ2UsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVN0eWxlU2hlZXQs
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TVN0eWxlU2hlZXRMaXN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01UZXh0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01UcmVlV2Fsa2VyLCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01VSUV2ZW50LCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01XaGVlbEV2ZW50LCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01Y
UGF0aEV4cHJlc3Npb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTVhQYXRoTlNSZXNvbHZlciwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NWFBhdGhSZXN1bHQsIGdfb2JqZWN0X3Vu
cmVmKQorCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmZmZmE1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oCkBAIC0wLDAgKzEsMjUxIEBACisvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbC4gIERPIE5PVCBNT0RJRlkhCisg
ICAKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiB3ZWJraXRkb21kZWZpbmVzX3Vuc3RhYmxlX2gKKyNkZWZpbmUgd2Via2l0ZG9tZGVmaW5lc191
bnN0YWJsZV9oCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01BbmltYXRhYmxlIFdlYktpdERPTUFuaW1hdGFibGU7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NQW5pbWF0YWJsZUNsYXNzIFdlYktpdERPTUFuaW1hdGFibGVDbGFzczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdCBXZWJLaXRET01BbmltYXRpb25FZmZl
Y3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Q2xhc3MgV2ViS2l0
RE9NQW5pbWF0aW9uRWZmZWN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Bbmlt
YXRpb25UaW1lbGluZSBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZTsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZUNsYXNzIFdlYktpdERPTUFuaW1hdGlvblRpbWVs
aW5lQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01BdWRpb1RyYWNrIFdlYktpdERP
TUF1ZGlvVHJhY2s7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFja0NsYXNzIFdl
YktpdERPTUF1ZGlvVHJhY2tDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUF1ZGlv
VHJhY2tMaXN0IFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUF1ZGlvVHJhY2tMaXN0Q2xhc3MgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RDbGFzczsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUJhclByb3AgV2ViS2l0RE9NQmFyUHJvcDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01CYXJQcm9wQ2xhc3MgV2ViS2l0RE9NQmFyUHJvcENsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIgV2ViS2l0RE9NQmF0dGVy
eU1hbmFnZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJDbGFzcyBX
ZWJLaXRET01CYXR0ZXJ5TWFuYWdlckNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
RE9NQXBwbGljYXRpb25DYWNoZSBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVDbGFzcyBXZWJLaXRET01ET01B
cHBsaWNhdGlvbkNhY2hlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01DU1NO
YW1lc3BhY2UgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTURPTUNTU05hbWVzcGFjZUNsYXNzIFdlYktpdERPTURPTUNTU05hbWVzcGFjZUNsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NTWltZVR5cGUgV2ViS2l0RE9NRE9NTWltZVR5
cGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NTWltZVR5cGVDbGFzcyBXZWJLaXRET01E
T01NaW1lVHlwZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NTWltZVR5cGVB
cnJheSBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TURPTU1pbWVUeXBlQXJyYXlDbGFzcyBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5Q2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uIFdlYktpdERP
TURPTU5hbWVkRmxvd0NvbGxlY3Rpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbkNsYXNzIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25DbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbiBXZWJLaXRET01ET01QbHVn
aW47Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NUGx1Z2luQ2xhc3MgV2ViS2l0RE9NRE9N
UGx1Z2luQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01QbHVnaW5BcnJheSBX
ZWJLaXRET01ET01QbHVnaW5BcnJheTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01QbHVn
aW5BcnJheUNsYXNzIFdlYktpdERPTURPTVBsdWdpbkFycmF5Q2xhc3M7CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01ET01TZWxlY3Rpb24gV2ViS2l0RE9NRE9NU2VsZWN0aW9uOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTURPTVNlbGVjdGlvbkNsYXNzIFdlYktpdERPTURPTVNlbGVjdGlv
bkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCBXZWJLaXRE
T01ET01TdHJpbmdMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVN0cmluZ0xpc3RD
bGFzcyBXZWJLaXRET01ET01TdHJpbmdMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01ET01TdHJpbmdNYXAgV2ViS2l0RE9NRE9NU3RyaW5nTWFwOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTURPTVN0cmluZ01hcENsYXNzIFdlYktpdERPTURPTVN0cmluZ01hcENsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NVG9rZW5MaXN0IFdlYktpdERPTURPTVRva2Vu
TGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01Ub2tlbkxpc3RDbGFzcyBXZWJLaXRE
T01ET01Ub2tlbkxpc3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVdpbmRv
d1NwZWVjaFN5bnRoZXNpcyBXZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXM7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzQ2xhc3MgV2ViS2l0
RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01EYXRhQ3VlIFdlYktpdERPTURhdGFDdWU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
RGF0YUN1ZUNsYXNzIFdlYktpdERPTURhdGFDdWVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTURhdGFiYXNlIFdlYktpdERPTURhdGFiYXNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTURhdGFiYXNlQ2xhc3MgV2ViS2l0RE9NRGF0YWJhc2VDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9uIFdlYktpdERPTURvY3VtZW50QW5pbWF0aW9u
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9uQ2xhc3MgV2ViS2l0
RE9NRG9jdW1lbnRBbmltYXRpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURv
Y3VtZW50VGltZWxpbmUgV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZTsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lQ2xhc3MgV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGlu
ZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NR2FtZXBhZCBXZWJLaXRET01HYW1l
cGFkOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUdhbWVwYWRDbGFzcyBXZWJLaXRET01HYW1l
cGFkQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01HYW1lcGFkTGlzdCBXZWJLaXRE
T01HYW1lcGFkTGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01HYW1lcGFkTGlzdENsYXNz
IFdlYktpdERPTUdhbWVwYWRMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01H
ZW9sb2NhdGlvbiBXZWJLaXRET01HZW9sb2NhdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01HZW9sb2NhdGlvbkNsYXNzIFdlYktpdERPTUdlb2xvY2F0aW9uQ2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50IFdlYktpdERPTUhUTUxBdWRpb0VsZW1l
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudENsYXNzIFdlYktp
dERPTUhUTUxBdWRpb0VsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhU
TUxEZXRhaWxzRWxlbWVudCBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQ7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTERldGFp
bHNFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MS2V5Z2VuRWxl
bWVudCBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01IVE1MS2V5Z2VuRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50Q2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50IFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVu
dENsYXNzIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQgV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRN
TFZpZGVvRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSGlzdG9yeSBX
ZWJLaXRET01IaXN0b3J5OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhpc3RvcnlDbGFzcyBX
ZWJLaXRET01IaXN0b3J5Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01LZXlmcmFt
ZUVmZmVjdCBXZWJLaXRET01LZXlmcmFtZUVmZmVjdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01LZXlmcmFtZUVmZmVjdENsYXNzIFdlYktpdERPTUtleWZyYW1lRWZmZWN0Q2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01Mb2NhdGlvbiBXZWJLaXRET01Mb2NhdGlvbjsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01Mb2NhdGlvbkNsYXNzIFdlYktpdERPTUxvY2F0aW9uQ2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYUNvbnRyb2xsZXIgV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhQ29udHJvbGxlckNs
YXNzIFdlYktpdERPTU1lZGlhQ29udHJvbGxlckNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NTWVkaWFEZXZpY2VzIFdlYktpdERPTU1lZGlhRGV2aWNlczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01NZWRpYURldmljZXNDbGFzcyBXZWJLaXRET01NZWRpYURldmljZXNDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhRXJyb3IgV2ViS2l0RE9NTWVkaWFFcnJv
cjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYUVycm9yQ2xhc3MgV2ViS2l0RE9NTWVk
aWFFcnJvckNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3Qg
V2ViS2l0RE9NTWVkaWFRdWVyeUxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFR
dWVyeUxpc3RDbGFzcyBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdENsYXNzOworCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzIFdlYktpdERPTU1l
ZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50czsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01N
ZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNDbGFzcyBXZWJLaXRET01NZWRpYVRyYWNrU3Vw
cG9ydGVkQ29uc3RyYWludHNDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lc3Nh
Z2VQb3J0IFdlYktpdERPTU1lc3NhZ2VQb3J0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1l
c3NhZ2VQb3J0Q2xhc3MgV2ViS2l0RE9NTWVzc2FnZVBvcnRDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTU5hdmlnYXRvciBXZWJLaXRET01OYXZpZ2F0b3I7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NTmF2aWdhdG9yQ2xhc3MgV2ViS2l0RE9NTmF2aWdhdG9yQ2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMgV2ViS2l0RE9NTmF2
aWdhdG9yTWVkaWFEZXZpY2VzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5hdmlnYXRvck1l
ZGlhRGV2aWNlc0NsYXNzIFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlc0NsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2UgV2ViS2l0RE9NUGVyZm9ybWFuY2U7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VDbGFzcyBXZWJLaXRET01QZXJm
b3JtYW5jZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRy
eSBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBl
cmZvcm1hbmNlRW50cnlDbGFzcyBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5Q2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24gV2ViS2l0RE9NUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNl
TmF2aWdhdGlvbkNsYXNzIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbkNsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcgV2ViS2l0RE9NUGVyZm9y
bWFuY2VUaW1pbmc7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdD
bGFzcyBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NU2NyZWVuIFdlYktpdERPTVNjcmVlbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01TY3JlZW5DbGFzcyBXZWJLaXRET01TY3JlZW5DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVNwZWVjaFN5bnRoZXNpcyBXZWJLaXRET01TcGVlY2hTeW50aGVzaXM7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzQ2xhc3MgV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNF
dmVudCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01TcGVlY2hTeW50aGVzaXNFdmVudENsYXNzIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2
ZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZUNsYXNzIFdlYktpdERPTVNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVm9pY2UgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2U7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyBXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNWb2ljZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3RvcmFnZSBX
ZWJLaXRET01TdG9yYWdlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0b3JhZ2VDbGFzcyBX
ZWJLaXRET01TdG9yYWdlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdG9yYWdl
SW5mbyBXZWJLaXRET01TdG9yYWdlSW5mbzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdG9y
YWdlSW5mb0NsYXNzIFdlYktpdERPTVN0b3JhZ2VJbmZvQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01TdG9yYWdlUXVvdGEgV2ViS2l0RE9NU3RvcmFnZVF1b3RhOwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTVN0b3JhZ2VRdW90YUNsYXNzIFdlYktpdERPTVN0b3JhZ2VRdW90YUNs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3R5bGVNZWRpYSBXZWJLaXRET01TdHls
ZU1lZGlhOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxlTWVkaWFDbGFzcyBXZWJLaXRE
T01TdHlsZU1lZGlhQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2sg
V2ViS2l0RE9NVGV4dFRyYWNrOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0Ns
YXNzIFdlYktpdERPTVRleHRUcmFja0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
VGV4dFRyYWNrQ3VlIFdlYktpdERPTVRleHRUcmFja0N1ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01UZXh0VHJhY2tDdWVDbGFzcyBXZWJLaXRET01UZXh0VHJhY2tDdWVDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QgV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlTGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0Q2xhc3Mg
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NVGV4dFRyYWNrTGlzdCBXZWJLaXRET01UZXh0VHJhY2tMaXN0OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTVRleHRUcmFja0xpc3RDbGFzcyBXZWJLaXRET01UZXh0VHJhY2tMaXN0Q2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UaW1lUmFuZ2VzIFdlYktpdERPTVRpbWVSYW5n
ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGltZVJhbmdlc0NsYXNzIFdlYktpdERPTVRp
bWVSYW5nZXNDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRvdWNoIFdlYktpdERP
TVRvdWNoOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRvdWNoQ2xhc3MgV2ViS2l0RE9NVG91
Y2hDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRyYWNrRXZlbnQgV2ViS2l0RE9N
VHJhY2tFdmVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UcmFja0V2ZW50Q2xhc3MgV2Vi
S2l0RE9NVHJhY2tFdmVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcjsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJDbGFzcyBXZWJLaXRET01Vc2VyTWVzc2FnZUhh
bmRsZXJDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2UgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ2xhc3MgV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUNsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NVlRUQ3VlIFdlYktpdERPTVZUVEN1ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01WVFRDdWVDbGFzcyBXZWJLaXRET01WVFRDdWVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTVZhbGlkaXR5U3RhdGUgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZTsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01WYWxpZGl0eVN0YXRlQ2xhc3MgV2ViS2l0RE9NVmFsaWRpdHlTdGF0
ZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkg
V2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHk7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
VmlkZW9QbGF5YmFja1F1YWxpdHlDbGFzcyBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eUNs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmlkZW9UcmFjayBXZWJLaXRET01WaWRl
b1RyYWNrOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZpZGVvVHJhY2tDbGFzcyBXZWJLaXRE
T01WaWRlb1RyYWNrQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNr
TGlzdCBXZWJLaXRET01WaWRlb1RyYWNrTGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01W
aWRlb1RyYWNrTGlzdENsYXNzIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01XZWJBbmltYXRpb24gV2ViS2l0RE9NV2ViQW5pbWF0aW9uOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYkFuaW1hdGlvbkNsYXNzIFdlYktpdERPTVdlYkFu
aW1hdGlvbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93
IFdlYktpdERPTVdlYktpdE5hbWVkRmxvdzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XZWJL
aXROYW1lZEZsb3dDbGFzcyBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dDbGFzczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdE5hbWVzcGFjZSBXZWJLaXRET01XZWJLaXROYW1lc3Bh
Y2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlQ2xhc3MgV2ViS2l0
RE9NV2ViS2l0TmFtZXNwYWNlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XZWJL
aXRQb2ludCBXZWJLaXRET01XZWJLaXRQb2ludDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01X
ZWJLaXRQb2ludENsYXNzIFdlYktpdERPTVdlYktpdFBvaW50Q2xhc3M7CisKKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tYXV0b2NsZWFudXBzLXVuc3RhYmxlLmg+CisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0
ZG9tZGVmaW5lcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS93ZWJraXRkb21kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZmQ4MmI2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tZGVmaW5lcy5oCkBAIC0w
LDAgKzEsMzM0IEBACisvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdvYmplY3Qt
Z2VuZXJhdGUtaGVhZGVycy5wbC4gIERPIE5PVCBNT0RJRlkhCisgICAKKyAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiB3ZWJraXRkb21kZWZpbmVz
X2gKKyNkZWZpbmUgd2Via2l0ZG9tZGVmaW5lc19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNp
ZmRlZiBHX09TX1dJTjMyCisgICAgI2lmZGVmIEJVSUxESU5HX1dFQktJVAorICAgICAgICAjZGVm
aW5lIFdFQktJVF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisgICAgI2Vsc2UKKyAgICAgICAg
I2RlZmluZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICNlbmRpZgorI2Vs
c2UKKyAgICAjZGVmaW5lIFdFQktJVF9BUEkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVm
YXVsdCIpKSkKKyNlbmRpZgorCisjZGVmaW5lIFdFQktJVF9ERVBSRUNBVEVEIFdFQktJVF9BUEkg
R19ERVBSRUNBVEVECisjZGVmaW5lIFdFQktJVF9ERVBSRUNBVEVEX0ZPUihmKSBXRUJLSVRfQVBJ
IEdfREVQUkVDQVRFRF9GT1IoZikKKworI2lmbmRlZiBXRUJLSVRfQVBJCisgICAgI2RlZmluZSBX
RUJLSVRfQVBJCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01BdHRyIFdlYktpdERP
TUF0dHI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQXR0ckNsYXNzIFdlYktpdERPTUF0dHJD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUJsb2IgV2ViS2l0RE9NQmxvYjsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01CbG9iQ2xhc3MgV2ViS2l0RE9NQmxvYkNsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ0RBVEFTZWN0aW9uIFdlYktpdERPTUNEQVRBU2VjdGlv
bjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DREFUQVNlY3Rpb25DbGFzcyBXZWJLaXRET01D
REFUQVNlY3Rpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1J1bGUgV2Vi
S2l0RE9NQ1NTUnVsZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NSdWxlQ2xhc3MgV2Vi
S2l0RE9NQ1NTUnVsZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ1NTUnVsZUxp
c3QgV2ViS2l0RE9NQ1NTUnVsZUxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ1NTUnVs
ZUxpc3RDbGFzcyBXZWJLaXRET01DU1NSdWxlTGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25DbGFzcyBXZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01DU1NTdHlsZVNoZWV0IFdlYktpdERPTUNTU1N0eWxlU2hlZXQ7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NQ1NTU3R5bGVTaGVldENsYXNzIFdlYktpdERPTUNTU1N0eWxlU2hlZXRDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1ZhbHVlIFdlYktpdERPTUNTU1ZhbHVlOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1ZhbHVlQ2xhc3MgV2ViS2l0RE9NQ1NTVmFsdWVD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNoYXJhY3RlckRhdGEgV2ViS2l0RE9N
Q2hhcmFjdGVyRGF0YTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DaGFyYWN0ZXJEYXRhQ2xh
c3MgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NQ29tbWVudCBXZWJLaXRET01Db21tZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNv
bW1lbnRDbGFzcyBXZWJLaXRET01Db21tZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01ET01JbXBsZW1lbnRhdGlvbiBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbjsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbkNsYXNzIFdlYktpdERPTURPTUlt
cGxlbWVudGF0aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01XaW5kb3cg
V2ViS2l0RE9NRE9NV2luZG93OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVdpbmRvd0Ns
YXNzIFdlYktpdERPTURPTVdpbmRvd0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
RG9jdW1lbnQgV2ViS2l0RE9NRG9jdW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRG9j
dW1lbnRDbGFzcyBXZWJLaXRET01Eb2N1bWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NRG9jdW1lbnRGcmFnbWVudCBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTURvY3VtZW50RnJhZ21lbnRDbGFzcyBXZWJLaXRET01Eb2N1bWVu
dEZyYWdtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudFR5cGUg
V2ViS2l0RE9NRG9jdW1lbnRUeXBlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURvY3VtZW50
VHlwZUNsYXNzIFdlYktpdERPTURvY3VtZW50VHlwZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NRWxlbWVudCBXZWJLaXRET01FbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUVsZW1lbnRDbGFzcyBXZWJLaXRET01FbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01FdmVudCBXZWJLaXRET01FdmVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01FdmVudENsYXNzIFdlYktpdERPTUV2ZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01FdmVudFRhcmdldCBXZWJLaXRET01FdmVudFRhcmdldDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01FdmVudFRhcmdldElmYWNlIFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2U7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01GaWxlIFdlYktpdERPTUZpbGU7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRmlsZUNsYXNzIFdlYktpdERPTUZpbGVDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUZpbGVMaXN0IFdlYktpdERPTUZpbGVMaXN0OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUZpbGVMaXN0Q2xhc3MgV2ViS2l0RE9NRmlsZUxpc3RDbGFzczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50IFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Q2xhc3Mg
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUhUTUxBcHBsZXRFbGVtZW50IFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEFw
cGxldEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxBcmVhRWxl
bWVudCBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
SFRNTEFyZWFFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Q2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQlJFbGVtZW50IFdlYktpdERPTUhUTUxCUkVsZW1l
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEJSRWxlbWVudENsYXNzIFdlYktpdERP
TUhUTUxCUkVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxCYXNl
RWxlbWVudCBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTEJhc2VFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50Q2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQm9keUVsZW1lbnQgV2ViS2l0RE9NSFRNTEJv
ZHlFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxCb2R5RWxlbWVudENsYXNz
IFdlYktpdERPTUhUTUxCb2R5RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTEJ1dHRvbkVsZW1lbnQgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTENhbnZhc0Vs
ZW1lbnQgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTENhbnZhc0VsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudENsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25DbGFz
cyBXZWJLaXRET01IVE1MQ29sbGVjdGlvbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTERMaXN0RWxlbWVudCBXZWJLaXRET01IVE1MRExpc3RFbGVtZW50OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRExpc3RF
bGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxl
bWVudCBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01IVE1MRGlyZWN0b3J5RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVt
ZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRGl2RWxlbWVudCBXZWJL
aXRET01IVE1MRGl2RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRGl2RWxl
bWVudENsYXNzIFdlYktpdERPTUhUTUxEaXZFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01IVE1MRG9jdW1lbnQgV2ViS2l0RE9NSFRNTERvY3VtZW50OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUhUTUxEb2N1bWVudENsYXNzIFdlYktpdERPTUhUTUxEb2N1bWVudENs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEVsZW1lbnQgV2ViS2l0RE9NSFRN
TEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEVt
YmVkRWxlbWVudCBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUhUTUxFbWJlZEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50Q2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50IFdlYktp
dERPTUhUTUxGaWVsZFNldEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEZp
ZWxkU2V0RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRDbGFzczsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxGb250RWxlbWVudCBXZWJLaXRET01IVE1MRm9u
dEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Q2xhc3Mg
V2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50OwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUhUTUxGb3JtRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCBXZWJL
aXRET01IVE1MRnJhbWVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxGcmFt
ZUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50IFdlYktpdERPTUhUTUxGcmFtZVNl
dEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudENs
YXNzIFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxIUkVsZW1lbnQgV2ViS2l0RE9NSFRNTEhSRWxlbWVudDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MSFJFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEhSRWxlbWVu
dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50IFdlYktp
dERPTUhUTUxIZWFkRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MSGVhZEVs
ZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1l
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50Q2xhc3MgV2Vi
S2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01IVE1MSHRtbEVsZW1lbnQgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50OwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUhUTUxIdG1sRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxIdG1sRWxlbWVu
dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQgV2Vi
S2l0RE9NSFRNTElGcmFtZUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudENsYXNzOworCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCBXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRDbGFzcyBX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50IFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQ7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxMSUVsZW1lbnQgV2Vi
S2l0RE9NSFRNTExJRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTElFbGVt
ZW50Q2xhc3MgV2ViS2l0RE9NSFRNTExJRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50OwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1M
TGFiZWxFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTGVnZW5k
RWxlbWVudCBXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01IVE1MTGVnZW5kRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50Q2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQgV2ViS2l0RE9N
SFRNTExpbmtFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxMaW5rRWxlbWVu
dENsYXNzIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQgV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MTWFwRWxl
bWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
IFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01I
VE1MTWFycXVlZUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZW51RWxlbWVudCBXZWJLaXRET01IVE1M
TWVudUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50Q2xh
c3MgV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01IVE1MTWV0YUVsZW1lbnQgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUhUTUxNZXRhRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxNZXRhRWxl
bWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQgV2Vi
S2l0RE9NSFRNTE1vZEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE1vZEVs
ZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MTW9kRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRDbGFzcyBXZWJLaXRET01I
VE1MT0xpc3RFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudCBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50IFdl
YktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TE9wdEdyb3VwRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnRDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50IFdlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRpb25FbGVt
ZW50Q2xhc3MgV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiBXZWJLaXRET01IVE1MT3B0aW9uc0Nv
bGxlY3Rpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9u
Q2xhc3MgV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCBXZWJLaXRET01IVE1MUGFyYWdyYXBo
RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudENs
YXNzIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50IFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQ7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudENsYXNzIFdlYktpdERPTUhU
TUxQYXJhbUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxQcmVF
bGVtZW50IFdlYktpdERPTUhUTUxQcmVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxQcmVFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQgV2ViS2l0RE9NSFRNTFF1b3Rl
RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50Q2xhc3Mg
V2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTFNjcmlwdEVsZW1lbnQgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MU2Ny
aXB0RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnQgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudENsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCBXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxTdHlsZUVsZW1l
bnRDbGFzcyBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCBXZWJLaXRET01IVE1MVGFibGVDYXB0
aW9uRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxl
bWVudENsYXNzIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCBXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudENsYXNzIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50IFdlYktpdERPTUhUTUxUYWJsZUNv
bEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudENs
YXNzIFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxl
Um93RWxlbWVudCBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MVGFibGVSb3dF
bGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9u
RWxlbWVudCBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50IFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUaXRsZUVsZW1l
bnQgV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01I
VE1MVGl0bGVFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudENsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCBXZWJLaXRET01IVE1MVUxp
c3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnRDbGFz
cyBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01LZXlib2FyZEV2ZW50IFdlYktpdERPTUtleWJvYXJkRXZlbnQ7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NS2V5Ym9hcmRFdmVudENsYXNzIFdlYktpdERPTUtleWJvYXJkRXZlbnRDbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhTGlzdCBXZWJLaXRET01NZWRpYUxp
c3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFMaXN0Q2xhc3MgV2ViS2l0RE9NTWVk
aWFMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Nb3VzZUV2ZW50IFdlYktp
dERPTU1vdXNlRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTW91c2VFdmVudENsYXNz
IFdlYktpdERPTU1vdXNlRXZlbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5h
bWVkTm9kZU1hcCBXZWJLaXRET01OYW1lZE5vZGVNYXA7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NTmFtZWROb2RlTWFwQ2xhc3MgV2ViS2l0RE9NTmFtZWROb2RlTWFwQ2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01Ob2RlIFdlYktpdERPTU5vZGU7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NTm9kZUNsYXNzIFdlYktpdERPTU5vZGVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTU5vZGVGaWx0ZXIgV2ViS2l0RE9NTm9kZUZpbHRlcjsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01Ob2RlRmlsdGVySWZhY2UgV2ViS2l0RE9NTm9kZUZpbHRlcklmYWNlOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZUl0ZXJhdG9yIFdlYktpdERPTU5vZGVJdGVyYXRv
cjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ob2RlSXRlcmF0b3JDbGFzcyBXZWJLaXRET01O
b2RlSXRlcmF0b3JDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5vZGVMaXN0IFdl
YktpdERPTU5vZGVMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5vZGVMaXN0Q2xhc3Mg
V2ViS2l0RE9NTm9kZUxpc3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU9iamVj
dCBXZWJLaXRET01PYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NT2JqZWN0Q2xhc3Mg
V2ViS2l0RE9NT2JqZWN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24gV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbkNsYXNzIFdlYktpdERPTVByb2Nl
c3NpbmdJbnN0cnVjdGlvbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUmFuZ2Ug
V2ViS2l0RE9NUmFuZ2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUmFuZ2VDbGFzcyBXZWJL
aXRET01SYW5nZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3R5bGVTaGVldCBX
ZWJLaXRET01TdHlsZVNoZWV0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxlU2hlZXRD
bGFzcyBXZWJLaXRET01TdHlsZVNoZWV0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01TdHlsZVNoZWV0TGlzdCBXZWJLaXRET01TdHlsZVNoZWV0TGlzdDsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01TdHlsZVNoZWV0TGlzdENsYXNzIFdlYktpdERPTVN0eWxlU2hlZXRMaXN0Q2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0IFdlYktpdERPTVRleHQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4dENsYXNzIFdlYktpdERPTVRleHRDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRyZWVXYWxrZXIgV2ViS2l0RE9NVHJlZVdhbGtlcjsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01UcmVlV2Fsa2VyQ2xhc3MgV2ViS2l0RE9NVHJlZVdhbGtl
ckNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVUlFdmVudCBXZWJLaXRET01VSUV2
ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVVJRXZlbnRDbGFzcyBXZWJLaXRET01VSUV2
ZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XaGVlbEV2ZW50IFdlYktpdERP
TVdoZWVsRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2hlZWxFdmVudENsYXNzIFdl
YktpdERPTVdoZWVsRXZlbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVhQYXRo
RXhwcmVzc2lvbiBXZWJLaXRET01YUGF0aEV4cHJlc3Npb247Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NWFBhdGhFeHByZXNzaW9uQ2xhc3MgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uQ2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIgV2ViS2l0RE9NWFBh
dGhOU1Jlc29sdmVyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVhQYXRoTlNSZXNvbHZlcklm
YWNlIFdlYktpdERPTVhQYXRoTlNSZXNvbHZlcklmYWNlOworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NWFBhdGhSZXN1bHQgV2ViS2l0RE9NWFBhdGhSZXN1bHQ7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NWFBhdGhSZXN1bHRDbGFzcyBXZWJLaXRET01YUGF0aFJlc3VsdENsYXNzOworCisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5oPgorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09w
dGlvbnNHVEsuY21ha2UKaW5kZXggMjExMDJiYi4uYWNiYTViYiAxMDA2NDQKLS0tIGEvU291cmNl
L2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21h
a2UKQEAgLTQyNSwxMCArNDI1LDggQEAgaWYgKEFQUExFKQogICAgIHNldChFTkFCTEVfR1RLRE9D
IE9GRikKIGVuZGlmICgpCiAKLXNldChERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElO
R1NfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vd2Via2l0ZG9tKQogc2V0KERFUklWRURfU09V
UkNFU19XRUJLSVRHVEtfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vd2Via2l0Z3RrKQogc2V0
KERFUklWRURfU09VUkNFU19XRUJLSVRHVEtfQVBJX0RJUiAke0RFUklWRURfU09VUkNFU19XRUJL
SVRHVEtfRElSfS93ZWJraXQpCi1zZXQoREVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJ
TkdTX0RJUiAke0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdGRvbSkKIHNldChERVJJVkVEX1NP
VVJDRVNfV0VCS0lUMkdUS19ESVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS93ZWJraXQyZ3RrKQog
c2V0KERFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0FQSV9ESVIgJHtERVJJVkVEX1NPVVJDRVNf
V0VCS0lUMkdUS19ESVJ9L3dlYmtpdDIpCiBzZXQoRk9SV0FSRElOR19IRUFERVJTX0RJUiAke0RF
UklWRURfU09VUkNFU19ESVJ9L0ZvcndhcmRpbmdIZWFkZXJzKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyLmNmZyBiL1Rv
b2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5jZmcK
aW5kZXggOGNiYjk2Ni4uNDg4ZDgyOSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyLmNmZworKysgYi9Ub29scy9CdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0ZXIuY2ZnCkBAIC02MzMsMzcg
KzYzMyw2IEBAIGNsYXNzIFJ1bkd0a0FQSVRlc3RzKHNoZWxsLlRlc3QpOgogCiAgICAgICAgIHJl
dHVybiBbc2VsZi5uYW1lXQogCi1jbGFzcyBSdW5HdGtXZWJLaXRHT2JqZWN0RE9NQmluZGluZ3NB
UElCcmVha1Rlc3RzKHNoZWxsLlRlc3QpOgotICAgIG5hbWUgPSAiV2ViS2l0IEdPYmplY3QgRE9N
IGJpbmRpbmdzIEFQSSBicmVhayB0ZXN0cyIKLSAgICBkZXNjcmlwdGlvbiA9IFsiV2ViS2l0IEdP
YmplY3QgRE9NIGJpbmRpbmdzIEFQSSBicmVhayB0ZXN0cyBydW5uaW5nIl0KLSAgICBkZXNjcmlw
dGlvbkRvbmUgPSBbIldlYktpdCBHT2JqZWN0IERPTSBiaW5kaW5ncyBBUEkgYnJlYWsgdGVzdHMi
XQotICAgIGNvbW1hbmQgPSBbIi4vVG9vbHMvZ3RrL2NoZWNrLWZvci13ZWJraXRkb20tYXBpLWJy
ZWFrcyJdCi0KLSAgICBkZWYgY29tbWFuZENvbXBsZXRlKHNlbGYsIGNtZCk6Ci0gICAgICAgIHNo
ZWxsLlRlc3QuY29tbWFuZENvbXBsZXRlKHNlbGYsIGNtZCkKLQotICAgICAgICBsb2dUZXh0ID0g
Y21kLmxvZ3NbJ3N0ZGlvJ10uZ2V0VGV4dCgpCi0KLSAgICAgICAgc2VsZi5taXNzaW5nQVBJID0g
Ym9vbChyZS5maW5kYWxsKCJNaXNzaW5nIEFQSSIsIGxvZ1RleHQpKQotICAgICAgICBzZWxmLm5l
d0FQSSA9IGJvb2wocmUuZmluZGFsbCgiTmV3IEFQSSIsIGxvZ1RleHQpKQotCi0gICAgICAgIGxp
bmUgPSAiIgotICAgICAgICBpZiBzZWxmLm5ld0FQSToKLSAgICAgICAgICAgIGxpbmUgKz0gIkZv
dW5kIG5ldyBBUEkuIgotICAgICAgICBpZiBzZWxmLm1pc3NpbmdBUEk6Ci0gICAgICAgICAgICBs
aW5lICs9ICJGb3VuZCBtaXNzaW5nIEFQSS4iCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAg
ICBzZWxmLnN0YXR1c0xpbmUgPSBbIGxpbmUgXQotCi0gICAgZGVmIGV2YWx1YXRlQ29tbWFuZChz
ZWxmLCBjbWQpOgotICAgICAgICBpZiBzZWxmLm1pc3NpbmdBUEk6Ci0gICAgICAgICAgICByZXR1
cm4gRkFJTFVSRQotICAgICAgICBpZiBzZWxmLm5ld0FQSToKLSAgICAgICAgICAgIHJldHVybiBX
QVJOSU5HUwotICAgICAgICBpZiBjbWQucmMgIT0gMDoKLSAgICAgICAgICAgIHJldHVybiBGQUlM
VVJFCi0gICAgICAgIHJldHVybiBTVUNDRVNTCi0KIGNsYXNzIFJ1bldlYktpdDFUZXN0cyhSdW5X
ZWJLaXRUZXN0cyk6CiAgICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgICBzZWxmLnNldENvbW1h
bmQoc2VsZi5jb21tYW5kICsgWyItLWR1bXAtcmVuZGVyLXRyZWUiXSkKQEAgLTg2Myw3ICs4MzIs
NiBAQCBjbGFzcyBUZXN0RmFjdG9yeShGYWN0b3J5KToKICAgICAgICAgICAgIHNlbGYuYWRkU3Rl
cChSdW5FZmxBUElUZXN0cygpKQogICAgICAgICBpZiBwbGF0Zm9ybSA9PSAiZ3RrIjoKICAgICAg
ICAgICAgIHNlbGYuYWRkU3RlcChSdW5HdGtBUElUZXN0cygpKQotICAgICAgICAgICAgc2VsZi5h
ZGRTdGVwKFJ1bkd0a1dlYktpdEdPYmplY3RET01CaW5kaW5nc0FQSUJyZWFrVGVzdHMoKSkKIAog
Y2xhc3MgQnVpbGRBbmRUZXN0RmFjdG9yeShUZXN0RmFjdG9yeSk6CiAgICAgZGVmIGdldFByb2R1
Y3Qoc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJr
aXQub3JnLWNvbmZpZy9tYXN0ZXJjZmdfdW5pdHRlc3QucHkgYi9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0ZXJjZmdfdW5pdHRlc3QucHkKaW5kZXgg
MmFmMzYwMS4uMmU4YWU1OSAxMDA3NTUKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyY2ZnX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3RlcmNmZ191bml0dGVz
dC5weQpAQCAtNDE1LDEzICs0MTUsMTMgQEAgZXhwZWN0ZWRfYnVpbGRfc3RlcHMgPSB7CiAgICAg
J0pTQ09ubHkgTGludXggQVJNdjcgVHJhZGl0aW9uYWwgUmVsZWFzZScgOiBbJ2NvbmZpZ3VyZSBi
dWlsZCcsICd3YWl0LWZvci1zdm4tc2VydmVyJywgJ3N2bicsICdkZWxldGUgV2ViS2l0QnVpbGQg
ZGlyZWN0b3J5JywgJ2RlbGV0ZSBzdGFsZSBidWlsZCBmaWxlcycsICdjb21waWxlLXdlYmtpdCcs
ICdqc2NvcmUtdGVzdCddLAogICAgICdKU0NPbmx5IExpbnV4IEFBcmNoNjQgUmVsZWFzZScgOiBb
J2NvbmZpZ3VyZSBidWlsZCcsICd3YWl0LWZvci1zdm4tc2VydmVyJywgJ3N2bicsICdkZWxldGUg
V2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBzdGFsZSBidWlsZCBmaWxlcycsICdjb21w
aWxlLXdlYmtpdCcsICdqc2NvcmUtdGVzdCddLAogCi0gICAgJ0dUSyBMaW51eCAzMi1iaXQgUmVs
ZWFzZScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJvY2Vzc2VzJywg
J2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVz
JywgJ2poYnVpbGQnLCAnY29tcGlsZS13ZWJraXQnLCAnanNjb3JlLXRlc3QnLCAnd2Via2l0cHkt
dGVzdCcsICd3ZWJraXRwZXJsLXRlc3QnLCAnYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cycsICdi
dWlsdGlucy1nZW5lcmF0aW9uLXRlc3RzJywgJ0FQSSB0ZXN0cycsICdXZWJLaXQgR09iamVjdCBE
T00gYmluZGluZ3MgQVBJIGJyZWFrIHRlc3RzJ10sCisgICAgJ0dUSyBMaW51eCAzMi1iaXQgUmVs
ZWFzZScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJvY2Vzc2VzJywg
J2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVz
JywgJ2poYnVpbGQnLCAnY29tcGlsZS13ZWJraXQnLCAnanNjb3JlLXRlc3QnLCAnd2Via2l0cHkt
dGVzdCcsICd3ZWJraXRwZXJsLXRlc3QnLCAnYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cycsICdi
dWlsdGlucy1nZW5lcmF0aW9uLXRlc3RzJywgJ0FQSSB0ZXN0cyddLAogICAgICdHVEsgTGludXgg
NjQtYml0IERlYnVnIChCdWlsZCknIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tpbGwg
b2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBz
dGFsZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2NvbXBpbGUtd2Via2l0JywgJ2FyY2hpdmUt
YnVpbHQtcHJvZHVjdCcsICd1cGxvYWQnLCAndHJpZ2dlciddLAotICAgICdHVEsgTGludXggNjQt
Yml0IERlYnVnIChUZXN0cyknIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tpbGwgb2xk
IHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBzdGFs
ZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2Rvd25sb2FkLWJ1aWx0LXByb2R1Y3QnLCAnZXh0
cmFjdC1idWlsdC1wcm9kdWN0JywgJ2pzY29yZS10ZXN0JywgJ2xheW91dC10ZXN0JywgJ3dlYmtp
dHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0JywgJ2JpbmRpbmdzLWdlbmVyYXRpb24tdGVzdHMn
LCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycsICdhcmNoaXZlLXRlc3QtcmVzdWx0cycsICd1
cGxvYWQnLCAnTWFzdGVyU2hlbGxDb21tYW5kJywgJ0FQSSB0ZXN0cycsICdXZWJLaXQgR09iamVj
dCBET00gYmluZGluZ3MgQVBJIGJyZWFrIHRlc3RzJ10sCisgICAgJ0dUSyBMaW51eCA2NC1iaXQg
RGVidWcgKFRlc3RzKScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJv
Y2Vzc2VzJywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1
aWxkIGZpbGVzJywgJ2poYnVpbGQnLCAnZG93bmxvYWQtYnVpbHQtcHJvZHVjdCcsICdleHRyYWN0
LWJ1aWx0LXByb2R1Y3QnLCAnanNjb3JlLXRlc3QnLCAnbGF5b3V0LXRlc3QnLCAnd2Via2l0cHkt
dGVzdCcsICd3ZWJraXRwZXJsLXRlc3QnLCAnYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cycsICdi
dWlsdGlucy1nZW5lcmF0aW9uLXRlc3RzJywgJ2FyY2hpdmUtdGVzdC1yZXN1bHRzJywgJ3VwbG9h
ZCcsICdNYXN0ZXJTaGVsbENvbW1hbmQnLCAnQVBJIHRlc3RzJ10sCiAgICAgJ0dUSyBMaW51eCA2
NC1iaXQgUmVsZWFzZSAoQnVpbGQpJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2bicsICdraWxs
IG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdkZWxldGUg
c3RhbGUgYnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdjb21waWxlLXdlYmtpdCcsICdhcmNoaXZl
LWJ1aWx0LXByb2R1Y3QnLCAndXBsb2FkJywgJ3RyaWdnZXInXSwKICAgICAnR1RLIExpbnV4IDY0
LWJpdCBSZWxlYXNlIChQZXJmKScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBv
bGQgcHJvY2Vzc2VzJywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0
YWxlIGJ1aWxkIGZpbGVzJywgJ2poYnVpbGQnLCAnZG93bmxvYWQtYnVpbHQtcHJvZHVjdCcsICdl
eHRyYWN0LWJ1aWx0LXByb2R1Y3QnLCAncGVyZi10ZXN0JywgJ2JlbmNobWFyay10ZXN0J10sCi0g
ICAgJ0dUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSAoVGVzdHMpJyA6IFsnY29uZmlndXJlIGJ1aWxk
JywgJ3N2bicsICdraWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVj
dG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdkb3dubG9hZC1i
dWlsdC1wcm9kdWN0JywgJ2V4dHJhY3QtYnVpbHQtcHJvZHVjdCcsICdqc2NvcmUtdGVzdCcsICds
YXlvdXQtdGVzdCcsICd3ZWJraXRweS10ZXN0JywgJ3dlYmtpdHBlcmwtdGVzdCcsICdiaW5kaW5n
cy1nZW5lcmF0aW9uLXRlc3RzJywgJ2J1aWx0aW5zLWdlbmVyYXRpb24tdGVzdHMnLCAnYXJjaGl2
ZS10ZXN0LXJlc3VsdHMnLCAndXBsb2FkJywgJ01hc3RlclNoZWxsQ29tbWFuZCcsICdBUEkgdGVz
dHMnLCAnV2ViS2l0IEdPYmplY3QgRE9NIGJpbmRpbmdzIEFQSSBicmVhayB0ZXN0cyddLAotICAg
ICdHVEsgTGludXggQVJNIFJlbGVhc2UnIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tp
bGwgb2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0
ZSBzdGFsZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2NvbXBpbGUtd2Via2l0JywgJ2pzY29y
ZS10ZXN0JywgJ3dlYmtpdHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0JywgJ2JpbmRpbmdzLWdl
bmVyYXRpb24tdGVzdHMnLCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycsICdBUEkgdGVzdHMn
LCAnV2ViS2l0IEdPYmplY3QgRE9NIGJpbmRpbmdzIEFQSSBicmVhayB0ZXN0cyddLAorICAgICdH
VEsgTGludXggNjQtYml0IFJlbGVhc2UgKFRlc3RzKScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdz
dm4nLCAna2lsbCBvbGQgcHJvY2Vzc2VzJywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3Rvcnkn
LCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywgJ2poYnVpbGQnLCAnZG93bmxvYWQtYnVpbHQt
cHJvZHVjdCcsICdleHRyYWN0LWJ1aWx0LXByb2R1Y3QnLCAnanNjb3JlLXRlc3QnLCAnbGF5b3V0
LXRlc3QnLCAnd2Via2l0cHktdGVzdCcsICd3ZWJraXRwZXJsLXRlc3QnLCAnYmluZGluZ3MtZ2Vu
ZXJhdGlvbi10ZXN0cycsICdidWlsdGlucy1nZW5lcmF0aW9uLXRlc3RzJywgJ2FyY2hpdmUtdGVz
dC1yZXN1bHRzJywgJ3VwbG9hZCcsICdNYXN0ZXJTaGVsbENvbW1hbmQnLCAnQVBJIHRlc3RzJ10s
CisgICAgJ0dUSyBMaW51eCBBUk0gUmVsZWFzZScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4n
LCAna2lsbCBvbGQgcHJvY2Vzc2VzJywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAn
ZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywgJ2poYnVpbGQnLCAnY29tcGlsZS13ZWJraXQnLCAn
anNjb3JlLXRlc3QnLCAnd2Via2l0cHktdGVzdCcsICd3ZWJraXRwZXJsLXRlc3QnLCAnYmluZGlu
Z3MtZ2VuZXJhdGlvbi10ZXN0cycsICdidWlsdGlucy1nZW5lcmF0aW9uLXRlc3RzJywgJ0FQSSB0
ZXN0cyddLAogCiAgICAgJ1dpbkNhaXJvIDY0LUJpdCBSZWxlYXNlJyA6IFsnY29uZmlndXJlIGJ1
aWxkJywgJ3N2bicsICdraWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRp
cmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnY29tcGlsZS13ZWJraXQnXSwK
IH0KQEAgLTQ1NCw1MSArNDU0LDYgQEAgY2xhc3MgQnVpbGRTdGVwc1Rlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ1aWxkZXIgaW4gYnVpbGRlcnMs
ICJCdWlsZGVyICVzIGRvZXNuJ3QgZXhpc3QsIGJ1dCBoYXMgdW5uZWNlc3NhcnkgZXhwZWN0ZWQg
cmVzdWx0cyIgJSBidWlsZGVyKQogCiAKLWNsYXNzIFJ1bkd0a1dlYktpdEdPYmplY3RET01CaW5k
aW5nc0FQSUJyZWFrVGVzdHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgYXNzZXJ0
UmVzdWx0cyhzZWxmLCBleHBlY3RlZF9taXNzaW5nLCBleHBlY3RlZF9uZXcsIHN0ZGlvKToKLSAg
ICAgICAgZXhwZWN0ZWRfdGV4dCA9ICIiCi0gICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSBTVUND
RVNTCi0gICAgICAgIGlmIGV4cGVjdGVkX25ldzoKLSAgICAgICAgICAgIGV4cGVjdGVkX3Jlc3Vs
dHMgPSBXQVJOSU5HUwotICAgICAgICBpZiBleHBlY3RlZF9taXNzaW5nOgotICAgICAgICAgICAg
ZXhwZWN0ZWRfcmVzdWx0cyA9IEZBSUxVUkUKLQotICAgICAgICBjbWQgPSBTdHViUmVtb3RlQ29t
bWFuZCgwLCBzdGRpbykKLSAgICAgICAgc3RlcCA9IFJ1bkd0a1dlYktpdEdPYmplY3RET01CaW5k
aW5nc0FQSUJyZWFrVGVzdHMoKQotICAgICAgICBzdGVwLmNvbW1hbmRDb21wbGV0ZShjbWQpCi0K
LSAgICAgICAgYWN0dWFsX3Jlc3VsdHMgPSBzdGVwLmV2YWx1YXRlQ29tbWFuZChjbWQpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcmVzdWx0cywgYWN0dWFsX3Jlc3VsdHMpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbWlzc2luZywgc3RlcC5taXNzaW5nQVBJ
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX25ldywgc3RlcC5uZXdBUEkpCi0K
LSAgICBkZWYgdGVzdF9taXNzaW5nX2FuZF9uZXdfYXBpKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydFJlc3VsdHMoZXhwZWN0ZWRfbWlzc2luZz1UcnVlLCBleHBlY3RlZF9uZXc9VHJ1ZSwgc3Rk
aW89IiIiTWlzc2luZyBBUEkgKEFQSSBicmVhayEpIGRldGVjdGVkIGluIEdPYmplY3QgRE9NIGJp
bmRpbmdzCi0gICAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dl
YmtpdGRpcmVjdG9yeShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KikKLSAgICBnY2hhciogd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfdGV4dChXZWJLaXRET01UZXh0VHJhY2tDdWUqKQot
Ci1OZXcgQVBJIGRldGVjdGVkIGluIEdPYmplY3QgRE9NIGJpbmRpbmdzCi0gICAgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY2FwdHVyZShXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiwgZ2Jvb2xlYW4pCi0gICAgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2NhcHR1cmUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCopCi0gICAgdm9pZCB3
ZWJraXRfZG9tX3RleHRfdHJhY2tfYWRkX2N1ZShXZWJLaXRET01UZXh0VHJhY2sqLCBXZWJLaXRE
T01UZXh0VHJhY2tDdWUqLCBHRXJyb3IqKikKLSAgICBnY2hhciogd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfb3JpZ2luKFdlYktpdERPTURvY3VtZW50KikiIiIpCi0KLSAgICBkZWYgdGVzdF9taXNz
aW5nX2FwaShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSZXN1bHRzKGV4cGVjdGVkX21pc3Np
bmc9VHJ1ZSwgZXhwZWN0ZWRfbmV3PUZhbHNlLCBzdGRpbz0iIiJNaXNzaW5nIEFQSSAoQVBJIGJy
ZWFrISkgZGV0ZWN0ZWQgaW4gR09iamVjdCBET00gYmluZGluZ3MKLSAgICBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2Via2l0ZGlyZWN0b3J5KFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqKQotICAgIGdjaGFyKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dl
dF90ZXh0KFdlYktpdERPTVRleHRUcmFja0N1ZSopIiIiKQotCi0gICAgZGVmIHRlc3RfbmV3X2Fw
aShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSZXN1bHRzKGV4cGVjdGVkX21pc3Npbmc9RmFs
c2UsIGV4cGVjdGVkX25ldz1UcnVlLCBzdGRpbz0iIiJOZXcgQVBJIGRldGVjdGVkIGluIEdPYmpl
Y3QgRE9NIGJpbmRpbmdzCi0gICAgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfY2FwdHVyZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiwgZ2Jvb2xlYW4pCi0gICAgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NhcHR1cmUoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCopCi0gICAgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfYWRkX2N1
ZShXZWJLaXRET01UZXh0VHJhY2sqLCBXZWJLaXRET01UZXh0VHJhY2tDdWUqLCBHRXJyb3IqKikK
LSAgICBnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfb3JpZ2luKFdlYktpdERPTURvY3Vt
ZW50KikiIiIpCi0KLSAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydFJlc3VsdHMoZXhwZWN0ZWRfbWlzc2luZz1GYWxzZSwgZXhwZWN0ZWRfbmV3PUZhbHNlLCBz
dGRpbz0iIikKLQotCiBjbGFzcyBSdW5BbmRVcGxvYWRQZXJmVGVzdHNUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICBkZWYgYXNzZXJ0UmVzdWx0cyhzZWxmLCByYywgZXhwZWN0ZWRfdGV4dCk6
CiAgICAgICAgIGNtZCA9IFN0dWJSZW1vdGVDb21tYW5kKHJjLCBleHBlY3RlZF90ZXh0KQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUwZDUxNzEu
LjU1YjRkNjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0NCBAQAorMjAxNi0wOC0zMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHT2JqZWN0IERPTSBiaW5k
aW5ncyB0byBXZWJLaXQyIGxheWVyIGFuZCBzdG9wIGF1dG8gZ2VuZXJhdGluZyB0aGVtCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MzgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgc2NyaXB0
cyByZWxhdGVkIHRvIHRoZSBHT2JqZWN0IERPTSBiaW5kaW5ncyBhdXRvLWdlbmVyYXRpb24uCisK
KyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0
ZXIuY2ZnOgorICAgICAgICAoUnVuR3RrQVBJVGVzdHMuZ2V0VGV4dDIpOgorICAgICAgICAoVGVz
dEZhY3RvcnkuX19pbml0X18pOgorICAgICAgICAoUnVuV2ViS2l0MVRlc3RzKTogRGVsZXRlZC4K
KyAgICAgICAgKFJ1bldlYktpdDFUZXN0cy5zdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChSdW5X
ZWJLaXQxTGVha1Rlc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bldlYktpdDFMZWFrVGVzdHMu
c3RhcnQpOiBEZWxldGVkLgorICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3RzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0cy5zdGFydCk6IERlbGV0ZWQuCisgICAg
ICAgIChCdWlsZEFuZFJlbW90ZUpTQ1Rlc3RzRmFjdG9yeS5fX2luaXRfXyk6IERlbGV0ZWQuCisg
ICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVy
Y2ZnX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQnVpbGRTdGVwc1Rlc3QudGVzdF91bm5lY2Vzc2Fy
eV9leHBlY3RlZF9yZXN1bHRzKToKKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3Qp
OiBEZWxldGVkLgorICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdC5hc3NlcnRSZXN1
bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3QudGVzdF9z
dWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3QudGVz
dF90ZXN0c19mYWlsZWQpOiBEZWxldGVkLgorICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3Rz
VGVzdC50ZXN0X2J1aWxkX2JhZF9idWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChSdW5BbmRVcGxv
YWRQZXJmVGVzdHNUZXN0LnRlc3RfYnVpbGRfYmFkX3NvdXJjZV9qc29uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3QudGVzdF9idWlsZF9iYWRfbWFyZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdC50ZXN0X2J1aWxkX2Jh
ZF9mYWlsZWRfdXBsb2FkaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZU
ZXN0c1Rlc3QudGVzdF9idWlsZF9iYWRfcHJlcGFyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
UnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdC50ZXN0X2J1aWxkYm90X3RpbWVvdXQpOiBEZWxldGVk
LgorICAgICAgICAoUnVuQmVuY2htYXJrVGVzdCk6IERlbGV0ZWQuCisgICAgICAgIChSdW5CZW5j
aG1hcmtUZXN0LmFzc2VydFJlc3VsdHMpOiBEZWxldGVkLgorICAgICAgICAoUnVuQmVuY2htYXJr
VGVzdC50ZXN0X3N1Y2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvcnVuLWJpbmRp
bmdzLXRlc3RzOgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5OgorICAgICAgICAqIGd0ay9jaGVjay1mb3Itd2Via2l0ZG9tLWFwaS1i
cmVha3M6IFJlbW92ZWQuCisgICAgICAgICogZ3RrL2dlbmVyYXRlLWd0a2RvYzoKKyAgICAgICAg
KiBndGsvd2Via2l0ZG9tLnB5OiBSZW1vdmVkLgorCiAyMDE2LTA4LTMxICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBXSzIgR2FtZXBhZCBwcm92aWRlciBvbiBp
T1MuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1iaW5kaW5ncy10ZXN0cyBiL1Rvb2xz
L1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCmluZGV4IGZjMjBhZmUuLmZkZTkwNTEgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzCisrKyBiL1Rvb2xzL1Njcmlw
dHMvcnVuLWJpbmRpbmdzLXRlc3RzCkBAIC00MiwxMCArNDIsNyBAQCBkZWYgbWFpbihhcmd2KToK
ICAgICByZXNldF9yZXN1bHRzID0gIi0tcmVzZXQtcmVzdWx0cyIgaW4gYXJndgogICAgIHZlcmJv
c2UgPSBub3QgIi0tbm8tdmVyYm9zZSIgaW4gYXJndgogCi0gICAgZ2VuZXJhdG9ycyA9IFsKLSAg
ICAgICAgJ0pTJywKLSAgICAgICAgJ0dPYmplY3QnCi0gICAgXQorICAgIGdlbmVyYXRvcnMgPSBb
ICdKUycgXQogCiAgICAgZnJvbSB3ZWJraXRweS5iaW5kaW5ncy5tYWluIGltcG9ydCBCaW5kaW5n
c1Rlc3RzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCAwOWJh
NDA3Li45YjdiZDEyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBA
IC0xNDUsMjUgKzE0NSw2IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAgIG9zLnBh
dGguam9pbignVG9vbHMnLCAnVGVzdFdlYktpdEFQSScpXSwKICAgICAgWyItcmVhZGFiaWxpdHkv
bmFtaW5nIl0pLAogCi0gICAgKFsjIFRoZSBHVEsrIEFQSXMgdXNlIEdUSysgbmFtaW5nIHN0eWxl
LCB3aGljaCBpbmNsdWRlcwotICAgICAgIyBsb3dlci1jYXNlZCwgdW5kZXJzY29yZS1zZXBhcmF0
ZWQgdmFsdWVzLCB3aGl0ZXNwYWNlIGJlZm9yZQotICAgICAgIyBwYXJlbnMgZm9yIGZ1bmN0aW9u
IGNhbGxzLCBhbmQgYWx3YXlzIGhhdmluZyB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICMgQWxzbywg
R1RLKyBhbGxvd3MgdGhlIHVzZSBvZiBOVUxMLgotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2Un
LCAnV2ViQ29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0JywgJ1dlYktpdERPTUN1c3RvbS5oJyks
Ci0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dv
YmplY3QnLCAnV2ViS2l0RE9NRGVwcmVjYXRlZC5oJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NRXZlbnRU
YXJnZXQuaCcpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdiaW5k
aW5ncycsICdnb2JqZWN0JywgJ1dlYktpdERPTU5vZGVGaWx0ZXIuaCcpLAotICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0JywgJ1dlYktp
dERPTVhQYXRoTlNSZXNvbHZlci5oJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdX
ZWJLaXQnLCAnZ3RrJywgJ3dlYmtpdCcpLAotICAgICAgb3MucGF0aC5qb2luKCdUb29scycsICdE
dW1wUmVuZGVyVHJlZScsICdndGsnKV0sCi0gICAgIFsiLXJlYWRhYmlsaXR5L25hbWluZyIsCi0g
ICAgICAiLXJlYWRhYmlsaXR5L3BhcmFtZXRlcl9uYW1lIiwKLSAgICAgICItcmVhZGFiaWxpdHkv
bnVsbCIsCi0gICAgICAiLXJlYWRhYmlsaXR5L2VudW1fY2FzaW5nIiwKLSAgICAgICItd2hpdGVz
cGFjZS9kZWNsYXJhdGlvbiIsCi0gICAgICAiLXdoaXRlc3BhY2UvaW5kZW50IiwKLSAgICAgICIt
d2hpdGVzcGFjZS9wYXJlbnMiXSksCi0KICAgICAoWyMgVGhlIEdUSysgQVBJIHVzZSB1cHBlciBj
YXNlLCB1bmRlcnNjb3JlIHNlcGFyYXRlZCwgd29yZHMgaW4KICAgICAgICMgY2VydGFpbiB0eXBl
cyBvZiBlbnVtcyAoZS5nLiBzaWduYWxzLCBwcm9wZXJ0aWVzKS4KICAgICAgIG9zLnBhdGguam9p
bignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnKSwKQEAgLTIy
NCwxMSArMjA1LDYgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgIi13aGl0ZXNw
YWNlL2RlY2xhcmF0aW9uIl0pLAogICAgIChbIyBUaGVzZSBmaWxlcyBkZWZpbmUgR09iamVjdHMs
IHdoaWNoIGltcGxpZXMgc29tZSBkZWZpbml0aW9ucyBvZgogICAgICAgIyB2YXJpYWJsZXMgYW5k
IGZ1bmN0aW9ucyBjb250YWluaW5nIHVuZGVyc2NvcmVzLgotICAgICAgb3MucGF0aC5qb2luKCdT
b3VyY2UnLCAnV2ViQ29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0JywgJ1dlYktpdERPTUN1c3Rv
bS5jcHAnKSwKLSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAnYmluZGlu
Z3MnLCAnZ29iamVjdCcsICdXZWJLaXRET01EZXByZWNhdGVkLmNwcCcpLAotICAgICAgb3MucGF0
aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0JywgJ1dlYktp
dERPTUV2ZW50VGFyZ2V0LmNwcCcpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2Vi
Q29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0JywgJ1dlYktpdERPTU5vZGVGaWx0ZXIuY3BwJyks
Ci0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dv
YmplY3QnLCAnV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmNwcCcpLAogICAgICAgb3MucGF0aC5q
b2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFt
ZXInLCAnVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnV2Vi
S2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2Un
LCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdhdWRpbycsICdnc3RyZWFtZXInLCAnV2ViS2l0V2Vi
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwJyksCkBAIC0zMjYsNiArMzAyLDkgQEAgX1NLSVBQRURf
RklMRVNfV0lUSF9XQVJOSU5HID0gWwogICAgIHJlLmNvbXBpbGUocmUuZXNjYXBlKG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnKSArIG9z
LnBhdGguc2VwKSArIHInV2ViS2l0KD8hLipQcml2YXRlXC5oKS4qXC5oJCcpLAogICAgIHJlLmNv
bXBpbGUocmUuZXNjYXBlKG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJv
Y2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJykgKyBvcy5wYXRoLnNlcCkgKyBy
J1dlYktpdCg/IS4qUHJpdmF0ZVwuaCkuKlwuaCQnKSwKIAorICAgICMgR09iamVjdCBET00gYmlu
ZGluZ3MgY29waWVkIGZyb20gZ2VuZXJhdGVkIGNvZGUgdXNpbmcgZGlmZmVyZW50IGNvZGluZyBz
dHlsZS4KKyAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3Mn
LCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0aycsICdET00nKSwKKwogICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYktpdDInLCAnVUlQcm9jZXNzJywgJ0FQSScsICdndGsnLCAnd2Vi
a2l0Mi5oJyksCiAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9j
ZXNzJywgJ0luamVjdGVkQnVuZGxlJywgJ0FQSScsICdndGsnLCAnd2Via2l0LXdlYi1leHRlbnNp
b24uaCcpXQogCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvY2hlY2stZm9yLXdlYmtpdGRvbS1hcGkt
YnJlYWtzIGIvVG9vbHMvZ3RrL2NoZWNrLWZvci13ZWJraXRkb20tYXBpLWJyZWFrcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjIzNTRmMS4uMDAwMDAwMAotLS0gYS9Ub29scy9ndGsv
Y2hlY2stZm9yLXdlYmtpdGRvbS1hcGktYnJlYWtzCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAs
MCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBJ
Z2FsaWEgUy5MLgotIyBDb3B5cmlnaHQgKEMpIDIwMTMgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxn
bnNAZ25vbWUub3JnPgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKLQotaW1wb3J0IGNvbW1vbgotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1p
bXBvcnQgd2Via2l0ZG9tCi0KLUVYUEVDVEVEX0FQSV9QQVRIID0gY29tbW9uLnRvcF9sZXZlbF9w
YXRoKCdTb3VyY2UnLCAnV2ViQ29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0JywgJ3dlYmtpdGRv
bS5zeW1ib2xzJykKLQotZGVmIHJlYWRfYnVpbHRfYXBpKCk6Ci0gICAgYXBpcyA9IHNldCgpCi0g
ICAgZm9yIGZpbGVfcGF0aCBpbiB3ZWJraXRkb20uZ2V0X2FsbF93ZWJraXRkb21fc3ltYm9sX2Zp
bGVzKCk6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgpIGFzIGZpbGVfaGFuZGxlOgotICAg
ICAgICAgICAgYXBpcy51cGRhdGUoc2V0KGZpbGVfaGFuZGxlLnJlYWRsaW5lcygpKSkKLSAgICBy
ZXR1cm4gYXBpcwotCi1kZWYgcmVhZF9leHBlY3RlZF9hcGkoKToKLSAgICB3aXRoIG9wZW4oRVhQ
RUNURURfQVBJX1BBVEgpIGFzIGZpbGVfaGFuZGxlOgotICAgICAgICByZXR1cm4gc2V0KFtzeW1i
b2wuc3RyaXAoJ1xuJykuc3BsaXQoJ0AnLCAxKVswXSArICdcbicgZm9yIHN5bWJvbCBpbiBmaWxl
X2hhbmRsZS5yZWFkbGluZXMoKV0pCi0KLWRlZiBjaGVja19hcGkoZXhwZWN0ZWRfYXBpLCBidWls
dF9hcGkpOgotICAgIG1pc3NpbmdfYXBpID0gZXhwZWN0ZWRfYXBpLmRpZmZlcmVuY2UoYnVpbHRf
YXBpKQotICAgIG5ld19hcGkgPSBidWlsdF9hcGkuZGlmZmVyZW5jZShleHBlY3RlZF9hcGkpCi0K
LSAgICBpZiBtaXNzaW5nX2FwaToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiTWlzc2luZyBB
UEkgKEFQSSBicmVhayEpIGRldGVjdGVkIGluIEdPYmplY3QgRE9NIGJpbmRpbmdzXG4iKQotICAg
ICAgICBzeXMuc3RkZXJyLndyaXRlKCIgICAgJXNcbiIgJSAiICAgICIuam9pbihtaXNzaW5nX2Fw
aSkpCi0gICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotCi0gICAgaWYgbmV3X2FwaToKLSAgICAg
ICAgc3lzLnN0ZG91dC53cml0ZSgiTmV3IEFQSSBkZXRlY3RlZCBpbiBHT2JqZWN0IERPTSBiaW5k
aW5nc1xuIikKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiICAgICVzXG4iICUgIiAgICAiLmpv
aW4obmV3X2FwaSkpCi0KLSAgICBpZiBtaXNzaW5nX2FwaToKLSAgICAgICAgIyBUaGlzIHRlc3Qg
Y2FuIGdpdmUgZmFsc2UgcG9zaXRpdmVzIGJlY2F1c2UgdGhlIEdPYmplY3QKLSAgICAgICAgIyBE
T00gYmluZGluZ3MgQVBJIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGNvbXBpbGF0aW9uIG9wdGlv
bnMuCi0gICAgICAgICMgU28gdGhpcyBzaG91bGRuJ3QgYmUgbWFkZSBmYXRhbCB1bnRpbCB3ZSBm
aWd1cmUgb3V0IGEgd2F5IHRvIGhhbmRsZSBpdC4KLSAgICAgICAgIyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTQ4MQotICAgICAgICByZXR1cm4gMAotCi0g
ICAgaWYgbmV3X2FwaToKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiQVBJIGNvbXBhdGlibGUg
Y2hhbmdlcyBmb3VuZCBpbiBHT2JqZWN0IERPTSBiaW5kaW5ncy5cbiIpCi0KLSAgICByZXR1cm4g
MAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHN5cy5leGl0KGNoZWNrX2FwaShy
ZWFkX2V4cGVjdGVkX2FwaSgpLCByZWFkX2J1aWx0X2FwaSgpKSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L2d0ay9nZW5lcmF0ZS1ndGtkb2MgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCmluZGV4IDcw
NDRkMmEuLjJhYmQ5NWIgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKKysr
IGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwpAQCAtMjYsNyArMjYsNiBAQCBpbXBvcnQgZ3Rr
ZG9jCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKLWltcG9ydCB3
ZWJraXRkb20KIAogc3lzLnN0ZG91dCA9IGNvZGVjcy5nZXR3cml0ZXIoInV0Zi04Iikoc3lzLnN0
ZG91dCkKIHN5cy5zdGRlcnIgPSBjb2RlY3MuZ2V0d3JpdGVyKCJ1dGYtOCIpKHN5cy5zdGRlcnIp
CkBAIC0xOTcsNyArMTk2LDYgQEAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBpZiBu
b3Qgd2Via2l0ZG9tX2dlbmVyYXRvcjoKICAgICAgICAgcHJpbnQoImd0a2RvYy13ZWJraXRkb20u
Y2ZnIGRvZXMgbm90IGV4aXN0ISBTa2lwcGluZyB0aGF0IGRvY3VtZW50YXRpb24iKQogICAgICAg
ICBzeXMuZXhpdCgxKQotICAgIHdlYmtpdGRvbS53cml0ZV9kb2NfZmlsZXMod2Via2l0ZG9tX2dl
bmVyYXRvci5tb2R1bGVfbmFtZSkKICAgICBzYXdfd2FybmluZ3MgPSBnZW5lcmF0ZV9kb2N1bWVu
dGF0aW9uKHdlYmtpdGRvbV9nZW5lcmF0b3IpCiAgICAgaWYgc2F3X3dhcm5pbmdzOgogICAgICAg
ICBzeXMuZXhpdChzYXdfd2FybmluZ3MpCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvd2Via2l0ZG9t
LnB5IGIvVG9vbHMvZ3RrL3dlYmtpdGRvbS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMTRmZDliMS4uMDAwMDAwMAotLS0gYS9Ub29scy9ndGsvd2Via2l0ZG9tLnB5CisrKyAvZGV2
L251bGwKQEAgLTEsMjk5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmln
aHQgKEMpIDIwMTMgSWdhbGlhIFMuTC4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQQotIyAwMjExMC0xMzAxICBVU0EKLQotaW1wb3J0IGNvbW1vbgotaW1wb3J0IGVycm5v
Ci1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN5cwotCi1mcm9tIENvbmZpZ1BhcnNlciBp
bXBvcnQgU2FmZUNvbmZpZ1BhcnNlcgotCi0KLWNsYXNzIFdlYktpdERPTURvY0dlbmVyYXRvcihv
YmplY3QpOgotCi0gICAgREVMRVRFRF9DTEFTU0VTID0gWyJXZWJLaXRET01FbnRpdHlSZWZlcmVu
Y2UiLCAiV2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudCJdCi0KLSAgICBkZWYgX19pbml0X18o
c2VsZiwgc3ltYm9sX2ZpbGVzLCBmaWxlX2hhbmRsZSk6Ci0gICAgICAgIHNlbGYuX3N5bWJvbF9m
aWxlcyA9IHN5bWJvbF9maWxlcwotICAgICAgICBzZWxmLl9maWxlX2hhbmRsZSA9IGZpbGVfaGFu
ZGxlCi0KLSAgICBkZWYgd3JpdGVfaGVhZGVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBk
ZWYgd3JpdGVfc2VjdGlvbihzZWxmLCBzeW1ib2xfZmlsZSk6Ci0gICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiB3cml0ZV9kZWxldGVkX2NsYXNzZXMoc2VsZik6Ci0g
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiB3cml0ZV9mb290ZXIo
c2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiB3cml0ZShzZWxmLCBzdHJpbmcpOgotICAg
ICAgICBzZWxmLl9maWxlX2hhbmRsZS53cml0ZShzdHJpbmcpCi0KLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIGlzX2RlcHJlY2F0ZWRfc3ltYm9sX2ZpbGUoZmlsZV9wYXRoKToKLSAgICAgICAg
cmV0dXJuICdXZWJLaXRET01EZXByZWNhdGVkJyBpbiBmaWxlX3BhdGgKLQotICAgIGRlZiBnZW5l
cmF0ZShzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZV9oZWFkZXIoKQotICAgICAgICBmb3Igc3lt
Ym9sX2ZpbGUgaW4gc2VsZi5fc3ltYm9sX2ZpbGVzOgotICAgICAgICAgICAgaWYgV2ViS2l0RE9N
RG9jR2VuZXJhdG9yLmlzX2RlcHJlY2F0ZWRfc3ltYm9sX2ZpbGUoc3ltYm9sX2ZpbGUpOgotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLndyaXRlX3NlY3Rpb24oc3lt
Ym9sX2ZpbGUpCi0gICAgICAgIHNlbGYud3JpdGVfZGVsZXRlZF9jbGFzc2VzKCkKLSAgICAgICAg
c2VsZi53cml0ZV9mb290ZXIoKQotCi0KLWNsYXNzIFdlYktpdERPTURvY0dlbmVyYXRvclNHTUwo
V2ViS2l0RE9NRG9jR2VuZXJhdG9yKToKLSAgICBkZWYgd3JpdGVfaGVhZGVyKHNlbGYpOgotICAg
ICAgICBzZWxmLndyaXRlKCcnJzw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIGJvb2sg
UFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCi0gICAgICAgICAg
ICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29r
eC5kdGQiIFsKLTwhRU5USVRZIHZlcnNpb24gU1lTVEVNICJ2ZXJzaW9uLnhtbCI+Ci1dPgotPGJv
b2sgaWQ9ImluZGV4IiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSI+
Ci0gIDxib29raW5mbz4KLSAgICA8dGl0bGU+V2ViS2l0RE9NR1RLKyBSZWZlcmVuY2UgTWFudWFs
PC90aXRsZT4KLSAgICA8cmVsZWFzZWluZm8+Zm9yIFdlYktpdERPTUdUSysgJnZlcnNpb247PC9y
ZWxlYXNlaW5mbz4KLSAgPC9ib29raW5mbz4KLQotICA8Y2hhcHRlcj4KLSAgICA8dGl0bGU+Q2xh
c3MgT3ZlcnZpZXc8L3RpdGxlPgotJycnKQotCi0gICAgZGVmIHdyaXRlX3NlY3Rpb24oc2VsZiwg
c3ltYm9sX2ZpbGUpOgotICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3ltYm9s
X2ZpbGUpCi0gICAgICAgIHNlbGYud3JpdGUoJyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvJXMi
Lz5cbicgJSBiYXNlbmFtZS5yZXBsYWNlKCIuc3ltYm9scyIsICIueG1sIikpCi0KLSAgICBkZWYg
d3JpdGVfZGVsZXRlZF9jbGFzc2VzKHNlbGYpOgotICAgICAgICBmb3IgY2xhc3NfbmFtZSBpbiBz
ZWxmLkRFTEVURURfQ0xBU1NFUzoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvJXMueG1sIi8+XG4nICUgY2xhc3NfbmFtZSkKLQotICAgIGRlZiB3cml0
ZV9mb290ZXIoc2VsZik6Ci0gICAgICAgIHNlbGYud3JpdGUoJycnICA8L2NoYXB0ZXI+Ci0KLSAg
PGluZGV4IGlkPSJpbmRleC1hbGwiPgotICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+Ci0gICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC1mdWxsLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94
aTppbmNsdWRlPgotICA8L2luZGV4PgotICA8aW5kZXggaWQ9ImFwaS1pbmRleC1kZXByZWNhdGVk
IiByb2xlPSJkZXByZWNhdGVkIj4KLSAgICA8dGl0bGU+SW5kZXggb2YgZGVwcmVjYXRlZCBzeW1i
b2xzPC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LWRlcHJlY2F0
ZWQueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwvaW5kZXg+Ci0KLSAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL2Fubm90YXRpb24tZ2xvc3NhcnkueG1sIj48eGk6ZmFsbGJhY2sg
Lz48L3hpOmluY2x1ZGU+Ci08L2Jvb2s+Ci0nJycpCi0KLQotY2xhc3MgV2ViS2l0RE9NRG9jR2Vu
ZXJhdG9yU2VjdGlvbnMoV2ViS2l0RE9NRG9jR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgc3ltYm9sX2ZpbGVzLCBmaWxlX2hhbmRsZSk6Ci0gICAgICAgIHN1cGVyKFdlYktpdERP
TURvY0dlbmVyYXRvclNlY3Rpb25zLCBzZWxmKS5fX2luaXRfXyhzeW1ib2xfZmlsZXMsIGZpbGVf
aGFuZGxlKQotCi0gICAgICAgIHNlbGYuX2ZpcnN0X2RlY2FtZWxpemVfcmUgPSByZS5jb21waWxl
KCcoLikoW0EtWl1bYS16XSspJykKLSAgICAgICAgc2VsZi5fc2Vjb25kX2RlY2FtZWxpemVfcmUg
PSByZS5jb21waWxlKCcoW2EtejAtOV0pKFtBLVpdKScpCi0gICAgICAgIHNlbGYuX2RvbV9jbGFz
c19yZSA9IHJlLmNvbXBpbGUoJyheV2ViS2l0RE9NKSguKykkJykKLSAgICAgICAgc2VsZi5fZnVu
Y3Rpb25fcmUgPSByZS5jb21waWxlKCdeLisgKC4rKVwoKC4rKVwpJCcpCi0gICAgICAgIHNlbGYu
X2NvbnN0YW50X3JlID0gcmUuY29tcGlsZSgnXltBLVpfXSskJykKLQotICAgICAgICBzZWxmLmRl
cHJlY2F0ZWRfc3ltYm9scyA9IHt9Ci0gICAgICAgIGZvciBzeW1ib2xfZmlsZSBpbiBzeW1ib2xf
ZmlsZXM6Ci0gICAgICAgICAgICBpZiBXZWJLaXRET01Eb2NHZW5lcmF0b3IuaXNfZGVwcmVjYXRl
ZF9zeW1ib2xfZmlsZShzeW1ib2xfZmlsZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZGVwcmVj
YXRlZF9zeW1ib2xzID0gc2VsZi5fZmluZF9kZXByZWNhdGVkX3N5bWJvbHMoc3ltYm9sX2ZpbGUp
Ci0KLSAgICBkZWYgX2RvbV9jbGFzcyhzZWxmLCBjbGFzc19uYW1lKToKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2RvbV9jbGFzc19yZS5zdWIocidcMicsIGNsYXNzX25hbWUpCi0KLSAgICBkZWYgX2Rv
bV9jbGFzc19kZWNhbWVsaXplKHNlbGYsIGNsYXNzX25hbWUpOgotICAgICAgICBzMSA9IHNlbGYu
X2ZpcnN0X2RlY2FtZWxpemVfcmUuc3ViKHInXDFfXDInLCBzZWxmLl9kb21fY2xhc3MoY2xhc3Nf
bmFtZSkpCi0gICAgICAgIHJldHZhbCA9IHNlbGYuX3NlY29uZF9kZWNhbWVsaXplX3JlLnN1Yihy
J1wxX1wyJywgczEpCi0KLSAgICAgICAgIyBGaXggc29tZSBleGNlcHRpb25zLgotICAgICAgICBy
ZXR2YWwgPSByZXR2YWwucmVwbGFjZSgnV2ViX0tpdCcsICdXZWJLaXQnKQotICAgICAgICByZXR2
YWwgPSByZXR2YWwucmVwbGFjZSgnWF9QYXRoJywgJ1hQYXRoJykKLSAgICAgICAgcmV0dmFsID0g
cmV0dmFsLnJlcGxhY2UoJ0hUTUxJX0ZyYW1lJywgJ0hUTUxfSUZyYW1lJykKLSAgICAgICAgcmV0
dmFsID0gcmV0dmFsLnJlcGxhY2UoJ0hUTUxCUicsICdIVE1MX0JSJykKLSAgICAgICAgcmV0dmFs
ID0gcmV0dmFsLnJlcGxhY2UoJ0hUTUxIUicsICdIVE1MX0hSJykKLSAgICAgICAgcmV0dmFsID0g
cmV0dmFsLnJlcGxhY2UoJ0hUTUxMSScsICdIVE1MX0xJJykKLSAgICAgICAgcmV0dmFsID0gcmV0
dmFsLnJlcGxhY2UoJ0hUTUxEJywgJ0hUTUxfRCcpCi0gICAgICAgIHJldHZhbCA9IHJldHZhbC5y
ZXBsYWNlKCdIVE1MTycsICdIVE1MX08nKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFj
ZSgnSFRNTFUnLCAnSFRNTF9VJykKLQotICAgICAgICByZXR1cm4gcmV0dmFsCi0KLSAgICBkZWYg
X2RlbGV0ZWRfY2xhc3Moc2VsZiwgZnVuY3Rpb24pOgotICAgICAgICBmb3IgZGVsZXRlZF9jbGFz
cyBpbiBzZWxmLkRFTEVURURfQ0xBU1NFUzoKLSAgICAgICAgICAgIGRlY2FtZWxpemVkID0gJ3dl
YmtpdF9kb21fJXMnICUgc2VsZi5fZG9tX2NsYXNzX2RlY2FtZWxpemUoZGVsZXRlZF9jbGFzcyku
bG93ZXIoKQotICAgICAgICAgICAgaWYgZnVuY3Rpb24uc3RhcnRzd2l0aChkZWNhbWVsaXplZCk6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZWRfY2xhc3MKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgIGRlZiBfZmluZF9kZXByZWNhdGVkX3N5bWJvbHMoc2VsZiwgc3ltYm9sX2ZpbGUp
OgotICAgICAgICByZXR2YWwgPSB7fQotICAgICAgICBmID0gb3BlbihzeW1ib2xfZmlsZSwgJ3In
KQotICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgbWF0Y2gg
PSBzZWxmLl9mdW5jdGlvbl9yZS5tYXRjaChsaW5lKQotICAgICAgICAgICAgaWYgbm90IG1hdGNo
OgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbWF0
Y2guZ3JvdXAoMSkKLSAgICAgICAgICAgIGFyZ3MgPSBtYXRjaC5ncm91cCgyKS5zcGxpdCgnLCAn
KQotICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGFyZ3NbMF0uc3RyaXAoJyonKQotICAgICAgICAg
ICAgcmV0dmFsLnNldGRlZmF1bHQoY2xhc3NfbmFtZSwgW10pLmFwcGVuZChmdW5jdGlvbikKLSAg
ICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgcmV0dXJuIHJldHZhbAotCi0gICAgZGVmIF9zeW1i
b2xfbGlzdChzZWxmLCBzeW1ib2xfZmlsZSk6Ci0gICAgICAgIHJldHZhbCA9IFtdCi0gICAgICAg
IGYgPSBvcGVuKHN5bWJvbF9maWxlLCAncicpCi0gICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxp
bmVzKCk6Ci0gICAgICAgICAgICBtYXRjaCA9IHNlbGYuX2NvbnN0YW50X3JlLm1hdGNoKGxpbmUp
Ci0gICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICByZXR2YWwuYXBwZW5kKGxp
bmUuc3RyaXAoJ1xuJykpCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAg
bWF0Y2ggPSBzZWxmLl9mdW5jdGlvbl9yZS5tYXRjaChsaW5lKQotICAgICAgICAgICAgaWYgbm90
IG1hdGNoIG9yIG1hdGNoLmdyb3VwKDEpLmVuZHN3aXRoKCdnZXRfdHlwZScpOgotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXR2YWwuYXBwZW5kKG1hdGNoLmdyb3VwKDEp
KQotCi0gICAgICAgIHJldHVybiByZXR2YWwKLQotICAgIGRlZiB3cml0ZV9zZWN0aW9uKHNlbGYs
IHN5bWJvbF9maWxlKToKLSAgICAgICAgY2xhc3NfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lt
Ym9sX2ZpbGUpLnJlcGxhY2UoIi5zeW1ib2xzIiwgIiIpCi0gICAgICAgIGlzX2N1c3RvbSA9IGNs
YXNzX25hbWUgPT0gJ1dlYktpdERPTUN1c3RvbScKLSAgICAgICAgaXNfaW50ZXJmYWNlID0gY2xh
c3NfbmFtZSBpbiBbJ1dlYktpdERPTUV2ZW50VGFyZ2V0JywgJ1dlYktpdERPTU5vZGVGaWx0ZXIn
LCAnV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyJ10KLSAgICAgICAgaXNfb2JqZWN0ID0gY2xhc3Nf
bmFtZSA9PSAnV2ViS2l0RE9NT2JqZWN0JwotICAgICAgICBzZWxmLndyaXRlKCc8U0VDVElPTj5c
bicpCi0gICAgICAgIHNlbGYud3JpdGUoJzxGSUxFPiVzPC9GSUxFPlxuPFRJVExFPiVzPC9USVRM
RT5cbicgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0gICAgICAgIGlmIG5vdCBpc19jdXN0
b206Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCclc1xuJyAlIGNsYXNzX25hbWUpCi0gICAgICAg
IHNlbGYud3JpdGUoJ1xuJykKLSAgICAgICAgc2VsZi53cml0ZSgnXG4nLmpvaW4oc2VsZi5fc3lt
Ym9sX2xpc3Qoc3ltYm9sX2ZpbGUpKSArICdcbicpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IGRlcHJlY2F0ZWRfZnVuY3Rpb25zID0gc2VsZi5fZGVwcmVjYXRlZF9zeW1ib2xzW2NsYXNzX25h
bWVdCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdcbicuam9pbihkZXByZWNhdGVkX2Z1bmN0aW9u
cykgKyAnXG4nKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0g
ICAgICAgIGlmIG5vdCBpc19jdXN0b206Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCdcbjxTVUJT
RUNUSU9OIFN0YW5kYXJkPlxuJykKLSAgICAgICAgICAgIGlmIGlzX2ludGVyZmFjZToKLSAgICAg
ICAgICAgICAgICBzZWxmLndyaXRlKCclc0lmYWNlXG4nICUgY2xhc3NfbmFtZSkKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnJXNDbGFzc1xuJyAlIGNsYXNz
X25hbWUpCi0gICAgICAgICAgICBkb21fY2xhc3MgPSBzZWxmLl9kb21fY2xhc3NfZGVjYW1lbGl6
ZShjbGFzc19uYW1lKS51cHBlcigpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9N
X1RZUEVfJXNcbicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRf
RE9NXyVzXG4nICUgZG9tX2NsYXNzKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RP
TV9JU18lc1xuJyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1dFQktJVF9E
T01fJXNfQ0xBU1NcbicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICBpZiBpc19pbnRlcmZhY2U6
Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV8lc19HRVRfSUZBQ0Vcbicg
JSBkb21fY2xhc3MpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYud3Jp
dGUoJ1dFQktJVF9ET01fSVNfJXNfQ0xBU1NcbicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICAg
ICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV8lc19HRVRfQ0xBU1NcbicgJSBkb21fY2xhc3MpCi0g
ICAgICAgICAgICBzZWxmLndyaXRlKCdcbjxTVUJTRUNUSU9OIFByaXZhdGU+XG4nKQotICAgICAg
ICAgICAgaWYgaXNfb2JqZWN0OgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyVzUHJpdmF0
ZVxuJyAlIGNsYXNzX25hbWUpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCd3ZWJraXRfZG9tXyVz
X2dldF90eXBlXG4nICUgZG9tX2NsYXNzLmxvd2VyKCkpCi0gICAgICAgIHNlbGYud3JpdGUoJzwv
U0VDVElPTj5cblxuJykKLQotICAgIGRlZiB3cml0ZV9kZWxldGVkX2NsYXNzZXMoc2VsZik6Ci0g
ICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuREVMRVRFRF9DTEFTU0VTOgotICAgICAgICAg
ICAgc2VsZi53cml0ZSgnPFNFQ1RJT04+XG4nKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnPEZJ
TEU+JXM8L0ZJTEU+XG48VElUTEU+JXM8L1RJVExFPlxuJyAlIChjbGFzc19uYW1lLCBjbGFzc19u
YW1lKSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdcbicu
am9pbihbbmFtZSBmb3IgbmFtZSBpbiBzZWxmLl9kZXByZWNhdGVkX3N5bWJvbHNbY2xhc3NfbmFt
ZV0gaWYgbm90IG5hbWUuZW5kc3dpdGgoJ2dldF90eXBlJyldKSArICdcbicpCi0gICAgICAgICAg
ICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgIyBBIGRlbGV0ZWQgY2xhc3Mgd2l0
aCBubyBwdWJsaWMgbWV0aG9kcyBkb2Vzbid0IGhhdmUgZGVwcmVjYXRlZCBzeW1ib2xzLgotICAg
ICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1xuPFNVQlNFQ1RJT04g
U3RhbmRhcmQ+XG4nKQotICAgICAgICAgICAgZG9tX2NsYXNzID0gc2VsZi5fZG9tX2NsYXNzX2Rl
Y2FtZWxpemUoY2xhc3NfbmFtZSkudXBwZXIoKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VC
S0lUX0RPTV9UWVBFXyVzXG4nICUgZG9tX2NsYXNzKQotICAgICAgICAgICAgc2VsZi53cml0ZSgn
V0VCS0lUX0RPTV8lc1xuJyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1dF
QktJVF9ET01fSVNfJXNcbicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdX
RUJLSVRfRE9NXyVzX0NMQVNTXG4nICUgZG9tX2NsYXNzKQotICAgICAgICAgICAgc2VsZi53cml0
ZSgnV0VCS0lUX0RPTV9JU18lc19DTEFTU1xuJyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgIHNl
bGYud3JpdGUoJ1dFQktJVF9ET01fJXNfR0VUX0NMQVNTXG4nICUgZG9tX2NsYXNzKQotICAgICAg
ICAgICAgc2VsZi53cml0ZSgnXG48U1VCU0VDVElPTiBQcml2YXRlPlxuJykKLSAgICAgICAgICAg
IHNlbGYud3JpdGUoJ3dlYmtpdF9kb21fJXNfZ2V0X3R5cGVcbicgJSBzZWxmLl9kb21fY2xhc3Nf
ZGVjYW1lbGl6ZShjbGFzc19uYW1lKS5sb3dlcigpKQotICAgICAgICAgICAgc2VsZi53cml0ZSgn
PC9TRUNUSU9OPlxuXG4nKQotCi0gICAgZGVmIHdyaXRlX2Zvb3RlcihzZWxmKToKLSAgICAgICAg
c2VsZi53cml0ZSgnPFNFQ1RJT04+XG4nKQotICAgICAgICBzZWxmLndyaXRlKCc8RklMRT53ZWJr
aXRkb21kZWZpbmVzPC9GSUxFPlxuPFRJVExFPldlYktpdERPTURlZmluZXM8L1RJVExFPlxuJykK
LSAgICAgICAgc2VsZi53cml0ZSgnPFNVQlNFQ1RJT04gUHJpdmF0ZT5cbicpCi0gICAgICAgIHNl
bGYud3JpdGUoJ1dFQktJVF9BUElcbldFQktJVF9ERVBSRUNBVEVEXG5XRUJLSVRfREVQUkVDQVRF
RF9GT1JcbicpCi0gICAgICAgIHNlbGYud3JpdGUoJzwvU0VDVElPTj5cblxuJykKLQotCi1kZWYg
d3JpdGVfZG9jX2ZpbGVzKG1vZHVsZV9uYW1lKToKLSAgICBkb2NfZGlyID0gY29tbW9uLmJ1aWxk
X3BhdGgoJ0Rlcml2ZWRTb3VyY2VzJywgJ3dlYmtpdGRvbScsICdkb2NzJykKLQotICAgIHRyeToK
LSAgICAgICAgb3MubWtkaXIoZG9jX2RpcikKLSAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAg
ICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Qgb3Igbm90IG9zLnBhdGguaXNkaXIoZG9jX2Rp
cik6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDb3VsZCBub3QgY3JlYXRlIGRvYyBk
aXIgYXQgJXM6ICVzXG4iICUgKGRvY19kaXIsIHN0cihlKSkpCi0gICAgICAgICAgICBzeXMuZXhp
dCgxKQotCi0gICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkb2NfZGlyLCAnJXMtc2VjdGlvbnMu
dHh0JyAlIG1vZHVsZV9uYW1lKSwgJ3cnKSBhcyBzZWN0aW9uc19maWxlOgotICAgICAgICBnZW5l
cmF0b3IgPSBXZWJLaXRET01Eb2NHZW5lcmF0b3JTZWN0aW9ucyhnZXRfYWxsX3dlYmtpdGRvbV9z
eW1ib2xfZmlsZXMoKSwgc2VjdGlvbnNfZmlsZSkKLSAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRl
KCkKLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRvY19kaXIsICd3ZWJraXRkb21ndGstZG9j
cy5zZ21sJyksICd3JykgYXMgc2dtbF9maWxlOgotICAgICAgICBnZW5lcmF0b3IgPSBXZWJLaXRE
T01Eb2NHZW5lcmF0b3JTR01MKGdldF9hbGxfd2Via2l0ZG9tX3N5bWJvbF9maWxlcygpLCBzZ21s
X2ZpbGUpCi0gICAgICAgIGdlbmVyYXRvci5nZW5lcmF0ZSgpCi0KLQotZGVmIGhlYWRlcl9uYW1l
X2xpc3RfZnJvbV9ndGtkb2NfY29uZmlnX2ZpbGUoKToKLSAgICBjb25maWdfZmlsZSA9IGNvbW1v
bi5idWlsZF9wYXRoKCdndGtkb2Mtd2Via2l0ZG9tLmNmZycpCi0gICAgaWYgbm90IG9zLnBhdGgu
aXNmaWxlKGNvbmZpZ19maWxlKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ291bGQgbm90
IGZpbmQgY29uZmlnIGZpbGUgYXQgJXNcbiIgJSBjb25maWdfZmlsZSkKLSAgICAgICAgcmV0dXJu
IHN5cy5leGl0KDEpCi0KLSAgICBjb25maWcgPSBTYWZlQ29uZmlnUGFyc2VyKCkKLSAgICBjb25m
aWcucmVhZChjb25maWdfZmlsZSkKLSAgICBtb2R1bGVfbmFtZSA9IGNvbmZpZy5zZWN0aW9ucygp
WzBdCi0gICAgcmV0dXJuIFtvcy5wYXRoLmJhc2VuYW1lKGYpIGZvciBmIGluIHN0cihjb25maWcu
Z2V0KG1vZHVsZV9uYW1lLCAnaGVhZGVycycpKS5yZXBsYWNlKCc7JywgJyAnKS5zcGxpdCgpXQot
Ci0KLWRlZiBnZXRfYWxsX3dlYmtpdGRvbV9zeW1ib2xfZmlsZXMoKToKLSAgICBzdGF0aWNfc3lt
Ym9sX2ZpbGVzX3BhdGggPSBjb21tb24udG9wX2xldmVsX3BhdGgoJ1NvdXJjZScsICdXZWJDb3Jl
JywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnKQotICAgIGdlbmVyYXRlZF9zeW1ib2xfZmlsZXNfcGF0
aCA9IGNvbW1vbi5idWlsZF9wYXRoKCdEZXJpdmVkU291cmNlcycsICd3ZWJraXRkb20nKQotCi0g
ICAgc3ltYm9sX2ZpbGVzID0gW10KLSAgICBmb3IgaGVhZGVyX25hbWUgaW4gaGVhZGVyX25hbWVf
bGlzdF9mcm9tX2d0a2RvY19jb25maWdfZmlsZSgpOgotICAgICAgICAjIHdlYmtpdGRvbWRlZmlu
ZXMuaCBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHN5bWJvbHMgZmlsZSBhbmQgd2Via2l0
ZG9tLnN5bWJvbHMgaXMgYQotICAgICAgICAjIGZpbGUgY29udGFpbmluZyB0aGUgZXhwZWN0ZWQg
c3ltYm9scyByZXN1bHRzLgotICAgICAgICBpZiBoZWFkZXJfbmFtZSBpbiAoIndlYmtpdGRvbS5o
IiwgIndlYmtpdGRvbWRlZmluZXMuaCIpOgotICAgICAgICAgICAgY29udGludWUKLQotICAgICAg
ICBzeW1ib2xfZmlsZSA9IGhlYWRlcl9uYW1lLnJlcGxhY2UoIi5oIiwgIi5zeW1ib2xzIikKLSAg
ICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzdGF0aWNfc3ltYm9sX2ZpbGVzX3BhdGgsIHN5bWJv
bF9maWxlKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAgIHN5
bWJvbF9maWxlcy5hcHBlbmQocGF0aCkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHBh
dGggPSBvcy5wYXRoLmpvaW4oZ2VuZXJhdGVkX3N5bWJvbF9maWxlc19wYXRoLCBzeW1ib2xfZmls
ZSkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgICAgICBzeW1ib2xf
ZmlsZXMuYXBwZW5kKHBhdGgpCi0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgcmV0dXJuIHN5
bWJvbF9maWxlcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287516</attachid>
            <date>2016-08-31 09:46:00 -0700</date>
            <delta_ts>2016-08-31 23:27:27 -0700</delta_ts>
            <desc>Rebased again</desc>
            <filename>wkdom-freeze.diff</filename>
            <type>text/plain</type>
            <size>4265875</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzOWE3NzViLi4yNzJkOTdk
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUgQEAK
IDIwMTYtMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CisgICAgICAgIFtHVEtdIE1vdmUgR09iamVjdCBET00gYmluZGluZ3MgdG8gV2ViS2l0MiBsYXll
ciBhbmQgc3RvcCBhdXRvIGdlbmVyYXRpbmcgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNDM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvUGxhdGZvcm1HVEsuY21ha2U6CisgICAg
ICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisKKzIwMTYtMDgtMzEgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFVucmV2aWV3
ZWQuIEJ1bXAgR1RLKyB2ZXJzaW9ucyBudW1iZXJzLgogCiAgICAgICAgICogU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYWY0ZDJlMy4uOGIzZDRkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtNiw3ICs2LDYgQEAgaWYgKEVOQUJMRV9JTlRST1NQRUNUSU9OKQogZW5kaWYgKCkK
IAogbGlzdChBUFBFTkQgRG9jdW1lbnRhdGlvbkRlcGVuZGVuY2llcwotICAgIEdPYmplY3RET01C
aW5kaW5ncwogICAgIFdlYktpdDIKICAgICAiJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIgogICAgICIk
e0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0tc2VjdGlvbnMudHh0IgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDNiNzk0NzEuLmQyNDA0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAx
Ni0wOC0zMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gTW92ZSBHT2JqZWN0IERPTSBiaW5kaW5ncyB0byBXZWJLaXQyIGxheWVyIGFu
ZCBzdG9wIGF1dG8gZ2VuZXJhdGluZyB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIHNjcmlwdHMgdG8gZ2VuZXJhdGUgR09iamVj
dCBET00gYmluZGluZ3MgYW5kIHRoZSB0ZXN0cy4gQWxzbyByZW1vdmUgYWxsIEdPYmplY3QgaWZk
ZWZzIGZyb20gdGhlIGlkbCBmaWxlcy4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgor
ICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3Q6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbTogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVTaGVldC5pZGw6CisgICAgICAgICogY3NzL1JHQkNvbG9yLmlkbDoKKyAgICAgICAgKiBkb20v
RE9NQ29yZUV4Y2VwdGlvbi5pZGw6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmlk
bDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFR5
cGUuaWRsOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAgKiBkb20vRXZlbnQu
aWRsOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5pZGw6CisgICAgICAgICogZG9tL0tleWJv
YXJkRXZlbnQuaWRsOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaWRsOgorICAgICAgICAq
IGRvbS9NZXNzYWdlUG9ydC5pZGw6CisgICAgICAgICogZG9tL01vdXNlRXZlbnQuaWRsOgorICAg
ICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaWRsOgorICAgICAgICAqIGRvbS9Ob2RlLmlkbDoKKyAg
ICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAgICAqIGRvbS9TbG90YWJsZS5pZGw6CisgICAg
ICAgICogZG9tL1doZWVsRXZlbnQuaWRsOgorICAgICAgICAqIGZpbGVhcGkvRmlsZUV4Y2VwdGlv
bi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGw6CisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVjdGlv
bi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwv
SFRNTEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGw6Cisg
ICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGw6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hU
TUxNZWRpYUVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNlbGxF
bGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsOgorICAg
ICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0ltYWdlRGF0YS5pZGw6CisgICAgICAg
ICogaHRtbC9VUkxVdGlscy5pZGw6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2suaWRs
OgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmlkbDoKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5pZGw6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50LmlkbDoKKyAgICAgICAgKiBzdmcv
U1ZHRWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0V4Y2VwdGlvbi5pZGw6CisgICAgICAg
ICogd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGw6CisgICAgICAgICogd29y
a2Vycy9Xb3JrZXIuaWRsOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaWRs
OgorICAgICAgICAqIHhtbC9YUGF0aEV4Y2VwdGlvbi5pZGw6CisKIDIwMTYtMDgtMzEgIFlvdWVu
biBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFtGZXRjaCBBUEldIFJlc3Bv
bnNlIGJvZHlVc2VkIHNob3VsZCBjaGVjayBmb3IgaXRzIGJvZHkgZGlzdHVyYmVkIHN0YXRlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9IVE1MTWVkaWFF
bGVtZW50TWVkaWFTZXNzaW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNz
aW9uL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb24uaWRsCmluZGV4IGVhNWQ4YmUuLjkzNTdh
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL0hUTUxN
ZWRpYUVsZW1lbnRNZWRpYVNlc3Npb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzZXNzaW9uL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb24uaWRsCkBAIC0yOCw3ICsy
OCw1IEBACiBdIHBhcnRpYWwgaW50ZXJmYWNlIEhUTUxNZWRpYUVsZW1lbnQgewogICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcga2luZDsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAm
JiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIGF0dHJpYnV0ZSBNZWRpYVNlc3Npb24/IHNlc3Npb247
Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5pZGwKaW5kZXggM2Fj
ZjRkNi4uM2EyOWVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9IVE1MTWVkaWFFbGVtZW50TWVkaWFTdHJlYW0uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vSFRNTE1lZGlhRWxlbWVudE1lZGlhU3RyZWFtLmlkbApAQCAt
MjcsNyArMjcsNSBAQAogICAgIENvbmRpdGlvbmFsPVZJREVPJk1FRElBX1NUUkVBTSwKIF0gcGFy
dGlhbCBpbnRlcmZhY2UgSFRNTE1lZGlhRWxlbWVudAogewotI2lmICEoZGVmaW5lZChMQU5HVUFH
RV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtTZXR0ZXJDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0XSBhdHRyaWJ1dGUgTWVkaWFTdHJlYW0/IHNyY09iamVjdDsKLSNl
bmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZTMyM2RiYS4uZjIxZmMwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTM3OSw0MDEgKzM3OSwxMyBAQCBpbmNsdWRl
X2RpcmVjdG9yaWVzKAogICAgICR7V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfQogICAgICIk
e1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nb2JqZWN0LyIKICAgICAiJHtERVJJVkVEX1NPVVJDRVNf
RElSfSIKLSAgICAiJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfSIK
ICkKIAogaW5jbHVkZV9kaXJlY3RvcmllcyhTWVNURU0KICAgICAke1dlYkNvcmVfU1lTVEVNX0lO
Q0xVREVfRElSRUNUT1JJRVN9CiApCiAKLWxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5nc19T
T1VSQ0VTCi0gICAgYmluZGluZ3MvZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcAotICAg
IGJpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCi0gICAgYmluZGluZ3MvZ29iamVj
dC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RO
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcAotICAgIGJpbmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRo
TlNSZXNvbHZlci5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5jcHAK
LSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuY3BwCi0gICAgYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0
L1dlYktpdERPTUhUTUxQcml2YXRlLmNwcAotICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9N
Tm9kZUZpbHRlci5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU9iamVjdC5jcHAK
LSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwCi0gICAgYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuY3BwCi0gICAgJHtERVJJVkVEX1NPVVJD
RVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMuaAotICAg
ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0ZG9tYXV0
b2NsZWFudXBzLXVuc3RhYmxlLmgKLSAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9C
SU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMuaAotICAgICR7REVSSVZFRF9TT1VSQ0VTX0dP
QkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oCi0gICAg
JHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb20uaAot
KQotCi1saXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfSURMX0ZJTEVTCi0gICAg
Y3NzL0NTU1J1bGUuaWRsCi0gICAgY3NzL0NTU1J1bGVMaXN0LmlkbAotICAgIGNzcy9DU1NTdHls
ZURlY2xhcmF0aW9uLmlkbAotICAgIGNzcy9DU1NTdHlsZVNoZWV0LmlkbAotICAgIGNzcy9DU1NW
YWx1ZS5pZGwKLSAgICBjc3MvTWVkaWFMaXN0LmlkbAotICAgIGNzcy9TdHlsZVNoZWV0LmlkbAot
ICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5pZGwKLQotICAgIGRvbS9BdHRyLmlkbAotICAgIGRvbS9D
REFUQVNlY3Rpb24uaWRsCi0gICAgZG9tL0NoYXJhY3RlckRhdGEuaWRsCi0gICAgZG9tL0NvbW1l
bnQuaWRsCi0gICAgZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbAotICAgIGRvbS9Eb2N1bWVudC5p
ZGwKLSAgICBkb20vRG9jdW1lbnRGcmFnbWVudC5pZGwKLSAgICBkb20vRG9jdW1lbnRUeXBlLmlk
bAotICAgIGRvbS9FbGVtZW50LmlkbAotICAgIGRvbS9FdmVudC5pZGwKLSAgICBkb20vS2V5Ym9h
cmRFdmVudC5pZGwKLSAgICBkb20vTW91c2VFdmVudC5pZGwKLSAgICBkb20vTmFtZWROb2RlTWFw
LmlkbAotICAgIGRvbS9Ob2RlLmlkbAotICAgIGRvbS9Ob2RlSXRlcmF0b3IuaWRsCi0gICAgZG9t
L05vZGVMaXN0LmlkbAotICAgIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsCi0gICAgZG9t
L1JhbmdlLmlkbAotICAgIGRvbS9UZXh0LmlkbAotICAgIGRvbS9UcmVlV2Fsa2VyLmlkbAotICAg
IGRvbS9VSUV2ZW50LmlkbAotICAgIGRvbS9XaGVlbEV2ZW50LmlkbAotCi0gICAgZmlsZWFwaS9C
bG9iLmlkbAotICAgIGZpbGVhcGkvRmlsZS5pZGwKLSAgICBmaWxlYXBpL0ZpbGVMaXN0LmlkbAot
Ci0gICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxBcHBsZXRFbGVt
ZW50LmlkbAotICAgIGh0bWwvSFRNTEFyZWFFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEJSRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxCYXNlRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxCb2R5
RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxCdXR0b25FbGVtZW50LmlkbAotICAgIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKLSAgICBodG1s
L0hUTUxETGlzdEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5pZGwK
LSAgICBodG1sL0hUTUxEaXZFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTERvY3VtZW50LmlkbAot
ICAgIGh0bWwvSFRNTEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAot
ICAgIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxGb250RWxlbWVu
dC5pZGwKLSAgICBodG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxGcmFtZUVs
ZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmlkbAotICAgIGh0bWwvSFRN
TEhSRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxIZWFkRWxlbWVudC5pZGwKLSAgICBodG1sL0hU
TUxIZWFkaW5nRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxIdG1sRWxlbWVudC5pZGwKLSAgICBo
dG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwK
LSAgICBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTElFbGVtZW50Lmlk
bAotICAgIGh0bWwvSFRNTExhYmVsRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxMZWdlbmRFbGVt
ZW50LmlkbAotICAgIGh0bWwvSFRNTExpbmtFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTE1hcEVs
ZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1M
TWVudUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTWV0YUVsZW1lbnQuaWRsCi0gICAgaHRtbC9I
VE1MTW9kRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxPTGlzdEVsZW1lbnQuaWRsCi0gICAgaHRt
bC9IVE1MT2JqZWN0RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaWRs
Ci0gICAgaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxPcHRpb25zQ29s
bGVjdGlvbi5pZGwKLSAgICBodG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmlkbAotICAgIGh0bWwv
SFRNTFBhcmFtRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxQcmVFbGVtZW50LmlkbAotICAgIGh0
bWwvSFRNTFF1b3RlRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmlkbAot
ICAgIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MU3R5bGVFbGVtZW50
LmlkbAotICAgIGh0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1M
VGFibGVDZWxsRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsCi0g
ICAgaHRtbC9IVE1MVGFibGVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFRhYmxlUm93RWxlbWVu
dC5pZGwKLSAgICBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmlkbAotICAgIGh0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaWRsCi0gICAg
aHRtbC9IVE1MVUxpc3RFbGVtZW50LmlkbAotCi0gICAgcGFnZS9ET01XaW5kb3cuaWRsCi0KLSAg
ICB4bWwvWFBhdGhFeHByZXNzaW9uLmlkbAotICAgIHhtbC9YUGF0aFJlc3VsdC5pZGwKLSkKLQot
bGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgTW9k
dWxlcy9iYXR0ZXJ5L0JhdHRlcnlNYW5hZ2VyLmlkbAotCi0gICAgTW9kdWxlcy9nYW1lcGFkL2Rl
cHJlY2F0ZWQvR2FtZXBhZC5pZGwKLSAgICBNb2R1bGVzL2dhbWVwYWQvZGVwcmVjYXRlZC9HYW1l
cGFkTGlzdC5pZGwKLQotICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaWRsCi0K
LSAgICBNb2R1bGVzL21lZGlhc291cmNlL1ZpZGVvUGxheWJhY2tRdWFsaXR5LmlkbAotCi0gICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuaWRsCi0gICAgTW9kdWxlcy9tZWRpYXN0
cmVhbS9OYXZpZ2F0b3JNZWRpYURldmljZXMuaWRsCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMuaWRsCi0KLSAgICBNb2R1bGVzL3F1b3RhL1N0
b3JhZ2VJbmZvLmlkbAotICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZVF1b3RhLmlkbAotCi0gICAg
TW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmlkbAotICAgIE1vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5pZGwKLSAgICBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50
aGVzaXNFdmVudC5pZGwKLSAgICBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2UuaWRsCi0gICAgTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2UuaWRsCi0KLSAg
ICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmlkbAotCi0gICAgY3NzL0RPTUNTU05hbWVz
cGFjZS5pZGwKLSAgICBjc3MvTWVkaWFRdWVyeUxpc3QuaWRsCi0gICAgY3NzL1N0eWxlTWVkaWEu
aWRsCi0KLSAgICBkb20vRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGwKLSAgICBkb20vRE9NU3Ry
aW5nTGlzdC5pZGwKLSAgICBkb20vRE9NU3RyaW5nTWFwLmlkbAotICAgIGRvbS9NZXNzYWdlUG9y
dC5pZGwKLSAgICBkb20vVG91Y2guaWRsCi0gICAgZG9tL1dlYktpdE5hbWVkRmxvdy5pZGwKLQot
ICAgIGh0bWwvRE9NVG9rZW5MaXN0LmlkbAotICAgIGh0bWwvSFRNTERldGFpbHNFbGVtZW50Lmlk
bAotICAgIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmlkbAotICAgIGh0bWwvTWVkaWFDb250cm9sbGVyLmlkbAotICAgIGh0bWwvTWVkaWFFcnJv
ci5pZGwKLSAgICBodG1sL1RpbWVSYW5nZXMuaWRsCi0gICAgaHRtbC9WYWxpZGl0eVN0YXRlLmlk
bAotCi0gICAgbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsCi0KLSAgICBw
YWdlL0JhclByb3AuaWRsCi0gICAgcGFnZS9ET01TZWxlY3Rpb24uaWRsCi0gICAgcGFnZS9IaXN0
b3J5LmlkbAotICAgIHBhZ2UvTG9jYXRpb24uaWRsCi0gICAgcGFnZS9OYXZpZ2F0b3IuaWRsCi0g
ICAgcGFnZS9QZXJmb3JtYW5jZS5pZGwKLSAgICBwYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCi0g
ICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsCi0gICAgcGFnZS9QZXJmb3JtYW5jZVRp
bWluZy5pZGwKLSAgICBwYWdlL1NjcmVlbi5pZGwKLSAgICBwYWdlL1VzZXJNZXNzYWdlSGFuZGxl
ci5pZGwKLSAgICBwYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCi0gICAgcGFn
ZS9XZWJLaXROYW1lc3BhY2UuaWRsCi0gICAgcGFnZS9XZWJLaXRQb2ludC5pZGwKLQotICAgIHBs
dWdpbnMvRE9NTWltZVR5cGUuaWRsCi0gICAgcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmlkbAot
ICAgIHBsdWdpbnMvRE9NUGx1Z2luLmlkbAotICAgIHBsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaWRs
Ci0KLSAgICBzdG9yYWdlL1N0b3JhZ2UuaWRsCi0pCi0KLWlmIChFTkFCTEVfV0VCX0FOSU1BVElP
TlMpCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVT
Ci0gICAgICAgIGFuaW1hdGlvbi9BbmltYXRhYmxlLmlkbAotICAgICAgICBhbmltYXRpb24vQW5p
bWF0aW9uRWZmZWN0LmlkbAotICAgICAgICBhbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRs
Ci0gICAgICAgIGFuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbi5pZGwKLSAgICAgICAgYW5pbWF0
aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCi0gICAgICAgIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVj
dC5pZGwKLSAgICAgICAgYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5pZGwKLSAgICApCi1lbmRpZiAo
KQotCi1pZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCi0gICAgbGlzdChBUFBF
TkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgICAgIGh0bWwvSFRN
TEF1ZGlvRWxlbWVudC5pZGwKLSAgICAgICAgaHRtbC9IVE1MVmlkZW9FbGVtZW50LmlkbAotCi0g
ICAgICAgIGh0bWwvdHJhY2svQXVkaW9UcmFjay5pZGwKLSAgICAgICAgaHRtbC90cmFjay9BdWRp
b1RyYWNrTGlzdC5pZGwKLSAgICAgICAgaHRtbC90cmFjay9EYXRhQ3VlLmlkbAotICAgICAgICBo
dG1sL3RyYWNrL1RleHRUcmFjay5pZGwKLSAgICAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tDdWUu
aWRsCi0gICAgICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5pZGwKLSAgICAgICAgaHRt
bC90cmFjay9UZXh0VHJhY2tMaXN0LmlkbAotICAgICAgICBodG1sL3RyYWNrL1RyYWNrRXZlbnQu
aWRsCi0gICAgICAgIGh0bWwvdHJhY2svVlRUQ3VlLmlkbAotICAgICAgICBodG1sL3RyYWNrL1Zp
ZGVvVHJhY2suaWRsCi0gICAgICAgIGh0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaWRsCi0gICAg
KQotZW5kaWYgKCkKLQotaWYgKEVOQUJMRV9RVU9UQSkKLSAgICBsaXN0KEFQUEVORCBHT2JqZWN0
RE9NQmluZGluZ3NVbnN0YWJsZV9JRExfRklMRVMKLSAgICAgICAgTW9kdWxlcy9xdW90YS9ET01X
aW5kb3dRdW90YS5pZGwKLSAgICAgICAgTW9kdWxlcy9xdW90YS9OYXZpZ2F0b3JTdG9yYWdlUXVv
dGEuaWRsCi0gICAgICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZUVycm9yQ2FsbGJhY2suaWRsCi0g
ICAgICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZUluZm8uaWRsCi0gICAgICAgIE1vZHVsZXMvcXVv
dGEvU3RvcmFnZVF1b3RhLmlkbAotICAgICAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VRdW90YUNh
bGxiYWNrLmlkbAotICAgICAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VVc2FnZUNhbGxiYWNrLmlk
bAotICAgICAgICBNb2R1bGVzL3F1b3RhL1dvcmtlck5hdmlnYXRvclN0b3JhZ2VRdW90YS5pZGwK
LSAgICApCi1lbmRpZiAoKQotCi1zZXQoR09iamVjdERPTUJpbmRpbmdzX1NUQVRJQ19DTEFTU19M
SVNUIEN1c3RvbSBEZXByZWNhdGVkIEV2ZW50VGFyZ2V0IE5vZGVGaWx0ZXIgT2JqZWN0IFhQYXRo
TlNSZXNvbHZlcikKLQotc2V0KEdPYmplY3RET01CaW5kaW5nc1N0YWJsZV9DTEFTU19MSVNUICR7
R09iamVjdERPTUJpbmRpbmdzX1NUQVRJQ19DTEFTU19MSVNUfSkKLXNldChHT2JqZWN0RE9NQmlu
ZGluZ3NTdGFibGVfSU5TVEFMTEVEX0hFQURFUlMKLSAgICAgJHtERVJJVkVEX1NPVVJDRVNfR09C
SkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMuaAotICAgICAke0RF
UklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMu
aAotICAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtp
dGRvbS5oCi0gICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3Vz
dG9tLmgKLSAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01EZXBy
ZWNhdGVkLmgKLSAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01F
dmVudFRhcmdldC5oCi0gICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0
RE9NTm9kZUZpbHRlci5oCi0gICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NT2JqZWN0LmgKLSAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01YUGF0aE5TUmVzb2x2ZXIuaAotKQotCi1zZXQoR09iamVjdERPTUJpbmRpbmdzVW5zdGFi
bGVfSU5TVEFMTEVEX0hFQURFUlMKLSAgICAgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01f
QklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMtdW5zdGFibGUuaAotICAgICAke0RF
UklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMt
dW5zdGFibGUuaAotICAgICAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERP
TUN1c3RvbVVuc3RhYmxlLmgKLSkKLQotZm9yZWFjaCAoZmlsZSAke0dPYmplY3RET01CaW5kaW5n
c1N0YWJsZV9JRExfRklMRVN9KQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoY2xhc3NuYW1l
ICR7ZmlsZX0gTkFNRV9XRSkKLSAgICBsaXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NTdGFi
bGVfQ0xBU1NfTElTVCAke2NsYXNzbmFtZX0pCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJp
bmRpbmdzU3RhYmxlX0lOU1RBTExFRF9IRUFERVJTICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1Rf
RE9NX0JJTkRJTkdTX0RJUn0vV2ViS2l0RE9NJHtjbGFzc25hbWV9LmgpCi0gICAgbGlzdChBUFBF
TkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSU5TVEFMTEVEX0hFQURFUlMgJHtERVJJVkVE
X1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS9XZWJLaXRET00ke2NsYXNzbmFtZX1V
bnN0YWJsZS5oKQotZW5kZm9yZWFjaCAoKQotCi1mb3JlYWNoIChmaWxlICR7R09iamVjdERPTUJp
bmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTfSkKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGNs
YXNzbmFtZSAke2ZpbGV9IE5BTUVfV0UpCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRp
bmdzVW5zdGFibGVfQ0xBU1NfTElTVCAke2NsYXNzbmFtZX0pCi0gICAgbGlzdChBUFBFTkQgR09i
amVjdERPTUJpbmRpbmdzVW5zdGFibGVfSU5TVEFMTEVEX0hFQURFUlMgJHtERVJJVkVEX1NPVVJD
RVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS9XZWJLaXRET00ke2NsYXNzbmFtZX0uaCkKLWVu
ZGZvcmVhY2ggKCkKLQotc2V0KEdPQkpFQ1RfRE9NX0JJTkRJTkdTX0ZFQVRVUkVTX0RFRklORVMg
IkxBTkdVQUdFX0dPQkpFQ1Q9MSAke0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRP
Un0iKQotc3RyaW5nKFJFUExBQ0UgIkVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFPTEiICIiIEdPQkpF
Q1RfRE9NX0JJTkRJTkdTX0ZFQVRVUkVTX0RFRklORVMgJHtHT0JKRUNUX0RPTV9CSU5ESU5HU19G
RUFUVVJFU19ERUZJTkVTfSkKLXN0cmluZyhSRVBMQUNFIFJFR0VYICJFTkFCTEVfU1ZHW0EtWl9d
Kz0xIiAiIiBHT0JKRUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJTkVTICR7R09CSkVDVF9E
T01fQklORElOR1NfRkVBVFVSRVNfREVGSU5FU30pCi0KLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtE
RVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfSkKLQotYWRkX2N1c3RvbV9j
b21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5H
U19ESVJ9L3dlYmtpdGRvbWRlZmluZXMuaAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmlu
ZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVj
aG8gJHtHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VU
QUJMRX0gJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhl
YWRlcnMucGwgZGVmaW5lcyA+ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdT
X0RJUn0vd2Via2l0ZG9tZGVmaW5lcy5oCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBP
VVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRk
b21kZWZpbmVzLXVuc3RhYmxlLmgKLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdz
L3NjcmlwdHMvZ29iamVjdC1nZW5lcmF0ZS1oZWFkZXJzLnBsCi0gICAgQ09NTUFORCBlY2hvICR7
R09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJM
RX0gJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRl
cnMucGwgZGVmaW5lcy11bnN0YWJsZSA+ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJ
TkRJTkdTX0RJUn0vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oCi0pCi0KLWFkZF9jdXN0b21f
Y29tbWFuZCgKLSAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElO
R1NfRElSfS93ZWJraXRkb20uaAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mv
c2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtH
T2JqZWN0RE9NQmluZGluZ3NTdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJMRX0g
JHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMu
cGwgZ2RvbSA+ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Vi
a2l0ZG9tLmgKLSkKLQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURf
U09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5o
Ci0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dvYmplY3QtZ2Vu
ZXJhdGUtaGVhZGVycy5wbAotICAgIENPTU1BTkQgZWNobyAke0dPYmplY3RET01CaW5kaW5nc1N0
YWJsZV9DTEFTU19MSVNUfSB8ICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9iaW5k
aW5ncy9zY3JpcHRzL2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbCBhdXRvY2xlYW51cHMgPiAk
e0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9j
bGVhbnVwcy5oCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtERVJJVkVE
X1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMt
dW5zdGFibGUuaAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9n
b2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtHT2JqZWN0RE9N
QmluZGluZ3NVbnN0YWJsZV9DTEFTU19MSVNUfSB8ICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQkNP
UkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbCBhdXRv
Y2xlYW51cHMgPiAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dl
YmtpdGRvbWF1dG9jbGVhbnVwcy11bnN0YWJsZS5oCi0pCi0KLSMgU29tZSBvZiB0aGUgc3RhdGlj
IGhlYWRlcnMgYXJlIGluY2x1ZGVkIGJ5IGdlbmVyYXRlZCBwdWJsaWMgaGVhZGVycyB3aXRoIGlu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Gb28uaD4uCi0jIFdlIG5lZWQgdGhvc2UgaGVhZGVy
cyBpbiB0aGUgZGVyaXZlZCBzb3VyY2VzIHRvIGJlIGluIHdlYmtpdGRvbSBkaXJlY3RvcnkuCi1z
ZXQoR09iamVjdERPTUJpbmRpbmdzX1NUQVRJQ19IRUFERVJfTkFNRVMgJHtHT2JqZWN0RE9NQmlu
ZGluZ3NfU1RBVElDX0NMQVNTX0xJU1R9IEN1c3RvbVVuc3RhYmxlKQotZm9yZWFjaCAoY2xhc3Nu
YW1lICR7R09iamVjdERPTUJpbmRpbmdzX1NUQVRJQ19IRUFERVJfTkFNRVN9KQotICAgIGFkZF9j
dXN0b21fY29tbWFuZCgKLSAgICAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1Rf
RE9NX0JJTkRJTkdTX0RJUn0vV2ViS2l0RE9NJHtjbGFzc25hbWV9LmgKLSAgICAgICAgREVQRU5E
UyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTSR7Y2xhc3NuYW1lfS5o
Ci0gICAgICAgIENPTU1BTkQgbG4gLW4gLXMgLWYgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET00ke2NsYXNzbmFtZX0uaCAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RP
TV9CSU5ESU5HU19ESVJ9Ci0gICAgKQotICAgIGxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5n
c19TVEFUSUNfR0VORVJBVEVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01f
QklORElOR1NfRElSfS9XZWJLaXRET00ke2NsYXNzbmFtZX0uaCkKLWVuZGZvcmVhY2ggKCkKLQot
YWRkX2N1c3RvbV90YXJnZXQoZmFrZS1nZW5lcmF0ZWQtd2Via2l0ZG9tLWhlYWRlcnMKLSAgICBE
RVBFTkRTICR7R09iamVjdERPTUJpbmRpbmdzX1NUQVRJQ19HRU5FUkFURURfU09VUkNFU30KLSkK
LQotc2V0KEdPYmplY3RET01CaW5kaW5nc19JRExfRklMRVMgJHtHT2JqZWN0RE9NQmluZGluZ3NT
dGFibGVfSURMX0ZJTEVTfSAke0dPYmplY3RET01CaW5kaW5nc1Vuc3RhYmxlX0lETF9GSUxFU30p
Ci1zZXQoQURESVRJT05BTF9CSU5ESU5HU19ERVBFTkRFTkNJRVMKLSAgICAke1dFQkNPUkVfRElS
fS9iaW5kaW5ncy9nb2JqZWN0L3dlYmtpdGRvbS5zeW1ib2xzCi0gICAgJHtXSU5ET1dfQ09OU1RS
VUNUT1JTX0ZJTEV9Ci0gICAgJHtXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRX0K
LSAgICAke0RFRElDQVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfQotKQot
R0VORVJBVEVfQklORElOR1MoR09iamVjdERPTUJpbmRpbmdzX1NPVVJDRVMKLSAgICAiJHtHT2Jq
ZWN0RE9NQmluZGluZ3NfSURMX0ZJTEVTfSIKLSAgICAiJHtXRUJDT1JFX0RJUn0iCi0gICAgIiR7
SURMX0lOQ0xVREVTfSIKLSAgICAiJHtHT0JKRUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJ
TkVTfSIKLSAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9Ci0g
ICAgV2ViS2l0RE9NIEdPYmplY3QgY3BwCi0gICAgJHtJRExfQVRUUklCVVRFU19GSUxFfQotICAg
ICR7U1VQUExFTUVOVEFMX0RFUEVOREVOQ1lfRklMRX0KLSAgICAke0FERElUSU9OQUxfQklORElO
R1NfREVQRU5ERU5DSUVTfSkKLQogYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQot
YWRkX2RlZmluaXRpb25zKC1EV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJKQotCi1hZGRfbGli
cmFyeShHT2JqZWN0RE9NQmluZGluZ3MgU1RBVElDICR7R09iamVjdERPTUJpbmRpbmdzX1NPVVJD
RVN9KQotCi1XRUJLSVRfU0VUX0VYVFJBX0NPTVBJTEVSX0ZMQUdTKEdPYmplY3RET01CaW5kaW5n
cykKLQotYWRkX2RlcGVuZGVuY2llcyhHT2JqZWN0RE9NQmluZGluZ3MKLSAgICBXZWJDb3JlCi0g
ICAgZmFrZS1nZW5lcmF0ZWQtd2Via2l0ZG9tLWhlYWRlcnMKLSkKLQotZmlsZShXUklURSAke0NN
QUtFX0JJTkFSWV9ESVJ9L2d0a2RvYy13ZWJraXRkb20uY2ZnCi0gICAgIlt3ZWJraXRkb21ndGst
JHtXRUJLSVRHVEtfQVBJX1ZFUlNJT059XVxuIgotICAgICJwa2djb25maWdfZmlsZT0ke1dlYktp
dDJfUEtHQ09ORklHX0ZJTEV9XG4iCi0gICAgIm5hbWVzcGFjZT13ZWJraXRfZG9tXG4iCi0gICAg
ImNmbGFncz0tSSR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlXG4iCi0gICAgIiAgICAgICAtSSR7
V0VCQ09SRV9ESVJ9L2JpbmRpbmdzXG4iCi0gICAgIiAgICAgICAtSSR7V0VCQ09SRV9ESVJ9L2Jp
bmRpbmdzL2dvYmplY3RcbiIKLSAgICAiICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNfR09CSkVD
VF9ET01fQklORElOR1NfRElSfVxuIgotICAgICJkb2NfZGlyPSR7REVSSVZFRF9TT1VSQ0VTX0dP
QkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vZG9jc1xuIgotICAgICJzb3VyY2VfZGlycz0ke0RFUklW
RURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9XG4iCi0gICAgIiAgICAgICAgICAg
ICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3RcbiIKLSAgICAiaGVhZGVycz0ke0dPYmpl
Y3RET01CaW5kaW5nc1N0YWJsZV9JTlNUQUxMRURfSEVBREVSU31cbiIKLSAgICAibWFpbl9zZ21s
X2ZpbGU9d2Via2l0ZG9tZ3RrLWRvY3Muc2dtbFxuIgotKQotCi1pbnN0YWxsKEZJTEVTICR7R09i
amVjdERPTUJpbmRpbmdzU3RhYmxlX0lOU1RBTExFRF9IRUFERVJTfQotICAgICAgICBERVNUSU5B
VElPTiAiJHtXRUJLSVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJraXRkb20iCi0pCi0KLSMg
TWFrZSB1bnN0YWJsZSBoZWFkZXIgb3B0aW9uYWwgaWYgdGhleSBkb24ndCBleGlzdAotaW5zdGFs
bChGSUxFUyAke0dPYmplY3RET01CaW5kaW5nc1Vuc3RhYmxlX0lOU1RBTExFRF9IRUFERVJTfQot
ICAgICAgICBERVNUSU5BVElPTiAiJHtXRUJLSVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJr
aXRkb20iCi0gICAgICAgIE9QVElPTkFMCi0pCi0KLSMgU29tZSBpbnN0YWxsZWQgaGVhZGVycyBh
cmUgbm90IG9uIHRoZSBsaXN0IG9mIGhlYWRlcnMgdXNlZCBmb3IgZ2lyIGdlbmVyYXRpb24uCi1z
ZXQoR09iamVjdERPTUJpbmRpbmdzX0dJUl9IRUFERVJTICR7R09iamVjdERPTUJpbmRpbmdzU3Rh
YmxlX0lOU1RBTExFRF9IRUFERVJTfSkKLWxpc3QoUkVNT1ZFX0lURU0gR09iamVjdERPTUJpbmRp
bmdzX0dJUl9IRUFERVJTCi0gICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaAotICAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuaAotICAgICBi
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU9iamVjdC5oCi0gICAgIGJpbmRpbmdzL2dvYmplY3Qv
V2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmgKLSkKLQotIyBQcm9wYWdhdGUgdGhpcyB2YXJpYWJs
ZSB0byB0aGUgcGFyZW50IHNjb3BlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIG90aGVyIHBh
cnRzIG9mIHRoZSBidWlsZC4KLXNldChHT2JqZWN0RE9NQmluZGluZ3NfR0lSX0hFQURFUlMgJHtH
T2JqZWN0RE9NQmluZGluZ3NfR0lSX0hFQURFUlN9IFBBUkVOVF9TQ09QRSkKIAogaWYgKEVOQUJM
RV9TTU9PVEhfU0NST0xMSU5HKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9uLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbi5pZGwKaW5kZXggZGRl
MTQ0Yy4uNjlkNmJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3Vt
ZW50QW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRB
bmltYXRpb24uaWRsCkBAIC0yOSw4ICsyOSw2IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX0FO
SU1BVElPTlMKIF0gcGFydGlhbCBpbnRlcmZhY2UgRG9jdW1lbnQgewotI2lmICEoZGVmaW5lZChM
QU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKSAvLyBXb3JrIGFyb3VuZCBwcm9i
bGVtcyB3aXRoIEdPYmplY3QgYmluZGluZyBnZW5lcmF0b3IuCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERvY3VtZW50VGltZWxpbmUgdGltZWxpbmU7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9u
PiBnZXRBbmltYXRpb25zKCk7Ci0jZW5kaWYKLX07IAorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLnN5bWJvbHMgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5zeW1ib2xzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmYTNlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLnN5bWJvbHMKKysrIC9kZXYvbnVs
bApAQCAtMSwzICswLDAgQEAKLWdib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9pc19lZGl0ZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCopCi1nYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9pc19lZGl0ZWQoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X21lc3NhZ2Vf
aGFuZGxlcnNfcG9zdF9tZXNzYWdlKFdlYktpdERPTURPTVdpbmRvdyosIGNvbnN0IGdjaGFyKiwg
Y29uc3QgZ2NoYXIqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01EZXByZWNhdGVkLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTI1Y2RhZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDM2
ICswLDAgQEAKLXZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwoV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKQotZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF9vdXRlcl9odG1sKFdlYktpdERPTUhUTUxFbGVtZW50KikK
LWdjaGFyKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfaHRtbChXZWJLaXRET01I
VE1MRWxlbWVudCopCi12b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9vdXRlcl9odG1s
KFdlYktpdERPTUhUTUxFbGVtZW50KiwgY29uc3QgZ2NoYXIqLCBHRXJyb3IqKikKLVdlYktpdERP
TUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfY2hpbGRyZW4oV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqKQotV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoV2ViS2l0RE9NRG9jdW1lbnQqLCBjb25zdCBn
Y2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dHNfYnlfdGFnX25hbWUoV2ViS2l0RE9NRG9jdW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJLaXRE
T01Ob2RlTGlzdCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVf
bnMoV2ViS2l0RE9NRG9jdW1lbnQqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKikKLVdlYktp
dERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1l
KFdlYktpdERPTUVsZW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCogd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9ucyhXZWJLaXRET01FbGVt
ZW50KiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCogd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKFdlYktpdERPTUVsZW1l
bnQqLCBjb25zdCBnY2hhciopCi1HVHlwZSB3ZWJraXRfZG9tX2VudGl0eV9yZWZlcmVuY2VfZ2V0
X3R5cGUodm9pZCkKLWdib29sZWFuIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X2V4cGFuZF9l
bnRpdHlfcmVmZXJlbmNlcyhXZWJLaXRET01UcmVlV2Fsa2VyKikKLVdlYktpdERPTUVudGl0eVJl
ZmVyZW5jZSogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZShXZWJL
aXRET01Eb2N1bWVudCosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCi1nYm9vbGVhbiB3ZWJraXRf
ZG9tX25vZGVfaXRlcmF0b3JfZ2V0X2V4cGFuZF9lbnRpdHlfcmVmZXJlbmNlcyhXZWJLaXRET01O
b2RlSXRlcmF0b3IqKQotR1R5cGUgd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X2dl
dF90eXBlKHZvaWQpCi1nY2hhciogd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X2dl
dF9jb2xvcihXZWJLaXRET01IVE1MQmFzZUZvbnRFbGVtZW50KikKLWdjaGFyKiB3ZWJraXRfZG9t
X2h0bWxfYmFzZV9mb250X2VsZW1lbnRfZ2V0X2ZhY2UoV2ViS2l0RE9NSFRNTEJhc2VGb250RWxl
bWVudCopCi1nbG9uZyB3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfZ2V0X3NpemUo
V2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudCopCi12b2lkIHdlYmtpdF9kb21faHRtbF9iYXNl
X2ZvbnRfZWxlbWVudF9zZXRfY29sb3IoV2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudCosIGNv
bnN0IGdjaGFyKikKLXZvaWQgd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X3NldF9m
YWNlKFdlYktpdERPTUhUTUxCYXNlRm9udEVsZW1lbnQqLCBjb25zdCBnY2hhciopCi12b2lkIHdl
YmtpdF9kb21faHRtbF9iYXNlX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MQmFz
ZUZvbnRFbGVtZW50KiwgZ2xvbmcpCi1XZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfY2xv
bmVfbm9kZShXZWJLaXRET01Ob2RlKiwgZ2Jvb2xlYW4pCi1nY2hhciogd2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfZGVmYXVsdF9jaGFyc2V0KFdlYktpdERPTURvY3VtZW50KikKLVdlYktpdERPTVRl
eHQqIHdlYmtpdF9kb21fdGV4dF9yZXBsYWNlX3dob2xlX3RleHQoV2ViS2l0RE9NVGV4dCosIGNv
bnN0IGdjaGFyKiwgR0Vycm9yKiopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfY2FwdHVyZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KikKLXZvaWQgd2Via2l0
X2RvbV9odG1sX2RvY3VtZW50X3NldF9kZXNpZ25fbW9kZShXZWJLaXRET01IVE1MRG9jdW1lbnQq
LCBjb25zdCBnY2hhciopCi1nY2hhciogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9kZXNp
Z25fbW9kZShXZWJLaXRET01IVE1MRG9jdW1lbnQqKQotZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9nZXRfY29tcGF0X21vZGUoV2ViS2l0RE9NSFRNTERvY3VtZW50KikKLVdlYktpdERP
TUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3NjcmlwdHMoV2Vi
S2l0RE9NSFRNTERvY3VtZW50KikKLVdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfZ2V0X2VtYmVkcyhXZWJLaXRET01IVE1MRG9jdW1lbnQqKQotV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfcGx1Z2lucyhX
ZWJLaXRET01IVE1MRG9jdW1lbnQqKQotZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9nZXRfbmFtZXNw
YWNlX3VyaShXZWJLaXRET01Ob2RlKikKLWdjaGFyKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZWZp
eChXZWJLaXRET01Ob2RlKikKLXZvaWQgd2Via2l0X2RvbV9ub2RlX3NldF9wcmVmaXgoV2ViS2l0
RE9NTm9kZSosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV9ub2Rl
X2dldF9sb2NhbF9uYW1lKFdlYktpdERPTU5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5zeW1ib2xzIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5zeW1ib2xzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzU3NTU4Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuc3ltYm9scwor
KysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotR1R5cGUgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfZ2V0X3R5cGUodm9pZCkKLXZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqLCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqLCBHQ2FsbGJhY2ssIGdi
b29sZWFuLCBncG9pbnRlcikKLWdib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92
ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNoYXIqLCBHQ2Fs
bGJhY2ssIGdib29sZWFuKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2
ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNo
YXIqLCBHQ2xvc3VyZSosIGdib29sZWFuKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdl
dCosIGNvbnN0IGNoYXIqLCBHQ2xvc3VyZSosIGdib29sZWFuKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLnN5bWJvbHMgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9s
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkZDNmNS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9s
cworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLUdUeXBlIHdlYmtpdF9kb21fbm9kZV9m
aWx0ZXJfZ2V0X3R5cGUodm9pZCkKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfQUNDRVBUCi1XRUJL
SVRfRE9NX05PREVfRklMVEVSX1JFSkVDVAotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FM
TAotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FUVFJJQlVURQotV0VCS0lUX0RPTV9OT0RF
X0ZJTFRFUl9TSE9XX0NEQVRBX1NFQ1RJT04KLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19D
T01NRU5UCi1XRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRE9DVU1FTlQKLVdFQktJVF9ET01f
Tk9ERV9GSUxURVJfU0hPV19ET0NVTUVOVF9GUkFHTUVOVAotV0VCS0lUX0RPTV9OT0RFX0ZJTFRF
Ul9TSE9XX0RPQ1VNRU5UX1RZUEUKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19FTEVNRU5U
Ci1XRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRU5USVRZCi1XRUJLSVRfRE9NX05PREVfRklM
VEVSX1NIT1dfRU5USVRZX1JFRkVSRU5DRQotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX05P
VEFUSU9OCi1XRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElP
TgotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX1RFWFQKLVdFQktJVF9ET01fTk9ERV9GSUxU
RVJfU0tJUAotZ3Nob3J0IHdlYmtpdF9kb21fbm9kZV9maWx0ZXJfYWNjZXB0X25vZGUoV2ViS2l0
RE9NTm9kZUZpbHRlciosIFdlYktpdERPTU5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01PYmplY3Quc3ltYm9scyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LnN5bWJvbHMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDJmNDZkMjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01PYmplY3Quc3ltYm9scworKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLUdUeXBlIHdlYmtpdF9kb21fb2JqZWN0X2dldF90eXBlKHZvaWQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRoTlNS
ZXNvbHZlci5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01YUGF0aE5TUmVzb2x2ZXIuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTYzNTBjZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTVhQYXRoTlNSZXNvbHZlci5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCww
IEBACi1HVHlwZSB3ZWJraXRfZG9tX3hwYXRoX25zX3Jlc29sdmVyX2dldF90eXBlKHZvaWQpCi1n
Y2hhciogd2Via2l0X2RvbV94cGF0aF9uc19yZXNvbHZlcl9sb29rdXBfbmFtZXNwYWNlX3VyaShX
ZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIqLCBjb25zdCBnY2hhciopCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmNTg0OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyAvZGV2
L251bGwKQEAgLTEsMjAzNSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5l
dGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgotIyBDb3B5cmlnaHQgKEMpIDIwMDgg
TWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIwMDgg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSMgQ29weXJpZ2h0IChDKSAyMDA5IEFkYW0gRGlu
Z2xlIDxhZGFtQHlvcmJhLm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA5IEppbSBOZWxzb24gPGpp
bUB5b3JiYS5vcmc+Ci0jIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotIwot
IyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0jIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotCi1wYWNrYWdlIENvZGVHZW5lcmF0b3JHT2JqZWN0
OwotCi11c2UgY29uc3RhbnQgRmlsZU5hbWVQcmVmaXggPT4gIldlYktpdERPTSI7Ci11c2UgRmls
ZTo6QmFzZW5hbWU7Ci11c2UgRmluZEJpbjsKLQotIyBHbG9iYWwgVmFyaWFibGVzCi1teSAlaW1w
bEluY2x1ZGVzID0gKCk7Ci1teSAlaGRySW5jbHVkZXMgPSAoKTsKLQotbXkgQHN0YWJsZVN5bWJv
bHMgPSAoKTsKLQotbXkgJGRlZmluZVR5cGVNYWNybyA9ICJHX0RFRklORV9UWVBFIjsKLW15ICRk
ZWZpbmVUeXBlSW50ZXJmYWNlSW1wbGVtZW50YXRpb24gPSAiKSI7Ci1teSBAdHh0RXZlbnRMaXN0
ZW5lcnMgPSAoKTsKLW15IEB0eHRJbnN0YWxsUHJvcHMgPSAoKTsKLW15IEB0eHRTZXRQcm9wcyA9
ICgpOwotbXkgQHR4dEdldFByb3BzID0gKCk7Ci0KLW15ICRjbGFzc05hbWUgPSAiIjsKLQotIyBG
SVhNRTogdGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGZ1bmN0aW9uIHRoYXQgcmVjdXJz
ZXMgdXAgdGhlIHRyZWUKLSMgdG8gZmluZCB0aGUgYWN0dWFsIGJhc2UgdHlwZS4KLW15ICViYXNl
VHlwZUhhc2ggPSAoIk9iamVjdCIgPT4gMSwgIk5vZGUiID0+IDEsICJOb2RlTGlzdCIgPT4gMSwg
Ik5hbWVkTm9kZU1hcCIgPT4gMSwgIkRPTUltcGxlbWVudGF0aW9uIiA9PiAxLAotICAgICAgICAg
ICAgICAgICAgICAiRXZlbnQiID0+IDEsICJDU1NSdWxlIiA9PiAxLCAiQ1NTVmFsdWUiID0+IDEs
ICJTdHlsZVNoZWV0IiA9PiAxLCAiTWVkaWFMaXN0IiA9PiAxLAotICAgICAgICAgICAgICAgICAg
ICAiQ291bnRlciIgPT4gMSwgIlJlY3QiID0+IDEsICJSR0JDb2xvciIgPT4gMSwgIlhQYXRoRXhw
cmVzc2lvbiIgPT4gMSwgIlhQYXRoUmVzdWx0IiA9PiAxLAotICAgICAgICAgICAgICAgICAgICAi
Tm9kZUl0ZXJhdG9yIiA9PiAxLCAiVHJlZVdhbGtlciIgPT4gMSwgIkJsb2IiID0+IDEsICJET01U
b2tlbkxpc3QiID0+IDEsCi0gICAgICAgICAgICAgICAgICAgICJIVE1MQ29sbGVjdGlvbiIgPT4g
MSwgIlRleHRUcmFja0N1ZSIgPT4gMSwgIkFuaW1hdGlvblRpbWVsaW5lIiA9PiAxLCAiQW5pbWF0
aW9uRWZmZWN0IiA9PiAxKTsKLQotIyBPbmx5IG9iamVjdHMgZGVyaXZlZCBmcm9tIE5vZGUgYXJl
IHJlbGVhc2VkIGJ5IHRoZSBET00gb2JqZWN0IGNhY2hlIGFuZCBjYW4gYmUKLSMgdHJhbnNmZXIg
bm9uZS4gSWRlYWxseSB3ZSBjb3VsZCB1c2UgR2V0QmFzZUNsYXNzIHdpdGggdGhlIHBhcmVudCB0
eXBlIHRvIGNoZWNrCi0jIHdoZXRoZXIgaXQncyBOb2RlLCBidXQgdW5mb3J0dW5hdGVseSB3ZSBv
bmx5IGhhdmUgdGhlIG5hbWUgb2YgdGhlIHJldHVybiB0eXBlLAotIyBhbmQgd2UgY2FuJ3Qga25v
dyBpdHMgcGFyZW50IGJhc2UgY2xhc3MuIFNpbmNlIHRoZXJlIGFyZSBmZXdlciBjbGFzc2VzIGlu
IHRoZQotIyBBUEkgdGhhdCBhcmUgbm90IGRlcml2ZWQgZnJvbSBOb2RlLCB3ZSB3aWxsIGxpc3Qg
dGhlbSBoZXJlIHRvIGRlY2lkZSB0aGUKLSMgdHJhbnNmZXIgdHlwZS4KLW15ICV0cmFuc2ZlckZ1
bGxUeXBlSGFzaCA9ICgiQXVkaW9UcmFjayIgPT4gMSwgIkF1ZGlvVHJhY2tMaXN0IiA9PiAxLCAi
QmFyUHJvcCIgPT4gMSwgIkJhdHRlcnlNYW5hZ2VyIiA9PiAxLAotICAgICJDU1NSdWxlTGlzdCIg
PT4gMSwgIkNTU1N0eWxlRGVjbGFyYXRpb24iID0+IDEsICJDU1NTdHlsZVNoZWV0IiA9PiAxLCAi
RG9jdW1lbnRUaW1lbGluZSIgPT4gMSwKLSAgICAiRE9NQXBwbGljYXRpb25DYWNoZSIgPT4gMSwg
IkRPTU1pbWVUeXBlIiA9PiAxLCAiRE9NTWltZVR5cGVBcnJheSIgPT4gMSwgIkRPTU5hbWVkRmxv
d0NvbGxlY3Rpb24iID0+IDEsCi0gICAgIkRPTVBsdWdpbiIgPT4gMSwgIkRPTVBsdWdpbkFycmF5
IiA9PiAxLAotICAgICJET01TZWxlY3Rpb24iID0+IDEsICJET01TZXR0YWJsZVRva2VuTGlzdCIg
PT4gMSwgIkRPTVN0cmluZ0xpc3QiID0+IDEsCi0gICAgIkRPTVdpbmRvdyIgPT4gMSwgIkRPTVdp
bmRvd0NTUyIgPT4gMSwgIkV2ZW50VGFyZ2V0IiA9PiAxLAotICAgICJGaWxlIiA9PiAxLCAiRmls
ZUxpc3QiID0+IDEsICJHYW1lcGFkIiA9PiAxLCAiR2FtZXBhZExpc3QiID0+IDEsCi0gICAgIkdl
b2xvY2F0aW9uIiA9PiAxLCAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uIiA9PiAxLCAiSGlzdG9yeSIg
PT4gMSwKLSAgICAiS2V5Ym9hcmRFdmVudCIgPT4gMSwgIktleWZyYW1lRWZmZWN0IiA9PiAxLCAi
TWVkaWFFcnJvciIgPT4gMSwgIk1lZGlhQ29udHJvbGxlciIgPT4gMSwKLSAgICAiTW91c2VFdmVu
dCIgPT4gMSwgIk1lZGlhUXVlcnlMaXN0IiA9PiAxLCAiTmF2aWdhdG9yIiA9PiAxLCAiTm9kZUZp
bHRlciIgPT4gMSwKLSAgICAiUGVyZm9ybWFuY2UiID0+IDEsICJQZXJmb3JtYW5jZUVudHJ5IiA9
PiAxLCAiUGVyZm9ybWFuY2VOYXZpZ2F0aW9uIiA9PiAxLCAiUGVyZm9ybWFuY2VUaW1pbmciID0+
IDEsCi0gICAgIlJhbmdlIiA9PiAxLCAiU2NyZWVuIiA9PiAxLCAiU3BlZWNoU3ludGhlc2lzIiA9
PiAxLCAiU3BlZWNoU3ludGhlc2lzVm9pY2UiID0+IDEsCi0gICAgIlN0b3JhZ2UiID0+IDEsICJT
dHlsZU1lZGlhIiA9PiAxLCAiVGV4dFRyYWNrIiA9PiAxLCAiVGV4dFRyYWNrQ3VlTGlzdCIgPT4g
MSwKLSAgICAiVGltZVJhbmdlcyIgPT4gMSwgIlRvdWNoIiA9PiAxLCAiVUlFdmVudCIgPT4gMSwg
IlVzZXJNZXNzYWdlSGFuZGxlciIgPT4gMSwgIlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Ui
ID0+IDEsCi0gICAgIlZhbGlkaXR5U3RhdGUiID0+IDEsICJWaWRlb1RyYWNrIiA9PiAxLCAiV2Vi
S2l0TmFtZWRGbG93IiA9PiAxLAotICAgICJXZWJLaXROYW1lc3BhY2UiID0+IDEsICJXZWJLaXRQ
b2ludCIgPT4gMSwgIldoZWVsRXZlbnQiID0+IDEsICJYUGF0aE5TUmVzb2x2ZXIiID0+IDEpOwot
Ci0jIExpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIE5V
TEwKLW15ICRjYW5CZU51bGxQYXJhbXMgPSB7Ci0gICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfY3Jl
YXRlX2F0dHJpYnV0ZV9ucycgPT4gWyduYW1lc3BhY2VVUkknXSwKLSAgICAnd2Via2l0X2RvbV9k
b2N1bWVudF9jcmVhdGVfZWxlbWVudF9ucycgPT4gWyduYW1lc3BhY2VVUkknXSwKLSAgICAnd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZScgPT4gWyduYW1lJ10sCi0g
ICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3InID0+IFsnZmlsdGVy
J10sCi0gICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVfd2Fsa2VyJyA9PiBbJ2Zp
bHRlciddLAotICAgICd3ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlJyA9PiBbJ2luUmVzdWx0
JywgJ3Jlc29sdmVyJ10sCi0gICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X292ZXJyaWRlX3N0
eWxlJyA9PiBbJ3BzZXVkb0VsZW1lbnQnXSwKLSAgICAnd2Via2l0X2RvbV9kb21faW1wbGVtZW50
YXRpb25fY3JlYXRlX2RvY3VtZW50JyA9PiBbJ25hbWVzcGFjZVVSSScsICdkb2N0eXBlJ10sCi0g
ICAgJ3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUnID0+IFsncHNldWRv
RWxlbWVudCddLAotICAgICd3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ucycgPT4g
WyduYW1lc3BhY2VVUkknXSwKLSAgICAnd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUnID0+
IFsncmVmQ2hpbGQnXSwKLX07Ci0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldyB7Ci0g
ICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRyZWZlcmVuY2UgPSB7IH07Ci0KLSAgICAk
Y29kZUdlbmVyYXRvciA9IHNoaWZ0OwotCi0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7
Ci19Ci0KLW15ICRsaWNlbmNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKLS8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi1FT0YKLQotc3ViIFNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlIHsKLSAg
ICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJGludGVyZmFjZSBlcSAiRXZl
bnRUYXJnZXQiOwotfQotCi1zdWIgR2V0UGFyZW50Q2xhc3NOYW1lIHsKLSAgICBteSAkaW50ZXJm
YWNlID0gc2hpZnQ7Ci0gICAgbXkgJHBhcmVudCA9ICRpbnRlcmZhY2UtPnBhcmVudDsKLQotICAg
IHJldHVybiAiV2ViS2l0RE9NT2JqZWN0IiB1bmxlc3MgJHBhcmVudCBhbmQgIVNob3VsZEJlRXhw
b3NlZEFzSW50ZXJmYWNlKCRwYXJlbnQpOwotICAgIHJldHVybiAiV2ViS2l0RE9NIiAuICRwYXJl
bnQ7Ci19Ci0KLXN1YiBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1lIHsKLSAgICBteSAkaW50ZXJmYWNl
ID0gc2hpZnQ7Ci0gICAgbXkgJHBhcmVudCA9ICRpbnRlcmZhY2UtPnBhcmVudDsKLQotICAgIHJl
dHVybiAiT2JqZWN0IiB1bmxlc3MgJHBhcmVudCBhbmQgIVNob3VsZEJlRXhwb3NlZEFzSW50ZXJm
YWNlKCRwYXJlbnQpOwotICAgIHJldHVybiAkcGFyZW50OwotfQotCi1zdWIgSXNCYXNlVHlwZQot
ewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gMSBpZiAkYmFzZVR5cGVIYXNo
eyR0eXBlfTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3ViIEdldEJhc2VDbGFzcwotewotICAgICRw
YXJlbnQgPSBzaGlmdDsKLSAgICAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJHBh
cmVudCBpZiAkcGFyZW50IGVxICJPYmplY3QiIG9yIElzQmFzZVR5cGUoJHBhcmVudCk7Ci0gICAg
cmV0dXJuICJPYmplY3QiIGlmIFNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlKCRwYXJlbnQpOwot
ICAgIHJldHVybiAiRXZlbnQiIGlmICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVyZmFjZSgk
aW50ZXJmYWNlLCAiRXZlbnQiKTsKLSAgICByZXR1cm4gIkNTU1ZhbHVlIiBpZiAkcGFyZW50IGVx
ICJTVkdDb2xvciIgb3IgJHBhcmVudCBlcSAiQ1NTVmFsdWVMaXN0IjsKLSAgICByZXR1cm4gIk5v
ZGUiOwotfQotCi0KLSMgRnJvbSBTdHJpbmc6OkNhbWVsQ2FzZSAwLjAxCi1zdWIgY2FtZWxpemUK
LXsKLSAgICAgICAgbXkgJHMgPSBzaGlmdDsKLSAgICAgICAgam9pbignJywgbWFweyB1Y2ZpcnN0
ICRfIH0gc3BsaXQoLyg/PD1bQS1aYS16XSlfKD89W0EtWmEtel0pfFxiLywgJHMpKTsKLX0KLQot
c3ViIGRlY2FtZWxpemUKLXsKLSAgICAgICAgbXkgJHMgPSBzaGlmdDsKLSAgICAgICAgJHMgPX4g
c3soW15hLXpBLVpdPykoW0EtWl0qKShbQS1aXSkoW2Etel0/KX17Ci0gICAgICAgICAgICAgICAg
bXkgJGZjID0gcG9zKCRzKT09MDsKLSAgICAgICAgICAgICAgICBteSAoJHAwLCRwMSwkcDIsJHAz
KSA9ICgkMSxsYyQyLGxjJDMsJDQpOwotICAgICAgICAgICAgICAgIG15ICR0ID0gJHAwIHx8ICRm
YyA/ICRwMCA6ICdfJzsKLSAgICAgICAgICAgICAgICAkdCAuPSAkcDMgPyAkcDEgPyAiJHtwMX1f
JHAyJHAzIiA6ICIkcDIkcDMiIDogIiRwMSRwMiI7Ci0gICAgICAgICAgICAgICAgJHQ7Ci0gICAg
ICAgIH1nZTsKLQotICAgICAgICAjIFNvbWUgc3RyaW5ncyBhcmUgbm90IGNvcnJlY3RseSBkZWNh
bWVsaXplZCwgYXBwbHkgZml4IHVwcwotICAgICAgICBmb3IgKCRzKSB7Ci0gICAgICAgICAgICBz
L2RvbWNzcy9kb21fY3NzLzsKLSAgICAgICAgICAgIHMvZG9taHRtbC9kb21faHRtbC87Ci0gICAg
ICAgICAgICBzL2RvbWRvbS9kb21fZG9tLzsKLSAgICAgICAgICAgIHMvZG9tY2RhdGEvZG9tX2Nk
YXRhLzsKLSAgICAgICAgICAgIHMvZG9tdWkvZG9tX3VpLzsKLSAgICAgICAgICAgIHMveF9wYXRo
L3hwYXRoLzsKLSAgICAgICAgICAgIHMvd2ViX2tpdC93ZWJraXQvOwotICAgICAgICAgICAgcy9o
dG1saV9mcmFtZS9odG1sX2lmcmFtZS87Ci0gICAgICAgICAgICBzL2h0bWxici9odG1sX2JyLzsK
LSAgICAgICAgICAgIHMvaHRtbGxpL2h0bWxfbGkvOwotICAgICAgICAgICAgcy9odG1saHIvaHRt
bF9oci87Ci0gICAgICAgICAgICBzL2h0bWxkL2h0bWxfZC87Ci0gICAgICAgICAgICBzL2h0bWxv
L2h0bWxfby87Ci0gICAgICAgICAgICBzL2h0bWx1L2h0bWxfdS87Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuICRzOwotfQotCi1zdWIgSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsIHsKLSAgICBt
eSBAY29uZGl0aW9uYWwgPSBzcGxpdCgnXycsIHNoaWZ0KTsKLSAgICBteSBAdXBwZXJDYXNlRXhj
ZXB0aW9ucyA9ICgiU1FMIiwgIkFQSSIpOwotICAgIG15IEBodW1hblJlYWRhYmxlOwotCi0gICAg
Zm9yICRwYXJ0IChAY29uZGl0aW9uYWwpIHsKLSAgICAgICAgaWYgKCFncmVwIHskXyBlcSAkcGFy
dH0gQHVwcGVyQ2FzZUV4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgICRwYXJ0ID0gY2FtZWxpemUo
bGMoJHBhcnQpKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBodW1hblJlYWRhYmxlLCAkcGFy
dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGpvaW4oJyAnLCBAaHVtYW5SZWFkYWJsZSk7Ci19Ci0K
LXN1YiBHZXRQYXJlbnRHT2JqVHlwZSB7Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAg
IG15ICRwYXJlbnQgPSAkaW50ZXJmYWNlLT5wYXJlbnQ7Ci0KLSAgICByZXR1cm4gIldFQktJVF9E
T01fVFlQRV9PQkpFQ1QiIHVubGVzcyAkcGFyZW50IGFuZCAhU2hvdWxkQmVFeHBvc2VkQXNJbnRl
cmZhY2UoJHBhcmVudCk7Ci0gICAgcmV0dXJuICJXRUJLSVRfRE9NX1RZUEVfIiAuIHVjKGRlY2Ft
ZWxpemUoKCRwYXJlbnQpKSk7Ci19Ci0KLXN1YiBHZXRDbGFzc05hbWUgewotICAgIG15ICRuYW1l
ID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gIldlYktpdERPTSRuYW1lIjsKLX0KLQotc3ViIFNraXBB
dHRyaWJ1dGUgewotICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKLQotICAgIGlmICgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifQotICAgICAgICB8
fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0
ZXIifSkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBteSAkcHJvcFR5cGUgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7Ci0gICAgaWYgKCRwcm9wVHlwZSA9fiAvQ29uc3Ry
dWN0b3IkLykgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMSBpZiAk
YXR0cmlidXRlLT5pc1N0YXRpYzsKLSAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNU
eXBlZEFycmF5VHlwZSgkcHJvcFR5cGUpOwotICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9y
LT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHByb3BUeXBlKTsKLQotICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNFbnVtVHlwZSgkcHJvcFR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAxOwot
ICAgIH0KLQotICAgICMgVGhpcyBpcyBmb3IgRE9NV2luZG93LmlkbCBsb2NhdGlvbiBhdHRyaWJ1
dGUKLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICJsb2NhdGlvbiIpIHsK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgIyBUaGlzIGlzIGZvciBIVE1MSW5wdXQu
aWRsIHZhbHVlQXNEYXRlCi0gICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSBlcSAi
dmFsdWVBc0RhdGUiKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICMgVGhpcyBp
cyBmb3IgRE9NV2luZG93LmlkbCBDcnlwdG8gYXR0cmlidXRlCi0gICAgaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSBlcSAiQ3J5cHRvIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gMSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50
SGFuZGxlciI7Ci0KLSAgICByZXR1cm4gMSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUg
ZXEgIlN5bWJvbCI7Ci0KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAg
ICAjIFNraXAgaW5kZXhlZCBkYXRhYmFzZSBhdHRyaWJ1dGVzIGZvciBub3csIHRoZXkgYXJlbid0
IHlldCBzdXBwb3J0ZWQgZm9yIHRoZSBHT2JqZWN0IGdlbmVyYXRvci4KLSAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lID1+IC9eKD86d2Via2l0KT9bSWldbmRleGVkREIvIG9yICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSA9fiAvXig/OndlYmtpdCk/SURCLykgewotICAgICAg
ICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluIn0pIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAg
fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN1YiBTa2lwRnVuY3Rpb24gewotICAgIG15ICRvYmpl
Y3QgPSBzaGlmdDsKLSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAgICBteSAkcGFyZW50Tm9k
ZSA9IHNoaWZ0OwotICAgIG15ICRkZWNhbWVsaXplID0gc2hpZnQ7Ci0gICAgbXkgJHByZWZpeCA9
IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICJ3ZWJraXRfZG9tXyIgLiAkZGVjYW1l
bGl6ZSAuICJfIiAuICRwcmVmaXggLiBkZWNhbWVsaXplKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lKTsKLSAgICBteSAkZnVuY3Rpb25SZXR1cm5UeXBlID0gJHByZWZpeCBlcSAic2V0XyIgPyAi
dm9pZCIgOiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZTsKLSAgICBteSAkaXNDdXN0b21GdW5j
dGlvbiA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
In07Ci0gICAgbXkgJGNhbGxXaXRoID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDYWxsV2l0aCJ9OwotICAgIG15ICRpc1Vuc3VwcG9ydGVkQ2FsbFdpdGggPSAk
Y29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJTY3Jp
cHRBcmd1bWVudHMiKSB8fCAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlu
cygkY2FsbFdpdGgsICJDYWxsU3RhY2siKSB8fCAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRy
aWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpIHx8ICRjb2RlR2VuZXJhdG9y
LT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIpOwot
Ci0gICAgIyBTdGF0aWMgbWV0aG9kcyBhcmUgdW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMSBpZiAk
ZnVuY3Rpb24tPmlzU3RhdGljOwotCi0gICAgaWYgKCgkaXNDdXN0b21GdW5jdGlvbiB8fCAkaXNV
bnN1cHBvcnRlZENhbGxXaXRoKSAmJgotICAgICAgICAkZnVuY3Rpb25OYW1lIG5lICJ3ZWJraXRf
ZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgJiYKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSBuZSAid2Vi
a2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUg
IndlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUg
bmUgIndlYmtpdF9kb21fbm9kZV9hcHBlbmRfY2hpbGQiICYmCi0gICAgICAgICRmdW5jdGlvbk5h
bWUgbmUgIndlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2l0ZW0iICYmCi0gICAgICAgICRmdW5j
dGlvbk5hbWUgbmUgIndlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX25hbWVkX2l0ZW0iKSB7Ci0g
ICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICMgU2tpcCBmdW5jdGlvbnMgdGhhdCBoYXZl
IGNhbGxiYWNrIHBhcmFtZXRlcnMsIGJlY2F1c2UgdGhpcyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0
IGtub3cKLSAgICAjIGhvdyB0byBhdXRvLWdlbmVyYXRlIGNhbGxiYWNrcy4gIFNraXAgZnVuY3Rp
b25zIHRoYXQgaGF2ZSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIgb3IKLSAgICAjIHNlcXVlbmNl
PFQ+IHBhcmFtZXRlcnMsIGJlY2F1c2UgdGhpcyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IGtub3cg
aG93IHRvIGF1dG8tZ2VuZXJhdGUKLSAgICAjIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgb3Igc2Vx
dWVuY2U8VD4uIFNraXAgRXZlbnRMaXN0ZW5lcnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIGVs
c2V3aGVyZS4KLSAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
KSB7Ci0gICAgICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0Z1bmN0aW9uT25seUNh
bGxiYWNrSW50ZXJmYWNlKCRwYXJhbS0+dHlwZSk7Ci0gICAgICAgIHJldHVybiAxIGlmICRwYXJh
bS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNsYW1wIn07Ci0gICAgICAgIHJldHVybiAxIGlmICRw
YXJhbS0+dHlwZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciI7Ci0gICAgICAgIHJldHVybiAx
IGlmICRwYXJhbS0+dHlwZSBlcSAiRXZlbnRMaXN0ZW5lciI7Ci0gICAgICAgIHJldHVybiAxIGlm
ICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHBhcmFtLT50eXBl
KTsKLSAgICB9Ci0KLSAgICAjIFRoaXMgaXMgZm9yIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmlkbCBh
ZGQoRmlsZSkgbWV0aG9kCi0gICAgaWYgKCRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZGF0
YV90cmFuc2Zlcl9pdGVtX2xpc3RfYWRkIiAmJiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gPT0g
MSkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAjIFNraXAgQ29uc29sZTo6cHJv
ZmlsZSgpIGFuZCBDb25zb2xlOjpwcm9maWxlRW5kKCkgYXMgdGhleSdyZSBub3QgY29ycmVjdGx5
IGdlbmVyYXRlZCBmb3IgdGhlIG1vbWVudC4KLSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAid2Vi
a2l0X2RvbV9jb25zb2xlX3Byb2ZpbGUiIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21f
Y29uc29sZV9wcm9maWxlX2VuZCIpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJl
LT50eXBlKSkgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPm5hbWUgZXEgInNldCIgYW5kICRwYXJlbnROb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVHlwZWRBcnJheSJ9KSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAg
IGlmICgkb2JqZWN0IGVxICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIikgewotICAgICAgICByZXR1
cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgImdl
dFNWR0RvY3VtZW50IikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgImdldENTU0NhbnZhc0NvbnRleHQiKSB7Ci0gICAg
ICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFt
ZSBlcSAic2V0UmFuZ2VUZXh0IiAmJiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gPT0gMSkgewot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWUgZXEgInRpbWVFbmQiKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlm
ICgkY29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCRmdW5jdGlvblJl
dHVyblR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZSBlcSAic3VwcG9ydHMiICYmIEB7JGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzfSA9PSAxKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJldHVybiAxIGlm
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlIGVxICJQcm9taXNlIjsKLQotICAgIHJldHVybiAx
IGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlIGVxICJTeW1ib2wiOwotCi0gICAgcmV0dXJu
IDEgaWYgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgIkRhdGUiOwotCi0gICAgcmV0dXJu
IDEgaWYgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0
aW4ifTsKLQotICAgIHJldHVybiAxIGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiUHJpdmF0ZUlkZW50aWZpZXIifSBhbmQgbm90ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUHVibGljSWRlbnRpZmllciJ9OwotICAgIHJldHVy
biAwOwotfQotCi0jIE5hbWUgdHlwZSB1c2VkIGluIHRoZSBnX3ZhbHVlX3tzZXQsZ2V0fV8qIGZ1
bmN0aW9ucwotc3ViIEdldEdWYWx1ZVR5cGVOYW1lIHsKLSAgICBteSAkdHlwZSA9IHNoaWZ0Owot
Ci0gICAgbXkgJXR5cGVzID0gKCJET01TdHJpbmciLCAic3RyaW5nIiwKLSAgICAgICAgICAgICAg
ICAgIlVTVlN0cmluZyIsICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAiRE9NVGltZVN0YW1w
IiwgInVpbnQiLAotICAgICAgICAgICAgICAgICAiZmxvYXQiLCAiZmxvYXQiLAotICAgICAgICAg
ICAgICAgICAidW5yZXN0cmljdGVkIGZsb2F0IiwgImZsb2F0IiwKLSAgICAgICAgICAgICAgICAg
ImRvdWJsZSIsICJkb3VibGUiLAotICAgICAgICAgICAgICAgICAidW5yZXN0cmljdGVkIGRvdWJs
ZSIsICJkb3VibGUiLAotICAgICAgICAgICAgICAgICAiYm9vbGVhbiIsICJib29sZWFuIiwKLSAg
ICAgICAgICAgICAgICAgImNoYXIiLCAiY2hhciIsCi0gICAgICAgICAgICAgICAgICJsb25nIiwg
ImxvbmciLAotICAgICAgICAgICAgICAgICAibG9uZyBsb25nIiwgImludDY0IiwKLSAgICAgICAg
ICAgICAgICAgImJ5dGUiLCAiaW50OCIsCi0gICAgICAgICAgICAgICAgICJvY3RldCIsICJ1aW50
OCIsCi0gICAgICAgICAgICAgICAgICJzaG9ydCIsICJpbnQiLAotICAgICAgICAgICAgICAgICAi
dWNoYXIiLCAidWNoYXIiLAotICAgICAgICAgICAgICAgICAidW5zaWduZWQiLCAidWludCIsCi0g
ICAgICAgICAgICAgICAgICJpbnQiLCAiaW50IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVk
IGludCIsICJ1aW50IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIsICJ1
aW50NjQiLCAKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmciLCAidWxvbmciLAotICAg
ICAgICAgICAgICAgICAidW5zaWduZWQgc2hvcnQiLCAidWludCIpOwotCi0gICAgcmV0dXJuICR0
eXBlc3skdHlwZX0gPyAkdHlwZXN7JHR5cGV9IDogIm9iamVjdCI7Ci19Ci0KLSMgTmFtZSB0eXBl
IHVzZWQgaW4gQyBkZWNsYXJhdGlvbnMKLXN1YiBHZXRHbGliVHlwZU5hbWUgewotICAgIG15ICR0
eXBlID0gc2hpZnQ7Ci0gICAgbXkgJG5hbWUgPSBHZXRDbGFzc05hbWUoJHR5cGUpOwotCi0gICAg
bXkgJXR5cGVzID0gKCJET01TdHJpbmciLCAiZ2NoYXIqIiwKLSAgICAgICAgICAgICAgICAgIlVT
VlN0cmluZyIsICJnY2hhcioiLAotICAgICAgICAgICAgICAgICAiRE9NVGltZVN0YW1wIiwgImd1
aW50MzIiLAotICAgICAgICAgICAgICAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiwgImdjaGFy
KiIsCi0gICAgICAgICAgICAgICAgICJmbG9hdCIsICJnZmxvYXQiLAotICAgICAgICAgICAgICAg
ICAidW5yZXN0cmljdGVkIGZsb2F0IiwgImdmbG9hdCIsCi0gICAgICAgICAgICAgICAgICJkb3Vi
bGUiLCAiZ2RvdWJsZSIsCi0gICAgICAgICAgICAgICAgICJ1bnJlc3RyaWN0ZWQgZG91YmxlIiwg
Imdkb3VibGUiLAotICAgICAgICAgICAgICAgICAiYm9vbGVhbiIsICJnYm9vbGVhbiIsCi0gICAg
ICAgICAgICAgICAgICJjaGFyIiwgImdjaGFyIiwKLSAgICAgICAgICAgICAgICAgImxvbmciLCAi
Z2xvbmciLAotICAgICAgICAgICAgICAgICAibG9uZyBsb25nIiwgImdpbnQ2NCIsCi0gICAgICAg
ICAgICAgICAgICJieXRlIiwgImdpbnQ4IiwKLSAgICAgICAgICAgICAgICAgIm9jdGV0IiwgImd1
aW50OCIsCi0gICAgICAgICAgICAgICAgICJzaG9ydCIsICJnc2hvcnQiLAotICAgICAgICAgICAg
ICAgICAidWNoYXIiLCAiZ3VjaGFyIiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIiwgImd1
aW50IiwKLSAgICAgICAgICAgICAgICAgImludCIsICJnaW50IiwKLSAgICAgICAgICAgICAgICAg
InVuc2lnbmVkIGludCIsICJndWludCIsCi0gICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBsb25n
IiwgImd1bG9uZyIsCi0gICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBsb25nIGxvbmciLCAiZ3Vp
bnQ2NCIsCi0gICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBzaG9ydCIsICJndXNob3J0IiwKLSAg
ICAgICAgICAgICAgICAgInZvaWQiLCAidm9pZCIpOwotCi0gICAgcmV0dXJuICR0eXBlc3skdHlw
ZX0gPyAkdHlwZXN7JHR5cGV9IDogIiRuYW1lKiI7Ci19Ci0KLXN1YiBJc0dET01DbGFzc1R5cGUg
ewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gMCBpZiAkY29kZUdlbmVyYXRv
ci0+SXNOb25Qb2ludGVyVHlwZSgkdHlwZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlw
ZSgkdHlwZSkgfHwgJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7Ci0gICAgcmV0dXJu
IDE7Ci19Ci0KLXN1YiBJc1Byb3BlcnR5UmVhZGFibGUgewotICAgIG15ICRwcm9wZXJ0eSA9IHNo
aWZ0OwotICAgIHJldHVybiAhU2tpcEF0dHJpYnV0ZSgkcHJvcGVydHkpOwotfQotCi1zdWIgSXNQ
cm9wZXJ0eVdyaXRlYWJsZSB7Ci0gICAgbXkgJHByb3BlcnR5ID0gc2hpZnQ7Ci0KLSAgICBpZiAo
IUlzUHJvcGVydHlSZWFkYWJsZSgkcHJvcGVydHkpKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIGlmICgkcHJvcGVydHktPmlzUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgbXkgJGd0eXBlID0gR2V0R1ZhbHVlVHlwZU5hbWUoJHByb3BlcnR5LT5z
aWduYXR1cmUtPnR5cGUpOwotICAgIG15ICRoYXNHdHlwZVNpZ25hdHVyZSA9ICRndHlwZSBlcSAi
Ym9vbGVhbiIgfHwgJGd0eXBlIGVxICJmbG9hdCIgfHwgJGd0eXBlIGVxICJkb3VibGUiIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJGd0eXBlIGVxICJpbnQ2NCIgfHwgJGd0eXBlIGVx
ICJ1aW50NjQiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGd0eXBlIGVxICJsb25n
IiB8fCAkZ3R5cGUgZXEgInVsb25nIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRn
dHlwZSBlcSAiaW50IiB8fCAkZ3R5cGUgZXEgInVpbnQiIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJGd0eXBlIGVxICJzaG9ydCIgfHwgJGd0eXBlIGVxICJ1c2hvcnQiIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJGd0eXBlIGVxICJpbnQ4IiB8fCAkZ3R5cGUgZXEgInVp
bnQ4IiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRndHlwZSBlcSAiY2hhciIgfHwg
JGd0eXBlIGVxICJ1Y2hhciIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3R5cGUg
ZXEgInN0cmluZyI7Ci0gICAgaWYgKCEkaGFzR3R5cGVTaWduYXR1cmUpIHsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgIyBGSVhNRTogV2UgYXJlIG5vdCBnZW5lcmF0aW5nIHNldHRl
cnMgZm9yICdSZXBsYWNlYWJsZScgYXR0cmlidXRlcyBub3csIGJ1dCB3ZSBzaG91bGQgc29tZWhv
dy4KLSAgICBpZiAoJHByb3BlcnR5LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJS
ZXBsYWNlYWJsZSJ9KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICgkcHJv
cGVydHktPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9KSB7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAwIGlmICRwcm9wZXJ0eS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSB8fCAkcHJvcGVydHkt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlNldHRlckNhbGxXaXRoIn07Ci0KLSAg
ICByZXR1cm4gMTsKLX0KLQotc3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxXYXJuaW5nCi17Ci0gICAg
bXkgJG5vZGUgPSBzaGlmdDsKLSAgICBteSAkaW5kZW50U2l6ZSA9IHNoaWZ0OwotICAgIGlmICgh
JGluZGVudFNpemUpIHsKLSAgICAgICAgJGluZGVudFNpemUgPSA0OwotICAgIH0KLQotICAgIG15
ICRjb25kaXRpb25hbCA9ICRub2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwi
fTsKLSAgICBteSBAd2FybjsKLQotICAgIGlmICgkY29uZGl0aW9uYWwpIHsKLSAgICAgICAgaWYg
KCRjb25kaXRpb25hbCA9fiAvJi8pIHsKLSAgICAgICAgICAgIG15IEBzcGxpdENvbmRpdGlvbmFs
cyA9IHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgICAgIGZvcmVhY2ggJGNvbmRp
dGlvbiAoQHNwbGl0Q29uZGl0aW9uYWxzKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAd2Fybiwg
IiNpZiAhRU5BQkxFKCRjb25kaXRpb24pXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEB3YXJu
LCAnICcgeCAkaW5kZW50U2l6ZSAuICJXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKFwi
IiAuIEh1bWFuUmVhZGFibGVDb25kaXRpb25hbCgkY29uZGl0aW9uKSAuICJcIilcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQHdhcm4sICIjZW5kaWZcbiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2lmICgkY29uZGl0aW9uYWwgPX4gL1x8LykgewotICAgICAgICAgICAgZm9yZWFj
aCAkY29uZGl0aW9uIChzcGxpdCgvXHwvLCAkY29uZGl0aW9uYWwpKSB7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAd2FybiwgJyAnIHggJGluZGVudFNpemUgLiAiV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVChcIiIgLiBIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwoJGNvbmRpdGlvbikgLiAi
XCIpXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1
c2goQHdhcm4sICcgJyB4ICRpbmRlbnRTaXplIC4gIldFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoXCIiIC4gSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRjb25kaXRpb25hbCkgLiAiXCIp
XG4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBAd2FybjsKLX0KLQotc3ViIEdl
bmVyYXRlUHJvcGVydHkgewotICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKLSAgICBteSAkaW50
ZXJmYWNlTmFtZSA9IHNoaWZ0OwotICAgIG15IEB3cml0ZWFibGVQcm9wZXJ0aWVzID0gQHtzaGlm
dCBAX307Ci0gICAgbXkgJHBhcmVudE5vZGUgPSBzaGlmdDsKLQotICAgIG15ICRoYXNHZXR0ZXJF
eGNlcHRpb24gPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJH
ZXR0ZXJSYWlzZXNFeGNlcHRpb24ifTsKLSAgICBteSAkaGFzU2V0dGVyRXhjZXB0aW9uID0gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU2V0dGVyUmFpc2VzRXhj
ZXB0aW9uIn07Ci0KLSAgICBteSAkZGVjYW1lbGl6ZUludGVyZmFjZU5hbWUgPSBkZWNhbWVsaXpl
KCRpbnRlcmZhY2VOYW1lKTsKLSAgICBteSAkcHJvcE5hbWUgPSBkZWNhbWVsaXplKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgbXkgJHByb3BGdW5jdGlvbk5hbWUgPSBHZXRGdW5j
dGlvblNpZ25hdHVyZU5hbWUoJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgIG15ICRw
cm9wTmFtZUNhcHMgPSB1YygkcHJvcE5hbWUpOwotICAgIG15ICR7cHJvcEVudW19ID0gIlBST1Bf
JHtwcm9wTmFtZUNhcHN9IjsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgJHtwcm9w
RW51bX0sXG4iKTsKLQotICAgIG15ICRwcm9wVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZTsKLSAgICBteSAke3Byb3BHVHlwZX0gPSBkZWNhbWVsaXplKCRwcm9wVHlwZSk7Ci0gICAg
bXkgJHt1Y1Byb3BHVHlwZX0gPSB1YygkcHJvcEdUeXBlKTsKLQotICAgIG15ICRndHlwZSA9IEdl
dEdWYWx1ZVR5cGVOYW1lKCRwcm9wVHlwZSk7Ci0gICAgbXkgJGdwYXJhbWZsYWcgPSAiV0VCS0lU
X1BBUkFNX1JFQURBQkxFIjsKLSAgICBteSAkd3JpdGVhYmxlID0gSXNQcm9wZXJ0eVdyaXRlYWJs
ZSgkYXR0cmlidXRlKTsKLQotICAgIG15ICRtdXRhYmxlU3RyaW5nID0gInJlYWQtb25seSI7Ci0g
ICAgbXkgJGhhc0N1c3RvbVNldHRlciA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9OwotICAgIGlmICgkd3JpdGVhYmxlICYmICRoYXND
dXN0b21TZXR0ZXIpIHsKLSAgICAgICAgJG11dGFibGVTdHJpbmcgPSAicmVhZC1vbmx5IChkdWUg
dG8gY3VzdG9tIGZ1bmN0aW9ucyBuZWVkZWQgaW4gd2Via2l0ZG9tKSI7Ci0gICAgfSBlbHNpZiAo
JHdyaXRlYWJsZSkgewotICAgICAgICAkZ3BhcmFtZmxhZyA9ICJXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFIjsKLSAgICAgICAgJG11dGFibGVTdHJpbmcgPSAicmVhZC13cml0ZSI7Ci0gICAgfQotCi0g
ICAgbXkgJGdldHRlckZ1bmN0aW9uTmFtZSA9IEdldEVmZmVjdGl2ZUZ1bmN0aW9uTmFtZSgid2Vi
a2l0X2RvbV8ke2RlY2FtZWxpemVJbnRlcmZhY2VOYW1lfV9nZXRfIiAuICRwcm9wRnVuY3Rpb25O
YW1lKTsKLSAgICBpZiAoRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbigkZ2V0dGVyRnVu
Y3Rpb25OYW1lKSkgewotICAgICAgICAkZ2V0dGVyRnVuY3Rpb25OYW1lID0gJGdldHRlckZ1bmN0
aW9uTmFtZSAuICJfd2l0aF9lcnJvciI7Ci0gICAgfQotICAgIG15IEBnZXR0ZXJBcmd1bWVudHMg
PSAoKTsKLSAgICBwdXNoKEBnZXR0ZXJBcmd1bWVudHMsICJzZWxmIik7Ci0gICAgcHVzaChAZ2V0
dGVyQXJndW1lbnRzLCAibnVsbHB0ciIpIGlmICRoYXNHZXR0ZXJFeGNlcHRpb24gfHwgRnVuY3Rp
b25Vc2VkVG9SYWlzZUV4Y2VwdGlvbigkZ2V0dGVyRnVuY3Rpb25OYW1lKTsKLQotICAgIGlmIChn
cmVwIHskXyBlcSAkYXR0cmlidXRlfSBAd3JpdGVhYmxlUHJvcGVydGllcykgewotICAgICAgICBt
eSAkc2V0dGVyRnVuY3Rpb25OYW1lID0gR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1lKCJ3ZWJraXRf
ZG9tXyR7ZGVjYW1lbGl6ZUludGVyZmFjZU5hbWV9X3NldF8iIC4gJHByb3BGdW5jdGlvbk5hbWUp
OwotICAgICAgICBpZiAoRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbigkc2V0dGVyRnVu
Y3Rpb25OYW1lKSkgewotICAgICAgICAgICAgJHNldHRlckZ1bmN0aW9uTmFtZSA9ICRzZXR0ZXJG
dW5jdGlvbk5hbWUgLiAiX3dpdGhfZXJyb3IiOwotICAgICAgICB9Ci0gICAgICAgIG15IEBzZXR0
ZXJBcmd1bWVudHMgPSAoKTsKLSAgICAgICAgcHVzaChAc2V0dGVyQXJndW1lbnRzLCAic2VsZiwg
Z192YWx1ZV9nZXRfJGd0eXBlKHZhbHVlKSIpOwotICAgICAgICBwdXNoKEBzZXR0ZXJBcmd1bWVu
dHMsICJudWxscHRyIikgaWYgJGhhc1NldHRlckV4Y2VwdGlvbiB8fCBGdW5jdGlvblVzZWRUb1Jh
aXNlRXhjZXB0aW9uKCRzZXR0ZXJGdW5jdGlvbk5hbWUpOwotCi0gICAgICAgIHB1c2goQHR4dFNl
dFByb3BzLCAiICAgIGNhc2UgJHtwcm9wRW51bX06XG4iKTsKLSAgICAgICAgcHVzaChAdHh0U2V0
UHJvcHMsICIgICAgICAgICIgLiAkc2V0dGVyRnVuY3Rpb25OYW1lIC4gIigiIC4gam9pbigiLCAi
LCBAc2V0dGVyQXJndW1lbnRzKSAuICIpO1xuIik7Ci0gICAgICAgIHB1c2goQHR4dFNldFByb3Bz
LCAiICAgICAgICBicmVhaztcbiIpOwotICAgIH0KLQotICAgIHB1c2goQHR4dEdldFByb3BzLCAi
ICAgIGNhc2UgJHtwcm9wRW51bX06XG4iKTsKLQotICAgIG15ICRwb3N0Q29udmVydEZ1bmN0aW9u
ID0gIiI7Ci0gICAgaWYgKCRndHlwZSBlcSAic3RyaW5nIikgewotICAgICAgICBwdXNoKEB0eHRH
ZXRQcm9wcywgIiAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgIiAuICRnZXR0ZXJG
dW5jdGlvbk5hbWUgLiAiKCIgLiBqb2luKCIsICIsIEBnZXR0ZXJBcmd1bWVudHMpIC4gIikpO1xu
Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAdHh0R2V0UHJvcHMsICIgICAgICAgIGdf
dmFsdWVfc2V0XyRndHlwZSh2YWx1ZSwgIiAuICRnZXR0ZXJGdW5jdGlvbk5hbWUgLiAiKCIgLiBq
b2luKCIsICIsIEBnZXR0ZXJBcmd1bWVudHMpIC4gIikpO1xuIik7Ci0gICAgfQotCi0gICAgcHVz
aChAdHh0R2V0UHJvcHMsICIgICAgICAgIGJyZWFrO1xuIik7Ci0KLSAgICBteSAlcGFyYW1ldGVy
U3BlY09wdGlvbnMgPSAoImludCIgPT4gICAgIFsgIkdfTUlOSU5UIiwgIkdfTUFYSU5UIiwgIjAi
IF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQ4IiA9PiAgICBbICJHX01J
TklOVDgiLCAiR19NQVhJTlQ4IiwgIjAiIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJib29sZWFuIiA9PiBbICJGQUxTRSIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImZsb2F0IiA9PiAgIFsgIi1HX01BWEZMT0FUIiwgIkdfTUFYRkxPQVQiLCAiMCIgXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvdWJsZSIgPT4gIFsgIi1HX01BWERP
VUJMRSIsICJHX01BWERPVUJMRSIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidWludDY0IiA9PiAgWyAiMCIsICJHX01BWFVJTlQ2NCIsICIwIiBdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAibG9uZyIgPT4gICAgWyAiR19NSU5MT05HIiwgIkdfTUFY
TE9ORyIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50NjQiID0+
ICAgWyAiR19NSU5JTlQ2NCIsICJHX01BWElOVDY0IiwgIjAiIF0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ1bG9uZyIgPT4gICBbICIwIiwgIkdfTUFYVUxPTkciLCAiMCIgXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVpbnQiID0+ICAgIFsgIjAiLCAiR19N
QVhVSU5UIiwgIjAiIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1aW50OCIg
PT4gICBbICIwIiwgIkdfTUFYVUlOVDgiLCAiMCIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInVzaG9ydCIgPT4gIFsgIjAiLCAiR19NQVhVSU5UMTYiLCAiMCIgXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInVjaGFyIiA9PiAgIFsgIkdfTUlOSU5UOCIsICJH
X01BWElOVDgiLCAiMCIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXIi
ID0+ICAgIFsgIjAiLCAiR19NQVhVSU5UOCIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3RyaW5nIiA9PiAgWyAnIiInLCBdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAib2JqZWN0IiA9PiAgWyAiV0VCS0lUX0RPTV9UWVBFXyR7dWNQcm9wR1R5cGV9
IiBdKTsKLQotICAgIG15ICRleHRyYVBhcmFtZXRlcnMgPSBqb2luKCIsICIsIEB7JHBhcmFtZXRl
clNwZWNPcHRpb25zeyRndHlwZX19KTsKLSAgICBteSAkZ2xpYlR5cGVOYW1lID0gR2V0R2xpYlR5
cGVOYW1lKCRwcm9wVHlwZSk7Ci0gICAgJHByb3BOYW1lID1+IHMvXy8tL2c7Ci0gICAgbXkgJHR4
dEluc3RhbGxQcm9wID0gPDwgIkVPRiI7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICAkcHJvcEVudW0sCi0gICAgICAg
IGdfcGFyYW1fc3BlY18kZ3R5cGUoCi0gICAgICAgICAgICAiJHByb3BOYW1lIiwKLSAgICAgICAg
ICAgICIkaW50ZXJmYWNlTmFtZTokcHJvcE5hbWUiLAotICAgICAgICAgICAgIiRtdXRhYmxlU3Ry
aW5nICRnbGliVHlwZU5hbWUgJGludGVyZmFjZU5hbWU6JHByb3BOYW1lIiwKLSAgICAgICAgICAg
ICRleHRyYVBhcmFtZXRlcnMsCi0gICAgICAgICAgICAkZ3BhcmFtZmxhZykpOwotCi1FT0YKLSAg
ICBwdXNoKEB0eHRJbnN0YWxsUHJvcHMsICR0eHRJbnN0YWxsUHJvcCk7Ci19Ci0KLXN1YiBHZW5l
cmF0ZVByb3BlcnRpZXMgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGludGVy
ZmFjZSkgPSBAXzsKLQotICAgIG15ICRkZWNhbWVsaXplID0gZGVjYW1lbGl6ZSgkaW50ZXJmYWNl
TmFtZSk7Ci0gICAgbXkgJGNsc0NhcHMgPSB1YygkZGVjYW1lbGl6ZSk7Ci0gICAgbXkgJGxvd2Vy
Q2FzZUlmYWNlTmFtZSA9ICJ3ZWJraXRfZG9tXyRkZWNhbWVsaXplIjsKLSAgICBteSAkcGFyZW50
SW1wbENsYXNzTmFtZSA9IEdldFBhcmVudEltcGxDbGFzc05hbWUoJGludGVyZmFjZSk7Ci0KLSAg
ICBteSAkY29uZGl0aW9uR3VhcmRTdGFydCA9ICIiOwotICAgIG15ICRjb25kaXRpb25HdWFyZEVu
ZCA9ICIiOwotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgIGlmICgkY29uZGl0aW9uYWxT
dHJpbmcpIHsKLSAgICAgICAgJGNvbmRpdGlvbkd1YXJkU3RhcnQgPSAiI2lmICR7Y29uZGl0aW9u
YWxTdHJpbmd9IjsKLSAgICAgICAgJGNvbmRpdGlvbkd1YXJkRW5kID0gIiNlbmRpZiAvLyAke2Nv
bmRpdGlvbmFsU3RyaW5nfSI7Ci0gICAgfQotCi0gICAgIyBQcm9wZXJ0aWVzCi0gICAgbXkgJGlt
cGxDb250ZW50ID0gIiI7Ci0gICAgbXkgQHJlYWRhYmxlUHJvcGVydGllcyA9IGdyZXAgeyBJc1By
b3BlcnR5UmVhZGFibGUoJF8pIH0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKLSAgICBteSBA
d3JpdGVhYmxlUHJvcGVydGllcyA9IGdyZXAgeyBJc1Byb3BlcnR5V3JpdGVhYmxlKCRfKSB9IEB7
JGludGVyZmFjZS0+YXR0cmlidXRlc307Ci0gICAgbXkgJG51bVByb3BlcnRpZXMgPSBzY2FsYXIg
QHJlYWRhYmxlUHJvcGVydGllczsKLQotICAgICMgUHJvcGVydGllcwotICAgIGlmICgkbnVtUHJv
cGVydGllcyA+IDApIHsKLSAgICAgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1lbnVtIHsK
LSAgICBQUk9QXzAsCi1FT0YKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENv
bnRlbnQpOwotCi0gICAgICAgIHB1c2goQHR4dEdldFByb3BzLCAic3RhdGljIHZvaWQgJHtsb3dl
ckNhc2VJZmFjZU5hbWV9X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKVxuIik7Ci0gICAgICAgIHB1
c2goQHR4dEdldFByb3BzLCAie1xuIik7Ci0gICAgICAgIHB1c2goQHR4dEdldFByb3BzLCAiICAg
ICR7Y2xhc3NOYW1lfSogc2VsZiA9IFdFQktJVF9ET01fJHtjbHNDYXBzfShvYmplY3QpO1xuIik7
Ci0gICAgICAgIHB1c2goQHR4dEdldFByb3BzLCAiXG4iKTsKLSAgICAgICAgcHVzaChAdHh0R2V0
UHJvcHMsICIgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7XG4iKTsKLQotICAgICAgICBpZiAoc2Nh
bGFyIEB3cml0ZWFibGVQcm9wZXJ0aWVzID4gMCkgewotICAgICAgICAgICAgcHVzaChAdHh0U2V0
UHJvcHMsICJzdGF0aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAie1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEB0eHRTZXRQcm9wcywgIiAgICAke2NsYXNzTmFtZX0qIHNl
bGYgPSBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ob2JqZWN0KTtcbiIpOwotICAgICAgICAgICAgcHVz
aChAdHh0U2V0UHJvcHMsICJcbiIpOwotICAgICAgICAgICAgcHVzaChAdHh0U2V0UHJvcHMsICIg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7XG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvcmVh
Y2ggbXkgJGF0dHJpYnV0ZSAoQHJlYWRhYmxlUHJvcGVydGllcykgewotICAgICAgICAgICAgR2Vu
ZXJhdGVQcm9wZXJ0eSgkYXR0cmlidXRlLCAkaW50ZXJmYWNlTmFtZSwgXEB3cml0ZWFibGVQcm9w
ZXJ0aWVzLCAkaW50ZXJmYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgIn07XG5cbiIpOwotCi0gICAgICAgICR0eHRHZXRQcm9wID0gPDwgIkVPRiI7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci1FT0YK
LSAgICAgICAgcHVzaChAdHh0R2V0UHJvcHMsICR0eHRHZXRQcm9wKTsKLQotICAgICAgICBpZiAo
c2NhbGFyIEB3cml0ZWFibGVQcm9wZXJ0aWVzID4gMCkgewotICAgICAgICAgICAgJHR4dFNldFBy
b3BzID0gPDwgIkVPRiI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci1FT0YKLSAgICAgICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAkdHh0U2V0
UHJvcHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgIyBEbyBub3QgaW5zZXJ0IGV4dHJhIHNw
YWNlcyB3aGVuIGludGVycG9sYXRpbmcgYXJyYXkgdmFyaWFibGVzCi0gICAgJCIgPSAiIjsKLQot
ICAgIGlmICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICAkaW1w
bENvbnRlbnQgPSA8PCAiRU9GIjsKLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgJHtjbGFzc05hbWV9UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fJHtjbHNDYXBzfV9HRVRfUFJJVkFURShvYmplY3QpOwotJGNvbmRpdGlv
bkd1YXJkU3RhcnQKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSk7Ci0kY29uZGl0aW9uR3VhcmRFbmQKLSAgICBwcml2LT5+JHtjbGFzc05h
bWV9UHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKCR7bG93ZXJDYXNlSWZhY2VOYW1lfV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1FT0YKLSAgICAgICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwotICAgIH0KLQotICAgIGlmICgkbnVtUHJv
cGVydGllcyA+IDApIHsKLSAgICAgICAgaWYgKHNjYWxhciBAd3JpdGVhYmxlUHJvcGVydGllcyA+
IDApIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQHR4dFNldFByb3BzKTsK
LSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIlxuIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCBAdHh0R2V0UHJvcHMpOwotICAgICAgICBwdXNo
KEBjQm9keVByb3BlcnRpZXMsICJcbiIpOwotICAgIH0KLQotICAgICMgQWRkIGEgY29uc3RydWN0
b3IgaW1wbGVtZW50YXRpb24gb25seSBmb3IgZGlyZWN0IHN1YmNsYXNzZXMgb2YgT2JqZWN0IHRv
IG1ha2Ugc3VyZQotICAgICMgdGhhdCB0aGUgV2ViQ29yZSB3cmFwcGVkIG9iamVjdCBpcyBhZGRl
ZCBvbmx5IG9uY2UgdG8gdGhlIERPTSBjYWNoZS4gVGhlIERPTSBnYXJiYWdlCi0gICAgIyBjb2xs
ZWN0b3Igd29ya3MgYmVjYXVzZSBOb2RlIGlzIGEgZGlyZWN0IHN1YmNsYXNzIG9mIE9iamVjdCBh
bmQgdGhlIHZlcnNpb24gb2YKLSAgICAjIERPTU9iamVjdENhY2hlOjpwdXQoKSB0aGF0IHJlY2Vp
dmVzIGEgTm9kZSAod2hpY2ggaXMgdGhlIG9uZSBzZXR0aW5nIHRoZSBmcmFtZSkgaXMKLSAgICAj
IGFsd2F5cyBjYWxsZWQgZm9yIERPTSBvYmplY3RzIGRlcml2ZWQgZnJvbSBOb2RlLgotICAgIGlm
ICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICAkaW1wbENvbnRl
bnQgPSA8PCAiRU9GIjsKLXN0YXRpYyBHT2JqZWN0KiAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1MoJHtsb3dlckNhc2VJZmFjZU5hbWV9X3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7Ci0kY29uZGl0aW9uR3VhcmRTdGFydAotICAgICR7Y2xhc3NOYW1lfVByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc31fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1l
fSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotJGNv
bmRpdGlvbkd1YXJkRW5kCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotRU9GCi0gICAgICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKLSAgICB9Ci0KLSAgICAkaW1wbENv
bnRlbnQgPSA8PCAiRU9GIjsKLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9jbGFz
c19pbml0KCR7Y2xhc3NOYW1lfUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci1FT0YKLSAgICBwdXNo
KEBjQm9keVByb3BlcnRpZXMsICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJHBhcmVudEltcGxD
bGFzc05hbWUgZXEgIk9iamVjdCIgfHwgJG51bVByb3BlcnRpZXMgPiAwKSB7Ci0gICAgICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7XG4iKTsKLQotICAgICAgICBpZiAoJHBhcmVudElt
cGxDbGFzc05hbWUgZXEgIk9iamVjdCIpIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJvcGVy
dGllcywgIiAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2Yo
JHtjbGFzc05hbWV9UHJpdmF0ZSkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICIgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9ICR7bG93ZXJDYXNlSWZhY2VO
YW1lfV9jb25zdHJ1Y3RvcjtcbiIpOwotICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVz
LCAiICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZmlu
YWxpemU7XG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkbnVtUHJvcGVydGllcyA+IDAp
IHsKLSAgICAgICAgICAgIGlmIChzY2FsYXIgQHdyaXRlYWJsZVByb3BlcnRpZXMgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gJHtsb3dlckNhc2VJZmFjZU5hbWV9X3NldF9wcm9wZXJ0eTtcbiIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gJHtsb3dlckNhc2VJZmFjZU5hbWV9X2dldF9wcm9w
ZXJ0eTtcbiIpOwotICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiXG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQHR4dEluc3RhbGxQcm9wcyk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3RDbGFzcyk7XG4iKTsKLSAgICB9Ci0gICAgJGltcGxDb250ZW50
ID0gPDwgIkVPRiI7Ci19Ci0KLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9pbml0
KCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkKLXsKLUVPRgotICAgIHB1c2goQGNCb2R5UHJvcGVydGll
cywgJGltcGxDb250ZW50KTsKLQotICAgIGlmICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2Jq
ZWN0IikgewotICAgICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKLSAgICAke2NsYXNzTmFt
ZX1Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV8ke2Nsc0NhcHN9X0dFVF9QUklWQVRFKHJlcXVl
c3QpOwotICAgIG5ldyAocHJpdikgJHtjbGFzc05hbWV9UHJpdmF0ZSgpOwotRU9GCi0gICAgICAg
IHB1c2goQGNCb2R5UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpO1xu
Iik7Ci0gICAgfQotICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwotfQotCi1FT0YKLSAgICBw
dXNoKEBjQm9keVByb3BlcnRpZXMsICRpbXBsQ29udGVudCk7Ci19Ci0KLXN1YiBHZW5lcmF0ZUNv
bnN0YW50cyB7Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRwcmVmaXgpID0gQF87Ci0KLSAgICBteSAk
aXNTdGFibGVDbGFzcyA9IHNjYWxhcihAc3RhYmxlU3ltYm9scyk7Ci0KLSAgICBpZiAoQHskaW50
ZXJmYWNlLT5jb25zdGFudHN9KSB7Ci0gICAgICAgIG15IEBjb25zdGFudHMgPSBAeyRpbnRlcmZh
Y2UtPmNvbnN0YW50c307Ci0gICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50IChAY29uc3RhbnRz
KSB7Ci0gICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+
R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkY29uc3RhbnQpOwotICAgICAgICAgICAgbXkgJGNv
bnN0YW50TmFtZSA9ICRwcmVmaXggLiAkY29uc3RhbnQtPm5hbWU7Ci0gICAgICAgICAgICBteSAk
Y29uc3RhbnRWYWx1ZSA9ICRjb25zdGFudC0+dmFsdWU7Ci0gICAgICAgICAgICBteSAkc3RhYmxl
U3ltYm9sID0gZ3JlcCB7JF8gPX4gL15cUSRjb25zdGFudE5hbWUvfSBAc3RhYmxlU3ltYm9sczsK
LSAgICAgICAgICAgIG15ICRzdGFibGVTeW1ib2xWZXJzaW9uOwotICAgICAgICAgICAgaWYgKCRz
dGFibGVTeW1ib2wpIHsKLSAgICAgICAgICAgICAgICAoJGR1bW15LCAkc3RhYmxlU3ltYm9sVmVy
c2lvbikgPSBzcGxpdCgnQCcsICRzdGFibGVTeW1ib2wsIDIpOwotICAgICAgICAgICAgICAgIHB1
c2goQHN5bWJvbHMsICIkY29uc3RhbnROYW1lXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbXkgQGNvbnN0YW50SGVhZGVyID0gKCk7Ci0gICAgICAgICAgICBwdXNoKEBjb25zdGFu
dEhlYWRlciwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfSIpIGlmICRjb25kaXRpb25hbFN0cmlu
ZzsKLSAgICAgICAgICAgIHB1c2goQGNvbnN0YW50SGVhZGVyLCAiLyoqIik7Ci0gICAgICAgICAg
ICBwdXNoKEBjb25zdGFudEhlYWRlciwgIiAqICR7Y29uc3RhbnROYW1lfToiKTsKLSAgICAgICAg
ICAgIGlmICgkc3RhYmxlU3ltYm9sVmVyc2lvbikgewotICAgICAgICAgICAgICAgIHB1c2goQGNv
bnN0YW50SGVhZGVyLCAiICogU2luY2U6ICR7c3RhYmxlU3ltYm9sVmVyc2lvbn0iKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHB1c2goQGNvbnN0YW50SGVhZGVyLCAiICovIik7Ci0gICAg
ICAgICAgICBwdXNoKEBjb25zdGFudEhlYWRlciwgIiNkZWZpbmUgJGNvbnN0YW50TmFtZSAkY29u
c3RhbnRWYWx1ZSIpOwotICAgICAgICAgICAgcHVzaChAY29uc3RhbnRIZWFkZXIsICIjZW5kaWYg
LyogJHtjb25kaXRpb25hbFN0cmluZ30gKi8iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAg
ICAgICAgICBwdXNoKEBjb25zdGFudEhlYWRlciwgIlxuIik7Ci0KLSAgICAgICAgICAgIGlmICgk
c3RhYmxlU3ltYm9sIG9yICEkaXNTdGFibGVDbGFzcykgewotICAgICAgICAgICAgICAgIHB1c2go
QGhCb2R5LCBqb2luKCJcbiIsIEBjb25zdGFudEhlYWRlcikpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBwdXNoKEBoQm9keVVuc3RhYmxlLCBqb2luKCJcbiIsIEBjb25z
dGFudEhlYWRlcikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdWIg
R2VuZXJhdGVIZWFkZXIgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJHBhcmVu
dENsYXNzTmFtZSwgJGludGVyZmFjZSkgPSBAXzsKLQotICAgIG15ICRpbXBsQ29udGVudCA9ICIi
OwotCi0gICAgIyBBZGQgdGhlIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCi0gICAgQGhQcmVmaXgg
PSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKLSAgICBwdXNoKEBoUHJlZml4LCAiXG4i
KTsKLQotICAgIG15ICRpc1N0YWJsZUNsYXNzID0gc2NhbGFyKEBzdGFibGVTeW1ib2xzKTsKLQot
ICAgIGlmICgkaXNTdGFibGVDbGFzcykgewotICAgICAgICAjIEZvcmNlIHNpbmdsZSBoZWFkZXIg
aW5jbHVkZS4KLSAgICAgICAgbXkgJGhlYWRlckNoZWNrID0gPDwgIkVPRiI7Ci0jaWYgIWRlZmlu
ZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQot
I2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCi0jZW5kaWYKLQotRU9GCi0gICAgICAgIHB1c2goQGhQcmVmaXgsICRoZWFkZXJDaGVj
ayk7Ci0gICAgfQotCi0gICAgIyBIZWFkZXIgZ3VhcmQKLSAgICBteSAkZ3VhcmQgPSAkY2xhc3NO
YW1lIC4gIl9oIjsKLQotICAgIEBoUHJlZml4R3VhcmQgPSA8PCAiRU9GIjsKLSNpZm5kZWYgJGd1
YXJkCi0jZGVmaW5lICRndWFyZAotCi1FT0YKLSAgICBpZiAoISRpc1N0YWJsZUNsYXNzKSB7Ci0g
ICAgICAgIHB1c2goQGhQcmVmaXhHdWFyZCwgIiNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUElcblxuIik7Ci0gICAgfQotCi0gICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1HX0JF
R0lOX0RFQ0xTCi0KLUVPRgotCi0gICAgcHVzaChAaEJvZHlQcmUsICRpbXBsQ29udGVudCk7Ci0K
LSAgICBteSAkZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpOwotICAgIG15
ICRjbHNDYXBzID0gdWMoJGRlY2FtZWxpemUpOwotICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUg
PSAid2Via2l0X2RvbV8kZGVjYW1lbGl6ZSI7Ci0KLSAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9G
IjsKLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFXyR7Y2xzQ2Fwc30gICAgICAgICAgICAoJHtsb3dl
ckNhc2VJZmFjZU5hbWV9X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fJHtjbHNDYXBz
fShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfJHtjbHNDYXBzfSwgJHtjbGFzc05hbWV9KSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV8ke2Nsc0NhcHN9X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1DbGFzcykKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9JU18ke2Nsc0NhcHN9KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9KSkKLSNkZWZp
bmUgV0VCS0lUX0RPTV9JU18ke2Nsc0NhcHN9X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9KSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV8ke2Nsc0NhcHN9X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1D
bGFzcykpCi0KLUVPRgotCi0gICAgcHVzaChAaEJvZHksICRpbXBsQ29udGVudCk7Ci0KLSAgICBp
ZiAoJGlzU3RhYmxlQ2xhc3MpIHsKLSAgICAgICAgcHVzaChAc3ltYm9scywgIkdUeXBlICR7bG93
ZXJDYXNlSWZhY2VOYW1lfV9nZXRfdHlwZSh2b2lkKVxuIik7Ci0gICAgfQotCi0gICAgR2VuZXJh
dGVDb25zdGFudHMoJGludGVyZmFjZSwgIldFQktJVF9ET01fJHtjbHNDYXBzfV8iKTsKLQotICAg
ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwotc3RydWN0IF8ke2NsYXNzTmFtZX0gewotICAgICR7
cGFyZW50Q2xhc3NOYW1lfSBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1zdHJ1Y3QgXyR7Y2xhc3NO
YW1lfUNsYXNzIHsKLSAgICAke3BhcmVudENsYXNzTmFtZX1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19
OwotCi1FT0YKLQotICAgIHB1c2goQGhCb2R5LCAkaW1wbENvbnRlbnQpOwotCi0gICAgcHVzaChA
aEJvZHksICJXRUJLSVRfQVBJIEdUeXBlXG4ke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZ2V0X3R5cGUo
dm9pZCk7XG4iKTsKLSAgICBwdXNoKEBoQm9keSwgIlxuIik7Ci19Ci0KLXN1YiBHZXRHUmV0dXJu
TWFjcm8gewotICAgIG15ICgkcGFyYW1OYW1lLCAkcGFyYW1JRExUeXBlLCAkcmV0dXJuVHlwZSwg
JGZ1bmN0aW9uTmFtZSkgPSBAXzsKLQotICAgIG15ICRjb25kaXRpb247Ci0gICAgaWYgKCRwYXJh
bUlETFR5cGUgZXEgIkdFcnJvciIpIHsKLSAgICAgICAgJGNvbmRpdGlvbiA9ICIhJHBhcmFtTmFt
ZSB8fCAhKiRwYXJhbU5hbWUiOwotICAgIH0gZWxzaWYgKElzR0RPTUNsYXNzVHlwZSgkcGFyYW1J
RExUeXBlKSkgewotICAgICAgICBteSAkcGFyYW1UeXBlQ2FwcyA9IHVjKGRlY2FtZWxpemUoJHBh
cmFtSURMVHlwZSkpOwotICAgICAgICAkY29uZGl0aW9uID0gIldFQktJVF9ET01fSVNfJHtwYXJh
bVR5cGVDYXBzfSgkcGFyYW1OYW1lKSI7Ci0gICAgICAgIGlmIChQYXJhbUNhbkJlTnVsbCgkZnVu
Y3Rpb25OYW1lLCAkcGFyYW1OYW1lKSkgewotICAgICAgICAgICAgJGNvbmRpdGlvbiA9ICIhJHBh
cmFtTmFtZSB8fCAkY29uZGl0aW9uIjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChQYXJhbUNhbkJlTnVsbCgkZnVuY3Rpb25OYW1lLCAkcGFyYW1OYW1lKSkgewotICAgICAg
ICAgICAgcmV0dXJuICIiOwotICAgICAgICB9Ci0gICAgICAgICRjb25kaXRpb24gPSAiJHBhcmFt
TmFtZSI7Ci0gICAgfQotCi0gICAgbXkgJG1hY3JvOwotICAgIGlmICgkcmV0dXJuVHlwZSBuZSAi
dm9pZCIpIHsKLSAgICAgICAgJGRlZmF1bHRSZXR1cm4gPSAkcmV0dXJuVHlwZSBlcSAiZ2Jvb2xl
YW4iID8gIkZBTFNFIiA6IDA7Ci0gICAgICAgICRtYWNybyA9ICIgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoJGNvbmRpdGlvbiwgJGRlZmF1bHRSZXR1cm4pO1xuIjsKLSAgICB9IGVsc2UgewotICAg
ICAgICAkbWFjcm8gPSAiICAgIGdfcmV0dXJuX2lmX2ZhaWwoJGNvbmRpdGlvbik7XG4iOwotICAg
IH0KLQotICAgIHJldHVybiAkbWFjcm87Ci19Ci0KLXN1YiBQYXJhbUNhbkJlTnVsbCB7Ci0gICAg
bXkoJGZ1bmN0aW9uTmFtZSwgJHBhcmFtTmFtZSkgPSBAXzsKLQotICAgIGlmIChkZWZpbmVkKCRm
dW5jdGlvbk5hbWUpKSB7Ci0gICAgICAgIHJldHVybiBzY2FsYXIoZ3JlcCB7JF8gZXEgJHBhcmFt
TmFtZX0gQHskY2FuQmVOdWxsUGFyYW1zLT57JGZ1bmN0aW9uTmFtZX19KTsKLSAgICB9Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLXN1YiBHZXRGdW5jdGlvblNpZ25hdHVyZU5hbWUgewotICAgIG15ICgk
aW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uKSA9IEBfOwotCi0gICAgbXkgJHNpZ25hdHVyZU5hbWUg
PSBkZWNhbWVsaXplKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLQotICAgIHJldHVybiAk
c2lnbmF0dXJlTmFtZSBpZiAkc2lnbmF0dXJlTmFtZSBuZSAidHlwZSI7Ci0KLSAgICAjIEZvciBI
VE1MIHR5cGUgYXR0cmlidXRlIHVzZSB0eXBlX2F0dHIuCi0gICAgIyBFeGFtcGxlOiB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90eXBlX2F0dHIoKQotICAgIG15ICRjb250ZW50QXR0
cmlidXRlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5Db250ZW50QXR0cmlidXRlTmFtZShcJWltcGxJ
bmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRmdW5jdGlvbik7Ci0gICAgaWYgKCRjb250ZW50QXR0
cmlidXRlTmFtZSkgewotICAgICAgICByZXR1cm4gInR5cGVfYXR0ciIgaWYgJGNvbnRlbnRBdHRy
aWJ1dGVOYW1lIGVxICJXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyIjsKLSAgICB9Ci0KLSAg
ICAjIEZvciBtZXRob2RzIHJldHVybmluZyBhIE1JTUUgdHlwZSB1c2UgY29udGVudF90eXBlLgot
ICAgICMgRXhhbXBsZXM6IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2NvbnRlbnRfdHlwZSgp
LCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2NvbnRlbnRfdHlwZSgpCi0gICAgaWYgKCRp
bnRlcmZhY2VOYW1lIGVxICJTdHlsZVNoZWV0IiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NTWlt
ZVR5cGUiKSB7Ci0gICAgICAgIHJldHVybiAiY29udGVudF90eXBlIjsKLSAgICB9Ci0KLSAgICAj
IEZvciBIVE1MRmllbGRTZXQgdXNlIGZpZWxkX3NldF90eXBlLgotICAgICMgRXhhbXBsZTogd2Vi
a2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9maWVsZF9zZXRfdHlwZSgpCi0gICAg
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJIVE1MRmllbGRTZXQiKSB7Ci0gICAgICAgIHJldHVybiAi
ZmllbGRfc2V0X3R5cGUiOwotICAgIH0KLQotICAgICMgRm9yIGFueSBvdGhlciBjYXNlcyB1c2Ug
dGhlIGxhc3Qgd29yZCBvZiB0aGUgaW50ZXJmYWNlIG5hbWUuCi0gICAgIyBFeGFtcGxlczogd2Vi
a2l0X2RvbV9ibG9iX2dldF9ibG9iX3R5cGUoKSwgd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRf
dHlwZSgpCi0gICAgbXkgQG5hbWVUb2tlbnMgPSBzcGxpdCgnXycsIGRlY2FtZWxpemUoJGludGVy
ZmFjZU5hbWUpKTsKLSAgICBteSAkbmFtZSA9ICRuYW1lVG9rZW5zWy0xXTsKLQotICAgICMgSWYg
dGhlIGxhc3Qgd29yZCBpcyBlbGVtZW50IGFuZCB0aGVyZSBhcmUgbW9yZSB3b3JkcywgdXNlIHRo
ZSBwcmV2aW91cyBvbmUuCi0gICAgIyBFeGFtcGxlOiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X2J1dHRvbl90eXBlKCkKLSAgICBpZiAoc2NhbGFyKEBuYW1lVG9rZW5zKSA+IDEg
JiYgJG5hbWUgZXEgImVsZW1lbnQiKSB7Ci0gICAgICAgICRuYW1lID0gJG5hbWVUb2tlbnNbLTJd
OwotICAgIH0KLQotICAgIHJldHVybiAiJHtuYW1lfV90eXBlIjsKLX0KLQotc3ViIEdldFRyYW5z
ZmVyVHlwZUZvclJldHVyblR5cGUgewotICAgIG15ICRyZXR1cm5UeXBlID0gc2hpZnQ7Ci0KLSAg
ICAjIE5vZGUgaXMgYWx3YXlzIHRyYW5zZmVyIG5vbmUuCi0gICAgcmV0dXJuICJub25lIiBpZiAk
cmV0dXJuVHlwZSBlcSAiTm9kZSI7Ci0KLSAgICAjIEFueSBiYXNlIGNsYXNzIGJ1dCBOb2RlIGlz
IHRyYW5zZmVyIGZ1bGwuCi0gICAgcmV0dXJuICJmdWxsIiBpZiBJc0Jhc2VUeXBlKCRyZXR1cm5U
eXBlKTsKLQotICAgICMgQW55IG90aGVyIGNsYXNzIG5vdCBkZXJpdmVkIGZyb20gTm9kZSBpcyB0
cmFuc2ZlciBmdWxsLgotICAgIHJldHVybiAiZnVsbCIgaWYgJHRyYW5zZmVyRnVsbFR5cGVIYXNo
eyRyZXR1cm5UeXBlfTsKLSAgICByZXR1cm4gIm5vbmUiOwotfQotCi1zdWIgR2V0RWZmZWN0aXZl
RnVuY3Rpb25OYW1lIHsKLSAgICBteSAkZnVuY3Rpb25OYW1lID0gc2hpZnQ7Ci0KLSAgICAjIFJl
bmFtZSB3ZWJraXRfZG9tX1tkb2N1bWVudHxlbGVtZW50XV9nZXRfZWxlbWVudHNfYnlfdGFnX25h
bWUqIGFuZCB3ZWJraXRfZG9tX1tkb2N1bWVudHxlbGVtZW50XV9nZXRfZWxlbWVudHNfYnlfY2xh
c3NfbmFtZQotICAgICMgZnVuY3Rpb25zIHNpbmNlIHRoZXkgd2VyZSBjaGFuZ2VkIHRvIHJldHVy
biBhIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uIGluc3RlYWQgb2YgYSBXZWJLaXRET01Ob2RlTGlz
dCBpbgotICAgICMgcjE4ODgwOSBhbmQgcjE4ODczNS4gVGhlIG9sZCBtZXRob2RzIGFyZSBub3cg
bWFudWFsbHkgYWRkZWQgYXMgZGVwcmVjYXRlZC4KLSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAi
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiCi0gICAgICAgIHx8
ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3Rh
Z19uYW1lX25zIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1l
IGVxICJ3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lIgotICAgICAg
ICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5
X3RhZ19uYW1lX25zIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUiKSB7Ci0gICAgICAgIHJldHVybiAkZnVu
Y3Rpb25OYW1lIC4gIl9hc19odG1sX2NvbGxlY3Rpb24iOwotICAgIH0KLQotICAgICMgUmVuYW1l
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlIGFzIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlX3R5cGUgc2luY2UKLSAgICAjIGl0IGNoYW5n
ZWQgdGhlIHJldHVybiB2YWx1ZSBpbiByMjA0MzEyLgotICAgIGlmICgkZnVuY3Rpb25OYW1lIGVx
ICJ3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVyZSIpIHsKLSAgICAgICAg
cmV0dXJuICRmdW5jdGlvbk5hbWUgLiAiX3R5cGUiOwotICAgIH0KLQotICAgIHJldHVybiAkZnVu
Y3Rpb25OYW1lOwotfQotCi1zdWIgRnVuY3Rpb25Vc2VkVG9SYWlzZUV4Y2VwdGlvbiB7Ci0gICAg
bXkgJGZ1bmN0aW9uTmFtZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuICRmdW5jdGlvbk5hbWUgZXEg
IndlYmtpdF9kb21fYXR0cl9zZXRfdmFsdWUiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEg
IndlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfYXBwZW5kX2RhdGEiCi0gICAgICAgIHx8ICRmdW5j
dGlvbk5hbWUgZXEgIndlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc2V0X2RhdGEiCi0gICAgICAg
IHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRl
cmF0b3IiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRf
Y3JlYXRlX3RyZWVfd2Fsa2VyIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRf
ZG9tX25vZGVfaXRlcmF0b3JfbmV4dF9ub2RlIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVx
ICJ3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfcHJldmlvdXNfbm9kZSIKLSAgICAgICAgfHwgJGZ1
bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9yYW5nZV9jbG9uZV9yYW5nZSIKLSAgICAgICAgfHwg
JGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9yYW5nZV9jb2xsYXBzZSIKLSAgICAgICAgfHwg
JGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9yYW5nZV9kZXRhY2giCi0gICAgICAgIHx8ICRm
dW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbW1vbl9hbmNlc3Rvcl9jb250
YWluZXIiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0
X2VuZF9jb250YWluZXIiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21f
cmFuZ2VfZ2V0X3N0YXJ0X2NvbnRhaW5lciIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFtZSBlcSAi
d2Via2l0X2RvbV9yYW5nZV9nZXRfY29sbGFwc2VkIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1l
IGVxICJ3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfb2Zmc2V0IgotICAgICAgICB8fCAkZnVuY3Rp
b25OYW1lIGVxICJ3ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9vZmZzZXQiCi0gICAgICAgIHx8
ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfdG9fc3RyaW5nIgotICAgICAgICB8
fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3NldF9jdXJyZW50X25v
ZGUiOwotfQotCi1zdWIgRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbiB7Ci0gICAgbXkg
JGZ1bmN0aW9uTmFtZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuICRmdW5jdGlvbk5hbWUgZXEgIndl
YmtpdF9kb21fbm9kZV9jbG9uZV9ub2RlIjsKLX0KLQotc3ViIEdlbmVyYXRlRnVuY3Rpb24gewot
ICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAkcHJlZml4LCAkcGFy
ZW50Tm9kZSkgPSBAXzsKLQotICAgIG15ICRkZWNhbWVsaXplID0gZGVjYW1lbGl6ZSgkaW50ZXJm
YWNlTmFtZSk7Ci0KLSAgICBpZiAoU2tpcEZ1bmN0aW9uKCRvYmplY3QsICRmdW5jdGlvbiwgJHBh
cmVudE5vZGUsICRkZWNhbWVsaXplLCAkcHJlZml4KSkgewotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbXkgJGZ1bmN0aW9uU2lnVHlwZSA9ICRwcmVmaXggZXEgInNldF8iID8gInZvaWQi
IDogJGZ1bmN0aW9uLT5zaWduYXR1cmUtPnR5cGU7Ci0gICAgbXkgJGZ1bmN0aW9uU2lnTmFtZSA9
IEdldEZ1bmN0aW9uU2lnbmF0dXJlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uKTsKLSAg
ICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1lKCJ3ZWJraXRfZG9t
XyIgLiAkZGVjYW1lbGl6ZSAuICJfIiAuICRwcmVmaXggLiAkZnVuY3Rpb25TaWdOYW1lKTsKLSAg
ICBteSAkcmV0dXJuVHlwZSA9IEdldEdsaWJUeXBlTmFtZSgkZnVuY3Rpb25TaWdUeXBlKTsKLSAg
ICBteSAkcmV0dXJuVmFsdWVJc0dET01UeXBlID0gSXNHRE9NQ2xhc3NUeXBlKCRmdW5jdGlvblNp
Z1R5cGUpOwotICAgIG15ICRyYWlzZXNFeGNlcHRpb24gPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJhaXNlc0V4Y2VwdGlvbiJ9OwotCi0gICAgIyBJZiBhIG1l
dGhvZCB1c2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiwgYnV0IHdhcyBjaGFuZ2VkIHRvIG5vdCBy
YWlzZSBpdCBhbnltb3JlLCB0aGUKLSAgICAjIEFQSSBjaGFuZ2VzIGJlY2F1c2Ugd2UgdXNlIGEg
ZXhwbGljaXQgR0Vycm9yIHBhcmFtZXRlciB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbnMuCi0gICAg
IyBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGtlZXAgdGhlIEdFcnJvciBwYXJhbWV0ZXIg
ZXZlbiBpZiBpdCdzIHVudXNlZCB0byBrZWVwCi0gICAgIyB0aGUgQVBJIGNvbXBhdGliaWxpdHku
Ci0gICAgbXkgJHVzZWRUb1JhaXNlRXhjZXB0aW9uID0gRnVuY3Rpb25Vc2VkVG9SYWlzZUV4Y2Vw
dGlvbigkZnVuY3Rpb25OYW1lKTsKLQotICAgICMgSWYgYSBtZXRob2QgZGlkbid0IHJhaXNlIGFu
IGV4Y2VwdGlvbiBidXQgd2FzIGNoYW5nZWQgdG8gcmFpc2UgZXhjZXB0aW9ucywgdGhlIEFQSQot
ICAgICMgY2hhbmdlcyBiZWNhdXNlIHdlIHVzZSBhIGV4cGxpY2l0IEdFcnJvciBwYXJhbWV0ZXIg
dG8gaGFuZGxlIHRoZSBleGNlcHRpb25zLgotICAgICMgSW4gdGhpcyBjYXNlLCB3ZSBhZGQgX3dp
dGhfZXJyb3Igc3VmZml4IGFuZCB0aGUgcHJldmlvdXMgdmVyc2lvbiBzaW1wbHkgaWdub3JlcyB0
aGUgZXJyb3IuCi0gICAgaWYgKEZ1bmN0aW9uVXNlZFRvTm90UmFpc2VFeGNlcHRpb24oJGZ1bmN0
aW9uTmFtZSkpIHsKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbk5hbWUgLiAiX3dp
dGhfZXJyb3IiOwotICAgIH0KLQotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsK
LSAgICBteSAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZygkcGFyZW50Tm9kZSk7Ci0gICAgbXkgQGNvbmRpdGlvbmFsV2Fy
biA9IEdlbmVyYXRlQ29uZGl0aW9uYWxXYXJuaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsKLSAg
ICBteSBAcGFyZW50Q29uZGl0aW9uYWxXYXJuID0gR2VuZXJhdGVDb25kaXRpb25hbFdhcm5pbmco
JHBhcmVudE5vZGUpOwotCi0gICAgbXkgJGZ1bmN0aW9uU2lnID0gIiR7Y2xhc3NOYW1lfSogc2Vs
ZiI7Ci0gICAgbXkgJHN5bWJvbFNpZyA9ICIke2NsYXNzTmFtZX0qIjsKLQotICAgIG15ICRoYXNW
YXJpYWRpYyA9IDA7Ci0gICAgbXkgQGNhbGxJbXBsUGFyYW1zOwotICAgIGZvcmVhY2ggbXkgJHBh
cmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKLSAgICAgICAgbXkgJHBhcmFtSURMVHlw
ZSA9ICRwYXJhbS0+dHlwZTsKLSAgICAgICAgbXkgJHNlcXVlbmNlVHlwZSA9ICRjb2RlR2VuZXJh
dG9yLT5HZXRTZXF1ZW5jZUlubmVyVHlwZSgkcGFyYW1JRExUeXBlKTsKLSAgICAgICAgJHBhcmFt
SURMVHlwZSA9ICRzZXF1ZW5jZVR5cGUgaWYgJHNlcXVlbmNlVHlwZSBuZSAiIjsKLSAgICAgICAg
bXkgJHBhcmFtVHlwZSA9IEdldEdsaWJUeXBlTmFtZSgkcGFyYW1JRExUeXBlKTsKLSAgICAgICAg
bXkgJGNvbnN0ID0gJHBhcmFtVHlwZSBlcSAiZ2NoYXIqIiA/ICJjb25zdCAiIDogIiI7Ci0gICAg
ICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0KLSAgICAgICAgaWYgKCRwYXJhbS0+
aXNWYXJpYWRpYykgewotICAgICAgICAgICAgJGhhc1ZhcmlhZGljID0gMTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICRmdW5jdGlvblNpZyAuPSAiLCAke2NvbnN0fSRwYXJhbVR5cGUg
JHBhcmFtTmFtZSI7Ci0gICAgICAgICAgICAkc3ltYm9sU2lnIC49ICIsICR7Y29uc3R9JHBhcmFt
VHlwZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBteSAkcGFyYW1Jc0dET01UeXBlID0gSXNHRE9N
Q2xhc3NUeXBlKCRwYXJhbUlETFR5cGUpOwotICAgICAgICBpZiAoJHBhcmFtSXNHRE9NVHlwZSkg
ewotICAgICAgICAgICAgaWYgKCRwYXJhbUlETFR5cGUgbmUgImFueSIpIHsKLSAgICAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET00ke3BhcmFtSURMVHlwZX1Qcml2YXRlLmgifSA9
IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCRwYXJhbUlzR0RPTVR5
cGUgfHwgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkcGFyYW1JRExUeXBlKSB8fCAkcGFy
YW0tPmlzVmFyaWFkaWMpIHsKLSAgICAgICAgICAgICRwYXJhbU5hbWUgPSAiY29udmVydGVkIiAu
ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRwYXJhbU5hbWUpOwotICAgICAgICAgICAgJHBh
cmFtTmFtZSA9ICIqJHBhcmFtTmFtZSIgaWYgJGNvZGVHZW5lcmF0b3ItPlNob3VsZFBhc3NXcmFw
cGVyQnlSZWZlcmVuY2UoJHBhcmFtLCAkcGFyZW50Tm9kZSk7Ci0gICAgICAgICAgICAkcGFyYW1O
YW1lID0gIldURk1vdmUoJHBhcmFtTmFtZSkiIGlmICRwYXJhbS0+aXNWYXJpYWRpYzsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoJHBhcmFtSURMVHlwZSBlcSAiTm9kZUZpbHRlciIgfHwgJHBhcmFt
SURMVHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIikgewotICAgICAgICAgICAgJHBhcmFtTmFtZSA9
ICJXVEY6OmdldFB0cigiIC4gJHBhcmFtTmFtZSAuICIpIjsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoJHBhcmFtSURMVHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewotICAgICAgICAg
ICAgJGltcGxJbmNsdWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7Ci0gICAgICAg
ICAgICAkcGFyYW1OYW1lID0gIldlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KFdURjo6U3RyaW5nOjpmcm9tVVRGOCgiIC4gJHBhcmFtTmFtZSAuICIpKSI7Ci0gICAgICAgIH0K
LSAgICAgICAgcHVzaChAY2FsbEltcGxQYXJhbXMsICRwYXJhbU5hbWUpOwotICAgIH0KLQotICAg
IGlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIgJiYgJHJldHVyblZhbHVlSXNHRE9NVHlwZSAmJiAk
ZnVuY3Rpb25TaWdUeXBlIG5lICJhbnkiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IldlYktp
dERPTSR7ZnVuY3Rpb25TaWdUeXBlfVByaXZhdGUuaCJ9ID0gMTsKLSAgICB9Ci0KLSAgICAkZnVu
Y3Rpb25TaWcgLj0gIiwgR0Vycm9yKiogZXJyb3IiIGlmICRyYWlzZXNFeGNlcHRpb24gfHwgJHVz
ZWRUb1JhaXNlRXhjZXB0aW9uOwotICAgICRzeW1ib2xTaWcgLj0gIiwgR0Vycm9yKioiIGlmICRy
YWlzZXNFeGNlcHRpb24gfHwgJHVzZWRUb1JhaXNlRXhjZXB0aW9uOwotCi0gICAgaWYgKCRoYXNW
YXJpYWRpYykgewotICAgICAgICBteSAkcGFyYW0gPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc31b
LTFdOwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHBhcmFt
LT50eXBlKSkgewotICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFtZTsKLSAg
ICAgICAgICAgICRmdW5jdGlvblNpZyAuPSAiLCBndWludCBuXyRwYXJhbU5hbWUiOwotICAgICAg
ICAgICAgJHN5bWJvbFNpZyAuPSAiLCBndWludCI7Ci0gICAgICAgIH0KLSAgICAgICAgJGZ1bmN0
aW9uU2lnIC49ICIsIC4uLiI7Ci0gICAgICAgICRzeW1ib2xTaWcgLj0gIiwgLi4uIjsKLSAgICB9
Ci0KLSAgICBteSAkc3ltYm9sID0gIiRyZXR1cm5UeXBlICRmdW5jdGlvbk5hbWUoJHN5bWJvbFNp
ZykiOwotICAgIG15ICRpc1N0YWJsZUNsYXNzID0gc2NhbGFyKEBzdGFibGVTeW1ib2xzKTsKLSAg
ICBteSAoJHN0YWJsZVN5bWJvbCkgPSBncmVwIHskXyA9fiAvXlxRJHN5bWJvbC99IEBzdGFibGVT
eW1ib2xzOwotICAgIG15ICRzdGFibGVTeW1ib2xWZXJzaW9uOwotICAgIGlmICgkc3RhYmxlU3lt
Ym9sIGFuZCAkaXNTdGFibGVDbGFzcykgewotICAgICAgICAoJGR1bW15LCAkc3RhYmxlU3ltYm9s
VmVyc2lvbikgPSBzcGxpdCgnQCcsICRzdGFibGVTeW1ib2wsIDIpOwotICAgICAgICBwdXNoKEBz
eW1ib2xzLCAiJHN5bWJvbFxuIik7Ci0gICAgfQotCi0gICAgbXkgQGZ1bmN0aW9uSGVhZGVyID0g
KCk7Ci0gICAgIyBJbnNlcnQgaW50cm9zcGVjdGlvbiBhbm5vdGF0aW9ucwotICAgIHB1c2goQGZ1
bmN0aW9uSGVhZGVyLCAiLyoqIik7Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiAke2Z1
bmN0aW9uTmFtZX06Iik7Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiBcQHNlbGY6IEEg
IyR7Y2xhc3NOYW1lfSIpOwotCi0gICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfSkgewotICAgICAgICBpZiAoJHBhcmFtLT5pc1ZhcmlhZGljKSB7Ci0gICAgICAg
ICAgICBsYXN0OwotICAgICAgICB9Ci0gICAgICAgIG15ICRwYXJhbUlETFR5cGUgPSAkcGFyYW0t
PnR5cGU7Ci0gICAgICAgIG15ICRzZXF1ZW5jZVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U2Vx
dWVuY2VJbm5lclR5cGUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgICRwYXJhbUlETFR5cGUgPSAk
c2VxdWVuY2VUeXBlIGlmICRzZXF1ZW5jZVR5cGUgbmUgIiI7Ci0gICAgICAgIG15ICRwYXJhbVR5
cGUgPSBHZXRHbGliVHlwZU5hbWUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgICMgJHBhcmFtVHlw
ZSBjYW4gaGF2ZSBhIHRyYWlsaW5nICogaW4gc29tZSBjYXNlcwotICAgICAgICAkcGFyYW1UeXBl
ID1+IHMvXCokLy87Ci0gICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAg
ICAgIG15ICRwYXJhbUFubm90YXRpb25zID0gIiI7Ci0gICAgICAgIGlmIChQYXJhbUNhbkJlTnVs
bCgkZnVuY3Rpb25OYW1lLCAkcGFyYW1OYW1lKSkgewotICAgICAgICAgICAgJHBhcmFtQW5ub3Rh
dGlvbnMgPSAiIChhbGxvdy1ub25lKToiOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGZ1bmN0
aW9uSGVhZGVyLCAiICogXEAke3BhcmFtTmFtZX06JHtwYXJhbUFubm90YXRpb25zfSBBICMke3Bh
cmFtVHlwZX0iKTsKLSAgICB9Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiBcQGVycm9y
OiAjR0Vycm9yIikgaWYgJHJhaXNlc0V4Y2VwdGlvbiB8fCAkdXNlZFRvUmFpc2VFeGNlcHRpb247
Ci0gICAgaWYgKCRoYXNWYXJpYWRpYykgewotICAgICAgICBteSAkcGFyYW0gPSBAeyRmdW5jdGlv
bi0+cGFyYW1ldGVyc31bLTFdOwotICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1l
OwotICAgICAgICBteSAkcGFyYW1UeXBlID0gR2V0R2xpYlR5cGVOYW1lKCRwYXJhbS0+dHlwZSk7
Ci0gICAgICAgICRwYXJhbVR5cGUgPX4gcy9cKiQvLzsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc05vblBvaW50ZXJUeXBlKCRwYXJhbS0+dHlwZSkpIHsKLSAgICAgICAgICAgIHB1c2go
QGZ1bmN0aW9uSGVhZGVyLCAiICogXEBuXyR7cGFyYW1OYW1lfTogbnVtYmVyIG9mICR7cGFyYW1O
YW1lfSB0aGF0IHdpbGwgYmUgcGFzc2VkIik7Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkhl
YWRlciwgIiAqIFxALi4uOiBsaXN0IG9mICMke3BhcmFtVHlwZX0iKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiICogXEAuLi46IGxpc3Qgb2Yg
IyR7cGFyYW1UeXBlfSBlbmRlZCBieSAlTlVMTC4iKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBw
dXNoKEBmdW5jdGlvbkhlYWRlciwgIiAqIik7Ci0gICAgbXkgJHJldHVyblR5cGVOYW1lID0gJHJl
dHVyblR5cGU7Ci0gICAgbXkgJGhhc1JldHVyblRhZyA9IDA7Ci0gICAgJHJldHVyblR5cGVOYW1l
ID1+IHMvXCokLy87Ci0gICAgaWYgKCRyZXR1cm5WYWx1ZUlzR0RPTVR5cGUpIHsKLSAgICAgICAg
bXkgJHRyYW5zZmVyVHlwZSA9IEdldFRyYW5zZmVyVHlwZUZvclJldHVyblR5cGUoJGZ1bmN0aW9u
U2lnVHlwZSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiICogUmV0dXJuczogKHRy
YW5zZmVyICR0cmFuc2ZlclR5cGUpOiBBICMke3JldHVyblR5cGVOYW1lfSIpOwotICAgICAgICAk
aGFzUmV0dXJuVGFnID0gMTsKLSAgICB9IGVsc2lmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsK
LSAgICAgICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiBSZXR1cm5zOiBBICMke3JldHVyblR5
cGVOYW1lfSIpOwotICAgICAgICAkaGFzUmV0dXJuVGFnID0gMTsKLSAgICB9Ci0gICAgaWYgKCEk
c3RhYmxlU3ltYm9sKSB7Ci0gICAgICAgIGlmICgkaGFzUmV0dXJuVGFnKSB7Ci0gICAgICAgICAg
ICBwdXNoKEBmdW5jdGlvbkhlYWRlciwgIiAqIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChA
ZnVuY3Rpb25IZWFkZXIsICIgKiBTdGFiaWxpdHk6IFVuc3RhYmxlIik7Ci0gICAgfSBlbHNpZiAo
JHN0YWJsZVN5bWJvbFZlcnNpb24pIHsKLSAgICAgICAgaWYgKCRoYXNSZXR1cm5UYWcpIHsKLSAg
ICAgICAgICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiICoiKTsKLSAgICAgICAgfQotICAgICAg
ICBwdXNoKEBmdW5jdGlvbkhlYWRlciwgIiAqIFNpbmNlOiAke3N0YWJsZVN5bWJvbFZlcnNpb259
Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiKiovIik7Ci0KLSAgICBwdXNo
KEBmdW5jdGlvbkhlYWRlciwgIldFQktJVF9BUEkgJHJldHVyblR5cGVcbiRmdW5jdGlvbk5hbWUo
JGZ1bmN0aW9uU2lnKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbkhlYWRlciwgIlxuIik7Ci0gICAg
aWYgKCRzdGFibGVTeW1ib2wgb3IgISRpc1N0YWJsZUNsYXNzKSB7Ci0gICAgICAgIHB1c2goQGhC
b2R5LCBqb2luKCJcbiIsIEBmdW5jdGlvbkhlYWRlcikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHB1c2goQGhCb2R5VW5zdGFibGUsIGpvaW4oIlxuIiwgQGZ1bmN0aW9uSGVhZGVyKSk7Ci0gICAg
fQotCi0gICAgcHVzaChAY0JvZHksICIkcmV0dXJuVHlwZSAkZnVuY3Rpb25OYW1lKCRmdW5jdGlv
blNpZylcbntcbiIpOwotICAgIHB1c2goQGNCb2R5LCAiI2lmICR7cGFyZW50Q29uZGl0aW9uYWxT
dHJpbmd9XG4iKSBpZiAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChAY0JvZHks
ICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLQot
ICAgIHB1c2goQGNCb2R5LCAiICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTtcbiIpOwotCi0gICAgIyBnX3JldHVybiBtYWNyb3MgdG8gY2hlY2sgcGFyYW1ldGVycyBvZiBw
dWJsaWMgbWV0aG9kcy4KLSAgICAkZ1JldHVybk1hY3JvID0gR2V0R1JldHVybk1hY3JvKCJzZWxm
IiwgJGludGVyZmFjZU5hbWUsICRyZXR1cm5UeXBlKTsKLSAgICBwdXNoKEBjQm9keSwgJGdSZXR1
cm5NYWNybyk7Ci0KLSAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9KSB7Ci0gICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgIG15
ICRwYXJhbUlETFR5cGUgPSAkcGFyYW0tPnR5cGU7Ci0gICAgICAgIG15ICRwYXJhbVR5cGVJc1Bv
aW50ZXIgPSAhJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHBhcmFtSURMVHlwZSk7
Ci0gICAgICAgIGlmICgkcGFyYW1UeXBlSXNQb2ludGVyICYmICEkcGFyYW0tPmlzVmFyaWFkaWMp
IHsKLSAgICAgICAgICAgICRnUmV0dXJuTWFjcm8gPSBHZXRHUmV0dXJuTWFjcm8oJHBhcmFtTmFt
ZSwgJHBhcmFtSURMVHlwZSwgJHJldHVyblR5cGUsICRmdW5jdGlvbk5hbWUpOwotICAgICAgICAg
ICAgcHVzaChAY0JvZHksICRnUmV0dXJuTWFjcm8pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCRyYWlzZXNFeGNlcHRpb24pIHsKLSAgICAgICAgJGdSZXR1cm5NYWNybyA9IEdldEdSZXR1
cm5NYWNybygiZXJyb3IiLCAiR0Vycm9yIiwgJHJldHVyblR5cGUpOwotICAgICAgICBwdXNoKEBj
Qm9keSwgJGdSZXR1cm5NYWNybyk7Ci0gICAgfSBlbHNpZiAoJHVzZWRUb1JhaXNlRXhjZXB0aW9u
KSB7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIFVOVVNFRF9QQVJBTShlcnJvcik7XG4iKTsK
LSAgICB9Ci0KLSAgICAjIFRoZSBXZWJLaXQ6OmNvcmUgaW1wbGVtZW50YXRpb25zIGNoZWNrIGZv
ciBudWxsIGFscmVhZHk7IG5vIG5lZWQgdG8gZHVwbGljYXRlIGVmZm9ydC4KLSAgICBwdXNoKEBj
Qm9keSwgIiAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpO1xuIik7Ci0KLSAgICAkcmV0dXJuUGFyYW1OYW1lID0gIiI7Ci0gICAgbXkgJGN1cnJl
bnRQYXJhbWV0ZXJJbmRleCA9IDA7Ci0gICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSkgewotICAgICAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBl
OwotICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwotICAgICAgICBteSAkcGFy
YW1UeXBlID0gR2V0R2xpYlR5cGVOYW1lKCRwYXJhbUlETFR5cGUpOwotICAgICAgICBteSAkcGFy
YW1Jc0dET01UeXBlID0gSXNHRE9NQ2xhc3NUeXBlKCRwYXJhbUlETFR5cGUpOwotICAgICAgICBt
eSAkcGFyYW1UeXBlSXNQb2ludGVyID0gISRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBl
KCRwYXJhbUlETFR5cGUpOwotICAgICAgICBteSAkY29udmVydGVkUGFyYW1OYW1lID0gImNvbnZl
cnRlZCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkcGFyYW1OYW1lKTsKLQotICAgICAg
ICBteSAkcGFyYW1Db3JlVHlwZSA9ICRwYXJhbVR5cGU7Ci0gICAgICAgIG15ICRwYXJhbUNvbnZl
cnNpb25GdW5jdGlvbiA9ICIiOwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5n
VHlwZSgkcGFyYW1JRExUeXBlKSkgewotICAgICAgICAgICAgJHBhcmFtQ29yZVR5cGUgPSAiV1RG
OjpTdHJpbmciOwotICAgICAgICAgICAgJHBhcmFtQ29udmVyc2lvbkZ1bmN0aW9uID0gIldURjo6
U3RyaW5nOjpmcm9tVVRGOCI7Ci0gICAgICAgIH0gZWxzaWYgKCRwYXJhbUlETFR5cGUgZXEgIk5v
ZGVGaWx0ZXIiIHx8ICRwYXJhbUlETFR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKLSAgICAg
ICAgICAgICRwYXJhbUNvcmVUeXBlID0gIlJlZlB0cjxXZWJDb3JlOjokcGFyYW1JRExUeXBlPiI7
Ci0gICAgICAgICAgICAkcGFyYW1Db252ZXJzaW9uRnVuY3Rpb24gPSAiV2ViS2l0Ojpjb3JlIgot
ICAgICAgICB9IGVsc2lmICgkcGFyYW1Jc0dET01UeXBlKSB7Ci0gICAgICAgICAgICAkcGFyYW1D
b3JlVHlwZSA9ICJXZWJDb3JlOjoke3BhcmFtSURMVHlwZX0qIjsKLSAgICAgICAgICAgICRwYXJh
bUNvbnZlcnNpb25GdW5jdGlvbiA9ICJXZWJLaXQ6OmNvcmUiCi0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoJHBhcmFtLT5pc1ZhcmlhZGljKSB7Ci0gICAgICAgICAgICBteSAkcHJldmlvdXNQYXJh
bU5hbWU7Ci0gICAgICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICAgICAg
ICAgICRwcmV2aW91c1BhcmFtTmFtZSA9ICJlcnJvciI7Ci0gICAgICAgICAgICB9IGVsc2lmICgk
Y3VycmVudFBhcmFtZXRlckluZGV4ID09IDApIHsKLSAgICAgICAgICAgICAgICAkcHJldmlvdXNQ
YXJhbU5hbWUgPSAic2VsZiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICRwcmV2aW91c1BhcmFtTmFtZSA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfVskY3VycmVudFBh
cmFtZXRlckluZGV4IC0gMV0tPm5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNo
KEBjQm9keSwgIiAgICB2YV9saXN0IHZhcmlhZGljUGFyYW1ldGVyTGlzdDtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAY0JvZHksICIgICAgVmVjdG9yPCRwYXJhbUNvcmVUeXBlPiAkY29udmVydGVk
UGFyYW1OYW1lO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICB2YV9zdGFydCh2
YXJpYWRpY1BhcmFtZXRlckxpc3QsICRwcmV2aW91c1BhcmFtTmFtZSk7XG4iKTsKLSAgICAgICAg
ICAgIGlmICgkcGFyYW1UeXBlSXNQb2ludGVyKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0Jv
ZHksICIgICAgd2hpbGUgKCRwYXJhbVR5cGUgdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9hcmcodmFy
aWFkaWNQYXJhbWV0ZXJMaXN0LCAkcGFyYW1UeXBlKSlcbiIpOwotICAgICAgICAgICAgICAgIHB1
c2goQGNCb2R5LCAiICAgICAgICAke2NvbnZlcnRlZFBhcmFtTmFtZX0uYXBwZW5kKCR7cGFyYW1D
b252ZXJzaW9uRnVuY3Rpb259KHZhcmlhZGljUGFyYW1ldGVyKSk7XG4iKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgJHtjb252ZXJ0ZWRQ
YXJhbU5hbWV9LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobl8kcGFyYW1OYW1lKTtcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
XyRwYXJhbU5hbWU7ICsraSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIg
ICAgICAgICR7Y29udmVydGVkUGFyYW1OYW1lfS51bmNoZWNrZWRBcHBlbmQodmFfYXJnKHZhcmlh
ZGljUGFyYW1ldGVyTGlzdCwgJHBhcmFtVHlwZSkpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwdXNoKEBjQm9keSwgIiAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTtc
biIpOwotICAgICAgICB9IGVsc2lmICgkcGFyYW1Db3JlVHlwZSBuZSAkcGFyYW1UeXBlKSB7Ci0g
ICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICAkcGFyYW1Db3JlVHlwZSAkY29udmVydGVkUGFy
YW1OYW1lID0gJHtwYXJhbUNvbnZlcnNpb25GdW5jdGlvbn0oJHBhcmFtTmFtZSk7XG4iKTsKLSAg
ICAgICAgfQotICAgICAgICAkcmV0dXJuUGFyYW1OYW1lID0gJGNvbnZlcnRlZFBhcmFtTmFtZSBp
ZiAkcGFyYW0tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21SZXR1cm4ifTsKLSAgICAgICAg
JGN1cnJlbnRQYXJhbWV0ZXJJbmRleCsrOwotICAgIH0KLQotICAgIG15ICRhc3NpZ24gPSAiIjsK
LSAgICBteSAkYXNzaWduUHJlID0gIiI7Ci0gICAgbXkgJGFzc2lnblBvc3QgPSAiIjsKLQotICAg
ICMgV2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhlc2UgTm9kZSBtZXRob2RzIGJlY2F1c2UgdGhl
aXIgQysrCi0gICAgIyBzaWduYXR1cmUgaXMgZGlmZmVyZW50IGZyb20gd2hhdCB3ZSdkIGV4cGVj
dCBnaXZlbiB0aGVpciBJREwKLSAgICAjIGRlc2NyaXB0aW9uOyBzZWUgTm9kZS5oLgotICAgIG15
ICRmdW5jdGlvbkhhc0N1c3RvbVJldHVybiA9ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21f
bm9kZV9hcHBlbmRfY2hpbGQiIHx8Ci0gICAgICAgICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9k
b21fbm9kZV9pbnNlcnRfYmVmb3JlIiB8fAotICAgICAgICAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJr
aXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgfHwKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSBlcSAi
d2Via2l0X2RvbV9ub2RlX3JlbW92ZV9jaGlsZCI7Ci0gICAgICAgICAKLSAgICBpZiAoJHJldHVy
blR5cGUgbmUgInZvaWQiICYmICEkZnVuY3Rpb25IYXNDdXN0b21SZXR1cm4pIHsKLSAgICAgICAg
aWYgKCRyZXR1cm5WYWx1ZUlzR0RPTVR5cGUpIHsKLSAgICAgICAgICAgICRhc3NpZ24gPSAiUmVm
UHRyPFdlYkNvcmU6OiR7ZnVuY3Rpb25TaWdUeXBlfT4gZ29iamVjdFJlc3VsdCA9ICI7Ci0gICAg
ICAgICAgICAkYXNzaWduUHJlID0gIldURjo6Z2V0UHRyKCI7Ci0gICAgICAgICAgICAkYXNzaWdu
UG9zdCA9ICIpIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRhc3NpZ24gPSAiJHty
ZXR1cm5UeXBlfSByZXN1bHQgPSAiOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5pc051bGxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogUmV0dXJuaW5nIDAg
aXMgcHJvYmFibHkgbm90IHJpZ2h0IGZvciBhbGwgbnVsbGFibGUgYXR0cmlidXRlIHZhbHVlcy4K
LSAgICAgICAgICAgICAgICAjIFdlIG1heSB3YW50IHRvIGhhbmRsZSB0aGlzIHRoZSB3YXkgd2Ug
ZG8gaW4gdGhlIE9iamVjdGl2ZS1DIGJpbmRpbmdzOiBub3QKLSAgICAgICAgICAgICAgICAjIGhh
bmRsZSBpdCBhdCBhbGwsIGFuZCBub3QgZXhwb3NlIGFueSBudWxsYWJsZXMuCi0gICAgICAgICAg
ICAgICAgJGFzc2lnblBvc3QgPSAiLnZhbHVlT3IoMCkiOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCRmdW5jdGlvblNpZ1R5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSIpIHsKLSAgICAgICAgICAgICRhc3NpZ25QcmUgPSAiY29udmVydFRvVVRGOFN0cmluZygi
OwotICAgICAgICAgICAgJGFzc2lnblBvc3QgPSAiLT50b1N0cmluZygpKSI7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICBwdXNoKEBjQm9k
eSwgIiAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOwotICAgICAgICBwdXNo
KEBjYWxsSW1wbFBhcmFtcywgImVjIik7Ci0gICAgfQotCi0gICAgbXkgJGZ1bmN0aW9uSW1wbGVt
ZW50YXRpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJJbXBsZW1lbnRlZEFzIn0gfHwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0KLSAgICBp
ZiAoJGZ1bmN0aW9uSGFzQ3VzdG9tUmV0dXJuKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAiICAg
IGJvb2wgb2sgPSBpdGVtLT4ke2Z1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigi
LCAiLCBAY2FsbEltcGxQYXJhbXMpIC4gIik7XG4iKTsKLSAgICAgICAgbXkgJGN1c3RvbU5vZGVB
cHBlbmRDaGlsZCA9IDw8ICJFT0YiOwotICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIFdlYktp
dDo6a2l0KCRyZXR1cm5QYXJhbU5hbWUpOwotRU9GCi0gICAgICAgIHB1c2goQGNCb2R5LCAkY3Vz
dG9tTm9kZUFwcGVuZENoaWxkKTsKLSAgICAKLSAgICAgICAgaWYoJHJhaXNlc0V4Y2VwdGlvbikg
ewotICAgICAgICAgICAgbXkgJGV4Y2VwdGlvbkhhbmRsaW5nID0gPDwgIkVPRiI7Ci0KLSAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci1FT0YKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAk
ZXhjZXB0aW9uSGFuZGxpbmcpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5LCAiICAg
IHJldHVybiAwO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAifVxuXG4iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGZ1bmN0
aW9uU2lnVHlwZSkpIHsKLSAgICAgICAgbXkgJGdldHRlckNvbnRlbnRIZWFkOwotICAgICAgICBp
ZiAoJHByZWZpeCkgewotICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVudHMp
ID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRpbnRl
cmZhY2VOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCBAY2Fs
bEltcGxQYXJhbXMpOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0gICAgICAgICAgICAgICAgbXkg
JGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkltcGxlbWVudGVkQnkifTsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2lt
cGxlbWVudGVkQnl9LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRz
LCAiaXRlbSIpOwotICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiV2ViQ29yZTo6JHtp
bXBsZW1lbnRlZEJ5fTo6JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJpdGVtLT4ke2Z1bmN0aW9uTmFtZX0iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIiR7YXNzaWdu
fWNvbnZlcnRUb1VURjhTdHJpbmcoJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1
bWVudHMpIC4gIikpO1xuIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG15IEBhcmd1
bWVudHMgPSBAY2FsbEltcGxQYXJhbXM7Ci0gICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKLSAgICAgICAg
ICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9OwotICAgICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IiR7aW1wbGVtZW50ZWRCeX0uaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICB1bnNoaWZ0
KEBhcmd1bWVudHMsICJpdGVtIik7Ci0gICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFk
ID0gIiR7YXNzaWdufWNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6JHtpbXBsZW1lbnRlZEJ5
fTo6JHtmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50
cykgLiAiKSk7XG4iOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAkZ2V0
dGVyQ29udGVudEhlYWQgPSAiJHthc3NpZ259Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT4ke2Z1
bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIp
KTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIg
ICAgJHtnZXR0ZXJDb250ZW50SGVhZH0iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBteSAkY29u
dGVudEhlYWQ7Ci0gICAgICAgIGlmICgkcHJlZml4IGVxICJnZXRfIikgewotICAgICAgICAgICAg
bXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4
cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24pOwotICAg
ICAgICAgICAgcHVzaChAYXJndW1lbnRzLCBAY2FsbEltcGxQYXJhbXMpOwotICAgICAgICAgICAg
aWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50
ZWRCeSJ9KSB7Ci0gICAgICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifTsKLSAgICAg
ICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9LmgifSA9IDE7Ci0gICAg
ICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCAiKml0ZW0iKTsKLSAgICAgICAgICAgICAg
ICAkZnVuY3Rpb25OYW1lID0gIldlYkNvcmU6OiR7aW1wbGVtZW50ZWRCeX06OiR7ZnVuY3Rpb25O
YW1lfSI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRmdW5jdGlvbk5h
bWUgPSAiaXRlbS0+JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICRjb250ZW50SGVhZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX0ke2Z1bmN0aW9uTmFtZX0oIiAu
IGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSR7YXNzaWduUG9zdH07XG4iOwotICAgICAgICB9
IGVsc2lmICgkcHJlZml4IGVxICJzZXRfIikgewotICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5h
bWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb24oXCVpbXBs
SW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChA
YXJndW1lbnRzLCBAY2FsbEltcGxQYXJhbXMpOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0gICAg
ICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifTsKLSAgICAgICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgdW5z
aGlmdChAYXJndW1lbnRzLCAiKml0ZW0iKTsKLSAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1l
ID0gIldlYkNvcmU6OiR7aW1wbGVtZW50ZWRCeX06OiR7ZnVuY3Rpb25OYW1lfSI7Ci0gICAgICAg
ICAgICAgICAgJGNvbnRlbnRIZWFkID0gIiR7YXNzaWdufSR7YXNzaWduUHJlfSR7ZnVuY3Rpb25O
YW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpJHthc3NpZ25Qb3N0fTtcbiI7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaXRl
bS0+JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgICAgICAkY29udGVudEhlYWQgPSAiJHth
c3NpZ259JHthc3NpZ25QcmV9JHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVu
dHMpIC4gIikke2Fzc2lnblBvc3R9O1xuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG15IEBhcmd1bWVudHMgPSBAY2FsbEltcGxQYXJhbXM7Ci0gICAgICAg
ICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBs
ZW1lbnRlZEJ5In0pIHsKLSAgICAgICAgICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9Owot
ICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7aW1wbGVtZW50ZWRCeX0uaCJ9ID0gMTsK
LSAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsICIqaXRlbSIpOwotICAgICAgICAg
ICAgICAgICRjb250ZW50SGVhZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX1XZWJDb3JlOjoke2lt
cGxlbWVudGVkQnl9Ojoke2Z1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAi
LCBAYXJndW1lbnRzKSAuICIpJHthc3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICRjb250ZW50SGVhZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX1p
dGVtLT4ke2Z1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1l
bnRzKSAuICIpJHthc3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgcHVzaChAY0JvZHksICIgICAgJHtjb250ZW50SGVhZH0iKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmKCRyYWlzZXNFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIG15ICRleGNlcHRpb25IYW5k
bGluZyA9IDw8ICJFT0YiOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOwotICAgIH0KLUVPRgotICAgICAgICAgICAgcHVzaChAY0JvZHksICRleGNl
cHRpb25IYW5kbGluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoJHJldHVyblR5cGUg
bmUgInZvaWQiICYmICEkZnVuY3Rpb25IYXNDdXN0b21SZXR1cm4pIHsKLSAgICAgICAgaWYgKCRm
dW5jdGlvblNpZ1R5cGUgbmUgImFueSIpIHsKLSAgICAgICAgICAgIGlmICgkcmV0dXJuVmFsdWVJ
c0dET01UeXBlKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5
LCAiICAgIHJldHVybiAwOyAvLyBUT0RPOiByZXR1cm4gY2FudmFzIG9iamVjdFxuIik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoJGNvbmRpdGlvbmFsU3RyaW5nKSB7Ci0gICAgICAgIHB1
c2goQGNCb2R5LCAiI2Vsc2VcbiIpOwotCi0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIFVOVVNF
RF9QQVJBTShzZWxmKTtcbiIpOwotICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rp
b24tPnBhcmFtZXRlcnN9KSB7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBVTlVTRURf
UEFSQU0oIiAuICRwYXJhbS0+bmFtZSAuICIpO1xuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVz
aChAY0JvZHksICIgICAgVU5VU0VEX1BBUkFNKGVycm9yKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRp
b247Ci0KLSAgICAgICAgcHVzaChAY0JvZHksIEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihA
Y29uZGl0aW9uYWxXYXJuKTsKLSAgICAgICAgaWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lkIikgewot
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCRmdW5jdGlv
blNpZ1R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIHN0
YXRpY19jYXN0PCR7cmV0dXJuVHlwZX0+KDApO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiAwO1xuIik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIjZW5kaWYgLyogJHtjb25k
aXRpb25hbFN0cmluZ30gKi9cbiIpOwotICAgIH0KLQotICAgIGlmICgkcGFyZW50Q29uZGl0aW9u
YWxTdHJpbmcpIHsKLSAgICAgICAgcHVzaChAY0JvZHksICIjZWxzZVxuIik7Ci0KLSAgICAgICAg
cHVzaChAY0JvZHksICIgICAgVU5VU0VEX1BBUkFNKHNlbGYpO1xuIik7Ci0gICAgICAgIGZvcmVh
Y2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKLSAgICAgICAgICAgIHB1
c2goQGNCb2R5LCAiICAgIFVOVVNFRF9QQVJBTSgiIC4gJHBhcmFtLT5uYW1lIC4gIik7XG4iKTsK
LSAgICAgICAgfQotICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBVTlVTRURfUEFSQU0oZXJyb3Ip
O1xuIikgaWYgJHJhaXNlc0V4Y2VwdGlvbjsKLQotICAgICAgICBwdXNoKEBjQm9keSwgQHBhcmVu
dENvbmRpdGlvbmFsV2FybikgaWYgc2NhbGFyKEBwYXJlbnRDb25kaXRpb25hbFdhcm4pOwotICAg
ICAgICBpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiKSB7Ci0gICAgICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJGZ1bmN0aW9uU2lnVHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBjQm9keSwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtyZXR1cm5UeXBl
fT4oMCk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChA
Y0JvZHksICIgICAgcmV0dXJuIDA7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBwdXNoKEBjQm9keSwgIiNlbmRpZiAvKiAke3BhcmVudENvbmRpdGlvbmFsU3RyaW5nfSAq
L1xuIik7Ci0gICAgfQotCi0gICAgcHVzaChAY0JvZHksICJ9XG5cbiIpOwotfQotCi1zdWIgQ2xh
c3NIYXNGdW5jdGlvbiB7Ci0gICAgbXkgKCRjbGFzcywgJG5hbWUpID0gQF87Ci0KLSAgICBmb3Jl
YWNoIG15ICRmdW5jdGlvbiAoQHskY2xhc3MtPmZ1bmN0aW9uc30pIHsKLSAgICAgICAgaWYgKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIGVxICRuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4g
MTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdWIgR2VuZXJhdGVG
dW5jdGlvbnMgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSkg
PSBAXzsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9u
c30pIHsKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFtZSwg
JGZ1bmN0aW9uLCAiIiwgJGludGVyZmFjZSk7Ci0gICAgfQotCi0gICAgVE9QOgotICAgIGZvcmVh
Y2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICBp
ZiAoU2tpcEF0dHJpYnV0ZSgkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgbmV4dCBUT1A7Ci0g
ICAgICAgIH0KLQotICAgICAgICBteSAkYXR0ck5hbWVVcHBlciA9ICRjb2RlR2VuZXJhdG9yLT5X
S191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgIG15ICRnZXRu
YW1lID0gImdldCR7YXR0ck5hbWVVcHBlcn0iOwotICAgICAgICBteSAkc2V0bmFtZSA9ICJzZXQk
e2F0dHJOYW1lVXBwZXJ9IjsKLSAgICAgICAgaWYgKENsYXNzSGFzRnVuY3Rpb24oJGludGVyZmFj
ZSwgJGdldG5hbWUpIHx8IENsYXNzSGFzRnVuY3Rpb24oJGludGVyZmFjZSwgJHNldG5hbWUpKSB7
Ci0gICAgICAgICAgICAjIFZlcnkgb2NjYXNpb25hbGx5IGFuIElETCBmaWxlIGRlZmluZXMgZ2V0
dGVyL3NldHRlciBmdW5jdGlvbnMgZm9yIG9uZSBvZiBpdHMKLSAgICAgICAgICAgICMgYXR0cmli
dXRlczsgaW4gdGhpcyBjYXNlIHdlIGRvbid0IG5lZWQgdG8gYXV0b2dlbmVyYXRlIHRoZSBnZXR0
ZXIvc2V0dGVyLgotICAgICAgICAgICAgbmV4dCBUT1A7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgICMgR2VuZXJhdGUgYW4gYXR0cmlidXRlIGdldHRlci4gIEZvciBhbiBhdHRyaWJ1dGUg
ImZvbyIsIHRoaXMgaXMgYSBmdW5jdGlvbiBuYW1lZAotICAgICAgICAjICJnZXRfZm9vIiB3aGlj
aCBjYWxscyBhIERPTSBjbGFzcyBtZXRob2QgbmFtZWQgZm9vKCkuCi0gICAgICAgIG15ICRmdW5j
dGlvbiA9IG5ldyBkb21GdW5jdGlvbigpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKHsleyRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzfX0pOwotICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiR2V0dGVyUmFpc2VzRXhjZXB0aW9uIn0pIHsKLSAgICAgICAgICAgICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uIn0gPSAi
VkFMVUVfSVNfTUlTU0lORyI7Ci0gICAgICAgIH0KLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVG
dW5jdGlvbigkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAiZ2V0XyIsICRpbnRlcmZhY2UpOwot
Ci0gICAgICAgICMgRklYTUU6IFdlIGFyZSBub3QgZ2VuZXJhdGluZyBzZXR0ZXJzIGZvciAnUmVw
bGFjZWFibGUnCi0gICAgICAgICMgYXR0cmlidXRlcyBub3csIGJ1dCB3ZSBzaG91bGQgc29tZWhv
dy4KLSAgICAgICAgbXkgJGN1c3RvbSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9OwotICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+aXNS
ZWFkT25seSB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJS
ZXBsYWNlYWJsZSJ9Ci0gICAgICAgICAgICB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9Ci0gICAgICAgICAgICB8fCAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTZXR0ZXJDYWxsV2l0aCJ9IHx8ICRjdXN0
b20pIHsKLSAgICAgICAgICAgIG5leHQgVE9QOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAjIEdlbmVyYXRlIGFuIGF0dHJpYnV0ZSBzZXR0ZXIuICBGb3IgYW4gYXR0cmlidXRlLCAiZm9v
IiwgdGhpcyBpcyBhIGZ1bmN0aW9uIG5hbWVkCi0gICAgICAgICMgInNldF9mb28iIHdoaWNoIGNh
bGxzIGEgRE9NIGNsYXNzIG1ldGhvZCBuYW1lZCBzZXRGb28oKS4KLSAgICAgICAgJGZ1bmN0aW9u
ID0gbmV3IGRvbUZ1bmN0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICAkZnVuY3Rpb24tPnNpZ25h
dHVyZShuZXcgZG9tU2lnbmF0dXJlKCkpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
bmFtZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpOwotICAgICAgICAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+dHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwotICAgICAgICAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKHsleyRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzfX0pOwotICAgICAgICAKLSAgICAgICAgbXkgJHBhcmFt
ID0gbmV3IGRvbVNpZ25hdHVyZSgpOwotICAgICAgICAkcGFyYW0tPm5hbWUoInZhbHVlIik7Ci0g
ICAgICAgICRwYXJhbS0+dHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwotICAgICAg
ICAkcGFyYW0tPmlzTnVsbGFibGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKTsK
LSAgICAgICAgbXkgJWF0dHJpYnV0ZXMgPSAoKTsKLSAgICAgICAgJHBhcmFtLT5leHRlbmRlZEF0
dHJpYnV0ZXMoXCVhdHRyaWJ1dGVzKTsKLSAgICAgICAgbXkgJGFycmF5UmVmID0gJGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzOwotICAgICAgICBwdXNoKEAkYXJyYXlSZWYsICRwYXJhbSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiU2V0dGVyUmFpc2VzRXhjZXB0aW9uIn0pIHsKLSAgICAgICAgICAgICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uIn0gPSAiVkFMVUVf
SVNfTUlTU0lORyI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWxldGUgJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSYWlzZXNFeGNlcHRpb24ifTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigk
aW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAic2V0XyIsICRpbnRlcmZhY2UpOwotICAgIH0KLX0K
LQotc3ViIEltcGxlbWVudHNJbnRlcmZhY2UgewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsK
LSAgICBteSAkaW1wbGVtZW50SW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJGNvZGVH
ZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRpbXBsZW1lbnRJbnRlcmZh
Y2UpOwotfQotCi1zdWIgR2VuZXJhdGVDRmlsZSB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZh
Y2VOYW1lLCAkcGFyZW50Q2xhc3NOYW1lLCAkcGFyZW50R09ialR5cGUsICRpbnRlcmZhY2UpID0g
QF87Ci0KLSAgICBpZiAoSW1wbGVtZW50c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAiRXZlbnRUYXJn
ZXQiKSkgewotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUV2ZW50VGFyZ2V0SWZhY2UoJGludGVy
ZmFjZSk7Ci0gICAgfQotCi0gICAgbXkgJGltcGxDb250ZW50ID0gIiI7Ci0KLSAgICBteSAkZGVj
YW1lbGl6ZSA9IGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpOwotICAgIG15ICRjbHNDYXBzID0g
dWMoJGRlY2FtZWxpemUpOwotICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUgPSAid2Via2l0X2Rv
bV8kZGVjYW1lbGl6ZSI7Ci0gICAgbXkgJHBhcmVudEltcGxDbGFzc05hbWUgPSBHZXRQYXJlbnRJ
bXBsQ2xhc3NOYW1lKCRpbnRlcmZhY2UpOwotICAgIG15ICRiYXNlQ2xhc3NOYW1lID0gR2V0QmFz
ZUNsYXNzKCRwYXJlbnRJbXBsQ2xhc3NOYW1lLCAkaW50ZXJmYWNlKTsKLQotICAgICMgQWRkIGEg
cHJpdmF0ZSBzdHJ1Y3Qgb25seSBmb3IgZGlyZWN0IHN1YmNsYXNzZXMgb2YgT2JqZWN0IHNvIHRo
YXQgd2UgY2FuIHVzZSBSZWZQdHIKLSAgICAjIGZvciB0aGUgV2ViQ29yZSB3cmFwcGVkIG9iamVj
dCBhbmQgbWFrZSBzdXJlIHdlIG9ubHkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRlciBv
bmNlLgotICAgIGlmICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAg
ICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRp
b25hbFN0cmluZygkaW50ZXJmYWNlKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIjZGVm
aW5lIFdFQktJVF9ET01fJHtjbHNDYXBzfV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFt
ZX1Qcml2YXRlKVxuXG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICJ0eXBlZGVmIHN0
cnVjdCBfJHtjbGFzc05hbWV9UHJpdmF0ZSB7XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFBy
aXYsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsK
LSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIgICAgUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJm
YWNlTmFtZX0+IGNvcmVPYmplY3Q7XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIj
ZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsK
LSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICJ9ICR7Y2xhc3NOYW1lfVByaXZhdGU7XG5cbiIp
OwotICAgIH0KLQotICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwotJHtkZWZpbmVUeXBlTWFj
cm99KCR7Y2xhc3NOYW1lfSwgJHtsb3dlckNhc2VJZmFjZU5hbWV9LCAke3BhcmVudEdPYmpUeXBl
fSR7ZGVmaW5lVHlwZUludGVyZmFjZUltcGxlbWVudGF0aW9ufQotCi1FT0YKLSAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJHBhcmVudEltcGxDbGFz
c05hbWUgZXEgIk9iamVjdCIpIHsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiJHtjbGFzc05h
bWV9KiBraXQoV2ViQ29yZTo6JGludGVyZmFjZU5hbWUqIG9iailcbiIpOwotICAgICAgICBwdXNo
KEBjQm9keVByaXYsICJ7XG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgIGlmICgh
b2JqKVxuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICAgICAgcmV0dXJuIDA7XG5c
biIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSlcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYsICIg
ICAgICAgIHJldHVybiBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ocmV0KTtcblxuIik7Ci0gICAgICAg
IGlmIChJc1BvbHltb3JwaGljKCRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICAgICAgcHVzaChA
Y0JvZHlQcml2LCAiICAgIHJldHVybiB3cmFwKG9iaik7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICByZXR1cm4gd3JhcCR7aW50ZXJmYWNl
TmFtZX0ob2JqKTtcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIn1c
blxuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiJHtjbGFzc05h
bWV9KiBraXQoV2ViQ29yZTo6JGludGVyZmFjZU5hbWUqIG9iailcbiIpOwotICAgICAgICBwdXNo
KEBjQm9keVByaXYsICJ7XG4iKTsKLSAgICAgICAgaWYgKCFJc1BvbHltb3JwaGljKCRiYXNlQ2xh
c3NOYW1lKSkgewotICAgICAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgIGlmICghb2JqKVxu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgICAgIHJldHVybiAwO1xuXG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICBpZiAoZ3BvaW50ZXIgcmV0ID0g
RE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keVBy
aXYsICIgICAgICAgIHJldHVybiBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ocmV0KTtcblxuIik7Ci0g
ICAgICAgICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgcmV0dXJuIHdyYXAke2ludGVyZmFjZU5h
bWV9KG9iaik7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5
UHJpdiwgIiAgICByZXR1cm4gV0VCS0lUX0RPTV8ke2Nsc0NhcHN9KGtpdChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjokYmFzZUNsYXNzTmFtZSo+KG9iaikpKTtcbiIpOwotICAgICAgICB9Ci0gICAgICAg
IHB1c2goQGNCb2R5UHJpdiwgIn1cblxuIik7Ci0gICAgfQotCi0gICAgJGltcGxDb250ZW50ID0g
PDwgIkVPRiI7Ci1XZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlKCR7Y2xhc3NOYW1lfSog
cmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7
aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOwotfQotCi0ke2NsYXNzTmFtZX0qIHdyYXAke2ludGVyZmFjZU5hbWV9KFdlYkNvcmU6OiR7
aW50ZXJmYWNlTmFtZX0qIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwot
ICAgIHJldHVybiBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30oZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV8ke2Nsc0NhcHN9LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19
Ci0KLUVPRgotICAgIHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKLQotICAgICRvYmpl
Y3QtPkdlbmVyYXRlUHJvcGVydGllcygkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSk7Ci0gICAg
JG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbnMoJGludGVyZmFjZU5hbWUsICRpbnRlcmZhY2UpOwot
fQotCi1zdWIgR2VuZXJhdGVFbmRIZWFkZXIgewotICAgIG15ICgkb2JqZWN0KSA9IEBfOwotCi0g
ICAgbXkgJGlzU3RhYmxlQ2xhc3MgPSBzY2FsYXIoQHN0YWJsZVN5bWJvbHMpOwotICAgIGlmICgh
JGlzU3RhYmxlQ2xhc3MpIHsKLSAgICAgICAgcHVzaChAaFByZWZpeEd1YXJkRW5kLCAiI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqL1xuIik7Ci0gICAgfQotCi0gICAgI0hl
YWRlciBndWFyZAotICAgIG15ICRndWFyZCA9ICRjbGFzc05hbWUgLiAiX2giOwotCi0gICAgcHVz
aChAaEJvZHksICJHX0VORF9ERUNMU1xuXG4iKTsKLSAgICBwdXNoKEBoUHJlZml4R3VhcmRFbmQs
ICIjZW5kaWYgLyogJGd1YXJkICovXG4iKTsKLX0KLQotc3ViIElzUG9seW1vcnBoaWMgewotICAg
IG15ICR0eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gc2NhbGFyKGdyZXAgeyRfIGVxICR0eXBl
fSBxdyhCbG9iIEV2ZW50IEhUTUxDb2xsZWN0aW9uIE5vZGUgU3R5bGVTaGVldCBUZXh0VHJhY2tD
dWUpKTsKLX0KLQotc3ViIEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSB7Ci0gICAgbXkgJG9iamVj
dCA9IHNoaWZ0OwotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLQotICAgIG15ICRpbnRlcmZh
Y2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZGVjYW1lbGl6ZSA9IGRlY2FtZWxp
emUoJGludGVyZmFjZU5hbWUpOwotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgIG15IEBj
b25kaXRpb25hbFdhcm4gPSBHZW5lcmF0ZUNvbmRpdGlvbmFsV2FybmluZygkaW50ZXJmYWNlKTsK
LQotICAgICRpbXBsSW5jbHVkZXN7IkdPYmplY3RFdmVudExpc3RlbmVyLmgifSA9IDE7Ci0gICAg
JGltcGxJbmNsdWRlc3siV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCJ9ID0gMTsKLSAgICAkaW1wbElu
Y2x1ZGVzeyJXZWJLaXRET01FdmVudFByaXZhdGUuaCJ9ID0gMTsKLQotICAgIHB1c2goQGNCb2R5
UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlz
cGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQq
IGV2ZW50LCBHRXJyb3IqKiBlcnJvcilcbntcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGll
cywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwot
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50
ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywg
IiAgICBpZiAoIWNvcmVFdmVudClcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAg
ICAgICAgcmV0dXJuIGZhbHNlO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAg
IFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjoke2ludGVyZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7XG5cbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAg
ICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3Mo
KmNvcmVFdmVudCwgZWMpO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGlm
IChlYykge1xuICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3Jp
cHRpb24oZWMpO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKFwiV0VCS0lUX0RPTVwi
KSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7XG4gICAgfVxuIik7Ci0gICAg
cHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICBpZiAo
JGNvbmRpdGlvbmFsU3RyaW5nKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNl
bHNlXG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVT
RURfUEFSQU0oZXZlbnQpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAg
ICBVTlVTRURfUEFSQU0oZXJyb3IpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGll
cywgQGNvbmRpdGlvbmFsV2FybikgaWYgc2NhbGFyKEBjb25kaXRpb25hbFdhcm4pOwotICAgICAg
ICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgcmV0dXJuIGZhbHNlO1xuI2VuZGlmIC8vICR7
Y29uZGl0aW9uYWxTdHJpbmd9XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVz
LCAifVxuXG4iKTsKLQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpXG57XG4iKTsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsK
LSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1l
fSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTtcbiIpOwotICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgIiAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTtcbiIpOwotICAgIGlmICgkY29uZGl0aW9uYWxTdHJpbmcp
IHsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vsc2VcbiIpOwotICAgICAgICBw
dXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7XG4iKTsKLSAg
ICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUp
O1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0o
aGFuZGxlcik7XG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNF
RF9QQVJBTSh1c2VDYXB0dXJlKTtcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMs
IEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxXYXJuKTsKLSAgICAgICAg
cHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIHJldHVybiBmYWxzZTtcbiNlbmRpZiAvLyAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuIik7Ci0gICAgfQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywg
In1cblxuIik7Ci0KLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV8ke2RlY2FtZWxpemV9X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKVxue1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0
aWVzLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFt
ZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7XG4iKTsKLSAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7XG4iKTsKLSAgICBpZiAoJGNvbmRpdGlvbmFsU3Ry
aW5nKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbHNlXG4iKTsKLSAgICAg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpO1xuIik7
Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0oZXZlbnRO
YW1lKTtcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BB
UkFNKGhhbmRsZXIpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBV
TlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7XG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0
aWVzLCBAY29uZGl0aW9uYWxXYXJuKSBpZiBzY2FsYXIoQGNvbmRpdGlvbmFsV2Fybik7Ci0gICAg
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICByZXR1cm4gZmFsc2U7XG4jZW5kaWYgLy8g
JHtjb25kaXRpb25hbFN0cmluZ31cbiIpOwotICAgIH0KLSAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICJ9XG5cbiIpOwotCi0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAic3RhdGljIHZvaWQg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBp
ZmFjZSlcbntcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBpZmFjZS0+ZGlz
cGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQ7XG4i
KTsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9hZGRfZXZlbnRfbGlzdGVuZXI7XG4iKTsK
LSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7XG59
XG5cbiIpOwotCi0gICAgJGRlZmluZVR5cGVNYWNybyA9ICJHX0RFRklORV9UWVBFX1dJVEhfQ09E
RSI7Ci0gICAgJGRlZmluZVR5cGVJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbiA9ICIsIEdfSU1QTEVN
RU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9pbml0KSkiOwotfQotCi1zdWIgR2VuZXJhdGUgewotICAgIG15ICgkb2JqZWN0
LCAkaW50ZXJmYWNlKSA9IEBfOwotCi0gICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVu
dENsYXNzTmFtZSgkaW50ZXJmYWNlKTsKLSAgICBteSAkcGFyZW50R09ialR5cGUgPSBHZXRQYXJl
bnRHT2JqVHlwZSgkaW50ZXJmYWNlKTsKLSAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZh
Y2UtPm5hbWU7Ci0gICAgbXkgJHBhcmVudEltcGxDbGFzc05hbWUgPSBHZXRQYXJlbnRJbXBsQ2xh
c3NOYW1lKCRpbnRlcmZhY2UpOwotICAgIG15ICRiYXNlQ2xhc3NOYW1lID0gR2V0QmFzZUNsYXNz
KCRwYXJlbnRJbXBsQ2xhc3NOYW1lLCAkaW50ZXJmYWNlKTsKLQotICAgICMgQWRkIHRoZSBkZWZh
dWx0IGltcGwgaGVhZGVyIHRlbXBsYXRlCi0gICAgQGNQcmVmaXggPSBzcGxpdCgiXHIiLCAkbGlj
ZW5jZVRlbXBsYXRlKTsKLSAgICBwdXNoKEBjUHJlZml4LCAiXG4iKTsKLQotICAgICRpbXBsSW5j
bHVkZXN7IkRPTU9iamVjdENhY2hlLmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRlc3siV2ViS2l0
RE9NUHJpdmF0ZS5oIn0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7ImdvYmplY3QvQ29udmVydFRv
VVRGOFN0cmluZy5oIn0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfVByaXZh
dGUuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVudC5oIn0gPSAxOwotICAgICRp
bXBsSW5jbHVkZXN7IkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIn0gPSAxOwotICAgICRpbXBsSW5j
bHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJDU1NJbXBvcnRS
dWxlLmgifSA9IDE7Ci0gICAgaWYgKCRwYXJlbnRJbXBsQ2xhc3NOYW1lIG5lICJPYmplY3QiIGFu
ZCBJc1BvbHltb3JwaGljKCRiYXNlQ2xhc3NOYW1lKSkgewotICAgICAgICAkaW1wbEluY2x1ZGVz
eyJXZWJLaXRET00ke2Jhc2VDbGFzc05hbWV9UHJpdmF0ZS5oIn0gPSAxOwotICAgIH0KLQotICAg
ICRoZHJJbmNsdWRlc3sid2Via2l0ZG9tLyR7cGFyZW50Q2xhc3NOYW1lfS5oIn0gPSAxOwotCi0g
ICAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGludGVyZmFjZU5hbWUsICRwYXJlbnRDbGFzc05h
bWUsICRpbnRlcmZhY2UpOwotICAgICRvYmplY3QtPkdlbmVyYXRlQ0ZpbGUoJGludGVyZmFjZU5h
bWUsICRwYXJlbnRDbGFzc05hbWUsICRwYXJlbnRHT2JqVHlwZSwgJGludGVyZmFjZSk7Ci0gICAg
JG9iamVjdC0+R2VuZXJhdGVFbmRIZWFkZXIoKTsKLX0KLQotc3ViIEhhc1Vuc3RhYmxlQ3VzdG9t
QVBJIHsKLSAgICBteSAkZG9tQ2xhc3NOYW1lID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gc2NhbGFy
KGdyZXAgeyRfIGVxICRkb21DbGFzc05hbWV9IHF3KFdlYktpdERPTURPTVdpbmRvdyBXZWJLaXRE
T01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCkp
OwotfQotCi1zdWIgV3JpdGVEYXRhIHsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkg
JGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRvdXRwdXREaXIgPSBzaGlmdDsKLSAgICBta2Rp
ciAkb3V0cHV0RGlyOwotCi0gICAgbXkgJGlzU3RhYmxlQ2xhc3MgPSBzY2FsYXIoQHN0YWJsZVN5
bWJvbHMpOwotCi0gICAgIyBXcml0ZSBhIHByaXZhdGUgaGVhZGVyLgotICAgIG15ICRpbnRlcmZh
Y2VOYW1lID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZmlsZW5hbWUgPSAiJG91dHB1dERp
ci8iIC4gJGNsYXNzTmFtZSAuICJQcml2YXRlLmgiOwotICAgIG15ICRndWFyZCA9ICIke2NsYXNz
TmFtZX1Qcml2YXRlX2giOwotCi0gICAgIyBBZGQgdGhlIGd1YXJkIGlmIHRoZSAnQ29uZGl0aW9u
YWwnIGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMKLSAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcg
PSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsK
LQotICAgIG9wZW4oUFJJVkhFQURFUiwgIj4kZmlsZW5hbWUiKSBvciBkaWUgIkNvdWxkbid0IG9w
ZW4gZmlsZSAkZmlsZW5hbWUgZm9yIHdyaXRpbmciOwotCi0gICAgcHJpbnQgUFJJVkhFQURFUiBz
cGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKLSAgICBwcmludCBQUklWSEVBREVSICJcbiI7
Ci0KLSAgICBteSAkdGV4dCA9IDw8ICJFT0YiOwotI2lmbmRlZiAkZ3VhcmQKLSNkZWZpbmUgJGd1
YXJkCi0KLSNpbmNsdWRlICIke2ludGVyZmFjZU5hbWV9LmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9t
LyR7Y2xhc3NOYW1lfS5oPgotRU9GCi0KLSAgICBwcmludCBQUklWSEVBREVSICR0ZXh0OwotICAg
IHByaW50IFBSSVZIRUFERVIgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIiBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7Ci0gICAgcHJpbnQgUFJJVkhFQURFUiAiXG4iOwotICAgICR0ZXh0ID0gPDwg
IkVPRiI7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLSR7Y2xhc3NOYW1lfSogd3JhcCR7aW50ZXJmYWNl
TmFtZX0oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSopOwotJHtjbGFzc05hbWV9KiBraXQoV2Vi
Q29yZTo6JHtpbnRlcmZhY2VOYW1lfSopOwotV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29y
ZSgke2NsYXNzTmFtZX0qKTsKLUVPRgotCi0gICAgcHJpbnQgUFJJVkhFQURFUiAkdGV4dDsKLQot
ICAgICR0ZXh0ID0gPDwgIkVPRiI7Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotRU9GCi0KLSAg
ICBwcmludCBQUklWSEVBREVSICR0ZXh0OwotICAgIHByaW50IFBSSVZIRUFERVIgIiNlbmRpZiAv
KiAke2NvbmRpdGlvbmFsU3RyaW5nfSAqL1xuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAg
ICBwcmludCBQUklWSEVBREVSICIjZW5kaWYgLyogJHtndWFyZH0gKi9cbiI7Ci0KLSAgICBjbG9z
ZShQUklWSEVBREVSKTsKLQotICAgIG15ICRiYXNlbmFtZSA9IEZpbGVOYW1lUHJlZml4IC4gJGlu
dGVyZmFjZU5hbWU7Ci0gICAgJGJhc2VuYW1lID1+IHMvXy8vZzsKLQotICAgICMgV3JpdGUgcHVi
bGljIGhlYWRlci4KLSAgICBteSAkZnVsbEhlYWRlckZpbGVuYW1lID0gIiRvdXRwdXREaXIvIiAu
ICRiYXNlbmFtZSAuICIuaCI7Ci0gICAgbXkgJGluc3RhbGxlZEhlYWRlckZpbGVuYW1lID0gIiR7
YmFzZW5hbWV9LmgiOwotICAgIG9wZW4oSEVBREVSLCAiPiRmdWxsSGVhZGVyRmlsZW5hbWUiKSBv
ciBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkZnVsbEhlYWRlckZpbGVuYW1lIjsKLQotICAgIHBy
aW50IEhFQURFUiBAaFByZWZpeDsKLSAgICBwcmludCBIRUFERVIgQGhQcmVmaXhHdWFyZDsKLSAg
ICBwcmludCBIRUFERVIgIiNpbmNsdWRlIDxnbGliLW9iamVjdC5oPlxuIjsKLSAgICBwcmludCBI
RUFERVIgbWFwIHsgIiNpbmNsdWRlIDwkXz5cbiIgfSBzb3J0IGtleXMoJWhkckluY2x1ZGVzKTsK
LSAgICBpZiAoJGlzU3RhYmxlQ2xhc3MpIHsKLSAgICAgICAgcHJpbnQgSEVBREVSICIjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD5cblxuIjsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoSGFzVW5zdGFibGVDdXN0b21BUEkoJGNsYXNzTmFtZSkpIHsKLSAgICAgICAgICAg
IHByaW50IEhFQURFUiAiI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DdXN0b21VbnN0YWJs
ZS5oPlxuIjsKLSAgICAgICAgfQotICAgICAgICBwcmludCBIRUFERVIgIiNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPlxuXG4iOwotICAgIH0KLSAgICBwcmlu
dCBIRUFERVIgQGhCb2R5UHJlOwotICAgIHByaW50IEhFQURFUiBAaEJvZHk7Ci0gICAgcHJpbnQg
SEVBREVSIEBoUHJlZml4R3VhcmRFbmQ7Ci0KLSAgICBjbG9zZShIRUFERVIpOwotCi0gICAgIyBX
cml0ZSB0aGUgdW5zdGFibGUgaGVhZGVyIGlmIG5lZWRlZC4KLSAgICBpZiAoJGlzU3RhYmxlQ2xh
c3MgYW5kIHNjYWxhcihAaEJvZHlVbnN0YWJsZSkpIHsKLSAgICAgICAgbXkgJGZ1bGxVbnN0YWJs
ZUhlYWRlckZpbGVuYW1lID0gIiRvdXRwdXREaXIvIiAuICRjbGFzc05hbWUgLiAiVW5zdGFibGUu
aCI7Ci0gICAgICAgIG9wZW4oVU5TVEFCTEUsICI+JGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVuYW1l
Iikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVuYW1l
IjsKLQotICAgICAgICBwcmludCBVTlNUQUJMRSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRl
KTsKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIlxuIjsKLQotICAgICAgICAkZ3VhcmQgPSAiJHtj
bGFzc05hbWV9VW5zdGFibGVfaCI7Ci0gICAgICAgICR0ZXh0ID0gPDwgIkVPRiI7Ci0jaWZuZGVm
ICRndWFyZAotI2RlZmluZSAkZ3VhcmQKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQotCi1FT0YKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgJHRleHQ7Ci0gICAgICAgIGlmIChI
YXNVbnN0YWJsZUN1c3RvbUFQSSgkY2xhc3NOYW1lKSkgewotICAgICAgICAgICAgcHJpbnQgVU5T
VEFCTEUgIiNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUuaD5cbiI7
Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPlxuXG4iOwotCi0gICAgICAgIHByaW50IFVOU1RB
QkxFICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
Ci0gICAgICAgIHByaW50IFVOU1RBQkxFICJHX0JFR0lOX0RFQ0xTXG4iOwotICAgICAgICBwcmlu
dCBVTlNUQUJMRSAiXG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSBAaEJvZHlVbnN0YWJsZTsK
LSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIlxuIjsKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIkdf
RU5EX0RFQ0xTXG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSAiXG4iOwotICAgICAgICBwcmlu
dCBVTlNUQUJMRSAiI2VuZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG5cbiIgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOwotICAgICAgICBwcmludCBVTlNUQUJMRSAiI2VuZGlmIC8qIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqL1xuIjsKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNl
bmRpZiAvKiAke2d1YXJkfSAqL1xuIjsKLQotICAgICAgICBjbG9zZShVTlNUQUJMRSk7Ci0gICAg
fQotCi0gICAgIyBXcml0ZSB0aGUgaW1wbGVtZW50YXRpb24gc291cmNlcwotICAgIG15ICRpbXBs
RmlsZU5hbWUgPSAiJG91dHB1dERpci8iIC4gJGJhc2VuYW1lIC4gIi5jcHAiOwotICAgIG9wZW4o
SU1QTCwgIj4kaW1wbEZpbGVOYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGltcGxG
aWxlTmFtZSI7Ci0KLSAgICBwcmludCBJTVBMIEBjUHJlZml4OwotICAgIHByaW50IElNUEwgIiNp
bmNsdWRlIFwiY29uZmlnLmhcIlxuIjsKLSAgICBwcmludCBJTVBMICIjaW5jbHVkZSBcIiRpbnN0
YWxsZWRIZWFkZXJGaWxlbmFtZVwiXG5cbiI7Ci0KLSAgICAjIFJlbW92ZSB0aGUgaW1wbGVtZW50
YXRpb24gaGVhZGVyIGZyb20gdGhlIGxpc3Qgb2YgaW5jbHVkZWQgZmlsZXMuCi0gICAgJWluY2x1
ZGVzQ29weSA9ICVpbXBsSW5jbHVkZXM7Ci0gICAgcHJpbnQgSU1QTCBtYXAgeyAiI2luY2x1ZGUg
XCIkX1wiXG4iIH0gc29ydCBrZXlzKCVpbmNsdWRlc0NvcHkpOwotICAgIGlmICgkaXNTdGFibGVD
bGFzcyBhbmQgc2NhbGFyKEBoQm9keVVuc3RhYmxlKSkgewotICAgICAgICBwcmludCBJTVBMICIj
aW5jbHVkZSBcIiR7Y2xhc3NOYW1lfVVuc3RhYmxlLmhcIlxuIjsKLSAgICB9Ci0KLSAgICBwcmlu
dCBJTVBMICIjaW5jbHVkZSA8d3RmL0dldFB0ci5oPlxuIjsKLSAgICBwcmludCBJTVBMICIjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPlxuXG4iOwotICAgIHByaW50IElNUEwgQGNTdHJ1Y3RQcml2Owot
ICAgIHByaW50IElNUEwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRp
b25hbFN0cmluZzsKLQotICAgIHByaW50IElNUEwgIm5hbWVzcGFjZSBXZWJLaXQge1xuXG4iOwot
ICAgIHByaW50IElNUEwgQGNCb2R5UHJpdjsKLSAgICBwcmludCBJTVBMICJ9IC8vIG5hbWVzcGFj
ZSBXZWJLaXRcblxuIjsKLSAgICBwcmludCBJTVBMICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0
cmluZ31cblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0KLSAgICBwcmludCBJTVBMIEBjQm9k
eVByb3BlcnRpZXM7Ci0gICAgcHJpbnQgSU1QTCBAY0JvZHk7Ci0KLSAgICBjbG9zZShJTVBMKTsK
LQotICAgICMgV3JpdGUgYSBzeW1ib2xzIGZpbGUuCi0gICAgaWYgKCRpc1N0YWJsZUNsYXNzKSB7
Ci0gICAgICAgIG15ICRzeW1ib2xzRmlsZU5hbWUgPSAiJG91dHB1dERpci8iIC4gJGJhc2VuYW1l
IC4gIi5zeW1ib2xzIjsKLSAgICAgICAgb3BlbihTWU0sICI+JHN5bWJvbHNGaWxlTmFtZSIpIG9y
IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRzeW1ib2xzRmlsZU5hbWUiOwotICAgICAgICBwcmlu
dCBTWU0gQHN5bWJvbHM7Ci0gICAgICAgIGNsb3NlKFNZTSk7Ci0gICAgfQotCi0gICAgJWltcGxJ
bmNsdWRlcyA9ICgpOwotICAgICVoZHJJbmNsdWRlcyA9ICgpOwotICAgIEBoUHJlZml4ID0gKCk7
Ci0gICAgQGhCb2R5ID0gKCk7Ci0gICAgQGhCb2R5VW5zdGFibGUgPSAoKTsKLQotICAgIEBjUHJl
Zml4ID0gKCk7Ci0gICAgQGNCb2R5ID0gKCk7Ci0gICAgQGNCb2R5UHJpdiA9ICgpOwotICAgIEBj
Qm9keVByb3BlcnRpZXMgPSAoKTsKLSAgICBAY1N0cnVjdFByaXYgPSAoKTsKLQotICAgIEBzeW1i
b2xzID0gKCk7Ci0gICAgQHN0YWJsZVN5bWJvbHMgPSAoKTsKLX0KLQotc3ViIElzSW50ZXJmYWNl
U3ltYm9sIHsKLSAgICBteSAoJGxpbmUsICRsb3dlckNhc2VJZmFjZU5hbWUpID0gQF87Ci0KLSAg
ICAjIEZ1bmN0aW9uLgotICAgIHJldHVybiAxIGlmICRsaW5lID1+IC9eW2EtekEtWjAtOVwqXStc
cyR7bG93ZXJDYXNlSWZhY2VOYW1lfV8uKyQvOwotCi0gICAgIyBDb25zdGFudC4KLSAgICBteSAk
cHJlZml4ID0gdWMoJGxvd2VyQ2FzZUlmYWNlTmFtZSk7Ci0gICAgcmV0dXJuIDEgaWYgJGxpbmUg
PX4gL14ke3ByZWZpeH1fW0EtWl9dKyQvOwotICAgIHJldHVybiAwOwotfQotCi1zdWIgUmVhZFN0
YWJsZVN5bWJvbHMgewotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7Ci0KLSAgICBAc3Rh
YmxlU3ltYm9scyA9ICgpOwotCi0gICAgbXkgJGJpbmRpbmdzRGlyID0gZGlybmFtZSgkRmluZEJp
bjo6QmluKTsKLSAgICBteSAkZmlsZU5hbWUgPSAiJGJpbmRpbmdzRGlyL2dvYmplY3Qvd2Via2l0
ZG9tLnN5bWJvbHMiOwotICAgIG9wZW4gRklMRSwgIjwiLCAkZmlsZU5hbWUgb3IgZGllICJDb3Vs
ZCBub3Qgb3BlbiAkZmlsZU5hbWUiOwotICAgIG15IEBsaW5lcyA9IDxGSUxFPjsKLSAgICBjbG9z
ZSBGSUxFOwotCi0gICAgbXkgJGRlY2FtZWxpemUgPSBkZWNhbWVsaXplKCRpbnRlcmZhY2VOYW1l
KTsKLSAgICBteSAkbG93ZXJDYXNlSWZhY2VOYW1lID0gIndlYmtpdF9kb21fJGRlY2FtZWxpemUi
OwotCi0gICAgZm9yZWFjaCAkbGluZSAoQGxpbmVzKSB7Ci0gICAgICAgICRsaW5lID1+IHMvXG4k
Ly87Ci0KLSAgICAgICAgbXkgKCRzeW1ib2wpID0gc3BsaXQoJ0AnLCAkbGluZSwgMik7Ci0KLSAg
ICAgICAgaWYgKCRzeW1ib2wgZXEgIkdUeXBlICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9nZXRfdHlw
ZSh2b2lkKSIpIHsKLSAgICAgICAgICAgIHB1c2goQHN0YWJsZVN5bWJvbHMsICRsaW5lKTsKLSAg
ICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NhbGFyKEBzdGFibGVT
eW1ib2xzKSBhbmQgSXNJbnRlcmZhY2VTeW1ib2woJHN5bWJvbCwgJGxvd2VyQ2FzZUlmYWNlTmFt
ZSkgYW5kICRzeW1ib2wgIX4gL15HVHlwZS8pIHsKLSAgICAgICAgICAgIHB1c2goQHN0YWJsZVN5
bWJvbHMsICRsaW5lKTsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc2NhbGFyKEBzdGFibGVTeW1ib2xzKSBhbmQgJHN5bWJvbCAhfiAvXkdUeXBlLykgewotICAg
ICAgICAgICAgd2FybiAiU3ltYm9sICVsaW5lIGZvdW5kLCBidXQgYSBnZXRfdHlwZSB3YXMgZXhw
ZWN0ZWQiOwotICAgICAgICB9Ci0KLSAgICAgICAgbGFzdCBpZiBzY2FsYXIoQHN0YWJsZVN5bWJv
bHMpOwotICAgIH0KLX0KLQotc3ViIEdlbmVyYXRlSW50ZXJmYWNlIHsKLSAgICBteSAoJG9iamVj
dCwgJGludGVyZmFjZSwgJGRlZmluZXMpID0gQF87Ci0KLSAgICAjIFNldCB1cCBzb21lIGdsb2Jh
bCB2YXJpYWJsZXMKLSAgICAkY2xhc3NOYW1lID0gR2V0Q2xhc3NOYW1lKCRpbnRlcmZhY2UtPm5h
bWUpOwotCi0gICAgUmVhZFN0YWJsZVN5bWJvbHMoJGludGVyZmFjZS0+bmFtZSk7Ci0KLSAgICAk
b2JqZWN0LT5HZW5lcmF0ZSgkaW50ZXJmYWNlKTsKLX0KLQotMTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L0dPYmplY3RUZXN0U3VwcGxl
bWVudGFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L0dPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTMxOGNlNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9HT2JqZWN0VGVzdFN1cHBsZW1lbnRhbC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRl
bGwgYnVpbGQgc2NyaXB0cyB0aGF0IEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmggYW5kCi0gICAg
R09iamVjdFRlc3RTdXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0U3VwcGxlbWVu
dGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5
aW5nIHRvIGdlbmVyYXRlIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmggYW5kCi0gICAgR09iamVj
dFRlc3RTdXBwbGVtZW50YWwuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3Qg
YmUgdHJpZWQgdG8gY29tcGlsZS4KLSovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9HT2JqZWN0VGVzdFN1cHBsZW1lbnRhbC5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvR09iamVjdFRlc3RTdXBw
bGVtZW50YWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxOGNlNS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9HT2Jq
ZWN0VGVzdFN1cHBsZW1lbnRhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vKgot
ICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhh
dCBHT2JqZWN0VGVzdFN1cHBsZW1lbnRhbC5oIGFuZAotICAgIEdPYmplY3RUZXN0U3VwcGxlbWVu
dGFsLmNwcCBhcmUgY3JlYXRlZCBmb3IgVGVzdFN1cHBsZW1lbnRhbC5pZGwsIGFuZCB0aHVzCi0g
ICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBHT2Jq
ZWN0VGVzdFN1cHBsZW1lbnRhbC5oIGFuZAotICAgIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNw
cCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUu
Ci0qLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzOTJkOTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTUZsb2F0NjRBcnJheS5o
IgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTUZsb2F0MzJBcnJheVByaXZhdGUuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0
RE9NSW50MzJBcnJheVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZl
cnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NRmxvYXQ2NEFycmF5
KiBraXQoV2ViQ29yZTo6RmxvYXQ2NEFycmF5KiBvYmopCi17Ci0gICAgcmV0dXJuIFdFQktJVF9E
T01fRkxPQVQ2NEFSUkFZKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOwot
fQotCi1XZWJDb3JlOjpGbG9hdDY0QXJyYXkqIGNvcmUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiBy
ZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Rmxv
YXQ2NEFycmF5Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
LX0KLQotV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiB3cmFwRmxvYXQ2NEFycmF5KFdlYkNvcmU6OkZs
b2F0NjRBcnJheSogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAg
cmV0dXJuIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfRkxPQVQ2NEFSUkFZLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTUZsb2F0NjRB
cnJheSwgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXksIFdFQktJVF9ET01fVFlQRV9BUlJBWV9CVUZG
RVJfVklFVykKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfY2xhc3NfaW5p
dChXZWJLaXRET01GbG9hdDY0QXJyYXlDbGFzcyogcmVxdWVzdENsYXNzKQotewotfQotCi1zdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9pbml0KFdlYktpdERPTUZsb2F0NjRBcnJh
eSogcmVxdWVzdCkKLXsKLX0KLQotV2ViS2l0RE9NSW50MzJBcnJheSoKLXdlYmtpdF9kb21fZmxv
YXQ2NGFycmF5X2ZvbyhXZWJLaXRET01GbG9hdDY0QXJyYXkqIHNlbGYsIFdlYktpdERPTUZsb2F0
MzJBcnJheSogYXJyYXkpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRkxPQVQ2NEFSUkFZ
KHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FU
MzJBUlJBWShhcnJheSksIDApOwotICAgIFdlYkNvcmU6OkZsb2F0NjRBcnJheSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkqIGNvbnZlcnRlZEFy
cmF5ID0gV2ViS2l0Ojpjb3JlKGFycmF5KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW50MzJBcnJh
eT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvbyhjb252ZXJ0ZWRBcnJheSkp
OwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NRmxvYXQ2NEFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDdmMGQwNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuaAorKysgL2Rldi9udWxs
CkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmICFkZWZpbmVk
KF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKLSNl
cnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgotI2VuZGlmCi0KLSNpZm5kZWYgV2ViS2l0RE9NRmxvYXQ2NEFycmF5X2gKLSNkZWZpbmUg
V2ViS2l0RE9NRmxvYXQ2NEFycmF5X2gKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUFycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBX
RUJLSVRfRE9NX1RZUEVfRkxPQVQ2NEFSUkFZICAgICAgICAgICAgKHdlYmtpdF9kb21fZmxvYXQ2
NGFycmF5X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9GTE9BVDY0QVJSQVksIFdlYktpdERPTUZsb2F0NjRBcnJheSkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fRkxPQVQ2NEFSUkFZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9GTE9BVDY0QVJSQVksIFdlYktpdERPTUZsb2F0
NjRBcnJheUNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX0ZMT0FUNjRBUlJBWShvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
RkxPQVQ2NEFSUkFZKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19GTE9BVDY0QVJSQVlfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0ZMT0FUNjRBUlJBWSkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9GTE9BVDY0QVJSQVksIFdlYktpdERPTUZsb2F0NjRBcnJheUNsYXNzKSkKLQotc3RydWN0IF9X
ZWJLaXRET01GbG9hdDY0QXJyYXkgewotICAgIFdlYktpdERPTUFycmF5QnVmZmVyVmlldyBwYXJl
bnRfaW5zdGFuY2U7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdERPTUZsb2F0NjRBcnJheUNsYXNzIHsK
LSAgICBXZWJLaXRET01BcnJheUJ1ZmZlclZpZXdDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1X
RUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9nZXRfdHlwZSAodm9pZCk7
Ci0KLS8qKgotICogd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfZm9vOgotICogQHNlbGY6IEEgI1dl
YktpdERPTUZsb2F0NjRBcnJheQotICogQGFycmF5OiBBICNXZWJLaXRET01GbG9hdDMyQXJyYXkK
LSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6Ci0gKgotKiovCi1XRUJLSVRfQVBJIFdl
YktpdERPTUludDMyQXJyYXkqCi13ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9mb28oV2ViS2l0RE9N
RmxvYXQ2NEFycmF5KiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkqIGFycmF5KTsKLQotR19F
TkRfREVDTFMKLQotI2VuZGlmIC8qIFdlYktpdERPTUZsb2F0NjRBcnJheV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01GbG9hdDY0QXJyYXlQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNlZWMyOTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaWZuZGVmIFdlYktpdERPTUZsb2F0NjRBcnJheVByaXZhdGVfaAotI2RlZmluZSBXZWJL
aXRET01GbG9hdDY0QXJyYXlQcml2YXRlX2gKLQotI2luY2x1ZGUgIkZsb2F0NjRBcnJheS5oIgot
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01GbG9hdDY0QXJyYXkuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1XZWJLaXRET01GbG9hdDY0QXJyYXkqIHdyYXBGbG9hdDY0QXJyYXkoV2ViQ29y
ZTo6RmxvYXQ2NEFycmF5Kik7Ci1XZWJLaXRET01GbG9hdDY0QXJyYXkqIGtpdChXZWJDb3JlOjpG
bG9hdDY0QXJyYXkqKTsKLVdlYkNvcmU6OkZsb2F0NjRBcnJheSogY29yZShXZWJLaXRET01GbG9h
dDY0QXJyYXkqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9N
RmxvYXQ2NEFycmF5UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01JbnRlcmZhY2VOYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVy
ZmFjZU5hbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGIwZjUxLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTUludGVyZmFjZU5hbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAK
LS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01JbnRlcmZhY2VOYW1lLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRS
dWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVBy
aXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdF
QktJVF9ET01fSU5URVJGQUNFX05BTUVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNFX05BTUUsIFdlYktpdERP
TUludGVyZmFjZU5hbWVQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSW50ZXJm
YWNlTmFtZVByaXZhdGUgewotICAgIFJlZlB0cjxXZWJDb3JlOjpJbnRlcmZhY2VOYW1lPiBjb3Jl
T2JqZWN0OwotfSBXZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLVdlYktpdERPTUludGVyZmFjZU5hbWUqIGtpdChXZWJDb3JlOjpJbnRlcmZhY2VO
YW1lKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fSU5URVJGQUNFX05BTUUocmV0KTsKLQotICAgIHJldHVybiB3cmFwSW50ZXJm
YWNlTmFtZShvYmopOwotfQotCi1XZWJDb3JlOjpJbnRlcmZhY2VOYW1lKiBjb3JlKFdlYktpdERP
TUludGVyZmFjZU5hbWUqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpJbnRlcmZhY2VOYW1lKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCkt
PmNvcmVPYmplY3QpIDogMDsKLX0KLQotV2ViS2l0RE9NSW50ZXJmYWNlTmFtZSogd3JhcEludGVy
ZmFjZU5hbWUoV2ViQ29yZTo6SW50ZXJmYWNlTmFtZSogY29yZU9iamVjdCkKLXsKLSAgICBBU1NF
UlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fSU5URVJGQUNFX05BTUUoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19E
RUZJTkVfVFlQRShXZWJLaXRET01JbnRlcmZhY2VOYW1lLCB3ZWJraXRfZG9tX2ludGVyZmFjZV9u
YW1lLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2lu
dGVyZmFjZV9uYW1lX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01J
bnRlcmZhY2VOYW1lUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fSU5URVJGQUNFX05BTUVfR0VU
X1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChw
cml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01JbnRlcmZhY2VO
YW1lUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21faW50ZXJmYWNlX25h
bWVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21faW50ZXJmYWNlX25hbWVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVj
dFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9pbnRlcmZhY2VfbmFtZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2Vi
S2l0RE9NSW50ZXJmYWNlTmFtZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0lOVEVSRkFDRV9O
QU1FX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkludGVyZmFjZU5hbWUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5j
b3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9kb21faW50ZXJmYWNlX25hbWVfY2xhc3NfaW5pdChXZWJLaXRET01JbnRlcmZh
Y2VOYW1lQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUludGVyZmFjZU5hbWVQcml2
YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21faW50ZXJm
YWNlX25hbWVfY29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9kb21faW50ZXJmYWNlX25hbWVfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21faW50ZXJmYWNlX25hbWVfaW5pdChXZWJLaXRET01JbnRlcmZhY2VOYW1lKiByZXF1ZXN0KQot
ewotICAgIFdlYktpdERPTUludGVyZmFjZU5hbWVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9J
TlRFUkZBQ0VfTkFNRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktp
dERPTUludGVyZmFjZU5hbWVQcml2YXRlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY5Zjg4NjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3QuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RB
Y3RpdmVET01PYmplY3RQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZB
VEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVf
VEVTVF9BQ1RJVkVfRE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZh
dGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0
ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3Q+IGNvcmVPYmplY3Q7
Ci19IFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RB
Y3RpdmVET01PYmplY3QqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNUKHJldCk7Ci0KLSAg
ICByZXR1cm4gd3JhcFRlc3RBY3RpdmVET01PYmplY3Qob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVz
dEFjdGl2ZURPTU9iamVjdCogY29yZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiByZXF1
ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEFj
dGl2ZURPTU9iamVjdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHdyYXBUZXN0QWN0aXZlRE9N
T2JqZWN0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAg
QVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RP
TV9PQkpFQ1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0FDVElWRV9ET01fT0JK
RUNULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmpl
Y3QsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdCwgV0VCS0lUX0RPTV9UWVBFX09C
SkVDVCkKLQotZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfRVhDSVRJTkdfQVRUUiwKLX07
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZB
VEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5j
b3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9hY3RpdmVf
ZG9tX29iamVjdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZiA9IFdFQktJ
VF9ET01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9QX0VYQ0lUSU5HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhj
aXRpbmdfYXR0cihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0
X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rv
cih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwot
Ci0gICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCo+
KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAg
cmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSkpOwot
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2Rv
bV9vYmplY3RfY29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfcHJv
cGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBn
b2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfRVhDSVRJTkdfQVRUUiwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX2xvbmcoCi0gICAgICAgICAgICAiZXhjaXRpbmctYXR0ciIsCi0gICAgICAgICAgICAi
VGVzdEFjdGl2ZURPTU9iamVjdDpleGNpdGluZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2xvbmcgVGVzdEFjdGl2ZURPTU9iamVjdDpleGNpdGluZy1hdHRyIiwKLSAgICAgICAgICAg
IEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2Jq
ZWN0X2luaXQoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogcmVxdWVzdCkKLXsKLSAgICBX
ZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9BQ1RJVkVfRE9NX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYp
IFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0
X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRl
c3RBY3RpdmVET01PYmplY3QqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5leHRDaGlsZCkKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qoc2VsZikpOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5leHRDaGlsZCkpOwotICAgIFdlYkNv
cmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
V2ViQ29yZTo6Tm9kZSogY29udmVydGVkTmV4dENoaWxkID0gV2ViS2l0Ojpjb3JlKG5leHRDaGls
ZCk7Ci0gICAgaXRlbS0+ZXhjaXRpbmdGdW5jdGlvbigqY29udmVydGVkTmV4dENoaWxkKTsKLX0K
LQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKFdl
YktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChtZXNzYWdlKTsKLSAgICBXZWJDb3JlOjpUZXN0QWN0aXZlRE9N
T2JqZWN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZE1lc3NhZ2UgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSk7Ci0gICAgaXRlbS0+
cG9zdE1lc3NhZ2UoY29udmVydGVkTWVzc2FnZSk7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVz
dF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01UZXN0QWN0aXZl
RE9NT2JqZWN0KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZF
X0RPTV9PQkpFQ1Qoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3Qq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+ZXhj
aXRpbmdBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2
ZURPTU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMDQ2N2E2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuaAorKysgL2Rl
di9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpZm5kZWYgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdF9oCi0jZGVmaW5lIFdlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3RfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVf
QVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0
YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
QUNUSVZFX0RPTV9PQkpFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21f
b2JqZWN0X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9NX09C
SkVDVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9BQ1RJVkVfRE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2
ZURPTU9iamVjdCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVEVTVF9BQ1RJVkVfRE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9i
amVjdENsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RF
U1RfQUNUSVZFX0RPTV9PQkpFQ1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QpKQotI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNU
SVZFX0RPTV9PQkpFQ1QsIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RDbGFzcykpCi0KLXN0
cnVjdCBfV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0
IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9i
amVjdENsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19Owot
Ci1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0
X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0
X2V4Y2l0aW5nX2Z1bmN0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3QKLSAqIEBuZXh0Q2hpbGQ6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X2V4Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3Qq
IHNlbGYsIFdlYktpdERPTU5vZGUqIG5leHRDaGlsZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X3Bvc3RfbWVzc2FnZToKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0QWN0aXZlRE9NT2JqZWN0Ci0gKiBAbWVzc2FnZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0X3Bvc3RfbWVzc2FnZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0
KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X2FjdGl2ZV9kb21fb2JqZWN0X2dldF9leGNpdGluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RBY3RpdmVET01PYmplY3QKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2dldF9leGNpdGluZ19hdHRyKFdlYktpdERPTVRlc3RBY3Rp
dmVET01PYmplY3QqIHNlbGYpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9i
amVjdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0LnN5bWJvbHMgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZl
RE9NT2JqZWN0LnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmN2FjMWEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAg
LTEsMyArMCwwIEBACi12b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9leGNp
dGluZ19mdW5jdGlvbihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiwgV2ViS2l0RE9NTm9k
ZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9wb3N0X21lc3NhZ2Uo
V2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtp
dF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01U
ZXN0QWN0aXZlRE9NT2JqZWN0KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJh
Y2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2ViMzhkLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RDYWxsYmFjay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0g
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldlYktpdERPTVRlc3RDYWxsYmFjay5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgot
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZh
dGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01GbG9hdDMyQXJyYXlQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RDYWxsYmFja1By
aXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Tm9kZVByaXZhdGUuaCIKLSNpbmNsdWRl
ICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DQUxM
QkFDS19HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLLCBXZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRl
KQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSB7Ci0jaWYg
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDYWxsYmFj
az4gY29yZU9iamVjdDsKLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLX0gV2Vi
S2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZTsKLQotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBraXQoV2Vi
Q29yZTo6VGVzdENhbGxiYWNrKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
LSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDSyhyZXQpOwotCi0gICAgcmV0
dXJuIHdyYXBUZXN0Q2FsbGJhY2sob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBj
b3JlKFdlYktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDYWxsYmFjayo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RDYWxsYmFjayog
d3JhcFRlc3RDYWxsYmFjayhXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmVPYmplY3QpCi17Ci0g
ICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJB
Q0soZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLLCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0KLUdfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NVGVzdENhbGxiYWNrLCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2ssIFdFQktJVF9ET01f
VFlQRV9PQkpFQ1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DQUxMQkFDS19HRVRfUFJJVkFURShvYmplY3QpOwot
I2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykKLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSgpOwot
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0
X2NhbGxiYWNrX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewot
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQotICAgIFdlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RF
U1RfQ0FMTEJBQ0tfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxiYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2Jq
ZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYt
PmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5U
SEVTSVMpCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X2NhbGxiYWNrX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MqIHJlcXVl
c3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUpKTsKLSAgICBnb2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NvbnN0cnVjdG9y
OwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
ZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19pbml0
KFdlYktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0Q2Fs
bGJhY2tQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0dFVF9QUklWQVRF
KHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSgp
OwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9u
b19wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDSyhzZWxm
KSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhOb1BhcmFt
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19jYWxsYmFja193aXRoX2FycmF5X3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwg
V2ViS2l0RE9NRmxvYXQzMkFycmF5KiBhcnJheVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hf
U1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiks
IEZBTFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJB
UlJBWShhcnJheVBhcmFtKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkqIGNvbnZl
cnRlZEFycmF5UGFyYW0gPSBXZWJLaXQ6OmNvcmUoYXJyYXlQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tXaXRoQXJyYXlQYXJhbSgqY29udmVydGVkQXJyYXlQYXJh
bSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFVOVVNFRF9QQVJBTShhcnJheVBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOwotI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCi1n
Ym9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzcnpQYXJhbSwgY29uc3QgZ2NoYXIqIHN0ckFyZykKLXsKLSNpZiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLKHNlbGYp
LCBGQUxTRSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3J6UGFyYW0sIEZBTFNFKTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJBcmcsIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0
Q2FsbGJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0o
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHNyelBhcmFtKSksIGNvbnZlcnRlZFN0ckFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzcnpQYXJhbSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29s
ZWFuPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2xv
bmcgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJu
X3R5cGUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKQot
ewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfQ0FMTEJBQ0soc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFy
ZywgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChzdHJBcmcpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNhbGxiYWNrV2l0aE5vbkJv
b2xSZXR1cm5UeXBlKGNvbnZlcnRlZFN0ckFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxs
YmFja193aXRoX3N0cmluZ19saXN0KFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0
RE9NRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiksIEZBTFNF
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElT
VChsaXN0UGFyYW0pLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGNvbnZlcnRl
ZExpc3RQYXJhbSA9IFdlYktpdDo6Y29yZShsaXN0UGFyYW0pOwotICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoKmNvbnZlcnRlZExpc3RQYXJhbSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVO
VVNFRF9QQVJBTShsaXN0UGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4o
MCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFu
IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW4oV2ViS2l0RE9N
VGVzdENhbGxiYWNrKiBzZWxmLCBnYm9vbGVhbiBib29sUGFyYW0pCi17Ci0jaWYgRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDSyhz
ZWxmKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhCb29s
ZWFuKGJvb2xQYXJhbSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShib29sUGFyYW0pOwotICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
ICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja19yZXF1
aXJlc190aGlzX3RvX3Bhc3MoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBnbG9uZyBsb25n
UGFyYW0sIFdlYktpdERPTVRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQotewotI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0so
c2VsZiksIEZBTFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfTk9ERSh0ZXN0Tm9kZVBhcmFtKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFj
ayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogY29u
dmVydGVkVGVzdE5vZGVQYXJhbSA9IFdlYktpdDo6Y29yZSh0ZXN0Tm9kZVBhcmFtKTsKLSAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhsb25nUGFy
YW0sICpjb252ZXJ0ZWRUZXN0Tm9kZVBhcmFtKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKGxvbmdQYXJhbSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRlc3ROb2RlUGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
Ym9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGZlOTM5ZGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmbmRlZiBXZWJLaXRET01UZXN0Q2FsbGJhY2tfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q2Fs
bGJhY2tfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
LSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JF
R0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0FMTEJBQ0sgICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9DQUxMQkFDSyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDSywgV2ViS2l0RE9NVGVz
dENhbGxiYWNrKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9U
RVNUX0NBTExCQUNLLCBXZWJLaXRET01UZXN0Q2FsbGJhY2tDbGFzcykKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX0NBTExCQUNLKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9JU19URVNUX0NBTExCQUNLX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLKSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLLCBXZWJLaXRE
T01UZXN0Q2FsbGJhY2tDbGFzcykpCi0KLS8qKgotICogV0VCS0lUX0RPTV9URVNUX0NBTExCQUNL
X0NPTlNUQU5UMToKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfQ09OU1RB
TlQxIDEKLQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfQ09OU1RBTlQyOgotICov
Ci0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDS19DT05TVEFOVDIgMgotCi1zdHJ1Y3Qg
X1dlYktpdERPTVRlc3RDYWxsYmFjayB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MgewotICAgIFdl
YktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUK
LXdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbToKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0Q2FsbGJhY2sKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9fcGFyYW0oV2ViS2l0RE9NVGVzdENh
bGxiYWNrKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJh
Y2tfd2l0aF9hcnJheV9wYXJhbToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2sK
LSAqIEBhcnJheVBhcmFtOiBBICNXZWJLaXRET01GbG9hdDMyQXJyYXkKLSAqCi0gKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfYXJyYXlf
cGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkq
IGFycmF5UGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFj
a193aXRoX3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX3BhcmFtOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RDYWxsYmFjawotICogQHNyelBhcmFtOiBBICNnY2hhcgotICogQHN0ckFyZzogQSAj
Z2NoYXIKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNr
X2NhbGxiYWNrX3dpdGhfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfcGFyYW0oV2ViS2l0RE9NVGVz
dENhbGxiYWNrKiBzZWxmLCBjb25zdCBnY2hhciogc3J6UGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJB
cmcpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25v
bl9ib29sX3JldHVybl90eXBlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFjawot
ICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0
X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVz
dENhbGxiYWNrKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdDoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0Q2FsbGJhY2sKLSAqIEBsaXN0UGFyYW06IEEgI1dlYktpdERPTURPTVN0
cmluZ0xpc3QKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxi
YWNrX2NhbGxiYWNrX3dpdGhfc3RyaW5nX2xpc3QoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxm
LCBXZWJLaXRET01ET01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW46Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdENhbGxiYWNrCi0gKiBAYm9vbFBhcmFtOiBBICNnYm9vbGVhbgotICoKLSAqIFJl
dHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9i
b29sZWFuKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgZ2Jvb2xlYW4gYm9vbFBhcmFtKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfcmVxdWlyZXNfdGhp
c190b19wYXNzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFjawotICogQGxvbmdQ
YXJhbTogQSAjZ2xvbmcKLSAqIEB0ZXN0Tm9kZVBhcmFtOiBBICNXZWJLaXRET01UZXN0Tm9kZQot
ICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJh
Y2tfcmVxdWlyZXNfdGhpc190b19wYXNzKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgZ2xv
bmcgbG9uZ1BhcmFtLCBXZWJLaXRET01UZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSk7Ci0KLUdfRU5E
X0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRp
ZiAvKiBXZWJLaXRET01UZXN0Q2FsbGJhY2tfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLnN5
bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2FsbGJhY2suc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OTEwZmE5NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suc3ltYm9scworKysgL2Rldi9udWxsCkBA
IC0xLDcgKzAsMCBAQAotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNr
X3dpdGhfbm9fcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKikKLWdib29sZWFuIHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2FycmF5X3BhcmFtKFdlYktpdERPTVRlc3RD
YWxsYmFjayosIFdlYktpdERPTUZsb2F0MzJBcnJheSopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rl
c3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9wYXJhbShX
ZWJLaXRET01UZXN0Q2FsbGJhY2sqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBj
b25zdCBnY2hhciopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0
aF9ub25fYm9vbF9yZXR1cm5fdHlwZShXZWJLaXRET01UZXN0Q2FsbGJhY2sqLCBjb25zdCBnY2hh
ciopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJp
bmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2sqLCBXZWJLaXRET01ET01TdHJpbmdMaXN0KikK
LWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW4o
V2ViS2l0RE9NVGVzdENhbGxiYWNrKiwgZ2Jvb2xlYW4pCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rl
c3RfY2FsbGJhY2tfY2FsbGJhY2tfcmVxdWlyZXNfdGhpc190b19wYXNzKFdlYktpdERPTVRlc3RD
YWxsYmFjayosIGdsb25nLCBXZWJLaXRET01UZXN0Tm9kZSopCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJh
Y2tGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU0NWU1MjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2Fs
bGJhY2tGdW5jdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01GbG9hdDMyQXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJp
dmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3ROb2RlUHJpdmF0ZS5oIgotI2luY2x1ZGUg
ImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExC
QUNLX0ZVTkNUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT04sIFdlYktpdERPTVRl
c3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRl
c3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uPiBjb3JlT2JqZWN0Owot
I2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotfSBXZWJLaXRET01UZXN0Q2FsbGJh
Y2tGdW5jdGlvblByaXZhdGU7Ci0KLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBraXQoV2Vi
Q29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9O
KHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RDYWxsYmFja0Z1bmN0aW9uKG9iaik7Ci19Ci0K
LVdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uKiBjb3JlKFdlYktpdERPTVRlc3RDYWxsYmFj
a0Z1bmN0aW9uKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiog
d3JhcFRlc3RDYWxsYmFja0Z1bmN0aW9uKFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uKiBj
b3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lU
X0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
VEVTVF9DQUxMQkFDS19GVU5DVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKQotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0
aW9uLCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb24sIFdFQktJVF9ET01fVFlQRV9P
QkpFQ1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVu
Y3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OX0dF
VF9QUklWQVRFKG9iamVjdCk7Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotI2Vu
ZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0
Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
LX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9j
b25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdP
YmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0
KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rp
b25fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
LSAgICBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24q
PihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRP
TU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLSNlbmRp
ZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2xhc3NfaW5pdChX
ZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJL
aXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NvbnN0cnVjdG9y
OwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
ZnVuY3Rpb25fZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19mdW5jdGlvbl9pbml0KFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiByZXF1ZXN0
KQotewotICAgIFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVTVF9DQUxMQkFDS19GVU5DVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAg
ICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSgpOwotfQot
Ci1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0
aF9ub19wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZikKLXsKLSNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0NB
TExCQUNLX0ZVTkNUSU9OKHNlbGYpLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNr
RnVuY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+Y2FsbGJhY2tXaXRoTm9QYXJhbSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xl
YW4+KDApOwotI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9v
bGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9hcnJh
eV9wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRmxv
YXQzMkFycmF5KiBhcnJheVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT04oc2VsZiksIEZB
TFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJBUlJB
WShhcnJheVBhcmFtKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9u
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkZsb2F0MzJBcnJheSog
Y29udmVydGVkQXJyYXlQYXJhbSA9IFdlYktpdDo6Y29yZShhcnJheVBhcmFtKTsKLSAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhBcnJheVBhcmFtKCpjb252ZXJ0ZWRBcnJh
eVBhcmFtKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7Ci0gICAgVU5VU0VEX1BBUkFNKGFycmF5UGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19
Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193
aXRoX3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1
bmN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogc3J6UGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJBcmcp
Ci17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9DQUxMQkFDS19GVU5DVElPTihzZWxmKSwgRkFMU0UpOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNyelBhcmFtLCBGQUxTRSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3Ry
QXJnLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJnID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
Y2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oV2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNyelBhcmFtKSksIGNv
bnZlcnRlZFN0ckFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzcnpQYXJhbSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHN0ckFyZyk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5
bnRoZXNpcyIpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNlbmRpZiAv
KiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0
X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2Vi
S2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcpCi17
Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9DQUxMQkFDS19GVU5DVElPTihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc3RyQXJnLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2tGdW5jdGlvbiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJBcmcgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5j
YWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShjb252ZXJ0ZWRTdHJBcmcpOwotICAgIHJldHVy
biByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFS
QU0oc3RyQXJnKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2gg
U3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8q
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rl
c3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJLaXRET01U
ZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogbGlzdFBh
cmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElTVChsaXN0UGFyYW0pLCBG
QUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogY29udmVydGVkTGlzdFBh
cmFtID0gV2ViS2l0Ojpjb3JlKGxpc3RQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdCgqY29udmVydGVkTGlzdFBhcmFtKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BB
UkFNKGxpc3RQYXJhbSk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3Bl
ZWNoIFN5bnRoZXNpcyIpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNl
bmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2Jvb2xlYW4gd2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfYm9vbGVhbihXZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgZ2Jvb2xlYW4gYm9vbFBhcmFtKQotewotI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
Q0FMTEJBQ0tfRlVOQ1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJh
Y2tGdW5jdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhCb29sZWFuKGJvb2xQYXJhbSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShi
b29sUGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBT
eW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYg
LyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja19yZXF1aXJlc190aGlzX3RvX3Bhc3MoV2Vi
S2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24qIHNlbGYsIGdsb25nIGxvbmdQYXJhbSwgV2ViS2l0
RE9NVGVzdE5vZGUqIHRlc3ROb2RlUGFyYW0pCi17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDS19GVU5DVElPTihzZWxm
KSwgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9O
T0RFKHRlc3ROb2RlUGFyYW0pLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVu
Y3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6VGVzdE5vZGUq
IGNvbnZlcnRlZFRlc3ROb2RlUGFyYW0gPSBXZWJLaXQ6OmNvcmUodGVzdE5vZGVQYXJhbSk7Ci0g
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MobG9u
Z1BhcmFtLCAqY29udmVydGVkVGVzdE5vZGVQYXJhbSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShsb25nUGFyYW0p
OwotICAgIFVOVVNFRF9QQVJBTSh0ZXN0Tm9kZVBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Z2Jvb2xlYW4+KDApOwotI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5YTc4MS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2FsbGJhY2tGdW5jdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0g
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgot
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdENhbGxiYWNr
RnVuY3Rpb25faAotI2RlZmluZSBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbl9oCi0KLSNp
ZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQot
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDS19GVU5DVElPTiAgICAgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fZ2V0X3R5cGUoKSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNL
X0ZVTkNUSU9OLCBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbikpCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9DQUxMQkFDS19GVU5DVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDS19GVU5D
VElPTiwgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25DbGFzcykKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX0NBTExCQUNLX0ZVTkNUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNU
SU9OKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLX0ZVTkNUSU9OX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExC
QUNLX0ZVTkNUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OLCBXZWJLaXRET01U
ZXN0Q2FsbGJhY2tGdW5jdGlvbkNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01UZXN0Q2FsbGJh
Y2tGdW5jdGlvbiB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25DbGFzcyB7Ci0gICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vX3BhcmFt
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uCi0gKgotICogUmV0
dXJuczogQSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFj
a193aXRoX25vX3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxmKTsKLQot
LyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9h
cnJheV9wYXJhbToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgot
ICogQGFycmF5UGFyYW06IEEgI1dlYktpdERPTUZsb2F0MzJBcnJheQotICoKLSAqIFJldHVybnM6
IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0
aF9hcnJheV9wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0
RE9NRmxvYXQzMkFycmF5KiBhcnJheVBhcmFtKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
Y2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9w
YXJhbToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgotICogQHNy
elBhcmFtOiBBICNnY2hhcgotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBn
Ym9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhf
c2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rp
b24qIHNlbGYsIGNvbnN0IGdjaGFyKiBzcnpQYXJhbSwgY29uc3QgZ2NoYXIqIHN0ckFyZyk7Ci0K
LS8qKgotICogd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhf
bm9uX2Jvb2xfcmV0dXJuX3R5cGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENhbGxiYWNr
RnVuY3Rpb24KLSAqIEBzdHJBcmc6IEEgI2djaGFyCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtp
dF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVy
bl90eXBlKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciog
c3RyQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2Fs
bGJhY2tfd2l0aF9zdHJpbmdfbGlzdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJh
Y2tGdW5jdGlvbgotICogQGxpc3RQYXJhbTogQSAjV2ViS2l0RE9NRE9NU3RyaW5nTGlzdAotICoK
LSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25f
Y2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiog
c2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9ib29sZWFuOgotICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uCi0gKiBAYm9vbFBhcmFtOiBB
ICNnYm9vbGVhbgotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2Fs
bGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9ib29sZWFuKFdlYktpdERPTVRlc3RDYWxsYmFj
a0Z1bmN0aW9uKiBzZWxmLCBnYm9vbGVhbiBib29sUGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja19yZXF1aXJlc190aGlzX3RvX3Bhc3M6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24KLSAqIEBsb25nUGFy
YW06IEEgI2dsb25nCi0gKiBAdGVzdE5vZGVQYXJhbTogQSAjV2ViS2l0RE9NVGVzdE5vZGUKLSAq
Ci0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9u
X2NhbGxiYWNrX3JlcXVpcmVzX3RoaXNfdG9fcGFzcyhXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5j
dGlvbiogc2VsZiwgZ2xvbmcgbG9uZ1BhcmFtLCBXZWJLaXRET01UZXN0Tm9kZSogdGVzdE5vZGVQ
YXJhbSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbl9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzM4YWQwZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUu
aCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNU
UlVDVE9SX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBX
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJp
dmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvcj4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvciogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0g
ICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNU
UlVDVE9SKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvcihvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3Ry
dWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBy
ZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yKiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFdlYkNv
cmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZU9iamVjdCkKLXsKLSAg
ICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DTEFTU19X
SVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9U
RVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJ
TkVfVFlQRShXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IsIHdlYmtp
dF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3IsIFdFQktJVF9ET01f
VFlQRV9PQkpFQ1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pz
X2J1aWx0aW5fY29uc3RydWN0b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklW
QVRFKG9iamVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9j
bGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwg
Z3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNv
bnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNv
bnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pT
X0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7
Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
Y2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdl
YktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUpKTsKLSAgICBn
b2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNf
YnVpbHRpbl9jb25zdHJ1Y3Rvcl9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9m
aW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNf
YnVpbHRpbl9jb25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvciogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhf
SlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHBy
aXYpIFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUoKTsK
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDY4NmRkYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iu
aAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
X2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9E
RUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJ
Tl9DT05TVFJVQ1RPUiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19i
dWlsdGluX2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9D
TEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lU
SF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlM
VElOX0NPTlNUUlVDVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05T
VFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3Mp
Ci0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RS
VUNUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RP
Ul9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01f
VFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERP
TVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0
IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVu
dF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9jbGFzc193
aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xT
Ci0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBX
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFjOWJiNmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Lmgi
Ci0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0
ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1RfR0VU
X1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9N
X1RZUEVfVEVTVF9DVVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNULCBX
ZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcml2YXRl
KQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdD4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdCogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAg
ICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5U
RVJGQUNFX09CSkVDVChyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Qob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4g
cmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhO
b0ludGVyZmFjZU9iamVjdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdCogd3JhcFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdChX
ZWJDb3JlOjpUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIGNvcmVP
YmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9N
X1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVChnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5U
RVJGQUNFX09CSkVDVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0Q3Vz
dG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QsIHdlYmtpdF9kb21fdGVzdF9jdXN0
b21fY29uc3RydWN0b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0LCBXRUJLSVRfRE9NX1RZUEVf
T0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9y
X3dpdGhfbm9faW50ZXJmYWNlX29iamVjdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0g
ICAgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DVVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19J
TlRFUkZBQ0VfT0JKRUNUX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+
V2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0
ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0
b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Ci19Ci0KLXN0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVj
dG9yX3dpdGhfbm9faW50ZXJmYWNlX29iamVjdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dpdGhfbm9faW50ZXJmYWNlX29iamVj
dF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0
cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9DVVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUX0dFVF9QUklWQVRF
KG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRl
c3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCo+KFdFQktJVF9ET01fT0JK
RUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsK
LX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1Y3Rvcl93aXRo
X25vX2ludGVyZmFjZV9vYmplY3RfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
LSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSkpOwot
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2Nv
bnN0cnVjdG9yX3dpdGhfbm9faW50ZXJmYWNlX29iamVjdF9jb25zdHJ1Y3RvcjsKLSAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1Y3Rvcl93
aXRoX25vX2ludGVyZmFjZV9vYmplY3RfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0X2lu
aXQoV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KiBy
ZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZmFjZU9iamVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX0NPTlNUUlVD
VE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdFByaXZhdGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmpl
Y3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjNGNhMC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAorKysgL2Rldi9udWxs
CkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0X2gK
LSNkZWZpbmUgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0X2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJ
Tl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9DT05TVFJVQ1RP
Ul9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2N1
c3RvbV9jb25zdHJ1Y3Rvcl93aXRoX25vX2ludGVyZmFjZV9vYmplY3RfZ2V0X3R5cGUoKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFD
RV9PQkpFQ1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJG
QUNFX09CSkVDVCwgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRI
X05PX0lOVEVSRkFDRV9PQkpFQ1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJ
VEhfTk9fSU5URVJGQUNFX09CSkVDVCwgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0Q2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DVVNU
T01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RP
TV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfVEVTVF9DVVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVS
RkFDRV9PQkpFQ1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5U
RVJGQUNFX09CSkVDVCwgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJm
YWNlT2JqZWN0Q2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3Rv
cldpdGhOb0ludGVyZmFjZU9iamVjdCB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0Q2xhc3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29u
c3RydWN0b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0X2dldF90eXBlKHZvaWQpOwotCi1HX0VO
RF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5k
aWYgLyogV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVj
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZh
dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlZDQ3MS4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcml2YXRlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdFByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRo
Tm9JbnRlcmZhY2VPYmplY3RQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RDdXN0b21Db25zdHJ1
Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZh
Y2VPYmplY3QqIHdyYXBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Qo
V2ViQ29yZTo6VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Kik7Ci1X
ZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIGtpdChX
ZWJDb3JlOjpUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqKTsKLVdl
YkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCogY29yZShX
ZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqKTsKLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0
cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGEzOWE0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2
YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9OQU1F
RF9HRVRURVIsIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUpCi0KLXR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlIHsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiBjb3JlT2JqZWN0OwotfSBXZWJL
aXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBraXQoV2ViQ29yZTo6VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKHJldCk7Ci0KLSAg
ICByZXR1cm4gd3JhcFRlc3RDdXN0b21OYW1lZEdldHRlcihvYmopOwotfQotCi1XZWJDb3JlOjpU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNvcmUoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB3cmFwVGVz
dEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogY29yZU9i
amVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01f
VEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DVVNUT01fTkFNRURfR0VUVEVSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRy
KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERP
TVRlc3RDdXN0b21OYW1lZEdldHRlciwgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0
ZXIsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9jdXN0b21fbmFtZWRfZ2V0dGVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBX
ZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9U
RVNUX0NVU1RPTV9OQU1FRF9HRVRURVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAg
IHByaXYtPn5XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKCk7Ci0gICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21f
dGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9y
KHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0K
LSAgICBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBw
cml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0
dGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0K
LSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3Vz
dG9tX25hbWVkX2dldHRlcl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRl
ckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cml2YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVz
dF9jdXN0b21fbmFtZWRfZ2V0dGVyX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9maW5hbGl6ZTsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfaW5pdChX
ZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DVVNU
T01fTkFNRURfR0VUVEVSX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2Vi
S2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZSgpOwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVz
dEN1c3RvbU5hbWVkR2V0dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKHNlbGYpKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPmFub3RoZXJGdW5jdGlvbihjb252
ZXJ0ZWRTdHIpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0
b21OYW1lZEdldHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODU2YzEwLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3Qu
aD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1H
X0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX05BTUVE
X0dFVFRFUiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9n
ZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUihv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NVU1RPTV9OQU1FRF9H
RVRURVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUikpCi0jZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9OQU1FRF9H
RVRURVIpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyIHsK
LSAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJL
aXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xh
c3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0
X2N1c3RvbV9uYW1lZF9nZXR0ZXJfZ2V0X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbjoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotR19FTkRfREVDTFMK
LQotI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdl
YktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5zeW1ib2xzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiZWMzYWQxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdl
dHRlci5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RD
dXN0b21OYW1lZEdldHRlciosIGNvbnN0IGdjaGFyKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDYyZTYyYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgiCi0jaW5j
bHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1Rf
RVZFTlRfQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVz
dEV2ZW50Q29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RFdmVudENvbnN0
cnVjdG9yUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RFdmVu
dENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIG9iaikKLXsK
LSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9U
RVNUX0VWRU5UX0NPTlNUUlVDVE9SKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RFdmVudENv
bnN0cnVjdG9yKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3Jl
KFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01U
ZXN0RXZlbnRDb25zdHJ1Y3Rvciogd3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKFdlYkNvcmU6OlRl
c3RFdmVudENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
R19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciwgd2Via2l0X2RvbV90
ZXN0X2V2ZW50X2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsK
LSAgICBQUk9QXzAsCi0gICAgUFJPUF9BVFRSMSwKLSAgICBQUk9QX0FUVFIyLAotICAgIFBST1Bf
QVRUUjMsCi19OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0
b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RP
Ul9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9y
Z2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RF
dmVudENvbnN0cnVjdG9yUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3Iq
IHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1Iob2JqZWN0KTsKLQotICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9BVFRSMToKLSAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9y
X2dldF9hdHRyMShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSMjoK
LSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50
X2NvbnN0cnVjdG9yX2dldF9hdHRyMihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9BVFRSMzoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMyhzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0
cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVj
dENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9i
amVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SX0dFVF9Q
UklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01U
ZXN0RXZlbnRDb25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0
RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9y
ID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yOwotICAgIGdv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3Jf
ZmluYWxpemU7Ci0gICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rl
c3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FU
VFIxLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImF0dHIxIiwK
LSAgICAgICAgICAgICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMSIsCi0gICAgICAgICAgICAi
cmVhZC1vbmx5IGdjaGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMSIsCi0gICAgICAgICAg
ICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0FUVFIyLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAg
ImF0dHIyIiwKLSAgICAgICAgICAgICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMiIsCi0gICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMiIsCi0g
ICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0g
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNz
LAotICAgICAgICBQUk9QX0FUVFIzLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAg
ICAgICAgICAgImF0dHIzIiwKLSAgICAgICAgICAgICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRy
MyIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjph
dHRyMyIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rv
cl9pbml0KFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIFdl
YktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9FVkVOVF9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYp
IFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSgpOwotfQotCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShXZWJLaXRET01UZXN0RXZl
bnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VW
RU5UX0NPTlNUUlVDVE9SKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1
Y3RvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJL
aXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX0VWRU5UX0NPTlNUUlVDVE9SKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0
RXZlbnRDb25zdHJ1Y3RvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigpKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dl
dF9hdHRyMyhXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSNpZiBFTkFC
TEUoU1BFQ0lBTF9FVkVOVCkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VWRU5UX0NP
TlNUUlVDVE9SKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyMygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiU3BlY2lhbCBFdmVudCIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUNJ
QUxfRVZFTlQpICovCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZl
bnRDb25zdHJ1Y3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGEyMGQ0Li4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiAr
MCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERP
TVRlc3RFdmVudENvbnN0cnVjdG9yX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3JfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
LSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JF
R0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRfQ09OU1RSVUNU
T1IgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF90eXBl
KCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
VEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
RVZFTlRfQ09OU1RSVUNUT1IsIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xhc3MpCi0j
ZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9F
VkVOVF9DT05TVFJVQ1RPUikpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9DT05T
VFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUikpCi0jZGVmaW5lIFdFQktJVF9E
T01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RP
UiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5z
dGFuY2U7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xhc3Mg
ewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9B
UEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSh2b2lk
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIx
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yCi0gKgotICogUmV0
dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9B
UEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxKFdl
YktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RFdmVudENvbnN0cnVjdG9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rl
c3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIyKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVj
dG9yKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3Jf
Z2V0X2F0dHIzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yCi0g
KgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0
X2F0dHIzKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBzZWxmKTsKLQotR19FTkRfREVD
TFMKLQotI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8q
IFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5zeW1ib2xzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyMmI3MTdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVj
dG9yLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWdjaGFyKiB3ZWJraXRf
ZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxKFdlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0
X2F0dHIyKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVu
dFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2OWVhNzIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudFRhcmdldC5oIgot
Ci0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR09iamVjdEV2ZW50
TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdl
dC5oIgotI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUu
aCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9E
T01fVEVTVF9FVkVOVF9UQVJHRVRfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9UQVJHRVQsIFdlYktpdERP
TVRlc3RFdmVudFRhcmdldFByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0
RXZlbnRUYXJnZXRQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0
PiBjb3JlT2JqZWN0OwotfSBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlOwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQoV2ViQ29yZTo6
VGVzdEV2ZW50VGFyZ2V0KiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVQocmV0KTsKLQotICAgIHJl
dHVybiB3cmFwVGVzdEV2ZW50VGFyZ2V0KG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFdmVudFRh
cmdldCogY29yZShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHJlcXVlc3QpCi17Ci0gICAgcmV0
dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01U
ZXN0RXZlbnRUYXJnZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFy
Z2V0KiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4g
V0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBF
X1RFU1RfRVZFTlRfVEFSR0VULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdl
YkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOwotICAgIGlmICgh
Y29yZUV2ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2ViQ29yZTo6VGVzdEV2ZW50
VGFyZ2V0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0
LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwotICAgIGlmIChlYykg
ewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24o
ZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV90ZXN0X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKLXsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6R09iamVj
dEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRh
cmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0gICAgV2ViQ29yZTo6VGVzdEV2
ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFy
Z2V0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudDsKLSAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9hZGRfZXZl
bnRfbGlzdGVuZXI7Ci0gICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21fdGVzdF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOwotfQotCi1HX0RFRklO
RV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQsIHdlYmtpdF9kb21fdGVz
dF9ldmVudF90YXJnZXQsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVS
RkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KSkKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVRfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRl
KCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0
X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJv
cGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJL
aXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VWRU5U
X1RBUkdFVF9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfY2xhc3NfaW5pdChXZWJLaXRE
T01UZXN0RXZlbnRUYXJnZXRDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdEV2
ZW50VGFyZ2V0UHJpdmF0ZSkpOwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJr
aXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2ZpbmFsaXplOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0KiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RFdmVudFRhcmdldFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUX0dFVF9QUklWQVRFKHJl
cXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZSgp
OwotfQotCi1XZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW0o
V2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBzZWxmLCBndWxvbmcgaW5kZXgpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9UQVJHRVQoc2VsZiksIDApOwotICAgIFdlYkNv
cmU6OlRlc3RFdmVudFRhcmdldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0o
aW5kZXgpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LnN5bWJv
bHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYjQ3MzkuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0LnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1XZWJLaXRE
T01Ob2RlKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVzdEV2
ZW50VGFyZ2V0KiwgZ3Vsb25nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0
aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhNTlkYi4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0RXhjZXB0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5o
IgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRl
LmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfRVhDRVBUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVhDRVBUSU9OLCBXZWJLaXRET01UZXN0
RXhjZXB0aW9uUHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RFeGNlcHRp
b25Qcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV4Y2VwdGlvbj4gY29yZU9iamVj
dDsKLX0gV2ViS2l0RE9NVGVzdEV4Y2VwdGlvblByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1XZWJLaXRET01UZXN0RXhjZXB0aW9uKiBraXQoV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiog
b2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9p
bnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJL
SVRfRE9NX1RFU1RfRVhDRVBUSU9OKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RFeGNlcHRp
b24ob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiogY29yZShXZWJLaXRET01UZXN0
RXhjZXB0aW9uKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGVzdEV4Y2VwdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RFeGNlcHRpb24qIHdyYXBUZXN0RXhjZXB0
aW9uKFdlYkNvcmU6OlRlc3RFeGNlcHRpb24qIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNv
cmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9FWENFUFRJT04sICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5F
X1RZUEUoV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbiwgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbiwg
V0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1Bf
TkFNRSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25fZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VYQ0VQVElPTl9HRVRfUFJJVkFURShvYmplY3QpOwot
Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlKCk7Ci0gICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0
aW9uX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RFeGNlcHRp
b24qIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OKG9iamVjdCk7Ci0KLSAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfTkFNRToKLSAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9nZXRfbmFtZShzZWxm
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2V4Y2Vw
dGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBH
T2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9u
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0RXhjZXB0aW9uUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9FWENFUFRJT05fR0VUX1BSSVZBVEUob2JqZWN0
KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV4Y2Vw
dGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwot
Ci0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V4
Y2VwdGlvbl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RFeGNlcHRpb25DbGFzcyogcmVxdWVzdENs
YXNzKQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNz
LCBzaXplb2YoV2ViS2l0RE9NVGVzdEV4Y2VwdGlvblByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xh
c3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9jb25zdHJ1Y3RvcjsK
LSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9m
aW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVz
dF9leGNlcHRpb25fZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05BTUUsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAibmFtZSIsCi0gICAgICAgICAg
ICAiVGVzdEV4Y2VwdGlvbjpuYW1lIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRl
c3RFeGNlcHRpb246bmFtZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9leGNl
cHRpb25faW5pdChXZWJLaXRET01UZXN0RXhjZXB0aW9uKiByZXF1ZXN0KQotewotICAgIFdlYktp
dERPTVRlc3RFeGNlcHRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VYQ0VQVElP
Tl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RFeGNl
cHRpb25Qcml2YXRlKCk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dl
dF9uYW1lKFdlYktpdERPTVRlc3RFeGNlcHRpb24qIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9FWENFUFRJT04oc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RFeGNl
cHRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLnN5bWJvbHMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ODg5NTcuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2Vw
dGlvbi5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9leGNlcHRpb25fZ2V0X25hbWUoV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbiopCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMWZhMDQuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAK
LS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgotCi0jaW5jbHVkZSAi
Q1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRv
VVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRSwgV2ViS2l0RE9NVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGVQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEdlbmVyYXRl
SXNSZWFjaGFibGU+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlKiBraXQoV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIG9iaikK
LXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIg
cmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RP
TV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRShyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0
R2VuZXJhdGVJc1JlYWNoYWJsZShvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSogY29yZShXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogcmVxdWVzdCkK
LXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKLX0KLQotV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIHdyYXBUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZShXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogY29yZU9iamVj
dCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVT
VF9HRU5FUkFURV9JU19SRUFDSEFCTEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRE
T01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSwgd2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3Jl
YWNoYWJsZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFURShvYmplY3QpOwot
Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0
ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9nZW5lcmF0ZV9pc19yZWFj
aGFibGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fdGVzdF9nZW5lcmF0ZV9pc19yZWFjaGFibGVfY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0
cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRf
UFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCkt
PmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9jbGFzc19pbml0KFdl
YktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdl
YktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZSkpOwotICAgIGdvYmplY3RDbGFz
cy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2Nv
bnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rf
Z2VuZXJhdGVfaXNfcmVhY2hhYmxlX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2luaXQoV2ViS2l0RE9NVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJM
RV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjg0OThkYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCi0jZGVmaW5l
IFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2gKLQotI2lmZGVmIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRSAgICAgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9E
T01fVEVTVF9HRU5FUkFURV9JU19SRUFDSEFCTEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNf
UkVBQ0hBQkxFLCBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSkpCi0jZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9HRU5FUkFURV9JU19SRUFDSEFCTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJB
VEVfSVNfUkVBQ0hBQkxFLCBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNsYXNzKQot
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9U
RVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9H
RU5FUkFURV9JU19SRUFDSEFCTEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
VEVTVF9HRU5FUkFURV9JU19SRUFDSEFCTEUsIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIHsK
LSAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJL
aXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rl
c3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwot
Ci0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2Vi
S2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLnN5bWJvbHMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRl
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNGQ1Y2MuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCww
IEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlKiB3cmFwVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoV2ViQ29yZTo6VGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUqKTsKLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBraXQoV2Vi
Q29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqKTsKLVdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlKiBjb3JlKFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7Ci19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHbG9i
YWxPYmplY3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTFjNDA4Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RHbG9iYWxPYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAg
QEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0LmgiCi0KLSNpbmNsdWRlICJDU1NJ
bXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEdsb2Jh
bE9iamVjdFByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcu
aCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0j
ZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0xPQkFM
X09CSkVDVCwgV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUpCi0KLXR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OlRlc3RHbG9iYWxPYmplY3Q+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RHbG9iYWxP
YmplY3RQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdEdsb2Jh
bE9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIG9iaikKLXsKLSAgICBpZiAo
IW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0dMT0JB
TF9PQkpFQ1QocmV0KTsKLQotICAgIHJldHVybiB3cmFwVGVzdEdsb2JhbE9iamVjdChvYmopOwot
fQotCi1XZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RHbG9iYWxP
YmplY3QqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpUZXN0R2xvYmFsT2JqZWN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogd3JhcFRlc3RHbG9i
YWxPYmplY3QoV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCogY29yZU9iamVjdCkKLXsKLSAgICBB
U1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JK
RUNUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9HTE9CQUxfT0JKRUNULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QsIHdlYmtpdF9k
b21fdGVzdF9nbG9iYWxfb2JqZWN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsK
LSAgICBQUk9QXzAsCi0gICAgUFJPUF9SRUdVTEFSX0FUVFJJQlVURSwKLSAgICBQUk9QX1BVQkxJ
Q19BTkRfUFJJVkFURV9BVFRSSUJVVEUsCi0gICAgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09O
RElUSU9OQUxfQVRUUklCVVRFLAotICAgIFBST1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVU
RSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0dFVF9QUklWQVRFKG9i
amVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZh
dGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsK
LSAgICBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0dM
T0JBTF9PQkpFQ1Qob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNh
c2UgUFJPUF9SRUdVTEFSX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFVCTElDX0FORF9QUklWQVRF
X0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1
YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09O
RElUSU9OQUxfQVRUUklCVVRFOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVj
dF9zZXRfcHVibGljX2FuZF9wcml2YXRlX2NvbmRpdGlvbmFsX2F0dHJpYnV0ZShzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VO
QUJMRURfQVRfUlVOVElNRV9BVFRSSUJVVEU6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9nbG9i
YWxfb2JqZWN0X3NldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2Vi
S2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JK
RUNUKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1Bf
UkVHVUxBUl9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9yZWd1bGFyX2F0dHJpYnV0ZShzZWxmKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQVRUUklC
VVRFOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rf
Z2xvYmFsX29iamVjdF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2F0dHJpYnV0ZShzZWxmKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09ORElUSU9O
QUxfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2NvbmRpdGlvbmFs
X2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTkFCTEVE
X0FUX1JVTlRJTUVfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0
dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3Bl
cnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29u
c3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktp
dERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0dMT0JB
TF9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCo+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfY2xhc3NfaW5pdChXZWJL
aXRET01UZXN0R2xvYmFsT2JqZWN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRl
c3RHbG9iYWxPYmplY3RQcml2YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9
IHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9maW5hbGl6ZTsK
LSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9nbG9iYWxf
b2JqZWN0X3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9wcm9wZXJ0eTsKLQotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAg
UFJPUF9SRUdVTEFSX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAg
ICAgICAgICAgICJyZWd1bGFyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdEdsb2JhbE9i
amVjdDpyZWd1bGFyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
VGVzdEdsb2JhbE9iamVjdDpyZWd1bGFyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9Q
VUJMSUNfQU5EX1BSSVZBVEVfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAotICAgICAgICAgICAgInB1YmxpYy1hbmQtcHJpdmF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAg
ICAgIlRlc3RHbG9iYWxPYmplY3Q6cHVibGljLWFuZC1wcml2YXRlLWF0dHJpYnV0ZSIsCi0gICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEdsb2JhbE9iamVjdDpwdWJsaWMtYW5kLXBy
aXZhdGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
LSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1BVQkxJQ19BTkRfUFJJVkFURV9D
T05ESVRJT05BTF9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAicHVibGljLWFuZC1wcml2YXRlLWNvbmRpdGlvbmFsLWF0dHJpYnV0ZSIsCi0gICAg
ICAgICAgICAiVGVzdEdsb2JhbE9iamVjdDpwdWJsaWMtYW5kLXByaXZhdGUtY29uZGl0aW9uYWwt
YXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0R2xvYmFsT2Jq
ZWN0OnB1YmxpYy1hbmQtcHJpdmF0ZS1jb25kaXRpb25hbC1hdHRyaWJ1dGUiLAotICAgICAgICAg
ICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAg
ICAgIFBST1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKLSAgICAgICAgICAgICJlbmFibGVkLWF0LXJ1bnRpbWUtYXR0cmlidXRlIiwK
LSAgICAgICAgICAgICJUZXN0R2xvYmFsT2JqZWN0OmVuYWJsZWQtYXQtcnVudGltZS1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RHbG9iYWxPYmplY3Q6ZW5h
YmxlZC1hdC1ydW50aW1lLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfZ2xvYmFsX29iamVjdF9pbml0KFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHJlcXVl
c3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RFU1RfR0xPQkFMX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcg
KHByaXYpIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb24oV2ViS2l0RE9NVGVz
dEdsb2JhbE9iamVjdCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbCh0ZXN0UGFyYW0pOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGVzdFBhcmFtID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHRlc3RQYXJhbSk7Ci0gICAgaXRlbS0+cmVndWxhck9wZXJh
dGlvbihjb252ZXJ0ZWRUZXN0UGFyYW0pOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9i
YWxfb2JqZWN0X2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2Jh
bE9iamVjdCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKLXsKLSNpZiBFTkFCTEUoVEVT
VF9GRUFUVVJFKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNUKHNlbGYp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHRlc3RQYXJhbSk7Ci0gICAgV2ViQ29yZTo6VGVzdEds
b2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRUZXN0UGFyYW0gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGVzdFBhcmFtKTsKLSAg
ICBpdGVtLT5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKGNvbnZlcnRlZFRlc3RQYXJhbSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFt
KTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQot
I2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbihXZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBnbG9uZyB0ZXN0UGFyYW0pCi17Ci0jaWYgRU5BQkxFKFRF
U1RfRkVBVFVSRSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxm
KSk7Ci0gICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBpdGVtLT5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKHRlc3RQYXJhbSk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFt
KTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQot
I2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLWdjaGFyKiB3ZWJraXRfZG9t
X3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEds
b2JhbE9iamVjdCogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JB
TF9PQkpFQ1Qoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+cmVndWxhckF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9yZWd1bGFyX2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2VsZikpOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldFJlZ3VsYXJBdHRy
aWJ1dGUoY29udmVydGVkVmFsdWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfZ2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEds
b2JhbE9iamVjdCogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JB
TF9PQkpFQ1Qoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+cHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNf
YW5kX3ByaXZhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09C
SkVDVChzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6
VGVzdEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAg
aXRlbS0+c2V0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0K
LWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcHVibGljX2FuZF9wcml2
YXRlX2NvbmRpdGlvbmFsX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxm
KQotewotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9HTE9CQUxfT0JKRUNUKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0R2xvYmFsT2Jq
ZWN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0
ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7
Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0dXJlIikKLSAg
ICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29u
ZGl0aW9uYWxfYXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNUKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9u
YWxBdHRyaWJ1dGUoY29udmVydGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUp
ICovCi19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfZW5hYmxl
ZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmKQot
ewotI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9HTE9CQUxfT0JKRUNUKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRlc3QgRmVhdHVyZSIpCi0gICAgcmV0dXJuIDA7Ci0j
ZW5kaWYgLyogRU5BQkxFKFRFU1RfRkVBVFVSRSkgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfZ2xvYmFsX29iamVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5B
QkxFKFRFU1RfRkVBVFVSRSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVD
VChzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVz
dEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRl
bS0+c2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRlc3QgRmVhdHVyZSIpCi0jZW5kaWYgLyog
RU5BQkxFKFRFU1RfRkVBVFVSRSkgKi8KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEdsb2JhbE9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI2Yzc1
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyAr
MCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERP
TVRlc3RHbG9iYWxPYmplY3RfaAotI2RlZmluZSBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0X2gK
LQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNM
UwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QgICAgICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCwg
V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HTE9C
QUxfT0JKRUNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QsIFdlYktpdERPTVRlc3RHbG9i
YWxPYmplY3RDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9H
TE9CQUxfT0JKRUNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfR0xPQkFMX09CSkVDVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9HTE9CQUxfT0JKRUNULCBXZWJL
aXRET01UZXN0R2xvYmFsT2JqZWN0Q2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RHbG9i
YWxPYmplY3QgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3RDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb246Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICogQHRlc3RQYXJhbTogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVj
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbjoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0gKiBAdGVzdFBhcmFtOiBBICNnY2hhcgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktp
dERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0ZXN0UGFyYW0pOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2VuYWJsZWRfYXRfcnVudGltZV9v
cGVyYXRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICogQHRl
c3RQYXJhbTogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9hdF9ydW50
aW1lX29wZXJhdGlvbihXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBnbG9uZyB0ZXN0
UGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9yZWd1
bGFyX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0g
KgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcmVn
dWxhcl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QKLSAqIEB2YWx1ZTogQSAjZ2No
YXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlKFdlYktpdERP
TVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRy
aWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICoKLSAqIFJl
dHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3B1YmxpY19hbmRf
cHJpdmF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19hbmRfcHJpdmF0
ZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICog
QHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfcHVibGljX2FuZF9w
cml2YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dl
dF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0cmlidXRlOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9k
b21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxf
YXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0
aW9uYWxfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QK
LSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19h
bmRfcHJpdmF0ZV9jb25kaXRpb25hbF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVj
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
Z2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0gKgotICogUmV0dXJuczogQSAjZ2NoYXIK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJr
aXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZToKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0gKiBAdmFsdWU6IEEgI2djaGFy
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtp
dF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRl
KFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0K
LUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8K
LSNlbmRpZiAvKiBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJ
bXBsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RJbXBsZW1lbnRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZWZhZTU1MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW1wbGVtZW50cy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw2ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRv
IHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTVRlc3RJbXBsZW1lbnRzLmggYW5kCi0g
ICAgV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0SW1wbGVt
ZW50cy5pZGwsIGFuZCB0aHVzCi0gICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRy
eWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01UZXN0SW1wbGVtZW50cy5oIGFuZAotICAgIFdlYktp
dERPTVRlc3RJbXBsZW1lbnRzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90
IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJ
bXBsZW1lbnRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYWU1NTAuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEltcGxlbWVudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoK
LSAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRo
YXQgV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuaCBhbmQKLSAgICBXZWJLaXRET01UZXN0SW1wbGVt
ZW50cy5jcHAgYXJlIGNyZWF0ZWQgZm9yIFRlc3RJbXBsZW1lbnRzLmlkbCwgYW5kIHRodXMKLSAg
ICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktp
dERPTVRlc3RJbXBsZW1lbnRzLmggYW5kCi0gICAgV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuY3Bw
IGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4K
LSovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjMxN2UxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2Uu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0
SW50ZXJmYWNlLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01UZXN0T2JqUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29u
dmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFDRV9HRVRfUFJJ
VkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQ
RV9URVNUX0lOVEVSRkFDRSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUpCi0KLXR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0
SW50ZXJmYWNlPiBjb3JlT2JqZWN0OwotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLX0gV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGU7Ci0KLSNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1XZWJLaXRET01UZXN0SW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVy
biBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RJ
bnRlcmZhY2Uob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEludGVyZmFjZSogY29yZShXZWJLaXRE
T01UZXN0SW50ZXJmYWNlKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6VGVzdEludGVyZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHdyYXBUZXN0
SW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNT
RVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRFUkZBQ0UsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLUdfREVG
SU5FX1RZUEUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSwgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBS
T1BfSU1QTEVNRU5UU19TVFIxLAotICAgIFBST1BfSU1QTEVNRU5UU19TVFIyLAotICAgIFBST1Bf
SU1QTEVNRU5UU19OT0RFLAotICAgIFBST1BfU1VQUExFTUVOVEFMX1NUUjEsCi0gICAgUFJPUF9T
VVBQTEVNRU5UQUxfU1RSMiwKLSAgICBQUk9QX1NVUFBMRU1FTlRBTF9OT0RFLAotfTsKLQotc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RFU1RfSU5URVJGQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0jaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RJbnRl
cmZhY2VQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQot
ewotICAgIFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBS
T1BfSU1QTEVNRU5UU19TVFIyOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3Nl
dF9pbXBsZW1lbnRzX3N0cjIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVVBQTEVNRU5UQUxfU1RSMjoKLSAgICAgICAgd2Vi
a2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktp
dERPTVRlc3RJbnRlcmZhY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iamVj
dCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5U
U19TVFIxOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjEoc2VsZikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfSU1QTEVNRU5UU19TVFIyOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIo
c2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5UU19OT0RFOgot
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfZ2V0X2ltcGxlbWVudHNfbm9kZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9TVVBQTEVNRU5UQUxfU1RSMToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEoc2VsZikp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1VQUExFTUVOVEFMX1NUUjI6Ci0gICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
Z2V0X3N1cHBsZW1lbnRhbF9zdHIyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQ
Uk9QX1NVUFBMRU1FTlRBTF9OT0RFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlKHNlbGYpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXN0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNl
X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
R09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmpl
Y3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCi0gICAgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RFU1RfSU5URVJGQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29y
ZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqPihXRUJLSVRfRE9N
X09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
OjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgcmV0dXJuIG9iamVjdDsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9jbGFzc19pbml0KFdlYktp
dERPTVRlc3RJbnRlcmZhY2VDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdElu
dGVyZmFjZVByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0
X2RvbV90ZXN0X2ludGVyZmFjZV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3Byb3BlcnR5
OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfSU1QTEVNRU5UU19TVFIxLAot
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImltcGxlbWVudHMtc3Ry
MSIsCi0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLXN0cjEiLAotICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLXN0cjEiLAot
ICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFz
cywKLSAgICAgICAgUFJPUF9JTVBMRU1FTlRTX1NUUjIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCi0gICAgICAgICAgICAiaW1wbGVtZW50cy1zdHIyIiwKLSAgICAgICAgICAgICJUZXN0
SW50ZXJmYWNlOmltcGxlbWVudHMtc3RyMiIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLXN0cjIiLAotICAgICAgICAgICAgIiIsCi0gICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfSU1Q
TEVNRU5UU19OT0RFLAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAgICAgICAg
ImltcGxlbWVudHMtbm9kZSIsCi0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTppbXBsZW1lbnRz
LW5vZGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBUZXN0SW50ZXJm
YWNlOmltcGxlbWVudHMtbm9kZSIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwK
LSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9Q
X1NVUFBMRU1FTlRBTF9TVFIxLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAg
ICAgICAgInN1cHBsZW1lbnRhbC1zdHIxIiwKLSAgICAgICAgICAgICJUZXN0SW50ZXJmYWNlOnN1
cHBsZW1lbnRhbC1zdHIxIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RJbnRl
cmZhY2U6c3VwcGxlbWVudGFsLXN0cjEiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVVBQTEVNRU5UQUxf
U1RSMiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdXBwbGVt
ZW50YWwtc3RyMiIsCi0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtc3Ry
MiIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEludGVyZmFjZTpzdXBwbGVt
ZW50YWwtc3RyMiIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAg
ICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVVBQTEVNRU5UQUxfTk9ERSwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJzdXBwbGVtZW50YWwtbm9kZSIs
Ci0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtbm9kZSIsCi0gICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIFRlc3RJbnRlcmZhY2U6c3VwcGxlbWVudGFs
LW5vZGUiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAg
ICBXZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9J
TlRFUkZBQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01U
ZXN0SW50ZXJmYWNlUHJpdmF0ZSgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfaW1wbGVtZW50c19tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0j
aWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9JTlRFUkZBQ0Uoc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+aW1wbGVtZW50c01ldGhvZDEoKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjIyIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24yMyIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTVRlc3RP
YmoqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QyKFdlYktpdERP
TVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RP
YmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYp
LCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJBcmcsIDApOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoob2JqQXJnKSwgMCk7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRl
c3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0Ojpjb3JlKG9iakFyZyk7Ci0g
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRl
c3RPYmo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbXBsZW1lbnRzTWV0aG9k
Mihjb252ZXJ0ZWRTdHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcsIGVjKSk7Ci0gICAgaWYgKGVjKSB7
Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwot
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFVOVVNFRF9QQVJBTShv
YmpBcmcpOwotICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMjIiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjIzIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFVOVVNFRF9QQVJB
TShvYmpBcmcpOwotICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDEoV2ViS2l0RE9NVGVzdEludGVy
ZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVz
dEludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0
U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QxKCppdGVtKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjExIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xMiIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MTIpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdEludGVy
ZmFjZSogc2VsZiwgY29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqQXJn
LCBHRXJyb3IqKiBlcnJvcikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIp
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFj
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRT
dHJBcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBjb252ZXJ0ZWRPYmpBcmcgPSBXZWJLaXQ6OmNvcmUob2JqQXJnKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBs
ZW1lbnRhbE1ldGhvZDIoKml0ZW0sIGNvbnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZywg
ZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7
Ci0gICAgVU5VU0VEX1BBUkFNKG9iakFyZyk7Ci0gICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCi0gICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQotICAgIHJldHVybiAw
OwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAq
LwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFy
Zyk7Ci0gICAgVU5VU0VEX1BBUkFNKG9iakFyZyk7Ci0gICAgVU5VU0VEX1BBUkFNKGVycm9yKTsK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4g
MDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0
cjEoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMjMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uo
c2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
aW1wbGVtZW50c1N0cjEoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRp
dGlvbjIyIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
MyIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0K
LWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aW1wbGVt
ZW50c1N0cjIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIy
IikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0g
ICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQg
d2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19zdHIyKFdlYktpdERPTVRl
c3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFD
RShzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVz
dEludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+
c2V0SW1wbGVtZW50c1N0cjIoY29udmVydGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMiIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMjMiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKSAqLwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7
Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfZ2V0X2ltcGxlbWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQotewot
I2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFj
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmltcGxlbWVudHNOb2RlKCkpOwotICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjIyIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yMyIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsK
LSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19
Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19ub2RlKFdl
YktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHZhbHVlKQotewotI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfSU5URVJGQUNFKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
Tk9ERSh2YWx1ZSkpOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6
OmNvcmUodmFsdWUpOwotICAgIGl0ZW0tPnNldEltcGxlbWVudHNOb2RlKCpjb252ZXJ0ZWRWYWx1
ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpICovCi0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotZ2NoYXIqIHdlYmtp
dF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIxKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpLCAwKTsKLSAgICBX
ZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50
YWw6OnN1cHBsZW1lbnRhbFN0cjEoaXRlbSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMTIiKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0g
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0
dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KSAqLwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVu
dGFsX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRF
UkZBQ0Uoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
V2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpdGVtKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpKTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVu
dGFsOjpzZXRTdXBwbGVtZW50YWxTdHIyKCppdGVtLCBjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotV2ViS2l0RE9NTm9kZSogd2Via2l0X2Rv
bV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUoV2ViS2l0RE9NVGVzdEludGVy
ZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIFdlYkNv
cmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihXZWJDb3JlOjpUZXN0
U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKCppdGVtKSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQot
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKLSAgICBy
ZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikgKi8KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8qIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxfbm9kZShXZWJLaXRET01UZXN0
SW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFD
RShzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUodmFsdWUp
KTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVl
KTsKLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxOb2RlKCpp
dGVtLCAqY29udmVydGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMTIiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKSAqLwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTE2NmY3Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0SW50ZXJmYWNlX2gKLSNkZWZpbmUgV2ViS2l0
RE9NVGVzdEludGVyZmFjZV9oCi0KLSNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
LQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TU9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRF
UkZBQ0UgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfdHlwZSgpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0lOVEVSRkFD
RSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JTlRF
UkZBQ0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfSU5URVJGQUNFLCBXZWJLaXRET01UZXN0SW50ZXJmYWNlQ2xh
c3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSU5U
RVJGQUNFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRV9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9JTlRFUkZBQ0UpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX0lOVEVSRkFDRSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZUNsYXNzKSkKLQotI2lmIEVO
QUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotLyoqCi0gKiBXRUJLSVRf
RE9NX1RFU1RfSU5URVJGQUNFX0lNUExFTUVOVFNDT05TVEFOVDE6Ci0gKi8KLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0lOVEVSRkFDRV9JTVBMRU1FTlRTQ09OU1RBTlQxIDEKLSNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLQotI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotLyoqCi0gKiBXRUJLSVRfRE9N
X1RFU1RfSU5URVJGQUNFX0lNUExFTUVOVFNDT05TVEFOVDI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX0lOVEVSRkFDRV9JTVBMRU1FTlRTQ09OU1RBTlQyIDIKLSNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLQotI2lmIEVOQUJMRShD
b25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RF
U1RfSU5URVJGQUNFX1NVUFBMRU1FTlRBTENPTlNUQU5UMToKLSAqLwotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfSU5URVJGQUNFX1NVUFBMRU1FTlRBTENPTlNUQU5UMSAxCi0jZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0KLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLS8qKgotICogV0VCS0lUX0RPTV9U
RVNUX0lOVEVSRkFDRV9TVVBQTEVNRU5UQUxDT05TVEFOVDI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX0lOVEVSRkFDRV9TVVBQTEVNRU5UQUxDT05TVEFOVDIgMgotI2VuZGlmIC8qIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwotCi1zdHJ1Y3QgX1dl
YktpdERPTVRlc3RJbnRlcmZhY2UgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFu
Y2U7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RJbnRlcmZhY2VDbGFzcyB7Ci0gICAgV2Vi
S2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQot
d2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2ltcGxlbWVudHNfbWV0aG9kMToKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0SW50ZXJmYWNlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRo
b2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RJbnRlcmZhY2UKLSAqIEBzdHJBcmc6IEEgI2djaGFyCi0gKiBAb2JqQXJnOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2VfaW1wbGVtZW50c19tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNv
bnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJy
b3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21l
dGhvZDE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50
ZXJmYWNlX3N1cHBsZW1lbnRhbF9tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhv
ZDI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICogQHN0ckFyZzogQSAj
Z2NoYXIKLSAqIEBvYmpBcmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJv
cgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0
T2JqKgotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMihXZWJL
aXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01U
ZXN0T2JqKiBvYmpBcmcsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdEludGVyZmFjZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfaW1wbGVtZW50c19zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxlbWVudHNfc3RyMjoK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0SW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAj
Z2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIq
Ci13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoV2ViS2l0RE9N
VGVzdEludGVyZmFjZSogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZV9zZXRfaW1wbGVtZW50c19zdHIyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZh
Y2UKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50
c19zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfaW1wbGVtZW50c19ub2Rl
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UKLSAqCi0gKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKLXdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2VfZ2V0X2ltcGxlbWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9pbXBsZW1lbnRzX25vZGU6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICogQHZhbHVlOiBBICNXZWJL
aXRET01Ob2RlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X2ltcGxlbWVudHNfbm9kZShXZWJLaXRE
T01UZXN0SW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjE6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0
X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEoV2ViS2l0RE9NVGVzdElu
dGVyZmFjZSogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRf
c3VwcGxlbWVudGFsX3N0cjI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQot
ICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxl
bWVudGFsX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZik7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJ
bnRlcmZhY2UKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5v
ZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9N
Tm9kZSoKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlKFdl
YktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9p
bnRlcmZhY2Vfc2V0X3N1cHBsZW1lbnRhbF9ub2RlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RJbnRlcmZhY2UKLSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NTm9kZQotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJm
YWNlX3NldF9zdXBwbGVtZW50YWxfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBX
ZWJLaXRET01Ob2RlKiB2YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0SW50ZXJmYWNl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2Uuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2Uuc3ltYm9s
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmZjBlOC4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
SW50ZXJmYWNlLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi12b2lkIHdl
YmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QxKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqKQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9p
bXBsZW1lbnRzX21ldGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIGNvbnN0IGdjaGFyKiwg
V2ViS2l0RE9NVGVzdE9iaiosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJm
YWNlX2ltcGxlbWVudHNfbWV0aG9kNChXZWJLaXRET01UZXN0SW50ZXJmYWNlKikKLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMShXZWJLaXRET01UZXN0
SW50ZXJmYWNlKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
c3VwcGxlbWVudGFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIGNvbnN0IGdjaGFy
KiwgV2ViS2l0RE9NVGVzdE9iaiosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50
ZXJmYWNlX3N1cHBsZW1lbnRhbF9tZXRob2Q0KFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotZ2No
YXIqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxlbWVudHNfc3RyMShXZWJLaXRE
T01UZXN0SW50ZXJmYWNlKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9p
bXBsZW1lbnRzX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9pbnRlcmZhY2Vfc2V0X2ltcGxlbWVudHNfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNl
KiwgY29uc3QgZ2NoYXIqKQotV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZV9nZXRfaW1wbGVtZW50c19ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9pbXBsZW1lbnRzX25vZGUoV2ViS2l0RE9NVGVzdElu
dGVyZmFjZSosIFdlYktpdERPTU5vZGUqKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotZ2NoYXIq
IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERP
TVRlc3RJbnRlcmZhY2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBw
bGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiwgY29uc3QgZ2NoYXIqKQotV2Vi
S2l0RE9NTm9kZSogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25v
ZGUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2Vfc2V0X3N1cHBsZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqLCBXZWJLaXRE
T01Ob2RlKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RJdGVyYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SXRlcmFibGUuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjRiMjQ0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJdGVyYWJs
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRl
c3RJdGVyYWJsZS5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGUuaCIKLSNpbmNsdWRlICJn
b2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JVEVSQUJM
RV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJ
VF9ET01fVFlQRV9URVNUX0lURVJBQkxFLCBXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlKQot
Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSB7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RJdGVyYWJsZT4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdEl0
ZXJhYmxlUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RJdGVy
YWJsZSoga2l0KFdlYkNvcmU6OlRlc3RJdGVyYWJsZSogb2JqKQotewotICAgIGlmICghb2JqKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSVRFUkFCTEUocmV0
KTsKLQotICAgIHJldHVybiB3cmFwVGVzdEl0ZXJhYmxlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRl
c3RJdGVyYWJsZSogY29yZShXZWJLaXRET01UZXN0SXRlcmFibGUqIHJlcXVlc3QpCi17Ci0gICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SXRlcmFibGUqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01U
ZXN0SXRlcmFibGUqIHdyYXBUZXN0SXRlcmFibGUoV2ViQ29yZTo6VGVzdEl0ZXJhYmxlKiBjb3Jl
T2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RP
TV9URVNUX0lURVJBQkxFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9JVEVSQUJM
RSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SXRlcmFibGUsIHdlYmtp
dF9kb21fdGVzdF9pdGVyYWJsZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2l0ZXJhYmxlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNU
X0lURVJBQkxFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0
RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF9pdGVyYWJsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0
aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2l0ZXJhYmxlX2NvbnN0cnVjdG9yKEdUeXBlIHR5
cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFt
KiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pdGVyYWJsZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rv
cih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwot
Ci0gICAgV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9JVEVSQUJMRV9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SXRlcmFibGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9pdGVyYWJsZV9jbGFzc19pbml0KFdlYktpdERPTVRl
c3RJdGVyYWJsZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0SXRlcmFibGVQ
cml2YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVz
dF9pdGVyYWJsZV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0X2RvbV90ZXN0X2l0ZXJhYmxlX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfaXRlcmFibGVfaW5pdChXZWJLaXRET01UZXN0SXRlcmFibGUqIHJlcXVlc3QpCi17
Ci0gICAgV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9JVEVSQUJMRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERP
TVRlc3RJdGVyYWJsZVByaXZhdGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQwNzRmNTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0j
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUg
V0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9KU19C
VUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4g
Y29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cioga2l0KFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogb2JqKQotewotICAgIGlm
ICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01P
YmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSlNf
QlVJTFRJTl9DT05TVFJVQ1RPUihyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3Iob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiBjb3JlKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkKLXsKLSAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19
Ci0KLVdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVPYmplY3Qp
Ci17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1Rf
SlNfQlVJTFRJTl9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
SlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRE
T01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2Nv
bnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAs
Ci0gICAgUFJPUF9URVNUX0FUVFJJQlVURSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsK
LQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29u
c3RydWN0b3JfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqZWN0KTsK
LQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9URVNUX0FUVFJJQlVU
RToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Rl
c3RfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9y
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvciogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9S
KG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfVEVT
VF9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90ZXN0X2F0dHJpYnV0ZShzZWxmKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0
aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Ci17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0
X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdl
YktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHBy
aXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsK
LQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9q
c19idWlsdGluX2NvbnN0cnVjdG9yX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Vi
a2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3I7Ci0gICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVj
dG9yX2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
LSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfQVRUUklCVVRFLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAgICJ0ZXN0LWF0dHJpYnV0ZSIs
Ci0gICAgICAgICAgICAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOnRlc3QtYXR0cmlidXRlIiwK
LSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjp0ZXN0LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBGQUxTRSwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
anNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvciogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VU
X1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0
aW5fY29uc3RydWN0b3JfdGVzdF9mdW5jdGlvbihXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09O
U1RSVUNUT1Ioc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT50ZXN0RnVuY3Rpb24oKTsKLX0K
LQotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3Rl
c3RfYXR0cmlidXRlKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogc2VsZikKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2Vs
ZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dGVzdEF0
dHJpYnV0ZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Rlc3RfYXR0cmlidXRlKFdlYktpdERPTVRlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvciogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2VsZikpOwotICAgIFdlYkNv
cmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5zZXRUZXN0QXR0cmlidXRlKHZhbHVlKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ1MGM4Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLQotI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0j
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IgICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUoKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Jf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9KU19CVUlM
VElOX0NPTlNUUlVDVE9SKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQotI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JV
SUxUSU5fQ09OU1RSVUNUT1JfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwg
V2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVu
dF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yQ2xhc3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0K
LVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9y
X2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2Nv
bnN0cnVjdG9yX3Rlc3RfZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3Rlc3RfZnVu
Y3Rpb24oV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBzZWxmKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3RfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9nZXRfdGVzdF9hdHRyaWJ1
dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yCi0gKgot
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVj
dG9yX2dldF90ZXN0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3Iq
IHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9y
X3NldF90ZXN0X2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IKLSAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5f
Y29uc3RydWN0b3Jfc2V0X3Rlc3RfYXR0cmlidXRlKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvciogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYg
LyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzOWRhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgot
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3Iq
IHdyYXBUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yKik7Ci1XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGtpdChXZWJDb3Jl
OjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqKTsKLVdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciogY29yZShXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqKTsKLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDYxZDRiMDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgi
Ci0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
UHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUg
V0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVJfR0VUX1BSSVZBVEUob2Jq
KSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9N
RURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLCBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByaXZhdGUgewotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIqIGtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUihyZXQpOwotCi0gICAgcmV0
dXJuIHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihvYmopOwotfQotCi1XZWJDb3JlOjpU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY29yZShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0
PFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
cmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIqIHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9i
amVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RF
TkVSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJ
U1RFTkVSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLCB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lciwg
V0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21l
ZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAg
IFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSX0dFVF9QUklWQVRFKG9iamVjdCk7
Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQ
cml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5
X2xpc3RfbGlzdGVuZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3Rh
dGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0
X2xpc3RlbmVyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfTUVESUFf
UVVFUllfTElTVF9MSVNURU5FUl9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+
KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAg
cmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1
ZXJ5X2xpc3RfbGlzdGVuZXJfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Vi
a2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfY29uc3RydWN0b3I7Ci0gICAg
Z29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0
X2xpc3RlbmVyX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbWVk
aWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9pbml0KFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RF
TkVSX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3N2M3ZjRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaAot
Ci0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xT
Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5F
UiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9n
ZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNU
RU5FUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLCBXZWJLaXRET01U
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9NRURJ
QV9RVUVSWV9MSVNUX0xJU1RFTkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElT
VEVORVIsIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2xhc3MpCi0jZGVmaW5l
IFdFQktJVF9ET01fSVNfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNU
X01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1Rf
TUVESUFfUVVFUllfTElTVF9MSVNURU5FUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJ
U1RFTkVSKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVO
RVJfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiwgV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFu
Y2U7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2xh
c3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJ
VF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2dl
dF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuc3ltYm9scyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZTk3MjYxNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8q
Ci0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIqIHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciopOwotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIqIGtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciopOwotV2Vi
Q29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyog
V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IyYTM2My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktp
dERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgi
Ci0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQ
cml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05T
VFJVQ1RPUiwgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlIHsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERP
TVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdl
YktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3Ry
dWN0b3IqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKHJldCk7Ci0KLSAgICByZXR1cm4g
d3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3ROYW1lZENv
bnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQot
ewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE5hbWVkQ29u
c3RydWN0b3IqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwot
fQotCi1XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciogd3JhcFRlc3ROYW1lZENvbnN0cnVj
dG9yKFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQotewotICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNU
UlVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RP
UiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
ciwgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVj
dG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9HRVRf
UFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHBy
aXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9u
YW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1z
dGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVj
dG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENv
bnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVj
dCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNv
bnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SX0dFVF9QUklW
QVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlRlc3ROYW1lZENvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9i
amVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0
TmFtZWRDb25zdHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0TmFt
ZWRDb25zdHJ1Y3RvclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0g
d2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yOwotICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmlu
YWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rv
cl9pbml0KFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIFdl
YktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9OQU1FRF9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYp
IFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSgpOwotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iuc3ltYm9scwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE5vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
MTU5NzQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MSAr
MCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5vZGUuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9y
dFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2
YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01Ob2RlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNs
dWRlICJXZWJLaXRET01UZXN0Tm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZl
cnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdE5vZGUqIGtp
dChXZWJDb3JlOjpUZXN0Tm9kZSogb2JqKQotewotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1Rf
Tk9ERShraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKLX0KLQotV2ViQ29y
ZTo6VGVzdE5vZGUqIGNvcmUoV2ViS2l0RE9NVGVzdE5vZGUqIHJlcXVlc3QpCi17Ci0gICAgcmV0
dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9kZSo+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3ROb2Rl
KiB3cmFwVGVzdE5vZGUoV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNT
RVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfTk9ERShnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9ERSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fdGVzdF9ub2RlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCi17Ci0g
ICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Ci0gICAg
aWYgKCFjb3JlRXZlbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXZWJDb3JlOjpUZXN0
Tm9kZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROb2RlKj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRj
aEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwotICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwotICAgIH0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25v
ZGVfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUp
Ci17Ci0gICAgV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpUZXN0Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwot
ICAgIHJldHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0g
ICAgV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpU
ZXN0Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJl
dHVybiBXZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktp
dERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVu
dCA9IHdlYmtpdF9kb21fdGVzdF9ub2RlX2Rpc3BhdGNoX2V2ZW50OwotICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9hZGRfZXZlbnRfbGlzdGVuZXI7
Ci0gICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ub2Rl
X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKLX0KLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0RE9NVGVzdE5vZGUsIHdlYmtpdF9kb21fdGVzdF9ub2RlLCBXRUJLSVRfRE9NX1RZUEVfTk9E
RSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQotCi1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAg
UFJPUF9OQU1FLAotfTsKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYg
PSBXRUJLSVRfRE9NX1RFU1RfTk9ERShvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7Ci0gICAgY2FzZSBQUk9QX05BTUU6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub2RlX3Nl
dF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Ci17Ci0gICAgV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfTk9ERShv
YmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9QX05BTUU6
Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9ub2Rl
X2dldF9uYW1lKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9ub2RlX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE5vZGVDbGFzcyogcmVxdWVzdENsYXNz
KQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVx
dWVzdENsYXNzKTsKLSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
dGVzdF9ub2RlX3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fdGVzdF9ub2RlX2dldF9wcm9wZXJ0eTsKLQotICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9O
QU1FLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgIm5hbWUiLAot
ICAgICAgICAgICAgIlRlc3ROb2RlOm5hbWUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIFRlc3ROb2RlOm5hbWUiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25v
ZGVfaW5pdChXZWJLaXRET01UZXN0Tm9kZSogcmVxdWVzdCkKLXsKLSAgICBVTlVTRURfUEFSQU0o
cmVxdWVzdCk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShXZWJL
aXRET01UZXN0Tm9kZSogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05P
REUoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3ROb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5h
bWUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9k
ZV9zZXRfbmFtZShXZWJLaXRET01UZXN0Tm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT0RFKHNlbGYpKTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0TmFtZShjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3ROb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxYThjZWQ2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
NCArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktp
dERPTVRlc3ROb2RlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE5vZGVfaAotCi0jaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9URVNUX05PREUgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X25vZGVf
Z2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX05PREUob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
Tk9ERSwgV2ViS2l0RE9NVGVzdE5vZGUpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTk9ERV9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVEVTVF9OT0RFLCBXZWJLaXRET01UZXN0Tm9kZUNsYXNzKQotI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1RFU1RfTk9ERShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT0RFKSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9JU19URVNUX05PREVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9ERSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9OT0RFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9URVNUX05PREUsIFdlYktpdERPTVRlc3ROb2RlQ2xhc3MpKQotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3ROb2RlIHsKLSAgICBXZWJLaXRET01Ob2RlIHBhcmVudF9pbnN0
YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE5vZGVDbGFzcyB7Ci0gICAgV2ViS2l0
RE9NTm9kZUNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtp
dF9kb21fdGVzdF9ub2RlX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9ub2RlX2dldF9uYW1lOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICog
UmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShXZWJLaXRET01UZXN0
Tm9kZSogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X25hbWU6Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vZGUKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X25vZGVfc2V0X25hbWUoV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0Tm9kZV9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Tm9kZS5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE5vZGUuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZTY5ZGUyOS4uMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE5vbmRldGVybWluaXN0aWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjJk
MDcwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDMxOSArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuaCIK
LQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJX
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0
L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklT
VElDX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfTk9OREVURVJNSU5JU1RJQywgV2ViS2l0RE9NVGVzdE5vbmRldGVy
bWluaXN0aWNQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE5vbmRldGVy
bWluaXN0aWNQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0
aWM+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBr
aXQoV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2Fj
aGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlO
SVNUSUMocmV0KTsKLQotICAgIHJldHVybiB3cmFwVGVzdE5vbmRldGVybWluaXN0aWMob2JqKTsK
LX0KLQotV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGNvcmUoV2ViS2l0RE9NVGVzdE5v
bmRldGVybWluaXN0aWMqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlz
dGljKiB3cmFwVGVzdE5vbmRldGVybWluaXN0aWMoV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0
aWMqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBX
RUJLSVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX1RFU1RfTk9OREVURVJNSU5JU1RJQywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYywgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0
aWMsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewotICAgIFBST1BfMCwKLSAgICBQ
Uk9QX05PTkRFVEVSTUlOSVNUSUNfUkVBRE9OTFlfQVRUUiwKLSAgICBQUk9QX05PTkRFVEVSTUlO
SVNUSUNfV1JJVEVBQkxFX0FUVFIsCi0gICAgUFJPUF9OT05ERVRFUk1JTklTVElDX0VYQ0VQVElP
Tl9BVFRSLAotICAgIFBST1BfTk9OREVURVJNSU5JU1RJQ19HRVRURVJfRVhDRVBUSU9OX0FUVFIs
Ci0gICAgUFJPUF9OT05ERVRFUk1JTklTVElDX1NFVFRFUl9FWENFUFRJT05fQVRUUiwKLX07Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQ19HRVRfUFJJVkFURShv
YmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
UHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1p
bmlzdGljX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmID0gV0VC
S0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUMob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9OT05ERVRFUk1JTklTVElDX1dSSVRFQUJMRV9BVFRS
OgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJt
aW5pc3RpY193cml0ZWFibGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfRVhDRVBUSU9O
X0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25k
ZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19HRVRU
RVJfRVhDRVBUSU9OX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlz
dGljX3NldF9ub25kZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25fYXR0cihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05P
TkRFVEVSTUlOSVNUSUNfU0VUVEVSX0VYQ0VQVElPTl9BVFRSOgotICAgICAgICB3ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0
aW9uX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19n
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklTVElDKG9iamVjdCk7Ci0K
LSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJ
Q19SRUFET05MWV9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19yZWFkb25seV9h
dHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNU
SUNfV1JJVEVBQkxFX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3dyaXRl
YWJsZV9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVS
TUlOSVNUSUNfRVhDRVBUSU9OX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGlj
X2V4Y2VwdGlvbl9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05P
TkRFVEVSTUlOSVNUSUNfR0VUVEVSX0VYQ0VQVElPTl9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9u
ZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoc2VsZiwgbnVsbHB0cikpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19TRVRURVJfRVhDRVBU
SU9OX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRp
b25fYXR0cihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2Rv
bV90ZXN0X25vbmRldGVybWluaXN0aWNfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29u
c3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFBy
b3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlw
ZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAg
IFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
VEVTVF9OT05ERVRFUk1JTklTVElDX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29y
ZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKj4oV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1
cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5p
c3RpY19jbGFzc19pbml0KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljQ2xhc3MqIHJlcXVl
c3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSkpOwotICAg
IGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5p
c3RpY19jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rv
bV90ZXN0X25vbmRldGVybWluaXN0aWNfZmluYWxpemU7Ci0gICAgZ29iamVjdENsYXNzLT5zZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfcHJvcGVydHk7
Ci0gICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0
ZXJtaW5pc3RpY19nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfTk9OREVURVJNSU5J
U1RJQ19SRUFET05MWV9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAg
ICAgICJub25kZXRlcm1pbmlzdGljLXJlYWRvbmx5LWF0dHIiLAotICAgICAgICAgICAgIlRlc3RO
b25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtcmVhZG9ubHktYXR0ciIsCi0gICAgICAg
ICAgICAicmVhZC1vbmx5IGdsb25nIFRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0
aWMtcmVhZG9ubHktYXR0ciIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
LSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9Q
X05PTkRFVEVSTUlOSVNUSUNfV1JJVEVBQkxFX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCi0gICAgICAgICAgICAibm9uZGV0ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0g
ICAgICAgICAgICAiVGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy13cml0ZWFi
bGUtYXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE5vbmRldGVybWlu
aXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0gICAgICAgICAgICAiIiwK
LSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJP
UF9OT05ERVRFUk1JTklTVElDX0VYQ0VQVElPTl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAotICAgICAgICAgICAgIm5vbmRldGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAot
ICAgICAgICAgICAgIlRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtZXhjZXB0
aW9uLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb25kZXRlcm1p
bmlzdGljOm5vbmRldGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAotICAgICAgICAgICAgIiIs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfTk9OREVURVJNSU5JU1RJQ19HRVRURVJfRVhDRVBUSU9OX0FUVFIsCi0gICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAibm9uZGV0ZXJtaW5pc3RpYy1nZXR0ZXItZXhj
ZXB0aW9uLWF0dHIiLAotICAgICAgICAgICAgIlRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVy
bWluaXN0aWMtZ2V0dGVyLWV4Y2VwdGlvbi1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBUZXN0Tm9uZGV0ZXJtaW5pc3RpYzpub25kZXRlcm1pbmlzdGljLWdldHRlci1leGNl
cHRpb24tYXR0ciIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAg
ICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OT05ERVRFUk1JTklTVElDX1NFVFRFUl9F
WENFUFRJT05fQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAg
ICJub25kZXRlcm1pbmlzdGljLXNldHRlci1leGNlcHRpb24tYXR0ciIsCi0gICAgICAgICAgICAi
VGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy1zZXR0ZXItZXhjZXB0aW9uLWF0
dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb25kZXRlcm1pbmlzdGlj
Om5vbmRldGVybWluaXN0aWMtc2V0dGVyLWV4Y2VwdGlvbi1hdHRyIiwKLSAgICAgICAgICAgICIi
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2luaXQoV2ViS2l0RE9NVGVzdE5v
bmRldGVybWluaXN0aWMqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdE5vbmRldGVybWlu
aXN0aWNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUNfR0VU
X1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0Tm9uZGV0ZXJt
aW5pc3RpY1ByaXZhdGUoKTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vbmRldGVy
bWluaXN0aWNfbm9uZGV0ZXJtaW5pc3RpY196ZXJvX2FyZ19mdW5jdGlvbihXZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X05PTkRFVEVSTUlOSVNUSUMoc2VsZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5ub25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0
X25vbmRldGVybWluaXN0aWNfcmVhZG9ubHlfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlO
SVNUSUMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm5vbmRldGVy
bWluaXN0aWNSZWFkb25seUF0dHIoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nY2hhciog
d2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3Jp
dGVhYmxlX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYpCi17Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT05ERVRFUk1JTklTVElDKHNlbGYpLCAwKTsKLSAg
ICBXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ub25kZXRl
cm1pbmlzdGljV3JpdGVhYmxlQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX3dy
aXRlYWJsZV9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNU
SUMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRl
c3ROb25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAg
ICBpdGVtLT5zZXROb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihjb252ZXJ0ZWRWYWx1ZSk7
Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0
ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyog
c2VsZiwgR0Vycm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9O
T05ERVRFUk1JTklTVElDKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJy
b3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bm9uZGV0
ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoZWMpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGlj
X2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlO
SVNUSUMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6
OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
LSAgICBpdGVtLT5zZXROb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihjb252ZXJ0ZWRWYWx1
ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9u
ZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVy
bWluaXN0aWMqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1p
bmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRf
bm9uZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRl
dGVybWluaXN0aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldE5vbmRldGVybWluaXN0aWNHZXR0
ZXJFeGNlcHRpb25BdHRyKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRp
b25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNf
c2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9OT05ERVRFUk1JTklTVElDKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKLSAgICBX
ZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0
Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoY29udmVydGVkVmFsdWUsIGVjKTsK
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAg
ICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWY4MjMxLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3ROb25kZXRlcm1pbmlzdGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAot
LyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpY19oCi0jZGVmaW5lIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljX2gK
LQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNM
UwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX05PTkRFVEVSTUlOSVNUSUMgICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X3R5cGUoKSkKLSNkZWZp
bmUgV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUMob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9OREVU
RVJNSU5JU1RJQywgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMpKQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT05ERVRFUk1JTklT
VElDLCBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzKQotI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1RFU1RfTk9OREVURVJNSU5JU1RJQyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT05ERVRFUk1JTklTVElD
KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUNfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfTk9OREVURVJNSU5JU1RJQykpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1J
TklTVElDX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9URVNUX05PTkRFVEVSTUlOSVNUSUMsIFdlYktpdERPTVRlc3ROb25k
ZXRlcm1pbmlzdGljQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlz
dGljIHsKLSAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0
IF9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmpl
Y3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19ub25kZXRlcm1pbmlzdGljX3plcm9fYXJnX2Z1bmN0
aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCi0gKgotICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRl
dGVybWluaXN0aWNfemVyb19hcmdfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dl
dF9ub25kZXRlcm1pbmlzdGljX3JlYWRvbmx5X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE5vbmRldGVybWluaXN0aWMKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0
X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfcmVhZG9ubHlfYXR0cihXZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHI6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAqCi0gKiBSZXR1
cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1p
bmlzdGljX3dyaXRlYWJsZV9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0
ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYwotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5p
c3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cihXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRp
b25fYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICog
QGVycm9yOiAjR0Vycm9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfbm9u
ZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cihXZWJLaXRE
T01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2V4
Y2VwdGlvbl9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
Ci0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25k
ZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9u
b25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25fYXR0
cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICogQGVycm9y
OiAjR0Vycm9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJt
aW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0
RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19n
ZXR0ZXJfZXhjZXB0aW9uX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVy
bWluaXN0aWMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNf
c2V0X25vbmRldGVybWluaXN0aWNfZ2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3RO
b25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRl
cl9leGNlcHRpb25fYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0
aWNfZ2V0X25vbmRldGVybWluaXN0aWNfc2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRl
c3ROb25kZXRlcm1pbmlzdGljKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfbm9u
ZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHI6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAqIEB2YWx1ZTog
QSAjZ2NoYXIKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19z
ZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5v
bmRldGVybWluaXN0aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3Ip
OwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE5vbmRldGVybWluaXN0aWMuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLnN5bWJv
bHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjk0ZTcuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE5vbmRldGVybWluaXN0aWMuc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAK
LWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRldGVybWluaXN0
aWNfemVyb19hcmdfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQotZ2xv
bmcgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNf
cmVhZG9ubHlfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyopCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVh
YmxlX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0
cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNl
cHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIEdFcnJvcioqKQotdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19l
eGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFy
KikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJt
aW5pc3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0
X25vbmRldGVybWluaXN0aWNfZ2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25k
ZXRlcm1pbmlzdGljKiwgY29uc3QgZ2NoYXIqKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9ub25k
ZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihX
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9ub25k
ZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihX
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
UHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2ViZTYxLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMg
KzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRE
T01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpY1ByaXZhdGVfaAotCi0jaW5jbHVkZSAiVGVzdE5vbmRldGVybWluaXN0aWMu
aCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogd3Jh
cFRlc3ROb25kZXRlcm1pbmlzdGljKFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKik7Ci1X
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyoga2l0KFdlYkNvcmU6OlRlc3ROb25kZXRlcm1p
bmlzdGljKik7Ci1XZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY29yZShXZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
KiBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2N2U4
ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMTEgKzAsMCBA
QAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYktpdERPTVRlc3RPYmouaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUu
aCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUg
IldlYktpdERPTURpY3Rpb25hcnlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1l
bnRQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9pbnRQcml2YXRl
LmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdERpY3Rpb25hcnlQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdEVudW1UeXBlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRl
c3ROb2RlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RPYmpQcml2YXRlLmgiCi0j
aW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdv
YmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09CSl9HRVRf
UFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01f
VFlQRV9URVNUX09CSiwgV2ViS2l0RE9NVGVzdE9ialByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01UZXN0T2JqUHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+
IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RPYmpQcml2YXRlOwotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotV2ViS2l0RE9NVGVzdE9iaioga2l0KFdlYkNvcmU6OlRlc3RPYmoqIG9iaikKLXsK
LSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9U
RVNUX09CSihyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0T2JqKG9iaik7Ci19Ci0KLVdlYkNv
cmU6OlRlc3RPYmoqIGNvcmUoV2ViS2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKLXsKLSAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPYmoqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3
cmFwVGVzdE9iaihXZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktp
dERPTVRlc3RPYmosIHdlYmtpdF9kb21fdGVzdF9vYmosIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qp
Ci0KLWVudW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX1JFQURfT05MWV9MT05HX0FUVFIsCi0g
ICAgUFJPUF9SRUFEX09OTFlfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUFEX09OTFlfVEVTVF9P
QkpfQVRUUiwKLSAgICBQUk9QX0JZVEVfQVRUUiwKLSAgICBQUk9QX09DVEVUX0FUVFIsCi0gICAg
UFJPUF9TSE9SVF9BVFRSLAotICAgIFBST1BfQ0xBTVBFRF9TSE9SVF9BVFRSLAotICAgIFBST1Bf
RU5GT1JDRV9SQU5HRV9TSE9SVF9BVFRSLAotICAgIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUiwK
LSAgICBQUk9QX0xPTkdfQVRUUiwKLSAgICBQUk9QX0xPTkdfTE9OR19BVFRSLAotICAgIFBST1Bf
VU5TSUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgUFJPUF9TVFJJTkdfQVRUUiwKLSAgICBQUk9Q
X1RFU1RfT0JKX0FUVFIsCi0gICAgUFJPUF9URVNUX05VTExBQkxFX09CSl9BVFRSLAotICAgIFBS
T1BfTEVOSUVOVF9URVNUX09CSl9BVFRSLAotICAgIFBST1BfVU5GT1JHRUFCTEVfQVRUUiwKLSAg
ICBQUk9QX1NUUklOR19BVFRSX1RSRUFUSU5HX05VTExfQVNfRU1QVFlfU1RSSU5HLAotICAgIFBS
T1BfWE1MX09CSl9BVFRSLAotICAgIFBST1BfQ1JFQVRFLAotICAgIFBST1BfUkVGTEVDVEVEX1NU
UklOR19BVFRSLAotICAgIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9S
RUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9CT09M
RUFOX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfVVJMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNU
RURfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFIs
Ci0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUiwKLSAgICBQUk9QX1JFRkxF
Q1RFRF9DVVNUT01fVVJMX0FUVFIsCi0gICAgUFJPUF9FTkFCTEVEX0FUX1JVTlRJTUVfQVRUUklC
VVRFLAotICAgIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9BVFRS
X1dJVEhfR0VUVEVSX0VYQ0VQVElPTl9XSVRIX01FU1NBR0UsCi0gICAgUFJPUF9BVFRSX1dJVEhf
U0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OX1dJ
VEhfTUVTU0FHRSwKLSAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwK
LSAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX1dJ
VEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfQ0FMTF9XSVRIX0FORF9T
RVRURVJfQ0FMTF9XSVRIX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElP
Tl9DT05URVhUX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVU
RV9SQUlTRVMsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRSSUJV
VEVfUkFJU0VTLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1ND
UklQVF9TVEFURV9BVFRSSUJVVEUsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09O
VEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCi0gICAgUFJPUF9XSVRIX1ND
UklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhfU1BBQ0VTX0FUVFJJ
QlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRS
SUJVVEUsCi0gICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMSwKLSAgICBQUk9QX0NPTkRJVElPTkFM
X0FUVFIyLAotICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjMsCi0gICAgUFJPUF9BTllfQVRUUklC
VVRFLAotICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKLSAgICBQUk9QX01VVEFCTEVfUE9JTlQs
Ci0gICAgUFJPUF9JTU1VVEFCTEVfUE9JTlQsCi0gICAgUFJPUF9TVFJBV0JFUlJZLAotICAgIFBS
T1BfREVTQ1JJUFRJT04sCi0gICAgUFJPUF9JRCwKLSAgICBQUk9QX0hBU0gsCi0gICAgUFJPUF9S
RVBMQUNFQUJMRV9BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9ET1VCTEVfQVRUUklCVVRF
LAotICAgIFBST1BfTlVMTEFCTEVfTE9OR19BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9C
T09MRUFOX0FUVFJJQlVURSwKLSAgICBQUk9QX05VTExBQkxFX1NUUklOR19BVFRSSUJVVEUsCi0g
ICAgUFJPUF9OVUxMQUJMRV9MT05HX1NFVFRBQkxFX0FUVFJJQlVURSwKLSAgICBQUk9QX05VTExB
QkxFX1NUUklOR19TRVRUQUJMRV9BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9TVFJJTkdf
VkFMVUUsCi0gICAgUFJPUF9BVFRSSUJVVEUsCi0gICAgUFJPUF9QVVRfRk9SV0FSRFNfQVRUUklC
VVRFLAotICAgIFBST1BfUFVUX0ZPUldBUkRTX05VTExBQkxFX0FUVFJJQlVURSwKLSAgICBQUk9Q
X1NUUklOR0lGSUVSX0FUVFJJQlVURSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RPYmpQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShvYmplY3QpOwot
Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RPYmpQcml2YXRlKCk7Ci0gICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRf
RE9NX1RFU1RfT0JKKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBj
YXNlIFBST1BfQllURV9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9ieXRl
X2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfaW50OCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfT0NURVRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
b2N0ZXRfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF91aW50OCh2YWx1ZSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfc2hvcnRfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9pbnQodmFsdWUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMQU1QRURfU0hPUlRfQVRUUjoKLSAgICAgICAgd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfY2xhbXBlZF9zaG9ydF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2lu
dCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRU5GT1JDRV9SQU5HRV9T
SE9SVF9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9lbmZvcmNlX3Jhbmdl
X3Nob3J0X2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfaW50KHZhbHVlKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSOgotICAgICAgICB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9zaG9ydF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3VpbnQo
dmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfQVRUUjoKLSAgICAg
ICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2xv
bmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRS
OgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihzZWxmLCBn
X3ZhbHVlX2dldF9pbnQ2NCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
VU5TSUdORURfTE9OR19MT05HX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1ZSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6Ci0gICAgICAgIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfVFJF
QVRJTkdfTlVMTF9BU19FTVBUWV9TVFJJTkc6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3N0cmluZ19hdHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1JF
QVRFOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUoc2VsZiwgZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVG
TEVDVEVEX1NUUklOR19BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZs
ZWN0ZWRfc3RyaW5nX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoKLSAgICAg
ICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoc2VsZiwg
Z192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
UkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKHNlbGYsIGdfdmFsdWVf
Z2V0X3Vsb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNU
RURfQk9PTEVBTl9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0
ZWRfYm9vbGVhbl9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRUUjoKLSAgICAgICAgd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3VybF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVE
X1NUUklOR19BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
c3RyaW5nX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFI6Ci0gICAg
ICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0
cihzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoKLSAgICAgICAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoc2VsZiwgZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVG
TEVDVEVEX0NVU1RPTV9VUkxfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VOQUJMRURfQVRfUlVOVElNRV9BVFRS
SUJVVEU6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2VuYWJsZWRfYXRfcnVudGlt
ZV9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2VsZiwg
Z192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
QVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT05fV0lUSF9NRVNTQUdFOgotICAgICAgICB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2Uo
c2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgICAgIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X2xv
bmcodmFsdWUpLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJf
V0lUSF9TRVRURVJfRVhDRVBUSU9OX1dJVEhfTUVTU0FHRToKLSAgICAgICAgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKHNlbGYs
IGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RS
SU5HX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJP
UF9DT05ESVRJT05BTF9BVFRSMToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29u
ZGl0aW9uYWxfYXR0cjEoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjI6Ci0gICAgICAgIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIyKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmco
dmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIz
OgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyhzZWxm
LCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJP
UF9TVFJBV0JFUlJZOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJhd2JlcnJ5
KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQUk9QX0lEOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChzZWxmLCBnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVUxM
QUJMRV9MT05HX1NFVFRBQkxFX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfbnVsbGFibGVfbG9uZ19zZXR0YWJsZV9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRf
bG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfU1RS
SU5HX1NFVFRBQkxFX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
bnVsbGFibGVfc3RyaW5nX3NldHRhYmxlX2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxFX1NUUklO
R19WQUxVRToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVfc3RyaW5n
X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX1NUUklOR0lGSUVSX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfc3RyaW5naWZpZXJfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRET01UZXN0T2JqKiBzZWxm
ID0gV0VCS0lUX0RPTV9URVNUX09CSihvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7Ci0gICAgY2FzZSBQUk9QX1JFQURfT05MWV9MT05HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0
dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVBRF9PTkxZX1NUUklO
R19BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWFkX29ubHlfc3RyaW5nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfUkVBRF9PTkxZX1RFU1RfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rf
b2JqX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQllURV9BVFRS
OgotICAgICAgICBnX3ZhbHVlX3NldF9pbnQ4KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9ieXRlX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfT0NURVRf
QVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfdWludDgodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X29jdGV0X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
U0hPUlRfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9zaG9ydF9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQ
Uk9QX0NMQU1QRURfU0hPUlRfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jbGFtcGVkX3Nob3J0X2F0dHIoc2VsZikpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBST1BfRU5GT1JDRV9SQU5HRV9TSE9SVF9BVFRSOgotICAgICAg
ICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2VuZm9yY2Vf
cmFuZ2Vfc2hvcnRfYXR0cihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9V
TlNJR05FRF9TSE9SVF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKHNlbGYpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19hdHRyKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgotICAgICAgICBnX3ZhbHVl
X3NldF9pbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHIo
c2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05H
X0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RFU1RfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpfYXR0cihz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9URVNUX05VTExBQkxFX09CSl9B
VFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Rlc3RfbnVsbGFibGVfb2JqX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfTEVOSUVOVF9URVNUX09CSl9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0
cihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VTkZPUkdFQUJMRV9BVFRS
OgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF91bmZvcmdlYWJsZV9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQ
Uk9QX1NUUklOR19BVFRSX1RSRUFUSU5HX05VTExfQVNfRU1QVFlfU1RSSU5HOgotICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdf
YXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZyhzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9YTUxfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKHNlbGYpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NSRUFURToKLSAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKHNlbGYpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKLSAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVm
bGVjdGVkX3N0cmluZ19hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X1JFRkxFQ1RFRF9JTlRFR1JBTF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVl
LCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihzZWxmKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVU5TSUdORURfSU5URUdS
QUxfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFI6Ci0gICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxl
Y3RlZF9ib29sZWFuX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
UkVGTEVDVEVEX1VSTF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIoc2VsZikpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgotICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0
ZWRfc3RyaW5nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVG
TEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0
dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RP
TV9CT09MRUFOX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKHNlbGYpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFI6
Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZW5hYmxlZF9hdF9y
dW50aW1lX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9B
VFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2Vs
ZiwgbnVsbHB0cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dF
VFRFUl9FWENFUFRJT05fV0lUSF9NRVNTQUdFOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93
aXRoX21lc3NhZ2Uoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9X
SVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9O
X1dJVEhfTUVTU0FHRToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VU
VEVSX0VYQ0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYs
IG51bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJ
VEhfU0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9u
KHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX1NUQVRF
X0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfQ0FMTF9XSVRIX0FORF9TRVRURVJfQ0FMTF9XSVRI
X0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfd2l0aF9jYWxsX3dpdGhfYW5kX3NldHRlcl9jYWxsX3dpdGhfYXR0cmlidXRl
KHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNV
VElPTl9DT05URVhUX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9h
dHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJ
UFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUzoKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVf
cmFpc2VzKHNlbGYsIG51bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJ
VEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVM6Ci0gICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhzZWxmLCBudWxscHRyKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVY
VF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29u
dGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NU
QVRFX0FUVFJJQlVURV9SQUlTRVM6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5k
X3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKHNlbGYsIG51bGxwdHIpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9T
Q1JJUFRfU1RBVEVfV0lUSF9TUEFDRVNfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlv
bl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfd2l0aF9zcGFjZXNfYXR0cmlidXRlKHNlbGYpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRf
Q0FMTF9TVEFDS19BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfYXJndW1lbnRzX2FuZF9jYWxsX3N0
YWNrX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05E
SVRJT05BTF9BVFRSMToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjEoc2VsZikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIyKHNlbGYp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIzOgotICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25k
aXRpb25hbF9hdHRyMyhzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BTllf
QVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2FueV9hdHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFBST1BfQ09OVEVOVF9ET0NVTUVOVDoKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KHNlbGYpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01VVEFCTEVfUE9JTlQ6Ci0gICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbXV0YWJsZV9wb2lu
dChzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTU1VVEFCTEVfUE9JTlQ6
Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfaW1tdXRhYmxlX3BvaW50KHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X1NUUkFXQkVSUlk6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3N0cmF3YmVycnkoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFBST1BfREVTQ1JJUFRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2Rlc2NyaXB0aW9uKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX0lEOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9pZChzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJP
UF9IQVNIOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9oYXNoKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JF
UExBQ0VBQkxFX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxFX0RPVUJMRV9BVFRSSUJVVEU6Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVs
bGFibGVfZG91YmxlX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9OVUxMQUJMRV9MT05HX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfbG9uZ19hdHRyaWJ1dGUoc2Vs
ZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfQk9PTEVBTl9BVFRS
SUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X251bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxFX1NUUklOR19BVFRSSUJVVEU6Ci0gICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxl
X3N0cmluZ19hdHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
TlVMTEFCTEVfTE9OR19TRVRUQUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVf
YXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxF
X1NUUklOR19TRVRUQUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19zZXR0YWJsZV9h
dHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVf
U1RSSU5HX1ZBTFVFOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoc2VsZiwgbnVsbHB0cikpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyaWJ1dGUoc2VsZikp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFVUX0ZPUldBUkRTX0FUVFJJQlVURToK
LSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQUk9QX1BVVF9GT1JXQVJEU19OVUxMQUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX251
bGxhYmxlX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9T
VFJJTkdJRklFUl9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ2lmaWVyX2F0dHJpYnV0ZShzZWxmKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmNv
bnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVy
dGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0T2JqUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
VEVTVF9PQkpfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE9iaio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19pbml0KFdlYktpdERPTVRlc3RPYmpDbGFzcyog
cmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdE9ialByaXZhdGUpKTsKLSAgICBnb2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RvcjsKLSAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X29ial9maW5hbGl6ZTsK
LSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3Byb3BlcnR5OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVBRF9PTkxZX0xPTkdf
QVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAgICAgICAicmVhZC1vbmx5
LWxvbmctYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktbG9uZy1hdHRyIiwK
LSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVGVzdE9iajpyZWFkLW9ubHktbG9uZy1hdHRy
IiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVBRF9PTkxZX1NUUklO
R19BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJlYWQt
b25seS1zdHJpbmctYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktc3RyaW5n
LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdE9iajpyZWFkLW9ubHkt
c3RyaW5nLWF0dHIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAg
ICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwK
LSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJyZWFkLW9ubHktdGVz
dC1vYmotYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktdGVzdC1vYmotYXR0
ciIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRlc3RPYmoqIFRlc3RPYmo6cmVh
ZC1vbmx5LXRlc3Qtb2JqLWF0dHIiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
T0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfQllURV9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfaW50OCgKLSAgICAgICAgICAg
ICJieXRlLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6Ynl0ZS1hdHRyIiwKLSAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdpbnQ4IFRlc3RPYmo6Ynl0ZS1hdHRyIiwKLSAgICAgICAgICAgIEdf
TUlOSU5UOCwgR19NQVhJTlQ4LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29i
amVjdENsYXNzLAotICAgICAgICBQUk9QX09DVEVUX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y191aW50OCgKLSAgICAgICAgICAgICJvY3RldC1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2Jq
Om9jdGV0LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3VpbnQ4IFRlc3RPYmo6b2N0
ZXQtYXR0ciIsCi0gICAgICAgICAgICAwLCBHX01BWFVJTlQ4LCAwLAotICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NIT1JUX0FUVFIsCi0g
ICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCi0gICAgICAgICAgICAic2hvcnQtYXR0ciIsCi0gICAg
ICAgICAgICAiVGVzdE9iajpzaG9ydC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdz
aG9ydCBUZXN0T2JqOnNob3J0LWF0dHIiLAotICAgICAgICAgICAgR19NSU5JTlQsIEdfTUFYSU5U
LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0NMQU1QRURfU0hPUlRfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKLSAg
ICAgICAgICAgICJjbGFtcGVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6Y2xh
bXBlZC1zaG9ydC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdzaG9ydCBUZXN0T2Jq
OmNsYW1wZWQtc2hvcnQtYXR0ciIsCi0gICAgICAgICAgICBHX01JTklOVCwgR19NQVhJTlQsIDAs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfRU5GT1JDRV9SQU5HRV9TSE9SVF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAot
ICAgICAgICAgICAgImVuZm9yY2UtcmFuZ2Utc2hvcnQtYXR0ciIsCi0gICAgICAgICAgICAiVGVz
dE9iajplbmZvcmNlLXJhbmdlLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z3Nob3J0IFRlc3RPYmo6ZW5mb3JjZS1yYW5nZS1zaG9ydC1hdHRyIiwKLSAgICAgICAgICAgIEdf
TUlOSU5ULCBHX01BWElOVCwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAotICAgICAgICBnX3Bh
cmFtX3NwZWNfdWludCgKLSAgICAgICAgICAgICJ1bnNpZ25lZC1zaG9ydC1hdHRyIiwKLSAgICAg
ICAgICAgICJUZXN0T2JqOnVuc2lnbmVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ3VzaG9ydCBUZXN0T2JqOnVuc2lnbmVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAg
MCwgR19NQVhVSU5ULCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwot
Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENs
YXNzLAotICAgICAgICBQUk9QX0xPTkdfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
Ci0gICAgICAgICAgICAibG9uZy1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOmxvbmctYXR0
ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmxvbmctYXR0ciIsCi0g
ICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Ci0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKLSAg
ICAgICAgZ19wYXJhbV9zcGVjX2ludDY0KAotICAgICAgICAgICAgImxvbmctbG9uZy1hdHRyIiwK
LSAgICAgICAgICAgICJUZXN0T2JqOmxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdpbnQ2NCBUZXN0T2JqOmxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlO
SU5UNjQsIEdfTUFYSU5UNjQsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgICAg
IGdfcGFyYW1fc3BlY191aW50NjQoCi0gICAgICAgICAgICAidW5zaWduZWQtbG9uZy1sb25nLWF0
dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6dW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ3VpbnQ2NCBUZXN0T2JqOnVuc2lnbmVkLWxvbmctbG9uZy1h
dHRyIiwKLSAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NUUklOR19BVFRSLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInN0cmluZy1hdHRyIiwKLSAg
ICAgICAgICAgICJUZXN0T2JqOnN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBUZXN0T2JqOnN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfT0JK
X0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAidGVzdC1v
YmotYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajp0ZXN0LW9iai1hdHRyIiwKLSAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp0ZXN0LW9iai1hdHRyIiwK
LSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfTlVMTEFCTEVfT0JK
X0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAidGVzdC1u
dWxsYWJsZS1vYmotYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajp0ZXN0LW51bGxhYmxlLW9i
ai1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9i
ajp0ZXN0LW51bGxhYmxlLW9iai1hdHRyIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9U
RVNUX09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAg
ICAgICBQUk9QX0xFTklFTlRfVEVTVF9PQkpfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKLSAgICAgICAgICAgICJsZW5pZW50LXRlc3Qtb2JqLWF0dHIiLAotICAgICAgICAgICAg
IlRlc3RPYmo6bGVuaWVudC10ZXN0LW9iai1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajpsZW5pZW50LXRlc3Qtb2JqLWF0dHIiLAotICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAg
ICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfVU5GT1JHRUFCTEVfQVRUUiwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJ1bmZvcmdlYWJsZS1hdHRyIiwK
LSAgICAgICAgICAgICJUZXN0T2JqOnVuZm9yZ2VhYmxlLWF0dHIiLAotICAgICAgICAgICAgInJl
YWQtb25seSBnY2hhciogVGVzdE9iajp1bmZvcmdlYWJsZS1hdHRyIiwKLSAgICAgICAgICAgICIi
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfU1RSSU5HX0FUVFJfVFJFQVRJTkdfTlVMTF9BU19FTVBUWV9TVFJJTkcsCi0gICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAic3RyaW5nLWF0dHItdHJlYXRpbmctbnVs
bC1hcy1lbXB0eS1zdHJpbmciLAotICAgICAgICAgICAgIlRlc3RPYmo6c3RyaW5nLWF0dHItdHJl
YXRpbmctbnVsbC1hcy1lbXB0eS1zdHJpbmciLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIFRlc3RPYmo6c3RyaW5nLWF0dHItdHJlYXRpbmctbnVsbC1hcy1lbXB0eS1zdHJpbmciLAot
ICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0K
LSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xh
c3MsCi0gICAgICAgIFBST1BfWE1MX09CSl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAotICAgICAgICAgICAgInhtbC1vYmotYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajp4
bWwtb2JqLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2JqKiBU
ZXN0T2JqOnhtbC1vYmotYXR0ciIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9P
QkosCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAg
UFJPUF9DUkVBVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAotICAgICAgICAgICAg
ImNyZWF0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpjcmVhdGUiLAotICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2Jvb2xlYW4gVGVzdE9iajpjcmVhdGUiLAotICAgICAgICAgICAgRkFMU0UsCi0g
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1Bf
UkVGTEVDVEVEX1NUUklOR19BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAg
ICAgICAgICAgInJlZmxlY3RlZC1zdHJpbmctYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpy
ZWZsZWN0ZWQtc3RyaW5nLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRl
c3RPYmo6cmVmbGVjdGVkLXN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RF
RF9JTlRFR1JBTF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAg
ICJyZWZsZWN0ZWQtaW50ZWdyYWwtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0
ZWQtaW50ZWdyYWwtYXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2Jq
OnJlZmxlY3RlZC1pbnRlZ3JhbC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhM
T05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAg
ICAgICBQUk9QX1JFRkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JBTF9BVFRSLAotICAgICAgICBnX3Bh
cmFtX3NwZWNfdWxvbmcoCi0gICAgICAgICAgICAicmVmbGVjdGVkLXVuc2lnbmVkLWludGVncmFs
LWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVkLXVuc2lnbmVkLWludGVncmFs
LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIFRlc3RPYmo6cmVmbGVjdGVk
LXVuc2lnbmVkLWludGVncmFsLWF0dHIiLAotICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwK
LSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJP
UF9SRUZMRUNURURfQk9PTEVBTl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigK
LSAgICAgICAgICAgICJyZWZsZWN0ZWQtYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0
T2JqOnJlZmxlY3RlZC1ib29sZWFuLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jv
b2xlYW4gVGVzdE9iajpyZWZsZWN0ZWQtYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgIEZBTFNF
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQ
Uk9QX1JFRkxFQ1RFRF9VUkxfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAg
ICAgICAgICAgICJyZWZsZWN0ZWQtdXJsLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6cmVm
bGVjdGVkLXVybC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0T2Jq
OnJlZmxlY3RlZC11cmwtYXR0ciIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5H
X0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAicmVmbGVj
dGVkLXN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOnJlZmxlY3RlZC1zdHJpbmct
YXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE9iajpyZWZsZWN0ZWQt
c3RyaW5nLWF0dHIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAg
ICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JB
TF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJyZWZsZWN0
ZWQtY3VzdG9tLWludGVncmFsLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVk
LWN1c3RvbS1pbnRlZ3JhbC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRl
c3RPYmo6cmVmbGVjdGVkLWN1c3RvbS1pbnRlZ3JhbC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlO
TE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVj
dENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9BVFRSLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAgICJyZWZsZWN0ZWQtY3VzdG9t
LWJvb2xlYW4tYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQtY3VzdG9tLWJv
b2xlYW4tYXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBUZXN0T2JqOnJl
ZmxlY3RlZC1jdXN0b20tYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgIEZBTFNFLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxF
Q1RFRF9DVVNUT01fVVJMX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAicmVmbGVjdGVkLWN1c3RvbS11cmwtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9i
ajpyZWZsZWN0ZWQtY3VzdG9tLXVybC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBUZXN0T2JqOnJlZmxlY3RlZC1jdXN0b20tdXJsLWF0dHIiLAotICAgICAgICAgICAgIiIs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKLSAgICAgICAgICAgICJlbmFibGVkLWF0LXJ1bnRpbWUtYXR0cmlidXRlIiwKLSAgICAg
ICAgICAgICJUZXN0T2JqOmVuYWJsZWQtYXQtcnVudGltZS1hdHRyaWJ1dGUiLAotICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6ZW5hYmxlZC1hdC1ydW50aW1lLWF0dHJpYnV0
ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAgICAgICAiYXR0ci13aXRoLWdldHRlci1leGNl
cHRpb24iLAotICAgICAgICAgICAgIlRlc3RPYmo6YXR0ci13aXRoLWdldHRlci1leGNlcHRpb24i
LAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVy
LWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9BVFRS
X1dJVEhfR0VUVEVSX0VYQ0VQVElPTl9XSVRIX01FU1NBR0UsCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKAotICAgICAgICAgICAgImF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uLXdpdGgtbWVz
c2FnZSIsCi0gICAgICAgICAgICAiVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbi13
aXRoLW1lc3NhZ2UiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajphdHRy
LXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbi13aXRoLW1lc3NhZ2UiLAotICAgICAgICAgICAgR19NSU5M
T05HLCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0
Q2xhc3MsCi0gICAgICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAgImF0dHItd2l0aC1zZXR0ZXItZXhjZXB0
aW9uIiwKLSAgICAgICAgICAgICJUZXN0T2JqOmF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwK
LSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1l
eGNlcHRpb24iLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCi0gICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfQVRUUl9X
SVRIX1NFVFRFUl9FWENFUFRJT05fV0lUSF9NRVNTQUdFLAotICAgICAgICBnX3BhcmFtX3NwZWNf
bG9uZygKLSAgICAgICAgICAgICJhdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbi13aXRoLW1lc3Nh
Z2UiLAotICAgICAgICAgICAgIlRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1leGNlcHRpb24td2l0
aC1tZXNzYWdlIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6YXR0ci13
aXRoLXNldHRlci1leGNlcHRpb24td2l0aC1tZXNzYWdlIiwKLSAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwot
Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENs
YXNzLAotICAgICAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdHJpbmctYXR0ci13aXRo
LWdldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgIlRlc3RPYmo6c3RyaW5nLWF0dHItd2l0
aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0
T2JqOnN0cmluZy1hdHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiIiwK
LSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJP
UF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCi0gICAgICAgICAgICAic3RyaW5nLWF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9u
IiwKLSAgICAgICAgICAgICJUZXN0T2JqOnN0cmluZy1hdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlv
biIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE9iajpzdHJpbmctYXR0ci13
aXRoLXNldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RB
VEVfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJ3
aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1z
Y3JpcHQtc3RhdGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVGVz
dE9iajp3aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFz
cywKLSAgICAgICAgUFJPUF9XSVRIX0NBTExfV0lUSF9BTkRfU0VUVEVSX0NBTExfV0lUSF9BVFRS
SUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAgIndpdGgtY2Fs
bC13aXRoLWFuZC1zZXR0ZXItY2FsbC13aXRoLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVz
dE9iajp3aXRoLWNhbGwtd2l0aC1hbmQtc2V0dGVyLWNhbGwtd2l0aC1hdHRyaWJ1dGUiLAotICAg
ICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUZXN0T2JqOndpdGgtY2FsbC13aXRoLWFuZC1zZXR0
ZXItY2FsbC13aXRoLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURSwKLSAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1leGVjdXRpb24t
Y29udGV4dC1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhl
Y3V0aW9uLWNvbnRleHQtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NVGVzdE9iaiogVGVzdE9iajp3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRf
U1RBVEVfQVRUUklCVVRFX1JBSVNFUywKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAg
ICAgICAgICAgICJ3aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAg
ICAgICJUZXN0T2JqOndpdGgtc2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LXN0
YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
T0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JBSVNFUywKLSAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1leGVj
dXRpb24tY29udGV4dC1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJUZXN0T2JqOndp
dGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LWV4ZWN1
dGlvbi1jb250ZXh0LWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9T
VEFURV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAg
ICAid2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQt
YW5kLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01UZXN0T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWFuZC1z
Y3JpcHQtc3RhdGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNU
X09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRU
UklCVVRFX1JBSVNFUywKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAg
ICJ3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hbmQtc2NyaXB0LXN0YXRlLWF0dHJpYnV0
ZS1yYWlzZXMiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNv
bnRleHQtYW5kLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp3aXRoLXNjcmlwdC1leGVjdXRpb24t
Y29udGV4dC1hbmQtc2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBn
b2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRf
QU5EX1NDUklQVF9TVEFURV9XSVRIX1NQQUNFU19BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCi0gICAgICAgICAgICAid2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQt
YW5kLXNjcmlwdC1zdGF0ZS13aXRoLXNwYWNlcy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRl
c3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1zdGF0ZS13aXRo
LXNwYWNlcy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0
T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWFuZC1zY3JpcHQtc3Rh
dGUtd2l0aC1zcGFjZXMtYXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9U
RVNUX09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAg
ICAgICBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEUs
Ci0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAid2l0aC1zY3JpcHQt
YXJndW1lbnRzLWFuZC1jYWxsLXN0YWNrLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9i
ajp3aXRoLXNjcmlwdC1hcmd1bWVudHMtYW5kLWNhbGwtc3RhY2stYXR0cmlidXRlIiwKLSAgICAg
ICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp3aXRoLXNjcmlwdC1h
cmd1bWVudHMtYW5kLWNhbGwtc3RhY2stYXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9E
T01fVFlQRV9URVNUX09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwot
Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENs
YXNzLAotICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAotICAgICAgICBnX3BhcmFtX3Nw
ZWNfbG9uZygKLSAgICAgICAgICAgICJjb25kaXRpb25hbC1hdHRyMSIsCi0gICAgICAgICAgICAi
VGVzdE9iajpjb25kaXRpb25hbC1hdHRyMSIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9u
ZyBUZXN0T2JqOmNvbmRpdGlvbmFsLWF0dHIxIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19N
QVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAot
ICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIyLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9u
ZygKLSAgICAgICAgICAgICJjb25kaXRpb25hbC1hdHRyMiIsCi0gICAgICAgICAgICAiVGVzdE9i
ajpjb25kaXRpb25hbC1hdHRyMiIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0
T2JqOmNvbmRpdGlvbmFsLWF0dHIyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05H
LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0NPTkRJVElPTkFMX0FUVFIzLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAg
ICAgICAgICAgICJjb25kaXRpb25hbC1hdHRyMyIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb25k
aXRpb25hbC1hdHRyMyIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmNv
bmRpdGlvbmFsLWF0dHIzIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAot
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9Q
X0FOWV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAg
ICAiYW55LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajphbnktYXR0cmlidXRlIiwK
LSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NYW55KiBUZXN0T2JqOmFueS1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0FOWSwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQs
Ci0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAiY29udGVudC1kb2N1
bWVudCIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb250ZW50LWRvY3VtZW50IiwKLSAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRG9jdW1lbnQqIFRlc3RPYmo6Y29udGVudC1kb2N1bWVu
dCIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9NVVRBQkxFX1BPSU5U
LAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAgICAgICAgIm11dGFibGUtcG9p
bnQiLAotICAgICAgICAgICAgIlRlc3RPYmo6bXV0YWJsZS1wb2ludCIsCi0gICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqOm11dGFibGUtcG9pbnQiLAotICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NWR19QT0lOVCwKLSAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
LSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0lNTVVUQUJMRV9QT0lOVCwKLSAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJpbW11dGFibGUtcG9pbnQi
LAotICAgICAgICAgICAgIlRlc3RPYmo6aW1tdXRhYmxlLXBvaW50IiwKLSAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmo6aW1tdXRhYmxlLXBvaW50IiwKLSAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TVkdfUE9JTlQsCi0gICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Ci0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVFJBV0JFUlJZLAotICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJzdHJhd2JlcnJ5IiwKLSAgICAgICAg
ICAgICJUZXN0T2JqOnN0cmF3YmVycnkiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcg
VGVzdE9iajpzdHJhd2JlcnJ5IiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAw
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQ
Uk9QX0RFU0NSSVBUSU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiIsCi0gICAgICAgICAgICAiVGVzdE9iajpkZXNjcmlwdGlvbiIsCi0gICAg
ICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRlc3RPYmo6ZGVzY3JpcHRpb24iLAotICAgICAgICAg
ICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAg
IGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9JRCwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoCi0gICAgICAgICAgICAiaWQiLAotICAgICAgICAgICAgIlRlc3RPYmo6aWQiLAotICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajppZCIsCi0gICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
LQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RD
bGFzcywKLSAgICAgICAgUFJPUF9IQVNILAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAot
ICAgICAgICAgICAgImhhc2giLAotICAgICAgICAgICAgIlRlc3RPYmo6aGFzaCIsCi0gICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0T2JqOmhhc2giLAotICAgICAgICAgICAgIiIsCi0g
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9S
RVBMQUNFQUJMRV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAg
ICAgICAgInJlcGxhY2VhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZXBs
YWNlYWJsZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUZXN0T2Jq
OnJlcGxhY2VhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX05VTExBQkxFX0RPVUJMRV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19k
b3VibGUoCi0gICAgICAgICAgICAibnVsbGFibGUtZG91YmxlLWF0dHJpYnV0ZSIsCi0gICAgICAg
ICAgICAiVGVzdE9iajpudWxsYWJsZS1kb3VibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2RvdWJsZSBUZXN0T2JqOm51bGxhYmxlLWRvdWJsZS1hdHRyaWJ1dGUiLAotICAg
ICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05VTExBQkxFX0xPTkdfQVRU
UklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJudWxsYWJs
ZS1sb25nLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpudWxsYWJsZS1sb25nLWF0
dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRlc3RPYmo6bnVsbGFibGUt
bG9uZy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCi0g
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9O
VUxMQUJMRV9CT09MRUFOX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
Ci0gICAgICAgICAgICAibnVsbGFibGUtYm9vbGVhbi1hdHRyaWJ1dGUiLAotICAgICAgICAgICAg
IlRlc3RPYmo6bnVsbGFibGUtYm9vbGVhbi1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQt
b25seSBnYm9vbGVhbiBUZXN0T2JqOm51bGxhYmxlLWJvb2xlYW4tYXR0cmlidXRlIiwKLSAgICAg
ICAgICAgIEZBTFNFLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgIFBST1BfTlVMTEFCTEVfU1RSSU5HX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJudWxsYWJsZS1zdHJpbmctYXR0cmlidXRlIiwK
LSAgICAgICAgICAgICJUZXN0T2JqOm51bGxhYmxlLXN0cmluZy1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdE9iajpudWxsYWJsZS1zdHJpbmctYXR0cmlidXRl
IiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0
Q2xhc3MsCi0gICAgICAgIFBST1BfTlVMTEFCTEVfTE9OR19TRVRUQUJMRV9BVFRSSUJVVEUsCi0g
ICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAgIm51bGxhYmxlLWxvbmctc2V0
dGFibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm51bGxhYmxlLWxvbmctc2V0
dGFibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6
bnVsbGFibGUtbG9uZy1zZXR0YWJsZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0K
LSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xh
c3MsCi0gICAgICAgIFBST1BfTlVMTEFCTEVfU1RSSU5HX1NFVFRBQkxFX0FUVFJJQlVURSwKLSAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJudWxsYWJsZS1zdHJpbmct
c2V0dGFibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm51bGxhYmxlLXN0cmlu
Zy1zZXR0YWJsZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRl
c3RPYmo6bnVsbGFibGUtc3RyaW5nLXNldHRhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAi
IiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAg
UFJPUF9OVUxMQUJMRV9TVFJJTkdfVkFMVUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAot
ICAgICAgICAgICAgIm51bGxhYmxlLXN0cmluZy12YWx1ZSIsCi0gICAgICAgICAgICAiVGVzdE9i
ajpudWxsYWJsZS1zdHJpbmctdmFsdWUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcg
VGVzdE9iajpudWxsYWJsZS1zdHJpbmctdmFsdWUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgIFBST1BfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAot
ICAgICAgICAgICAgImF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajphdHRyaWJ1dGUi
LAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdE9iajphdHRyaWJ1dGUiLAotICAg
ICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywK
LSAgICAgICAgUFJPUF9QVVRfRk9SV0FSRFNfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KAotICAgICAgICAgICAgInB1dC1mb3J3YXJkcy1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6cHV0LWZvcndhcmRzLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTVRlc3ROb2RlKiBUZXN0T2JqOnB1dC1mb3J3YXJkcy1hdHRyaWJ1dGUi
LAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9ERSwKLSAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1BVVF9GT1JXQVJEU19O
VUxMQUJMRV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAg
ICAgICAicHV0LWZvcndhcmRzLW51bGxhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVz
dE9iajpwdXQtZm9yd2FyZHMtbnVsbGFibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NVGVzdE5vZGUqIFRlc3RPYmo6cHV0LWZvcndhcmRzLW51bGxhYmxlLWF0
dHJpYnV0ZSIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT0RFLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfU1RSSU5H
SUZJRVJfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAg
ICAgInN0cmluZ2lmaWVyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpzdHJpbmdp
Zmllci1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6
c3RyaW5naWZpZXItYXR0cmlidXRlIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfaW5pdChXZWJLaXRET01UZXN0T2JqKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRl
c3RPYmpQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShyZXF1
ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RPYmpQcml2YXRlKCk7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB0ZXN0UGFyYW0pCi17Ci0jaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHRlc3RQYXJhbSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXN0UGFy
YW0gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGVzdFBhcmFtKTsKLSAgICBpdGVtLT5lbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uKGNvbnZlcnRlZFRlc3RQYXJhbSk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFtKTsKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVOQUJM
RShURVNUX0ZFQVRVUkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9lbmFibGVk
X2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHRlc3RQ
YXJhbSkKLXsKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbih0ZXN0UGFyYW0p
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHRlc3RQ
YXJhbSk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0dXJl
IikKLSNlbmRpZiAvKiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfdm9pZF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnZvaWRNZXRob2QoKTsKLX0KLQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRE
T01UZXN0T2JqKiBvYmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHJBcmcpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihvYmpBcmcpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFy
ZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJBcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoq
IGNvbnZlcnRlZE9iakFyZyA9IFdlYktpdDo6Y29yZShvYmpBcmcpOwotICAgIGl0ZW0tPnZvaWRN
ZXRob2RXaXRoQXJncyhsb25nQXJnLCBjb252ZXJ0ZWRTdHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcp
OwotfQotCi1naW50OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0aG9kKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2ludDggcmVzdWx0ID0gaXRlbS0+Ynl0ZU1ldGhvZCgpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWdpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ4IGJ5dGVBcmcsIGNvbnN0IGdjaGFyKiBzdHJBcmcs
IFdlYktpdERPTVRlc3RPYmoqIG9iakFyZykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCAwKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iakFyZyks
IDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0
ckFyZyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0Ojpj
b3JlKG9iakFyZyk7Ci0gICAgZ2ludDggcmVzdWx0ID0gaXRlbS0+Ynl0ZU1ldGhvZFdpdGhBcmdz
KGJ5dGVBcmcsIGNvbnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZyk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZ3VpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9kKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9P
Qkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9jdGV0TWV0aG9kKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotZ3VpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9k
X3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDggb2N0ZXRBcmcsIGNvbnN0
IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZykKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc3RyQXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKG9iakFyZyksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2Jq
QXJnID0gV2ViS2l0Ojpjb3JlKG9iakFyZyk7Ci0gICAgZ3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9j
dGV0TWV0aG9kV2l0aEFyZ3Mob2N0ZXRBcmcsIGNvbnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9i
akFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29i
al9sb25nX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmxvbmdNZXRo
b2QoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2xvbmdfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25n
QXJnLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJBcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNv
bnZlcnRlZE9iakFyZyA9IFdlYktpdDo6Y29yZShvYmpBcmcpOwotICAgIGdsb25nIHJlc3VsdCA9
IGl0ZW0tPmxvbmdNZXRob2RXaXRoQXJncyhsb25nQXJnLCBjb252ZXJ0ZWRTdHJBcmcsICpjb252
ZXJ0ZWRPYmpBcmcpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoq
IHdlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9k
KCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQot
V2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kX3dpdGhfYXJn
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3Ry
QXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywg
MCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihvYmpB
cmcpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChzdHJBcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZE9iakFyZyA9IFdlYktp
dDo6Y29yZShvYmpBcmcpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgY29udmVy
dGVkU3RyQXJnLCAqY29udmVydGVkT2JqQXJnKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3VuZm9y
Z2VhYmxlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnVuZm9yZ2Vh
YmxlTWV0aG9kKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX2FyZ190cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogYXJnKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoYXJnKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZEFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChhcmcpOwotICAgIGl0ZW0t
Pm1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKGNvbnZlcnRlZEFyZyk7Ci19
Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZl
cl9wYXJhbWV0ZXIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29s
dmVyKiByZXNvbHZlcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfTlNfUkVTT0xWRVIocmVz
b2x2ZXIpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI+IGNvbnZlcnRlZFJlc29sdmVy
ID0gV2ViS2l0Ojpjb3JlKHJlc29sdmVyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoWFBhdGhOU1Jl
c29sdmVyUGFyYW1ldGVyKFdURjo6Z2V0UHRyKCpjb252ZXJ0ZWRSZXNvbHZlcikpOwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9udWxsYWJsZV9zdHJpbmdfbWV0aG9kKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bnVsbGFibGVT
dHJpbmdNZXRob2QoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9vYmpfbnVsbGFibGVfc3RyaW5nX3NwZWNpYWxfbWV0aG9kKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGd1bG9uZyBpbmRleCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5u
dWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QoaW5kZXgpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZW51bV9hcmcoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX0VOVU1fVFlQRShlbnVtQXJnKSk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0RW51bVR5
cGUqIGNvbnZlcnRlZEVudW1BcmcgPSBXZWJLaXQ6OmNvcmUoZW51bUFyZyk7Ci0gICAgaXRlbS0+
bWV0aG9kV2l0aEVudW1BcmcoY29udmVydGVkRW51bUFyZyk7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9lbnVtX2FyZyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01UZXN0RW51bVR5cGUqIGVudW1BcmcpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfRU5VTV9UWVBFKGVudW1BcmcpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RFbnVtVHlwZSogY29udmVy
dGVkRW51bUFyZyA9IFdlYktpdDo6Y29yZShlbnVtQXJnKTsKLSAgICBpdGVtLT5tZXRob2RXaXRo
T3B0aW9uYWxFbnVtQXJnKGNvbnZlcnRlZEVudW1BcmcpOwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9hcmdfYW5kX2RlZmF1bHRfdmFsdWUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VOVU1fVFlQRShlbnVtQXJnKSk7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0
RW51bVR5cGUqIGNvbnZlcnRlZEVudW1BcmcgPSBXZWJLaXQ6OmNvcmUoZW51bUFyZyk7Ci0gICAg
aXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRF
bnVtQXJnKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgR0Vycm9y
KiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRT
dHJBcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBjb252ZXJ0ZWRPYmpBcmcgPSBXZWJLaXQ6OmNvcmUob2JqQXJnKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3MoY29udmVydGVkU3RyQXJnLCAqY29udmVydGVkT2JqQXJnLCBlYykpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiBzZXJpYWxpemVkQXJnKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZEFyZyk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5z
ZXJpYWxpemVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHNlcmlhbGl6ZWRBcmcpKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRE
T01EaWN0aW9uYXJ5KiBvbywgV2ViS2l0RE9NRGljdGlvbmFyeSogb29vKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ESUNUSU9OQVJZKG9vKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RJQ1RJT05BUlkob29vKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5KiBjb252ZXJ0ZWRPbyA9IFdl
YktpdDo6Y29yZShvbyk7Ci0gICAgV2ViQ29yZTo6RGljdGlvbmFyeSogY29udmVydGVkT29vID0g
V2ViS2l0Ojpjb3JlKG9vbyk7Ci0gICAgaXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRPbywg
Y29udmVydGVkT29vKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0
ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1l
dGhvZFdpdGhFeGNlcHRpb25XaXRoTWVzc2FnZSgpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90
ZXN0X29ial9wdWJsaWNfYW5kX3ByaXZhdGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiBhcmd1bWVudCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYXJndW1lbnQsIDApOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RG
OjpTdHJpbmcgY29udmVydGVkQXJndW1lbnQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoYXJndW1l
bnQpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnB1Ymxp
Y0FuZFByaXZhdGVNZXRob2QoY29udmVydGVkQXJndW1lbnQpKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgaXRlbS0+d2l0aFNjcmlwdFN0YXRlVm9pZCgpOwotfQotCi1XZWJLaXRET01UZXN0T2Jq
KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAw
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0
X3N0YXRlX3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVy
cm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaXRlbS0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQot
Ci1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRl
X29ial9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQot
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBp
dGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZSgpOwot
fQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4
ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3RPYmo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQot
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotV2ViS2l0
RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29u
dGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3RPYmo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcygpKTsKLSAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial93aXRoX2RvY3VtZW50X2FyZ3VtZW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoRG9jdW1l
bnRBcmd1bWVudCgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9jYWxsZXJf
ZG9jdW1lbnRfYXJndW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPndpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50
KCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl93aW5kb3dfYXJn
dW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGl0ZW0tPndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCgpOwotfQotCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwotfQotCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3ZhbHVl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRW
YWx1ZShvcHQpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9u
X29wdGlvbmFsX2FyZ19hbmRfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGds
b25nIG5vbk9wdCwgZ2xvbmcgb3B0KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0
LCBvcHQpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29w
dGlvbmFsX2FyZ19hbmRfdHdvX29wdGlvbmFsX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgbm9uT3B0LCBnbG9uZyBvcHQxLCBnbG9uZyBvcHQyKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzKG5vbk9wdCwgb3B0MSwgb3B0Mik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmcoY29udmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX2F0b21pY19zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTdHJpbmcoY29udmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFN0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPm1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRTdHIpOwotfQotCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmlu
Z19hbmRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciog
c3RyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0Fu
ZERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX251bGwoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRT
dHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc051bGwoY29udmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRTdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19p
c19udWxsKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCi17Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChz
dHIpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7
Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKGNvbnZlcnRl
ZFN0cik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25h
bF9zdHJpbmdfaXNfZW1wdHlfc3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzdHIpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChzdHIpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNF
bXB0eVN0cmluZyhjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
bWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19lbXB0eV9zdHJpbmcoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5t
ZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKGNvbnZlcnRlZFN0cik7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9kb3Vi
bGVfaXNfbmFfbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZG91YmxlIG51bWJlcikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25h
bERvdWJsZUlzTmFOKG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9mbG9hdF9pc19uYV9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdm
bG9hdCBudW1iZXIpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVt
LT5tZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmcoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2ludDY0IG51bWJlcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKG51bWJlcik7Ci19Ci0K
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdf
aXNfemVybyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50NjQgbnVtYmVyKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsTG9u
Z0xvbmdJc1plcm8obnVtYmVyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBndWludDY0IG51bWJlcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcobnVtYmVyKTsKLX0KLQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xv
bmdfbG9uZ19pc196ZXJvKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1aW50NjQgbnVtYmVyKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRl
c3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9w
dGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhudW1iZXIpOwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYm9vbGVhbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnYm9vbGVhbiBiKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbihiKTsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2Jvb2xlYW5faXNfZmFsc2UoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gYikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKGIpOwot
fQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYW55KFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWFueSogYSkKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfQU5ZKGEpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFdlYkNvcmU6OmFueSogY29udmVydGVkQSA9IFdlYktpdDo6Y29yZShhKTsKLSAg
ICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxBbnkoY29udmVydGVkQSk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9udWxsYWJsZV93cmFwcGVyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIG9iaikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkoob2JqKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0ZWRPYmogPSBX
ZWJLaXQ6OmNvcmUob2JqKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdy
YXBwZXIoY29udmVydGVkT2JqKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX251bGxhYmxlX3dyYXBwZXJfaXNfbnVsbChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiBvYmopCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKG9iaikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqID0gV2ViS2l0Ojpjb3JlKG9i
aik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsKGNv
bnZlcnRlZE9iaik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9v
cHRpb25hbF94cGF0aF9uc19yZXNvbHZlcihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRE
T01YUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9O
U19SRVNPTFZFUihyZXNvbHZlcikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlcj4gY29u
dmVydGVkUmVzb2x2ZXIgPSBXZWJLaXQ6OmNvcmUocmVzb2x2ZXIpOwotICAgIGl0ZW0tPm1ldGhv
ZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlcihXVEY6OmdldFB0cihjb252ZXJ0ZWRSZXNvbHZl
cikpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2Qx
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRl
c3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y29uZGl0aW9uYWxNZXRob2QxKCkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICByZXR1cm4gMDsKLSNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2NvbmRpdGlvbmFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDIoKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHNlbGYpOwotI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSNlbmRpZgotI2lmICFFTkFC
TEUoQ29uZGl0aW9uMikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24yIikKLSNlbmRpZgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFs
X21ldGhvZDMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDMoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEi
KQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2Vu
ZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX2VuZm9yY2VfcmFuZ2Uo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCBvYmpBcmdzU2hvcnQsIGd1bG9uZyBvYmpB
cmdzTG9uZykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmNs
YXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShvYmpBcmdzU2hvcnQsIG9iakFyZ3NMb25nKTsKLX0K
LQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTVRlc3ROb2RlKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9O
T0RFKHZhbHVlKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNv
cmUodmFsdWUpOwotICAgIGl0ZW0tPmNvbnZlcnQxKCpjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01UZXN0Tm9kZSogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9ERSh2
YWx1ZSkpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV2ViQ29yZTo6VGVzdE5vZGUqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZh
bHVlKTsKLSAgICBpdGVtLT5jb252ZXJ0Mihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+Y29udmVydDMoY29udmVydGVk
VmFsdWUpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0
ZW0tPmNvbnZlcnQ0KGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqIHdl
YmtpdF9kb21fdGVzdF9vYmpfbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
Pm11dGFibGVQb2ludEZ1bmN0aW9uKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqIHdlYmtpdF9kb21fdGVzdF9v
YmpfaW1tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OlNWR1BvaW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9p
bnRGdW5jdGlvbigpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2UoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmJh
bmFuYSgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21l
dGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogaGVhZCwgLi4uKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoaGVhZCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRIZWFkID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KGhlYWQpOwotICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OwotICAgIFZlY3RvcjxX
VEY6OlN0cmluZz4gY29udmVydGVkVGFpbDsKLSAgICB2YV9zdGFydCh2YXJpYWRpY1BhcmFtZXRl
ckxpc3QsIGhlYWQpOwotICAgIHdoaWxlIChnY2hhciogdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9h
cmcodmFyaWFkaWNQYXJhbWV0ZXJMaXN0LCBnY2hhciopKQotICAgICAgICBjb252ZXJ0ZWRUYWls
LmFwcGVuZChXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFyaWFkaWNQYXJhbWV0ZXIpKTsKLSAgICB2
YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTsKLSAgICBpdGVtLT52YXJpYWRpY1N0cmluZ01l
dGhvZChjb252ZXJ0ZWRIZWFkLCBXVEZNb3ZlKGNvbnZlcnRlZFRhaWwpKTsKLX0KLQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX2RvdWJsZV9tZXRob2QoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2RvdWJsZSBoZWFkLCBndWludCBuX3RhaWwsIC4uLikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0Owot
ICAgIFZlY3RvcjxnZG91YmxlPiBjb252ZXJ0ZWRUYWlsOwotICAgIHZhX3N0YXJ0KHZhcmlhZGlj
UGFyYW1ldGVyTGlzdCwgaGVhZCk7Ci0gICAgY29udmVydGVkVGFpbC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG5fdGFpbCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fdGFpbDsgKytp
KSB7Ci0gICAgICAgIGNvbnZlcnRlZFRhaWwudW5jaGVja2VkQXBwZW5kKHZhX2FyZyh2YXJpYWRp
Y1BhcmFtZXRlckxpc3QsIGdkb3VibGUpKTsKLSAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJM
aXN0KTsKLSAgICBpdGVtLT52YXJpYWRpY0RvdWJsZU1ldGhvZChoZWFkLCBXVEZNb3ZlKGNvbnZl
cnRlZFRhaWwpKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX25vZGVf
bWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTU5vZGUqIGhlYWQsIC4uLikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShoZWFkKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRI
ZWFkID0gV2ViS2l0Ojpjb3JlKGhlYWQpOwotICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJM
aXN0OwotICAgIFZlY3RvcjxXZWJDb3JlOjpOb2RlKj4gY29udmVydGVkVGFpbDsKLSAgICB2YV9z
dGFydCh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIGhlYWQpOwotICAgIHdoaWxlIChXZWJLaXRET01O
b2RlKiB2YXJpYWRpY1BhcmFtZXRlciA9IHZhX2FyZyh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIFdl
YktpdERPTU5vZGUqKSkKLSAgICAgICAgY29udmVydGVkVGFpbC5hcHBlbmQoV2ViS2l0Ojpjb3Jl
KHZhcmlhZGljUGFyYW1ldGVyKSk7Ci0gICAgdmFfZW5kKHZhcmlhZGljUGFyYW1ldGVyTGlzdCk7
Ci0gICAgaXRlbS0+dmFyaWFkaWNOb2RlTWV0aG9kKCpjb252ZXJ0ZWRIZWFkLCBXVEZNb3ZlKGNv
bnZlcnRlZFRhaWwpKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2FueShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnZmxvYXQgYSwgZ2xvbmcgYikKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmFueShhLCBiKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2F0dGFjaF9zaGFkb3dfcm9vdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0RGljdGlvbmFyeSogaW5pdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9ESUNU
SU9OQVJZKGluaXQpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3REaWN0aW9uYXJ5KiBjb252ZXJ0ZWRJbml0ID0gV2Vi
S2l0Ojpjb3JlKGluaXQpOwotICAgIGl0ZW0tPmF0dGFjaFNoYWRvd1Jvb3QoY29udmVydGVkSW5p
dCk7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5yZWFkT25seUxvbmdBdHRyKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3JlYWRfb25seV9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWFkX29ubHlfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0
T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZE9ubHlUZXN0T2JqQXR0
cigpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0K
LWdpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2J5dGVfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdp
bnQ4IHJlc3VsdCA9IGl0ZW0tPmJ5dGVBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9ieXRlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2ludDggdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBpdGVtLT5zZXRCeXRlQXR0cih2YWx1ZSk7Ci19Ci0KLWd1aW50OCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9vY3RldF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9j
dGV0QXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfb2N0ZXRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDggdmFsdWUp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRPY3RldEF0
dHIodmFsdWUpOwotfQotCi1nc2hvcnQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2hvcnRfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdzaG9ydCByZXN1bHQgPSBpdGVtLT5zaG9ydEF0dHIoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0U2hvcnRBdHRyKHZhbHVlKTsKLX0KLQot
Z3Nob3J0IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NsYW1wZWRfc2hvcnRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdzaG9ydCByZXN1bHQgPSBpdGVtLT5jbGFtcGVkU2hvcnRBdHRyKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jbGFtcGVkX3No
b3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q2xhbXBlZFNob3J0QXR0cih2
YWx1ZSk7Ci19Ci0KLWdzaG9ydCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmZvcmNlX3Jhbmdl
X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnc2hvcnQgcmVzdWx0ID0gaXRlbS0+ZW5mb3JjZVJh
bmdlU2hvcnRBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+c2V0RW5mb3JjZVJhbmdlU2hvcnRBdHRyKHZhbHVlKTsKLX0KLQotZ3VzaG9ydCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z3VzaG9ydCByZXN1bHQgPSBpdGVtLT51bnNpZ25lZFNob3J0QXR0cigpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndXNob3J0IHZhbHVlKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRTaG9ydEF0dHIodmFs
dWUpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9sb25nX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5sb25nQXR0cigpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgaXRlbS0+c2V0TG9uZ0F0dHIodmFsdWUpOwotfQotCi1naW50NjQgd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnaW50NjQgcmVz
dWx0ID0gaXRlbS0+bG9uZ0xvbmdBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnaW50NjQgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5zZXRMb25nTG9uZ0F0dHIodmFsdWUpOwotfQotCi1ndWludDY0IHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3Vp
bnQ2NCByZXN1bHQgPSBpdGVtLT51bnNpZ25lZExvbmdMb25nQXR0cigpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19s
b25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ2NCB2YWx1ZSkKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldFVuc2lnbmVkTG9uZ0xvbmdB
dHRyKHZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+c3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNv
bnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9iakF0dHIoKSk7Ci0gICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
V2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHZh
bHVlKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1
ZSk7Ci0gICAgaXRlbS0+c2V0VGVzdE9iakF0dHIoKmNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2Vi
S2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9udWxsYWJsZV9vYmpf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE51bGxhYmxlT2JqQXR0cigpKTsKLSAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfdGVzdF9udWxsYWJsZV9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
dmFsdWUpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZh
bHVlKTsKLSAgICBpdGVtLT5zZXRUZXN0TnVsbGFibGVPYmpBdHRyKGNvbnZlcnRlZFZhbHVlKTsK
LX0KLQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbGVuaWVudF90
ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sZW5pZW50VGVzdE9iakF0dHIoKSk7Ci0gICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkoodmFsdWUpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpj
b3JlKHZhbHVlKTsKLSAgICBpdGVtLT5zZXRMZW5pZW50VGVzdE9iakF0dHIoKmNvbnZlcnRlZFZh
bHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3VuZm9yZ2VhYmxlX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT51bmZvcmdlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlf
c3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl90
cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoY29udmVydGVkVmFsdWUpOwotfQotCi1XZWJLaXRET01U
ZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwg
MCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPnhtbE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkoodmFsdWUpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZh
bHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBpdGVtLT5zZXRYTUxPYmpBdHRyKCpjb252
ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc0NyZWF0ZSgpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY3Jl
YXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q3JlYXRlKHZhbHVlKTsKLX0KLQot
Z2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRz
dHJpbmdhdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
c3RyaW5nYXR0ckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyBy
ZXN1bHQgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZGludGVncmFsYXR0ckF0dHIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ3Vsb25nIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVm
bGVjdGVkX3Vuc2lnbmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vs
b25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIEZBTFNF
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVk
X2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIHZhbHVl
KTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91cmxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRy
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9yZWZsZWN0ZWRfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgY29u
dmVydGVkVmFsdWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21f
aW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0
ckF0dHIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdsb25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
aXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50SW50ZWdyYWxBdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCBGQUxT
RSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZs
ZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVh
biB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNl
dEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVh
bkF0dHJBdHRyLCB2YWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRl
c3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
LSAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0K
LWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmli
dXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkp
OwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotICAgIHJl
dHVybiAwOwotI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFRFU1Rf
RkVBVFVSRSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlKGNvbnZlcnRlZFZhbHVlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVGVzdCBGZWF0dXJlIikKLSNlbmRpZiAvKiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQot
Ci1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0
dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZh
bHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0QXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24odmFsdWUpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNz
YWdlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBpdGVtLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKHZhbHVl
KTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5hdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0QXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24odmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1l
c3NhZ2UoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGl0ZW0tPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UodmFs
dWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0
aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9y
KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9n
ZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKGNvbnZlcnRlZFZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nbG9uZyB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwg
MCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnbG9uZyByZXN1bHQgPSBpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2Nh
bGxfd2l0aF9hbmRfc2V0dGVyX2NhbGxfd2l0aF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKSk7Ci0gICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi1XZWJLaXRET01U
ZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYykpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdlYktpdERP
TVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9j
b250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiog
ZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXMoZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhf
c2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNl
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9z
Y3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRy
aWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29u
ZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIxKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4o
MCk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIxKHZhbHVlKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0g
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0jZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5B
QkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNvbmRpdGlvbmFs
QXR0cjIoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7Ci0jaWYgIUVOQUJMRShDb25kaXRpb24xKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotI2VuZGlmCi0jaWYgIUVOQUJMRShDb25kaXRpb24yKQot
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlm
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24y
KQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRl
c3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9u
YWxBdHRyMih2YWx1ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwotI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSNlbmRpZgotI2lmICFFTkFCTEUo
Q29uZGl0aW9uMikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yIikKLSNlbmRpZgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9u
YWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9P
Qkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMygpOwotICAg
IHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25h
bF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIzKHZhbHVlKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi1XZWJLaXRET01hbnkq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6YW55PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YW55QXR0
cmlidXRlKCkpOwotICAgIHJldHVybiAwOyAvLyBUT0RPOiByZXR1cm4gY2FudmFzIG9iamVjdAot
fQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYW55KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
QU5ZKHZhbHVlKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjphbnkqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZh
bHVlKTsKLSAgICBpdGVtLT5zZXRBbnlBdHRyaWJ1dGUoY29udmVydGVkVmFsdWUpOwotfQotCi1X
ZWJLaXRET01Eb2N1bWVudCogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29udGVudF9kb2N1bWVu
dChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRlbnREb2N1bWVudCgpKTsKLSAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50KiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlNWR1BvaW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bXV0YWJs
ZVBvaW50KCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
LX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9tdXRhYmxlX3BvaW50KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfU1ZHX1BPSU5UKHZhbHVlKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpTVkdQb2ludCogY29udmVydGVkVmFsdWUg
PSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgIGl0ZW0tPnNldE11dGFibGVQb2ludChjb252ZXJ0
ZWRWYWx1ZSk7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbW11dGFibGVQb2ludCgpKTsKLSAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1ZHX1BP
SU5UKHZhbHVlKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpTVkdQb2ludCogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNv
cmUodmFsdWUpOwotICAgIGl0ZW0tPnNldEltbXV0YWJsZVBvaW50KGNvbnZlcnRlZFZhbHVlKTsK
LX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyYXdiZXJyeShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmJsdWViZXJyeSgpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyYXdiZXJyeShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGl0ZW0tPnNldEJsdWViZXJyeSh2YWx1ZSk7Ci19Ci0KLWdsb25nIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2Rlc2NyaXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzdWx0ID0g
aXRlbS0+ZGVzY3JpcHRpb24oKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
PmlkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldElkKHZhbHVlKTsKLX0KLQotZ2No
YXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5oYXNoKCkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlcGxhY2VhYmxlX2F0dHJp
YnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnJlcGxhY2VhYmxlQXR0cmli
dXRlKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2RvdWJsZSB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9udWxsYWJsZV9kb3VibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2RvdWJsZSBy
ZXN1bHQgPSBpdGVtLT5udWxsYWJsZURvdWJsZUF0dHJpYnV0ZSgpLnZhbHVlT3IoMCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFi
bGVfbG9uZ19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5udWxs
YWJsZUxvbmdBdHRyaWJ1dGUoKS52YWx1ZU9yKDApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2Jvb2xlYW5fYXR0cmli
dXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm51bGxhYmxlQm9v
bGVhbkF0dHJpYnV0ZSgpLnZhbHVlT3IoMCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2No
YXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19hdHRyaWJ1dGUoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5udWxs
YWJsZVN0cmluZ0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9sb25nX3NldHRhYmxlX2F0dHJpYnV0ZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
cmlidXRlKCkudmFsdWVPcigwKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUodmFs
dWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5n
X3NldHRhYmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxs
YWJsZV9zdHJpbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXROdWxsYWJsZVN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5nX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJv
ciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5udWxsYWJsZVN0cmluZ1ZhbHVlKGVjKS52YWx1ZU9yKDApOwotICAgIGlmIChlYykgewot
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmlu
Z192YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldE51bGxhYmxlU3RyaW5nVmFsdWUo
dmFsdWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cmlidXRlKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9P
Qkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0
cmlidXRlKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3ROb2RlKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OlRlc3ROb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+cHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi1XZWJLaXRET01UZXN0Tm9kZSogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAw
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpUZXN0Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc3RyaW5naWZpZXJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdp
Zmllcl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldFN0cmluZ2lmaWVyQXR0cmlidXRlKGNvbnZl
cnRlZFZhbHVlKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0YWZhOWEzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgL2Rl
di9udWxsCkBAIC0xLDIxMjUgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2lmbmRlZiBXZWJLaXRET01UZXN0T2JqX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE9ial9o
Ci0KLSNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVHSU5fREVD
TFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PQkogICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9URVNUX09CSiwgV2ViS2l0RE9NVGVzdE9iaikpCi0jZGVmaW5lIFdFQktJVF9ET01f
VEVTVF9PQkpfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLCBXZWJLaXRET01UZXN0T2JqQ2xhc3MpCi0jZGVm
aW5lIFdFQktJVF9ET01fSVNfVEVTVF9PQkoob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9JU19URVNUX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PQkopKQotI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfT0JKX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwgV2ViS2l0RE9NVGVzdE9iakNsYXNzKSkKLQot
I2lmIEVOQUJMRShDb25kaXRpb24xKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTkRJ
VElPTkFMX0NPTlNUOgotICovCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ09ORElUSU9O
QUxfQ09OU1QgMAotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwotCi0vKioKLSAqIFdF
QktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMDoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzAgMAotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpf
Q09OU1RfVkFMVUVfMToKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZB
TFVFXzEgMQotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMjoKLSAq
LwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzIgMgotCi0vKioKLSAq
IFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfNDoKLSAqLwotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzQgNAotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9P
QkpfQ09OU1RfVkFMVUVfODoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNU
X1ZBTFVFXzggOAotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfOToK
LSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzkgLTEKLQotLyoq
Ci0gKiBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzExOgotICovCi0jZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMTEgMHhmZmZmZmZmZgotCi0vKioKLSAqIFdF
QktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMTI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RP
TV9URVNUX09CSl9DT05TVF9WQUxVRV8xMiAweDAxCi0KLS8qKgotICogV0VCS0lUX0RPTV9URVNU
X09CSl9DT05TVF9WQUxVRV8xMzoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NP
TlNUX1ZBTFVFXzEzIDBYMjAKLQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZB
TFVFXzE0OgotICovCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMTQg
MHgxYWJjCi0KLS8qKgotICogV0VCS0lUX0RPTV9URVNUX09CSl9DT05TVF9KQVZBU0NSSVBUOgot
ICovCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfSkFWQVNDUklQVCAxNQotCi0v
KioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfcmVhZG9ubHk6Ci0gKi8KLSNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX09CSl9yZWFkb25seSAwCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE9iaiB7Ci0g
ICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0
RE9NVGVzdE9iakNsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90eXBlKHZv
aWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZW5hYmxlZF9hdF9ydW50aW1lX29w
ZXJhdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdGVzdFBhcmFtOiBB
ICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb24oV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB0ZXN0UGFyYW06IEEgI2dsb25nCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBn
bG9uZyB0ZXN0UGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRo
b2Q6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0
aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
Ympfdm9pZF9tZXRob2Rfd2l0aF9hcmdzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqIEBsb25nQXJnOiBBICNnbG9uZwotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpBcmc6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2FyZ3Mo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgbG9uZ0FyZywgY29uc3QgZ2NoYXIqIHN0ckFy
ZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2J5dGVfbWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBS
ZXR1cm5zOiBBICNnaW50OAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBnaW50OAotd2Via2l0X2RvbV90ZXN0X29ial9ieXRlX21ldGhvZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0aG9kX3dp
dGhfYXJnczoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAYnl0ZUFyZzogQSAj
Z2ludDgKLSAqIEBzdHJBcmc6IEEgI2djaGFyCi0gKiBAb2JqQXJnOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2ludDgKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgZ2ludDgKLXdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rf
d2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ4IGJ5dGVBcmcsIGNvbnN0IGdj
aGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZyk7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9vY3RldF9tZXRob2Q6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICoKLSAqIFJldHVybnM6IEEgI2d1aW50OAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSBndWludDgKLXdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9k
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
b2N0ZXRfbWV0aG9kX3dpdGhfYXJnczoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KiBAb2N0ZXRBcmc6IEEgI2d1aW50OAotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpBcmc6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNndWludDgKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ4Ci13ZWJraXRfZG9tX3Rl
c3Rfb2JqX29jdGV0X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vp
bnQ4IG9jdGV0QXJnLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpB
cmcpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbG9uZ19tZXRob2Q6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2xvbmdfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfbG9uZ19tZXRob2Rfd2l0aF9hcmdzOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqIEBsb25nQXJnOiBBICNnbG9uZwotICogQHN0ckFyZzogQSAjZ2No
YXIKLSAqIEBvYmpBcmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwot
d2Via2l0X2RvbV90ZXN0X29ial9sb25nX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2xvbmcgbG9uZ0FyZywgY29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9NVGVz
dE9iaiogb2JqQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Q6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9v
YmpfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfb2JqX21ldGhvZF93aXRoX2FyZ3M6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICogQGxvbmdBcmc6IEEgI2dsb25nCi0gKiBAc3RyQXJnOiBBICNnY2hhcgotICogQG9i
akFyZzogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0
aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25z
dCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfdW5mb3JnZWFibGVfbWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial91bmZv
cmdlYWJsZV9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9hcmdfdHJlYXRpbmdfbnVsbF9hc19lbXB0eV9zdHJp
bmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGFyZzogQSAjZ2NoYXIKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9hcmdfdHJlYXRpbmdfbnVsbF9hc19lbXB0eV9zdHJpbmco
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIGFyZyk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZlcl9wYXJhbWV0ZXI6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHJlc29sdmVyOiBBICNXZWJLaXRE
T01YUGF0aE5TUmVzb2x2ZXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNv
bHZlcl9wYXJhbWV0ZXIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jl
c29sdmVyKiByZXNvbHZlcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9udWxsYWJs
ZV9zdHJpbmdfbWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBS
ZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfbnVsbGFibGVfc3RyaW5nX21ldGhvZChX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX251
bGxhYmxlX3N0cmluZ19zcGVjaWFsX21ldGhvZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKiBAaW5kZXg6IEEgI2d1bG9uZwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2Rv
bV90ZXN0X29ial9udWxsYWJsZV9zdHJpbmdfc3BlY2lhbF9tZXRob2QoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ3Vsb25nIGluZGV4KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX2VudW1fYXJnOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBl
bnVtQXJnOiBBICNXZWJLaXRET01UZXN0RW51bVR5cGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0
aF9lbnVtX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0RW51bVR5cGUq
IGVudW1BcmcpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0
aW9uYWxfZW51bV9hcmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGVudW1B
cmc6IEEgI1dlYktpdERPTVRlc3RFbnVtVHlwZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29w
dGlvbmFsX2VudW1fYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RFbnVt
VHlwZSogZW51bUFyZyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0
aF9vcHRpb25hbF9lbnVtX2FyZ19hbmRfZGVmYXVsdF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAZW51bUFyZzogQSAjV2ViS2l0RE9NVGVzdEVudW1UeXBlCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9hcmdfYW5kX2RlZmF1bHRfdmFsdWUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9h
cmdzX2FuZF90aHJvd3M6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0ckFy
ZzogQSAjZ2NoYXIKLSAqIEBvYmpBcmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjog
I0dFcnJvcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVz
dE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRE
T01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxf
YXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJB
cmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAc2VyaWFsaXplZEFyZzogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9z
ZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZXJp
YWxpemVkQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvbzogQSAjV2ViS2l0RE9NRGlj
dGlvbmFyeQotICogQG9vbzogQSAjV2ViS2l0RE9NRGljdGlvbmFyeQotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29w
dGlvbnNfb2JqZWN0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTURpY3Rpb25hcnkq
IG9vLCBXZWJLaXRET01EaWN0aW9uYXJ5KiBvb28pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb25fd2l0aF9tZXNzYWdlOgotICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNl
cHRpb25fd2l0aF9tZXNzYWdlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfcHVibGljX2FuZF9wcml2YXRlX21ldGhvZDoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAYXJndW1lbnQ6IEEgI2djaGFyCi0gKgotICogUmV0dXJu
czogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3B1YmxpY19hbmRfcHJpdmF0ZV9tZXRob2QoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIGFyZ3VtZW50KTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQ6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRo
X3NjcmlwdF9zdGF0ZV9vYmo6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Vi
a2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmooV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92
b2lkX2V4Y2VwdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAZXJyb3I6
ICNHRXJyb3IKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90
ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dp
dGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0
X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0
YXRlX29ial9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGVy
cm9yOiAjR0Vycm9yCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdl
YktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlv
bl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93
aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2Vz
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
d2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNl
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3dpdGhfZG9jdW1lbnRfYXJndW1lbnQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3dpdGhfZG9jdW1lbnRfYXJndW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
Zik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl9kb2N1bWVudF9h
cmd1bWVudDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0
aF9jYWxsZXJfZG9jdW1lbnRfYXJndW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl93aW5kb3dfYXJndW1lbnQ6Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfY2FsbGVyX3dp
bmRvd19hcmd1bWVudChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZzoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAb3B0OiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBvcHQpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZh
dWx0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvcHQ6IEEgI2ds
b25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3Zh
bHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCk7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF9vcHRpb25hbF9h
cmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQG5vbk9wdDogQSAjZ2xvbmcK
LSAqIEBvcHQ6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFs
X2FyZ19hbmRfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbk9w
dCwgZ2xvbmcgb3B0KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X25vbl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqIEBub25PcHQ6IEEgI2dsb25nCi0gKiBAb3B0MTogQSAjZ2xvbmcK
LSAqIEBvcHQyOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25h
bF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IG5vbk9wdCwgZ2xvbmcgb3B0MSwgZ2xvbmcgb3B0Mik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9v
cHRpb25hbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hdG9t
aWNfc3RyaW5nOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBzdHI6IEEgI2dj
aGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1
ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2F0b21pY19zdHJpbmdfYW5kX2Rl
ZmF1bHRfdmFsdWU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAj
Z2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nX2Fu
ZF9kZWZhdWx0X3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3Ry
aW5nX2lzX251bGw6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAj
Z2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfbnVsbChX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQ6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfdW5kZWZpbmVkKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsOgotICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX2VtcHR5X3N0cmluZzoKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc19lbXB0eV9zdHJpbmcoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nX2lzX2VtcHR5X3N0cmluZzoK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2F0b21pY19zdHJpbmdfaXNfZW1wdHlfc3RyaW5n
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfZG91YmxlX2lzX25hX246Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQG51bWJlcjogQSAjZ2RvdWJsZQotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2RvdWJsZV9pc19uYV9uKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdkb3VibGUgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2Zsb2F0X2lzX25hX246Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICogQG51bWJlcjogQSAjZ2Zsb2F0Ci0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfb3B0aW9uYWxfZmxvYXRfaXNfbmFfbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZmxv
YXQgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29w
dGlvbmFsX2xvbmdfbG9uZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAbnVt
YmVyOiBBICNnaW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9B
UEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xv
bmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDY0IG51bWJlcik7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybzoK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNnaW50NjQKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybyhXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnaW50NjQgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZzoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNndWludDY0Ci0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfdW5zaWduZWRfbG9uZ19sb25nKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGd1aW50NjQgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZ19pc196ZXJvOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBudW1iZXI6IEEgI2d1aW50NjQKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF91bnNpZ25lZF9sb25nX2xvbmdfaXNfemVybyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBndWludDY0IG51bWJlcik7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9ib29sZWFuOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqIEBiOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93
aXRoX29wdGlvbmFsX2Jvb2xlYW4oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gYik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9ib29s
ZWFuX2lzX2ZhbHNlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBiOiBBICNn
Ym9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2Jvb2xlYW5faXNfZmFs
c2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gYik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hbnk6Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICogQGE6IEEgI1dlYktpdERPTWFueQotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX2FueShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01hbnkq
IGEpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxf
bnVsbGFibGVfd3JhcHBlcjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2Jq
OiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxf
bnVsbGFibGVfd3JhcHBlcihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2Jq
KiBvYmopOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9u
YWxfbnVsbGFibGVfd3JhcHBlcl9pc19udWxsOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBvYmo6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0
aF9vcHRpb25hbF9udWxsYWJsZV93cmFwcGVyX2lzX251bGwoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NVGVzdE9iaiogb2JqKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX3hwYXRoX25zX3Jlc29sdmVyOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqIEByZXNvbHZlcjogQSAjV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVy
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfeHBhdGhfbnNfcmVzb2x2ZXIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlcik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QxOgotICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9k
b21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDI6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhv
ZDIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9jb25kaXRpb25hbF9tZXRob2QzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfZW5mb3JjZV9y
YW5nZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2JqQXJnc1Nob3J0OiBB
ICNndXNob3J0Ci0gKiBAb2JqQXJnc0xvbmc6IEEgI2d1bG9uZwotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNz
X21ldGhvZF93aXRoX2VuZm9yY2VfcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9y
dCBvYmpBcmdzU2hvcnQsIGd1bG9uZyBvYmpBcmdzTG9uZyk7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0MToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBA
dmFsdWU6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE5vZGUqIHZhbHVlKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NVGVzdE5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0
MihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0Tm9kZSogdmFsdWUpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDM6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9jb252ZXJ0NDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX211dGFibGVfcG9pbnRfZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9p
bnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9N
U1ZHUG9pbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFibGVfcG9pbnRfZnVuY3Rpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9pbW11
dGFibGVfcG9pbnRfZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoK
LSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQq
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29yYW5nZToKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNf
c3RyaW5nX21ldGhvZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAaGVhZDog
QSAjZ2NoYXIKLSAqIEAuLi46IGxpc3Qgb2YgI2djaGFyIGVuZGVkIGJ5ICVOVUxMLgotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3ZhcmlhZGljX3N0cmluZ19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29u
c3QgZ2NoYXIqIGhlYWQsIC4uLik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial92YXJp
YWRpY19kb3VibGVfbWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBo
ZWFkOiBBICNnZG91YmxlCi0gKiBAbl90YWlsOiBudW1iZXIgb2YgdGFpbCB0aGF0IHdpbGwgYmUg
cGFzc2VkCi0gKiBALi4uOiBsaXN0IG9mICNnZG91YmxlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNf
ZG91YmxlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZG91YmxlIGhlYWQsIGd1aW50
IG5fdGFpbCwgLi4uKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX25v
ZGVfbWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBoZWFkOiBBICNX
ZWJLaXRET01Ob2RlCi0gKiBALi4uOiBsaXN0IG9mICNXZWJLaXRET01Ob2RlIGVuZGVkIGJ5ICVO
VUxMLgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX25vZGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTU5vZGUqIGhlYWQsIC4uLik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9hbnk6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGE6IEEgI2dm
bG9hdAotICogQGI6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfYW55KFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdmbG9hdCBhLCBnbG9uZyBiKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2F0dGFjaF9zaGFkb3dfcm9vdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBA
aW5pdDogQSAjV2ViS2l0RE9NVGVzdERpY3Rpb25hcnkKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9hdHRhY2hfc2hh
ZG93X3Jvb3QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdERpY3Rpb25hcnkq
IGluaXQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25n
X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEg
I2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25n
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfbG9uZ19hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25s
eV9zdHJpbmdfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0
dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9B
UEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfc3RyaW5nX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0
T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
Ynl0ZV9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5z
OiBBICNnaW50OAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBn
aW50OAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYnl0ZV9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5dGVfYXR0cjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dpbnQ4Ci0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X2J5dGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50OCB2YWx1ZSk7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfb2N0ZXRfYXR0cjoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ3VpbnQ4Ci0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGd1aW50OAotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfb2N0ZXRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9vY3RldF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ3VpbnQ4Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X29jdGV0
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ4IHZhbHVlKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnc2hvcnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3Nob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
aG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHZhbHVlOiBBICNnc2hvcnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2NsYW1wZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKgotICogUmV0dXJuczogQSAjZ3Nob3J0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIGdzaG9ydAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY2xhbXBl
ZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2NsYW1wZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dzaG9ydAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jbGFtcGVk
X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKTsKLQotLyoq
Ci0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHI6Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dzaG9ydAot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnc2hvcnQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2VuZm9yY2VfcmFuZ2Vfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9lbmZvcmNlX3Jh
bmdlX3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVl
OiBBICNnc2hvcnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfZW5mb3JjZV9yYW5nZV9zaG9ydF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdzaG9ydCB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ3VzaG9ydAotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBndXNob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNndXNob3J0Ci0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3Vuc2lnbmVkX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCB2
YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19hdHRyOgotICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dpbnQ2NAotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnaW50NjQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2ludDY0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9u
Z19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ2NCB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2d1aW50NjQKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ2NAotd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19s
b25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNn
dWludDY0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGd1aW50NjQgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3N0cmluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
Ci0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3N0cmluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTog
QSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF90ZXN0X29ial9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0g
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
Zik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfdGVzdF9udWxsYWJsZV9vYmpfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRl
c3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X251bGxhYmxlX29ial9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3Rlc3RfbnVsbGFibGVfb2JqX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHZhbHVlOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3RfbnVs
bGFibGVfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiog
dmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xlbmllbnRfdGVzdF9v
YmpfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9sZW5pZW50X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbGVuaWVudF90ZXN0X29ial9hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9N
VGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sZW5pZW50X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3VuZm9yZ2VhYmxlX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
dW5mb3JnZWFibGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0
cmluZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAj
Z2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIq
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2Vt
cHR5X3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZzoK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRl
c3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0
RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF94bWxf
b2JqX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2NyZWF0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEg
I2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVm
bGVjdGVkX3N0cmluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0g
KiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3Ry
aW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQot
LyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cjoK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9p
bnRlZ3JhbF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTog
QSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNndWxvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3Vsb25nCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5z
aWduZWRfaW50ZWdyYWxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBA
dmFsdWU6IEEgI2d1bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50
ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWxvbmcgdmFsdWUpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHI6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9i
b29sZWFuX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBB
ICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVm
bGVjdGVkX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91cmxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxl
Y3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0
cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2No
YXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVk
X3N0cmluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTog
QSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0
b21faW50ZWdyYWxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFs
dWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHI6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZs
ZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0
b21fYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9h
dHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
Y2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVm
bGVjdGVkX2N1c3RvbV91cmxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJs
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoq
Ci0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRl
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hh
cgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfZW5h
YmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2VuYWJsZWRfYXRfcnVudGlt
ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2Vw
dGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IK
LSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dl
dHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2xvbmcK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZToKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dp
dGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2U6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICogQHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhf
Z2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBS
ZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNl
cHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnbG9uZwotICogQGVycm9yOiAjR0Vycm9yCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZToKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
c3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb246Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhf
c2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFs
dWU6IEEgI2djaGFyCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5n
X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQot
LyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9hbmRfc2V0dGVy
X2NhbGxfd2l0aF9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoK
LSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9h
bmRfc2V0dGVyX2NhbGxfd2l0aF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0K
LS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlczoKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9y
YWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9i
aioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0
X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250
ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlczoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmli
dXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRl
eHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfY29uZGl0aW9uYWxfYXR0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoK
LSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRy
MShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9jb25kaXRpb25hbF9hdHRyMToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRp
dGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9u
YWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjM6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9jb25kaXRpb25hbF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYW55X2F0dHJpYnV0ZToKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01hbnkKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgV2ViS2l0RE9NYW55Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYW55X2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9hbnlfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2
YWx1ZTogQSAjV2ViS2l0RE9NYW55Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYW55KiB2YWx1ZSk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfY29udGVudF9kb2N1bWVudDoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01Eb2N1bWVudAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBX
ZWJLaXRET01Eb2N1bWVudCoKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbnRlbnRfZG9jdW1l
bnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfbXV0YWJsZV9wb2ludDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgot
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01TVkdQb2ludAotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01TVkdQb2ludCoK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludDoK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dlYktpdERPTVNW
R1BvaW50Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NU1ZHUG9pbnQqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9pbW11dGFibGVfcG9pbnQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZH
UG9pbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRh
YmxlX3BvaW50OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAj
V2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyYXdiZXJyeToKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmF3YmVycnkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfc3RyYXdiZXJyeToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmF3YmVycnkoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2Rlc2NyaXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0g
KiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0
RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQ6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25n
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2lkKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9oYXNoOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5z
OiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBn
Y2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2Vs
Zik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmli
dXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxl
X2RvdWJsZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFJldHVybnM6IEEgI2dkb3VibGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgZ2RvdWJsZQotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfZG91Ymxl
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9sb25nX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X251bGxhYmxlX2xvbmdfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVh
bgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfYm9vbGVhbl9hdHRyaWJ1dGUoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVs
bGFibGVfc3RyaW5nX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJp
bmdfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfbnVsbGFibGVfbG9uZ19zZXR0YWJsZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVf
bG9uZ19zZXR0YWJsZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9sb25nX3NldHRh
YmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5nX3NldHRhYmxlX2F0
dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczog
QSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2No
YXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfc2V0dGFibGVfYXR0
cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ19zZXR0YWJsZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9udWxsYWJsZV9zdHJpbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfbnVsbGFibGVfc3RyaW5nX3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vy
cm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxl
X3N0cmluZ192YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ192YWx1ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0g
KiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRf
Zm9yd2FyZHNfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0g
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3ROb2RlKgot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9y
d2FyZHNfbnVsbGFibGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RO
b2RlKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJp
YnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9zdHJpbmdpZmllcl9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5n
aWZpZXJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ2lmaWVyX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0
cmluZ2lmaWVyX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE9ial9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhkN2YxMzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEs
MTQ0ICswLDAgQEAKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZChXZWJLaXRE
T01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2Fy
Z3MoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nLCBjb25zdCBnY2hhciosIFdlYktpdERPTVRlc3RP
YmoqKQotZ2ludDggd2Via2l0X2RvbV90ZXN0X29ial9ieXRlX21ldGhvZChXZWJLaXRET01UZXN0
T2JqKikKLWdpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdl
YktpdERPTVRlc3RPYmoqLCBnaW50OCwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikK
LWd1aW50OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29jdGV0X21ldGhvZChXZWJLaXRET01UZXN0T2Jq
KikKLWd1aW50OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29jdGV0X21ldGhvZF93aXRoX2FyZ3MoV2Vi
S2l0RE9NVGVzdE9iaiosIGd1aW50OCwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikK
LWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfbG9uZ19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiop
Ci1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2xvbmdfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRE
T01UZXN0T2JqKiwgZ2xvbmcsIGNvbnN0IGdjaGFyKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJL
aXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2QoV2ViS2l0RE9NVGVz
dE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rf
d2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqLCBnbG9uZywgY29uc3QgZ2NoYXIqLCBXZWJLaXRE
T01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9lbnVtX2Fy
ZyhXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKikKLVdlYktpdERPTVRl
c3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3Nf
YW5kX3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0
T2JqKiwgR0Vycm9yKiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1
ZShXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKikKLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiwg
V2ViS2l0RE9NRGljdGlvbmFyeSosIFdlYktpdERPTURpY3Rpb25hcnkqKQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiwgR0Vy
cm9yKiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChX
ZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpf
d2l0aF9zY3JpcHRfc3RhdGVfb2JqKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqLCBHRXJyb3IqKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0
aF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiwgR0Vycm9yKiop
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHQo
V2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZShXZWJLaXRET01UZXN0T2JqKikKLVdl
YktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9u
X2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
LCBHRXJyb3IqKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9z
Y3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyhXZWJL
aXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRp
b25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29wdGlvbmFsX2FyZyhXZWJLaXRE
T01UZXN0T2JqKiwgZ2xvbmcsIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdlYktpdERPTVRl
c3RPYmoqLCBnbG9uZywgZ2xvbmcsIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIq
KQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19p
c191bmRlZmluZWQoV2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLXZvaWQgd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfbnVsbF9zdHJpbmco
V2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2NvbmRpdGlvbmFsX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoq
KQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZChXZWJLaXRET01UZXN0T2Jq
KikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfb3B0aW9uYWwo
V2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX292ZXJs
b2FkZWRfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKFdlYktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hh
ciopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9NVGVzdE9iaios
IFdlYktpdERPTVRlc3ROb2RlKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MihX
ZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE5vZGUqKQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NvbnZlcnQ0KFdlYktpdERPTVRlc3RPYmoqLCBXZWJLaXRET01UZXN0Tm9kZSopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDUoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktp
dERPTVRlc3ROb2RlKikKLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX211
dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01TVkdQb2lu
dCogd2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9N
VGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktpdERPTVRlc3RP
YmoqKQotV2ViS2l0RE9NYm9vbCogd2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24o
V2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKiwgZ2Zsb2F0LCBnbG9uZywgR0Vycm9yKiop
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21ldGhvZChXZWJLaXRE
T01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciopCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfdmFyaWFkaWNfZG91YmxlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiwgZ2RvdWJs
ZSwgZ2RvdWJsZSkKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92YXJpYWRpY19ub2RlX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NTm9kZSosIFdlYktpdERPTU5vZGUqKQotdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2FueShXZWJLaXRET01UZXN0T2JqKiwgZ2Zsb2F0LCBnbG9u
ZykKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5
X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiopCi1naW50OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9ieXRlX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5dGVfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiwgZ2ludDgpCi1ndWludDggd2Via2l0X2RvbV90ZXN0X29ial9nZXRfb2N0ZXRfYXR0
cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfb2N0ZXRf
YXR0cihXZWJLaXRET01UZXN0T2JqKiwgZ3VpbnQ4KQotZ3Nob3J0IHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGdzaG9ydCkKLWd1c2hvcnQg
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0
T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiwgZ3VzaG9ydCkKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqLCBnbG9uZykKLWdpbnQ2NCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGdp
bnQ2NCkKLWd1aW50NjQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25n
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vu
c2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqLCBndWludDY0KQotZ2NoYXIq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqKQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiwgY29uc3QgZ2NoYXIqKQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9i
aiopCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9v
YmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1nYm9vbGVhbiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2Jvb2xlYW4p
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdl
YktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
c3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1ndWxvbmcgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcmVmbGVjdGVkX3Vuc2lnbmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9h
dHRyKFdlYktpdERPTVRlc3RPYmoqLCBndWxvbmcpCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRl
c3RPYmoqLCBnYm9vbGVhbikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0
ZWRfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqKQot
Z2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJL
aXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0
cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi1nbG9uZyB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21f
aW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1nYm9vbGVhbiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01U
ZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9i
b29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGdib29sZWFuKQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBH
RXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdl
YktpdERPTVRlc3RPYmoqLCBnbG9uZywgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9z
dHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0
IGdjaGFyKiwgR0Vycm9yKiopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3Nj
cmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2Jq
KiwgZ2xvbmcpCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRo
X3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRE
T01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRy
aWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRE
T01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVf
cmFpc2VzKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhX
ZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRf
c2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9z
dGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktpdERPTVRlc3RPYmoqKQotV2Vi
S2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRl
c3RPYmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdl
YktpdERPTVRlc3RPYmoqLCBXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVRlc3RPYmoqIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9z
Y3JpcHRfc3RhdGVfd2l0aF9zcGFjZXNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqKQotdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9h
bmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwg
V2ViS2l0RE9NVGVzdE9iaiopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRp
b25hbF9hdHRyMShXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2xvbmcgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiop
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERP
TVRlc3RPYmoqLCBnbG9uZykKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlv
bmFsX2F0dHIzKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9jb25kaXRpb25hbF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1XZWJLaXRET01h
bnkqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9i
aiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9N
VGVzdE9iaiosIFdlYktpdERPTWFueSopCi1XZWJLaXRET01Eb2N1bWVudCogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERP
TVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERP
TVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9tdXRhYmxlX3BvaW50KFdl
YktpdERPTVRlc3RPYmoqLCBXZWJLaXRET01TVkdQb2ludCopCi1XZWJLaXRET01TVkdQb2ludCog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoq
KQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9N
VGVzdE9iaiosIFdlYktpdERPTVNWR1BvaW50KikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3N0cmF3YmVycnkoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3N0cmF3YmVycnkoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2Zsb2F0IHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKikKLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaWN0X2Zsb2F0KFdlYktpdERPTVRlc3RPYmoqLCBn
ZmxvYXQpCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9kZXNjcmlwdGlvbihXZWJLaXRE
T01UZXN0T2JqKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2lkKFdlYktpdERPTVRl
c3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2Jq
KiwgZ2xvbmcpCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01U
ZXN0T2JqKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlcGxhY2VhYmxlX2F0dHJp
YnV0ZShXZWJLaXRET01UZXN0T2JqKikKLWdkb3VibGUgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
bnVsbGFibGVfZG91YmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfYXR0cmlidXRlKFdlYktpdERPTVRlc3RP
YmoqKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfYm9vbGVhbl9h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfbnVsbGFibGVfc3RyaW5nX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKFdl
YktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9s
b25nX3NldHRhYmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1nbG9uZyB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NVGVz
dE9iaiosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9z
dHJpbmdfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2NoYXIqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM0ZDllOS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAot
LyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCi0KLSNpbmNsdWRl
ICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUu
aCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252
ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJV
Q1RPUlNfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SUywgV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LVdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBraXQoV2ViQ29yZTo6VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmop
KQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JT
KHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKG9iaik7
Ci19Ci0KLVdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBjb3JlKFdlYktpdERP
TVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRE
T01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogd3JhcFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzKFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBjb3JlT2JqZWN0KQotewot
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJM
T0FERURfQ09OU1RSVUNUT1JTKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVS
TE9BREVEX0NPTlNUUlVDVE9SUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01U
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycywgd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29u
c3RydWN0b3JzLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQotewotICAgIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19HRVRfUFJJVkFURShv
YmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVy
bG9hZGVkX2NvbnN0cnVjdG9yc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQot
Ci1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3Jz
X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
R09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmpl
Y3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2Nv
bnN0cnVjdG9yc19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJM
T0FERURfQ09OU1RSVUNUT1JTX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKj4o
V0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICBy
ZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRl
ZF9jb25zdHJ1Y3RvcnNfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1ByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0
X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX2NvbnN0cnVjdG9yOwotICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3Rv
cnNfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVk
X2NvbnN0cnVjdG9yc19pbml0KFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBy
ZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19HRVRfUFJJ
VkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzUHJpdmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjIwY2Q4Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19oCi0j
ZGVmaW5lIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKLQotI2lmZGVmIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTICAgICAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc19nZXRfdHlwZSgpKQotI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMsIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JT
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTLCBXZWJLaXRET01UZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZF
UkxPQURFRF9DT05TVFJVQ1RPUlMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMp
KQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RF
U1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05T
VFJVQ1RPUlMsIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ2xhc3MpKQotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIHsKLSAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb3Zlcmxv
YWRlZF9jb25zdHJ1Y3RvcnNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01U
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuc3ltYm9scwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3NDRhMi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDMzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYg
V2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2gKLSNkZWZpbmUgV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHdyYXBUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycyhXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyopOwotV2ViS2l0RE9N
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGtpdChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycyopOwotV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGNvcmUo
V2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqKTsKLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5ODU0MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBA
QAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
LmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5U
aHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRl
LmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRV9HRVRfUFJJVkFU
RShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9U
RVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsIFdlYktpdERPTVRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0
ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlPiBjb3JlT2JqZWN0OwotfSBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZVByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJLaXRET01U
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSoga2l0KFdlYkNvcmU6OlRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiBvYmopCi17Ci0gICAgaWYgKCFvYmop
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENh
Y2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVE
X0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiBjb3JlKFdlYktpdERPTVRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiByZXF1ZXN0KQotewotICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOwotfQotCi1XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZSogd3JhcFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKFdlYkNvcmU6OlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiBjb3JlT2JqZWN0KQotewotICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FE
RURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQ
RV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UsIHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVl
bmNlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RS
VUNUT1JTX1dJVEhfU0VRVUVOQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHBy
aXYtPn5XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZh
dGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25z
dHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwot
fQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0
b3JzX3dpdGhfc2VxdWVuY2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRp
ZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90
ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dpdGhfc2VxdWVuY2VfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVD
VE9SU19XSVRIX1NFUVVFTkNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVj
dCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9jbGFzc19pbml0KFdlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ2xhc3MqIHJlcXVlc3RD
bGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFz
cywgc2l6ZW9mKFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNl
UHJpdmF0ZSkpOwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rl
c3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9jb25zdHJ1Y3RvcjsKLSAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29u
c3RydWN0b3JzX3dpdGhfc2VxdWVuY2VfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlX2luaXQoV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIHJlcXVlc3QpCi17
Ci0gICAgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhf
U0VRVUVOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01U
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUoKTsKLX0KLQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQzOGJkNTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2VfaAotI2RlZmluZSBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZV9oCi0KLSNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
LQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TU9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVS
TE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFICAgICAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlX2dldF90eXBlKCkpCi0j
ZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVF
TkNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0Us
IFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKSkKLSNkZWZp
bmUgV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0Vf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRSwgV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDbGFzcykKLSNkZWZp
bmUgV0VCS0lUX0RPTV9JU19URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVO
Q0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRSkpCi0j
ZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NF
UVVFTkNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0Up
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9T
RVFVRU5DRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVF
TkNFLCBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNsYXNz
KSkKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZSB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVj
dCBfV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDbGFzcyB7
Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQ
SSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dpdGhfc2Vx
dWVuY2VfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWls
dGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDNkMDA2YmYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0T3ZlcnJpZGVC
dWlsdGlucy5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUu
aCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVz
dE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9V
VEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlNfR0VUX1BS
SVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9PVkVSUklERV9CVUlMVElOUywgV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQ
cml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQ
cml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnM+IGNvcmVP
YmplY3Q7Ci19IFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiBraXQoV2ViQ29y
ZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TKHJl
dCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RPdmVycmlkZUJ1aWx0aW5zKG9iaik7Ci19Ci0KLVdl
YkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKiBjb3JlKFdlYktpdERPTVRlc3RPdmVycmlkZUJ1
aWx0aW5zKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucyogd3Jh
cFRlc3RPdmVycmlkZUJ1aWx0aW5zKFdlYkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKiBjb3Jl
T2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RP
TV9URVNUX09WRVJSSURFX0JVSUxUSU5TKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVT
VF9PVkVSUklERV9CVUlMVElOUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01U
ZXN0T3ZlcnJpZGVCdWlsdGlucywgd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3Zl
cnJpZGVfYnVpbHRpbnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERP
TVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PVkVS
UklERV9CVUlMVElOU19HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldl
YktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9idWlsdGluc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJyaWRl
X2J1aWx0aW5zX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewot
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVy
cmlkZV9idWlsdGluc19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVz
dE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJSSURF
X0JVSUxUSU5TX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKj4oV0VCS0lUX0RPTV9PQkpF
Q1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0Owot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNfY2xhc3Nf
aW5pdChXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGluc0NsYXNzKiByZXF1ZXN0Q2xhc3MpCi17
Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGluc1ByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xh
c3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX2NvbnN0
cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb3Zl
cnJpZGVfYnVpbHRpbnNfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9vdmVycmlkZV9idWlsdGluc19pbml0KFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiBy
ZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fVEVTVF9PVkVSUklERV9CVUlMVElOU19HRVRfUFJJVkFURShyZXF1ZXN0
KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSgp
OwotfQotCi1XZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNf
bmFtZWRfaXRlbShXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucyogc2VsZiwgY29uc3QgZ2No
YXIqIG5hbWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PVkVSUklERV9CVUlM
VElOUyhzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChu
YW1lKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPm5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWls
dGlucy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYTY5NTRiNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGluc19oCi0jZGVmaW5lIFdlYktpdERPTVRl
c3RPdmVycmlkZUJ1aWx0aW5zX2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQ
SQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFi
bGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX09W
RVJSSURFX0JVSUxUSU5TICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9idWls
dGluc19nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJ
TlMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMsIFdlYktpdERPTVRlc3RPdmVycmlk
ZUJ1aWx0aW5zKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9URVNUX09WRVJSSURFX0JVSUxUSU5TLCBXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWls
dGluc0NsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RF
U1RfT1ZFUlJJREVfQlVJTFRJTlNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMpKQotI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlNfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZF
UlJJREVfQlVJTFRJTlMsIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zQ2xhc3MpKQotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zIHsKLSAgICBXZWJLaXRET01PYmpl
Y3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3ZlcnJpZGVC
dWlsdGluc0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19
OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNf
Z2V0X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0
aW5zX25hbWVkX2l0ZW06Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRp
bnMKLSAqIEBuYW1lOiBBICNnY2hhcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NTm9kZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBXZWJLaXRET01Ob2RlKgotd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX25h
bWVkX2l0ZW0oV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRp
bnNQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNWNhNTIuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
MyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktp
dERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RP
dmVycmlkZUJ1aWx0aW5zUHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJUZXN0T3ZlcnJpZGVCdWlsdGlu
cy5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiB3
cmFwVGVzdE92ZXJyaWRlQnVpbHRpbnMoV2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqKTsK
LVdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJyaWRl
QnVpbHRpbnMqKTsKLVdlYkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKiBjb3JlKFdlYktpdERP
TVRlc3RPdmVycmlkZUJ1aWx0aW5zKik7Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8qIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzNiM2Qz
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0j
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUuaCIK
LSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01f
VEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqKSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJ
QUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUgewotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gY29yZU9iamVjdDsKLSNlbmRpZiAvLyBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi19IFdlYktpdERPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlOwotCi0jaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6
OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NS
SVBUX1ZBTFVFX0lOVEVSRkFDRShyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihXRUJLSVRf
RE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VC
S0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNF
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UsIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2UsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewotICAgIFBST1BfMCwKLSAg
ICBQUk9QX1ZBTFVFLAotICAgIFBST1BfUkVBRE9OTFlfVkFMVUUsCi0gICAgUFJPUF9DQUNIRURf
VkFMVUUsCi0gICAgUFJPUF9DQUNIRURfUkVBRE9OTFlfVkFMVUUsCi19OwotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVE
X1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViS2l0OjpET01PYmplY3RD
YWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotI2VuZGlmIC8vIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBwcml2LT5+V2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRF
UkZBQ0Uob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJP
UF9WQUxVRToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShzZWxmKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUFET05MWV9WQUxVRToKLSAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRf
dmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9DQUNIRURfVkFMVUU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFj
ZV9nZXRfY2FjaGVkX3ZhbHVlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X0NBQ0hFRF9SRUFET05MWV9WQUxVRToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9j
YWNoZWRfcmVhZG9ubHlfdmFsdWUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0
X3ZhbHVlX2ludGVyZmFjZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJ
QUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBw
cml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOwotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2NsYXNzX2luaXQoV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17
Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZSkpOwot
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfcHJvcGVydHk7Ci0K
LSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xh
c3MsCi0gICAgICAgIFBST1BfVkFMVUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0g
ICAgICAgICAgICAidmFsdWUiLAotICAgICAgICAgICAgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U6dmFsdWUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTp2YWx1ZSIsCi0gICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUUsCi0gICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0g
ICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUFET05MWV9WQUxVRSwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJyZWFkb25seS12YWx1ZSIsCi0g
ICAgICAgICAgICAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTpyZWFkb25seS12
YWx1ZSIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOnJlYWRvbmx5LXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAg
ICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NBQ0hFRF9WQUxVRSwKLSAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJjYWNoZWQtdmFsdWUiLAotICAgICAgICAg
ICAgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVkLXZhbHVlIiwKLSAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U6Y2FjaGVkLXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TRVJJQUxJ
WkVEX1NDUklQVF9WQUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwot
Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENs
YXNzLAotICAgICAgICBQUk9QX0NBQ0hFRF9SRUFET05MWV9WQUxVRSwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJjYWNoZWQtcmVhZG9ubHktdmFsdWUiLAotICAg
ICAgICAgICAgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVkLXJlYWRv
bmx5LXZhbHVlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVkLXJlYWRvbmx5LXZhbHVlIiwKLSAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRSwKLSAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfaW5pdChXZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9HRVRfUFJJVkFURShyZXF1
ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcml2YXRlKCk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklB
TElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWx1ZSgp
LT50b1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9u
MSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0g
ICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShzZWxmKSk7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRWYWx1ZShX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURf
UEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRp
dGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIi
KQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
LX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2VfZ2V0X3JlYWRvbmx5X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFRF9TQ1JJ
UFRfVkFMVUVfSU5URVJGQUNFKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnJlYWRvbmx5VmFsdWUoKS0+
dG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEi
KQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotICAg
IHJldHVybiAwOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikgKi8KLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTEla
RURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jYWNoZWRWYWx1
ZSgpLT50b1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0
aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIp
Ci0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uoc2VsZikpOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
c2V0Q2FjaGVkVmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpICovCi19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAg
IFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpLT50b1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjZhNjkuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5k
ZWYgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZV9oCi0jZGVmaW5l
IFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VfaAotCi0jaWZkZWYg
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgot
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNF
ICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NS
SVBUX1ZBTFVFX0lOVEVSRkFDRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxV
RV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Up
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJG
QUNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRSwgV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNzKQotI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRSkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9T
RVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9p
bnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3Jp
cHRfdmFsdWVfaW50ZXJmYWNlX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKLSAqCi0g
KiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9p
bnRlcmZhY2VfZ2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9zZXRfdmFsdWUoV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVf
aW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25s
eV92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50
ZXJmYWNlX2dldF9jYWNoZWRfdmFsdWU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2Rv
bV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3ZhbHVl
KFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vf
c2V0X2NhY2hlZF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2No
YXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNo
ZWRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogc2VsZik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2Uuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uuc3ltYm9scwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1ZjE3My4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSw2
ICswLDAgQEAKLVdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogd2Via2l0X2RvbV90ZXN0
X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfdmFsdWUoV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9z
ZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKFdlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0
VmFsdWUqKQotV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB3ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZShXZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKikKLVdlYktpdERPTVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVl
X2ludGVyZmFjZV9nZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRf
dmFsdWVfaW50ZXJmYWNlX3NldF9jYWNoZWRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSosIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopCi1X
ZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZShXZWJLaXRE
T01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWY1
MGNiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByaXZhdGVfaAotCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg+Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHdyYXBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqKTsKLVdl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGtpdChXZWJDb3JlOjpU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7Ci1XZWJDb3JlOjpUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyog
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotCi0jZW5kaWYgLyog
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA1MmMwNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U3VwcGxlbWVu
dGFsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUg
aXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NVGVz
dFN1cHBsZW1lbnRhbC5oIGFuZAotICAgIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuY3BwIGFy
ZSBjcmVhdGVkIGZvciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50
IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RT
dXBwbGVtZW50YWwuaCBhbmQKLSAgICBXZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBl
dmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRhbC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRhbC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDUyYzA1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTdXBwbGVtZW50YWwu
aAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgZ2Vu
ZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NVGVzdFN1cHBs
ZW1lbnRhbC5oIGFuZAotICAgIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuY3BwIGFyZSBjcmVh
dGVkIGZvciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBi
dWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RTdXBwbGVt
ZW50YWwuaCBhbmQKLSAgICBXZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBi
dWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RUeXBlZGVmcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE1OTc0ODUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDM5NCArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgiCi0K
LSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRF
eGVjU3RhdGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9pbnRQcml2YXRl
LmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJpdmF0ZS5oIgotI2luY2x1ZGUg
ImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1RZUEVE
RUZTX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfVFlQRURFRlMsIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUp
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlIHsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6VGVzdFR5cGVkZWZzPiBjb3JlT2JqZWN0OwotfSBXZWJLaXRET01UZXN0
VHlwZWRlZnNQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdFR5
cGVkZWZzKiBraXQoV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBvYmopCi17Ci0gICAgaWYgKCFvYmop
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENh
Y2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9UWVBFREVGUyhy
ZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0VHlwZWRlZnMob2JqKTsKLX0KLQotV2ViQ29yZTo6
VGVzdFR5cGVkZWZzKiBjb3JlKFdlYktpdERPTVRlc3RUeXBlZGVmcyogcmVxdWVzdCkKLXsKLSAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RUeXBlZGVmcyo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERP
TVRlc3RUeXBlZGVmcyogd3JhcFRlc3RUeXBlZGVmcyhXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGNv
cmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRf
RE9NX1RFU1RfVFlQRURFRlMoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVE
RUZTLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RUeXBlZGVmcywgd2Vi
a2l0X2RvbV90ZXN0X3R5cGVkZWZzLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsK
LSAgICBQUk9QXzAsCi0gICAgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKLSAgICBQUk9Q
X0lNTVVUQUJMRV9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRSwKLSAgICBQUk9QX0FUVFJfV0lUSF9H
RVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0g
ICAgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9TVFJJ
TkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi19OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktp
dERPTVRlc3RUeXBlZGVmc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfVFlQRURFRlNf
R0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0VHlw
ZWRlZnNQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsK
LSAgICBXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfVFlQRURF
RlMob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9V
TlNJR05FRF9MT05HX0xPTkdfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZz
X3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF91aW50NjQodmFs
dWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhD
RVBUSU9OOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9n
ZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAg
ICB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9u
KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAg
ICAgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9l
eGNlcHRpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAg
ICAgIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJf
ZXhjZXB0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZiA9IFdF
QktJVF9ET01fVEVTVF9UWVBFREVGUyhvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7Ci0gICAgY2FzZSBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSOgotICAgICAgICBnX3Zh
bHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfdW5zaWdu
ZWRfbG9uZ19sb25nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
SU1NVVRBQkxFX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFOgotICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfaW1tdXRhYmxlX3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uKHNlbGYsIG51bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJf
V0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3
ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VU
VEVSX0VYQ0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24o
c2VsZiwgbnVsbHB0cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FU
VFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVy
X2V4Y2VwdGlvbihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0
X2RvbV90ZXN0X3R5cGVkZWZzX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVj
dFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0
aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF90eXBlZGVmc19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVz
dFR5cGVkZWZzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9UWVBFREVGU19HRVRfUFJJ
VkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXN0VHlwZWRlZnMqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsK
LSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwg
b2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF90eXBlZGVmc19jbGFzc19pbml0KFdlYktpdERPTVRlc3RUeXBlZGVmc0NsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlKSk7Ci0gICAgZ29i
amVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19jb25zdHJ1
Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAg
ICAgIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY191
aW50NjQoCi0gICAgICAgICAgICAidW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAgICAgICAg
ICAgIlRlc3RUeXBlZGVmczp1bnNpZ25lZC1sb25nLWxvbmctYXR0ciIsCi0gICAgICAgICAgICAi
cmVhZC13cml0ZSBndWludDY0IFRlc3RUeXBlZGVmczp1bnNpZ25lZC1sb25nLWxvbmctYXR0ciIs
Ci0gICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0g
ICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9JTU1VVEFCTEVfU0VSSUFMSVpFRF9T
Q1JJUFRfVkFMVUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAi
aW1tdXRhYmxlLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlIiwKLSAgICAgICAgICAgICJUZXN0VHlw
ZWRlZnM6aW1tdXRhYmxlLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlIiwKLSAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIFRlc3RUeXBlZGVmczppbW11dGFibGUtc2VyaWFsaXplZC1zY3JpcHQt
dmFsdWUiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NFUklBTElaRURfU0NSSVBUX1ZB
TFVFLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3BlY19s
b25nKAotICAgICAgICAgICAgImF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAg
ICAgICJUZXN0VHlwZWRlZnM6YXR0ci13aXRoLWdldHRlci1leGNlcHRpb24iLAotICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdFR5cGVkZWZzOmF0dHItd2l0aC1nZXR0ZXItZXhjZXB0
aW9uIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FUVFJfV0lUSF9T
RVRURVJfRVhDRVBUSU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAg
ICJhdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiVGVzdFR5cGVkZWZz
OmF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGds
b25nIFRlc3RUeXBlZGVmczphdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAg
ICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAg
IGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9FWENF
UFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAic3RyaW5n
LWF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJUZXN0VHlwZWRlZnM6
c3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBUZXN0VHlwZWRlZnM6c3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9u
IiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVj
dENsYXNzLAotICAgICAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwK
LSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdHJpbmctYXR0ci13
aXRoLXNldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgIlRlc3RUeXBlZGVmczpzdHJpbmct
YXR0ci13aXRoLXNldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIFRlc3RUeXBlZGVmczpzdHJpbmctYXR0ci13aXRoLXNldHRlci1leGNlcHRpb24iLAotICAg
ICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2luaXQoV2ViS2l0RE9NVGVz
dFR5cGVkZWZzKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfVFlQRURFRlNfR0VUX1BSSVZBVEUocmVxdWVzdCk7Ci0g
ICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlKCk7Ci19Ci0KLXZvaWQg
d2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9zaGFkb3coV2ViS2l0RE9NVGVzdFR5cGVkZWZz
KiBzZWxmLCBnZmxvYXQgd2lkdGgsIGdmbG9hdCBoZWlnaHQsIGdmbG9hdCBibHVyLCBjb25zdCBn
Y2hhciogY29sb3IsIGdmbG9hdCBhbHBoYSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
VFlQRURFRlMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29sb3IpOwotICAgIFdlYkNv
cmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRDb2xvciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb2xvcik7Ci0gICAg
aXRlbS0+c2V0U2hhZG93KHdpZHRoLCBoZWlnaHQsIGJsdXIsIGNvbnZlcnRlZENvbG9yLCBhbHBo
YSk7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfaW1t
dXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZUEVERUZTKHNlbGYpLCAwKTsKLSAgICBXZWJD
b3JlOjpUZXN0VHlwZWRlZnMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OlNWR1BvaW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1t
dXRhYmxlUG9pbnRGdW5jdGlvbigpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX21ldGhvZF93
aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9y
KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVk
ZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQot
Z3VpbnQ2NCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19h
dHRyKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX1RZUEVERUZTKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlwZWRlZnMq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT51
bnNpZ25lZExvbmdMb25nQXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRE
T01UZXN0VHlwZWRlZnMqIHNlbGYsIGd1aW50NjQgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX1RZUEVERUZTKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0
dHIodmFsdWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9pbW11
dGFibGVfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxm
KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZiksIDApOwot
ICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5pbW11dGFibGVTZXJp
YWxpemVkU2NyaXB0VmFsdWUoKS0+dG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2ltbXV0YWJsZV9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZShXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikpOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRJbW11dGFibGVTZXJpYWxpemVk
U2NyaXB0VmFsdWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKSkpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3RfdHlw
ZWRlZnNfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVm
cyogc2VsZiwgR0Vycm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9UWVBFREVGUyhzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7Ci0gICAgaWYgKGVj
KSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9hdHRy
X3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGdsb25n
IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0g
ICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGl0ZW0tPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKHZhbHVlKTsKLX0KLQotZ2xvbmcgd2Vi
a2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0VHlwZWRlZnMqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9UWVBFREVGUyhzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRl
c3RUeXBlZGVmcyogc2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGl0ZW0tPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQot
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX2dl
dHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBHRXJyb3IqKiBlcnJv
cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZUEVERUZTKHNlbGYpLCAwKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2Vi
Q29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0
cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQ
RURFRlMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6
OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRl
bS0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oY29udmVydGVkVmFsdWUpOwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX3Nl
dHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRl
c3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBl
ZGVmc19zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RU
eXBlZGVmcyogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwot
ICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0U3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RUeXBlZGVmcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQwMDUyMjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmbmRlZiBXZWJLaXRET01UZXN0VHlwZWRlZnNfaAotI2RlZmluZSBXZWJLaXRET01UZXN0VHlw
ZWRlZnNfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
LSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JF
R0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfVFlQRURFRlMgICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9UWVBFREVGUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9UWVBFREVGUywgV2ViS2l0RE9NVGVz
dFR5cGVkZWZzKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1RZUEVERUZTX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9U
RVNUX1RZUEVERUZTLCBXZWJLaXRET01UZXN0VHlwZWRlZnNDbGFzcykKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX1RZUEVERUZTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9JU19URVNUX1RZUEVERUZTX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTKSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV9URVNUX1RZUEVERUZTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTLCBXZWJLaXRE
T01UZXN0VHlwZWRlZnNDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFR5cGVkZWZzIHsK
LSAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJL
aXRET01UZXN0VHlwZWRlZnNDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZz
X2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRf
c2hhZG93OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQHdpZHRoOiBB
ICNnZmxvYXQKLSAqIEBoZWlnaHQ6IEEgI2dmbG9hdAotICogQGJsdXI6IEEgI2dmbG9hdAotICog
QGNvbG9yOiBBICNnY2hhcgotICogQGFscGhhOiBBICNnZmxvYXQKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZz
X3NldF9zaGFkb3coV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBnZmxvYXQgd2lkdGgsIGdm
bG9hdCBoZWlnaHQsIGdmbG9hdCBibHVyLCBjb25zdCBnY2hhciogY29sb3IsIGdmbG9hdCBhbHBo
YSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2ltbXV0YWJsZV9wb2ludF9m
dW5jdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0VHlwZWRlZnMKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVNWR1BvaW50Ci0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0
X2RvbV90ZXN0X3R5cGVkZWZzX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0
VHlwZWRlZnMqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19tZXRo
b2Rfd2l0aF9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFR5cGVkZWZzCi0g
KiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX21ldGhvZF93aXRoX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICoKLSAqIFJldHVybnM6IEEgI2d1
aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ2
NAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihX
ZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90
eXBlZGVmc19zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdFR5cGVkZWZzCi0gKiBAdmFsdWU6IEEgI2d1aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZz
X3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYs
IGd1aW50NjQgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRf
aW1tdXRhYmxlX3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RUeXBlZGVmcwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX2dldF9pbW11dGFibGVfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5
cGVkZWZzKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2lt
bXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0VHlwZWRlZnMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9p
bW11dGFibGVfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBl
ZGVmc19nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdFR5cGVkZWZzCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiBBICNn
bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwot
d2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQHZhbHVlOiBBICNnbG9uZwot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERP
TVRlc3RUeXBlZGVmcyogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF90eXBlZGVmc19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdFR5cGVkZWZzCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21f
dGVzdF90eXBlZGVmc19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dFR5cGVkZWZzKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0
X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RU
eXBlZGVmcwotICogQHZhbHVlOiBBICNnbG9uZwotICogQGVycm9yOiAjR0Vycm9yCi0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVz
dF90eXBlZGVmc19zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5
cGVkZWZzKiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQGVycm9yOiAjR0Vy
cm9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0
cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNl
bGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNf
c2V0X3N0cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0VHlwZWRlZnMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZz
X3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF90eXBlZGVmc19nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0
X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
dHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0VHlwZWRlZnMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqIEBlcnJv
cjogI0dFcnJvcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVy
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSwgR0Vycm9yKiogZXJyb3IpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdFR5cGVkZWZzX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RUeXBlZGVmcy5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLnN5bWJvbHMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTU4NzQuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi12b2lkIHdlYmtpdF9k
b21fdGVzdF90eXBlZGVmc19mdW5jKFdlYktpdERPTVRlc3RUeXBlZGVmcyosIFdlYktpdERPTWxv
bmdbXSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc2hhZG93KFdlYktpdERP
TVRlc3RUeXBlZGVmcyosIGdmbG9hdCwgZ2Zsb2F0LCBnZmxvYXQsIGNvbnN0IGdjaGFyKiwgZ2Zs
b2F0KQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfbnVsbGFibGVfYXJyYXlfYXJnKFdl
YktpdERPTVRlc3RUeXBlZGVmcyosIFdlYktpdERPTURPTVN0cmluZ1tdKikKLVdlYktpdERPTVNW
R1BvaW50KiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfaW1tdXRhYmxlX3BvaW50X2Z1bmN0aW9u
KFdlYktpdERPTVRlc3RUeXBlZGVmcyopCi1XZWJLaXRET01ET01TdHJpbmdbXSogd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX3N0cmluZ19hcnJheV9mdW5jdGlvbihXZWJLaXRET01UZXN0VHlwZWRl
ZnMqLCBXZWJLaXRET01ET01TdHJpbmdbXSosIEdFcnJvcioqKQotV2ViS2l0RE9NRE9NU3RyaW5n
W10qIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zdHJpbmdfYXJyYXlfZnVuY3Rpb24yKFdlYktp
dERPTVRlc3RUeXBlZGVmcyosIFdlYktpdERPTURPTVN0cmluZ1tdKiwgR0Vycm9yKiopCi12b2lk
IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19tZXRob2Rfd2l0aF9leGNlcHRpb24oV2ViS2l0RE9N
VGVzdFR5cGVkZWZzKiwgR0Vycm9yKiopCi1ndWludDY0IHdlYmtpdF9kb21fdGVzdF90eXBlZGVm
c19nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKikKLXZv
aWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihX
ZWJLaXRET01UZXN0VHlwZWRlZnMqLCBndWludDY0KQotV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2ltbXV0YWJsZV9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZShXZWJLaXRET01UZXN0VHlwZWRlZnMqKQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfdHlwZWRlZnNfc2V0X2ltbXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZShXZWJLaXRE
T01UZXN0VHlwZWRlZnMqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqKQotZ2xvbmcg
d2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0VHlwZWRlZnMqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRl
ZnMqLCBnbG9uZykKLWdsb25nIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfYXR0cl93aXRo
X3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKikKLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX3NldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0VHlwZWRlZnMqLCBnbG9uZywgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dFR5cGVkZWZzKiwgR0Vycm9yKiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRf
c3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyos
IGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmlu
Z19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqKQotdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4
Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTWF0dHJpYnV0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJiNjlkMTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NYXR0cmlidXRlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NYXR0cmlidXRlLmgiCi0KLSNpbmNs
dWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3Rh
dGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
YXR0cmlidXRlUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0K
LSNkZWZpbmUgV0VCS0lUX0RPTV9BVFRSSUJVVEVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQVRUUklCVVRFLCBXZWJLaXRE
T01hdHRyaWJ1dGVQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NYXR0cmlidXRl
UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OmF0dHJpYnV0ZT4gY29yZU9iamVjdDsKLX0g
V2ViS2l0RE9NYXR0cmlidXRlUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktp
dERPTWF0dHJpYnV0ZSoga2l0KFdlYkNvcmU6OmF0dHJpYnV0ZSogb2JqKQotewotICAgIGlmICgh
b2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmpl
Y3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFJJQlVURShy
ZXQpOwotCi0gICAgcmV0dXJuIHdyYXBhdHRyaWJ1dGUob2JqKTsKLX0KLQotV2ViQ29yZTo6YXR0
cmlidXRlKiBjb3JlKFdlYktpdERPTWF0dHJpYnV0ZSogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4g
cmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OmF0dHJpYnV0ZSo+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTWF0dHJpYnV0ZSog
d3JhcGF0dHJpYnV0ZShXZWJDb3JlOjphdHRyaWJ1dGUqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNT
RVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFJJQlVURShnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX0FUVFJJQlVURSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQ
RShXZWJLaXRET01hdHRyaWJ1dGUsIHdlYmtpdF9kb21fYXR0cmlidXRlLCBXRUJLSVRfRE9NX1RZ
UEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9SRUFET05MWSwKLX07
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXR0cmlidXRlX2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKLXsKLSAgICBXZWJLaXRET01hdHRyaWJ1dGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9BVFRSSUJVVEVfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJL
aXRET01hdHRyaWJ1dGVQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9h
dHRyaWJ1dGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsK
LSAgICBXZWJLaXRET01UZXN0RXhjZXB0aW9uKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0VYQ0VQ
VElPTihvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9Q
X05BTUU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9leGNlcHRpb25fZ2V0X25hbWUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fYXR0cmlidXRlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktp
dERPTWF0dHJpYnV0ZSogc2VsZiA9IFdFQktJVF9ET01fQVRUUklCVVRFKG9iamVjdCk7Ci0KLSAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfUkVBRE9OTFk6Ci0gICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9yZWFk
b25seShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9h
dHRyaWJ1dGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGll
c0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0g
ICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hdHRyaWJ1dGVf
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX0FUVFJJQlVURV9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHBy
aXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjphdHRyaWJ1dGUqPihXRUJLSVRf
RE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBv
YmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXR0cmlidXRlX2NsYXNzX2luaXQo
V2ViS2l0RE9NYXR0cmlidXRlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTWF0dHJp
YnV0ZVByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV9hdHRyaWJ1dGVfY29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9kb21fYXR0cmlidXRlX2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQ
Uk9QX05BTUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAibmFt
ZSIsCi0gICAgICAgICAgICAiVGVzdEV4Y2VwdGlvbjpuYW1lIiwKLSAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2NoYXIqIFRlc3RFeGNlcHRpb246bmFtZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFQURP
TkxZLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJlYWRvbmx5
IiwKLSAgICAgICAgICAgICJhdHRyaWJ1dGU6cmVhZG9ubHkiLAotICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogYXR0cmlidXRlOnJlYWRvbmx5IiwKLSAgICAgICAgICAgICIiLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9hdHRyaWJ1dGVfaW5pdChXZWJLaXRET01hdHRyaWJ1dGUqIHJlcXVlc3QpCi17Ci0gICAg
V2ViS2l0RE9NYXR0cmlidXRlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQVRUUklCVVRFX0dF
VF9QUklWQVRFKHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NYXR0cmlidXRlUHJp
dmF0ZSgpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3JlYWRvbmx5KFdl
YktpdERPTWF0dHJpYnV0ZSogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRS
SUJVVEUoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OmF0dHJpYnV0ZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5yZWFkb25seSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1
dGUuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTWF0dHJpYnV0ZS5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0ZGE4MmFhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTWF0dHJpYnV0ZS5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAg
LTEgKzAsMCBAQAotZ2NoYXIqIHdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9yZWFkb25seShXZWJL
aXRET01hdHRyaWJ1dGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWNlOWE4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NcmVhZG9u
bHkuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNs
dWRlICJXZWJLaXRET01yZWFkb25seVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZl
cnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUob2Jq
KSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfUkVBRE9O
TFksIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TXJlYWRvbmx5UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OnJlYWRvbmx5PiBjb3JlT2Jq
ZWN0OwotfSBXZWJLaXRET01yZWFkb25seVByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1XZWJLaXRET01yZWFkb25seSoga2l0KFdlYkNvcmU6OnJlYWRvbmx5KiBvYmopCi17Ci0gICAg
aWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fUkVBRE9O
TFkocmV0KTsKLQotICAgIHJldHVybiB3cmFwcmVhZG9ubHkob2JqKTsKLX0KLQotV2ViQ29yZTo6
cmVhZG9ubHkqIGNvcmUoV2ViS2l0RE9NcmVhZG9ubHkqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpyZWFkb25seSo+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTXJlYWRvbmx5KiB3
cmFwcmVhZG9ubHkoV2ViQ29yZTo6cmVhZG9ubHkqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJU
KGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1JFQURPTkxZKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfUkVBRE9OTFksICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NcmVhZG9ubHksIHdlYmtpdF9kb21fcmVhZG9ubHksIFdFQktJVF9ET01fVFlQRV9PQkpF
Q1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fcmVhZG9ubHlfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQotewotICAgIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fUkVBRE9OTFlfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJL
aXRET01yZWFkb25seVByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Jl
YWRvbmx5X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX3JlYWRvbmx5X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fcmVhZG9ubHlfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTXJl
YWRvbmx5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6cmVhZG9u
bHkqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQot
ICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fcmVhZG9ubHlf
Y2xhc3NfaW5pdChXZWJLaXRET01yZWFkb25seUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJL
aXRET01yZWFkb25seVByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0g
d2Via2l0X2RvbV9yZWFkb25seV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV9yZWFkb25seV9maW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9yZWFkb25seV9pbml0KFdlYktpdERPTXJlYWRvbmx5KiByZXF1ZXN0KQotewotICAg
IFdlYktpdERPTXJlYWRvbmx5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlfR0VU
X1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01yZWFkb25seVByaXZh
dGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5LnN5bWJvbHMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmlkbAppbmRleCA1NjJiNWRhLi44NmQ4NzIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuaWRsCkBAIC0yMyw5ICsyMyw3IEBAIGludGVyZmFjZSBDU1NTdHls
ZVNoZWV0IDogU3R5bGVTaGVldCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU1J1bGVMaXN0
IGNzc1J1bGVzOwogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBpbnNlcnRS
dWxlKERPTVN0cmluZyBydWxlLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKLSNpZiAhKGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhjZXB0
aW9uLCBJbXBsZW1lbnRlZEFzPWRlcHJlY2F0ZWRJbnNlcnRSdWxlXSB1bnNpZ25lZCBsb25nIGlu
c2VydFJ1bGUoRE9NU3RyaW5nIHJ1bGUpOyAvLyBEZXByZWNhdGVkLgotI2VuZGlmCiAKICAgICBb
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIGRlbGV0ZVJ1bGUodW5zaWduZWQgbG9uZyBpbmRleCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SR0JDb2xvci5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvUkdCQ29sb3IuaWRsCmluZGV4IDVhYzRhYjcuLmI2MDJmMGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9SR0JDb2xvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1JHQkNvbG9yLmlkbApAQCAtMjYsNyArMjYsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBD
U1NQcmltaXRpdmVWYWx1ZSBncmVlbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTUHJpbWl0
aXZlVmFsdWUgYmx1ZTsKIAotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VB
R0VfR09CSkVDVAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVWYWx1ZSBhbHBo
YTsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01Db3JlRXhj
ZXB0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmlkbAppbmRl
eCA0YTQyOTNiLi4zNGQxNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQ29y
ZUV4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUNvcmVFeGNlcHRpb24u
aWRsCkBAIC0zOCw5ICszOCw3IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAg
ICAgICAgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtZXNz
YWdlOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCiAgICAgW05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAK
ICAgICAvLyBFeGNlcHRpb25Db2RlCiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5ERVhfU0la
RV9FUlIgPSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0
aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwKaW5kZXgg
MzMwMDVkYS4uZGEyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxl
bWVudGF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24u
aWRsCkBAIC0yOCwxMyArMjgsNyBAQAogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0
XSBEb2N1bWVudFR5cGUgY3JlYXRlRG9jdW1lbnRUeXBlKERPTVN0cmluZyBxdWFsaWZpZWROYW1l
LCBET01TdHJpbmcgcHVibGljSWQsIERPTVN0cmluZyBzeXN0ZW1JZCk7CiAKLSAgICBbTmV3T2Jq
ZWN0LCBSYWlzZXNFeGNlcHRpb25dCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBM
QU5HVUFHRV9HT0JKRUNUCi0gICAgICAgIERvY3VtZW50Ci0jZWxzZQotICAgICAgICBYTUxEb2N1
bWVudAotI2VuZGlmCi0gICAgY3JlYXRlRG9jdW1lbnQoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkks
IFtUcmVhdE51bGxBcz1FbXB0eVN0cmluZ10gRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUsIG9wdGlv
bmFsIERvY3VtZW50VHlwZT8gZG9jdHlwZSA9IG51bGwpOworICAgIFtOZXdPYmplY3QsIFJhaXNl
c0V4Y2VwdGlvbl0gWE1MRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoRE9NU3RyaW5nPyBuYW1lc3Bh
Y2VVUkksIFtUcmVhdE51bGxBcz1FbXB0eVN0cmluZ10gRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUs
IG9wdGlvbmFsIERvY3VtZW50VHlwZT8gZG9jdHlwZSA9IG51bGwpOwogCiAgICAgLy8gRklYTUU6
IFVzaW5nICJ1bmRlZmluZWQiIGFzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGlzIHdyb25nLgog
ICAgIFtSYWlzZXNFeGNlcHRpb25dIENTU1N0eWxlU2hlZXQgY3JlYXRlQ1NTU3R5bGVTaGVldChv
cHRpb25hbCBET01TdHJpbmcgdGl0bGUgPSAidW5kZWZpbmVkIiwgb3B0aW9uYWwgRE9NU3RyaW5n
IG1lZGlhID0gInVuZGVmaW5lZCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggOTU1NTYy
MS4uYzhlMDYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC01NywzNyArNTcsMTggQEAK
IAogICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgYWRvcHROb2RlKE5vZGUgc291cmNlKTsKIAot
I2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIC8v
IGRvY3VtZW50LmRvY3VtZW50VVJJIHdhcyB3cml0YWJsZSBpbiBET00zIENvcmUsIGJ1dCBpcyBy
ZWFkLW9ubHkgaW4gRE9NNAotICAgIC8vIChzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9X
RC1kb20tMjAxMTA5MTUvI2RvY3VtZW50KS4gV2UgbmVlZCB0byBrZWVwCi0gICAgLy8gdGhlIHdy
aXRhYmxlIHZlcnNpb24gYXJvdW5kIGZvciBHT2JqZWN0IGNsaWVudHMsIGJ1dCBhcmUgbW92aW5n
IHRvCi0gICAgLy8gcmVhZC1vbmx5IGZvciBvdGhlciBjbGllbnRzLgotICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmc/IGRvY3VtZW50VVJJOwotI2Vsc2UKICAgICBbSW1wbGVtZW50ZWRBcz11cmxGb3JC
aW5kaW5nc10gcmVhZG9ubHkgYXR0cmlidXRlIFVTVlN0cmluZyBkb2N1bWVudFVSSTsKLSNlbmRp
ZgogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBFdmVudCBjcmVhdGVFdmVudChE
T01TdHJpbmcgZXZlbnRUeXBlKTsKIAogICAgIFtOZXdPYmplY3RdIFJhbmdlIGNyZWF0ZVJhbmdl
KCk7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QK
LSAgICBOb2RlSXRlcmF0b3IgY3JlYXRlTm9kZUl0ZXJhdG9yKE5vZGUgcm9vdCwKLSAgICAgICAg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyB3aGF0VG9TaG93ID0gMHhGRkZGRkZGRiwKLSAgICAgICAg
b3B0aW9uYWwgTm9kZUZpbHRlcj8gZmlsdGVyLAotICAgICAgICBvcHRpb25hbCBib29sZWFuIGV4
cGFuZEVudGl0eVJlZmVyZW5jZXMpOwotICAgIFRyZWVXYWxrZXIgY3JlYXRlVHJlZVdhbGtlcihO
b2RlIHJvb3QsCi0gICAgICAgIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdyA9IDB4
RkZGRkZGRkYsCi0gICAgICAgIG9wdGlvbmFsIE5vZGVGaWx0ZXI/IGZpbHRlciwKLSAgICAgICAg
b3B0aW9uYWwgYm9vbGVhbiBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSNlbHNlCiAgICAgW05l
d09iamVjdF0gTm9kZUl0ZXJhdG9yIGNyZWF0ZU5vZGVJdGVyYXRvcihOb2RlIHJvb3QsCiAgICAg
ICAgIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCiAgICAg
ICAgIG9wdGlvbmFsIE5vZGVGaWx0ZXI/IGZpbHRlciA9IG51bGwpOwogICAgIFtOZXdPYmplY3Rd
IFRyZWVXYWxrZXIgY3JlYXRlVHJlZVdhbGtlcihOb2RlIHJvb3QsCiAgICAgICAgIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCiAgICAgICAgIG9wdGlvbmFs
IE5vZGVGaWx0ZXI/IGZpbHRlciA9IG51bGwpOwotI2VuZGlmCiAKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NV2luZG93IGRlZmF1bHRWaWV3OwogCkBAIC0xMjAsMTEgKzEwMSw3IEBACiAgICAg
YXR0cmlidXRlIERPTVN0cmluZyBkZXNpZ25Nb2RlOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IFVTVlN0cmluZyByZWZlcnJlcjsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYg
TEFOR1VBR0VfR09CSkVDVCkKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUg
VVNWU3RyaW5nIGRvbWFpbjsKLSNlbHNlCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBkb21haW47Ci0jZW5kaWYKICAgICBbSW1wbGVtZW50ZWRBcz11cmxGb3JCaW5kaW5nc10gcmVh
ZG9ubHkgYXR0cmlidXRlIFVTVlN0cmluZyBVUkw7CiAKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0
aW9uLCBTZXR0ZXJSYWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgY29va2llOwpA
QCAtMTQ0LDMzICsxMjEsMjEgQEAKIAogICAgIE5vZGVMaXN0IGdldEVsZW1lbnRzQnlOYW1lKFtB
dG9taWNTdHJpbmddIERPTVN0cmluZyBlbGVtZW50TmFtZSk7CiAKLSNpZiAhKGRlZmluZWQoTEFO
R1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUHV0Rm9yd2FyZHM9aHJl
ZiwgVW5mb3JnZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBMb2NhdGlvbj8gbG9jYXRpb247Ci0j
ZW5kaWYKIAotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVD
VAotICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgY2hhcnNldDsKLSNlbHNlCiAgICAgW0ltcGxlbWVu
dGVkQXM9Y2hhcmFjdGVyU2V0V2l0aFVURjhGYWxsYmFja10gcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBjaGFyc2V0OwotI2VuZGlmCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyByZWFkeVN0YXRlOwogCiAgICAgRWxlbWVudCBlbGVtZW50RnJvbVBvaW50KG9wdGlvbmFsIGxv
bmcgeCA9IDAsIG9wdGlvbmFsIGxvbmcgeSA9IDApOwogICAgIFJhbmdlIGNhcmV0UmFuZ2VGcm9t
UG9pbnQob3B0aW9uYWwgbG9uZyB4ID0gMCwgb3B0aW9uYWwgbG9uZyB5ID0gMCk7CiAKICAgICAv
LyBNb3ppbGxhIGV4dGVuc2lvbnMKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYg
TEFOR1VBR0VfR09CSkVDVCkKICAgICBET01TZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCk7Ci0jZW5k
aWYKICAgICBbSW1wbGVtZW50ZWRBcz1jaGFyYWN0ZXJTZXRXaXRoVVRGOEZhbGxiYWNrXSByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNoYXJhY3RlclNldDsKIAogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmc/IHByZWZlcnJlZFN0eWxlc2hlZXRTZXQ7CiAgICAgYXR0cmlidXRl
IERPTVN0cmluZz8gc2VsZWN0ZWRTdHlsZXNoZWV0U2V0OwogCi0jaWYgZGVmaW5lZChMQU5HVUFH
RV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBj
cmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0jZW5kaWYKLQogICAgIC8vIEZJWE1FOiBUaGlz
IGlzIG5vdCBzdGFuZGFyZCBhbmQgaGFzIGJlZW4gZHJvcHBlZCBmcm9tIEJsaW5rIGFscmVhZHku
CiAgICAgW0N1c3RvbV0gKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvciBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKSBnZXRDU1NDYW52YXNDb250ZXh0KERPTVN0cmluZyBjb250ZXh0SWQsIERP
TVN0cmluZyBuYW1lLCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCk7CiAKQEAgLTE5Nyw3ICsxNjIs
NiBAQAogICAgIFtDb25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHZvaWQgZXhpdFBvaW50ZXJMb2Nr
KCk7CiAgICAgW0NvbmRpdGlvbmFsPVBPSU5URVJfTE9DS10gcmVhZG9ubHkgYXR0cmlidXRlIEVs
ZW1lbnQ/IHBvaW50ZXJMb2NrRWxlbWVudDsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JK
RUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtDb25kaXRpb25hbD1DU1NfUkVHSU9OU10g
RE9NTmFtZWRGbG93Q29sbGVjdGlvbiB3ZWJraXRHZXROYW1lZEZsb3dzKCk7CiAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRm9udEZhY2VTZXQgZm9udHM7CkBAIC0yMTMsOCArMTc3LDYgQEAKICAg
ICBbTmV3T2JqZWN0LCBDdXN0b21dIFRvdWNoTGlzdCBjcmVhdGVUb3VjaExpc3QoVG91Y2guLi4g
dG91Y2hlcyk7CiAjZW5kaWYKIAotI2VuZGlmCi0KICAgICAvLyBQYWdlIHZpc2liaWxpdHkgQVBJ
LgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmlzaWJpbGl0eVN0YXRlOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGhpZGRlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
VHlwZS5pZGwKaW5kZXggZTY4NzQ1Yi4uZTFlYTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50VHlwZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
VHlwZS5pZGwKQEAgLTIyLDEzICsyMiw2IEBACiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKIF0g
aW50ZXJmYWNlIERvY3VtZW50VHlwZSA6IE5vZGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgbmFtZTsKLQotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VB
R0VfR09CSkVDVAotICAgIFtJbXBsZW1lbnRlZEFzPWVudGl0aWVzRm9yQmluZGluZ3NdIHJlYWRv
bmx5IGF0dHJpYnV0ZSBOYW1lZE5vZGVNYXAgZW50aXRpZXM7Ci0gICAgW0ltcGxlbWVudGVkQXM9
bm90YXRpb25zRm9yQmluZGluZ3NdIHJlYWRvbmx5IGF0dHJpYnV0ZSBOYW1lZE5vZGVNYXAgbm90
YXRpb25zOwotICAgIFtJbXBsZW1lbnRlZEFzPWludGVybmFsU3Vic2V0Rm9yQmluZGluZ3NdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmc/IGludGVybmFsU3Vic2V0OwotI2VuZGlmCi0KICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHB1YmxpY0lkOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgc3lzdGVtSWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCmluZGV4
IDcxYjYwNDMuLjg0NzBlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKQEAgLTc4LDExICs3OCw2
IEBACiAKICAgICBbSW1wbGVtZW50ZWRBcz1iaW5kaW5nc09mZnNldFBhcmVudF0gcmVhZG9ubHkg
YXR0cmlidXRlIEVsZW1lbnQgb2Zmc2V0UGFyZW50OwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9H
T0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgdm9pZCBmb2N1cygpOwotICAgIHZvaWQg
Ymx1cigpOwotI2VuZGlmCi0KICAgICB2b2lkIHNjcm9sbEludG9WaWV3KG9wdGlvbmFsIGJvb2xl
YW4gYWxpZ25XaXRoVG9wID0gdHJ1ZSk7CiAKICAgICBzZXF1ZW5jZTxET01TdHJpbmc+IGdldEF0
dHJpYnV0ZU5hbWVzKCk7CkBAIC0xMDIsMTEgKzk3LDkgQEAKICAgICBbUmFpc2VzRXhjZXB0aW9u
XSBFbGVtZW50IGNsb3Nlc3QoRE9NU3RyaW5nIHNlbGVjdG9ycyk7ICAgIAogICAgIFtJbXBsZW1l
bnRlZEFzPW1hdGNoZXMsIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiB3ZWJraXRNYXRjaGVzU2Vs
ZWN0b3IoRE9NU3RyaW5nIHNlbGVjdG9ycyk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICAvLyBDU1NPTSBWaWV3IE1vZHVsZSBBUEkK
ICAgICBDbGllbnRSZWN0TGlzdCBnZXRDbGllbnRSZWN0cygpOwogICAgIENsaWVudFJlY3QgZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX0ZVTExT
Q1JFRU5fQVBJKSAmJiBFTkFCTEVfRlVMTFNDUkVFTl9BUEkKICAgICAvLyBNb3ppbGxhIHZlcnNp
b24KQEAgLTEzMSwxMiArMTI0LDEwIEBACiAgICAgW0NvbmRpdGlvbmFsPUNTU19SRUdJT05TXSBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdlYmtpdFJlZ2lvbk92ZXJzZXQ7CiAgICAgW0Nv
bmRpdGlvbmFsPUNTU19SRUdJT05TXSBzZXF1ZW5jZTxSYW5nZT4gd2Via2l0R2V0UmVnaW9uRmxv
d1JhbmdlcygpOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdF
X0dPQkpFQ1QpCiAgICAgLy8gU2hhZG93IERPTSBBUEkKICAgICBbRW5hYmxlZEF0UnVudGltZT1T
aGFkb3dET00sIFJhaXNlc0V4Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93
Um9vdEluaXQgaW5pdCk7CiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1l
bnRlZEFzPXNoYWRvd1Jvb3RGb3JCaW5kaW5ncywgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHJlYWRv
bmx5IGF0dHJpYnV0ZSBTaGFkb3dSb290IHNoYWRvd1Jvb3Q7CiAgICAgW0VuYWJsZWRBdFJ1bnRp
bWU9U2hhZG93RE9NLCBSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNsb3Q7Ci0jZW5kaWYK
IAogICAgIC8vIEV2ZW50IEhhbmRsZXJzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCmluZGV4IGQzYjY0Y2Yu
LmZkODJhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbApAQCAtNzIsNyArNzIsNSBAQAogICAgIFtJbXBs
ZW1lbnRlZEFzPWxlZ2FjeVJldHVyblZhbHVlXSBhdHRyaWJ1dGUgYm9vbGVhbiByZXR1cm5WYWx1
ZTsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBjYW5jZWxCdWJibGU7CiAKLSNpZiAhKGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9tXSByZWFk
b25seSBhdHRyaWJ1dGUgRGF0YVRyYW5zZmVyIGNsaXBib2FyZERhdGE7Ci0jZW5kaWYKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaWRsIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmlkbAppbmRleCBkMDEzYjBiLi4zMzZhNDJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAgICBKU0N1c3RvbUhl
YWRlciwKICAgICBKU0N1c3RvbVRvTmF0aXZlT2JqZWN0LAogXSBpbnRlcmZhY2UgRXZlbnRUYXJn
ZXQgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNU
KQogICAgIC8vIEZJWE1FOiBTaG91bGQgYmU6CiAgICAgLy8gdm9pZCBhZGRFdmVudExpc3RlbmVy
KERPTVN0cmluZyB0eXBlLCBFdmVudExpc3RlbmVyPyBjYWxsYmFjaywgb3B0aW9uYWwgKEFkZEV2
ZW50TGlzdGVuZXJPcHRpb25zIG9yIGJvb2xlYW4pIG9wdGlvbnMpOwogICAgIC8vIHZvaWQgcmVt
b3ZlRXZlbnRMaXN0ZW5lcihET01TdHJpbmcgdHlwZSwgRXZlbnRMaXN0ZW5lcj8gY2FsbGJhY2ss
IG9wdGlvbmFsIChFdmVudExpc3RlbmVyT3B0aW9ucyBvciBib29sZWFuKSBvcHRpb25zKTsKQEAg
LTMyLDcgKzMxLDYgQEAKICAgICBbSW1wbGVtZW50ZWRBcz1hZGRFdmVudExpc3RlbmVyRm9yQmlu
ZGluZ3NdIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihbQXRvbWljU3RyaW5nXSBET01TdHJpbmcgdHlw
ZSwgRXZlbnRMaXN0ZW5lcj8gbGlzdGVuZXIsIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIG9wdGlv
bnMpOwogICAgIFtJbXBsZW1lbnRlZEFzPXJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5nc10g
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyKFtBdG9taWNTdHJpbmddIERPTVN0cmluZyB0eXBlLCBF
dmVudExpc3RlbmVyPyBsaXN0ZW5lcik7CiAgICAgW0ltcGxlbWVudGVkQXM9cmVtb3ZlRXZlbnRM
aXN0ZW5lckZvckJpbmRpbmdzXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoW0F0b21pY1N0cmlu
Z10gRE9NU3RyaW5nIHR5cGUsIEV2ZW50TGlzdGVuZXI/IGxpc3RlbmVyLCBFdmVudExpc3RlbmVy
T3B0aW9ucyBvcHRpb25zKTsKLSNlbmRpZgogCiAgICAgW0ltcGxlbWVudGVkQXM9YWRkRXZlbnRM
aXN0ZW5lckZvckJpbmRpbmdzXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoW0F0b21pY1N0cmluZ10g
RE9NU3RyaW5nIHR5cGUsIEV2ZW50TGlzdGVuZXI/IGxpc3RlbmVyLCBib29sZWFuIHVzZUNhcHR1
cmUpOwogICAgIFtJbXBsZW1lbnRlZEFzPXJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5nc10g
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyKFtBdG9taWNTdHJpbmddIERPTVN0cmluZyB0eXBlLCBF
dmVudExpc3RlbmVyPyBsaXN0ZW5lciwgYm9vbGVhbiB1c2VDYXB0dXJlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9LZXlib2FyZEV2ZW50LmlkbAppbmRleCBlNDM4M2ZhLi44NTJlNWMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0tleWJvYXJkRXZlbnQuaWRsCkBAIC0yMywyMCArMjMsMTAgQEAKICAgICBDb25zdHJ1Y3Rv
clRlbXBsYXRlPUV2ZW50LAogXSBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudCA6IFVJRXZlbnQgewog
Ci0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAg
Ly8gS2V5TG9jYXRpb25Db2RlCi0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBLRVlfTE9DQVRJT05f
U1RBTkRBUkQgPSAweDAwOwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgS0VZX0xPQ0FUSU9OX0xF
RlQgPSAweDAxOwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgS0VZX0xPQ0FUSU9OX1JJR0hUID0g
MHgwMjsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEtFWV9MT0NBVElPTl9OVU1QQUQgPSAweDAz
OwotI2VuZGlmCi0KLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0Vf
R09CSkVDVCkKICAgICBjb25zdCB1bnNpZ25lZCBsb25nIERPTV9LRVlfTE9DQVRJT05fU1RBTkRB
UkQgPSAweDAwOwogICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9MRUZU
ID0gMHgwMTsKICAgICBjb25zdCB1bnNpZ25lZCBsb25nIERPTV9LRVlfTE9DQVRJT05fUklHSFQg
PSAweDAyOwogICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQg
PSAweDAzOwotI2VuZGlmCiAKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcga2V5SWRlbnRpZmllcjsKICAgICBbSW5pdGlhbGl6
ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxv
Y2F0aW9uOwpAQCAtNDcsMTAgKzM3LDYgQEAKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3Ry
dWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIG1ldGFLZXk7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGJvb2xlYW4gYWx0R3JhcGhLZXk7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dP
QkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBib29sZWFuIGdldE1vZGlmaWVyU3RhdGUo
b3B0aW9uYWwgRE9NU3RyaW5nIGtleUlkZW50aWZpZXJBcmcpOwotI2VuZGlmCi0KICAgICAvLyBG
SVhNRTogdGhpcyBkb2VzIG5vdCBtYXRjaCB0aGUgdmVyc2lvbiBpbiB0aGUgRE9NIHNwZWMuCiAg
ICAgLy8gRklYTUU6IFVzaW5nICJ1bmRlZmluZWQiIGFzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVl
IGlzIHdyb25nLgogICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQob3B0aW9uYWwgRE9NU3RyaW5n
IHR5cGUgPSAidW5kZWZpbmVkIiwgb3B0aW9uYWwgYm9vbGVhbiBjYW5CdWJibGUgPSBmYWxzZSwg
b3B0aW9uYWwgYm9vbGVhbiBjYW5jZWxhYmxlID0gZmFsc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuaWRsCmluZGV4IGYxNTI3OGEuLjRiNmU1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9NZXNzYWdlRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuaWRsCkBAIC0zMyw3ICszMyw2IEBACiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0
cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhc3RFdmVudElkOwogICAgIFtJ
bml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9ubHkgYXR0cmlidXRlIEV2ZW50VGFy
Z2V0IHNvdXJjZTsgLy8gTWF5IGJlIGEgRE9NV2luZG93IG9yIGEgTWVzc2FnZVBvcnQuCiAKLSNp
ZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBb
SW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3IsIENhY2hlZEF0dHJpYnV0ZSwgQ3VzdG9tR2V0
dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IGRhdGE7CiAgICAgW0luaXRpYWxpemVkQnlFdmVu
dENvbnN0cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8TWVzc2FnZVBvcnQ+IHBv
cnRzOwogCkBAIC00NCwxMSArNDMsNCBAQAogICAgIFtDdXN0b21dIHZvaWQgd2Via2l0SW5pdE1l
c3NhZ2VFdmVudChvcHRpb25hbCBET01TdHJpbmcgdHlwZUFyZywgb3B0aW9uYWwgYm9vbGVhbiBj
YW5CdWJibGVBcmcsIG9wdGlvbmFsIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywKICAgICAgICAgb3B0
aW9uYWwgYW55IGRhdGFBcmcsIG9wdGlvbmFsIFVTVlN0cmluZyBvcmlnaW5BcmcsIG9wdGlvbmFs
IERPTVN0cmluZyBsYXN0RXZlbnRJZEFyZywgb3B0aW9uYWwgRE9NV2luZG93IHNvdXJjZUFyZywK
ICAgICAgICAgb3B0aW9uYWwgQXJyYXkgdHJhbnNmZXJhYmxlcyk7Ci0jZWxzZQotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0YTsKLSAgICByZWFkb25seSBh
dHRyaWJ1dGUgTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQ7Ci0gICAgdm9pZCBpbml0TWVzc2FnZUV2
ZW50KG9wdGlvbmFsIERPTVN0cmluZyB0eXBlQXJnLCBvcHRpb25hbCBib29sZWFuIGNhbkJ1YmJs
ZUFyZywgb3B0aW9uYWwgYm9vbGVhbiBjYW5jZWxhYmxlQXJnLAotICAgICAgICBvcHRpb25hbCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU/IGRhdGFBcmcsIG9wdGlvbmFsIERPTVN0cmluZyBvcmlnaW5B
cmcsIG9wdGlvbmFsIERPTVN0cmluZyBsYXN0RXZlbnRJZEFyZywgb3B0aW9uYWwgRE9NV2luZG93
PyBzb3VyY2VBcmcsCi0gICAgICAgIG9wdGlvbmFsIE1lc3NhZ2VQb3J0PyBtZXNzYWdlUG9ydCk7
Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQu
aWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAppbmRleCBjYWU4MzUyLi5i
NTcyZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwKQEAgLTMxLDEyICszMSwxMCBA
QAogICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlv
biwKIF0gaW50ZXJmYWNlIE1lc3NhZ2VQb3J0IDogRXZlbnRUYXJnZXQgewotI2lmICEoZGVmaW5l
ZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgQXJy
YXkgbWVzc2FnZVBvcnRzKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIGNsb3NlKCk7
CiAKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2FnZTsKLSNlbmRpZgogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Nb3VzZUV2ZW50LmlkbAppbmRleCA1NWZhNzI2Li44NTlhMGZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01vdXNlRXZlbnQuaWRsCkBAIC0yMiwxMCArMjIsOCBAQAogICAgIENvbnN0cnVjdG9yVGVt
cGxhdGU9RXZlbnQsCiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKIF0gaW50ZXJmYWNlIE1vdXNl
RXZlbnQgOiBVSUV2ZW50IHsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFO
R1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0aW9uYWw9TU9VU0VfRk9SQ0VfRVZFTlRTXSBjb25z
dCBkb3VibGUgV0VCS0lUX0ZPUkNFX0FUX01PVVNFX0RPV04gPSAxOwogICAgIFtDb25kaXRpb25h
bD1NT1VTRV9GT1JDRV9FVkVOVFNdIGNvbnN0IGRvdWJsZSBXRUJLSVRfRk9SQ0VfQVRfRk9SQ0Vf
TU9VU0VfRE9XTiA9IDI7Ci0jZW5kaWYKIAogICAgIFtJbml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1
Y3Rvcl0gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgc2NyZWVuWDsKICAgICBbSW5pdGlhbGl6ZWRC
eUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHNjcmVlblk7CkBAIC0z
OSw5ICszNyw3IEBACiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9yXSByZWFkb25s
eSBhdHRyaWJ1dGUgRXZlbnRUYXJnZXQ/IHJlbGF0ZWRUYXJnZXQ7CiAgICAgW0NvbmRpdGlvbmFs
PVBPSU5URVJfTE9DS10gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbW92ZW1lbnRYOwogICAgIFtD
b25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIG1vdmVtZW50
WTsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkK
ICAgICBbQ29uZGl0aW9uYWw9TU9VU0VfRk9SQ0VfRVZFTlRTLCBJbXBsZW1lbnRlZEFzPWZvcmNl
XXJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgd2Via2l0Rm9yY2U7Ci0jZW5kaWYKIAogICAgIC8v
IEZJWE1FOiBVc2luZyAidW5kZWZpbmVkIiBhcyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBpcyB3
cm9uZy4KICAgICB2b2lkIGluaXRNb3VzZUV2ZW50KG9wdGlvbmFsIERPTVN0cmluZyB0eXBlID0g
InVuZGVmaW5lZCIsIG9wdGlvbmFsIGJvb2xlYW4gY2FuQnViYmxlID0gZmFsc2UsICBvcHRpb25h
bCBib29sZWFuIGNhbmNlbGFibGUgPSBmYWxzZSwKQEAgLTU2LDggKzUyLDUgQEAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgbG9uZyB5OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlPyBmcm9t
RWxlbWVudDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZT8gdG9FbGVtZW50OwotCi0jaWYg
IShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERhdGFUcmFuc2ZlciBkYXRhVHJhbnNmZXI7Ci0jZW5kaWYKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsCmluZGV4IDE1MDRiMDcuLmM2NzI2NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsCkBAIC0yNSw3ICsyNSw2IEBACiBdIGludGVyZmFj
ZSBOYW1lZE5vZGVNYXAgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxl
bmd0aDsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JK
RUNUKQogICAgIGdldHRlciBBdHRyPyBnZXROYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwogICAg
IFtSYWlzZXNFeGNlcHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOwogICAgIFtS
YWlzZXNFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKQEAg
LTMzLDEzICszMiw0IEBACiAgICAgQXR0cj8gZ2V0TmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1l
c3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwogICAgIFtSYWlzZXNFeGNlcHRpb24sIElt
cGxlbWVudGVkQXM9c2V0TmFtZWRJdGVtXSBBdHRyPyBzZXROYW1lZEl0ZW1OUyhBdHRyIGF0dHIp
OwogICAgIFtSYWlzZXNFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5n
PyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotI2Vsc2UKLSAgICBnZXR0ZXIg
Tm9kZT8gZ2V0TmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9u
XSBOb2RlPyBzZXROYW1lZEl0ZW0oTm9kZSBub2RlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBO
b2RlIHJlbW92ZU5hbWVkSXRlbShET01TdHJpbmcgbmFtZSk7Ci0gICAgZ2V0dGVyIE5vZGU/IGl0
ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgTm9kZT8gZ2V0TmFtZWRJdGVtTlMoRE9NU3Ry
aW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotICAgIFtSYWlzZXNFeGNl
cHRpb24sIEltcGxlbWVudGVkQXM9c2V0TmFtZWRJdGVtXSBOb2RlPyBzZXROYW1lZEl0ZW1OUyhO
b2RlIG5vZGUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgcmVtb3ZlTmFtZWRJdGVtTlMo
RE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotI2VuZGlmCiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaWRsIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaWRsCmluZGV4IDdjOTI1ZTMuLmZlZTIxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwK
QEAgLTY2LDEwICs2Niw2IEBACiAKICAgICB2b2lkIG5vcm1hbGl6ZSgpOwogCi0jaWYgZGVmaW5l
ZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW0ltcGxlbWVudGVk
QXM9aXNTdXBwb3J0ZWRGb3JCaW5kaW5nc10gYm9vbGVhbiBpc1N1cHBvcnRlZChvcHRpb25hbCBE
T01TdHJpbmcgZmVhdHVyZSwgb3B0aW9uYWwgRE9NU3RyaW5nIHZlcnNpb24pOwotI2VuZGlmCi0K
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGJhc2VVUkk7CiAKICAgICAvLyBGSVhN
RTogdGhlIHNwZWMgc2F5cyB0aGlzIGNhbiBhbHNvIHJhaXNlIG9uIHJldHJpZXZhbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UmFuZ2UuaWRsCmluZGV4IDY5NjI0OWMuLmY0YTNjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbApAQCAt
MzMsMTMgKzMzLDggQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xsYXBzZWQ7
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWluZXI7CiAK
LSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAg
ICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFN0YXJ0KE5vZGUgcmVmTm9kZSwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0RW5kKE5vZGUgcmVm
Tm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotI2Vsc2UKLSAgICBbUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHNldFN0YXJ0KE5vZGUgcmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotICAgIFtSYWlzZXNF
eGNlcHRpb25dIHZvaWQgc2V0RW5kKE5vZGUgcmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotI2VuZGlm
CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFN0YXJ0QmVmb3JlKE5vZGUgcmVmTm9k
ZSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRTdGFydEFmdGVyKE5vZGUgcmVmTm9k
ZSk7CkBAIC02NywxMCArNjIsOCBAQAogCiAgICAgdm9pZCBkZXRhY2goKTsKIAotI2lmICEoZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIENsaWVudFJl
Y3RMaXN0IGdldENsaWVudFJlY3RzKCk7CiAgICAgQ2xpZW50UmVjdCBnZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKLSNlbmRpZgogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1
bWVudEZyYWdtZW50IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChET01TdHJpbmcgaHRtbCk7CiAK
QEAgLTg0LDE4ICs3Nyw5IEBACiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGludGVy
c2VjdHNOb2RlKE5vZGUgcmVmTm9kZSk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVD
VCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBzaG9ydCBjb21w
YXJlUG9pbnQoTm9kZSByZWZOb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAgICAgW1JhaXNl
c0V4Y2VwdGlvbl0gYm9vbGVhbiBpc1BvaW50SW5SYW5nZShOb2RlIHJlZk5vZGUsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSNlbHNlCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFy
ZVBvaW50KE5vZGUgcmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25d
IGJvb2xlYW4gaXNQb2ludEluUmFuZ2UoTm9kZSByZWZOb2RlLCBsb25nIG9mZnNldCk7Ci0jZW5k
aWYKIAogICAgIC8vIEZJWE1FOiBVc2luZyAidW5kZWZpbmVkIiBhcyBkZWZhdWx0IHBhcmFtZXRl
ciB2YWx1ZSBpcyB3cm9uZy4KICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRp
b25hbCBET01TdHJpbmcgdW5pdCA9ICJ1bmRlZmluZWQiKTsKLQotI2lmIGRlZmluZWQoTEFOR1VB
R0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdGV4dDsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TbG90YWJsZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2xvdGFibGUuaWRsCmluZGV4IDJh
YTJjNzkuLjEzMmVhYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TbG90YWJsZS5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nsb3RhYmxlLmlkbApAQCAtMjgsNyArMjgsNSBA
QAogICAgIE5vSW50ZXJmYWNlT2JqZWN0LAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9N
LAogXSBpbnRlcmZhY2UgU2xvdGFibGUgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNU
KSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtJbXBsZW1lbnRlZEFzPWFzc2lnbmVkU2xvdEZv
ckJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgSFRNTFNsb3RFbGVtZW50PyBhc3NpZ25lZFNs
b3Q7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5pZGwKaW5kZXggNjUzZWU0Zi4u
ODE2YjE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmlkbApAQCAtNDAsMTUgKzQwLDggQEAK
IAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHdlYmtpdERpcmVjdGlvbkludmVydGVk
RnJvbURldmljZTsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFH
RV9HT0JKRUNUKQogICAgIHZvaWQgaW5pdFdlYktpdFdoZWVsRXZlbnQob3B0aW9uYWwgbG9uZyB3
aGVlbERlbHRhWCA9IDAsIG9wdGlvbmFsIGxvbmcgd2hlZWxEZWx0YVkgPSAwLCBvcHRpb25hbCBE
T01XaW5kb3c/IHZpZXcgPSBudWxsLAogICAgICAgICBvcHRpb25hbCBsb25nIHNjcmVlblggPSAw
LCBvcHRpb25hbCBsb25nIHNjcmVlblkgPSAwLCBvcHRpb25hbCBsb25nIGNsaWVudFggPSAwLCBv
cHRpb25hbCBsb25nIGNsaWVudFkgPSAwLAogICAgICAgICBvcHRpb25hbCBib29sZWFuIGN0cmxL
ZXkgPSBmYWxzZSwgb3B0aW9uYWwgYm9vbGVhbiBhbHRLZXkgPSBmYWxzZSwKICAgICAgICAgb3B0
aW9uYWwgYm9vbGVhbiBzaGlmdEtleSA9IGZhbHNlLCBvcHRpb25hbCBib29sZWFuIG1ldGFLZXkg
PSBmYWxzZSk7Ci0jZWxzZQotICAgIHZvaWQgaW5pdFdoZWVsRXZlbnQob3B0aW9uYWwgbG9uZyB3
aGVlbERlbHRhWCA9IDAsIG9wdGlvbmFsIGxvbmcgd2hlZWxEZWx0YVkgPSAwLCBvcHRpb25hbCBE
T01XaW5kb3c/IHZpZXcgPSBudWxsLAotICAgICAgICBvcHRpb25hbCBsb25nIHNjcmVlblggPSAw
LCBvcHRpb25hbCBsb25nIHNjcmVlblkgPSAwLCBvcHRpb25hbCBsb25nIGNsaWVudFggPSAwLCBv
cHRpb25hbCBsb25nIGNsaWVudFkgPSAwLAotICAgICAgICBvcHRpb25hbCBib29sZWFuIGN0cmxL
ZXkgPSBmYWxzZSwgb3B0aW9uYWwgYm9vbGVhbiBhbHRLZXkgPSBmYWxzZSwKLSAgICAgICAgb3B0
aW9uYWwgYm9vbGVhbiBzaGlmdEtleSA9IGZhbHNlLCBvcHRpb25hbCBib29sZWFuIG1ldGFLZXkg
PSBmYWxzZSk7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0ZpbGVFeGNlcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlRXhjZXB0aW9u
LmlkbAppbmRleCAyZTE2ZGMzLi40MTZlMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVFeGNlcHRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZUV4Y2VwdGlvbi5pZGwKQEAgLTM3LDkgKzM3LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIG5hbWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdl
OwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1Qp
CiAgICAgW05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAg
ICAvLyBGaWxlRXhjZXB0aW9uQ29kZQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9GT1VO
RF9FUlIgPSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxl
bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAppbmRl
eCBiMjg5YzU5Li5jNTRiZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
cHBsZXRFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVt
ZW50LmlkbApAQCAtMjksMTcgKzI5LDkgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0
cmluZyBjb2RlOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGNvZGVCYXNlOwog
ICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhlaWdodDsKLSNpZiAhKGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmVmbGVjdF0gYXR0
cmlidXRlIERPTVN0cmluZyBoc3BhY2U7Ci0jZWxzZQotICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUg
bG9uZyBoc3BhY2U7Ci0jZW5kaWYKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBu
YW1lOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgVVNWU3RyaW5nIG9iamVjdDsKLSNpZiAhKGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmVmbGVj
dF0gYXR0cmlidXRlIERPTVN0cmluZyB2c3BhY2U7Ci0jZWxzZQotICAgIFtSZWZsZWN0XSBhdHRy
aWJ1dGUgbG9uZyB2c3BhY2U7Ci0jZW5kaWYKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0
cmluZyB3aWR0aDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRs
CmluZGV4IGJlYmEzOGQuLmZlM2M3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaWRsCkBAIC0yOSwxMyArMjksOCBAQAogICAgIFJlcG9ydEV4dHJhTWVtb3J5Q29z
dCwKICAgICBSZXBvcnRFeHRlcm5hbE1lbW9yeUNvc3QsCiBdIGludGVyZmFjZSBIVE1MQ2FudmFz
RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYm
IExBTkdVQUdFX0dPQkpFQ1QKLSAgICBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsKLSAgICBhdHRyaWJ1
dGUgbG9uZyBoZWlnaHQ7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHdpZHRo
OwogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGhlaWdodDsKLSNlbmRpZgogCiAgICAgW0N1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgdG9EYXRhVVJMKG9wdGlvbmFsIERPTVN0
cmluZz8gdHlwZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxl
Y3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKaW5kZXgg
OGVmYzAzYS4uMTk0MWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwK
QEAgLTI2LDExICsyNiw2IEBACiBdIGludGVyZmFjZSBIVE1MQ29sbGVjdGlvbiB7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwogCi0jaWYgZGVmaW5lZChMQU5H
VUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgZ2V0dGVyIE5vZGUgaXRlbSh1
bnNpZ25lZCBsb25nIGluZGV4KTsKLSAgICBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oRE9NU3RyaW5n
IG5hbWUpOwotI2Vsc2UKICAgICBnZXR0ZXIgRWxlbWVudD8gaXRlbSh1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKICAgICBnZXR0ZXIgRWxlbWVudD8gbmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKLSNl
bmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbAppbmRleCBkMDBmNWIyLi41
MDEwOGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCkBAIC0zMCwyMSArMzAs
MTMgQEAKICAgICBbQ3VzdG9tXSB2b2lkIHdyaXRlKG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0KTsK
ICAgICBbQ3VzdG9tXSB2b2lkIHdyaXRlbG4ob3B0aW9uYWwgRE9NU3RyaW5nIHRleHQpOwogCi0j
aWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAg
W0N1c3RvbSwgUmVwbGFjZWFibGUsIERlbGV0YWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxB
bGxDb2xsZWN0aW9uIGFsbDsKLSNlbmRpZgogCiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdm9p
ZCBjYXB0dXJlRXZlbnRzKCk7CiAgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CiAKLSNpZiBkZWZp
bmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICByZWFkb25seSBh
dHRyaWJ1dGUgbG9uZyB3aWR0aDsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBoZWlnaHQ7
Ci0gICAgYXR0cmlidXRlIERPTVN0cmluZyBkaXI7Ci0jZW5kaWYKLQogICAgIC8vIERlcHJlY2F0
ZWQgYXR0cmlidXRlcy4KICAgICBbVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBE
T01TdHJpbmcgYmdDb2xvcjsKICAgICBbVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0
ZSBET01TdHJpbmcgZmdDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKaW5kZXgg
MDI0ZWM0Ny4uZmVhYmE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKQEAgLTUx
LDEyICs1MSwxMCBAQAogCiAgICAgdm9pZCBjbGljaygpOwogCi0jaWYgIShkZWZpbmVkKExBTkdV
QUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgdm9pZCBmb2N1cygpOwogICAg
IHZvaWQgYmx1cigpOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ01hcCBkYXRh
c2V0OwotI2VuZGlmCiB9OwogCiBIVE1MRWxlbWVudCBpbXBsZW1lbnRzIEdsb2JhbEV2ZW50SGFu
ZGxlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
aWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAppbmRleCA1MDI2
YzJhLi4xZDgzMGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVs
ZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwK
QEAgLTI0LDE5ICsyNCwxMSBAQAogICAgIEN1c3RvbUNhbGwsCiBdIGludGVyZmFjZSBIVE1MRW1i
ZWRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcg
YWxpZ247Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCiBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBoZWlnaHQ7Ci0jZWxzZQotW1JlZmxl
Y3RdIGF0dHJpYnV0ZSBsb25nIGhlaWdodDsKLSNlbmRpZgogW1JlZmxlY3RdIGF0dHJpYnV0ZSBE
T01TdHJpbmcgbmFtZTsKIFtSZWZsZWN0LCBVUkxdIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgc3JjOwog
W1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKLSNpZiAhKGRlZmluZWQoTEFOR1VB
R0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHdpZHRoOwotI2Vsc2UKLVtSZWZsZWN0XSBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsKLSNl
bmRpZgogCiBbQ2hlY2tTZWN1cml0eUZvck5vZGUsIFJhaXNlc0V4Y2VwdGlvbl0gU1ZHRG9jdW1l
bnQgZ2V0U1ZHRG9jdW1lbnQoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRT
ZXRFbGVtZW50LmlkbAppbmRleCA4MmMxNDAyLi42ZDY1M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5pZGwKQEAgLTI0LDExICsyNCw3IEBAIGludGVyZmFj
ZSBIVE1MRmllbGRTZXRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogCiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyB0eXBlOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAm
JiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9ZWxlbWVudHNGb3JOYXRpdmVC
aW5kaW5nc10gcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxDb2xsZWN0aW9uIGVsZW1lbnRzOwotI2Vs
c2UKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24gZWxl
bWVudHM7Ci0jZW5kaWYKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAg
d2lsbFZhbGlkYXRlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBWYWxpZGl0eVN0YXRlICAgdmFs
aWRpdHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKaW5kZXggZGIyMDYw
Mi4uOWYzYjY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmlkbApAQCAt
MzUsMTEgKzM1LDcgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xlYW4gbm9WYWxpZGF0
ZTsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyB0YXJnZXQ7CiAKLSNpZiBkZWZp
bmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBbSW1wbGVtZW50
ZWRBcz1lbGVtZW50c0Zvck5hdGl2ZUJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENv
bGxlY3Rpb24gZWxlbWVudHM7Ci0jZWxzZQogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9y
bUNvbnRyb2xzQ29sbGVjdGlvbiBlbGVtZW50czsKLSNlbmRpZgogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBsb25nIGxlbmd0aDsKIAogICAgIGdldHRlciBFbGVtZW50ICh1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKQEAgLTQ4LDExICs0NCw3IEBACiAKICAgICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JS
RUNUX0FORF9BVVRPQ0FQSVRBTElaRSwgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0
ZSBET01TdHJpbmcgYXV0b2NhcGl0YWxpemU7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbSW1wbGVtZW50ZWRBcz1zdWJtaXRGcm9t
SmF2YVNjcmlwdF0gdm9pZCBzdWJtaXQoKTsKLSNlbHNlCi0gICAgdm9pZCBzdWJtaXQoKTsKLSNl
bmRpZgogICAgIHZvaWQgcmVzZXQoKTsKICAgICBib29sZWFuIGNoZWNrVmFsaWRpdHkoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAppbmRleCA5NzBlMzNjLi43
YzExY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAt
MjcsMTEgKzI3LDcgQEAgaW50ZXJmYWNlIEhUTUxJRnJhbWVFbGVtZW50IDogSFRNTEVsZW1lbnQg
ewogICAgIFtSZWZsZWN0LCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZ10gYXR0cmlidXRlIERPTVN0
cmluZyBtYXJnaW5XaWR0aDsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBuYW1l
OwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0g
ICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgc2FuZGJveDsKLSNlbHNlCiAgICAgW1B1
dEZvcndhcmRzPXZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NVG9rZW5MaXN0IHNhbmRib3g7
Ci0jZW5kaWYKIAogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNjcm9sbGluZzsK
ICAgICBbUmVmbGVjdCwgVVJMXSBhdHRyaWJ1dGUgVVNWU3RyaW5nIHNyYzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCmluZGV4IDQ4YjAyNWEuLmE4ZDJiNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbApAQCAtNTgsMTEgKzU4LDcgQEAK
ICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7IC8vIHJlYWRvbmx5IGRyb3BwZWQgYXMgcGFy
dCBvZiBET00gbGV2ZWwgMgogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZGVmYXVsdFZhbHVlOwog
ICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAwMDg1Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExB
TkdVQUdFX0dPQkpFQ1QpCiAgICAgW1RyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJSYWlz
ZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgdmFsdWU7Ci0jZWxzZQotICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgdmFsdWU7Ci0jZW5kaWYKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9u
XSBhdHRyaWJ1dGUgRGF0ZSB2YWx1ZUFzRGF0ZTsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9u
XSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSB2YWx1ZUFzTnVtYmVyOwogCkBAIC05Mywx
MCArODksNiBAQAogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVzZU1hcDsKICAg
ICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xlYW4gaW5jcmVtZW50YWw7CiAKLSNpZiBkZWZpbmVk
KExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICB2b2lkIHNldFZhbHVl
Rm9yVXNlcihET01TdHJpbmcgdmFsdWUpOwotI2VuZGlmCi0KICAgICBbQ29uZGl0aW9uYWw9SU9T
X0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRV0gYXR0cmlidXRlIGJvb2xlYW4gYXV0b2Nv
cnJlY3Q7CiAKICAgICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRB
TElaRSwgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYXV0b2Nh
cGl0YWxpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmlkbAppbmRleCA0
ZjAyODYxLi44ZDBjMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5p
ZGwKQEAgLTk1LDcgKzk1LDYgQEAKICAgICBbQ29uZGl0aW9uYWw9TUVESUFfU1RBVElTVElDU10g
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgd2Via2l0QXVkaW9EZWNvZGVkQnl0ZUNv
dW50OwogICAgIFtDb25kaXRpb25hbD1NRURJQV9TVEFUSVNUSUNTXSByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyB3ZWJraXRWaWRlb0RlY29kZWRCeXRlQ291bnQ7CiAKLSNpZiAhKGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0
aW9uYWw9RU5DUllQVEVEX01FRElBLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgd2Via2l0R2VuZXJh
dGVLZXlSZXF1ZXN0KERPTVN0cmluZz8ga2V5U3lzdGVtLCBvcHRpb25hbCBVaW50OEFycmF5PyBp
bml0RGF0YSA9IG51bGwpOwogICAgIFtDb25kaXRpb25hbD1FTkNSWVBURURfTUVESUEsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB3ZWJraXRBZGRLZXkoRE9NU3RyaW5nPyBrZXlTeXN0ZW0sIFVpbnQ4
QXJyYXkga2V5LCBvcHRpb25hbCBVaW50OEFycmF5PyBpbml0RGF0YSA9IG51bGwsIG9wdGlvbmFs
IERPTVN0cmluZyBzZXNzaW9uSWQpOwogICAgIFtDb25kaXRpb25hbD1FTkNSWVBURURfTUVESUEs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB3ZWJraXRDYW5jZWxLZXlSZXF1ZXN0KERPTVN0cmluZz8g
a2V5U3lzdGVtLCBvcHRpb25hbCBET01TdHJpbmcgc2Vzc2lvbklkKTsKQEAgLTEwNywxNSArMTA2
LDEyIEBACiAgICAgW0NvbmRpdGlvbmFsPVZJREVPX1RSQUNLXSByZWFkb25seSBhdHRyaWJ1dGUg
QXVkaW9UcmFja0xpc3QgYXVkaW9UcmFja3M7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPX1RSQUNL
XSByZWFkb25seSBhdHRyaWJ1dGUgVGV4dFRyYWNrTGlzdCB0ZXh0VHJhY2tzOwogICAgIFtDb25k
aXRpb25hbD1WSURFT19UUkFDS10gcmVhZG9ubHkgYXR0cmlidXRlIFZpZGVvVHJhY2tMaXN0IHZp
ZGVvVHJhY2tzOwotI2VuZGlmCiAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBt
ZWRpYUdyb3VwOwogCiAgICAgW0N1c3RvbVNldHRlcl0gYXR0cmlidXRlIE1lZGlhQ29udHJvbGxl
ciBjb250cm9sbGVyOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdV
QUdFX0dPQkpFQ1QpCiAgICAgW0NvbmRpdGlvbmFsPU1FRElBX1NPVVJDRV0gVmlkZW9QbGF5YmFj
a1F1YWxpdHkgZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKTsKLSNlbmRpZgogCiAgICAgW0NvbmRp
dGlvbmFsPVdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVF0gdm9pZCB3ZWJraXRTaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoKTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
XSByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJ
c1dpcmVsZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbAppbmRl
eCBhYjNmOGQwLi41YmYwM2U0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T3B0aW9uRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5pZGwKQEAgLTMwLDEwICszMCw2IEBACiAgICAgYXR0cmlidXRlIGJvb2xlYW4gc2VsZWN0
ZWQ7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZyB2YWx1ZTsKIAotI2lmICEoZGVmaW5lZChMQU5H
VUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgdGV4dDsKLSNlbHNlCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0ZXh0Owot
I2VuZGlmCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaW5kZXg7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsCmluZGV4IDQxYTZmMTYuLjgz
ODc1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0
aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5p
ZGwKQEAgLTI3LDI1ICsyNywxNSBAQAogICAgIGF0dHJpYnV0ZSBsb25nIHNlbGVjdGVkSW5kZXg7
CiAgICAgW0N1c3RvbVNldHRlciwgU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsZW5ndGg7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExB
TkdVQUdFX0dPQkpFQ1QKLSAgICBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUp
OwotI2Vsc2UKICAgICBnZXR0ZXIgSFRNTE9wdGlvbkVsZW1lbnQ/IGl0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCk7CiAgICAgZ2V0dGVyIEhUTUxPcHRpb25FbGVtZW50PyBuYW1lZEl0ZW0oRE9NU3Ry
aW5nIG5hbWUpOwotI2VuZGlmCiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYg
TEFOR1VBR0VfR09CSkVDVCkKICAgICAvLyBGSVhNRTogU2hvdWxkIGJlOgogICAgIC8vIHZvaWQg
YWRkKChIVE1MT3B0aW9uRWxlbWVudCBvciBIVE1MT3B0R3JvdXBFbGVtZW50KSBlbGVtZW50LCBv
cHRpb25hbCAoSFRNTEVsZW1lbnQgb3IgbG9uZyk/IGJlZm9yZSA9IG51bGwpOwogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgYWRkKEhUTUxFbGVtZW50IGVsZW1lbnQsIG9wdGlvbmFsIEhUTUxF
bGVtZW50PyBiZWZvcmUgPSBudWxsKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGFkZChI
VE1MRWxlbWVudCBlbGVtZW50LCBsb25nIGluZGV4KTsKLSNlbHNlCi0gICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBhZGQoSFRNTE9wdGlvbkVsZW1lbnQgb3B0aW9uLCB1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKLSNlbmRpZgogCiAgICAgdm9pZCByZW1vdmUobG9uZyBpbmRleCk7Ci0jaWYgIShkZWZp
bmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgLy8gRklYTUU6
IFRoaXMgb3ZlcmxvYWQgaXMgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBoYXMgYmVlbiBk
cm9wcGVkIGluIEJsaW5rLgogICAgIHZvaWQgcmVtb3ZlKEhUTUxPcHRpb25FbGVtZW50IG9wdGlv
bik7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRs
CmluZGV4IDk3Y2Q4MDEuLmUzOWYzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuaWRsCkBAIC0zMCwyNyArMzAsMTcgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRl
IERPTVN0cmluZyBuYW1lOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiByZXF1aXJl
ZDsKIAotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAot
ICAgIGF0dHJpYnV0ZSBsb25nIHNpemU7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIHNpemU7Ci0jZW5kaWYKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlw
ZTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gb3B0aW9u
czsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBs
ZW5ndGg7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QKLSAgICBnZXR0ZXIgTm9kZSBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIE5vZGUg
bmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKLSNlbHNlCiAgICAgZ2V0dGVyIEhUTUxPcHRpb25F
bGVtZW50PyBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIEhUTUxPcHRpb25FbGVtZW50
PyBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotI2VuZGlmCiAKICAgICBbUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIGFkZChIVE1MRWxlbWVudCBlbGVtZW50LCBvcHRpb25hbCBIVE1MRWxlbWVudD8g
YmVmb3JlID0gbnVsbCk7Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdV
QUdFX0dPQkpFQ1QpCiAgICAgLy8gRklYTUU6IFNob3VsZCBiZToKICAgICAvLyB2b2lkIGFkZCgo
SFRNTE9wdGlvbkVsZW1lbnQgb3IgSFRNTE9wdEdyb3VwRWxlbWVudCkgZWxlbWVudCwgb3B0aW9u
YWwgKEhUTUxFbGVtZW50IG9yIGxvbmcpPyBiZWZvcmUgPSBudWxsKTsKICAgICBbUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIGFkZChIVE1MRWxlbWVudCBlbGVtZW50LCBsb25nIGluZGV4KTsKQEAgLTU4
LDcgKzQ4LDYgQEAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHJlbW92ZSgpOyAvLyBDaGls
ZE5vZGUgb3ZlcmxvYWQKICAgICAvLyBGSVhNRTogVGhpcyBvdmVybG9hZCBpcyBub3QgaW4gdGhl
IHNwZWNpZmljYXRpb24gYW5kIHdhcyBkcm9wcGVkIGluIEJsaW5rLgogICAgIHZvaWQgcmVtb3Zl
KEhUTUxPcHRpb25FbGVtZW50IG9wdGlvbik7Ci0jZW5kaWYKICAgICBbSW1wbGVtZW50ZWRBcz1y
ZW1vdmVCeUluZGV4XSB2b2lkIHJlbW92ZShsb25nIGluZGV4KTsKIAogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBIVE1MQ29sbGVjdGlvbiBzZWxlY3RlZE9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCmluZGV4IDRjOTY2OTkuLjZhOTBkZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCkBAIC0yNiwx
MyArMjYsOCBAQCBpbnRlcmZhY2UgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7
CiAgICAgW1JlZmxlY3Q9Y2hhcl0gYXR0cmlidXRlIERPTVN0cmluZyBjaDsKICAgICBbUmVmbGVj
dD1jaGFyb2ZmXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNoT2ZmOwogCi0jaWYgZGVmaW5lZChMQU5H
VUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9Y29s
U3BhbkZvckJpbmRpbmdzXSBhdHRyaWJ1dGUgbG9uZyBjb2xTcGFuOwotICAgIFtJbXBsZW1lbnRl
ZEFzPXJvd1NwYW5Gb3JCaW5kaW5nc10gYXR0cmlidXRlIGxvbmcgcm93U3BhbjsKLSNlbHNlCiAg
ICAgW0ltcGxlbWVudGVkQXM9Y29sU3BhbkZvckJpbmRpbmdzXSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBjb2xTcGFuOwogICAgIFtJbXBsZW1lbnRlZEFzPXJvd1NwYW5Gb3JCaW5kaW5nc10gYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgcm93U3BhbjsKLSNlbmRpZgogCiAgICAgLy8gRklYTUU6IFRo
aXMgaXMgc3VwcG9zZWQgdG8gYmU6CiAgICAgLy8gW1B1dEZvcndhcmRzPXZhbHVlXSByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NVG9rZW5MaXN0IGhlYWRlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGFibGVDb2xFbGVtZW50LmlkbAppbmRleCBmNzlhZmZhLi4wM2MwMGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5pZGwKQEAgLTIyLDExICsyMiw3IEBA
IGludGVyZmFjZSBIVE1MVGFibGVDb2xFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZs
ZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFsaWduOwogICAgIFtSZWZsZWN0PWNoYXJdIGF0dHJp
YnV0ZSBET01TdHJpbmcgY2g7CiAgICAgW1JlZmxlY3Q9Y2hhcm9mZl0gYXR0cmlidXRlIERPTVN0
cmluZyBjaE9mZjsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0Vf
R09CSkVDVCkKICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzcGFuOwotI2Vsc2UKLSAgICBh
dHRyaWJ1dGUgbG9uZyBzcGFuOwotI2VuZGlmCiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01T
dHJpbmcgdkFsaWduOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdpZHRoOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsCmluZGV4IGIw
YzhjYzEuLmE1YTlhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmlkbApAQCAtMjksMTMgKzI5LDggQEAgaW50ZXJmYWNlIEhUTUxUZXh0QXJlYUVsZW1lbnQg
OiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgcGxhY2Vo
b2xkZXI7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIHJlYWRPbmx5OwogICAgIFtS
ZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiByZXF1aXJlZDsKLSNpZiBkZWZpbmVkKExBTkdVQUdF
X0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBhdHRyaWJ1dGUgbG9uZyByb3dzOwot
ICAgIGF0dHJpYnV0ZSBsb25nIGNvbHM7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIHJvd3M7CiAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgY29sczsKLSNlbmRpZgogICAg
IFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdyYXA7CiAKICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50
LmlkbAppbmRleCBmZTFhOTJkLi4yNjFmM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxWaWRlb0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5pZGwKQEAgLTUyLDEyICs1Miw5IEBACiAgICAgLy8gVGhlIG51bWJlciBvZiBk
ZWNvZGVkIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGJ5IHRoZSBwbGF5ZXIgZm9yIHBl
cmZvcm1hbmNlIHJlYXNvbnMgZHVyaW5nIHBsYXliYWNrLgogICAgIFtDb25kaXRpb25hbD1NRURJ
QV9TVEFUSVNUSUNTXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB3ZWJraXREcm9w
cGVkRnJhbWVDb3VudDsKIAotICAgIC8vIFdvcmsgYXJvdW5kIHNob3J0Y29taW5ncyBpbiB0aGUg
Z29iamVjdCBiaW5kaW5nIGdlbmVyYXRvciBoYW5kbGluZyBvZiBjb25kaXRpb25hbCBmZWF0dXJl
cyBieSB0dXJuaW5nIHRoZXNlIG9mZiBmb3IgZ29iamVjdC4KLSNpZiAhKGRlZmluZWQoTEFOR1VB
R0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0aW9uYWw9VklERU9f
UFJFU0VOVEFUSU9OX01PREVdIGJvb2xlYW4gd2Via2l0U3VwcG9ydHNQcmVzZW50YXRpb25Nb2Rl
KFZpZGVvUHJlc2VudGF0aW9uTW9kZSBtb2RlKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJF
U0VOVEFUSU9OX01PREVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBWaWRlb1ByZXNlbnRhdGlvbk1vZGUg
d2Via2l0UHJlc2VudGF0aW9uTW9kZTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJFU0VOVEFU
SU9OX01PREVdIHZvaWQgd2Via2l0U2V0UHJlc2VudGF0aW9uTW9kZShWaWRlb1ByZXNlbnRhdGlv
bk1vZGUgbW9kZSk7Ci0jZW5kaWYKIH07CiAKIFtDb25kaXRpb25hbD1WSURFT19QUkVTRU5UQVRJ
T05fTU9ERV0gZW51bSBWaWRlb1ByZXNlbnRhdGlvbk1vZGUgeyAiZnVsbHNjcmVlbiIsICJwaWN0
dXJlLWluLXBpY3R1cmUiLCAiaW5saW5lIiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9JbWFnZURhdGEuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaWRsCmlu
ZGV4IDIxNTAxMjcuLjlhMGFlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VEYXRhLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5pZGwKQEAgLTM2
LDcgKzM2LDQgQEAKIF0gaW50ZXJmYWNlIEltYWdlRGF0YSB7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIGxvbmcgd2lkdGg7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaGVpZ2h0OwotI2lm
IGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBVaW50OENsYW1wZWRBcnJheSBkYXRhOwotI2VuZGlmCiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxVdGlscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1VSTFV0aWxzLmlkbAppbmRleCAyNzA4YmNkLi5lYzg1ODcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1VSTFV0aWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VS
TFV0aWxzLmlkbApAQCAtMjYsOSArMjYsNyBAQAogW05vSW50ZXJmYWNlT2JqZWN0XSBpbnRlcmZh
Y2UgVVJMVXRpbHMgewogICAgIFtTZXR0ZXJSYWlzZXNFeGNlcHRpb24sIFVSTF0gYXR0cmlidXRl
IFVTVlN0cmluZyBocmVmOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExB
TkdVQUdFX0dPQkpFQ1QpCiAgICAgW05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygp
OwotI2VuZGlmCiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgVVNWU3RyaW5nIG9yaWdpbjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaWRsIGIvU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaWRsCmluZGV4IGI3ODAzNmEuLjAwMDgx
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5pZGwKQEAgLTQ5LDExICs0
OSw4IEBAIGVudW0gVGV4dFRyYWNrS2luZCB7ICJzdWJ0aXRsZXMiLCAiY2FwdGlvbnMiLCAiZGVz
Y3JpcHRpb25zIiwgImNoYXB0ZXJzIiwgIm1ldGFkCiAKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5k
bGVyIG9uY3VlY2hhbmdlOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExB
TkdVQUdFX0dPQkpFQ1QpCi0gICAgLy8gV29yayBhcm91bmQgc2hvcnRjb21pbmdzIGluIHRoZSBn
b2JqZWN0IGJpbmRpbmcgZ2VuZXJhdG9yIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGZlYXR1cmVz
IGJ5IHR1cm5pbmcgdGhlc2Ugb2ZmIGZvciBnb2JqZWN0LgogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBWVFRSZWdpb25MaXN0IHJlZ2lvbnM7CiAgICAgLy8gRklYTUU6IHJlZ2lvbiBwYXJhbWV0ZXIg
c2hvdWxkIG5vdCBiZSBudWxsYWJsZSBpbiBhZGRSZWdpb24gYW5kIHJlbW92ZVJlZ2lvbi4KICAg
ICB2b2lkIGFkZFJlZ2lvbihWVFRSZWdpb24/IHJlZ2lvbik7CiAgICAgW1JhaXNlc0V4Y2VwdGlv
bl0gdm9pZCByZW1vdmVSZWdpb24oVlRUUmVnaW9uPyByZWdpb24pOwotI2VuZGlmCiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsCmluZGV4IDc5OWI3ZDUuLjc2MTkzOWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwKQEAgLTU0LDkgKzU0LDcgQEAKICAgICB2b2lk
IHJlbW92ZUFsbFJhbmdlcygpOwogICAgIHZvaWQgYWRkUmFuZ2UoUmFuZ2UgcmFuZ2UpOwogCi0j
aWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAg
W05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93Lmlk
bAppbmRleCBjY2U3YmQwLi4wMTgyMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBA
IC02OCw5ICs2OCw3IEBACiAKICAgICBbQ3VzdG9tXSBhbnkgc2hvd01vZGFsRGlhbG9nKERPTVN0
cmluZyB1cmwsIG9wdGlvbmFsIGFueSBkaWFsb2dBcmdzLCBvcHRpb25hbCBET01TdHJpbmcgZmVh
dHVyZUFyZ3MpOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdF
X0dPQkpFQ1QpCiAgICAgdm9pZCBhbGVydCgpOwotI2VuZGlmCiAgICAgdm9pZCBhbGVydChET01T
dHJpbmcgbWVzc2FnZSk7CiAgICAgYm9vbGVhbiBjb25maXJtKG9wdGlvbmFsIERPTVN0cmluZyBt
ZXNzYWdlID0gIiIpOwogICAgIERPTVN0cmluZz8gcHJvbXB0KG9wdGlvbmFsIERPTVN0cmluZyBt
ZXNzYWdlID0gIiIsIG9wdGlvbmFsIERPTVN0cmluZyBkZWZhdWx0VmFsdWUgPSAiIik7CkBAIC0x
MDMsMTEgKzEwMSw5IEBACiAgICAgdm9pZCBzY3JvbGxUbyh1bnJlc3RyaWN0ZWQgZG91YmxlIHgs
IHVucmVzdHJpY3RlZCBkb3VibGUgeSk7CiAgICAgW0ltcGxlbWVudGVkQXM9c2Nyb2xsVG9dIHZv
aWQgc2Nyb2xsKHVucmVzdHJpY3RlZCBkb3VibGUgeCwgdW5yZXN0cmljdGVkIGRvdWJsZSB5KTsK
IAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQog
ICAgIHZvaWQgc2Nyb2xsQnkob3B0aW9uYWwgU2Nyb2xsVG9PcHRpb25zIG9wdGlvbik7CiAgICAg
dm9pZCBzY3JvbGxUbyhvcHRpb25hbCBTY3JvbGxUb09wdGlvbnMgb3B0aW9ucyk7CiAgICAgW0lt
cGxlbWVudGVkQXM9c2Nyb2xsVG9dIHZvaWQgc2Nyb2xsKG9wdGlvbmFsIFNjcm9sbFRvT3B0aW9u
cyBvcHRpb25zKTsKLSNlbmRpZgogCiAgICAgdm9pZCBtb3ZlQnkob3B0aW9uYWwgdW5yZXN0cmlj
dGVkIGZsb2F0IHggPSBOYU4sIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCB5ID0gTmFOKTsg
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIHRha2UgbG9uZ3Mgbm90IGZsb2F0cy4KICAgICB2b2lkIG1v
dmVUbyhvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgeCA9IE5hTiwgb3B0aW9uYWwgdW5yZXN0
cmljdGVkIGZsb2F0IHkgPSBOYU4pOyAvLyBGSVhNRTogdGhpcyBzaG91bGQgdGFrZSBsb25ncyBu
b3QgZmxvYXRzLgpAQCAtMTIyLDEwICsxMTgsOCBAQAogCiAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyBzdGF0dXM7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZyBkZWZhdWx0U3RhdHVzOwotI2lmICEo
ZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIC8vIFRo
aXMgYXR0cmlidXRlIGlzIGFuIGFsaWFzIG9mIGRlZmF1bHRTdGF0dXMgYW5kIGlzIG5lY2Vzc2Fy
eSBmb3IgbGVnYWN5IHVzZXMuCiAgICAgW0ltcGxlbWVudGVkQXM9ZGVmYXVsdFN0YXR1c10gYXR0
cmlidXRlIERPTVN0cmluZyBkZWZhdWx0c3RhdHVzOwotI2VuZGlmCiAKICAgICAvLyBTZWxmIHJl
ZmVyZW50aWFsIGF0dHJpYnV0ZXMKICAgICBbUmVwbGFjZWFibGUsIERvTm90Q2hlY2tTZWN1cml0
eU9uR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NV2luZG93IHNlbGY7CkBAIC0xNDcsMTUg
KzE0MSwxMSBAQAogCiAgICAgLy8gRE9NIExldmVsIDIgU3R5bGUgSW50ZXJmYWNlCiAgICAgW05l
d09iamVjdF0gQ1NTU3R5bGVEZWNsYXJhdGlvbiBnZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQgZWxl
bWVudCwgb3B0aW9uYWwgRE9NU3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0gbnVsbCk7Ci0jaWYgIShk
ZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgLy8gRklY
TUU6IERyb3AgdGhpcyBvdmVybG9hZCBvbmNlIDxyZGFyOi8vcHJvYmxlbS8yODAxNjc3OD4gaGFz
IGJlZW4gZml4ZWQuCiAgICAgW05ld09iamVjdCwgUmFpc2VzRXhjZXB0aW9uXSBDU1NTdHlsZURl
Y2xhcmF0aW9uIGdldENvbXB1dGVkU3R5bGUoRG9jdW1lbnQgZG9jdW1lbnQsIG9wdGlvbmFsIERP
TVN0cmluZz8gcHNldWRvRWxlbWVudCA9IG51bGwpOwotI2VuZGlmCiAKICAgICAvLyBXZWJLaXQg
ZXh0ZW5zaW9ucwotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9H
T0JKRUNUKQogICAgIENTU1J1bGVMaXN0IGdldE1hdGNoZWRDU1NSdWxlcyhvcHRpb25hbCBFbGVt
ZW50PyBlbGVtZW50ID0gbnVsbCwgb3B0aW9uYWwgRE9NU3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0g
bnVsbCk7Ci0jZW5kaWYKIAogICAgIFtSZXBsYWNlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIHVu
cmVzdHJpY3RlZCBkb3VibGUgZGV2aWNlUGl4ZWxSYXRpbzsKICAgICAKQEAgLTE3NSwxMSArMTY1
LDcgQEAKICAgICBbQ29uZGl0aW9uYWw9T1JJRU5UQVRJT05fRVZFTlRTXSByZWFkb25seSBhdHRy
aWJ1dGUgbG9uZyBvcmllbnRhdGlvbjsKIAogICAgIC8vIGNyb3NzLWRvY3VtZW50IG1lc3NhZ2lu
ZwotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQog
ICAgIFtEb05vdENoZWNrU2VjdXJpdHksIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uLCBGb3J3YXJk
RGVjbGFyZUluSGVhZGVyXSB2b2lkIHBvc3RNZXNzYWdlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBt
ZXNzYWdlLCBVU1ZTdHJpbmcgdGFyZ2V0T3JpZ2luLCBvcHRpb25hbCBBcnJheSBtZXNzYWdlUG9y
dHMpOwotI2Vsc2UKLSAgICBbRG9Ob3RDaGVja1NlY3VyaXR5LCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbiwgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBwb3N0TWVzc2FnZShTZXJpYWxpemVk
U2NyaXB0VmFsdWUgbWVzc2FnZSwgb3B0aW9uYWwgTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQsIERP
TVN0cmluZyB0YXJnZXRPcmlnaW4pOwotI2VuZGlmCiAKICAgICBbQ29uZGl0aW9uYWw9V0VCX1RJ
TUlORywgUmVwbGFjZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBQZXJmb3JtYW5jZSBwZXJmb3Jt
YW5jZTsKIApAQCAtMTkyLDcgKzE3OCw2IEBACiAgICAgdm9pZCBjYXB0dXJlRXZlbnRzKC8qaW4g
bG9uZyBldmVudEZsYWdzKi8pOwogICAgIHZvaWQgcmVsZWFzZUV2ZW50cygvKmluIGxvbmcgZXZl
bnRGbGFncyovKTsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFH
RV9HT0JKRUNUKQogICAgIFtDdXN0b21HZXR0ZXIsIEN1c3RvbUNvbnN0cnVjdG9yXSBhdHRyaWJ1
dGUgSFRNTEltYWdlRWxlbWVudE5hbWVkQ29uc3RydWN0b3IgSW1hZ2U7IC8vIFVzYWJsZSB3aXRo
IG5ldyBvcGVyYXRvcgogICAgIGF0dHJpYnV0ZSBYTUxEb2N1bWVudENvbnN0cnVjdG9yIFNWR0Rv
Y3VtZW50OwogCkBAIC0yMDAsNyArMTg1LDYgQEAKICAgICBhdHRyaWJ1dGUgTXV0YXRpb25PYnNl
cnZlckNvbnN0cnVjdG9yIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI7IC8vIEZJWE1FOiBBZGQgbWV0
cmljcyB0byBkZXRlcm1pbmUgd2hlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMuCiAKICAgICBbQ29uZGl0
aW9uYWw9Q1VTVE9NX0VMRU1FTlRTLCBFbmFibGVkQXRSdW50aW1lPUN1c3RvbUVsZW1lbnRzLCBJ
bXBsZW1lbnRlZEFzPWVuc3VyZUN1c3RvbUVsZW1lbnRSZWdpc3RyeV0gcmVhZG9ubHkgYXR0cmli
dXRlIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSBjdXN0b21FbGVtZW50czsKLSNlbmRpZgogCiAgICAg
Ly8gRXZlbnQgSGFuZGxlcnMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Rv
Y3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5pZGwKaW5kZXggNzg3
ZTI0Yy4uY2RlZTNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaWRsCkBAIC0yMCw3ICsy
MCw1IEBACiAgKi8KIAogcGFydGlhbCBpbnRlcmZhY2UgRG9jdW1lbnQgewotI2lmICEoZGVmaW5l
ZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBTVkdTVkdFbGVtZW50PyByb290RWxlbWVudDsKLSNlbmRpZgogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmlkbAppbmRleCAzOTgzNmI4Li4xMmQ3ZWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaWRsCkBAIC0zNywxMiArMzcsMTAgQEAKICAgICAvLyBGSVhNRTogVXNpbmcgInVu
ZGVmaW5lZCIgYXMgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUgaXMgd3JvbmcuCiAgICAgQ1NTVmFs
dWUgZ2V0UHJlc2VudGF0aW9uQXR0cmlidXRlKG9wdGlvbmFsIERPTVN0cmluZyBuYW1lID0gInVu
ZGVmaW5lZCIpOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdF
X0dPQkpFQ1QpCiAgICAgdm9pZCBmb2N1cygpOwogICAgIHZvaWQgYmx1cigpOwogCiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ01hcCBkYXRhc2V0OwotI2VuZGlmCiB9OwogCiBTVkdF
bGVtZW50IGltcGxlbWVudHMgR2xvYmFsRXZlbnRIYW5kbGVyczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFeGNlcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4
Y2VwdGlvbi5pZGwKaW5kZXggNDhlNzhiMS4uZmEwYzExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0V4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4
Y2VwdGlvbi5pZGwKQEAgLTI2LDkgKzI2LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICBuYW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAg
ICAgIG1lc3NhZ2U7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VB
R0VfR09CSkVDVCkKICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7Ci0j
ZW5kaWYKIAogICAgIC8vIFNWR0V4Y2VwdGlvbkNvZGUKICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBTVkdfV1JPTkdfVFlQRV9FUlIgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlkbAppbmRleCAxOWIzNzc1Li5mZGZjYTcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlLmlkbApAQCAtMzMsMTEgKzMzLDcgQEAKICAgICBFeHBvc2VkPURlZGljYXRlZFdv
cmtlciwKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBdIGludGVyZmFjZSBEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZSA6IFdvcmtlckdsb2JhbFNjb3BlIHsKLSNpZiAhKGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9tLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoYW55IG1lc3NhZ2UsIG9wdGlvbmFsIEFycmF5
IG1lc3NhZ2VQb3J0cyk7Ci0jZWxzZQotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1l
c3NhZ2UoRE9NU3RyaW5nIG1lc3NhZ2UsIG9wdGlvbmFsIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0
KTsKLSNlbmRpZgogCiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2U7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsCmluZGV4IDYxNjg1OTguLjIwNDdhODQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5pZGwKQEAgLTMxLDExICszMSw3IEBACiBdIGludGVyZmFjZSBXb3Jr
ZXIgOiBFdmVudFRhcmdldCB7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2U7
CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkK
ICAgICBbQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIG1lc3NhZ2UsIG9wdGlvbmFsIEFycmF5IG1lc3NhZ2VQb3J0cyk7Ci0jZWxz
ZQotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXplZFNjcmlw
dFZhbHVlIG1lc3NhZ2UsIG9wdGlvbmFsIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KTsKLSNlbmRp
ZgogCiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyR2xvYmFsU2NvcGUuaWRsCmluZGV4IGQ5OTM4ZWEuLjk4NmEzNDBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmlkbApAQCAtMzEsOSArMzEsNyBA
QAogICAgIEpTTGVnYWN5UGFyZW50PUpTV29ya2VyR2xvYmFsU2NvcGVCYXNlLAogXSBpbnRlcmZh
Y2UgV29ya2VyR2xvYmFsU2NvcGUgOiBFdmVudFRhcmdldCB7CiAKLSNpZiAhKGRlZmluZWQoTEFO
R1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgV29ya2VyR2xvYmFsU2NvcGUgc2VsZjsKLSNlbmRpZgogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBXb3JrZXJMb2NhdGlvbiBsb2NhdGlvbjsKICAgICB2b2lkIGNsb3NlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEV4Y2VwdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhFeGNlcHRpb24uaWRsCmluZGV4IDdhODhhNWYuLjRlMDhmZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEV4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hQYXRoRXhjZXB0aW9uLmlkbApAQCAtMzQsOSArMzQsNyBAQAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIG1lc3NhZ2U7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFO
R1VBR0VfR09CSkVDVCkKICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7
Ci0jZW5kaWYKIAogICAgIC8vIFhQYXRoRXhjZXB0aW9uQ29kZQogICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IElOVkFMSURfRVhQUkVTU0lPTl9FUlIgPSA1MTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBmMGM1Nzky
Li43YTc3NjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDgtMzEgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1v
dmUgR09iamVjdCBET00gYmluZGluZ3MgdG8gV2ViS2l0MiBsYXllciBhbmQgc3RvcCBhdXRvIGdl
bmVyYXRpbmcgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYxNDM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSBhbGwgR09iamVjdCBiaW5kaW5ncyBjb2RlIHRvIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00uCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NOgorCiAyMDE2LTA4
LTMxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBET00gZXZl
bnQgaGFuZGxpbmcgc2hvdWxkIHBhc3MgRXZlbnQgYXJvdW5kIGJ5IHJlZmVyZW5jZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMDk4MGY1NS4uOWY2ZmUyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTE1LDYgKzE1LDcgQEAgY29uZmlndXJlX2ZpbGUod2Via2l0Mmd0ay13
ZWItZXh0ZW5zaW9uLnBjLmluICR7V2ViS2l0MldlYkV4dGVuc2lvbl9QS0dDT05GSUdfRkkKIAog
YWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQogYWRkX2RlZmluaXRpb25zKC1EV0VC
S0lUMl9DT01QSUxBVElPTikKK2FkZF9kZWZpbml0aW9ucygtRFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSSkKIAogYWRkX2RlZmluaXRpb25zKC1ETElCRVhFQ0RJUj0iJHtDTUFLRV9JTlNUQUxM
X0ZVTExfTElCRVhFQ0RJUn0iKQogYWRkX2RlZmluaXRpb25zKC1EUEtHTElCRVhFQ0RJUj0iJHtM
SUJFWEVDX0lOU1RBTExfRElSfSIpCkBAIC0zMjEsNiArMzIyLDE4NiBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJDb29raWVNYW5h
Z2VyU291cC5jcHAKICAgICBXZWJQcm9jZXNzL0Nvb2tpZXMvc291cC9XZWJLaXRTb3VwQ29va2ll
SmFyU3FsaXRlLmNwcAogCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vRE9NT2JqZWN0Q2FjaGUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdFhQYXRo
TlNSZXNvbHZlci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUFuaW1hdGFibGUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25FZmZlY3QuY3BwCisgICAgV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZS5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHIu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01B
dWRpb1RyYWNrLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQXVkaW9UcmFja0xpc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXJQcm9wLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0
aW9uLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQ1NTUnVsZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUNTU1J1bGVMaXN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlU2hlZXQuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NW
YWx1ZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNoYXJhY3RlckRhdGEuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Db21tZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3VzdG9tLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKKyAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNTU05h
bWVzcGFjZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTUltcGxlbWVudGF0aW9uLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGUuY3BwCisgICAgV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5LmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVBsdWdpbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5LmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU2VsZWN0aW9uLmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3Ry
aW5nTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTVN0cmluZ01hcC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURPTVRva2VuTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvdy5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5
bnRoZXNpcy5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURhdGFDdWUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01EYXRhYmFzZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURlcHJlY2F0ZWQuY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudC5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9u
LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGUuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50LmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnQu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01F
dmVudFRhcmdldC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUZpbGUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01GaWxlTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkTGlzdC5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xvY2F0aW9uLmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1l
bnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQlJFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MQ2FudmFzRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uLmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudC5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxE
ZXRhaWxzRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1l
bnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50LmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvbnRF
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MSFJFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVt
ZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVu
dC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxMaW5rRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxNYXBFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxNZW51RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9M
aXN0RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYW1F
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFByZUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJpdmF0ZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0
RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudC5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25F
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGl0bGVFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudC5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
aXN0b3J5LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NS2V5Ym9hcmRFdmVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9jYXRpb24uY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRyb2xsZXIu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01N
ZWRpYURldmljZXMuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01NZWRpYUVycm9yLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFMaXN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3Vw
cG9ydGVkQ29uc3RyYWludHMuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01NZXNzYWdlUG9ydC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnQuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwCisg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0
b3IuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01OYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUZpbHRlci5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRvci5jcHAKKyAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVMaXN0
LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
T2JqZWN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NUGVyZm9ybWFuY2UuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5LmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVy
Zm9ybWFuY2VUaW1pbmcuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Qcml2YXRlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAorICAgIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TY3JlZW4uY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVl
Y2hTeW50aGVzaXMuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5j
cHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VJbmZvLmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVNZWRp
YS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVN0eWxlU2hlZXQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2suY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWUuY3BwCisg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJh
Y2tDdWVMaXN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NVGV4dFRyYWNrTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVRpbWVSYW5nZXMuY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaC5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fsa2Vy
LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VUlFdmVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVVzZXJNZXNzYWdlSGFuZGxlci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WVFRD
dWUuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01WYWxpZGl0eVN0YXRlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkuY3BwCisgICAgV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrLmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja0xp
c3QuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01XZWJBbmltYXRpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2UuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXRQb2ludC5j
cHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdo
ZWVsRXZlbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01YUGF0aEV4cHJlc3Npb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5jcHAKKwog
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRDb25zb2xlTWVzc2Fn
ZS5jcHAKICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0RnJhbWUu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFNjcmlwdFdv
cmxkLmNwcApAQCAtNDQ4LDYgKzYyOSwzMzQgQEAgc2V0KFdlYktpdDJXZWJFeHRlbnNpb25fSU5T
VEFMTEVEX0hFQURFUlMKICAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvd2Via2l0LXdlYi1leHRlbnNpb24uaAogKQogCitzZXQoV2ViS2l0RE9NX0lO
U1RBTExFRF9IRUFERVJTCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21hdXRvY2xlYW51cHMuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tYXV0b2Ns
ZWFudXBzLXVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWRlZmluZXMuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tZGVmaW5lcy11
bnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS93ZWJraXRkb20uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0YWJsZS5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01B
bmltYXRpb25FZmZlY3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
QXR0ci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01BdHRyVW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFjay5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01BdWRpb1RyYWNrTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXJQcm9wLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJh
dHRlcnlNYW5hZ2VyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2IuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxvYlVuc3RhYmxlLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUNEQVRBU2VjdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNoYXJhY3RlckRhdGFVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Db21tZW50LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUNTU1J1bGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZVVuc3Rh
YmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVT
aGVldC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01DU1NWYWx1ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b20uaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Q3VzdG9tVW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2UuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01EZXByZWNhdGVkLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9uLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURvY3VtZW50RnJhZ21lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFVuc3Rh
YmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRG9jdW1lbnRUeXBlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VHlwZVVuc3RhYmxlLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURvY3VtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNo
ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01ET01DU1NOYW1lc3BhY2UuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRp
b24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZS5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFy
cmF5LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVBsdWdpbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TZWxlY3Rpb24uaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NU3RyaW5nTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdNYXAuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NVG9rZW5MaXN0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvdy5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93VW5zdGFibGUuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnQuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRVbnN0YWJsZS5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01GaWxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVVbnN0YWJsZS5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01HYW1lcGFkLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWRMaXN0LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xv
Y2F0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnkuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQmFzZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxCUkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnRVbnN0YWJsZS5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxGb250RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRnJhbWVTZXRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MSHRtbEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50VW5zdGFi
bGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50LmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVs
ZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MTElFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudC5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TGlua0VsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50VW5zdGFi
bGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
T0xpc3RFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uVW5zdGFibGUuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFBhcmFncmFwaEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MUHJlRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxTY3JpcHRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50VW5zdGFi
bGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxTdHlsZUVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVD
b2xFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFRpdGxlRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxWaWRlb0VsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5Ym9hcmRFdmVudC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01L
ZXlmcmFtZUVmZmVjdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Mb2NhdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRy
b2xsZXIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3IuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTWVkaWFMaXN0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZXNzYWdlUG9ydC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01Nb3VzZUV2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnRVbnN0YWJsZS5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01OYW1lZE5vZGVNYXAuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5h
dmlnYXRvck1lZGlhRGV2aWNlcy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmlsdGVyLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5v
ZGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVMaXN0LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU5vZGVVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3QuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFu
Y2VFbnRyeS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZU5h
dmlnYXRpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlVW5zdGFi
bGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NU2NyZWVuLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFn
ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01TdG9yYWdlSW5mby5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUXVvdGEuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3R5bGVNZWRpYS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxl
U2hlZXRMaXN0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVRleHRUcmFja0N1ZUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFja0xpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJhbmdlcy5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01UcmFja0V2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyZWVXYWxrZXIuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VUlFdmVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3Nh
Z2VIYW5kbGVyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eS5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01WaWRlb1RyYWNrLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tMaXN0LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVZUVEN1ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01XZWJBbmltYXRpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRG
bG93LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVzcGFjZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXRQb2ludC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01XaGVlbEV2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZlbnRVbnN0YWJsZS5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01YUGF0aEV4cHJlc3Npb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVhQYXRoUmVzdWx0LmgKKykKKworc2V0KFdlYktpdERPTV9HVEtET0NfSEVBREVSUwor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQW5pbWF0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2IuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ0RBVEFTZWN0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGEuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQ29tbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVTaGVldC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DU1NWYWx1ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b20uaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGVwcmVj
YXRlZC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VHlwZS5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRXZlbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZS5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01GaWxlTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkLmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWRMaXN0
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVs
ZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERMaXN0RWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVt
ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZGluZ0Vs
ZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVs
ZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExJRWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcEVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZW51RWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1vZEVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MUGFyYWdyYXBoRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxQcmVFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFNjcmlwdEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFN0eWxlRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVD
b2xFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50LmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU1lZGlhTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVk
Tm9kZU1hcC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9k
ZUZpbHRlci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRvci5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Ob2RlTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VJbmZvLmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVN0b3JhZ2VRdW90YS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0
eWxlU2hlZXRMaXN0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtlci5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01VSUV2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZlbnQuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhF
eHByZXNzaW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJl
c3VsdC5oCispCisKIHNldChJbnNwZWN0b3JGaWxlcwogICAgICR7Q01BS0VfU09VUkNFX0RJUn0v
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvKi5odG1sCiAgICAgJHtDTUFLRV9T
T1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlLyouanMK
QEAgLTUyNyw2ICsxMDM2LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9S
SUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9saW51eCIKICAgICAiJHtXRUJLSVQy
X0RJUn0vVUlQcm9jZXNzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ayIKKyAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTSIKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS94MTEiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvZ3RrIgpA
QCAtNTkxLDcgKzExMDEsNiBAQCBzZXQoU2hhcmVkV2ViS2l0MkxpYnJhcmllcwogKQogCiBsaXN0
KEFQUEVORCBXZWJLaXQyX0xJQlJBUklFUwotICAgIEdPYmplY3RET01CaW5kaW5ncwogICAgIFdl
YkNvcmVQbGF0Zm9ybUdUSwogICAgICR7R1RLX1VOSVhfUFJJTlRfTElCUkFSSUVTfQogKQpAQCAt
ODc2LDEzICsxMzg1LDExIEBAIGluY2x1ZGVfZGlyZWN0b3JpZXMoCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MiCiAgICAgIiR7REVSSVZFRF9TT1VS
Q0VTX0RJUn0iCiAgICAgIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vSW5qZWN0ZWRCdW5kbGUiCi0g
ICAgIiR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0iCiAgICAgIiR7
Rk9SV0FSRElOR19IRUFERVJTX0RJUn0iCiAgICAgIiR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJ
VDJHVEtfRElSfSIKICkKIAogYWRkX2xpYnJhcnkod2Via2l0Mmd0a2luamVjdGVkYnVuZGxlIE1P
RFVMRSAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9ndGsvV2ViR3RrSW5qZWN0ZWRCdW5kbGVN
YWluLmNwcCIpCi1hZGRfZGVwZW5kZW5jaWVzKHdlYmtpdDJndGtpbmplY3RlZGJ1bmRsZSBHT2Jq
ZWN0RE9NQmluZGluZ3MpCiBhZGRfd2Via2l0Ml9wcmVmaXhfaGVhZGVyKHdlYmtpdDJndGtpbmpl
Y3RlZGJ1bmRsZSkKIHRhcmdldF9saW5rX2xpYnJhcmllcyh3ZWJraXQyZ3RraW5qZWN0ZWRidW5k
bGUgV2ViS2l0MikKIApAQCAtOTkzLDcgKzE1MDAsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgICAgIC1JJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVJ9CiAgICAgICAgIC1J
JHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19FWFRFTlNJT05fRElSfQogICAgICAgICAt
SSR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0awotICAgICAg
ICAke0dPYmplY3RET01CaW5kaW5nc19HSVJfSEVBREVSU30KKyAgICAgICAgJHtXZWJLaXRET01f
SU5TVEFMTEVEX0hFQURFUlN9CiAgICAgICAgICR7V2ViS2l0MldlYkV4dGVuc2lvbl9JTlNUQUxM
RURfSEVBREVSU30KICAgICAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q29udGV4dE1lbnUuaAogICAgICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDb250ZXh0TWVudS5jcHAKQEAgLTEwMzIsNiArMTUzOSw5IEBAIGluc3RhbGwoRklM
RVMgJHtXZWJLaXQyR1RLX0lOU1RBTExFRF9IRUFERVJTfQogICAgICAgICAgICAgICAke1dlYktp
dDJXZWJFeHRlbnNpb25fSU5TVEFMTEVEX0hFQURFUlN9CiAgICAgICAgIERFU1RJTkFUSU9OICIk
e1dFQktJVEdUS19IRUFERVJfSU5TVEFMTF9ESVJ9L3dlYmtpdDIiCiApCitpbnN0YWxsKEZJTEVT
ICR7V2ViS2l0RE9NX0lOU1RBTExFRF9IRUFERVJTfQorICAgICAgICBERVNUSU5BVElPTiAiJHtX
RUJLSVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJraXRkb20iCispCiAKIGlmIChFTkFCTEVf
SU5UUk9TUEVDVElPTikKICAgICBpbnN0YWxsKEZJTEVTICR7Q01BS0VfQklOQVJZX0RJUn0vV2Vi
S2l0Mi0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0uZ2lyCkBAIC0xMDYwLDYgKzE1NzAsMjAgQEAg
ZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9ESVJ9L2d0a2RvYy13ZWJraXQyZ3RrLmNmZwogICAg
ICJtYWluX3NnbWxfZmlsZT13ZWJraXQyZ3RrLWRvY3Muc2dtbFxuIgogKQogCitmaWxlKFdSSVRF
ICR7Q01BS0VfQklOQVJZX0RJUn0vZ3RrZG9jLXdlYmtpdGRvbS5jZmcKKyAgICAiW3dlYmtpdGRv
bWd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn1dXG4iCisgICAgInBrZ2NvbmZpZ19maWxlPSR7
V2ViS2l0Ml9QS0dDT05GSUdfRklMRX1cbiIKKyAgICAibmFtZXNwYWNlPXdlYmtpdF9kb21cbiIK
KyAgICAiY2ZsYWdzPS1JJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2VcbiIKKyAgICAiICAgICAg
IC1JJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTVxu
IgorICAgICIgICAgICAgLUkke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn1cbiIKKyAg
ICAiICAgICAgIC1JJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVJ9XG4iCisgICAg
ImRvY19kaXI9JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9kb2NzXG4iCisgICAgInNvdXJjZV9kaXJzPSR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET01cbiIKKyAgICAiaGVhZGVycz0ke1dlYktpdERPTV9H
VEtET0NfSEVBREVSU31cbiIKKyAgICAibWFpbl9zZ21sX2ZpbGU9d2Via2l0ZG9tZ3RrLWRvY3Mu
c2dtbFxuIgorKQorCiBhZGRfY3VzdG9tX3RhcmdldChXZWJLaXQyLWZvcndhcmRpbmctaGVhZGVy
cwogICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9ICR7V0VCS0lUMl9ESVJ9L1NjcmlwdHMv
Z2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsIC0taW5jbHVkZS1wYXRoICR7V0VCS0lUMl9E
SVJ9IC0tb3V0cHV0ICR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0gLS1wbGF0Zm9ybSBndGsgLS1w
bGF0Zm9ybSBzb3VwCiApCkBAIC0xMDc1LDkgKzE1OTksMTUgQEAgYWRkX2N1c3RvbV9jb21tYW5k
KAogICAgIERFUEVORFMgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrCiAgICAgQ09NTUFORCBsbiAtbiAtcyAtZiAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsgJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19F
WFRFTlNJT05fRElSfS93ZWJraXQyCiApCithZGRfY3VzdG9tX2NvbW1hbmQoCisgICAgT1VUUFVU
ICR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtfRVhURU5TSU9OX0RJUn0vd2Via2l0ZG9t
CisgICAgREVQRU5EUyAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NCisgICAgQ09NTUFORCBsbiAtbiAtcyAtZiAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NICR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJ
VDJHVEtfRVhURU5TSU9OX0RJUn0vd2Via2l0ZG9tCispCiBhZGRfY3VzdG9tX3RhcmdldChXZWJL
aXQyLWZha2UtYXBpLWhlYWRlcnMKICAgICBERVBFTkRTICR7Rk9SV0FSRElOR19IRUFERVJTX1dF
QktJVDJHVEtfRElSfS93ZWJraXQyCiAgICAgICAgICAgICAke0ZPUldBUkRJTkdfSEVBREVSU19X
RUJLSVQyR1RLX0VYVEVOU0lPTl9ESVJ9L3dlYmtpdDIKKyAgICAgICAgICAgICR7Rk9SV0FSRElO
R19IRUFERVJTX1dFQktJVDJHVEtfRVhURU5TSU9OX0RJUn0vd2Via2l0ZG9tCiApCiAKIHNldChX
RUJLSVQyX0VYVFJBX0RFUEVOREVOQ0lFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vQ29udmVydFRvVVRGOFN0cmluZy5j
cHAKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9Db252ZXJ0VG9VVEY4U3Ry
aW5nLmNwcAppbmRleCAxYWFmMjg3Li5iNWUxNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vQ29udmVydFRvVVRG
OFN0cmluZy5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCiAKLSNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0NvbnZlcnRUb1VURjhTdHJpbmcuaApz
aW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vQ29udmVydFRvVVRGOFN0cmluZy5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vRE9NT2JqZWN0Q2FjaGUuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCnJlbmFt
ZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L0RPTU9iamVjdENhY2hlLmNwcAppbmRleCAzNTU0ZjYzLi4wZTc5MGY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0RPTU9i
amVjdENhY2hlLmNwcApAQCAtMTksMTEgKzE5LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKIAotI2luY2x1ZGUgIkRPTVdpbmRvd1Byb3BlcnR5
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oIgotI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0RPTVdpbmRvd1Byb3BlcnR5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
RGVzdHJ1Y3Rpb25PYnNlcnZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm9kZS5oPgogI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vRE9NT2JqZWN0Q2FjaGUuaApzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmpl
Y3RDYWNoZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL0RPTU9iamVjdENhY2hlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0RXZlbnRM
aXN0ZW5lci5jcHAKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKcmVuYW1lIHRvIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVj
dEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGYyZWQ5MzIuLjg4MTRhNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
R09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC0xOSwxMyArMTksMTUgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgogCi0jaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXRET01FdmVudC5oIgogI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9FdmVudC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKIAogR09iamVjdEV2ZW50TGlzdGVuZXI6OkdPYmplY3RFdmVudExpc3RlbmVyKEdPYmpl
Y3QqIHRhcmdldCwgRXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGJvb2wgY2FwdHVyZSkKICAgICA6IEV2ZW50TGlzdGVu
ZXIoR09iamVjdEV2ZW50TGlzdGVuZXJUeXBlKQpAQCAtODYsNCArODgsNCBAQCBib29sIEdPYmpl
Y3RFdmVudExpc3RlbmVyOjpvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVy
KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVu
dExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL0dPYmplY3RFdmVudExpc3RlbmVyLmgKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVu
YW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRMaXN0
ZW5lci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL0dPYmplY3RFdmVudExpc3RlbmVyLmgKaW5kZXggMjA2YmJkNy4uMzhhZDcy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZl
bnRMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vR09iamVjdEV2ZW50TGlzdGVuZXIuaApAQCAtMTYsMTEgKzE2LDEwIEBA
CiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAotI2lmbmRlZiBHT2JqZWN0RXZlbnRM
aXN0ZW5lcl9oCi0jZGVmaW5lIEdPYmplY3RFdmVudExpc3RlbmVyX2gKKyNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FdmVu
dFRhcmdldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9H
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMjgsMTggKzI3LDE4
IEBACiB0eXBlZGVmIHN0cnVjdCBfR09iamVjdCBHT2JqZWN0OwogdHlwZWRlZiBzdHJ1Y3QgX0dD
bG9zdXJlIEdDbG9zdXJlOwogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgR09iamVjdEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CitjbGFzcyBHT2JqZWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBXZWJDb3JlOjpFdmVudExpc3Rl
bmVyIHsKIHB1YmxpYzoKIAotICAgIHN0YXRpYyBib29sIGFkZEV2ZW50TGlzdGVuZXIoR09iamVj
dCogdGFyZ2V0LCBFdmVudFRhcmdldCogY29yZVRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlKQorICAgIHN0YXRpYyBib29s
IGFkZEV2ZW50TGlzdGVuZXIoR09iamVjdCogdGFyZ2V0LCBXZWJDb3JlOjpFdmVudFRhcmdldCog
Y29yZVRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwg
Ym9vbCB1c2VDYXB0dXJlKQogICAgIHsKICAgICAgICAgUmVmPEdPYmplY3RFdmVudExpc3RlbmVy
PiBsaXN0ZW5lcihhZG9wdFJlZigqbmV3IEdPYmplY3RFdmVudExpc3RlbmVyKHRhcmdldCwgY29y
ZVRhcmdldCwgZG9tRXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKSkpOwogICAgICAgICBy
ZXR1cm4gY29yZVRhcmdldC0+YWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIFdURk1vdmUo
bGlzdGVuZXIpLCB1c2VDYXB0dXJlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCByZW1vdmVF
dmVudExpc3RlbmVyKEdPYmplY3QqIHRhcmdldCwgRXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQsIGNv
bnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVFdmVudExpc3RlbmVyKEdPYmplY3QqIHRhcmdldCwg
V2ViQ29yZTo6RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQsIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGJvb2wgdXNlQ2FwdHVyZSkKICAgICB7CiAgICAgICAgIEdP
YmplY3RFdmVudExpc3RlbmVyIGtleSh0YXJnZXQsIGNvcmVUYXJnZXQsIGRvbUV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7CiAgICAgICAgIHJldHVybiBjb3JlVGFyZ2V0LT5yZW1vdmVF
dmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwga2V5LCB1c2VDYXB0dXJlKTsKQEAgLTUwLDMwICs0
OSwzMCBAQCBwdWJsaWM6CiAgICAgICAgIGxpc3RlbmVyLT5nb2JqZWN0RGVzdHJveWVkKCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIGNvbnN0IEdPYmplY3RFdmVudExpc3RlbmVyKiBjYXN0KGNvbnN0
IEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgIHN0YXRpYyBjb25zdCBHT2JqZWN0RXZlbnRM
aXN0ZW5lciogY2FzdChjb25zdCBXZWJDb3JlOjpFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKICAg
ICB7CiAgICAgICAgIHJldHVybiBsaXN0ZW5lci0+dHlwZSgpID09IEdPYmplY3RFdmVudExpc3Rl
bmVyVHlwZQogICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxjb25zdCBHT2JqZWN0RXZlbnRMaXN0
ZW5lcio+KGxpc3RlbmVyKQotICAgICAgICAgICAgOiAwOworICAgICAgICAgICAgOiBudWxscHRy
OwogICAgIH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkNvcmU6OkV2
ZW50TGlzdGVuZXImIG90aGVyKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcihHT2JqZWN0KiwgRXZlbnRUYXJnZXQqLCBjb25zdCBjaGFyKiBkb21F
dmVudE5hbWUsIEdDbG9zdXJlKiwgYm9vbCBjYXB0dXJlKTsKKyAgICBHT2JqZWN0RXZlbnRMaXN0
ZW5lcihHT2JqZWN0KiwgV2ViQ29yZTo6RXZlbnRUYXJnZXQqLCBjb25zdCBjaGFyKiBkb21FdmVu
dE5hbWUsIEdDbG9zdXJlKiwgYm9vbCBjYXB0dXJlKTsKICAgICB+R09iamVjdEV2ZW50TGlzdGVu
ZXIoKTsKICAgICB2b2lkIGdvYmplY3REZXN0cm95ZWQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRXZlbnQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNv
cmU6OkV2ZW50Kik7CiAKICAgICBHT2JqZWN0KiBtX3RhcmdldDsKICAgICAvLyBXZSBkbyBub3Qg
bmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBtX2NvcmVUYXJnZXQsIGJlY2F1c2UKICAg
ICAvLyB3ZSBvbmx5IHVzZSBpdCB3aGVuIHRoZSBHT2JqZWN0IGFuZCB0aHVzIHRoZSBtX2NvcmVU
YXJnZXQgb2JqZWN0IGlzIGFsaXZlLgotICAgIEV2ZW50VGFyZ2V0KiBtX2NvcmVUYXJnZXQ7Cisg
ICAgV2ViQ29yZTo6RXZlbnRUYXJnZXQqIG1fY29yZVRhcmdldDsKICAgICBDU3RyaW5nIG1fZG9t
RXZlbnROYW1lOwogICAgIEdSZWZQdHI8R0Nsb3N1cmU+IG1faGFuZGxlcjsKICAgICBib29sIG1f
Y2FwdHVyZTsKIH07Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlv
bi5jcHAKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKcmVuYW1lIHRvIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVj
dE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCmluZGV4IGUwYWJiN2MuLjQzZWExYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25k
aXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCkBAIC0xOSwxMCArMTks
MTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHT2JqZWN0Tm9kZUZpbHRlckNv
bmRpdGlvbi5oIgogCi0jaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIldlYktpdERP
TU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlRmlsdGVyLmg+CiAKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKIAogR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb246On5HT2JqZWN0Tm9kZUZpbHRlckNv
bmRpdGlvbigpCiB7CkBAIC0zNiw0ICszOCw0IEBAIHNob3J0IEdPYmplY3ROb2RlRmlsdGVyQ29u
ZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgcmV0dXJuIHdlYmtpdF9k
b21fbm9kZV9maWx0ZXJfYWNjZXB0X25vZGUobV9maWx0ZXIuZ2V0KCksIFdlYktpdDo6a2l0KG5v
ZGUpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2Rl
RmlsdGVyQ29uZGl0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmgKc2ltaWxhcml0eSBp
bmRleCA4MSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2Jq
ZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9u
LmgKaW5kZXggOGJlMmM3OC4uMWVkMWM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdE5vZGVG
aWx0ZXJDb25kaXRpb24uaApAQCAtMTYsMTggKzE2LDE5IEBACiAgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCiAgKi8KIAotI2lmbmRlZiBHT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbl9oCi0jZGVm
aW5lIEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uX2gKLQotI2luY2x1ZGUgIk5vZGVGaWx0ZXJD
b25kaXRpb24uaCIKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUZpbHRl
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm9kZUZpbHRlckNvbmRpdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9nbGliL0dSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTm9kZTsK
K30KKworbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0
aW9uIDogcHVibGljIE5vZGVGaWx0ZXJDb25kaXRpb24geworY2xhc3MgR09iamVjdE5vZGVGaWx0
ZXJDb25kaXRpb24gOiBwdWJsaWMgV2ViQ29yZTo6Tm9kZUZpbHRlckNvbmRpdGlvbiB7CiBwdWJs
aWM6CiAKICAgICBzdGF0aWMgUmVmPEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uPiBjcmVhdGUo
V2ViS2l0RE9NTm9kZUZpbHRlciogZmlsdGVyKQpAQCAtMzUsNyArMzYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uKGZp
bHRlcikpOwogICAgIH0KIAotICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSopIGNvbnN0IG92ZXJy
aWRlOworICAgIHNob3J0IGFjY2VwdE5vZGUoV2ViQ29yZTo6Tm9kZSopIGNvbnN0IG92ZXJyaWRl
OwogCiBwcml2YXRlOgogICAgIEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uKFdlYktpdERPTU5v
ZGVGaWx0ZXIqIGZpbHRlcikKQEAgLTQ3LDYgKzQ4LDQgQEAgcHJpdmF0ZToKICAgICBHUmVmUHRy
PFdlYktpdERPTU5vZGVGaWx0ZXI+IG1fZmlsdGVyOwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb25faAorfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0
L0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmNwcApzaW1p
bGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3RYUGF0aE5TUmVzb2x2
ZXIuY3BwCmluZGV4IDMyZmFmNDEuLmE0ZGY4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0WFBh
dGhOU1Jlc29sdmVyLmNwcApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIFdlYktpdCB7CiAKIEdPYmplY3RYUGF0aE5TUmVzb2x2ZXI6On5H
T2JqZWN0WFBhdGhOU1Jlc29sdmVyKCkKIHsKQEAgLTMzLDQgKzMzLDQgQEAgU3RyaW5nIEdPYmpl
Y3RYUGF0aE5TUmVzb2x2ZXI6Omxvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBTdHJpbmcmIHByZWZp
eCkKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh3ZWJraXRfZG9tX3hwYXRoX25zX3Jlc29s
dmVyX2xvb2t1cF9uYW1lc3BhY2VfdXJpKG1fcmVzb2x2ZXIuZ2V0KCksIHByZWZpeC51dGY4KCku
ZGF0YSgpKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0
WFBhdGhOU1Jlc29sdmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIuaApzaW1pbGFyaXR5IGluZGV4
IDg1JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RY
UGF0aE5TUmVzb2x2ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmgKaW5kZXggYmUx
MzRjMS4uM2U1Y2M2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmgKQEAg
LTE2LDE2ICsxNiwxNSBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKLSNpZm5k
ZWYgR09iamVjdFhQYXRoTlNSZXNvbHZlcl9oCi0jZGVmaW5lIEdPYmplY3RYUGF0aE5TUmVzb2x2
ZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIu
aCIKLSNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1hQYXRo
TlNSZXNvbHZlci5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAotbmFtZXNwYWNl
IFdlYkNvcmUgeworbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIEdPYmplY3RYUGF0aE5TUmVz
b2x2ZXIgOiBwdWJsaWMgWFBhdGhOU1Jlc29sdmVyIHsKK2NsYXNzIEdPYmplY3RYUGF0aE5TUmVz
b2x2ZXIgOiBwdWJsaWMgV2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVyIHsKIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBSZWY8R09iamVjdFhQYXRoTlNSZXNvbHZlcj4gY3JlYXRlKFdlYktpdERPTVhQYXRo
TlNSZXNvbHZlciogcmVzb2x2ZXIpCkBAIC00NSw2ICs0NCw0IEBAIHByaXZhdGU6CiAgICAgR1Jl
ZlB0cjxXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXI+IG1fcmVzb2x2ZXI7CiB9OwogCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHT2JqZWN0WFBhdGhOU1Jlc29sdmVyX2gKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRhYmxlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQW5pbWF0YWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQx
MGRiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0YWJsZS5jcHAKQEAgLTAsMCArMSw2
IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNj
cmlwdHMgdGhhdCBXZWJLaXRET01BbmltYXRhYmxlLmggYW5kCisgICAgV2ViS2l0RE9NQW5pbWF0
YWJsZS5jcHAgYXJlIGNyZWF0ZWQgZm9yIEFuaW1hdGFibGUuaWRsLCBhbmQgdGh1cworICAgIHBy
ZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9N
QW5pbWF0YWJsZS5oIGFuZAorICAgIFdlYktpdERPTUFuaW1hdGFibGUuY3BwIGF0IGV2ZXJ5IGJ1
aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUFuaW1hdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0YWJsZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MTBkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFu
aW1hdGFibGUuaApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRl
ZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTUFuaW1hdGFibGUuaCBh
bmQKKyAgICBXZWJLaXRET01BbmltYXRhYmxlLmNwcCBhcmUgY3JlYXRlZCBmb3IgQW5pbWF0YWJs
ZS5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWlu
ZyB0byBnZW5lcmF0ZSBXZWJLaXRET01BbmltYXRhYmxlLmggYW5kCisgICAgV2ViS2l0RE9NQW5p
bWF0YWJsZS5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0
byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQW5pbWF0aW9uRWZmZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45NWJjYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25FZmZlY3QuY3BwCkBA
IC0wLDAgKzEsMTEwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRf
RE9NX0FOSU1BVElPTl9FRkZFQ1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX0VGRkVDVCwgV2ViS2l0RE9N
QW5pbWF0aW9uRWZmZWN0UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUFuaW1h
dGlvbkVmZmVjdFByaXZhdGUgeworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6QW5pbWF0aW9uRWZmZWN0PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJM
RShXRUJfQU5JTUFUSU9OUykKK30gV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZTsKKwor
I2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTUFuaW1hdGlvbkVmZmVjdCoga2l0KFdlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdCogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X0FOSU1BVElPTl9FRkZFQ1QocmV0KTsKKworICAgIHJldHVybiB3cmFwQW5pbWF0aW9uRWZmZWN0
KG9iaik7Cit9CisKK1dlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdCogY29yZShXZWJLaXRET01Bbmlt
YXRpb25FZmZlY3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpBbmltYXRpb25FZmZlY3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01BbmltYXRpb25FZmZlY3QqIHdyYXBBbmlt
YXRpb25FZmZlY3QoV2ViQ29yZTo6QW5pbWF0aW9uRWZmZWN0KiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9BTklNQVRJT05fRUZG
RUNUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX0VGRkVDVCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01BbmltYXRpb25FZmZlY3QsIHdlYmtpdF9kb21fYW5pbWF0aW9uX2VmZmVjdCwgV0VC
S0lUX0RPTV9UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hbmltYXRpb25f
ZWZmZWN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01BbmltYXRp
b25FZmZlY3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BTklNQVRJT05fRUZGRUNUX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgcHJpdi0+fldlYktpdERPTUFuaW1hdGlvbkVm
ZmVjdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2FuaW1hdGlvbl9l
ZmZlY3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fYW5pbWF0aW9uX2VmZmVjdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBn
dWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29u
c3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX2FuaW1hdGlvbl9lZmZlY3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNp
ZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQU5JTUFUSU9OX0VGRkVDVF9HRVRfUFJJVkFURShvYmpl
Y3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBbmltYXRp
b25FZmZlY3QqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0
KTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hbmltYXRpb25fZWZmZWN0X2NsYXNzX2luaXQo
V2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERP
TUFuaW1hdGlvbkVmZmVjdFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9y
ID0gd2Via2l0X2RvbV9hbmltYXRpb25fZWZmZWN0X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2FuaW1hdGlvbl9lZmZlY3RfZmluYWxpemU7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYW5pbWF0aW9uX2VmZmVjdF9pbml0KFdlYktpdERP
TUFuaW1hdGlvbkVmZmVjdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01BbmltYXRpb25FZmZl
Y3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BTklNQVRJT05fRUZGRUNUX0dFVF9QUklWQVRF
KHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0
ZSgpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01JbnRlcmZhY2VOYW1lLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvbkVmZmVj
dC5oCnNpbWlsYXJpdHkgaW5kZXggNTUlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVyZmFjZU5hbWUuaApyZW5hbWUg
dG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01BbmltYXRpb25FZmZlY3QuaAppbmRleCBkZGNiNTVmLi5kMDI4Mzc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01JbnRlcmZhY2VOYW1lLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25FZmZlY3QuaApAQCAtMTgsOCAr
MTgsOCBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYg
V2ViS2l0RE9NSW50ZXJmYWNlTmFtZV9oCi0jZGVmaW5lIFdlYktpdERPTUludGVyZmFjZU5hbWVf
aAorI2lmbmRlZiBXZWJLaXRET01BbmltYXRpb25FZmZlY3RfaAorI2RlZmluZSBXZWJLaXRET01B
bmltYXRpb25FZmZlY3RfaAogCiAjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCiAK
QEAgLTI5LDI1ICsyOSwyNSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKLSNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX0lOVEVSRkFDRV9OQU1FICAgICAgICAgICAgKHdlYmtpdF9kb21faW50ZXJmYWNlX25h
bWVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JTlRFUkZBQ0VfTkFNRShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSU5URVJGQUNFX05BTUUsIFdlYktpdERPTUludGVyZmFjZU5hbWUpKQotI2RlZmluZSBXRUJL
SVRfRE9NX0lOVEVSRkFDRV9OQU1FX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSwgV2ViS2l0RE9N
SW50ZXJmYWNlTmFtZUNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX0lOVEVSRkFDRV9OQU1F
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9JTlRFUkZBQ0VfTkFNRSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfSU5URVJGQUNF
X05BTUVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0lOVEVSRkFDRV9OQU1FKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JTlRFUkZB
Q0VfTkFNRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNFX05BTUUsIFdlYktpdERPTUludGVyZmFjZU5hbWVD
bGFzcykpCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fRUZGRUNUICAgICAgICAg
ICAgKHdlYmtpdF9kb21fYW5pbWF0aW9uX2VmZmVjdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0FOSU1BVElPTl9FRkZFQ1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9FRkZFQ1QsIFdlYktp
dERPTUFuaW1hdGlvbkVmZmVjdCkpCisjZGVmaW5lIFdFQktJVF9ET01fQU5JTUFUSU9OX0VGRkVD
VF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfQU5JTUFUSU9OX0VGRkVDVCwgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Q2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQU5JTUFUSU9OX0VGRkVDVChvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQU5JTUFU
SU9OX0VGRkVDVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQU5JTUFUSU9OX0VGRkVDVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfQU5JTUFUSU9OX0VGRkVDVCkpCisjZGVmaW5lIFdFQktJVF9ET01fQU5JTUFUSU9OX0VGRkVD
VF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfRE9NX1RZUEVfQU5JTUFUSU9OX0VGRkVDVCwgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Q2xh
c3MpKQogCi1zdHJ1Y3QgX1dlYktpdERPTUludGVyZmFjZU5hbWUgeworc3RydWN0IF9XZWJLaXRE
T01BbmltYXRpb25FZmZlY3QgewogICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7
CiB9OwogCi1zdHJ1Y3QgX1dlYktpdERPTUludGVyZmFjZU5hbWVDbGFzcyB7CitzdHJ1Y3QgX1dl
YktpdERPTUFuaW1hdGlvbkVmZmVjdENsYXNzIHsKICAgICBXZWJLaXRET01PYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX2ludGVyZmFj
ZV9uYW1lX2dldF90eXBlKHZvaWQpOword2Via2l0X2RvbV9hbmltYXRpb25fZWZmZWN0X2dldF90
eXBlKHZvaWQpOwogCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NSW50ZXJmYWNlTmFtZV9oICovCisjZW5k
aWYgLyogV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5p
bWF0aW9uRWZmZWN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyODM0MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQW5pbWF0aW9uRWZm
ZWN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb25FZmZlY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Lmg+CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05T
KQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdCogd3JhcEFu
aW1hdGlvbkVmZmVjdChXZWJDb3JlOjpBbmltYXRpb25FZmZlY3QqKTsKK1dlYktpdERPTUFuaW1h
dGlvbkVmZmVjdCoga2l0KFdlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdCopOworV2ViQ29yZTo6QW5p
bWF0aW9uRWZmZWN0KiBjb3JlKFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdCopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpICovCisKKyNl
bmRpZiAvKiBXZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQW5pbWF0aW9uVGltZWxpbmUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2YmVhZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUuY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01BbmltYXRp
b25UaW1lbGluZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5j
bHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9BTklNQVRJT05fVElN
RUxJTkVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX1RJTUVMSU5FLCBXZWJLaXRET01BbmltYXRpb25UaW1l
bGluZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01BbmltYXRpb25UaW1lbGlu
ZVByaXZhdGUgeworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6QW5pbWF0aW9uVGltZWxpbmU+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
TklNQVRJT05TKQorfSBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGU7CisKKyNpZiBF
TkFCTEUoV0VCX0FOSU1BVElPTlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01B
bmltYXRpb25UaW1lbGluZSoga2l0KFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKiBvYmopCit7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
QU5JTUFUSU9OX1RJTUVMSU5FKHJldCk7CisKKyAgICByZXR1cm4gd3JhcEFuaW1hdGlvblRpbWVs
aW5lKG9iaik7Cit9CisKK1dlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKiBjb3JlKFdlYktpdERP
TUFuaW1hdGlvblRpbWVsaW5lKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6QW5pbWF0aW9uVGltZWxpbmUqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01BbmltYXRpb25UaW1lbGlu
ZSogd3JhcEFuaW1hdGlvblRpbWVsaW5lKFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9BTklNQVRJT05fVElNRUxJTkUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9BTklNQVRJ
T05fVElNRUxJTkUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMp
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUsIHdlYmtpdF9kb21f
YW5pbWF0aW9uX3RpbWVsaW5lLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9BTklNQVRJT05fVElNRUxJTkVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUo
V0VCX0FOSU1BVElPTlMpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYt
PmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAg
ICBwcml2LT5+V2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlKCk7CisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVfcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fYW5pbWF0aW9u
X3RpbWVsaW5lX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQorewor
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYW5pbWF0aW9u
X3RpbWVsaW5lX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJ
T05TKQorICAgIFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fQU5JTUFUSU9OX1RJTUVMSU5FX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+
Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKj4oV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fYW5pbWF0aW9uX3RpbWVsaW5lX2NsYXNzX2luaXQoV2ViS2l0RE9NQW5p
bWF0aW9uVGltZWxpbmVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQW5pbWF0aW9u
VGltZWxpbmVQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtp
dF9kb21fYW5pbWF0aW9uX3RpbWVsaW5lX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9maW5hbGl6ZTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVfaW5pdChXZWJLaXRET01B
bmltYXRpb25UaW1lbGluZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01BbmltYXRpb25UaW1l
bGluZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORV9HRVRfUFJJ
VkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5l
UHJpdmF0ZSgpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01B
bmltYXRpb25UaW1lbGluZS5oCnNpbWlsYXJpdHkgaW5kZXggNTIlCnJlbmFtZSBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUuaAppbmRleCA1
ZTRlOTZkLi45MjQwMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQW5pbWF0aW9uVGltZWxpbmUuaApAQCAtMTgsOCArMTgsOCBAQAogICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3JfaAotI2RlZmluZSBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCisjaWZuZGVm
IFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lX2gKKyNkZWZpbmUgV2ViS2l0RE9NQW5pbWF0aW9u
VGltZWxpbmVfaAogCiAjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCiAKQEAgLTI5
LDI1ICsyOSwyNSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfTkFNRURfQ09OU1RSVUNUT1IgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X25hbWVk
X2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OQU1FRF9D
T05TVFJVQ1RPUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTkFNRURfQ09OU1RS
VUNUT1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsIFdlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9OQU1FRF9DT05T
VFJVQ1RPUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUikpCi0jZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RP
UikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
VEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fVElNRUxJTkUgICAgICAgICAg
ICAod2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9BTklNQVRJT05fVElNRUxJTkUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9USU1FTElORSwg
V2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0FOSU1BVElP
Tl9USU1FTElORV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX1RJTUVMSU5FLCBXZWJLaXRET01BbmltYXRp
b25UaW1lbGluZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0FOSU1BVElPTl9USU1FTElO
RShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfQU5JTUFUSU9OX1RJTUVMSU5FKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19BTklN
QVRJT05fVElNRUxJTkVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9USU1FTElORSkpCisjZGVmaW5lIFdFQktJ
VF9ET01fQU5JTUFUSU9OX1RJTUVMSU5FX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fVElNRUxJTkUsIFdl
YktpdERPTUFuaW1hdGlvblRpbWVsaW5lQ2xhc3MpKQogCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yIHsKK3N0cnVjdCBfV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUgewog
ICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7CiB9OwogCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3ROYW1lZENvbnN0cnVjdG9yQ2xhc3Mgeworc3RydWN0IF9XZWJLaXRET01BbmltYXRp
b25UaW1lbGluZUNsYXNzIHsKICAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0
b3JfZ2V0X3R5cGUodm9pZCk7Cit3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9nZXRfdHlw
ZSh2b2lkKTsKIAogR19FTkRfREVDTFMKIAogI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yX2ggKi8K
KyNlbmRpZiAvKiBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZV9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZVBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJiNDhhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGUuaApAQCAtMCwwICsx
LDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUFuaW1hdGlvblRp
bWVsaW5lUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvblRpbWVsaW5lLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lLmg+CisjaWYg
RU5BQkxFKFdFQl9BTklNQVRJT05TKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUFu
aW1hdGlvblRpbWVsaW5lKiB3cmFwQW5pbWF0aW9uVGltZWxpbmUoV2ViQ29yZTo6QW5pbWF0aW9u
VGltZWxpbmUqKTsKK1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lKiBraXQoV2ViQ29yZTo6QW5p
bWF0aW9uVGltZWxpbmUqKTsKK1dlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lKiBjb3JlKFdlYktp
dERPTUFuaW1hdGlvblRpbWVsaW5lKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIEVOQUJMRShXRUJfQU5JTUFUSU9OUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUFuaW1h
dGlvblRpbWVsaW5lUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHIuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01BdHRyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGU2MWViCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUF0dHIuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTUF0dHJQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01BdHRyVW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NQXR0cioga2l0KFdlYkNvcmU6OkF0dHIqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9BVFRSKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkp
OworfQorCitXZWJDb3JlOjpBdHRyKiBjb3JlKFdlYktpdERPTUF0dHIqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdHRyKj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQXR0ciog
d3JhcEF0dHIoV2ViQ29yZTo6QXR0ciogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQVRUUihnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0FUVFIsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2F0dHJf
ZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZl
bnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2
ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkF0dHIqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpBdHRyKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2Ny
aXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9hdHRyX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkF0dHIqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpBdHRyKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fYXR0cl9y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkK
K3sKKyAgICBXZWJDb3JlOjpBdHRyKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
QXR0cio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV9hdHRyX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlz
dGVuZXIgPSB3ZWJraXRfZG9tX2F0dHJfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2F0dHJfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01BdHRyLCB3ZWJraXRf
ZG9tX2F0dHIsIFdFQktJVF9ET01fVFlQRV9OT0RFLCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VC
S0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkp
CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9TUEVDSUZJ
RUQsCisgICAgUFJPUF9WQUxVRSwKKyAgICBQUk9QX09XTkVSX0VMRU1FTlQsCisgICAgUFJPUF9J
U19JRCwKKyAgICBQUk9QX05BTUVTUEFDRV9VUkksCisgICAgUFJPUF9QUkVGSVgsCisgICAgUFJP
UF9MT0NBTF9OQU1FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdHRyX3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUF0dHIqIHNlbGYgPSBXRUJL
SVRfRE9NX0FUVFIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9hdHRyX3NldF92YWx1ZShzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fYXR0cl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01BdHRyKiBzZWxmID0gV0VCS0lUX0RPTV9BVFRSKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dldF9uYW1lKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NQRUNJRklFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dldF9zcGVjaWZpZWQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRfdmFsdWUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfT1dORVJfRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2F0dHJfZ2V0X293bmVyX2VsZW1lbnQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSVNfSUQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRfaXNfaWQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRVNQQUNFX1VSSToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dldF9uYW1lc3BhY2VfdXJpKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BSRUZJWDoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dldF9wcmVmaXgoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9DQUxfTkFNRToKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dldF9sb2NhbF9uYW1lKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXR0cl9jbGFzc19pbml0
KFdlYktpdERPTUF0dHJDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fYXR0cl9zZXRfcHJvcGVydHk7CisgICAg
Z29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2F0dHJfZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAiQXR0cjpuYW1lIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2NoYXIqIEF0dHI6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NQRUNJ
RklFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic3BlY2lm
aWVkIiwKKyAgICAgICAgICAgICJBdHRyOnNwZWNpZmllZCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdib29sZWFuIEF0dHI6c3BlY2lmaWVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsdWUiLAorICAg
ICAgICAgICAgIkF0dHI6dmFsdWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEF0
dHI6dmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1dORVJfRUxFTUVOVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJvd25lci1lbGVtZW50IiwKKyAgICAgICAg
ICAgICJBdHRyOm93bmVyLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01FbGVtZW50KiBBdHRyOm93bmVyLWVsZW1lbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9JU19JRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAg
ICAgICAgICAiaXMtaWQiLAorICAgICAgICAgICAgIkF0dHI6aXMtaWQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBnYm9vbGVhbiBBdHRyOmlzLWlkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFN
RVNQQUNFX1VSSSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJu
YW1lc3BhY2UtdXJpIiwKKyAgICAgICAgICAgICJBdHRyOm5hbWVzcGFjZS11cmkiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogQXR0cjpuYW1lc3BhY2UtdXJpIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUFJFRklYLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
InByZWZpeCIsCisgICAgICAgICAgICAiQXR0cjpwcmVmaXgiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogQXR0cjpwcmVmaXgiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MT0NBTF9OQU1FLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxvY2FsLW5hbWUiLAor
ICAgICAgICAgICAgIkF0dHI6bG9jYWwtbmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdj
aGFyKiBBdHRyOmxvY2FsLW5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F0dHJf
aW5pdChXZWJLaXRET01BdHRyKiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fYXR0cl9nZXRfbmFtZShXZWJLaXRET01BdHRyKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkF0dHIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2F0dHJfZ2V0X3NwZWNpZmllZChXZWJLaXRET01B
dHRyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpBdHRyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPnNwZWNpZmllZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2F0dHJfZ2V0X3ZhbHVlKFdlYktpdERPTUF0dHIqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVRUUihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6QXR0ciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWx1ZUZvckJpbmRpbmdzKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9hdHRyX3NldF92YWx1ZShXZWJLaXRET01B
dHRyKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfQVRUUihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpBdHRyKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRWYWx1ZUZvckJpbmRpbmdzKGNv
bnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9hdHRyX2dl
dF9vd25lcl9lbGVtZW50KFdlYktpdERPTUF0dHIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfQVRUUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QXR0ciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fYXR0
cl9nZXRfaXNfaWQoV2ViS2l0RE9NQXR0ciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19BVFRSKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6QXR0ciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc0lkKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fYXR0cl9nZXRfbmFtZXNwYWNl
X3VyaShXZWJLaXRET01BdHRyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FU
VFIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkF0dHIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZXNw
YWNlVVJJKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2F0
dHJfZ2V0X3ByZWZpeChXZWJLaXRET01BdHRyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0FUVFIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkF0dHIqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+cHJlZml4KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2F0dHJfZ2V0X2xvY2FsX25hbWUoV2ViS2l0RE9NQXR0ciogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19BVFRSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdHRyKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmxvY2FsTmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUF0dHIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjVlODE5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHIuaApAQCAtMCww
ICsxLDEzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNl
cnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NQXR0cl9oCisjZGVmaW5lIFdlYktpdERP
TUF0dHJfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NTm9kZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQVRUUiAgICAgICAg
ICAgICh3ZWJraXRfZG9tX2F0dHJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVFRS
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9BVFRSLCBXZWJLaXRET01BdHRyKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVFRS
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9BVFRSLCBXZWJLaXRET01BdHRyQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfQVRUUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfQVRUUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQVRUUl9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
QVRUUikpCisjZGVmaW5lIFdFQktJVF9ET01fQVRUUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQVRUUiwgV2ViS2l0RE9N
QXR0ckNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01BdHRyIHsKKyAgICBXZWJLaXRET01Ob2Rl
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NQXR0ckNsYXNzIHsKKyAg
ICBXZWJLaXRET01Ob2RlQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9hdHRyX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
YXR0cl9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdHRyCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fYXR0cl9nZXRf
bmFtZShXZWJLaXRET01BdHRyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F0dHJfZ2V0
X3NwZWNpZmllZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdHRyCisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9hdHRyX2dl
dF9zcGVjaWZpZWQoV2ViS2l0RE9NQXR0ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9h
dHRyX2dldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdHRyCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fYXR0cl9nZXRf
dmFsdWUoV2ViS2l0RE9NQXR0ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9hdHRyX3Nl
dF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdHRyCisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9hdHRyX3NldF92YWx1ZShXZWJLaXRET01BdHRyKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUs
IEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F0dHJfZ2V0X293bmVyX2Vs
ZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0cgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUVsZW1lbnQqCit3ZWJraXRfZG9tX2F0dHJfZ2V0X293bmVyX2VsZW1lbnQoV2ViS2l0RE9NQXR0
ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9hdHRyX2dldF9uYW1lc3BhY2VfdXJpOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUF0dHIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2F0dHJf
Z2V0X25hbWVzcGFjZV91cmkoV2ViS2l0RE9NQXR0ciogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9hdHRyX2dldF9wcmVmaXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0cgorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fYXR0cl9nZXRfcHJlZml4KFdlYktpdERPTUF0dHIqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fYXR0cl9nZXRfbG9jYWxfbmFtZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01BdHRyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTaW5jZTogMi4x
NAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9hdHRyX2dldF9sb2NhbF9uYW1l
KFdlYktpdERPTUF0dHIqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0
RE9NQXR0cl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyUHJpdmF0
ZS5oCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmgKcmVuYW1l
IHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQXR0clByaXZhdGUuaAppbmRleCA2ZTM2YTZlLi5kMGVjODgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0clByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2
IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJL
aXRET01UZXN0T2JqUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RPYmpQcml2YXRlX2gK
KyNpZm5kZWYgV2ViS2l0RE9NQXR0clByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01BdHRyUHJp
dmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0T2JqLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVRlc3RPYmouaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0F0dHIuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NQXR0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRl
c3RPYmoqIHdyYXBUZXN0T2JqKFdlYkNvcmU6OlRlc3RPYmoqKTsKLVdlYktpdERPTVRlc3RPYmoq
IGtpdChXZWJDb3JlOjpUZXN0T2JqKik7Ci1XZWJDb3JlOjpUZXN0T2JqKiBjb3JlKFdlYktpdERP
TVRlc3RPYmoqKTsKK1dlYktpdERPTUF0dHIqIHdyYXBBdHRyKFdlYkNvcmU6OkF0dHIqKTsKK1dl
YktpdERPTUF0dHIqIGtpdChXZWJDb3JlOjpBdHRyKik7CitXZWJDb3JlOjpBdHRyKiBjb3JlKFdl
YktpdERPTUF0dHIqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0
RE9NVGVzdE9ialByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUF0dHJQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0clVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHJVbnN0YWJsZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYzk1MTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUF0dHJVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQXR0clVuc3RhYmxlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NQXR0clVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFi
bGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21fYXR0cl9nZXRfaXNf
aWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0cgorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfZG9tX2F0dHJfZ2V0X2lzX2lkKFdlYktpdERPTUF0dHIqIHNlbGYpOworCisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01BdHRyVW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRp
b1RyYWNrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFjay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTk1NTcyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFjay5j
cHAKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01BdWRpb1RyYWNrLmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NQXVkaW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9B
VURJT19UUkFDS19HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShv
YmosIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDSywgV2ViS2l0RE9NQXVkaW9UcmFja1ByaXZh
dGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZSB7CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNrPiBjb3Jl
T2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30gV2ViS2l0RE9NQXVkaW9U
cmFja1ByaXZhdGU7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJLaXRET01BdWRpb1RyYWNrKiBraXQoV2ViQ29yZTo6QXVkaW9UcmFjayogb2Jq
KQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRl
ciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRf
RE9NX0FVRElPX1RSQUNLKHJldCk7CisKKyAgICByZXR1cm4gd3JhcEF1ZGlvVHJhY2sob2JqKTsK
K30KKworV2ViQ29yZTo6QXVkaW9UcmFjayogY29yZShXZWJLaXRET01BdWRpb1RyYWNrKiByZXF1
ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9U
cmFjayo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTUF1ZGlvVHJhY2sqIHdyYXBBdWRpb1RyYWNrKFdlYkNvcmU6OkF1ZGlvVHJhY2sq
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0FVRElPX1RSQUNLKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJB
Q0ssICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NQXVkaW9UcmFjaywgd2Via2l0X2RvbV9hdWRpb190cmFjaywgV0VCS0lU
X0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfSUQsCisg
ICAgUFJPUF9LSU5ELAorICAgIFBST1BfTEFCRUwsCisgICAgUFJPUF9MQU5HVUFHRSwKKyAgICBQ
Uk9QX0VOQUJMRUQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fQVVESU9fVFJBQ0tfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBwcml2LT5+V2ViS2l0RE9NQXVkaW9UcmFja1ByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NQXVkaW9UcmFjayogc2VsZiA9IFdF
QktJVF9ET01fQVVESU9fVFJBQ0sob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9FTkFCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNr
X3NldF9lbmFibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NQXVkaW9UcmFjayogc2VsZiA9IFdFQktJVF9ET01f
QVVESU9fVFJBQ0sob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9JRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9hdWRpb190cmFja19nZXRfaWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfS0lORDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9h
dWRpb190cmFja19nZXRfa2luZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9MQUJFTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9h
dWRpb190cmFja19nZXRfbGFiZWwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTEFOR1VBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21fYXVkaW9fdHJhY2tfZ2V0X2xhbmd1YWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0VOQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2VuYWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfY29uc3RydWN0b3IoR1R5cGUg
dHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFy
YW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV9hdWRpb190cmFja19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rv
cih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fQVVESU9fVFJBQ0tfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBw
cml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFjayo+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2NsYXNzX2luaXQoV2ViS2l0RE9NQXVkaW9UcmFja0NsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZSkpOworICAgIGdv
YmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2NvbnN0cnVj
dG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNr
X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9h
dWRpb190cmFja19zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9JRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJpZCIsCisg
ICAgICAgICAgICAiQXVkaW9UcmFjazppZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFy
KiBBdWRpb1RyYWNrOmlkIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfS0lORCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJraW5kIiwKKyAgICAgICAgICAgICJBdWRpb1Ry
YWNrOmtpbmQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogQXVkaW9UcmFjazpraW5k
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfTEFCRUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAibGFiZWwiLAorICAgICAgICAgICAgIkF1ZGlvVHJhY2s6bGFiZWwiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogQXVkaW9UcmFjazpsYWJlbCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0xBTkdVQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImxhbmd1YWdlIiwKKyAgICAgICAgICAgICJBdWRpb1RyYWNrOmxhbmd1YWdlIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEF1ZGlvVHJhY2s6bGFuZ3VhZ2UiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9FTkFCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJlbmFibGVkIiwKKyAgICAgICAgICAgICJBdWRpb1RyYWNrOmVuYWJsZWQiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gQXVkaW9UcmFjazplbmFibGVkIiwKKyAgICAg
ICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfaW5pdChXZWJLaXRET01BdWRp
b1RyYWNrKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9BVURJT19UUkFDS19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcg
KHByaXYpIFdlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2F1ZGlvX3RyYWNrX2dldF9pZChXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKQoreworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVURJT19UUkFD
SyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QXVkaW9UcmFjayogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5p
ZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAg
IHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2NoYXIq
IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2tpbmQoV2ViS2l0RE9NQXVkaW9UcmFjayogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
QVVESU9fVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OkF1ZGlvVHJhY2sqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+a2luZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8K
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2xhYmVsKFdlYktpdERPTUF1
ZGlvVHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0FVRElPX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdWRpb1Ry
YWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxhYmVsKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfbGFu
Z3VhZ2UoV2ViS2l0RE9NQXVkaW9UcmFjayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0soc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkF1ZGlvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGFuZ3VhZ2UoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsK
KyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21fYXVkaW9fdHJhY2tfZ2V0X2VuYWJsZWQoV2ViS2l0RE9NQXVkaW9UcmFjayogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVVESU9f
VFJBQ0soc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpBdWRpb1RyYWNrKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmVuYWJsZWQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNL
KSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfc2V0X2VuYWJsZWQoV2ViS2l0
RE9NQXVkaW9UcmFjayogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0soc2VsZikpOworICAgIFdl
YkNvcmU6OkF1ZGlvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c2V0RW5hYmxlZCh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFjay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczYWNlNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQXVkaW9UcmFjay5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUF1ZGlvVHJhY2tfaAorI2RlZmluZSBXZWJLaXRE
T01BdWRpb1RyYWNrX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDSyAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9ET01fQVVESU9fVFJBQ0sob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLLCBXZWJLaXRET01BdWRp
b1RyYWNrKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVURJT19UUkFDS19DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQVVESU9f
VFJBQ0ssIFdlYktpdERPTUF1ZGlvVHJhY2tDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19B
VURJT19UUkFDSyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0spKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0FV
RElPX1RSQUNLX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDSykpCisjZGVmaW5lIFdFQktJVF9ET01fQVVESU9f
VFJBQ0tfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLLCBXZWJLaXRET01BdWRpb1RyYWNrQ2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTUF1ZGlvVHJhY2sgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJl
bnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUF1ZGlvVHJhY2tDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdWRp
b1RyYWNrCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9p
ZChXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX2dldF9raW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2sKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2tpbmQoV2ViS2l0RE9N
QXVkaW9UcmFjayogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRf
bGFiZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXVkaW9UcmFjaworICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfbGFiZWwoV2ViS2l0RE9NQXVkaW9UcmFj
ayogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfbGFuZ3VhZ2U6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXVkaW9UcmFjaworICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfbGFuZ3VhZ2UoV2ViS2l0RE9NQXVkaW9UcmFjayog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfZW5hYmxlZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01BdWRpb1RyYWNrCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2VuYWJsZWQoV2ViS2l0RE9NQXVkaW9UcmFjayog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9hdWRpb190cmFja19zZXRfZW5hYmxlZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01BdWRpb1RyYWNrCisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fYXVkaW9fdHJhY2tfc2V0X2VuYWJsZWQoV2ViS2l0RE9NQXVkaW9UcmFjayogc2VsZiwgZ2Jv
b2xlYW4gdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NQXVkaW9UcmFja19oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmJlYzIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5l
IFdFQktJVF9ET01fQVVESU9fVFJBQ0tfTElTVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDS19MSVNULCBX
ZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01BdWRpb1RyYWNrTGlzdFByaXZhdGUgeworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6QXVkaW9UcmFja0xpc3Q+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorfSBXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGU7CisKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01B
dWRpb1RyYWNrTGlzdCoga2l0KFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fQVVESU9f
VFJBQ0tfTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBBdWRpb1RyYWNrTGlzdChvYmopOwor
fQorCitXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCogY29yZShXZWJLaXRET01BdWRpb1RyYWNrTGlz
dCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkF1ZGlvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QqIHdyYXBBdWRpb1RyYWNrTGlzdChX
ZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQVVESU9fVFJBQ0tfTElTVChnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU9fVFJBQ0spCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX2xpc3RfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShl
dmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
ZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkF1ZGlvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2Ny
aXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9Q
QVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0sp
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9hdWRpb190cmFja19saXN0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkF1ZGlvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVO
VVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShW
SURFT19UUkFDSykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlz
dF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0LCB3ZWJraXRf
ZG9tX2F1ZGlvX3RyYWNrX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5U
X0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBwcml2LT5+V2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2YXRlKCk7CisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X3BhcmVudF9jbGFzcyktPmZpbmFs
aXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlz
dF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01BdWRpb1RyYWNrTGlz
dCogc2VsZiA9IFdFQktJVF9ET01fQVVESU9fVFJBQ0tfTElTVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9nZXRfbGVuZ3Ro
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX2xpc3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7
CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hdWRpb190
cmFja19saXN0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgIFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
QVVESU9fVFJBQ0tfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JK
RUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2F1ZGlvX3RyYWNrX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01BdWRpb1RyYWNrTGlzdENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUpKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0
X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2F1
ZGlvX3RyYWNrX2xpc3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAg
Imxlbmd0aCIsCisgICAgICAgICAgICAiQXVkaW9UcmFja0xpc3Q6bGVuZ3RoIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ3Vsb25nIEF1ZGlvVHJhY2tMaXN0Omxlbmd0aCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2luaXQoV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NQXVkaW9UcmFj
a0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BVURJT19UUkFDS19MSVNUX0dFVF9QUklW
QVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2
YXRlKCk7Cit9CisKK1dlYktpdERPTUF1ZGlvVHJhY2sqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tf
bGlzdF9pdGVtKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FVRElP
X1RSQUNLX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNrPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8q
IEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworV2ViS2l0RE9NQXVkaW9UcmFjayogd2Via2l0
X2RvbV9hdWRpb190cmFja19saXN0X2dldF90cmFja19ieV9pZChXZWJLaXRET01BdWRpb1RyYWNr
TGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIGlkKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVURJT19UUkFDS19MSVNUKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChpZCwgMCk7CisgICAgV2ViQ29yZTo6QXVkaW9UcmFja0xp
c3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
SWQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoaWQpOworICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRp
b1RyYWNrPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0VHJhY2tCeUlkKGNv
bnZlcnRlZElkKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAg
cmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitndWxvbmcg
d2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NQXVkaW9UcmFj
a0xpc3QqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0FVRElPX1RSQUNLX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkF1ZGlv
VHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQg
PSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVO
QUJMRShWSURFT19UUkFDSykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrTGlz
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01BdWRpb1RyYWNrTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVhNjdlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmgK
QEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01BdWRpb1RyYWNrTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTUF1ZGlvVHJhY2tM
aXN0X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDS19MSVNUICAgICAg
ICAgICAgKHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLX0xJU1QsIFdl
YktpdERPTUF1ZGlvVHJhY2tMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVURJT19UUkFDS19M
SVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9BVURJT19UUkFDS19MSVNULCBXZWJLaXRET01BdWRpb1RyYWNrTGlzdENs
YXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0FVRElPX1RSQUNLX0xJU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FVRElP
X1RSQUNLX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0FVRElPX1RSQUNLX0xJU1RfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0FVRElPX1RSQUNLX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJ
U1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLX0xJU1QsIFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0IHsKKyAgICBXZWJLaXRET01P
YmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01BdWRpb1RyYWNr
TGlzdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2l0ZW06CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01BdWRpb1RyYWNrCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUF1ZGlv
VHJhY2sqCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfaXRlbShXZWJLaXRET01BdWRpb1Ry
YWNrTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX2xpc3RfZ2V0X3RyYWNrX2J5X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlv
VHJhY2tMaXN0CisgKiBAaWQ6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01BdWRpb1RyYWNrCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTUF1ZGlvVHJhY2sqCit3ZWJraXRfZG9tX2F1ZGlvX3Ry
YWNrX2xpc3RfZ2V0X3RyYWNrX2J5X2lkKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBzZWxmLCBj
b25zdCBnY2hhciogaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9n
ZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0CisgKgorICog
UmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2dldF9sZW5ndGgoV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3QqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NQXVkaW9U
cmFja0xpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uM2MzYWM1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQ
cml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9BdWRpb1Ry
YWNrTGlzdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01BdWRpb1RyYWNrTGlzdC5o
PgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRE
T01BdWRpb1RyYWNrTGlzdCogd3JhcEF1ZGlvVHJhY2tMaXN0KFdlYkNvcmU6OkF1ZGlvVHJhY2tM
aXN0Kik7CitXZWJLaXRET01BdWRpb1RyYWNrTGlzdCoga2l0KFdlYkNvcmU6OkF1ZGlvVHJhY2tM
aXN0Kik7CitXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCogY29yZShXZWJLaXRET01BdWRpb1RyYWNr
TGlzdCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNr
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMDBjZjEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01BdWRp
b1RyYWNrUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlX2gKKwor
I2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFjay5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01BdWRpb1RyYWNrLmg+CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTUF1ZGlvVHJhY2sqIHdyYXBBdWRpb1RyYWNrKFdlYkNvcmU6OkF1
ZGlvVHJhY2sqKTsKK1dlYktpdERPTUF1ZGlvVHJhY2sqIGtpdChXZWJDb3JlOjpBdWRpb1RyYWNr
Kik7CitXZWJDb3JlOjpBdWRpb1RyYWNrKiBjb3JlKFdlYktpdERPTUF1ZGlvVHJhY2sqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLwor
CisjZW5kaWYgLyogV2ViS2l0RE9NQXVkaW9UcmFja1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01CYXJQcm9wLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTI1MWVjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcC5j
cHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01CYXJQcm9wLmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NQmFyUHJvcFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgi
CisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9CQVJfUFJP
UF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJ
VF9ET01fVFlQRV9CQVJfUFJPUCwgV2ViS2l0RE9NQmFyUHJvcFByaXZhdGUpCisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01CYXJQcm9wUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkJh
clByb3A+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTUJhclByb3BQcml2YXRlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQmFyUHJvcCoga2l0KFdlYkNvcmU6OkJhclByb3AqIG9i
aikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50
ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lU
X0RPTV9CQVJfUFJPUChyZXQpOworCisgICAgcmV0dXJuIHdyYXBCYXJQcm9wKG9iaik7Cit9CisK
K1dlYkNvcmU6OkJhclByb3AqIGNvcmUoV2ViS2l0RE9NQmFyUHJvcCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhclByb3AqPihXRUJLSVRf
RE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01CYXJQ
cm9wKiB3cmFwQmFyUHJvcChXZWJDb3JlOjpCYXJQcm9wKiBjb3JlT2JqZWN0KQoreworICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9CQVJfUFJPUChnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0
LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBF
KFdlYktpdERPTUJhclByb3AsIHdlYmtpdF9kb21fYmFyX3Byb3AsIFdFQktJVF9ET01fVFlQRV9P
QkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1ZJU0lCTEUsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Jhcl9wcm9wX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBXZWJLaXRET01CYXJQcm9wUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQkFSX1BS
T1BfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZv
cmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01CYXJQ
cm9wUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYmFyX3Byb3BfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9iYXJfcHJvcF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01CYXJQ
cm9wKiBzZWxmID0gV0VCS0lUX0RPTV9CQVJfUFJPUChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZJU0lCTEU6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3Zpc2libGUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fYmFyX3Byb3BfY29uc3Ry
dWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0
Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2Jq
ZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9iYXJfcHJvcF9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOworCisgICAgV2ViS2l0RE9NQmFyUHJvcFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X0JBUl9QUk9QX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkJhclByb3AqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5j
b3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fYmFyX3Byb3BfY2xhc3NfaW5pdChXZWJLaXRET01CYXJQcm9wQ2xhc3Mq
IHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdv
YmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUJhclByb3BQcml2YXRlKSk7CisgICAgZ29iamVj
dENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fYmFyX3Byb3BfY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fYmFyX3Byb3BfZmluYWxpemU7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2Jhcl9wcm9wX2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WSVNJQkxFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ2aXNpYmxlIiwKKyAgICAgICAgICAgICJCYXJQ
cm9wOnZpc2libGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBCYXJQcm9wOnZp
c2libGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Jhcl9wcm9wX2luaXQoV2Vi
S2l0RE9NQmFyUHJvcCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01CYXJQcm9wUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fQkFSX1BST1BfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3
IChwcml2KSBXZWJLaXRET01CYXJQcm9wUHJpdmF0ZSgpOworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX2Jhcl9wcm9wX2dldF92aXNpYmxlKFdlYktpdERPTUJhclByb3AqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfQkFSX1BST1Aoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpCYXJQcm9wKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPnZpc2libGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUJhclByb3AuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE2MDIwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhclByb3AuaApA
QCAtMCwwICsxLDY0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTUJhclByb3BfaAorI2RlZmluZSBXZWJLaXRET01CYXJQcm9wX2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCAgICAgICAgICAgICh3ZWJraXRfZG9tX2Jhcl9w
cm9wX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fQkFSX1BST1Aob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0JB
Ul9QUk9QLCBXZWJLaXRET01CYXJQcm9wKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9CQVJfUFJPUF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfQkFSX1BST1AsIFdlYktpdERPTUJhclByb3BDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19CQVJfUFJPUChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1ApKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0JBUl9QUk9QX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCkpCisjZGVmaW5lIFdFQktJVF9ET01fQkFSX1BST1Bf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX0JBUl9QUk9QLCBXZWJLaXRET01CYXJQcm9wQ2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTUJhclByb3AgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTUJhclByb3BDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9i
YXJfcHJvcF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Jhcl9wcm9wX2dl
dF92aXNpYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUJhclByb3AKKyAqCisgKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2RvbV9iYXJfcHJvcF9nZXRfdmlzaWJsZShXZWJLaXRET01CYXJQ
cm9wKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUJhclByb3BfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5vZGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhclByb3BQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRl
eCA3NSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE5vZGVQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcFBy
aXZhdGUuaAppbmRleCBmNDliYTVkLi41OWVlZDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUJhclByb3BQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE5v
ZGVQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE5vZGVQcml2YXRlX2gKKyNpZm5kZWYg
V2ViS2l0RE9NQmFyUHJvcFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01CYXJQcm9wUHJpdmF0
ZV9oCiAKLSNpbmNsdWRlICJUZXN0Tm9kZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01UZXN0Tm9kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQmFyUHJvcC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01CYXJQcm9wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0
RE9NVGVzdE5vZGUqIHdyYXBUZXN0Tm9kZShXZWJDb3JlOjpUZXN0Tm9kZSopOwotV2ViS2l0RE9N
VGVzdE5vZGUqIGtpdChXZWJDb3JlOjpUZXN0Tm9kZSopOwotV2ViQ29yZTo6VGVzdE5vZGUqIGNv
cmUoV2ViS2l0RE9NVGVzdE5vZGUqKTsKK1dlYktpdERPTUJhclByb3AqIHdyYXBCYXJQcm9wKFdl
YkNvcmU6OkJhclByb3AqKTsKK1dlYktpdERPTUJhclByb3AqIGtpdChXZWJDb3JlOjpCYXJQcm9w
Kik7CitXZWJDb3JlOjpCYXJQcm9wKiBjb3JlKFdlYktpdERPTUJhclByb3AqKTsKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE5vZGVQcml2YXRlX2ggKi8K
KyNlbmRpZiAvKiBXZWJLaXRET01CYXJQcm9wUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUJhdHRlcnlNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTJkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUJhdHRlcnlNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUJh
dHRlcnlNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2Rl
ZmluZSBXRUJLSVRfRE9NX0JBVFRFUllfTUFOQUdFUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9CQVRURVJZX01BTkFHRVIs
IFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZSB7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQor
ICAgIFJlZlB0cjxXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcj4gY29yZU9iamVjdDsKKyNlbmRpZiAv
LyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCit9IFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0
ZTsKKworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiBraXQoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqIG9i
aikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50
ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lU
X0RPTV9CQVRURVJZX01BTkFHRVIocmV0KTsKKworICAgIHJldHVybiB3cmFwQmF0dGVyeU1hbmFn
ZXIob2JqKTsKK30KKworV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqIGNvcmUoV2ViS2l0RE9NQmF0
dGVyeU1hbmFnZXIqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiB3cmFwQmF0dGVy
eU1hbmFnZXIoV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqIGNvcmVPYmplY3QpCit7CisgICAgQVNT
RVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0JBVFRFUllfTUFOQUdFUihn
X29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0JBVFRFUllfTUFOQUdFUiwgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fYmF0dGVyeV9tYW5hZ2VyX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYg
RU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBX
ZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsK
KyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkJhdHRlcnkgU3RhdHVzIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5B
QkxFKEJBVFRFUllfU1RBVFVTKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9iYXR0
ZXJ5X21hbmFnZXJfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIFdlYkNvcmU6OkJh
dHRlcnlNYW5hZ2VyKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmF0dGVyeU1h
bmFnZXIqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnRO
YW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNh
cHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkJhdHRlcnkgU3Rh
dHVzIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVT
KQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisj
aWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBV
TlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkJhdHRlcnkgU3RhdHVzIikKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
YmF0dGVyeV9tYW5hZ2VyX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlz
dGVuZXIgPSB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9hZGRfZXZlbnRfbGlzdGVuZXI7Cisg
ICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fYmF0dGVyeV9tYW5h
Z2VyX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIsIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyLCBXRUJL
SVRfRE9NX1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBF
X0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX0NIQVJHSU5HLAorICAgIFBST1BfQ0hBUkdJTkdfVElNRSwK
KyAgICBQUk9QX0RJU0NIQVJHSU5HX1RJTUUsCisgICAgUFJPUF9MRVZFTCwKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX0JBVFRFUllfTUFOQUdFUl9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShCQVRU
RVJZX1NUQVRVUykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIHBy
aXYtPn5XZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciogc2VsZiA9
IFdFQktJVF9ET01fQkFUVEVSWV9NQU5BR0VSKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0hBUkdJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9jaGFyZ2luZyhzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSEFSR0lOR19USU1FOgorICAgICAg
ICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dl
dF9jaGFyZ2luZ190aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJ
U0NIQVJHSU5HX1RJTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0
X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2Rpc2NoYXJnaW5nX3RpbWUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTEVWRUw6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJs
ZSh2YWx1ZSwgd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2xldmVsKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9j
b25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdP
YmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0
KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNv
bnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBXZWJL
aXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0JBVFRFUllfTUFO
QUdFUl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCkt
PmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykK
KyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2JhdHRlcnlf
bWFuYWdlcl9jbGFzc19pbml0KFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyQ2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFz
cywgc2l6ZW9mKFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZSkpOworICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9jb25zdHJ1Y3Rv
cjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFn
ZXJfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X2JhdHRlcnlfbWFuYWdlcl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hBUkdJ
TkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNoYXJnaW5n
IiwKKyAgICAgICAgICAgICJCYXR0ZXJ5TWFuYWdlcjpjaGFyZ2luZyIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdib29sZWFuIEJhdHRlcnlNYW5hZ2VyOmNoYXJnaW5nIiwKKyAgICAgICAgICAg
IEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQ0hBUkdJTkdfVElNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAg
ICAgICAgICAgICJjaGFyZ2luZy10aW1lIiwKKyAgICAgICAgICAgICJCYXR0ZXJ5TWFuYWdlcjpj
aGFyZ2luZy10aW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBCYXR0ZXJ5TWFu
YWdlcjpjaGFyZ2luZy10aW1lIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VC
TEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9ESVNDSEFSR0lOR19USU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAor
ICAgICAgICAgICAgImRpc2NoYXJnaW5nLXRpbWUiLAorICAgICAgICAgICAgIkJhdHRlcnlNYW5h
Z2VyOmRpc2NoYXJnaW5nLXRpbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEJh
dHRlcnlNYW5hZ2VyOmRpc2NoYXJnaW5nLXRpbWUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxF
LCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0xFVkVMLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAor
ICAgICAgICAgICAgImxldmVsIiwKKyAgICAgICAgICAgICJCYXR0ZXJ5TWFuYWdlcjpsZXZlbCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgQmF0dGVyeU1hbmFnZXI6bGV2ZWwiLAor
ICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYmF0
dGVyeV9tYW5hZ2VyX2luaXQoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqIHJlcXVlc3QpCit7Cisg
ICAgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9CQVRU
RVJZX01BTkFHRVJfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRE
T01CYXR0ZXJ5TWFuYWdlclByaXZhdGUoKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9iYXR0
ZXJ5X21hbmFnZXJfZ2V0X2NoYXJnaW5nKFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiBzZWxmKQor
eworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19C
QVRURVJZX01BTkFHRVIoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdl
ciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5jaGFyZ2luZygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJCYXR0ZXJ5IFN0
YXR1cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9iYXR0ZXJ5
X21hbmFnZXJfZ2V0X2NoYXJnaW5nX3RpbWUoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0JBVFRFUllfTUFOQUdFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5j
aGFyZ2luZ1RpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQmF0dGVyeSBT
dGF0dXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9iYXR0ZXJ5
X21hbmFnZXJfZ2V0X2Rpc2NoYXJnaW5nX3RpbWUoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqIHNl
bGYpCit7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0JBVFRFUllfTUFOQUdFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QmF0dGVyeU1hbmFn
ZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVt
LT5kaXNjaGFyZ2luZ1RpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQmF0
dGVyeSBTdGF0dXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9i
YXR0ZXJ5X21hbmFnZXJfZ2V0X2xldmVsKFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiBzZWxmKQor
eworI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19C
QVRURVJZX01BTkFHRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+bGV2
ZWwoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQmF0dGVyeSBTdGF0dXMiKQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQmF0dGVyeU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lNzVhZGYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlci5oCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NQmF0dGVyeU1hbmFnZXJfaAorI2RlZmluZSBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcl9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQkFUVEVSWV9NQU5BR0VSICAgICAgICAgICAg
KHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fQkFUVEVSWV9NQU5BR0VSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9CQVRURVJZX01BTkFHRVIsIFdlYktpdERPTUJh
dHRlcnlNYW5hZ2VyKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9CQVRURVJZX01BTkFHRVJfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0JBVFRFUllfTUFOQUdFUiwgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19CQVRURVJZX01BTkFHRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0JBVFRFUllfTUFOQUdFUikp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfQkFUVEVSWV9NQU5BR0VSX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9CQVRURVJZX01B
TkFHRVIpKQorI2RlZmluZSBXRUJLSVRfRE9NX0JBVFRFUllfTUFOQUdFUl9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQkFU
VEVSWV9NQU5BR0VSLCBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlckNsYXNzKSkKKworc3RydWN0IF9X
ZWJLaXRET01CYXR0ZXJ5TWFuYWdlciB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJDbGFzcyB7CisgICAg
V2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2NoYXJnaW5nOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUJhdHRlcnlNYW5hZ2VyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21fYmF0dGVyeV9tYW5hZ2VyX2dldF9jaGFyZ2luZyhXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2NoYXJnaW5n
X3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIKKyAqCisgKiBSZXR1
cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdkb3VibGUKK3dlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9jaGFyZ2luZ190aW1l
KFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Jh
dHRlcnlfbWFuYWdlcl9nZXRfZGlzY2hhcmdpbmdfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01CYXR0ZXJ5TWFuYWdlcgorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9iYXR0
ZXJ5X21hbmFnZXJfZ2V0X2Rpc2NoYXJnaW5nX3RpbWUoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9sZXZlbDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcgorICoKKyAqIFJldHVybnM6IEEg
I2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Rv
dWJsZQord2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2xldmVsKFdlYktpdERPTUJhdHRl
cnlNYW5hZ2VyKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhdHRl
cnlNYW5hZ2VyUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4
M2Y0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZS5oCkBA
IC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQmF0dGVy
eU1hbmFnZXJQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvQmF0dGVyeU1hbmFnZXIuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuaD4KKyNpZiBFTkFC
TEUoQkFUVEVSWV9TVEFUVVMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NQmF0dGVy
eU1hbmFnZXIqIHdyYXBCYXR0ZXJ5TWFuYWdlcihXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlciopOwor
V2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqIGtpdChXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlciopOwor
V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqIGNvcmUoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqKTsK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKEJBVFRFUllfU1RBVFVT
KSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQmxvYi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZmZmViMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2Iu
Y3BwCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQmxvYi5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTUJsb2JQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01CbG9iVW5z
dGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCisjZGVmaW5lIFdFQktJVF9ET01fQkxPQl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9CTE9CLCBXZWJLaXRET01CbG9i
UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUJsb2JQcml2YXRlIHsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6QmxvYj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NQmxvYlByaXZhdGU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01CbG9iKiBraXQoV2ViQ29yZTo6Qmxv
Yiogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX0JMT0IocmV0KTsKKworICAgIHJldHVybiB3cmFwKG9iaik7Cit9CisKK1dlYkNv
cmU6OkJsb2IqIGNvcmUoV2ViS2l0RE9NQmxvYiogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJsb2IqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01CbG9iKiB3cmFwQmxvYihXZWJD
b3JlOjpCbG9iKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9CTE9CKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQkxPQiwg
ImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01CbG9iLCB3ZWJraXRfZG9tX2Jsb2Is
IFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9Q
X1NJWkUsCisgICAgUFJPUF9UWVBFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ibG9i
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01CbG9iUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fQkxPQl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAg
cHJpdi0+fldlYktpdERPTUJsb2JQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV9ibG9iX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fYmxvYl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01CbG9iKiBzZWxmID0gV0VCS0lUX0RPTV9CTE9CKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX2Jsb2JfZ2V0X3NpemUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9ibG9iX2dldF9ibG9iX3R5cGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fYmxvYl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBl
LCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSog
Y29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX2Jsb2JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29u
c3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktp
dERPTUJsb2JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9CTE9CX0dFVF9QUklWQVRFKG9iamVj
dCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJsb2IqPihX
RUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYmxvYl9jbGFzc19pbml0
KFdlYktpdERPTUJsb2JDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQmxvYlByaXZh
dGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9ibG9iX2Nv
bnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2Jsb2Jf
ZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2Js
b2JfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NJWkUsCisgICAgICAgIGdfcGFy
YW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAic2l6ZSIsCisgICAgICAgICAgICAiQmxvYjpz
aXplIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBCbG9iOnNpemUiLAorICAgICAg
ICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkJsb2I6dHlwZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBCbG9iOnR5cGUiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2Jsb2JfaW5pdChXZWJLaXRET01CbG9iKiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTUJsb2JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9CTE9CX0dFVF9QUklWQVRFKHJlcXVl
c3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NQmxvYlByaXZhdGUoKTsKK30KKworV2ViS2l0
RE9NQmxvYiogd2Via2l0X2RvbV9ibG9iX3NsaWNlKFdlYktpdERPTUJsb2IqIHNlbGYsIGdpbnQ2
NCBzdGFydCwgZ2ludDY0IGVuZCwgY29uc3QgZ2NoYXIqIGNvbnRlbnRUeXBlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0JMT0Ioc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNvbnRlbnRUeXBlLCAwKTsKKyAgICBXZWJDb3JlOjpCbG9iKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZENvbnRlbnRUeXBlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KGNvbnRlbnRUeXBlKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QmxvYj4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNsaWNlKHN0YXJ0LCBlbmQsIGNvbnZl
cnRlZENvbnRlbnRUeXBlKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitndWludDY0IHdlYmtpdF9kb21fYmxvYl9nZXRfc2l6ZShXZWJLaXRET01C
bG9iKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0JMT0Ioc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkJsb2IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2
NCByZXN1bHQgPSBpdGVtLT5zaXplKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21fYmxvYl9nZXRfYmxvYl90eXBlKFdlYktpdERPTUJsb2IqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQkxPQihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Qmxv
YiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQmxvYi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWNjMTRjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxvYi5oCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQp
CisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUJsb2JfaAorI2RlZmluZSBXZWJL
aXRET01CbG9iX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQkxPQiAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2Jsb2JfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9CTE9CKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9CTE9CLCBXZWJLaXRET01CbG9iKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9CTE9CX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9CTE9CLCBXZWJLaXRET01CbG9iQ2xhc3MpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfQkxPQihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfQkxPQikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQkxPQl9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfQkxPQikpCisjZGVmaW5lIFdFQktJVF9ET01fQkxPQl9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQkxPQiwgV2Vi
S2l0RE9NQmxvYkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01CbG9iIHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01CbG9iQ2xh
c3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fYmxvYl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2Jsb2JfZ2V0X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQmxvYgorICoK
KyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRf
ZG9tX2Jsb2JfZ2V0X3NpemUoV2ViS2l0RE9NQmxvYiogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01CbG9iX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5UHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01CbG9iUHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRv
bmx5UHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2JQcml2YXRlLmgKaW5kZXggZTc2NTkxYS4u
MDhiMTJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHlQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iUHJpdmF0
ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqLwogCi0jaWZuZGVmIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktp
dERPTXJlYWRvbmx5UHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUJsb2JQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NQmxvYlByaXZhdGVfaAogCi0jaW5jbHVkZSAicmVhZG9ubHkuaCIKLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NcmVhZG9ubHkuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Jsb2IuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQmxvYi5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKLVdlYktpdERPTXJlYWRvbmx5KiB3cmFwcmVhZG9ubHkoV2ViQ29yZTo6cmVh
ZG9ubHkqKTsKLVdlYktpdERPTXJlYWRvbmx5KiBraXQoV2ViQ29yZTo6cmVhZG9ubHkqKTsKLVdl
YkNvcmU6OnJlYWRvbmx5KiBjb3JlKFdlYktpdERPTXJlYWRvbmx5Kik7CitXZWJLaXRET01CbG9i
KiB3cmFwQmxvYihXZWJDb3JlOjpCbG9iKik7CitXZWJLaXRET01CbG9iKiBraXQoV2ViQ29yZTo6
QmxvYiopOworV2ViQ29yZTo6QmxvYiogY29yZShXZWJLaXRET01CbG9iKik7CiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0ZV9oICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NQmxvYlByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2JVbnN0YWJsZS5o
CnNpbWlsYXJpdHkgaW5kZXggNTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2JVbnN0YWJsZS5oCmluZGV4
IGUyZjQxMjMuLmY0NDEwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0
aFNlcXVlbmNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxvYlVuc3RhYmxlLmgKQEAgLTE4LDE2ICsx
OCw0MiBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYg
V2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlX2gK
LSNkZWZpbmUgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQ
cml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NQmxvYlVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NQmxvYlVuc3RhYmxlX2gKIAotI2luY2x1ZGUgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmg+CisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIHdyYXBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZShXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZSopOwotV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIGtp
dChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSopOwotV2Vi
Q29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIGNvcmUoV2ViS2l0
RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqKTsKLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZVByaXZhdGVfaCAqLworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21f
YmxvYl9zbGljZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01CbG9iCisgKiBAc3RhcnQ6IEEgI2dp
bnQ2NAorICogQGVuZDogQSAjZ2ludDY0CisgKiBAY29udGVudFR5cGU6IEEgI2djaGFyCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01CbG9iCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUJsb2IqCit3ZWJraXRf
ZG9tX2Jsb2Jfc2xpY2UoV2ViS2l0RE9NQmxvYiogc2VsZiwgZ2ludDY0IHN0YXJ0LCBnaW50NjQg
ZW5kLCBjb25zdCBnY2hhciogY29udGVudFR5cGUpOworCisvKioKKyAqIHdlYmtpdF9kb21fYmxv
Yl9nZXRfYmxvYl90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUJsb2IKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21fYmxvYl9nZXRfYmxvYl90eXBlKFdlYktpdERPTUJsb2IqIHNl
bGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01CbG9iVW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01DREFUQVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjEwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNEQVRBU2VjdGlvbi5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01D
REFUQVNlY3Rpb24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTUNEQVRBU2VjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NQ0RBVEFTZWN0aW9uKiBraXQoV2ViQ29yZTo6Q0RBVEFTZWN0aW9uKiBvYmopCit7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fQ0RBVEFfU0VDVElPTihraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6Q0RBVEFTZWN0aW9uKiBjb3JlKFdlYktpdERP
TUNEQVRBU2VjdGlvbiogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkNEQVRBU2VjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUNEQVRBU2VjdGlvbiogd3JhcENEQVRBU2Vj
dGlvbihXZWJDb3JlOjpDREFUQVNlY3Rpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0NEQVRBX1NFQ1RJT04oZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9DREFUQV9TRUNUSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7
CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3Jl
OjpDREFUQVNlY3Rpb24qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDREFUQVNl
Y3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVU
YXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFt
ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2NkYXRhX3NlY3Rpb25fYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6Q0RBVEFTZWN0aW9uKiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q0RBVEFTZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21fY2RhdGFfc2VjdGlvbl9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpDREFUQVNlY3Rpb24qIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDREFUQVNlY3Rpb24qPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2Uq
IGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fY2RhdGFf
c2VjdGlvbl9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX3JlbW92ZV9l
dmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NQ0RB
VEFTZWN0aW9uLCB3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb24sIFdFQktJVF9ET01fVFlQRV9URVhU
LCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY2Rh
dGFfc2VjdGlvbl9jbGFzc19pbml0KFdlYktpdERPTUNEQVRBU2VjdGlvbkNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3RDbGFzcyk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fY2RhdGFfc2VjdGlvbl9pbml0KFdlYktpdERPTUNEQVRBU2VjdGlvbiog
cmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQ0RBVEFTZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNEQVRBU2VjdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5M2Y1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNE
QVRBU2VjdGlvbi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUNEQVRB
U2VjdGlvbl9oCisjZGVmaW5lIFdlYktpdERPTUNEQVRBU2VjdGlvbl9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXh0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9DREFUQV9TRUNUSU9OICAgICAgICAgICAgKHdlYmtpdF9k
b21fY2RhdGFfc2VjdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NEQVRBX1NF
Q1RJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0NEQVRBX1NFQ1RJT04sIFdlYktpdERPTUNEQVRBU2VjdGlvbikpCisj
ZGVmaW5lIFdFQktJVF9ET01fQ0RBVEFfU0VDVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ0RBVEFfU0VDVElPTiwg
V2ViS2l0RE9NQ0RBVEFTZWN0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ0RBVEFf
U0VDVElPTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfQ0RBVEFfU0VDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ0RB
VEFfU0VDVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfQ0RBVEFfU0VDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fQ0RB
VEFfU0VDVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfQ0RBVEFfU0VDVElPTiwgV2ViS2l0RE9NQ0RBVEFTZWN0aW9u
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUNEQVRBU2VjdGlvbiB7CisgICAgV2ViS2l0RE9N
VGV4dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUNEQVRBU2VjdGlv
bkNsYXNzIHsKKyAgICBXZWJLaXRET01UZXh0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2dldF90eXBlKHZvaWQpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NQ0RBVEFTZWN0aW9uX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uUHJpdmF0ZS5o
CnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUuaApyZW5h
bWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DREFUQVNlY3Rpb25Qcml2YXRlLmgKaW5kZXggMjVkMDU1ZC4uZDBjMGY4MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uUHJp
dmF0ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGVfaAotI2RlZmlu
ZSBXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NQ0RBVEFT
ZWN0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUNEQVRBU2VjdGlvblByaXZhdGVfaAog
Ci0jaW5jbHVkZSAiVGVzdFR5cGVkZWZzLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TVRlc3RUeXBlZGVmcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ0RBVEFTZWN0aW9uLmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNEQVRBU2VjdGlvbi5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLVdlYktpdERPTVRlc3RUeXBlZGVmcyogd3JhcFRlc3RUeXBlZGVmcyhXZWJDb3JlOjpU
ZXN0VHlwZWRlZnMqKTsKLVdlYktpdERPTVRlc3RUeXBlZGVmcyoga2l0KFdlYkNvcmU6OlRlc3RU
eXBlZGVmcyopOwotV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBjb3JlKFdlYktpdERPTVRlc3RUeXBl
ZGVmcyopOworV2ViS2l0RE9NQ0RBVEFTZWN0aW9uKiB3cmFwQ0RBVEFTZWN0aW9uKFdlYkNvcmU6
OkNEQVRBU2VjdGlvbiopOworV2ViS2l0RE9NQ0RBVEFTZWN0aW9uKiBraXQoV2ViQ29yZTo6Q0RB
VEFTZWN0aW9uKik7CitXZWJDb3JlOjpDREFUQVNlY3Rpb24qIGNvcmUoV2ViS2l0RE9NQ0RBVEFT
ZWN0aW9uKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRl
c3RUeXBlZGVmc1ByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUNEQVRBU2VjdGlvblBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZGMxYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQ1NTUnVsZS5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01DU1NSdWxlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NQ1NTUnVsZVVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX0NTU19SVUxFLCBXZWJLaXRET01DU1NSdWxlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUNTU1J1bGVQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZT4g
Y29yZU9iamVjdDsKK30gV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJLaXRET01DU1NSdWxlKiBraXQoV2ViQ29yZTo6Q1NTUnVsZSogb2JqKQorewor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0NT
U19SVUxFKHJldCk7CisKKyAgICByZXR1cm4gd3JhcENTU1J1bGUob2JqKTsKK30KKworV2ViQ29y
ZTo6Q1NTUnVsZSogY29yZShXZWJLaXRET01DU1NSdWxlKiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q1NTUnVsZSo+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUNTU1J1bGUqIHdy
YXBDU1NSdWxlKFdlYkNvcmU6OkNTU1J1bGUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0NTU19SVUxFKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NQ1NTUnVsZSwgd2Via2l0X2RvbV9jc3NfcnVsZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX0NTU19URVhU
LAorICAgIFBST1BfUEFSRU5UX1NUWUxFX1NIRUVULAorICAgIFBST1BfUEFSRU5UX1JVTEUsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRET01DU1NSdWxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
Q1NTX1JVTEVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRE
T01DU1NSdWxlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fY3NzX3J1
bGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9jc3NfcnVsZV9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01DU1NSdWxlKiBzZWxmID0gV0VCS0lUX0RPTV9DU1NfUlVMRShvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NTU19URVhUOgorICAgICAg
ICB3ZWJraXRfZG9tX2Nzc19ydWxlX3NldF9jc3NfdGV4dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fY3NzX3J1bGVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NQ1NT
UnVsZSogc2VsZiA9IFdFQktJVF9ET01fQ1NTX1JVTEUob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3NldF91
aW50KHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9ydWxlX3R5cGUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1NTX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X2Nzc190ZXh0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVF9TVFlMRV9TSEVFVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wYXJl
bnRfc3R5bGVfc2hlZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFS
RU5UX1JVTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9j
c3NfcnVsZV9nZXRfcGFyZW50X3J1bGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdP
YmplY3QqIHdlYmtpdF9kb21fY3NzX3J1bGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVj
dFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9jc3NfcnVsZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9N
Q1NTUnVsZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0NTU19SVUxFX0dFVF9QUklWQVRFKG9i
amVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNTU1J1
bGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3J1bGVf
Y2xhc3NfaW5pdChXZWJLaXRET01DU1NSdWxlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktp
dERPTUNTU1J1bGVQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fY3NzX3J1bGVfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21fY3NzX3J1bGVfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX2Nzc19ydWxlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3Byb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAg
ICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkNTU1J1bGU6dHlwZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGd1c2hvcnQgQ1NTUnVsZTp0eXBlIiwKKyAgICAgICAgICAgIDAsIEdfTUFY
VUlOVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NTU19URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImNzcy10ZXh0IiwKKyAgICAgICAgICAgICJDU1NSdWxlOmNzcy10ZXh0IiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBDU1NSdWxlOmNzcy10ZXh0IiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1BBUkVOVF9TVFlMRV9TSEVFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJwYXJlbnQtc3R5bGUtc2hlZXQiLAorICAgICAgICAgICAgIkNTU1J1bGU6
cGFyZW50LXN0eWxlLXNoZWV0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQ1NT
U3R5bGVTaGVldCogQ1NTUnVsZTpwYXJlbnQtc3R5bGUtc2hlZXQiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0NTU19TVFlMRV9TSEVFVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBUkVOVF9SVUxFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBhcmVudC1ydWxlIiwKKyAgICAgICAgICAg
ICJDU1NSdWxlOnBhcmVudC1ydWxlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
Q1NTUnVsZSogQ1NTUnVsZTpwYXJlbnQtcnVsZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfQ1NTX1JVTEUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX2luaXQoV2ViS2l0RE9NQ1NTUnVsZSog
cmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01DU1NSdWxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fQ1NTX1JVTEVfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRE
T01DU1NSdWxlUHJpdmF0ZSgpOworfQorCitndXNob3J0IHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0
X3J1bGVfdHlwZShXZWJLaXRET01DU1NSdWxlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0NTU19SVUxFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NSdWxlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+dHlwZSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9j
c3NfdGV4dChXZWJLaXRET01DU1NSdWxlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0NTU19SVUxFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NSdWxlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmNzc1RleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2Nzc19ydWxlX3NldF9jc3NfdGV4dChXZWJLaXRET01DU1NSdWxlKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NT
X1JVTEUoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNTU1J1bGUqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGl0ZW0tPnNldENzc1RleHQoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9
CisKK1dlYktpdERPTUNTU1N0eWxlU2hlZXQqIHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3BhcmVu
dF9zdHlsZV9zaGVldChXZWJLaXRET01DU1NSdWxlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0NTU19SVUxFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NSdWxlKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NTdHlsZVNoZWV0
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGFyZW50U3R5bGVTaGVldCgpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktp
dERPTUNTU1J1bGUqIHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3BhcmVudF9ydWxlKFdlYktpdERP
TUNTU1J1bGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1JVTEUoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkNTU1J1bGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5wYXJlbnRSdWxlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1
bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzUyZGViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01DU1NSdWxlLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUNTU1J1bGVfaAorI2RlZmluZSBXZWJLaXRET01DU1NSdWxlX2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUgICAgICAgICAgICAod2Via2l0
X2RvbV9jc3NfcnVsZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9DU1NfUlVMRSwgV2ViS2l0RE9NQ1NTUnVsZSkpCisjZGVmaW5lIFdFQktJVF9ET01f
Q1NTX1JVTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFLCBXZWJLaXRET01DU1NSdWxlQ2xhc3MpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfQ1NTX1JVTEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19DU1NfUlVMRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0NTU19SVUxFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRSwgV2ViS2l0RE9NQ1NTUnVsZUNsYXNzKSkKKwor
LyoqCisgKiBXRUJLSVRfRE9NX0NTU19SVUxFX1VOS05PV05fUlVMRToKKyAqLworI2RlZmluZSBX
RUJLSVRfRE9NX0NTU19SVUxFX1VOS05PV05fUlVMRSAwCisKKy8qKgorICogV0VCS0lUX0RPTV9D
U1NfUlVMRV9TVFlMRV9SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfU1RZ
TEVfUlVMRSAxCisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9DSEFSU0VUX1JVTEU6Cisg
Ki8KKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9DSEFSU0VUX1JVTEUgMgorCisvKioKKyAq
IFdFQktJVF9ET01fQ1NTX1JVTEVfSU1QT1JUX1JVTEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9DU1NfUlVMRV9JTVBPUlRfUlVMRSAzCisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9N
RURJQV9SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfTUVESUFfUlVMRSA0
CisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9GT05UX0ZBQ0VfUlVMRToKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFX0ZPTlRfRkFDRV9SVUxFIDUKKworLyoqCisgKiBXRUJL
SVRfRE9NX0NTU19SVUxFX1BBR0VfUlVMRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19S
VUxFX1BBR0VfUlVMRSA2CisKK3N0cnVjdCBfV2ViS2l0RE9NQ1NTUnVsZSB7CisgICAgV2ViS2l0
RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NQ1NTUnVs
ZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3J1bGVfdHlwZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01DU1NSdWxlCisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorKiovCitXRUJLSVRf
QVBJIGd1c2hvcnQKK3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3J1bGVfdHlwZShXZWJLaXRET01D
U1NSdWxlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9jc3NfdGV4
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NSdWxlCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X2Nzc190
ZXh0KFdlYktpdERPTUNTU1J1bGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3J1
bGVfc2V0X2Nzc190ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1J1bGUKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2Nzc19ydWxlX3NldF9jc3NfdGV4dChXZWJLaXRET01DU1NSdWxlKiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2Nzc19ydWxlX2dldF9wYXJlbnRfc3R5bGVfc2hlZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NQ1NTUnVsZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9N
Q1NTU3R5bGVTaGVldAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNTU1N0eWxlU2hlZXQqCit3
ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wYXJlbnRfc3R5bGVfc2hlZXQoV2ViS2l0RE9NQ1NTUnVs
ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcGFyZW50X3J1bGU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTUnVsZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NTUnVsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNT
U1J1bGUqCit3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wYXJlbnRfcnVsZShXZWJLaXRET01DU1NS
dWxlKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUNTU1J1bGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjg1NjBlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01DU1NSdWxlTGlzdC5jcHAKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01DU1NSdWxlTGlzdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGVMaXN0UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGVQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5l
IFdFQktJVF9ET01fQ1NTX1JVTEVfTElTVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNULCBXZWJLaXRE
T01DU1NSdWxlTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NSdWxl
TGlzdFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlTGlzdD4gY29yZU9iamVj
dDsKK30gV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIGtpdChXZWJDb3JlOjpDU1NSdWxlTGlzdCogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X0NTU19SVUxFX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwQ1NTUnVsZUxpc3Qob2JqKTsK
K30KKworV2ViQ29yZTo6Q1NTUnVsZUxpc3QqIGNvcmUoV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDU1NS
dWxlTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTUNTU1J1bGVMaXN0KiB3cmFwQ1NTUnVsZUxpc3QoV2ViQ29yZTo6Q1NTUnVs
ZUxpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0NTU19SVUxFX0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9D
U1NfUlVMRV9MSVNULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUNTU1J1bGVM
aXN0LCB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfUlVM
RV9MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
Ojpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9N
Q1NTUnVsZUxpc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9jc3Nf
cnVsZV9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01DU1NSdWxlTGlzdCogc2VsZiA9IFdFQktJVF9ET01fQ1NTX1JVTEVfTElT
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xF
TkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fY3NzX3J1
bGVfbGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVy
dHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0
KiB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVj
dFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9jc3NfcnVsZV9saXN0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJL
aXRET01DU1NSdWxlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0NTU19SVUxFX0xJU1Rf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Q1NTUnVsZUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fY3NzX3J1bGVfbGlzdF9jbGFzc19pbml0KFdlYktpdERPTUNTU1J1bGVMaXN0Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZSkpOworICAg
IGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfY29u
c3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fY3NzX3J1
bGVfbGlzdF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fY3NzX3J1bGVfbGlzdF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVO
R1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwK
KyAgICAgICAgICAgICJDU1NSdWxlTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWxvbmcgQ1NTUnVsZUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfaW5pdChXZWJLaXRET01DU1NSdWxlTGlzdCog
cmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0NTU19SVUxFX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2
KSBXZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NQ1NTUnVsZSog
d2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2l0ZW0oV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIHNlbGYs
IGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfUlVMRV9MSVNU
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NSdWxlTGlzdCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZT4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3Rf
Z2V0X2xlbmd0aChXZWJLaXRET01DU1NSdWxlTGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19DU1NfUlVMRV9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NSdWxl
TGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRl
bS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01D
U1NSdWxlTGlzdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmFiZjA3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0
LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
ICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dF
QktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVk
ZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTUnVsZUxpc3RfaAor
I2RlZmluZSBXZWJLaXRET01DU1NSdWxlTGlzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV9jc3NfcnVs
ZV9saXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfTElTVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfQ1NTX1JVTEVfTElTVCwgV2ViS2l0RE9NQ1NTUnVsZUxpc3QpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0NTU19SVUxFX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QsIFdlYktpdERPTUNT
U1J1bGVMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ1NTX1JVTEVfTElTVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfQ1NTX1JVTEVfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ1NTX1JVTEVfTElTVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfQ1NTX1JVTEVfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfTElTVF9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
RE9NX1RZUEVfQ1NTX1JVTEVfTElTVCwgV2ViS2l0RE9NQ1NTUnVsZUxpc3RDbGFzcykpCisKK3N0
cnVjdCBfV2ViS2l0RE9NQ1NTUnVsZUxpc3QgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRf
aW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUNTU1J1bGVMaXN0Q2xhc3MgeworICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NS
dWxlTGlzdAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTUNTU1J1bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01DU1NS
dWxlKgord2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2l0ZW0oV2ViS2l0RE9NQ1NTUnVsZUxpc3Qq
IHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0
X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTUnVsZUxpc3QKKyAqCisgKiBS
ZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fY3Nz
X3J1bGVfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTUNTU1J1bGVMaXN0KiBzZWxmKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUNTU1J1bGVMaXN0X2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MDY1ZmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTUnVsZUxpc3RQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTUnVsZUxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
Q1NTUnVsZUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01DU1NSdWxlTGlz
dCogd3JhcENTU1J1bGVMaXN0KFdlYkNvcmU6OkNTU1J1bGVMaXN0Kik7CitXZWJLaXRET01DU1NS
dWxlTGlzdCoga2l0KFdlYkNvcmU6OkNTU1J1bGVMaXN0Kik7CitXZWJDb3JlOjpDU1NSdWxlTGlz
dCogY29yZShXZWJLaXRET01DU1NSdWxlTGlzdCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NYXR0
cmlidXRlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlUHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXgg
NzQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlUHJp
dmF0ZS5oCmluZGV4IGRmZWIyZDYuLjNlODNkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUNTU1J1bGVQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NYXR0cmli
dXRlUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGVfaAorI2lmbmRl
ZiBXZWJLaXRET01DU1NSdWxlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUNTU1J1bGVQcml2
YXRlX2gKIAotI2luY2x1ZGUgImF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01hdHRyaWJ1dGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NTU1J1bGUuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NQ1NTUnVsZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdl
YktpdERPTWF0dHJpYnV0ZSogd3JhcGF0dHJpYnV0ZShXZWJDb3JlOjphdHRyaWJ1dGUqKTsKLVdl
YktpdERPTWF0dHJpYnV0ZSoga2l0KFdlYkNvcmU6OmF0dHJpYnV0ZSopOwotV2ViQ29yZTo6YXR0
cmlidXRlKiBjb3JlKFdlYktpdERPTWF0dHJpYnV0ZSopOworV2ViS2l0RE9NQ1NTUnVsZSogd3Jh
cENTU1J1bGUoV2ViQ29yZTo6Q1NTUnVsZSopOworV2ViS2l0RE9NQ1NTUnVsZSoga2l0KFdlYkNv
cmU6OkNTU1J1bGUqKTsKK1dlYkNvcmU6OkNTU1J1bGUqIGNvcmUoV2ViS2l0RE9NQ1NTUnVsZSop
OwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRET01hdHRyaWJ1dGVQ
cml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01DU1NSdWxlUHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUNTU1J1bGVVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlVW5zdGFibGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjVhYjgyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DU1NSdWxlVW5zdGFibGUuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUNTU1J1bGVVbnN0YWJsZV9o
CisjZGVmaW5lIFdlYktpdERPTUNTU1J1bGVVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
LXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19S
VUxFX0tFWUZSQU1FU19SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfS0VZ
RlJBTUVTX1JVTEUgNworCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfS0VZRlJBTUVfUlVM
RToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFX0tFWUZSQU1FX1JVTEUgOAorCisv
KioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfU1VQUE9SVFNfUlVMRToKKyAqLworI2RlZmluZSBX
RUJLSVRfRE9NX0NTU19SVUxFX1NVUFBPUlRTX1JVTEUgMTIKKworLyoqCisgKiBXRUJLSVRfRE9N
X0NTU19SVUxFX1dFQktJVF9SRUdJT05fUlVMRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NT
U19SVUxFX1dFQktJVF9SRUdJT05fUlVMRSAxNgorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1JV
TEVfV0VCS0lUX0tFWUZSQU1FU19SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JV
TEVfV0VCS0lUX0tFWUZSQU1FU19SVUxFIDcKKworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19SVUxF
X1dFQktJVF9LRVlGUkFNRV9SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVf
V0VCS0lUX0tFWUZSQU1FX1JVTEUgOAorCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01DU1NSdWxlVW5z
dGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZTJiZjI2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bi5jcHAKQEAgLTAsMCArMSwzMDggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9N
X0NTU19TVFlMRV9ERUNMQVJBVElPTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJT04sIFdl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpD
U1NTdHlsZURlY2xhcmF0aW9uPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24qIGtpdChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBvYmopCit7Cisg
ICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9
IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fQ1NT
X1NUWUxFX0RFQ0xBUkFUSU9OKHJldCk7CisKKyAgICByZXR1cm4gd3JhcENTU1N0eWxlRGVjbGFy
YXRpb24ob2JqKTsKK30KKworV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogY29yZShXZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbio+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24qIHdyYXBDU1NTdHlsZURlY2xhcmF0aW9uKFdlYkNvcmU6OkNTU1N0eWxlRGVj
bGFyYXRpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElPTihnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX0NTU19TVFlMRV9ERUNMQVJBVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNs
YXJhdGlvbiwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfQ1NTX1RFWFQsCisgICAgUFJPUF9MRU5HVEgsCisgICAgUFJPUF9QQVJFTlRfUlVM
RSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvblByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2Nzc19zdHls
ZV9kZWNsYXJhdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxm
ID0gV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT04ob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DU1NfVEVYVDoKKyAgICAgICAgd2Via2l0
X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X2Nzc190ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiA9IFdFQktJVF9ET01fQ1NT
X1NUWUxFX0RFQ0xBUkFUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfQ1NTX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9jc3NfdGV4dChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVf
c2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfbGVu
Z3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVF9SVUxFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fY3NzX3N0eWxlX2Rl
Y2xhcmF0aW9uX2dldF9wYXJlbnRfcnVsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
R09iamVjdCogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0
KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmpl
Y3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9j
c3Nfc3R5bGVfZGVjbGFyYXRpb25fY2xhc3NfaW5pdChXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Q
cml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fY3Nz
X3N0eWxlX2RlY2xhcmF0aW9uX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9maW5hbGl6ZTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9u
X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9DU1NfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJj
c3MtdGV4dCIsCisgICAgICAgICAgICAiQ1NTU3R5bGVEZWNsYXJhdGlvbjpjc3MtdGV4dCIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogQ1NTU3R5bGVEZWNsYXJhdGlvbjpjc3MtdGV4
dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9u
ZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkNTU1N0eWxlRGVjbGFyYXRp
b246bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIENTU1N0eWxlRGVjbGFy
YXRpb246bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVJFTlRfUlVM
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwYXJlbnQtcnVs
ZSIsCisgICAgICAgICAgICAiQ1NTU3R5bGVEZWNsYXJhdGlvbjpwYXJlbnQtcnVsZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUNTU1J1bGUqIENTU1N0eWxlRGVjbGFyYXRpb246
cGFyZW50LXJ1bGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faW5pdChXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT05fR0VUX1BSSVZBVEUo
cmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJp
dmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0
X3Byb3BlcnR5X3ZhbHVlKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0
IGdjaGFyKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NU
WUxFX0RFQ0xBUkFUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwcm9w
ZXJ0eU5hbWUsIDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHJvcGVydHlOYW1l
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHByb3BlcnR5TmFtZSk7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0UHJvcGVydHlWYWx1ZShjb252ZXJ0ZWRQ
cm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2Rv
bV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fcmVtb3ZlX3Byb3BlcnR5KFdlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihz
ZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJvcGVydHlOYW1lLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29y
ZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
cHJvcGVydHlOYW1lKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5yZW1vdmVQcm9wZXJ0eShj
b252ZXJ0ZWRQcm9wZXJ0eU5hbWUsIGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9wcmlvcml0
eShXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVy
dHlOYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElP
TihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJvcGVydHlOYW1lLCAwKTsK
KyAgICBXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFByb3BlcnR5TmFtZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChwcm9wZXJ0eU5hbWUpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmdldFByb3BlcnR5UHJpb3JpdHkoY29udmVydGVkUHJvcGVydHlOYW1l
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9k
ZWNsYXJhdGlvbl9zZXRfcHJvcGVydHkoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlLCBjb25zdCBn
Y2hhciogcHJpb3JpdHksIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
Q1NTX1NUWUxFX0RFQ0xBUkFUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByb3Bl
cnR5TmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChwcmlvcml0eSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7
CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgocHJvcGVydHlOYW1lKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkUHJpb3JpdHkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocHJpb3JpdHkpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFByb3BlcnR5KGNvbnZlcnRl
ZFByb3BlcnR5TmFtZSwgY29udmVydGVkVmFsdWUsIGNvbnZlcnRlZFByaW9yaXR5LCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAg
fQorfQorCitnY2hhciogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faXRlbShXZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPml0ZW0oaW5kZXgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9jc3Nfc3R5bGVf
ZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3Nob3J0aGFuZChXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwocHJvcGVydHlOYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZURl
Y2xhcmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFByb3BlcnR5TmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwcm9wZXJ0eU5hbWUp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFByb3Bl
cnR5U2hvcnRoYW5kKGNvbnZlcnRlZFByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2lzX3Byb3Bl
cnR5X2ltcGxpY2l0KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdj
aGFyKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxF
X0RFQ0xBUkFUSU9OKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJv
cGVydHlOYW1lLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQcm9wZXJ0
eU5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocHJvcGVydHlOYW1lKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5pc1Byb3BlcnR5SW1wbGljaXQoY29udmVydGVkUHJvcGVydHlOYW1l
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9jc3Nfc3R5bGVf
ZGVjbGFyYXRpb25fZ2V0X2Nzc190ZXh0KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmNzc1RleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9zZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvcik7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+c2V0Q3NzVGV4dChjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ3Vsb25n
IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9sZW5ndGgoV2ViS2l0RE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1Nf
U1RZTEVfREVDTEFSQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFy
YXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUNTU1J1bGUq
IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wYXJlbnRfcnVsZShXZWJLaXRE
T01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0NTU19TVFlMRV9ERUNMQVJBVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6Q1NTUnVsZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBhcmVudFJ1bGUo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNTU2NzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24uaApAQCAtMCwwICsxLDE2
NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VC
S0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAi
T25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbl9oCisjZGVmaW5l
IFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJT04gICAgICAgICAgICAod2Via2l0X2Rv
bV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9D
U1NfU1RZTEVfREVDTEFSQVRJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9ERUNMQVJBVElPTiwgV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbikpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1NUWUxF
X0RFQ0xBUkFUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJT04sIFdlYktpdERPTUNT
U1N0eWxlRGVjbGFyYXRpb25DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVf
REVDTEFSQVRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9ERUNMQVJBVElPTikpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJ
T04pKQorI2RlZmluZSBXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElPTl9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
Q1NTX1NUWUxFX0RFQ0xBUkFUSU9OLCBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uQ2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24geworICAgIFdlYktpdERP
TU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb25DbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRp
b25fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFy
YXRpb25fZ2V0X3Byb3BlcnR5X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24KKyAqIEBwcm9wZXJ0eU5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2Rl
Y2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
KiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9yZW1vdmVfcHJvcGVydHk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorICogQHByb3BlcnR5TmFtZTogQSAjZ2NoYXIKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9yZW1vdmVfcHJvcGVy
dHkoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3Bl
cnR5TmFtZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxl
X2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9wcmlvcml0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01DU1NTdHlsZURlY2xhcmF0aW9uCisgKiBAcHJvcGVydHlOYW1lOiBBICNnY2hhcgorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Nz
c19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfcHJpb3JpdHkoV2ViS2l0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X3Byb3BlcnR5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqIEBwcm9wZXJ0eU5hbWU6IEEg
I2djaGFyCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAcHJpb3JpdHk6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jc3Nf
c3R5bGVfZGVjbGFyYXRpb25fc2V0X3Byb3BlcnR5KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRp
b24qIHNlbGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIGNvbnN0IGdjaGFyKiB2YWx1ZSwg
Y29uc3QgZ2NoYXIqIHByaW9yaXR5LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01D
U1NTdHlsZURlY2xhcmF0aW9uCisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9k
ZWNsYXJhdGlvbl9pdGVtKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGd1bG9u
ZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0
X3Byb3BlcnR5X3Nob3J0aGFuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uCisgKiBAcHJvcGVydHlOYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJh
dGlvbl9nZXRfcHJvcGVydHlfc2hvcnRoYW5kKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24q
IHNlbGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
Y3NzX3N0eWxlX2RlY2xhcmF0aW9uX2lzX3Byb3BlcnR5X2ltcGxpY2l0OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqIEBwcm9wZXJ0eU5hbWU6IEEgI2djaGFy
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgor
d2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faXNfcHJvcGVydHlfaW1wbGljaXQoV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFt
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X2Nzc190
ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9jc3Nf
c3R5bGVfZGVjbGFyYXRpb25fZ2V0X2Nzc190ZXh0KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRp
b24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3Nl
dF9jc3NfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X2Nzc190ZXh0KFdl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vy
cm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9u
X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgor
ICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0
X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X2xlbmd0aChXZWJLaXRET01DU1NTdHlsZURl
Y2xhcmF0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJh
dGlvbl9nZXRfcGFyZW50X3J1bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NT
UnVsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNTU1J1bGUqCit3ZWJraXRfZG9tX2Nzc19z
dHlsZV9kZWNsYXJhdGlvbl9nZXRfcGFyZW50X3J1bGUoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01DU1NTdHls
ZURlY2xhcmF0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA2OCUK
cmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NT
dHlsZURlY2xhcmF0aW9uUHJpdmF0ZS5oCmluZGV4IDEwYTUxZGQuLmM4MDhkMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uUHJpdmF0ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2
YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGVfaAorI2lm
bmRlZiBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlX2gKIAotI2luY2x1ZGUgIlRlc3RBY3RpdmVE
T01PYmplY3QuaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9i
amVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogd3JhcFRlc3RBY3RpdmVE
T01PYmplY3QoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCopOwotV2ViS2l0RE9NVGVzdEFj
dGl2ZURPTU9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqKTsKLVdlYkNv
cmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGNvcmUoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVj
dCopOworV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogd3JhcENTU1N0eWxlRGVjbGFyYXRp
b24oV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiopOworV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbioga2l0KFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qKTsKK1dlYkNvcmU6OkNT
U1N0eWxlRGVjbGFyYXRpb24qIGNvcmUoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0UHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
blByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZVNoZWV0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Q1NTU3R5bGVTaGVldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3
YWMxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVTaGVldC5jcHAKQEAgLTAsMCAr
MSwyMjAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01DU1NTdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NQ1NTUnVsZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTUnVsZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHlsZVNoZWV0UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCoga2l0KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIG9i
aikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DU1NfU1RZTEVfU0hFRVQoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6OlN0eWxlU2hlZXQqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkNTU1N0eWxl
U2hlZXQqIGNvcmUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqPihXRUJLSVRf
RE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01DU1NT
dHlsZVNoZWV0KiB3cmFwQ1NTU3R5bGVTaGVldChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9DU1NfU1RZTEVfU0hFRVQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVf
U0hFRVQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCwg
d2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXQsIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfT1dORVJfUlVMRSwKKyAgICBQUk9QX0NT
U19SVUxFUywKKyAgICBQUk9QX1JVTEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9j
c3Nfc3R5bGVfc2hlZXRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9N
Q1NTU3R5bGVTaGVldCogc2VsZiA9IFdFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfT1dORVJfUlVMRToK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9z
aGVldF9nZXRfb3duZXJfcnVsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9DU1NfUlVMRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X2Nzc19ydWxlcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9SVUxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfcnVsZXMoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfY2xhc3NfaW5pdChXZWJL
aXRET01DU1NTdHlsZVNoZWV0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1dORVJfUlVMRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJvd25lci1ydWxlIiwKKyAgICAgICAgICAgICJD
U1NTdHlsZVNoZWV0Om93bmVyLXJ1bGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01DU1NSdWxlKiBDU1NTdHlsZVNoZWV0Om93bmVyLXJ1bGUiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0NTU19SVUxFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQ1NTX1JVTEVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgImNzcy1ydWxlcyIsCisgICAgICAgICAgICAiQ1NTU3R5bGVTaGVl
dDpjc3MtcnVsZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01DU1NSdWxlTGlz
dCogQ1NTU3R5bGVTaGVldDpjc3MtcnVsZXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X0NTU19SVUxFX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9SVUxFUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJydWxlcyIsCisgICAgICAgICAgICAiQ1NTU3R5bGVTaGVldDpydWxlcyIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUNTU1J1bGVMaXN0KiBDU1NTdHlsZVNoZWV0
OnJ1bGVzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfaW5pdChXZWJLaXRET01DU1NTdHlsZVNoZWV0KiByZXF1
ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ3Vsb25nIHdlYmtpdF9k
b21fY3NzX3N0eWxlX3NoZWV0X2luc2VydF9ydWxlKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNl
bGYsIGNvbnN0IGdjaGFyKiBydWxlLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9TSEVFVChzZWxmKSwgMCk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwocnVsZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUnVsZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChydWxlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+aW5zZXJ0UnVsZShjb252ZXJ0ZWRSdWxl
LCBpbmRleCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21fY3NzX3N0eWxlX3NoZWV0X2RlbGV0ZV9ydWxlKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNl
bGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19DU1NfU1RZTEVfU0hFRVQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+
ZGVsZXRlUnVsZShpbmRleCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2xvbmcgd2Via2l0X2RvbV9jc3Nfc3R5
bGVfc2hlZXRfYWRkX3J1bGUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZiwgY29uc3QgZ2No
YXIqIHNlbGVjdG9yLCBjb25zdCBnY2hhciogc3R5bGUsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX1NIRUVUKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxlY3RvciwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc3R5bGUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9yID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9yKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRT
dHlsZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHlsZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+YWRkUnVsZShjb252ZXJ0
ZWRTZWxlY3RvciwgY29udmVydGVkU3R5bGUsIGluZGV4LCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfcmVtb3ZlX3J1bGUo
V2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZiwgZ3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9TSEVFVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5yZW1vdmVSdWxlKGluZGV4LCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQor
CitXZWJLaXRET01DU1NSdWxlKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfb3duZXJf
cnVsZShXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0NTU19TVFlMRV9TSEVFVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NT
UnVsZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm93bmVyUnVsZSgpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERP
TUNTU1J1bGVMaXN0KiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfY3NzX3J1bGVzKFdl
YktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
Q1NTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlTGlz
dD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNzc1J1bGVzKCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQ1NT
UnVsZUxpc3QqIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9ydWxlcyhXZWJLaXRET01D
U1NTdHlsZVNoZWV0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlM
RV9TSEVFVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVTaGVldCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZUxpc3Q+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5ydWxlcygpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5
bGVTaGVldC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZVNoZWV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDBjOThhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVTaGVl
dC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdf
V0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNs
dWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01DU1NTdHlsZVNoZWV0
X2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTU3R5bGVTaGVldF9oCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TdHlsZVNoZWV0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfU0hFRVQgICAgICAgICAgICAod2Via2l0
X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1Nf
U1RZTEVfU0hFRVQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9TSEVFVCwgV2ViS2l0RE9NQ1NTU3R5bGVT
aGVldCkpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1Nf
U1RZTEVfU0hFRVQsIFdlYktpdERPTUNTU1N0eWxlU2hlZXRDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19DU1NfU1RZTEVfU0hFRVQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9TSEVFVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX1NIRUVUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfU0hFRVQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0NTU19TVFlMRV9TSEVFVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX1NI
RUVULCBXZWJLaXRET01DU1NTdHlsZVNoZWV0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUNT
U1N0eWxlU2hlZXQgeworICAgIFdlYktpdERPTVN0eWxlU2hlZXQgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01DU1NTdHlsZVNoZWV0Q2xhc3MgeworICAgIFdlYktpdERP
TVN0eWxlU2hlZXRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2Nzc19zdHlsZV9zaGVldF9pbnNlcnRfcnVsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01DU1NTdHlsZVNoZWV0CisgKiBAcnVsZTogQSAjZ2NoYXIKKyAqIEBpbmRleDogQSAjZ3Vsb25n
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VC
S0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2luc2VydF9ydWxlKFdl
YktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBydWxlLCBndWxvbmcgaW5k
ZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVl
dF9kZWxldGVfcnVsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZVNoZWV0CisgKiBA
aW5kZXg6IEEgI2d1bG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2RlbGV0ZV9ydWxlKFdlYktpdERPTUNT
U1N0eWxlU2hlZXQqIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2FkZF9ydWxlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUNTU1N0eWxlU2hlZXQKKyAqIEBzZWxlY3RvcjogQSAjZ2NoYXIKKyAqIEBzdHlsZTog
QSAjZ2NoYXIKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2Nz
c19zdHlsZV9zaGVldF9hZGRfcnVsZShXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmLCBjb25z
dCBnY2hhciogc2VsZWN0b3IsIGNvbnN0IGdjaGFyKiBzdHlsZSwgZ3Vsb25nIGluZGV4LCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfcmVtb3Zl
X3J1bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVTaGVldAorICogQGluZGV4OiBB
ICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9yZW1vdmVfcnVsZShXZWJLaXRET01DU1NTdHlsZVNo
ZWV0KiBzZWxmLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfb3duZXJfcnVsZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01DU1NTdHlsZVNoZWV0CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01DU1NSdWxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTUnVsZSoKK3dlYmtp
dF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9vd25lcl9ydWxlKFdlYktpdERPTUNTU1N0eWxlU2hl
ZXQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9jc3Nf
cnVsZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVTaGVldAorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NTUnVsZUxpc3QKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01DU1NSdWxlTGlzdCoKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dl
dF9jc3NfcnVsZXMoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X3J1bGVzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUNTU1N0eWxlU2hlZXQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTUNTU1J1bGVMaXN0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTUnVsZUxpc3QqCit3
ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfcnVsZXMoV2ViS2l0RE9NQ1NTU3R5bGVTaGVl
dCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01DU1NTdHlsZVNo
ZWV0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTUludGVyZmFjZU5hbWVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxl
U2hlZXRQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NSW50ZXJmYWNlTmFt
ZVByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oCmluZGV4IDM0
MTUxNWQuLjJjMjI5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVyZmFjZU5hbWVQcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01DU1NTdHlsZVNoZWV0UHJpdmF0ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTUludGVyZmFjZU5h
bWVQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NSW50ZXJmYWNlTmFtZVByaXZhdGVfaAorI2lm
bmRlZiBXZWJLaXRET01DU1NTdHlsZVNoZWV0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUNT
U1N0eWxlU2hlZXRQcml2YXRlX2gKIAotI2luY2x1ZGUgIkludGVyZmFjZU5hbWUuaCIKLSNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSW50ZXJmYWNlTmFtZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTU3R5bGVTaGVldC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NTdHls
ZVNoZWV0Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NSW50ZXJmYWNlTmFtZSog
d3JhcEludGVyZmFjZU5hbWUoV2ViQ29yZTo6SW50ZXJmYWNlTmFtZSopOwotV2ViS2l0RE9NSW50
ZXJmYWNlTmFtZSoga2l0KFdlYkNvcmU6OkludGVyZmFjZU5hbWUqKTsKLVdlYkNvcmU6OkludGVy
ZmFjZU5hbWUqIGNvcmUoV2ViS2l0RE9NSW50ZXJmYWNlTmFtZSopOworV2ViS2l0RE9NQ1NTU3R5
bGVTaGVldCogd3JhcENTU1N0eWxlU2hlZXQoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldCopOworV2Vi
S2l0RE9NQ1NTU3R5bGVTaGVldCoga2l0KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqKTsKK1dlYkNv
cmU6OkNTU1N0eWxlU2hlZXQqIGNvcmUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCopOwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0
ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01DU1NWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDk2NTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01DU1NWYWx1ZS5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01DU1NWYWx1
ZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJL
SVRfRE9NX0NTU19WQUxVRV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURShvYmosIFdFQktJVF9ET01fVFlQRV9DU1NfVkFMVUUsIFdlYktpdERPTUNTU1ZhbHVlUHJp
dmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZSB7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkNTU1ZhbHVlPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01DU1NWYWx1
ZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01DU1NWYWx1ZSoga2l0
KFdlYkNvcmU6OkNTU1ZhbHVlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fQ1NTX1ZBTFVFKHJldCk7CisKKyAgICByZXR1cm4g
d3JhcENTU1ZhbHVlKG9iaik7Cit9CisKK1dlYkNvcmU6OkNTU1ZhbHVlKiBjb3JlKFdlYktpdERP
TUNTU1ZhbHVlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Q1NTVmFsdWUqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVj
dCkgOiAwOworfQorCitXZWJLaXRET01DU1NWYWx1ZSogd3JhcENTU1ZhbHVlKFdlYkNvcmU6OkNT
U1ZhbHVlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9DU1NfVkFMVUUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9DU1Nf
VkFMVUUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NQ1NTVmFsdWUsIHdlYmtp
dF9kb21fY3NzX3ZhbHVlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9DU1NfVEVYVCwKKyAgICBQUk9QX0NTU19WQUxVRV9UWVBFLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfdmFsdWVfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
Q1NTX1ZBTFVFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0
RE9NQ1NTVmFsdWVQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9jc3Nf
dmFsdWVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9jc3NfdmFsdWVfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NQ1NTVmFsdWUqIHNlbGYgPSBXRUJLSVRfRE9NX0NTU19WQUxVRShvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NTU19URVhUOgor
ICAgICAgICB3ZWJraXRfZG9tX2Nzc192YWx1ZV9zZXRfY3NzX3RleHQoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01DU1NWYWx1ZSogc2VsZiA9IFdFQktJVF9ET01fQ1NTX1ZBTFVFKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ1NTX1RFWFQ6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9jc3Nf
dGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DU1NfVkFMVUVfVFlQ
RToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2RvbV9jc3NfdmFsdWVf
Z2V0X2Nzc192YWx1ZV90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVy
dHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0
KiB3ZWJraXRfZG9tX2Nzc192YWx1ZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJv
cGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX2Nzc192YWx1ZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NQ1NT
VmFsdWVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfVkFMVUVfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q1NTVmFs
dWUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3ZhbHVl
X2NsYXNzX2luaXQoV2ViS2l0RE9NQ1NTVmFsdWVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NQ1NTVmFsdWVQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9
IHdlYmtpdF9kb21fY3NzX3ZhbHVlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX2Nzc192YWx1ZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fY3NzX3ZhbHVlX3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DU1NfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJjc3MtdGV4dCIsCisgICAgICAgICAgICAiQ1NTVmFsdWU6
Y3NzLXRleHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIENTU1ZhbHVlOmNzcy10
ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NTU19WQUxVRV9UWVBFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWludCgKKyAgICAgICAgICAgICJjc3MtdmFsdWUtdHlwZSIsCisgICAgICAgICAgICAi
Q1NTVmFsdWU6Y3NzLXZhbHVlLXR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBndXNob3J0
IENTU1ZhbHVlOmNzcy12YWx1ZS10eXBlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fY3NzX3ZhbHVlX2luaXQoV2ViS2l0RE9NQ1NTVmFsdWUqIHJlcXVlc3QpCit7
CisgICAgV2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfVkFM
VUVfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01DU1NWYWx1
ZVByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9jc3NfdGV4
dChXZWJLaXRET01DU1NWYWx1ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19D
U1NfVkFMVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNTU1ZhbHVlKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmNzc1RleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2Nzc192YWx1ZV9zZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTVmFsdWUqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1Nf
VkFMVUUoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNTU1ZhbHVlKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpdGVtLT5zZXRDc3NUZXh0KGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
fQorCitndXNob3J0IHdlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9jc3NfdmFsdWVfdHlwZShXZWJL
aXRET01DU1NWYWx1ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfVkFM
VUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNTU1ZhbHVlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+Y3NzVmFsdWVUeXBlKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NWYWx1ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01D
U1NWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWMyYmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtp
dGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdERPTUNTU1ZhbHVlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTVmFsdWVfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
T2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9DU1NfVkFMVUUgICAgICAgICAg
ICAod2Via2l0X2RvbV9jc3NfdmFsdWVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9D
U1NfVkFMVUUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0NTU19WQUxVRSwgV2ViS2l0RE9NQ1NTVmFsdWUpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0NTU19WQUxVRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1ZBTFVFLCBXZWJLaXRET01DU1NW
YWx1ZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NTU19WQUxVRShvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1ZB
TFVFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DU1NfVkFMVUVfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19WQUxVRSkp
CisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfVkFMVUUsIFdlYktp
dERPTUNTU1ZhbHVlQ2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19J
TkhFUklUOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19JTkhFUklUIDAK
KworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19WQUxVRV9DU1NfUFJJTUlUSVZFX1ZBTFVFOgorICov
CisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19QUklNSVRJVkVfVkFMVUUgMQorCisv
KioKKyAqIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19WQUxVRV9MSVNUOgorICovCisjZGVmaW5l
IFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19WQUxVRV9MSVNUIDIKKworLyoqCisgKiBXRUJLSVRf
RE9NX0NTU19WQUxVRV9DU1NfQ1VTVE9NOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1ZB
TFVFX0NTU19DVVNUT00gMworCitzdHJ1Y3QgX1dlYktpdERPTUNTU1ZhbHVlIHsKKyAgICBXZWJL
aXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01DU1NW
YWx1ZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfdHlwZSh2b2lkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfY3NzX3RleHQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NQ1NTVmFsdWUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9jc3NfdmFsdWVfZ2V0X2Nzc190ZXh0KFdlYktpdERP
TUNTU1ZhbHVlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc192YWx1ZV9zZXRfY3Nz
X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTVmFsdWUKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2Nzc192YWx1ZV9zZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTVmFsdWUqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3Nz
X3ZhbHVlX2dldF9jc3NfdmFsdWVfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NWYWx1
ZQorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3
ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfY3NzX3ZhbHVlX3R5cGUoV2ViS2l0RE9NQ1NTVmFsdWUq
IHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NQ1NTVmFsdWVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01DU1NWYWx1ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWVQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMjk0ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01DU1NWYWx1ZVBy
aXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01DU1NWYWx1ZVByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NWYWx1ZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NWYWx1
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUNTU1ZhbHVlKiB3cmFwQ1NTVmFs
dWUoV2ViQ29yZTo6Q1NTVmFsdWUqKTsKK1dlYktpdERPTUNTU1ZhbHVlKiBraXQoV2ViQ29yZTo6
Q1NTVmFsdWUqKTsKK1dlYkNvcmU6OkNTU1ZhbHVlKiBjb3JlKFdlYktpdERPTUNTU1ZhbHVlKik7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUNTU1ZhbHVlUHJp
dmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGEuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFy
YWN0ZXJEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjJhM2I3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLmNwcApAQCAtMCwwICsxLDMy
NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTUNoYXJhY3RlckRhdGEuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVk
ZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUNoYXJhY3RlckRhdGFQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01DaGFyYWN0ZXJEYXRhVW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQ2hh
cmFjdGVyRGF0YSoga2l0KFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQShraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9k
ZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogY29yZShXZWJLaXRET01D
aGFyYWN0ZXJEYXRhKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUNoYXJhY3RlckRhdGEqIHdyYXBDaGFyYWN0
ZXJEYXRhKFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEsICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2Rpc3BhdGNoX2V2ZW50KFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShl
dmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
ZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlw
dGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0
YSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpDaGFy
YWN0ZXJEYXRhKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q2hhcmFjdGVyRGF0
YSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZl
bnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Vi
a2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2
ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9hZGRfZXZlbnRfbGlzdGVu
ZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fY2hhcmFj
dGVyX2RhdGFfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRET01DaGFyYWN0ZXJEYXRhLCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhLCBX
RUJLSVRfRE9NX1RZUEVfTk9ERSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQ
RV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9EQVRBLAorICAgIFBST1BfTEVOR1RILAorICAgIFBST1Bf
UFJFVklPVVNfRUxFTUVOVF9TSUJMSU5HLAorICAgIFBST1BfTkVYVF9FTEVNRU5UX1NJQkxJTkcs
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3NldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYg
PSBXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfREFUQToKKyAgICAgICAgd2Via2l0X2RvbV9jaGFyYWN0
ZXJfZGF0YV9zZXRfZGF0YShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSog
c2VsZiA9IFdFQktJVF9ET01fQ0hBUkFDVEVSX0RBVEEob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9EQVRBOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9kYXRhKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2xlbmd0aChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUkVWSU9VU19FTEVNRU5UX1NJQkxJ
Tkc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9jaGFyYWN0
ZXJfZGF0YV9nZXRfcHJldmlvdXNfZWxlbWVudF9zaWJsaW5nKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX05FWFRfRUxFTUVOVF9TSUJMSU5HOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X25leHRfZWxl
bWVudF9zaWJsaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fY2hhcmFjdGVyX2RhdGFfY2xhc3NfaW5pdChXZWJLaXRET01DaGFyYWN0ZXJEYXRhQ2xhc3Mq
IHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0RBVEEsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiZGF0YSIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyRGF0YTpkYXRhIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBDaGFyYWN0ZXJEYXRhOmRhdGEiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAg
ICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXJEYXRhOmxlbmd0aCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBDaGFyYWN0ZXJEYXRhOmxlbmd0aCIsCisgICAg
ICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUFJFVklPVVNfRUxFTUVOVF9TSUJMSU5HLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInByZXZpb3VzLWVsZW1lbnQt
c2libGluZyIsCisgICAgICAgICAgICAiQ2hhcmFjdGVyRGF0YTpwcmV2aW91cy1lbGVtZW50LXNp
YmxpbmciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBDaGFyYWN0
ZXJEYXRhOnByZXZpb3VzLWVsZW1lbnQtc2libGluZyIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX05FWFRfRUxFTUVOVF9TSUJMSU5HLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KAorICAgICAgICAgICAgIm5leHQtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAg
ICAgICJDaGFyYWN0ZXJEYXRhOm5leHQtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCogQ2hhcmFjdGVyRGF0YTpuZXh0LWVsZW1lbnQtc2li
bGluZyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
Y2hhcmFjdGVyX2RhdGFfaW5pdChXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fY2hhcmFj
dGVyX2RhdGFfc3Vic3RyaW5nX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZiwgZ3Vs
b25nIG9mZnNldCwgZ3Vsb25nIGxlbmd0aCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0ZXJE
YXRhKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnN1YnN0cmluZ0RhdGEob2Zmc2V0LCBsZW5ndGgsIGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2FwcGVuZF9kYXRhKFdlYktpdERP
TUNoYXJhY3RlckRhdGEqIHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKGRhdGEpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29y
ZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWREYXRhID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOworICAgIGl0
ZW0tPmFwcGVuZERhdGEoY29udmVydGVkRGF0YSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9jaGFy
YWN0ZXJfZGF0YV9pbnNlcnRfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBndWxv
bmcgb2Zmc2V0LCBjb25zdCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChkYXRhKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZERhdGEgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+aW5zZXJ0RGF0YShv
ZmZzZXQsIGNvbnZlcnRlZERhdGEsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9jaGFy
YWN0ZXJfZGF0YV9kZWxldGVfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBndWxv
bmcgb2Zmc2V0LCBndWxvbmcgbGVuZ3RoLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGl0ZW0tPmRlbGV0ZURhdGEob2Zmc2V0LCBsZW5ndGgsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9yZXBsYWNlX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YSogc2VsZiwgZ3Vsb25nIG9mZnNldCwgZ3Vsb25nIGxlbmd0aCwgY29uc3QgZ2NoYXIqIGRhdGEs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGF0YSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWREYXRhID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPnJlcGxhY2VEYXRhKG9mZnNldCwgbGVuZ3RoLCBjb252ZXJ0ZWREYXRh
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfcmVtb3ZlKFdl
YktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+cmVtb3ZlKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2NoYXJhY3Rl
cl9kYXRhX2dldF9kYXRhKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc2V0X2RhdGEoV2ViS2l0
RE9NQ2hhcmFjdGVyRGF0YSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdl
YkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldERhdGEoY29udmVydGVkVmFsdWUpOworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9jaGFyYWN0ZXJfZGF0YV9nZXRfbGVuZ3RoKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X3ByZXZp
b3VzX2VsZW1lbnRfc2libGluZyhXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fY2hhcmFjdGVy
X2RhdGFfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5nKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5uZXh0RWxlbWVudFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGEu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmUzNjM3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGEuaApAQCAt
MCwwICsxLDEzOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZp
bmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkK
KyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGly
ZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YV9oCisjZGVm
aW5lIFdlYktpdERPTUNoYXJhY3RlckRhdGFfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9kZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEgICAgICAgICAgICAod2Via2l0X2RvbV9jaGFyYWN0ZXJf
ZGF0YV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9DSEFSQUNURVJfREFUQSwgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSkpCisjZGVmaW5lIFdF
QktJVF9ET01fQ0hBUkFDVEVSX0RBVEFfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBLCBXZWJLaXRE
T01DaGFyYWN0ZXJEYXRhQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RB
VEEob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DSEFSQUNU
RVJfREFUQV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEpKQorI2RlZmluZSBXRUJLSVRfRE9NX0NIQVJB
Q1RFUl9EQVRBX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9DSEFSQUNURVJfREFUQSwgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01DaGFyYWN0ZXJEYXRhIHsKKyAgICBXZWJLaXRE
T01Ob2RlIHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YUNsYXNzIHsKKyAgICBXZWJLaXRET01Ob2RlQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3N1YnN0cmluZ19kYXRhOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAqIEBvZmZzZXQ6IEEgI2d1bG9u
ZworICogQGxlbmd0aDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9jaGFyYWN0
ZXJfZGF0YV9zdWJzdHJpbmdfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBndWxv
bmcgb2Zmc2V0LCBndWxvbmcgbGVuZ3RoLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9hcHBlbmRfZGF0YToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01DaGFyYWN0ZXJEYXRhCisgKiBAZGF0YTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2FwcGVu
ZF9kYXRhKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9pbnNl
cnRfZGF0YToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DaGFyYWN0ZXJEYXRhCisgKiBAb2Zmc2V0
OiBBICNndWxvbmcKKyAqIEBkYXRhOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfaW5zZXJ0X2Rh
dGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZiwgZ3Vsb25nIG9mZnNldCwgY29uc3QgZ2No
YXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJhY3Rl
cl9kYXRhX2RlbGV0ZV9kYXRhOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEK
KyAqIEBvZmZzZXQ6IEEgI2d1bG9uZworICogQGxlbmd0aDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jaGFyYWN0ZXJf
ZGF0YV9kZWxldGVfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBndWxvbmcgb2Zm
c2V0LCBndWxvbmcgbGVuZ3RoLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9jaGFyYWN0ZXJfZGF0YV9yZXBsYWNlX2RhdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ2hh
cmFjdGVyRGF0YQorICogQG9mZnNldDogQSAjZ3Vsb25nCisgKiBAbGVuZ3RoOiBBICNndWxvbmcK
KyAqIEBkYXRhOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfcmVwbGFjZV9kYXRhKFdlYktpdERP
TUNoYXJhY3RlckRhdGEqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIGd1bG9uZyBsZW5ndGgsIGNvbnN0
IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9jaGFy
YWN0ZXJfZGF0YV9nZXRfZGF0YToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DaGFyYWN0ZXJEYXRh
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9zZXRfZGF0YToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01DaGFyYWN0ZXJEYXRhCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jaGFy
YWN0ZXJfZGF0YV9zZXRfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJh
Y3Rlcl9kYXRhX2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YQorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Vi
a2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfbGVuZ3RoKFdlYktpdERPTUNoYXJhY3RlckRhdGEq
IHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJE
YXRhUHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFeGNlcHRpb25Q
cml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVByaXZhdGUuaAppbmRleCAzYjhi
M2MwLi4xZjNkM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uUHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Q2hhcmFjdGVyRGF0YVByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0RXhjZXB0aW9u
UHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlX2gKKyNpZm5k
ZWYgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01DaGFy
YWN0ZXJEYXRhUHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0RXhjZXB0aW9uLmgiCi0jaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RFeGNlcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0NoYXJhY3RlckRhdGEuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RFeGNlcHRpb24qIHdy
YXBUZXN0RXhjZXB0aW9uKFdlYkNvcmU6OlRlc3RFeGNlcHRpb24qKTsKLVdlYktpdERPTVRlc3RF
eGNlcHRpb24qIGtpdChXZWJDb3JlOjpUZXN0RXhjZXB0aW9uKik7Ci1XZWJDb3JlOjpUZXN0RXhj
ZXB0aW9uKiBjb3JlKFdlYktpdERPTVRlc3RFeGNlcHRpb24qKTsKK1dlYktpdERPTUNoYXJhY3Rl
ckRhdGEqIHdyYXBDaGFyYWN0ZXJEYXRhKFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqKTsKK1dlYktp
dERPTUNoYXJhY3RlckRhdGEqIGtpdChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKik7CitXZWJDb3Jl
OjpDaGFyYWN0ZXJEYXRhKiBjb3JlKFdlYktpdERPTUNoYXJhY3RlckRhdGEqKTsKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEV4Y2VwdGlvblByaXZhdGVf
aCAqLworI2VuZGlmIC8qIFdlYktpdERPTUNoYXJhY3RlckRhdGFQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGFV
bnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjE3M2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGFVbnN0YWJsZS5oCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
Q2hhcmFjdGVyRGF0YVVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVVu
c3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisvKioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfcmVtb3ZlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2NoYXJh
Y3Rlcl9kYXRhX3JlbW92ZShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBHRXJyb3IqKiBl
cnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfcHJldmlvdXNf
ZWxlbWVudF9zaWJsaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoK
K3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X3ByZXZpb3VzX2VsZW1lbnRfc2libGluZyhX
ZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJh
Y3Rlcl9kYXRhX2dldF9uZXh0X2VsZW1lbnRfc2libGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01DaGFyYWN0ZXJEYXRhCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9uZXh0X2Vs
ZW1lbnRfc2libGluZyhXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmKTsKKworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYg
LyogV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Q29tbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUNvbW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU0OWI4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNvbW1lbnQuY3BwCkBA
IC0wLDAgKzEsMTA2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ29tbWVudC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQ29tbWVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQ29tbWVudCoga2l0KFdlYkNvcmU6OkNvbW1lbnQq
IG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DT01NRU5UKGtpdChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpDb21tZW50KiBjb3JlKFdlYktp
dERPTUNvbW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpDb21tZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NQ29tbWVudCogd3JhcENvbW1lbnQoV2ViQ29yZTo6Q29t
bWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fQ09NTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0NPTU1FTlQs
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2NvbW1lbnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6OkNvbW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpDb21tZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0
aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9jb21tZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkNvbW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDb21tZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
Y29tbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpDb21tZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Q29tbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRp
c3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9jb21tZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlm
YWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2NvbW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2Nv
bW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09E
RShXZWJLaXRET01Db21tZW50LCB3ZWJraXRfZG9tX2NvbW1lbnQsIFdFQktJVF9ET01fVFlQRV9D
SEFSQUNURVJfREFUQSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVO
VF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2NvbW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01Db21tZW50Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdENsYXNzKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9jb21tZW50X2luaXQoV2ViS2l0RE9NQ29tbWVudCogcmVxdWVzdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29t
bWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Db21tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWNiNTY1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29tbWVudC5oCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3Ig
Ik9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUNvbW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01D
b21tZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUNoYXJhY3RlckRhdGEuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0NP
TU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9jb21tZW50X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fQ09NTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ09NTUVOVCwgV2ViS2l0RE9NQ29tbWVudCkp
CisjZGVmaW5lIFdFQktJVF9ET01fQ09NTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ09NTUVOVCwgV2ViS2l0RE9N
Q29tbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NPTU1FTlQob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NPTU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NPTU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NPTU1FTlQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0NPTU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0NPTU1FTlQsIFdlYktpdERPTUNvbW1l
bnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQ29tbWVudCB7CisgICAgV2ViS2l0RE9NQ2hh
cmFjdGVyRGF0YSBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUNvbW1l
bnRDbGFzcyB7CisgICAgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YUNsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fY29tbWVudF9nZXRfdHlwZSh2b2lk
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUNvbW1lbnRfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Db21tZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Db21tZW50UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzM2I4NTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUNvbW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Db21tZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUNvbW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvQ29t
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Db21tZW50Lmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NQ29tbWVudCogd3JhcENvbW1lbnQoV2ViQ29yZTo6Q29t
bWVudCopOworV2ViS2l0RE9NQ29tbWVudCoga2l0KFdlYkNvcmU6OkNvbW1lbnQqKTsKK1dlYkNv
cmU6OkNvbW1lbnQqIGNvcmUoV2ViS2l0RE9NQ29tbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01Db21tZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUN1c3RvbS5jcHAKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uY3BwCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUN1c3RvbS5jcHAKaW5kZXggNjYxMWRmMC4uMzI1MTQzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3Vz
dG9tLmNwcApAQCAtMTksOSArMTksOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IldlYktpdERPTUN1c3RvbS5oIgogCi0jaW5jbHVkZSAiRE9NVG9rZW5MaXN0LmgiCi0jaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9ET01Ub2tlbkxpc3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3VzdG9tLmgKc2ltaWxh
cml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NQ3VzdG9tLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3VzdG9tLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b21VbnN0YWJs
ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUN1c3RvbVVuc3RhYmxlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9N
QXBwbGljYXRpb25DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YTc0NTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJ
bXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2Jq
ZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNI
RV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJ
VF9ET01fVFlQRV9ET01fQVBQTElDQVRJT05fQ0FDSEUsIFdlYktpdERPTURPTUFwcGxpY2F0aW9u
Q2FjaGVQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NQXBwbGljYXRpb25D
YWNoZVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlPiBj
b3JlT2JqZWN0OworfSBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIGtpdChXZWJD
b3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFKHJl
dCk7CisKKyAgICByZXR1cm4gd3JhcERPTUFwcGxpY2F0aW9uQ2FjaGUob2JqKTsKK30KKworV2Vi
Q29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSogY29yZShXZWJLaXRET01ET01BcHBsaWNhdGlvbkNh
Y2hlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6RE9NQXBwbGljYXRpb25DYWNoZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHdyYXBET01B
cHBsaWNhdGlvbkNhY2hlKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9B
UFBMSUNBVElPTl9DQUNIRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9BUFBMSUNB
VElPTl9DQUNIRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9tX2Fw
cGxpY2F0aW9uX2NhY2hlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3Jl
RXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpET01BcHBsaWNhdGlv
bkNhY2hlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NQXBwbGljYXRpb25D
YWNoZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNh
Y2hlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3JlbW92
ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
ICAgIFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAg
ICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNo
ZV9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNl
LT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNo
ZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUsIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2Nh
Y2hlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lU
X0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1NUQVRVUywKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Rv
bV9hcHBsaWNhdGlvbl9jYWNoZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiBzZWxmID0gV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJ
T05fQ0FDSEUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9TVEFUVVM6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21f
ZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2dldF9zdGF0dXMoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2NvbnN0cnVj
dG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENv
bnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVj
dCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29u
c3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX0dFVF9QUklWQVRF
KG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRP
TUFwcGxpY2F0aW9uQ2FjaGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2NsYXNzX2luaXQoV2ViS2l0RE9NRE9NQXBwbGlj
YXRpb25DYWNoZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01ET01BcHBsaWNhdGlv
bkNhY2hlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRf
ZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfZmluYWxpemU7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlv
bl9jYWNoZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RBVFVTLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAgICAgICJzdGF0dXMiLAorICAgICAgICAgICAg
IkRPTUFwcGxpY2F0aW9uQ2FjaGU6c3RhdHVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vz
aG9ydCBET01BcHBsaWNhdGlvbkNhY2hlOnN0YXR1cyIsCisgICAgICAgICAgICAwLCBHX01BWFVJ
TlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9pbml0KFdlYktpdERPTURP
TUFwcGxpY2F0aW9uQ2FjaGUqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NQXBwbGljYXRp
b25DYWNoZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTURPTUFwcGxpY2F0
aW9uQ2FjaGVQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25f
Y2FjaGVfdXBkYXRlKFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJD
b3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnVwZGF0ZShlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAg
fQorfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3N3YXBfY2FjaGUo
V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fQVBQTElDQVRJT05fQ0FDSEUoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c3dhcENhY2hlKGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfYWJvcnQoV2ViS2l0RE9NRE9NQXBw
bGljYXRpb25DYWNoZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9BUFBMSUNB
VElPTl9DQUNIRShzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5hYm9ydCgpOworfQorCitndXNob3J0
IHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2dldF9zdGF0dXMoV2ViS2l0RE9NRE9N
QXBwbGljYXRpb25DYWNoZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
QVBQTElDQVRJT05fQ0FDSEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9u
Q2FjaGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBp
dGVtLT5zdGF0dXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTUFwcGxpY2F0aW9uQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNGM2MzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNh
Y2hlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZV9oCisKKyNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFICAgICAgICAgICAgKHdlYmtp
dF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fQVBQTElDQVRJT05fQ0FDSEUs
IFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9B
UFBMSUNBVElPTl9DQUNIRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFLCBXZWJLaXRE
T01ET01BcHBsaWNhdGlvbkNhY2hlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX0FQ
UExJQ0FUSU9OX0NBQ0hFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fQVBQTElDQVRJT05fQ0FDSEUpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9O
X0NBQ0hFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX0RPTV9BUFBMSUNBVElPTl9DQUNIRSwgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZUNs
YXNzKSkKKworLyoqCisgKiBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9VTkNBQ0hF
RDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9VTkNBQ0hF
RCAwCisKKy8qKgorICogV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfSURMRToKKyAq
LworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9JRExFIDEKKworLyoq
CisgKiBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9DSEVDS0lORzoKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9DSEVDS0lORyAyCisKKy8qKgor
ICogV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfRE9XTkxPQURJTkc6CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfRE9XTkxPQURJTkcgMworCisv
KioKKyAqIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX1VQREFURVJFQURZOgorICov
CisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX1VQREFURVJFQURZIDQK
KworLyoqCisgKiBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9PQlNPTEVURToKKyAq
LworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRV9PQlNPTEVURSA1CisK
K3N0cnVjdCBfV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NQXBwbGljYXRp
b25DYWNoZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNo
ZV91cGRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZQorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3VwZGF0ZShXZWJLaXRE
T01ET01BcHBsaWNhdGlvbkNhY2hlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfc3dhcF9jYWNoZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9k
b21fYXBwbGljYXRpb25fY2FjaGVfc3dhcF9jYWNoZShXZWJLaXRET01ET01BcHBsaWNhdGlvbkNh
Y2hlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fYXBw
bGljYXRpb25fY2FjaGVfYWJvcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NQXBwbGljYXRp
b25DYWNoZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9hYm9ydChXZWJLaXRET01ET01BcHBs
aWNhdGlvbkNhY2hlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlv
bl9jYWNoZV9nZXRfc3RhdHVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTUFwcGxpY2F0aW9u
Q2FjaGUKKyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGd1c2hvcnQKK3dlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9u
X2NhY2hlX2dldF9zdGF0dXMoV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogc2VsZik7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8K
KyNlbmRpZiAvKiBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25D
YWNoZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRiMjQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZS5oCkBA
IC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01E
T01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTUFwcGxp
Y2F0aW9uQ2FjaGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRE9NQXBwbGljYXRp
b25DYWNoZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURPTUFwcGxpY2F0aW9u
Q2FjaGUqIHdyYXBET01BcHBsaWNhdGlvbkNhY2hlKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2Fj
aGUqKTsKK1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIGtpdChXZWJDb3JlOjpET01BcHBs
aWNhdGlvbkNhY2hlKik7CitXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKiBjb3JlKFdlYktp
dERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01DU1NOYW1lc3BhY2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01DU1NOYW1lc3BhY2UuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3N2ZkZDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTUNTU05hbWVzcGFjZS5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01ET01DU1NOYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01DU1NOYW1lc3Bh
Y2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0NTU19OQU1FU1BBQ0VfR0VU
X1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9N
X1RZUEVfRE9NX0NTU19OQU1FU1BBQ0UsIFdlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01DU1NOYW1lc3BhY2VQcml2YXRlIHsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6RE9NQ1NTTmFtZXNwYWNlPiBjb3JlT2JqZWN0OworfSBXZWJLaXRE
T01ET01DU1NOYW1lc3BhY2VQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NRE9NQ1NTTmFtZXNwYWNlKiBraXQoV2ViQ29yZTo6RE9NQ1NTTmFtZXNwYWNlKiBvYmopCit7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
RE9NX0NTU19OQU1FU1BBQ0UocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NQ1NTTmFtZXNwYWNl
KG9iaik7Cit9CisKK1dlYkNvcmU6OkRPTUNTU05hbWVzcGFjZSogY29yZShXZWJLaXRET01ET01D
U1NOYW1lc3BhY2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpET01DU1NOYW1lc3BhY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01ET01DU1NOYW1lc3BhY2UqIHdyYXBET01D
U1NOYW1lc3BhY2UoV2ViQ29yZTo6RE9NQ1NTTmFtZXNwYWNlKiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fQ1NTX05BTUVT
UEFDRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9DU1NfTkFNRVNQQUNFLCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURPTUNTU05hbWVzcGFjZSwgd2Via2l0X2Rv
bV9kb21fY3NzX25hbWVzcGFjZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFjZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fRE9NX0NTU19OQU1FU1BBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHBy
aXYtPn5XZWJLaXRET01ET01DU1NOYW1lc3BhY2VQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFjZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFj
ZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2Jq
ZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNl
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fQ1NTX05BTUVTUEFDRV9HRVRfUFJJVkFURShv
YmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01D
U1NOYW1lc3BhY2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2Jq
ZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZG9tX2Nzc19uYW1lc3BhY2VfY2xhc3NfaW5pdChXZWJLaXRET01ET01DU1NOYW1lc3BhY2VDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
Z29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9jc3NfbmFtZXNw
YWNlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9t
X2RvbV9jc3NfbmFtZXNwYWNlX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2RvbV9jc3NfbmFtZXNwYWNlX2luaXQoV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlKiByZXF1ZXN0
KQoreworICAgIFdlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX0RPTV9DU1NfTkFNRVNQQUNFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJp
dikgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZSgpOworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURPTUNTU05hbWVzcGFjZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01DU1NOYW1lc3BhY2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTE0NGIwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01ET01DU1NOYW1lc3BhY2UuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTUNTU05hbWVzcGFjZV9oCisjZGVmaW5l
IFdlYktpdERPTURPTUNTU05hbWVzcGFjZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
LXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVf
RE9NX0NTU19OQU1FU1BBQ0UgICAgICAgICAgICAod2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFj
ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9DU1NfTkFNRVNQQUNFKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9ET01fQ1NTX05BTUVTUEFDRSwgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9ET01fQ1NTX05BTUVTUEFDRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX0NTU19OQU1FU1BB
Q0UsIFdlYktpdERPTURPTUNTU05hbWVzcGFjZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0RPTV9DU1NfTkFNRVNQQUNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fQ1NTX05BTUVTUEFDRSkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfRE9NX0NTU19OQU1FU1BBQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9DU1NfTkFNRVNQQUNFKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQ1NTX05BTUVTUEFDRV9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX0NTU19O
QU1FU1BBQ0UsIFdlYktpdERPTURPTUNTU05hbWVzcGFjZUNsYXNzKSkKKworc3RydWN0IF9XZWJL
aXRET01ET01DU1NOYW1lc3BhY2UgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFu
Y2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURPTUNTU05hbWVzcGFjZUNsYXNzIHsKKyAgICBX
ZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNlX2dldF90eXBlKHZvaWQpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYg
LyogV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdl
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5k
ZXggNzAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUuaApyZW5hbWUgdG8gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01DU1NOYW1lc3BhY2VQcml2YXRlLmgKaW5kZXggZjAxYWNkMi4uZjRhMTQyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0
ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGVfaAotI2RlZmlu
ZSBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NRE9N
Q1NTTmFtZXNwYWNlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTUNTU05hbWVzcGFjZVBy
aXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NQ1NT
TmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURPTUNTU05hbWVzcGFj
ZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RFdmVudFRhcmdldCogd3Jh
cFRlc3RFdmVudFRhcmdldChXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqKTsKLVdlYktpdERPTVRl
c3RFdmVudFRhcmdldCoga2l0KFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCopOwotV2ViQ29yZTo6
VGVzdEV2ZW50VGFyZ2V0KiBjb3JlKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCopOworV2ViS2l0
RE9NRE9NQ1NTTmFtZXNwYWNlKiB3cmFwRE9NQ1NTTmFtZXNwYWNlKFdlYkNvcmU6OkRPTUNTU05h
bWVzcGFjZSopOworV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlKiBraXQoV2ViQ29yZTo6RE9NQ1NT
TmFtZXNwYWNlKik7CitXZWJDb3JlOjpET01DU1NOYW1lc3BhY2UqIGNvcmUoV2ViS2l0RE9NRE9N
Q1NTTmFtZXNwYWNlKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktp
dERPTVRlc3RFdmVudFRhcmdldFByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTUNT
U05hbWVzcGFjZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zZTA2YzFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1l
bnRhdGlvbi5jcHAKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01JbXBsZW1l
bnRhdGlvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRG9jdW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRUeXBl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxEb2N1bWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJT05fR0VUX1BSSVZBVEUob2JqKSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9NX0lNUExF
TUVOVEFUSU9OLCBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUpCisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUgeworICAgIFJlZlB0cjxX
ZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NRE9NSW1w
bGVtZW50YXRpb25Qcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRE9N
SW1wbGVtZW50YXRpb24qIGtpdChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiogb2JqKQorewor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RP
TV9JTVBMRU1FTlRBVElPTihyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01JbXBsZW1lbnRhdGlv
bihvYmopOworfQorCitXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiogY29yZShXZWJLaXRET01E
T01JbXBsZW1lbnRhdGlvbiogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24q
IHdyYXBET01JbXBsZW1lbnRhdGlvbihXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
RE9NX0lNUExFTUVOVEFUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX0lNUExF
TUVOVEFUSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURPTUltcGxlbWVu
dGF0aW9uLCB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbiwgV0VCS0lUX0RPTV9UWVBFX09C
SkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX0lNUExFTUVOVEFUSU9OX0dFVF9QUklWQVRFKG9i
amVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2
YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25f
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmplY3QqIHdl
YmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5
cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAg
ICBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RP
TV9JTVBMRU1FTlRBVElPTl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbio+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY2xhc3Nf
aW5pdChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihX
ZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9u
X2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlv
bl9pbml0KFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX0lNUExF
TUVOVEFUSU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9N
RE9NSW1wbGVtZW50YXRpb25Qcml2YXRlKCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9t
X2ltcGxlbWVudGF0aW9uX2hhc19mZWF0dXJlKFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBz
ZWxmLCBjb25zdCBnY2hhciogZmVhdHVyZSwgY29uc3QgZ2NoYXIqIHZlcnNpb24pCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX0lNUExFTUVOVEFUSU9OKHNlbGYpLCBGQUxTRSk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZmVhdHVyZSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHZlcnNpb24sIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRG
ZWF0dXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGZlYXR1cmUpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZlcnNpb24gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmVyc2lvbik7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzRmVhdHVyZShjb252ZXJ0ZWRGZWF0dXJlLCBjb252
ZXJ0ZWRWZXJzaW9uKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Eb2N1bWVu
dFR5cGUqIHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVudF90eXBl
KFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcXVhbGlmaWVk
TmFtZSwgY29uc3QgZ2NoYXIqIHB1YmxpY0lkLCBjb25zdCBnY2hhciogc3lzdGVtSWQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1FTlRBVElP
TihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocXVhbGlmaWVkTmFtZSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHVibGljSWQsIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHN5c3RlbUlkLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb24qIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUXVhbGlmaWVkTmFt
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChxdWFsaWZpZWROYW1lKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRQdWJsaWNJZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwdWJsaWNJZCk7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3lzdGVtSWQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3lzdGVtSWQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0
cjxXZWJDb3JlOjpEb2N1bWVudFR5cGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5jcmVhdGVEb2N1bWVudFR5cGUoY29udmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkUHVi
bGljSWQsIGNvbnZlcnRlZFN5c3RlbUlkLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURvY3VtZW50KiB3ZWJraXRf
ZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnQoV2ViS2l0RE9NRE9NSW1wbGVt
ZW50YXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBx
dWFsaWZpZWROYW1lLCBXZWJLaXRET01Eb2N1bWVudFR5cGUqIGRvY3R5cGUsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1FTlRBVElPTihzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocXVhbGlmaWVkTmFtZSwgMCk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoIWRvY3R5cGUgfHwgV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9U
WVBFKGRvY3R5cGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvciwgMCk7CisgICAgV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb24qIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkUXVhbGlmaWVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChxdWFsaWZpZWROYW1lKTsK
KyAgICBXZWJDb3JlOjpEb2N1bWVudFR5cGUqIGNvbnZlcnRlZERvY3R5cGUgPSBXZWJLaXQ6OmNv
cmUoZG9jdHlwZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkRvY3VtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Y3JlYXRlRG9jdW1lbnQoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0ZWRRdWFsaWZpZWRO
YW1lLCBjb252ZXJ0ZWREb2N0eXBlLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUNTU1N0eWxlU2hlZXQqIHdlYmtp
dF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9jc3Nfc3R5bGVfc2hlZXQoV2ViS2l0RE9N
RE9NSW1wbGVtZW50YXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2NoYXIq
IG1lZGlhLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
SU1QTEVNRU5UQVRJT04oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHRpdGxl
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChtZWRpYSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRPTUltcGxl
bWVudGF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFRpdGxlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRpdGxlKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRNZWRpYSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZWRpYSk7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1N0
eWxlU2hlZXQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVDU1NTdHls
ZVNoZWV0KGNvbnZlcnRlZFRpdGxlLCBjb252ZXJ0ZWRNZWRpYSwgZWMpKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1M
RG9jdW1lbnQqIHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9odG1sX2RvY3Vt
ZW50KFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogdGl0bGUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX0lNUExFTUVOVEFUSU9OKHNlbGYpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh0aXRsZSwgMCk7CisgICAgV2ViQ29yZTo6RE9N
SW1wbGVtZW50YXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVGl0bGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGl0bGUpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpIVE1MRG9jdW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5jcmVhdGVIVE1MRG9jdW1lbnQoY29udmVydGVkVGl0bGUpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9N
SW1wbGVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTFlMWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01JbXBsZW1lbnRhdGlvbi5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9t
Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRE
T01ET01JbXBsZW1lbnRhdGlvbl9oCisjZGVmaW5lIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9u
X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX0lNUExFTUVOVEFU
SU9OICAgICAgICAgICAgKHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0lNUExFTUVOVEFUSU9OKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fSU1Q
TEVNRU5UQVRJT04sIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9ET01fSU1QTEVNRU5UQVRJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9JTVBMRU1FTlRBVElPTiwgV2Vi
S2l0RE9NRE9NSW1wbGVtZW50YXRpb25DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01f
SU1QTEVNRU5UQVRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9JTVBMRU1FTlRBVElPTikpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfRE9NX0lNUExFTUVOVEFUSU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04pKQor
I2RlZmluZSBXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX0lNUExF
TUVOVEFUSU9OLCBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbkNsYXNzKSkKKworc3RydWN0IF9X
ZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25DbGFzcyB7
CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25faGFzX2ZlYXR1cmU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24KKyAqIEBmZWF0dXJlOiBBICNnY2hh
cgorICogQHZlcnNpb246IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25faGFz
X2ZlYXR1cmUoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBm
ZWF0dXJlLCBjb25zdCBnY2hhciogdmVyc2lvbik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
aW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NSW1wbGVtZW50YXRpb24KKyAqIEBxdWFsaWZpZWROYW1lOiBBICNnY2hhcgorICogQHB1
YmxpY0lkOiBBICNnY2hhcgorICogQHN5c3RlbUlkOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vy
cm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVu
dFR5cGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudFR5cGUqCit3ZWJraXRfZG9t
X2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnRfdHlwZShXZWJLaXRET01ET01JbXBs
ZW1lbnRhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHF1YWxpZmllZE5hbWUsIGNvbnN0IGdjaGFy
KiBwdWJsaWNJZCwgY29uc3QgZ2NoYXIqIHN5c3RlbUlkLCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50OgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uCisgKiBAbmFtZXNwYWNlVVJJOiAo
YWxsb3ctbm9uZSk6IEEgI2djaGFyCisgKiBAcXVhbGlmaWVkTmFtZTogQSAjZ2NoYXIKKyAqIEBk
b2N0eXBlOiAoYWxsb3ctbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50VHlwZQorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01E
b2N1bWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50Kgord2Via2l0X2RvbV9k
b21faW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50KFdlYktpdERPTURPTUltcGxlbWVudGF0
aW9uKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogcXVhbGlm
aWVkTmFtZSwgV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBkb2N0eXBlLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRlX2Nzc19zdHls
ZV9zaGVldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbgorICogQHRp
dGxlOiBBICNnY2hhcgorICogQG1lZGlhOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01DU1NTdHlsZVNoZWV0
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCoKK3dlYmtpdF9kb21fZG9t
X2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9jc3Nfc3R5bGVfc2hlZXQoV2ViS2l0RE9NRE9NSW1wbGVt
ZW50YXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2NoYXIqIG1lZGlhLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25f
Y3JlYXRlX2h0bWxfZG9jdW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NSW1wbGVtZW50
YXRpb24KKyAqIEB0aXRsZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhU
TUxEb2N1bWVudCoKK3dlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9odG1sX2Rv
Y3VtZW50KFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogdGl0
bGUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRp
b25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMDIyMTNhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRp
b25Qcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9ET01JbXBsZW1lbnRhdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01J
bXBsZW1lbnRhdGlvbi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURPTUltcGxl
bWVudGF0aW9uKiB3cmFwRE9NSW1wbGVtZW50YXRpb24oV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRp
b24qKTsKK1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBraXQoV2ViQ29yZTo6RE9NSW1wbGVt
ZW50YXRpb24qKTsKK1dlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uKiBjb3JlKFdlYktpdERPTURP
TUltcGxlbWVudGF0aW9uKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdl
YktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TU1pbWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjVhZTZhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVU
eXBlLmNwcApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTU1pbWVUeXBlLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+Cisj
aW5jbHVkZSAiV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NRE9NUGx1Z2luUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZ
UEVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJL
SVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRSwgV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlIHsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6RE9NTWltZVR5cGU+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTU1pbWVU
eXBlUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTU1pbWVUeXBl
KiBraXQoV2ViQ29yZTo6RE9NTWltZVR5cGUqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFKHJldCk7CisK
KyAgICByZXR1cm4gd3JhcERPTU1pbWVUeXBlKG9iaik7Cit9CisKK1dlYkNvcmU6OkRPTU1pbWVU
eXBlKiBjb3JlKFdlYktpdERPTURPTU1pbWVUeXBlKiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NTWltZVR5cGUqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01ET01NaW1lVHlw
ZSogd3JhcERPTU1pbWVUeXBlKFdlYkNvcmU6OkRPTU1pbWVUeXBlKiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fTUlNRV9U
WVBFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRSwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01ET01NaW1lVHlwZSwgd2Via2l0X2RvbV9kb21fbWlt
ZV90eXBlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9UWVBFLAorICAgIFBST1BfU1VGRklYRVMsCisgICAgUFJPUF9ERVNDUklQVElPTiwK
KyAgICBQUk9QX0VOQUJMRURfUExVR0lOLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9k
b21fbWltZV90eXBlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01E
T01NaW1lVHlwZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVfR0VUX1BS
SVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01ET01NaW1lVHlwZVBy
aXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9kb21fbWltZV90eXBlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TURPTU1pbWVUeXBlKiBzZWxmID0gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9j
b250ZW50X3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1VGRklY
RVM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX21p
bWVfdHlwZV9nZXRfc3VmZml4ZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfREVTQ1JJUFRJT046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fZG9tX21pbWVfdHlwZV9nZXRfZGVzY3JpcHRpb24oc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRU5BQkxFRF9QTFVHSU46CisgICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9lbmFibGVkX3BsdWdpbihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fbWlt
ZV90eXBlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX21pbWVfdHlw
ZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0dFVF9QUklWQVRFKG9iamVjdCk7
CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTU1pbWVUeXBl
Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5
cGVfY2xhc3NfaW5pdChXZWJLaXRET01ET01NaW1lVHlwZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2NvbnN0cnVjdG9yOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZmluYWxpemU7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiRE9NTWltZVR5
cGU6dHlwZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBET01NaW1lVHlwZTp0eXBl
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfU1VGRklYRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAic3VmZml4ZXMiLAorICAgICAgICAgICAgIkRPTU1pbWVUeXBlOnN1
ZmZpeGVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERPTU1pbWVUeXBlOnN1ZmZp
eGVzIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVTQ1JJUFRJT04sCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iLAorICAgICAgICAgICAgIkRPTU1p
bWVUeXBlOmRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERPTU1p
bWVUeXBlOmRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5BQkxFRF9QTFVHSU4sCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZW5hYmxlZC1wbHVnaW4i
LAorICAgICAgICAgICAgIkRPTU1pbWVUeXBlOmVuYWJsZWQtcGx1Z2luIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NUGx1Z2luKiBET01NaW1lVHlwZTplbmFibGVkLXBsdWdp
biIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJTiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZG9tX21pbWVfdHlwZV9pbml0KFdlYktpdERPTURPTU1pbWVUeXBlKiByZXF1ZXN0KQoreworICAg
IFdlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX01JTUVf
VFlQRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTURPTU1p
bWVUeXBlUHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dl
dF9jb250ZW50X3R5cGUoV2ViS2l0RE9NRE9NTWltZVR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9NX01JTUVfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9N
TWltZVR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitnY2hhciogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9zdWZmaXhlcyhXZWJLaXRE
T01ET01NaW1lVHlwZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTUlN
RV9UWVBFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01NaW1lVHlwZSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5zdWZmaXhlcygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0
X2RvbV9kb21fbWltZV90eXBlX2dldF9kZXNjcmlwdGlvbihXZWJLaXRET01ET01NaW1lVHlwZSog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTUlNRV9UWVBFKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpET01NaW1lVHlwZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5kZXNjcmlwdGlv
bigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01ET01QbHVnaW4qIHdlYmtp
dF9kb21fZG9tX21pbWVfdHlwZV9nZXRfZW5hYmxlZF9wbHVnaW4oV2ViS2l0RE9NRE9NTWltZVR5
cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX01JTUVfVFlQRShzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTWltZVR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVBsdWdpbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmVuYWJsZWRQbHVnaW4oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTU1pbWVUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTIyN2NlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGUuaApAQCAtMCwwICsx
LDk3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TURPTU1pbWVUeXBlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NTWltZVR5cGVfaAorCisjaWZkZWYg
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEUgICAgICAgICAgICAod2Via2l0X2RvbV9k
b21fbWltZV90eXBlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX01JTUVfVFlQ
RShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRSwgV2ViS2l0RE9NRE9NTWltZVR5cGUpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEUsIFdlYktp
dERPTURPTU1pbWVUeXBlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX01JTUVfVFlQ
RShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfRE9NX01JTUVfVFlQRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX01JTUVf
VFlQRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX01JTUVf
VFlQRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRSwgV2ViS2l0RE9NRE9NTWltZVR5cGVDbGFzcykp
CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NTWltZVR5cGUgeworICAgIFdlYktpdERPTU9iamVjdCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURPTU1pbWVUeXBlQ2xhc3Mg
eworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2NvbnRlbnRfdHlwZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01ET01NaW1lVHlwZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9kb21fbWltZV90eXBlX2dldF9jb250ZW50X3R5cGUoV2ViS2l0RE9NRE9NTWltZVR5cGUqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfc3VmZml4ZXM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfc3VmZml4ZXMoV2ViS2l0RE9NRE9NTWltZVR5cGUq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfZGVzY3JpcHRp
b246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGUKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NRE9N
TWltZVR5cGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRf
ZW5hYmxlZF9wbHVnaW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGUKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTVBsdWdpbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01QbHVnaW4q
Cit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2VuYWJsZWRfcGx1Z2luKFdlYktpdERPTURP
TU1pbWVUeXBlKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTU1pbWVUeXBlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBl
QXJyYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzlmMDUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkuY3BwCkBAIC0wLDAgKzEsMTY1
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheS5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TURPTU1pbWVUeXBlQXJyYXlQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NTWltZVR5
cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWV9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9ET01fTUlNRV9UWVBFX0FSUkFZLCBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJp
dmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRl
IHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheT4gY29yZU9iamVjdDsKK30g
V2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiBraXQoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJh
eSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVfQVJSQVkocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9N
TWltZVR5cGVBcnJheShvYmopOworfQorCitXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5KiBjb3Jl
KFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVl
c3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRE9NTWltZVR5
cGVBcnJheSogd3JhcERPTU1pbWVUeXBlQXJyYXkoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheSog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RP
TV9NSU1FX1RZUEVfQVJSQVksICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRE9N
TWltZVR5cGVBcnJheSwgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5LCBXRUJLSVRfRE9N
X1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0FSUkFZX0dFVF9QUklWQVRFKG9iamVj
dCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVj
dC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9kb21fbWltZV90eXBlX2FycmF5X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHNlbGYgPSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVf
QVJSQVkob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2Rv
bV9taW1lX3R5cGVfYXJyYXlfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2NvbnN0cnVjdG9yKEdU
eXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVj
dFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFBy
b3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVfQVJSQVlfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NTWltZVR5cGVBcnJh
eSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisg
ICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fbWltZV90
eXBlX2FycmF5X2NsYXNzX2luaXQoV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheUNsYXNzKiByZXF1
ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0
Q2xhc3MsIHNpemVvZihXZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZSkpOworICAgIGdv
YmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlf
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9t
X21pbWVfdHlwZV9hcnJheV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9nZXRfcHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAg
ICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJET01NaW1lVHlwZUFycmF5Omxlbmd0aCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01NaW1lVHlwZUFycmF5Omxlbmd0aCIsCisg
ICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2Fy
cmF5X2luaXQoV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSogcmVxdWVzdCkKK3sKKyAgICBXZWJL
aXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX01JTUVf
VFlQRV9BUlJBWV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERP
TURPTU1pbWVUeXBlQXJyYXlQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTURPTU1pbWVUeXBlKiB3
ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfaXRlbShXZWJLaXRET01ET01NaW1lVHlwZUFy
cmF5KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X01JTUVfVFlQRV9BUlJBWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJh
eSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NTWlt
ZVR5cGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01ET01NaW1lVHlwZSogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X25hbWVkX2l0ZW0o
V2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX01JTUVfVFlQRV9BUlJBWShzZWxmKSwgMCk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7CisgICAgV2ViQ29yZTo6RE9NTWltZVR5
cGVBcnJheSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpET01NaW1lVHlwZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5hbWVk
SXRlbShjb252ZXJ0ZWROYW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2dl
dF9sZW5ndGgoV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fTUlNRV9UWVBFX0FSUkFZKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpET01NaW1lVHlwZUFycmF5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9u
ZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjYxZjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkuaApAQCAtMCwwICsxLDg4IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTU1pbWVUeXBlQXJy
YXlfaAorI2RlZmluZSBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5X2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFX0FSUkFZICAgICAgICAgICAgKHdlYmtpdF9kb21f
ZG9tX21pbWVfdHlwZV9hcnJheV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9N
SU1FX1RZUEVfQVJSQVkob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEVfQVJSQVksIFdlYktpdERPTURP
TU1pbWVUeXBlQXJyYXkpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVfQVJSQVlf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX0RPTV9NSU1FX1RZUEVfQVJSQVksIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlD
bGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fTUlNRV9UWVBFX0FSUkFZKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9E
T01fTUlNRV9UWVBFX0FSUkFZKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fTUlNRV9UWVBF
X0FSUkFZX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFX0FSUkFZKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9E
T01fTUlNRV9UWVBFX0FSUkFZX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFX0FSUkFZLCBXZWJLaXRE
T01ET01NaW1lVHlwZUFycmF5Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTURPTU1pbWVUeXBl
QXJyYXkgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXlDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9k
b21fbWltZV90eXBlX2FycmF5X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9tX21pbWVfdHlwZV9hcnJheV9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTU1pbWVU
eXBlQXJyYXkKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01ET01NaW1lVHlwZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01NaW1lVHlwZSoKK3dlYmtpdF9kb21fZG9t
X21pbWVfdHlwZV9hcnJheV9pdGVtKFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHNlbGYsIGd1
bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X25h
bWVkX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheQorICogQG5h
bWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01ET01NaW1lVHlwZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01ET01NaW1lVHlwZSoKK3dlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9u
YW1lZF9pdGVtKFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHNlbGYsIGNvbnN0IGdjaGFyKiBu
YW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfZ2V0X2xlbmd0
aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01NaW1lVHlwZUFycmF5CisgKgorICogUmV0dXJu
czogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGd1bG9uZword2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2dldF9sZW5ndGgoV2ViS2l0
RE9NRE9NTWltZVR5cGVBcnJheSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01ET01NaW1l
VHlwZUFycmF5X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTU1pbWVUeXBlQXJyYXlQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEdsb2JhbE9iamVjdFByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5
UHJpdmF0ZS5oCmluZGV4IDU3YzAwMjguLjE2NmU5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmpl
Y3RQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZS5oCkBAIC0xOCwx
NiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZu
ZGVmIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9N
VGVzdEdsb2JhbE9iamVjdFByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01ET01NaW1lVHlwZUFy
cmF5UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRlX2gK
IAotI2luY2x1ZGUgIlRlc3RHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NVGVzdEdsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NTWltZVR5cGVB
cnJheS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5Lmg+
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogd3JhcFRl
c3RHbG9iYWxPYmplY3QoV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCopOwotV2ViS2l0RE9NVGVz
dEdsb2JhbE9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqKTsKLVdlYkNvcmU6
OlRlc3RHbG9iYWxPYmplY3QqIGNvcmUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCopOworV2Vi
S2l0RE9NRE9NTWltZVR5cGVBcnJheSogd3JhcERPTU1pbWVUeXBlQXJyYXkoV2ViQ29yZTo6RE9N
TWltZVR5cGVBcnJheSopOworV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSoga2l0KFdlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXkqKTsKK1dlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXkqIGNvcmUoV2Vi
S2l0RE9NRE9NTWltZVR5cGVBcnJheSopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRp
ZiAvKiBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01N
aW1lVHlwZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiY2E1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NTWltZVR5cGVQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9E
T01NaW1lVHlwZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01NaW1lVHlwZS5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURPTU1pbWVUeXBlKiB3cmFwRE9NTWlt
ZVR5cGUoV2ViQ29yZTo6RE9NTWltZVR5cGUqKTsKK1dlYktpdERPTURPTU1pbWVUeXBlKiBraXQo
V2ViQ29yZTo6RE9NTWltZVR5cGUqKTsKK1dlYkNvcmU6OkRPTU1pbWVUeXBlKiBjb3JlKFdlYktp
dERPTURPTU1pbWVUeXBlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdl
YktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjAzODkwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01E
T01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlLmgiCisjaW5j
bHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fTkFNRURfRkxP
V19DT0xMRUNUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04sIFdlYktpdERP
TURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUgeworI2lmIEVOQUJMRShDU1NfUkVHSU9O
UykKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbj4gY29yZU9iamVj
dDsKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1JFR0lPTlMpCit9IFdlYktpdERPTURPTU5hbWVkRmxv
d0NvbGxlY3Rpb25Qcml2YXRlOworCisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbioga2l0KFdlYkNv
cmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fTkFNRURfRkxPV19DT0xMRUNU
SU9OKHJldCk7CisKKyAgICByZXR1cm4gd3JhcERPTU5hbWVkRmxvd0NvbGxlY3Rpb24ob2JqKTsK
K30KKworV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbiogY29yZShXZWJLaXRET01ET01O
YW1lZEZsb3dDb2xsZWN0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbio+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURPTU5hbWVkRmxv
d0NvbGxlY3Rpb24qIHdyYXBET01OYW1lZEZsb3dDb2xsZWN0aW9uKFdlYkNvcmU6OkRPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04oZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OLCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKENTU19SRUdJT05TKQorCitHX0RFRklORV9UWVBFKFdlYktpdERP
TURPTU5hbWVkRmxvd0NvbGxlY3Rpb24sIHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVj
dGlvbiwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fbmFtZWRfZmxv
d19jb2xsZWN0aW9uX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01E
T01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX05BTUVE
X0ZMT1dfQ09MTEVDVElPTl9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShDU1NfUkVH
SU9OUykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVj
dC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKENTU19SRUdJT05TKQorICAgIHByaXYtPn5XZWJL
aXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5h
bGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93
X2NvbGxlY3Rpb25fZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9N
TmFtZWRGbG93Q29sbGVjdGlvbiogc2VsZiA9IFdFQktJVF9ET01fRE9NX05BTUVEX0ZMT1dfQ09M
TEVDVElPTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21f
ZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25f
Y29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBH
T2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVj
dCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xs
ZWN0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQor
ICAgIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAg
cHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsK
KyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2NsYXNzX2lu
aXQoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZSkpOworICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25f
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9t
X25hbWVkX2Zsb3dfY29sbGVjdGlvbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9nZXRfcHJvcGVy
dHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxv
bmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJET01OYW1lZEZsb3dDb2xs
ZWN0aW9uOmxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01OYW1lZEZs
b3dDb2xsZWN0aW9uOmxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2luaXQoV2ViS2l0RE9NRE9NTmFtZWRG
bG93Q29sbGVjdGlvbiogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xs
ZWN0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElP
Tl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb25Qcml2YXRlKCk7Cit9CisKK1dlYktpdERPTVdlYktpdE5hbWVkRmxvdyog
d2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2l0ZW0oV2ViS2l0RE9NRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbiogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworI2lmIEVOQUJMRShDU1Nf
UkVHSU9OUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTkFNRURfRkxPV19DT0xMRUNU
SU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJLaXROYW1lZEZs
b3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDc3MgUmVnaW9ucyIpCisgICAgcmV0dXJuIDA7CisjZW5k
aWYgLyogRU5BQkxFKENTU19SRUdJT05TKSAqLworfQorCitXZWJLaXRET01XZWJLaXROYW1lZEZs
b3cqIHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9uYW1lZF9pdGVtKFdlYktp
dERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQorewor
I2lmIEVOQUJMRShDU1NfUkVHSU9OUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTkFN
RURfRkxPV19DT0xMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChu
YW1lLCAwKTsKKyAgICBXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OldlYktpdE5hbWVkRmxv
dz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5hbWVkSXRlbShjb252ZXJ0ZWRO
YW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKG5hbWUpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNzcyBSZWdpb25zIikKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoQ1NTX1JFR0lPTlMpICovCit9CisKK2d1bG9uZyB3ZWJr
aXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChXZWJLaXRET01ET01O
YW1lZEZsb3dDb2xsZWN0aW9uKiBzZWxmKQoreworI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ3NzIFJlZ2lvbnMiKQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShDU1NfUkVHSU9OUykgKi8KK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGYz
OWVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmgKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX05BTUVE
X0ZMT1dfQ09MTEVDVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2Nv
bGxlY3Rpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fTkFNRURfRkxPV19D
T0xMRUNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OLCBXZWJLaXRET01E
T01OYW1lZEZsb3dDb2xsZWN0aW9uKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fTkFNRURfRkxP
V19DT0xMRUNUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OLCBXZWJLaXRE
T01ET01OYW1lZEZsb3dDb2xsZWN0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9N
X05BTUVEX0ZMT1dfQ09MTEVDVElPTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTikp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTl9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
RE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX05BTUVE
X0ZMT1dfQ09MTEVDVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX05BTUVEX0ZMT1dfQ09MTEVDVElPTiwgV2Vi
S2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01E
T01OYW1lZEZsb3dDb2xsZWN0aW9uIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uQ2xhc3Mg
eworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9nZXRfdHlwZSh2
b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25faXRl
bToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uCisgKiBAaW5k
ZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NV2ViS2l0TmFtZWRGbG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyoKK3dlYmtpdF9kb21fZG9tX25hbWVkX2Zs
b3dfY29sbGVjdGlvbl9pdGVtKFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHNlbGYs
IGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xs
ZWN0aW9uX25hbWVkX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29s
bGVjdGlvbgorICogQG5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01XZWJLaXROYW1lZEZsb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93Kgord2Via2l0X2Rv
bV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX25hbWVkX2l0ZW0oV2ViS2l0RE9NRE9NTmFtZWRG
bG93Q29sbGVjdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBBICNndWxv
bmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3
ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChXZWJLaXRET01E
T01OYW1lZEZsb3dDb2xsZWN0aW9uKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTU5h
bWVkRmxvd0NvbGxlY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xs
ZWN0aW9uUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzM3NTEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwzNiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01O
YW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTU5hbWVkRmxv
d0NvbGxlY3Rpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRE9NTmFtZWRGbG93Q29s
bGVjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xs
ZWN0aW9uLmg+CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHdyYXBET01OYW1lZEZsb3dDb2xsZWN0
aW9uKFdlYkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24qKTsKK1dlYktpdERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24qIGtpdChXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKik7CitX
ZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBjb3JlKFdlYktpdERPTURPTU5hbWVkRmxv
d0NvbGxlY3Rpb24qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxF
KENTU19SRUdJT05TKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVj
dGlvblByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW4uY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01QbHVnaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjM3YWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbi5jcHAKQEAgLTAsMCArMSwyMzQgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01ET01QbHVnaW4uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01NaW1lVHlw
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01QbHVnaW5Qcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
ZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOLCBXZWJLaXRE
T01ET01QbHVnaW5Qcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NUGx1Z2lu
UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVBsdWdpbj4gY29yZU9iamVjdDsKK30g
V2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTURPTVBsdWdpbioga2l0KFdlYkNvcmU6OkRPTVBsdWdpbiogb2JqKQoreworICAgIGlmICgh
b2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmpl
Y3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9QTFVHSU4o
cmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NUGx1Z2luKG9iaik7Cit9CisKK1dlYkNvcmU6OkRP
TVBsdWdpbiogY29yZShXZWJLaXRET01ET01QbHVnaW4qIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01QbHVnaW4qPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01ET01QbHVnaW4q
IHdyYXBET01QbHVnaW4oV2ViQ29yZTo6RE9NUGx1Z2luKiBjb3JlT2JqZWN0KQoreworICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fUExVR0lOKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJTiwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVf
VFlQRShXZWJLaXRET01ET01QbHVnaW4sIHdlYmtpdF9kb21fZG9tX3BsdWdpbiwgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKKyAg
ICBQUk9QX0ZJTEVOQU1FLAorICAgIFBST1BfREVTQ1JJUFRJT04sCisgICAgUFJPUF9MRU5HVEgs
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURPTVBsdWdpblByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0RPTV9QTFVHSU5fR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYt
Pn5XZWJLaXRET01ET01QbHVnaW5Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV9kb21fcGx1Z2luX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRET01ET01QbHVnaW4qIHNlbGYgPSBXRUJLSVRfRE9NX0RPTV9QTFVHSU4o
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1F
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9wbHVn
aW5fZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklMRU5B
TUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3Bs
dWdpbl9nZXRfZmlsZW5hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVTQ1JJUFRJT046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21fZG9tX3BsdWdpbl9nZXRfZGVzY3JpcHRpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb21fcGx1Z2luX2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIEdPYmplY3QqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBl
LCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSog
Y29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX2RvbV9wbHVnaW5fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlw
ZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAg
IFdlYktpdERPTURPTVBsdWdpblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5f
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RE9NUGx1Z2luKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2RvbV9wbHVnaW5fY2xhc3NfaW5pdChXZWJLaXRET01ET01QbHVnaW5DbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVj
dENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZSkpOworICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX3BsdWdpbl9maW5hbGl6
ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9tX3BsdWdp
bl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJET01QbHVn
aW46bmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBET01QbHVnaW46bmFtZSIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0ZJTEVOQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImZpbGVuYW1lIiwKKyAgICAgICAgICAgICJET01QbHVnaW46ZmlsZW5h
bWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRE9NUGx1Z2luOmZpbGVuYW1lIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfREVTQ1JJUFRJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iLAorICAgICAgICAgICAgIkRPTVBsdWdpbjpk
ZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBET01QbHVnaW46ZGVz
Y3JpcHRpb24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkRPTVBsdWdpbjps
ZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRE9NUGx1Z2luOmxlbmd0aCIs
CisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2luX2lu
aXQoV2ViS2l0RE9NRE9NUGx1Z2luKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTURPTVBsdWdp
blByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fR0VUX1BSSVZBVEUocmVxdWVz
dCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01ET01QbHVnaW5Qcml2YXRlKCk7Cit9CisKK1dl
YktpdERPTURPTU1pbWVUeXBlKiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5faXRlbShXZWJLaXRET01E
T01QbHVnaW4qIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fUExVR0lOKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01QbHVnaW4qIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTU1pbWVUeXBlPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NTWltZVR5
cGUqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9uYW1lZF9pdGVtKFdlYktpdERPTURPTVBsdWdpbiog
c2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1BMVUdJTihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7Cisg
ICAgV2ViQ29yZTo6RE9NUGx1Z2luKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkRPTU1pbWVUeXBlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+bmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV9wbHVn
aW5fZ2V0X25hbWUoV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPTV9QTFVHSU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVBsdWdpbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5uYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X2ZpbGVuYW1lKFdlYktpdERPTURPTVBsdWdpbiog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fUExVR0lOKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpET01QbHVnaW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZmlsZW5hbWUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRf
ZGVzY3JpcHRpb24oV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPTV9QTFVHSU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVBsdWdpbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5kZXNjcmlwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitndWxvbmcgd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9sZW5ndGgoV2ViS2l0RE9NRE9NUGx1
Z2luKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9QTFVHSU4oc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkRPTVBsdWdpbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0ZTljZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRE9NUGx1Z2luLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NUGx1Z2luX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NRE9NUGx1Z2luX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
T2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lO
ICAgICAgICAgICAgKHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0RPTV9QTFVHSU4ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU4sIFdlYktpdERPTURPTVBs
dWdpbikpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTl9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJ
TiwgV2ViS2l0RE9NRE9NUGx1Z2luQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX1BM
VUdJTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfRE9NX1BMVUdJTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX1BMVUdJ
Tl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfRE9NX1BMVUdJTikpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTl9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfRE9NX1BMVUdJTiwgV2ViS2l0RE9NRE9NUGx1Z2luQ2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTURPTVBsdWdpbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NUGx1Z2luQ2xhc3MgeworICAgIFdlYktpdERPTU9i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21fZG9tX3BsdWdpbl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9w
bHVnaW5faXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01QbHVnaW4KKyAqIEBpbmRleDog
QSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01E
T01NaW1lVHlwZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01ET01NaW1lVHlwZSoKK3dlYmtpdF9kb21fZG9tX3BsdWdpbl9pdGVtKFdlYktpdERP
TURPTVBsdWdpbiogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
bV9wbHVnaW5fbmFtZWRfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01QbHVnaW4KKyAq
IEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NRE9NTWltZVR5cGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NRE9NTWltZVR5cGUqCit3ZWJraXRfZG9tX2RvbV9wbHVnaW5fbmFtZWRf
aXRlbShXZWJLaXRET01ET01QbHVnaW4qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NUGx1Z2luCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV9wbHVnaW5f
Z2V0X25hbWUoV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV9wbHVnaW5fZ2V0X2ZpbGVuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVBsdWdp
bgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9maWxlbmFt
ZShXZWJLaXRET01ET01QbHVnaW4qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3Bs
dWdpbl9nZXRfZGVzY3JpcHRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NUGx1Z2luCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X2Rlc2NyaXB0aW9u
KFdlYktpdERPTURPTVBsdWdpbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fcGx1
Z2luX2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NUGx1Z2luCisgKgorICog
UmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9sZW5ndGgoV2ViS2l0RE9N
RE9NUGx1Z2luKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTVBsdWdpbl9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTQyY2UKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5LmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTURPTVBsdWdpbkFycmF5LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0lt
cG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NUGx1Z2lu
QXJyYXlQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fQVJSQVlfR0VUX1BSSVZBVEUob2JqKSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJ
Tl9BUlJBWSwgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RE9NUGx1Z2luQXJyYXk+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTVBsdWdpbkFycmF5UHJp
dmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTVBsdWdpbkFycmF5KiBr
aXQoV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZKHJldCk7
CisKKyAgICByZXR1cm4gd3JhcERPTVBsdWdpbkFycmF5KG9iaik7Cit9CisKK1dlYkNvcmU6OkRP
TVBsdWdpbkFycmF5KiBjb3JlKFdlYktpdERPTURPTVBsdWdpbkFycmF5KiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01ET01QbHVnaW5BcnJheSogd3JhcERPTVBsdWdpbkFycmF5KFdlYkNvcmU6OkRPTVBsdWdp
bkFycmF5KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfRE9NX1BMVUdJTl9BUlJBWSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01E
T01QbHVnaW5BcnJheSwgd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5LCBXRUJLSVRfRE9NX1RZ
UEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9Owor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fRE9NX1BMVUdJTl9BUlJBWV9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwor
CisgICAgcHJpdi0+fldlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZSgpOworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9wYXJlbnRfY2xhc3MpLT5maW5h
bGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJy
YXlfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NUGx1Z2luQXJy
YXkqIHNlbGYgPSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fQVJSQVkob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFs
dWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfZ2V0X2xlbmd0
aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21f
cGx1Z2luX2FycmF5X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQor
eworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3Bs
dWdpbl9hcnJheV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NUGx1
Z2luQXJyYXlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkRPTVBsdWdpbkFycmF5Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfY2xhc3NfaW5pdChXZWJLaXRET01ET01QbHVnaW5BcnJh
eUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21fcGx1Z2lu
X2FycmF5X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZG9tX2RvbV9wbHVnaW5fYXJyYXlfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAg
ICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiRE9NUGx1Z2luQXJyYXk6bGVuZ3RoIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIERPTVBsdWdpbkFycmF5Omxlbmd0aCIsCisgICAg
ICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2lu
aXQoV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9N
UGx1Z2luQXJyYXlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZX0dF
VF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NRE9NUGx1Z2luQXJy
YXlQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTURPTVBsdWdpbiogd2Via2l0X2RvbV9kb21fcGx1
Z2luX2FycmF5X2l0ZW0oV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHNlbGYsIGd1bG9uZyBpbmRl
eCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fUExVR0lOX0FSUkFZKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpET01QbHVnaW5BcnJheSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NUGx1Z2luPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NUGx1Z2luKiB3ZWJraXRfZG9tX2RvbV9w
bHVnaW5fYXJyYXlfbmFtZWRfaXRlbShXZWJLaXRET01ET01QbHVnaW5BcnJheSogc2VsZiwgY29u
c3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1BMVUdJTl9B
UlJBWShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7CisgICAg
V2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NUGx1Z2luPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+bmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2lu
X2FycmF5X3JlZnJlc2goV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHNlbGYsIGdib29sZWFuIHJl
bG9hZCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9QTFVHSU5fQVJSQVkoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnJlZnJlc2gocmVsb2FkKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX3Bs
dWdpbl9hcnJheV9nZXRfbGVuZ3RoKFdlYktpdERPTURPTVBsdWdpbkFycmF5KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9QTFVHSU5fQVJSQVkoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlZDM0ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkuaApAQCAtMCwwICsxLDk4IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTVBsdWdpbkFycmF5
X2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlfaAorCisjaWZkZWYgV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX0RPTV9QTFVHSU5fQVJSQVkgICAgICAgICAgICAod2Via2l0X2RvbV9kb21fcGx1
Z2luX2FycmF5X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTl9BUlJB
WShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfRE9NX1BMVUdJTl9BUlJBWSwgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fQVJSQVlfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9QTFVHSU5f
QVJSQVksIFdlYktpdERPTURPTVBsdWdpbkFycmF5Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfRE9NX1BMVUdJTl9BUlJBWShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJTl9BUlJBWSkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfRE9NX1BMVUdJTl9BUlJBWV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJTl9BUlJBWSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTl9BUlJBWV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJTl9B
UlJBWSwgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
RE9NUGx1Z2luQXJyYXkgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbkFycmF5Q2xhc3MgeworICAgIFdlYktpdERP
TU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21fZG9tX3BsdWdpbl9hcnJheV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV9wbHVnaW5fYXJyYXlfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01QbHVn
aW5BcnJheQorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTURPTVBsdWdpbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01QbHVnaW4qCit3ZWJraXRfZG9tX2RvbV9wbHVn
aW5fYXJyYXlfaXRlbShXZWJLaXRET01ET01QbHVnaW5BcnJheSogc2VsZiwgZ3Vsb25nIGluZGV4
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfbmFtZWRfaXRlbToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01QbHVnaW5BcnJheQorICogQG5hbWU6IEEgI2djaGFyCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01QbHVnaW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NUGx1
Z2luKgord2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X25hbWVkX2l0ZW0oV2ViS2l0RE9NRE9N
UGx1Z2luQXJyYXkqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV9wbHVnaW5fYXJyYXlfcmVmcmVzaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01Q
bHVnaW5BcnJheQorICogQHJlbG9hZDogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5
X3JlZnJlc2goV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHNlbGYsIGdib29sZWFuIHJlbG9hZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2dldF9sZW5ndGg6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkKKyAqCisgKiBSZXR1cm5zOiBBICNndWxv
bmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3
ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfZ2V0X2xlbmd0aChXZWJLaXRET01ET01QbHVnaW5B
cnJheSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01ET01QbHVnaW5BcnJheV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5B
cnJheVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzM3MWI0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTVBsdWdpbkFy
cmF5UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTVBsdWdpbkFycmF5Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURPTVBsdWdpbkFycmF5Lmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHdyYXBET01QbHVnaW5BcnJheShXZWJD
b3JlOjpET01QbHVnaW5BcnJheSopOworV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIGtpdChXZWJD
b3JlOjpET01QbHVnaW5BcnJheSopOworV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIGNvcmUoV2Vi
S2l0RE9NRE9NUGx1Z2luQXJyYXkqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
LyogV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NUGx1Z2luUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5Qcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmZjFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NUGx1Z2luUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTURPTVBsdWdpblByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9ET01QbHVn
aW4uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRE9NUGx1Z2luLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRE9NUGx1Z2luKiB3cmFwRE9NUGx1Z2luKFdlYkNvcmU6
OkRPTVBsdWdpbiopOworV2ViS2l0RE9NRE9NUGx1Z2luKiBraXQoV2ViQ29yZTo6RE9NUGx1Z2lu
Kik7CitXZWJDb3JlOjpET01QbHVnaW4qIGNvcmUoV2ViS2l0RE9NRE9NUGx1Z2luKik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURPTVBsdWdpblByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TZWxlY3Rp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGY0MTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURPTVNlbGVjdGlvbi5jcHAKQEAgLTAsMCArMSw1MzYgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01ET01TZWxlY3Rpb24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01TZWxlY3Rp
b25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUmFuZ2VQcml2YXRlLmgi
CisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU0VM
RUNUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwg
V0VCS0lUX0RPTV9UWVBFX0RPTV9TRUxFQ1RJT04sIFdlYktpdERPTURPTVNlbGVjdGlvblByaXZh
dGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01TZWxlY3Rpb25Qcml2YXRlIHsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6RE9NU2VsZWN0aW9uPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01E
T01TZWxlY3Rpb25Qcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRE9N
U2VsZWN0aW9uKiBraXQoV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBvYmopCit7CisgICAgaWYgKCFv
YmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVj
dENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1NFTEVDVElP
TihyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01TZWxlY3Rpb24ob2JqKTsKK30KKworV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uKiBjb3JlKFdlYktpdERPTURPTVNlbGVjdGlvbiogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVNlbGVjdGlvbio+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTURPTVNlbGVjdGlvbiogd3JhcERPTVNlbGVjdGlvbihXZWJDb3JlOjpET01TZWxlY3Rpb24q
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0RPTV9TRUxFQ1RJT04oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET01fU0VM
RUNUSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURPTVNlbGVjdGlvbiwg
d2Via2l0X2RvbV9kb21fc2VsZWN0aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BTkNIT1JfTk9ERSwKKyAgICBQUk9QX0FOQ0hPUl9P
RkZTRVQsCisgICAgUFJPUF9GT0NVU19OT0RFLAorICAgIFBST1BfRk9DVVNfT0ZGU0VULAorICAg
IFBST1BfSVNfQ09MTEFQU0VELAorICAgIFBST1BfUkFOR0VfQ09VTlQsCisgICAgUFJPUF9UWVBF
LAorICAgIFBST1BfQkFTRV9OT0RFLAorICAgIFBST1BfQkFTRV9PRkZTRVQsCisgICAgUFJPUF9F
WFRFTlRfTk9ERSwKKyAgICBQUk9QX0VYVEVOVF9PRkZTRVQsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TRUxF
Q1RJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01E
T01TZWxlY3Rpb25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21f
c2VsZWN0aW9uX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYgPSBXRUJLSVRfRE9NX0RPTV9TRUxFQ1RJ
T04ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9B
TkNIT1JfTk9ERToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X2RvbV9zZWxlY3Rpb25fZ2V0X2FuY2hvcl9ub2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0FOQ0hPUl9PRkZTRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZh
bHVlLCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2FuY2hvcl9vZmZzZXQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9DVVNfTk9ERToKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2ZvY3VzX25v
ZGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9DVVNfT0ZGU0VUOgor
ICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9u
X2dldF9mb2N1c19vZmZzZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SVNfQ09MTEFQU0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRf
ZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2lzX2NvbGxhcHNlZChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9SQU5HRV9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmco
dmFsdWUsIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfcmFuZ2VfY291bnQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fdHlw
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CQVNFX05PREU6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dl
dF9iYXNlX25vZGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkFTRV9P
RkZTRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fZ2V0X2Jhc2Vfb2Zmc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0VYVEVOVF9OT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZXh0ZW50X25vZGUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRVhURU5UX09GRlNFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWxvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZXh0ZW50X29mZnNldChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fc2Vs
ZWN0aW9uX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3NlbGVjdGlv
bl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX1NFTEVDVElPTl9HRVRfUFJJVkFURShvYmplY3Qp
OworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01TZWxlY3Rp
b24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVj
dGlvbl9jbGFzc19pbml0KFdlYktpdERPTURPTVNlbGVjdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01ET01TZWxlY3Rpb25Qcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5j
b25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb25zdHJ1Y3RvcjsKKyAgICBn
b2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2ZpbmFsaXpl
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTkNIT1JfTk9ERSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJhbmNob3Itbm9kZSIsCisgICAg
ICAgICAgICAiRE9NU2VsZWN0aW9uOmFuY2hvci1ub2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NTm9kZSogRE9NU2VsZWN0aW9uOmFuY2hvci1ub2RlIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQU5DSE9SX09GRlNFVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3Vsb25nKAorICAgICAgICAgICAgImFuY2hvci1vZmZzZXQiLAorICAgICAgICAgICAgIkRP
TVNlbGVjdGlvbjphbmNob3Itb2Zmc2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25n
IERPTVNlbGVjdGlvbjphbmNob3Itb2Zmc2V0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9GT0NVU19OT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgImZvY3VzLW5vZGUiLAorICAgICAgICAgICAgIkRPTVNlbGVjdGlvbjpmb2N1cy1ub2RlIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogRE9NU2VsZWN0aW9uOmZvY3Vz
LW5vZGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT0NVU19PRkZTRVQs
CisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJmb2N1cy1vZmZzZXQi
LAorICAgICAgICAgICAgIkRPTVNlbGVjdGlvbjpmb2N1cy1vZmZzZXQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBndWxvbmcgRE9NU2VsZWN0aW9uOmZvY3VzLW9mZnNldCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfSVNfQ09MTEFQU0VELAorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym9vbGVhbigKKyAgICAgICAgICAgICJpcy1jb2xsYXBzZWQiLAorICAgICAgICAgICAgIkRPTVNl
bGVjdGlvbjppcy1jb2xsYXBzZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBE
T01TZWxlY3Rpb246aXMtY29sbGFwc2VkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkFOR0VfQ09V
TlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJyYW5nZS1jb3Vu
dCIsCisgICAgICAgICAgICAiRE9NU2VsZWN0aW9uOnJhbmdlLWNvdW50IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ3Vsb25nIERPTVNlbGVjdGlvbjpyYW5nZS1jb3VudCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJET01TZWxlY3Rpb246dHlwZSIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBET01TZWxlY3Rpb246dHlwZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0JBU0VfTk9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJiYXNlLW5vZGUiLAorICAgICAgICAgICAgIkRPTVNlbGVjdGlvbjpiYXNlLW5vZGUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBET01TZWxlY3Rpb246YmFz
ZS1ub2RlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkFTRV9PRkZTRVQs
CisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJiYXNlLW9mZnNldCIs
CisgICAgICAgICAgICAiRE9NU2VsZWN0aW9uOmJhc2Utb2Zmc2V0IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3Vsb25nIERPTVNlbGVjdGlvbjpiYXNlLW9mZnNldCIsCisgICAgICAgICAgICAw
LCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfRVhURU5UX05PREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmpl
Y3QoCisgICAgICAgICAgICAiZXh0ZW50LW5vZGUiLAorICAgICAgICAgICAgIkRPTVNlbGVjdGlv
bjpleHRlbnQtbm9kZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIERP
TVNlbGVjdGlvbjpleHRlbnQtbm9kZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9E
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0VYVEVOVF9PRkZTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAg
ICAgICJleHRlbnQtb2Zmc2V0IiwKKyAgICAgICAgICAgICJET01TZWxlY3Rpb246ZXh0ZW50LW9m
ZnNldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01TZWxlY3Rpb246ZXh0ZW50
LW9mZnNldCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21f
c2VsZWN0aW9uX2luaXQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiByZXF1ZXN0KQoreworICAgIFdl
YktpdERPTURPTVNlbGVjdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TRUxFQ1RJ
T05fR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01ET01TZWxl
Y3Rpb25Qcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2NvbGxh
cHNlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgZ3Vs
b25nIG9mZnNldCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKKyAgICBX
ZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6Tm9kZSogY29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsKKyAgICBpdGVt
LT5jb2xsYXBzZShjb252ZXJ0ZWROb2RlLCBvZmZzZXQpOworfQorCit2b2lkIHdlYmtpdF9kb21f
ZG9tX3NlbGVjdGlvbl9jb2xsYXBzZV90b19lbmQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxm
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04o
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdl
YkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5jb2xsYXBzZVRvRW5kKGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2NvbGxhcHNlX3RvX3N0YXJ0
KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+Y29sbGFwc2VUb1N0YXJ0KGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9k
b21fc2VsZWN0aW9uX2RlbGV0ZV9mcm9tX2RvY3VtZW50KFdlYktpdERPTURPTVNlbGVjdGlvbiog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZikpOworICAg
IFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5kZWxldGVGcm9tRG9jdW1lbnQoKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb21f
c2VsZWN0aW9uX2NvbnRhaW5zX25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBXZWJL
aXRET01Ob2RlKiBub2RlLCBnYm9vbGVhbiBhbGxvd1BhcnRpYWwpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShub2RlKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpO
b2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0Ojpjb3JlKG5vZGUpOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPmNvbnRhaW5zTm9kZSgqY29udmVydGVkTm9kZSwgYWxsb3dQYXJ0aWFsKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9z
ZWxlY3RfYWxsX2NoaWxkcmVuKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9N
Tm9kZSogbm9kZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKKyAgICBX
ZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6Tm9kZSogY29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsKKyAgICBpdGVt
LT5zZWxlY3RBbGxDaGlsZHJlbigqY29udmVydGVkTm9kZSk7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX2V4dGVuZChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktp
dERPTU5vZGUqIG5vZGUsIGd1bG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX05PREUobm9kZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0Ojpj
b3JlKG5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0t
PmV4dGVuZCgqY29udmVydGVkTm9kZSwgb2Zmc2V0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitXZWJLaXRET01S
YW5nZSogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9yYW5nZV9hdChXZWJLaXRET01ET01T
ZWxlY3Rpb24qIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVj
dGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5nZXRSYW5nZUF0KGluZGV4LCBlYykpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9k
b21fc2VsZWN0aW9uX3JlbW92ZV9hbGxfcmFuZ2VzKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZikpOworICAgIFdl
YkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5yZW1vdmVBbGxSYW5nZXMoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25f
YWRkX3JhbmdlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NUmFuZ2UqIHJh
bmdlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHJhbmdlKSk7CisgICAgV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6
OlJhbmdlKiBjb252ZXJ0ZWRSYW5nZSA9IFdlYktpdDo6Y29yZShyYW5nZSk7CisgICAgaXRlbS0+
YWRkUmFuZ2UoKmNvbnZlcnRlZFJhbmdlKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fc2V0X2Jhc2VfYW5kX2V4dGVudChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdl
YktpdERPTU5vZGUqIGJhc2VOb2RlLCBndWxvbmcgYmFzZU9mZnNldCwgV2ViS2l0RE9NTm9kZSog
ZXh0ZW50Tm9kZSwgZ3Vsb25nIGV4dGVudE9mZnNldCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9TRUxFQ1RJT04oc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OT0RFKGJhc2VOb2RlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05P
REUoZXh0ZW50Tm9kZSkpOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRCYXNlTm9kZSA9IFdl
YktpdDo6Y29yZShiYXNlTm9kZSk7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkRXh0ZW50
Tm9kZSA9IFdlYktpdDo6Y29yZShleHRlbnROb2RlKTsKKyAgICBpdGVtLT5zZXRCYXNlQW5kRXh0
ZW50KGNvbnZlcnRlZEJhc2VOb2RlLCBiYXNlT2Zmc2V0LCBjb252ZXJ0ZWRFeHRlbnROb2RlLCBl
eHRlbnRPZmZzZXQpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9zZXRfcG9z
aXRpb24oV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlLCBn
dWxvbmcgb2Zmc2V0KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSkpOworICAg
IFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
ZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0Ojpjb3JlKG5vZGUpOworICAgIGl0
ZW0tPnNldFBvc2l0aW9uKGNvbnZlcnRlZE5vZGUsIG9mZnNldCk7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9kb21fc2VsZWN0aW9uX2VtcHR5KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZikpOworICAgIFdlYkNvcmU6
OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5lbXB0
eSgpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9tb2RpZnkoV2ViS2l0RE9N
RE9NU2VsZWN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogYWx0ZXIsIGNvbnN0IGdjaGFyKiBkaXJl
Y3Rpb24sIGNvbnN0IGdjaGFyKiBncmFudWxhcml0eSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9TRUxFQ1RJT04oc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoYWx0ZXIpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoZGlyZWN0aW9uKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGdyYW51
bGFyaXR5KTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkQWx0ZXIgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgoYWx0ZXIpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZERpcmVjdGlvbiA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChkaXJlY3Rpb24pOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEdy
YW51bGFyaXR5ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdyYW51bGFyaXR5KTsKKyAgICBpdGVt
LT5tb2RpZnkoY29udmVydGVkQWx0ZXIsIGNvbnZlcnRlZERpcmVjdGlvbiwgY29udmVydGVkR3Jh
bnVsYXJpdHkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25f
Z2V0X2FuY2hvcl9ub2RlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
T01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5hbmNob3JOb2RlKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vs
b25nIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYW5jaG9yX29mZnNldChXZWJLaXRET01E
T01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVD
VElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5hbmNob3JPZmZzZXQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fZ2V0X2ZvY3VzX25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvY3Vz
Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2ZvY3VzX29mZnNldChXZWJL
aXRET01ET01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1NFTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5mb2N1c09mZnNl
dCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9tX3Nl
bGVjdGlvbl9nZXRfaXNfY29sbGFwc2VkKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmlzQ29sbGFwc2VkKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfcmFuZ2VfY291bnQo
V2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9TRUxFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+cmFuZ2VD
b3VudCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl90eXBlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rp
b25fZ2V0X2Jhc2Vfbm9kZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YmFzZU5vZGUoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxv
bmcgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9iYXNlX29mZnNldChXZWJLaXRET01ET01T
ZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElP
TihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5iYXNlT2Zmc2V0KCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2dldF9leHRlbnRfbm9kZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZXh0ZW50Tm9k
ZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K2d1bG9uZyB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2V4dGVudF9vZmZzZXQoV2ViS2l0
RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9T
RUxFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+ZXh0ZW50T2Zmc2V0
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TZWxlY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRE9NU2VsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMGI4MTUzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU2VsZWN0aW9uLmgKQEAg
LTAsMCArMSwzMjYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NRE9NU2VsZWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NU2VsZWN0aW9uX2gK
KworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fU0VMRUNUSU9OICAgICAgICAgICAgKHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RP
TV9TRUxFQ1RJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9TRUxFQ1RJT04sIFdlYktpdERPTURPTVNlbGVjdGlv
bikpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1NFTEVDVElPTl9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NFTEVD
VElPTiwgV2ViS2l0RE9NRE9NU2VsZWN0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
RE9NX1NFTEVDVElPTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1NFTEVDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfRE9NX1NFTEVDVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NFTEVDVElPTikpCisjZGVmaW5lIFdFQktJVF9E
T01fRE9NX1NFTEVDVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NFTEVDVElPTiwgV2ViS2l0RE9NRE9NU2Vs
ZWN0aW9uQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTURPTVNlbGVjdGlvbiB7CisgICAgV2Vi
S2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9N
U2VsZWN0aW9uQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfdHlw
ZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29sbGFwc2U6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKiBAbm9kZTogQSAjV2ViS2l0RE9N
Tm9kZQorICogQG9mZnNldDogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb2xsYXBzZShX
ZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIGd1bG9uZyBv
ZmZzZXQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb2xsYXBzZV90b19l
bmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX2NvbGxhcHNlX3RvX2VuZChXZWJLaXRET01ET01TZWxlY3Rp
b24qIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fY29sbGFwc2VfdG9fc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0
aW9uCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2NvbGxhcHNlX3RvX3N0
YXJ0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9kZWxldGVfZnJvbV9kb2N1bWVudDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2RlbGV0ZV9m
cm9tX2RvY3VtZW50KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX2NvbnRhaW5zX25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NU2VsZWN0aW9uCisgKiBAbm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGFsbG93UGFy
dGlhbDogQSAjZ2Jvb2xlYW4KKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9k
b21fc2VsZWN0aW9uX2NvbnRhaW5zX25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBX
ZWJLaXRET01Ob2RlKiBub2RlLCBnYm9vbGVhbiBhbGxvd1BhcnRpYWwpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9zZWxlY3RfYWxsX2NoaWxkcmVuOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURPTVNlbGVjdGlvbgorICogQG5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9k
b21fc2VsZWN0aW9uX3NlbGVjdF9hbGxfY2hpbGRyZW4oV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBz
ZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fZXh0ZW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICogQG5v
ZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBvZmZzZXQ6IEEgI2d1bG9uZworICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9leHRlbmQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBz
ZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlLCBndWxvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9yYW5nZV9hdDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTVJhbmdlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTVJhbmdlKgord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9yYW5nZV9hdChXZWJL
aXRET01ET01TZWxlY3Rpb24qIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9yZW1vdmVfYWxsX3JhbmdlczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX3JlbW92
ZV9hbGxfcmFuZ2VzKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX2FkZF9yYW5nZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01TZWxlY3Rpb24KKyAqIEByYW5nZTogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2FkZF9yYW5nZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTVJhbmdl
KiByYW5nZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX3NldF9iYXNlX2Fu
ZF9leHRlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKiBAYmFzZU5v
ZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBiYXNlT2Zmc2V0OiBBICNndWxvbmcKKyAqIEBleHRl
bnROb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXh0ZW50T2Zmc2V0OiBBICNndWxvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX3NldF9iYXNlX2FuZF9leHRlbnQoV2ViS2l0RE9NRE9NU2VsZWN0aW9u
KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBiYXNlTm9kZSwgZ3Vsb25nIGJhc2VPZmZzZXQsIFdlYktp
dERPTU5vZGUqIGV4dGVudE5vZGUsIGd1bG9uZyBleHRlbnRPZmZzZXQpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9zZXRfcG9zaXRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NU2VsZWN0aW9uCisgKiBAbm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQG9mZnNldDog
QSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9zZXRfcG9zaXRpb24oV2ViS2l0RE9NRE9NU2Vs
ZWN0aW9uKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlLCBndWxvbmcgb2Zmc2V0KTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZW1wdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NU2VsZWN0aW9uCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9lbXB0eShXZWJLaXRET01ET01TZWxl
Y3Rpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9tb2RpZnk6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKiBAYWx0ZXI6IEEgI2djaGFy
CisgKiBAZGlyZWN0aW9uOiBBICNnY2hhcgorICogQGdyYW51bGFyaXR5OiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2RvbV9zZWxlY3Rpb25fbW9kaWZ5KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgY29uc3Qg
Z2NoYXIqIGFsdGVyLCBjb25zdCBnY2hhciogZGlyZWN0aW9uLCBjb25zdCBnY2hhciogZ3JhbnVs
YXJpdHkpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYW5jaG9yX25v
ZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fZ2V0X2FuY2hvcl9ub2RlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9hbmNob3Jfb2Zmc2V0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZwor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtp
dF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYW5jaG9yX29mZnNldChXZWJLaXRET01ET01TZWxlY3Rp
b24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZm9jdXNf
bm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fZG9tX3Nl
bGVjdGlvbl9nZXRfZm9jdXNfbm9kZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZm9jdXNfb2Zmc2V0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZwor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtp
dF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZm9jdXNfb2Zmc2V0KFdlYktpdERPTURPTVNlbGVjdGlv
biogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9pc19jb2xs
YXBzZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfaXNfY29sbGFwc2VkKFdl
YktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2Vs
ZWN0aW9uX2dldF9yYW5nZV9jb3VudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rp
b24KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3Jh
bmdlX2NvdW50KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fdHlwZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9tX3Nl
bGVjdGlvbl9nZXRfc2VsZWN0aW9uX3R5cGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2Jhc2Vfbm9kZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRf
YmFzZV9ub2RlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fc2VsZWN0aW9uX2dldF9iYXNlX29mZnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fZ2V0X2Jhc2Vfb2Zmc2V0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9leHRlbnRfbm9kZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZXh0
ZW50X25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2V4dGVudF9vZmZzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NU2VsZWN0aW9uCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb21fc2Vs
ZWN0aW9uX2dldF9leHRlbnRfb2Zmc2V0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8K
KyNlbmRpZiAvKiBXZWJLaXRET01ET01TZWxlY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01TZWxlY3Rpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjNjODc1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01TZWxlY3Rpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01TZWxlY3Rpb25Qcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RPTVNlbGVjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01T
ZWxlY3Rpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01TZWxlY3Rpb24q
IHdyYXBET01TZWxlY3Rpb24oV2ViQ29yZTo6RE9NU2VsZWN0aW9uKik7CitXZWJLaXRET01ET01T
ZWxlY3Rpb24qIGtpdChXZWJDb3JlOjpET01TZWxlY3Rpb24qKTsKK1dlYkNvcmU6OkRPTVNlbGVj
dGlvbiogY29yZShXZWJLaXRET01ET01TZWxlY3Rpb24qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTVN0cmluZ0xpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdMaXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTFhMGRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01TdHJpbmdMaXN0LmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTURPTVN0cmluZ0xpc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTElTVF9HRVRfUFJJVkFURShv
YmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9ET01f
U1RSSU5HX0xJU1QsIFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3Jl
OjpET01TdHJpbmdMaXN0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01ET01TdHJpbmdMaXN0UHJp
dmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTVN0cmluZ0xpc3QqIGtp
dChXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUKHJldCk7CisK
KyAgICByZXR1cm4gd3JhcERPTVN0cmluZ0xpc3Qob2JqKTsKK30KKworV2ViQ29yZTo6RE9NU3Ry
aW5nTGlzdCogY29yZShXZWJLaXRET01ET01TdHJpbmdMaXN0KiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURP
TVN0cmluZ0xpc3QqIHdyYXBET01TdHJpbmdMaXN0KFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGNv
cmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRf
RE9NX0RPTV9TVFJJTkdfTElTVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJ
TkdfTElTVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01ET01TdHJpbmdMaXN0
LCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQorewor
ICAgIFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01f
U1RSSU5HX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJL
aXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fZG9tX3N0cmluZ19saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTURPTVN0cmluZ0xpc3QqIHNlbGYgPSBXRUJLSVRfRE9N
X0RPTV9TVFJJTkdfTElTVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdl
YmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X3BhcmVudF9jbGFzcykt
PmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJv
cGVydGllcyk7CisKKyAgICBXZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fRE9NX1NUUklOR19MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+
Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqPihXRUJLSVRf
RE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBv
YmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2NsYXNz
X2luaXQoV2ViS2l0RE9NRE9NU3RyaW5nTGlzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJL
aXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0
b3IgPSB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfZmluYWxpemU7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlz
dF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3Bh
cmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJET01T
dHJpbmdMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01TdHJp
bmdMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9kb21fc3RyaW5nX2xpc3RfaW5pdChXZWJLaXRET01ET01TdHJpbmdMaXN0KiByZXF1ZXN0KQor
eworICAgIFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9E
T01fU1RSSU5HX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJL
aXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21f
c3RyaW5nX2xpc3RfaXRlbShXZWJLaXRET01ET01TdHJpbmdMaXN0KiBzZWxmLCBndWxvbmcgaW5k
ZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NUUklOR19MSVNUKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPml0ZW0oaW5k
ZXgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV9z
dHJpbmdfbGlzdF9jb250YWlucyhXZWJLaXRET01ET01TdHJpbmdMaXN0KiBzZWxmLCBjb25zdCBn
Y2hhciogc3RyaW5nKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElT
VChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cmluZywgRkFMU0Up
OworICAgIFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyaW5nID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0cmluZyk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y29udGFpbnMoY29udmVydGVk
U3RyaW5nKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2RvbV9kb21f
c3RyaW5nX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01ET01TdHJpbmdMaXN0KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElTVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
dWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ0xpc3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDdmZWVjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01ET01TdHJpbmdMaXN0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01TdHJpbmdMaXN0X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfRE9NX1NUUklOR19MSVNUICAgICAgICAgICAgKHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9ET01fU1RSSU5HX0xJU1QsIFdlYktpdERPTURPTVN0cmluZ0xpc3QpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0RPTV9TVFJJTkdfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19MSVNULCBXZWJLaXRE
T01ET01TdHJpbmdMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX1NUUklOR19M
SVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9ET01fU1RSSU5HX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9T
VFJJTkdfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9E
T01fU1RSSU5HX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTElTVCwgV2ViS2l0RE9NRE9NU3Ry
aW5nTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01ET01TdHJpbmdMaXN0IHsKKyAgICBX
ZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01E
T01TdHJpbmdMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2l0ZW06
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU3RyaW5nTGlzdAorICogQGluZGV4OiBBICNndWxv
bmcKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2l0ZW0o
V2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9jb250YWluczoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01TdHJpbmdMaXN0CisgKiBAc3RyaW5nOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9jb250YWlucyhXZWJLaXRET01ET01T
dHJpbmdMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogc3RyaW5nKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV9zdHJpbmdfbGlzdF9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTURP
TVN0cmluZ0xpc3QKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvbV9zdHJpbmdf
bGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTURPTVN0cmluZ0xpc3QqIHNlbGYpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYg
LyogV2ViS2l0RE9NRE9NU3RyaW5nTGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmlu
Z0xpc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiMzkxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NU3RyaW5nTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9ET01TdHJpbmdMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURPTVN0
cmluZ0xpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01TdHJpbmdMaXN0
KiB3cmFwRE9NU3RyaW5nTGlzdChXZWJDb3JlOjpET01TdHJpbmdMaXN0Kik7CitXZWJLaXRET01E
T01TdHJpbmdMaXN0KiBraXQoV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCopOworV2ViQ29yZTo6RE9N
U3RyaW5nTGlzdCogY29yZShXZWJLaXRET01ET01TdHJpbmdMaXN0Kik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFwLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjUzYzc0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01ET01TdHJpbmdNYXAuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRE9NU3RyaW5nTWFwLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1
bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTUFQX0dFVF9QUklWQVRF
KG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RP
TV9TVFJJTkdfTUFQLCBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkRPTVN0cmluZ01hcD4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTVN0cmluZ01hcCoga2l0KFdl
YkNvcmU6OkRPTVN0cmluZ01hcCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTUFQKHJldCk7CisKKyAgICBy
ZXR1cm4gd3JhcERPTVN0cmluZ01hcChvYmopOworfQorCitXZWJDb3JlOjpET01TdHJpbmdNYXAq
IGNvcmUoV2ViS2l0RE9NRE9NU3RyaW5nTWFwKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NU3RyaW5nTWFwKj4oV0VCS0lUX0RPTV9PQkpF
Q1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRE9NU3RyaW5nTWFw
KiB3cmFwRE9NU3RyaW5nTWFwKFdlYkNvcmU6OkRPTVN0cmluZ01hcCogY29yZU9iamVjdCkKK3sK
KyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1NUUklO
R19NQVAoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX01BUCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01ET01TdHJpbmdNYXAsIHdlYmtpdF9kb21fZG9t
X3N0cmluZ19tYXAsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fZG9tX3N0cmluZ19tYXBfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdERPTURPTVN0cmluZ01hcFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdf
TUFQX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpm
b3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9N
U3RyaW5nTWFwUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3N0
cmluZ19tYXBfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdP
YmplY3QqIHdlYmtpdF9kb21fZG9tX3N0cmluZ19tYXBfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwg
Z3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNv
bnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV9kb21fc3RyaW5nX21hcF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0
eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisg
ICAgV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX1NU
UklOR19NQVBfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6RE9NU3RyaW5nTWFwKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0
KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2NsYXNzX2luaXQoV2ViS2l0RE9NRE9N
U3RyaW5nTWFwQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTVN0cmluZ01hcFBy
aXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21f
c3RyaW5nX21hcF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0X2RvbV9kb21fc3RyaW5nX21hcF9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9kb21fc3RyaW5nX21hcF9pbml0KFdlYktpdERPTURPTVN0cmluZ01hcCogcmVxdWVzdCkK
K3sKKyAgICBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9E
T01fU1RSSU5HX01BUF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktp
dERPTURPTVN0cmluZ01hcFByaXZhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEl0ZXJhYmxlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTVN0cmluZ01hcC5oCnNpbWlsYXJpdHkgaW5kZXggNTYlCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJ
dGVyYWJsZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ01hcC5oCmluZGV4IDdjOTVjNmEuLmJl
ODI1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJdGVyYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFwLmgK
QEAgLTE4LDggKzE4LDggQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwog
Ci0jaWZuZGVmIFdlYktpdERPTVRlc3RJdGVyYWJsZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RJ
dGVyYWJsZV9oCisjaWZuZGVmIFdlYktpdERPTURPTVN0cmluZ01hcF9oCisjZGVmaW5lIFdlYktp
dERPTURPTVN0cmluZ01hcF9oCiAKICNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
IApAQCAtMjksMjUgKzI5LDI1IEBACiAKIEdfQkVHSU5fREVDTFMKIAotI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfVEVTVF9JVEVSQUJMRSAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfaXRlcmFi
bGVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lURVJBQkxFKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9URVNUX0lURVJBQkxFLCBXZWJLaXRET01UZXN0SXRlcmFibGUpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfSVRFUkFCTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSVRFUkFCTEUsIFdlYktpdERPTVRlc3RJ
dGVyYWJsZUNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfSVRFUkFCTEUob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfSVRFUkFCTEUpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfSVRFUkFCTEVfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfSVRFUkFCTEUpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSVRFUkFCTEVfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfSVRFUkFCTEUsIFdlYktpdERPTVRlc3RJdGVyYWJsZUNsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTUFQICAgICAgICAgICAgKHdlYmtpdF9kb21f
ZG9tX3N0cmluZ19tYXBfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU1RSSU5H
X01BUChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19NQVAsIFdlYktpdERPTURPTVN0cmluZ01hcCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fRE9NX1NUUklOR19NQVBfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTUFQ
LCBXZWJLaXRET01ET01TdHJpbmdNYXBDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01f
U1RSSU5HX01BUChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19NQVApKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0RPTV9TVFJJTkdfTUFQX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX01BUCkpCisjZGVmaW5lIFdFQktJVF9E
T01fRE9NX1NUUklOR19NQVBfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTUFQLCBXZWJLaXRET01ET01T
dHJpbmdNYXBDbGFzcykpCiAKLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEl0ZXJhYmxlIHsKK3N0cnVj
dCBfV2ViS2l0RE9NRE9NU3RyaW5nTWFwIHsKICAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOwogfTsKIAotc3RydWN0IF9XZWJLaXRET01UZXN0SXRlcmFibGVDbGFzcyB7CitzdHJ1
Y3QgX1dlYktpdERPTURPTVN0cmluZ01hcENsYXNzIHsKICAgICBXZWJLaXRET01PYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rf
aXRlcmFibGVfZ2V0X3R5cGUodm9pZCk7Cit3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2dldF90
eXBlKHZvaWQpOwogCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEl0ZXJhYmxlX2ggKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01ET01TdHJpbmdNYXBfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJp
bmdNYXBQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDlmOWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01TdHJpbmdNYXBQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RPTVN0cmluZ01hcC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01TdHJpbmdN
YXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01TdHJpbmdNYXAqIHdyYXBE
T01TdHJpbmdNYXAoV2ViQ29yZTo6RE9NU3RyaW5nTWFwKik7CitXZWJLaXRET01ET01TdHJpbmdN
YXAqIGtpdChXZWJDb3JlOjpET01TdHJpbmdNYXAqKTsKK1dlYkNvcmU6OkRPTVN0cmluZ01hcCog
Y29yZShXZWJLaXRET01ET01TdHJpbmdNYXAqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLyogV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURPTVRva2VuTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVRva2VuTGlzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxMjY4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NVG9rZW5MaXN0LmNwcApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVRv
a2VuTGlzdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9ET01fVE9LRU5fTElTVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCwg
V2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TURPTVRva2VuTGlzdFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpET01Ub2tlbkxpc3Q+
IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJLaXRET01ET01Ub2tlbkxpc3QqIGtpdChXZWJDb3JlOjpET01Ub2tl
bkxpc3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9ET01fVE9LRU5fTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01U
b2tlbkxpc3Qob2JqKTsKK30KKworV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBjb3JlKFdlYktpdERP
TURPTVRva2VuTGlzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkRPTVRva2VuTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURPTVRva2VuTGlzdCogd3JhcERPTVRva2Vu
TGlzdChXZWJDb3JlOjpET01Ub2tlbkxpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNUKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0LCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0LCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9M
RU5HVEgsCisgICAgUFJPUF9WQUxVRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9t
X3Rva2VuX2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURP
TVRva2VuTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNUX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NVG9rZW5MaXN0
UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9kb21fdG9rZW5fbGlzdF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYgPSBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNU
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVkFM
VUU6CisgICAgICAgIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rfc2V0X3ZhbHVlKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9kb21fdG9rZW5fbGlzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYgPSBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNUKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RI
OgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fdG9rZW5f
bGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZB
TFVFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV90
b2tlbl9saXN0X2dldF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUs
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBX
ZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fVE9LRU5f
TElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpET01Ub2tlbkxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5j
b3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01ET01Ub2tl
bkxpc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0
ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV90b2tl
bl9saXN0X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZG9tX2RvbV90b2tlbl9saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191
bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkRPTVRva2VuTGlzdDps
ZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRE9NVG9rZW5MaXN0Omxlbmd0
aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsdWUiLAorICAgICAgICAgICAgIkRPTVRv
a2VuTGlzdDp2YWx1ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogRE9NVG9rZW5M
aXN0OnZhbHVlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rf
aW5pdChXZWJLaXRET01ET01Ub2tlbkxpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9N
VG9rZW5MaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX1RPS0VOX0xJU1RfR0VUX1BS
SVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2
YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2l0ZW0oV2ViS2l0
RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX1RPS0VOX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVRva2Vu
TGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9jb250YWlucyhXZWJLaXRE
T01ET01Ub2tlbkxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0b2tlbikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHRva2VuLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFRva2Vu
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRva2VuKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5jb250YWlucyhjb252ZXJ0ZWRUb2tlbik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2FkZChXZWJLaXRET01ET01Ub2tlbkxpc3Qq
IHNlbGYsIEdFcnJvcioqIGVycm9yLCAuLi4pCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
VE9LRU5fTElTVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJv
cik7CisgICAgV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OworICAgIFZlY3RvcjxXVEY6OlN0
cmluZz4gY29udmVydGVkVG9rZW5zOworICAgIHZhX3N0YXJ0KHZhcmlhZGljUGFyYW1ldGVyTGlz
dCwgZXJyb3IpOworICAgIHdoaWxlIChnY2hhciogdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9hcmco
dmFyaWFkaWNQYXJhbWV0ZXJMaXN0LCBnY2hhciopKQorICAgICAgICBjb252ZXJ0ZWRUb2tlbnMu
YXBwZW5kKFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YXJpYWRpY1BhcmFtZXRlcikpOworICAgIHZh
X2VuZCh2YXJpYWRpY1BhcmFtZXRlckxpc3QpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGl0ZW0tPmFkZChXVEZNb3ZlKGNvbnZlcnRlZFRva2VucyksIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9yZW1vdmUoV2ViS2l0RE9NRE9N
VG9rZW5MaXN0KiBzZWxmLCBHRXJyb3IqKiBlcnJvciwgLi4uKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9NX1RPS0VOX0xJU1Qoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRPTVRva2VuTGlzdCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICB2YV9saXN0IHZhcmlhZGljUGFyYW1ldGVyTGlzdDsKKyAgICBWZWN0
b3I8V1RGOjpTdHJpbmc+IGNvbnZlcnRlZFRva2VuczsKKyAgICB2YV9zdGFydCh2YXJpYWRpY1Bh
cmFtZXRlckxpc3QsIGVycm9yKTsKKyAgICB3aGlsZSAoZ2NoYXIqIHZhcmlhZGljUGFyYW1ldGVy
ID0gdmFfYXJnKHZhcmlhZGljUGFyYW1ldGVyTGlzdCwgZ2NoYXIqKSkKKyAgICAgICAgY29udmVy
dGVkVG9rZW5zLmFwcGVuZChXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFyaWFkaWNQYXJhbWV0ZXIp
KTsKKyAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5yZW1vdmUoV1RGTW92ZShjb252ZXJ0ZWRUb2tl
bnMpLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3Rv
Z2dsZShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0b2tlbiwgZ2Jv
b2xlYW4gZm9yY2UsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9UT0tFTl9MSVNUKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
dG9rZW4sIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJv
ciwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRPTVRva2VuTGlzdCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUb2tlbiA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh0b2tlbik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dG9nZ2xlKGNvbnZlcnRlZFRva2VuLCBmb3JjZSwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3Rva2Vu
X2xpc3RfcmVwbGFjZShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0
b2tlbiwgY29uc3QgZ2NoYXIqIG5ld1Rva2VuLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9UT0tFTl9MSVNUKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHRva2VuKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG5ld1Rva2VuKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpET01Ub2tlbkxpc3QqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVG9rZW4g
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodG9rZW4pOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZE5ld1Rva2VuID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5ld1Rva2VuKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5yZXBsYWNlKGNvbnZlcnRlZFRva2Vu
LCBjb252ZXJ0ZWROZXdUb2tlbiwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9t
X3Rva2VuX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1RPS0VOX0xJU1Qoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRPTVRva2VuTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxv
bmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X3ZhbHVlKFdlYktpdERPTURPTVRva2Vu
TGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZh
bHVlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fdG9r
ZW5fbGlzdF9zZXRfdmFsdWUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RE9NVG9rZW5MaXN0
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRWYWx1ZShj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NVG9rZW5MaXN0LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURPTVRva2VuTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEz
MjBmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVRva2VuTGlzdC5oCkBAIC0wLDAgKzEs
MTU3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TURPTVRva2VuTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTURPTVRva2VuTGlzdF9oCisKKyNpZmRl
ZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QgICAgICAgICAgICAod2Via2l0X2Rv
bV9kb21fdG9rZW5fbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9UT0tF
Tl9MSVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCwgV2ViS2l0RE9NRE9NVG9rZW5MaXN0KSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fVE9LRU5fTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJ
U1QsIFdlYktpdERPTURPTVRva2VuTGlzdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RP
TV9UT0tFTl9MSVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfRE9NX1RPS0VOX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNUKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9ET01fVE9LRU5fTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QsIFdlYktpdERPTURP
TVRva2VuTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01ET01Ub2tlbkxpc3QgeworICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TURPTVRva2VuTGlzdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfaXRlbToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqIEBpbmRleDogQSAjZ3Vsb25n
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2l0ZW0oV2Vi
S2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3Rva2VuX2xpc3RfY29udGFpbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9N
VG9rZW5MaXN0CisgKiBAdG9rZW46IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfY29udGFpbnMoV2ViS2l0RE9NRE9NVG9rZW5MaXN0
KiBzZWxmLCBjb25zdCBnY2hhciogdG9rZW4pOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3Rv
a2VuX2xpc3RfYWRkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVRva2VuTGlzdAorICogQGVy
cm9yOiAjR0Vycm9yCisgKiBALi4uOiBsaXN0IG9mICNnY2hhciBlbmRlZCBieSAlTlVMTC4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9kb21fdG9rZW5fbGlzdF9hZGQoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBHRXJyb3Iq
KiBlcnJvciwgLi4uKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3JlbW92
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqIEBlcnJvcjogI0dFcnJv
cgorICogQC4uLjogbGlzdCBvZiAjZ2NoYXIgZW5kZWQgYnkgJU5VTEwuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3Rva2Vu
X2xpc3RfcmVtb3ZlKFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwgR0Vycm9yKiogZXJyb3Is
IC4uLik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF90b2dnbGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0CisgKiBAdG9rZW46IEEgI2djaGFyCisgKiBA
Zm9yY2U6IEEgI2dib29sZWFuCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF90b2dnbGUoV2ViS2l0RE9NRE9NVG9r
ZW5MaXN0KiBzZWxmLCBjb25zdCBnY2hhciogdG9rZW4sIGdib29sZWFuIGZvcmNlLCBHRXJyb3Iq
KiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9yZXBsYWNlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURPTVRva2VuTGlzdAorICogQHRva2VuOiBBICNnY2hhcgor
ICogQG5ld1Rva2VuOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3Rva2Vu
X2xpc3RfcmVwbGFjZShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0
b2tlbiwgY29uc3QgZ2NoYXIqIG5ld1Rva2VuLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTVRva2VuTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZG9tX3Rv
a2VuX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURPTVRva2VuTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21f
dG9rZW5fbGlzdF9nZXRfdmFsdWUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3NldF92YWx1ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fdG9rZW5f
bGlzdF9zZXRfdmFsdWUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NVG9rZW5MaXN0X2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhMTRjNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NVG9rZW5M
aXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9ET01Ub2tlbkxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NRE9NVG9rZW5MaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRE9N
VG9rZW5MaXN0KiB3cmFwRE9NVG9rZW5MaXN0KFdlYkNvcmU6OkRPTVRva2VuTGlzdCopOworV2Vi
S2l0RE9NRE9NVG9rZW5MaXN0KiBraXQoV2ViQ29yZTo6RE9NVG9rZW5MaXN0Kik7CitXZWJDb3Jl
OjpET01Ub2tlbkxpc3QqIGNvcmUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0Kik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZjQ2YjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTVdpbmRvdy5jcHAKQEAgLTAsMCArMSwxNTY5IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NRE9NV2luZG93LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2luZG93U3Bl
ZWNoU3ludGhlc2lzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TUJhclByb3BQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
blByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhpc3RvcnlQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTmF2
aWdhdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVNjcmVlblByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
U3RvcmFnZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVdlYktpdFBvaW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01XaW5kb3dVbnN0YWJs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fV0lORE9XX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csIFdlYktp
dERPTURPTVdpbmRvd1ByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01XaW5k
b3dQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2luZG93PiBjb3JlT2JqZWN0Owor
fSBXZWJLaXRET01ET01XaW5kb3dQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NRE9NV2luZG93KiBraXQoV2ViQ29yZTo6RE9NV2luZG93KiBvYmopCit7CisgICAgaWYg
KCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9i
amVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1dJTkRP
VyhyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01XaW5kb3cob2JqKTsKK30KKworV2ViQ29yZTo6
RE9NV2luZG93KiBjb3JlKFdlYktpdERPTURPTVdpbmRvdyogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVdpbmRvdyo+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURPTVdpbmRv
dyogd3JhcERPTVdpbmRvdyhXZWJDb3JlOjpET01XaW5kb3cqIGNvcmVPYmplY3QpCit7CisgICAg
QVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9XSU5ET1coZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9XLCAiY29yZS1vYmplY3QiLCBjb3Jl
T2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9kb21fd2luZG93X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7
CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3Jl
OjpET01XaW5kb3cqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01XaW5kb3cq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQt
PmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6RE9NV2luZG93Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9tX3dp
bmRvd19yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKK3sKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpET01XaW5kb3cqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5k
aXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19kaXNwYXRjaF9ldmVudDsKKyAg
ICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9kb21fd2luZG93X2FkZF9l
dmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9kb21fd2luZG93X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQ
RV9XSVRIX0NPREUoV2ViS2l0RE9NRE9NV2luZG93LCB3ZWJraXRfZG9tX2RvbV93aW5kb3csIFdF
QktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZ
UEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7
CisgICAgUFJPUF8wLAorICAgIFBST1BfU0NSRUVOLAorICAgIFBST1BfSElTVE9SWSwKKyAgICBQ
Uk9QX0xPQ0FUSU9OQkFSLAorICAgIFBST1BfTUVOVUJBUiwKKyAgICBQUk9QX1BFUlNPTkFMQkFS
LAorICAgIFBST1BfU0NST0xMQkFSUywKKyAgICBQUk9QX1NUQVRVU0JBUiwKKyAgICBQUk9QX1RP
T0xCQVIsCisgICAgUFJPUF9OQVZJR0FUT1IsCisgICAgUFJPUF9DTElFTlRfSU5GT1JNQVRJT04s
CisgICAgUFJPUF9GUkFNRV9FTEVNRU5ULAorICAgIFBST1BfT0ZGU0NSRUVOX0JVRkZFUklORywK
KyAgICBQUk9QX09VVEVSX0hFSUdIVCwKKyAgICBQUk9QX09VVEVSX1dJRFRILAorICAgIFBST1Bf
SU5ORVJfSEVJR0hULAorICAgIFBST1BfSU5ORVJfV0lEVEgsCisgICAgUFJPUF9TQ1JFRU5fWCwK
KyAgICBQUk9QX1NDUkVFTl9ZLAorICAgIFBST1BfU0NSRUVOX0xFRlQsCisgICAgUFJPUF9TQ1JF
RU5fVE9QLAorICAgIFBST1BfU0NST0xMX1gsCisgICAgUFJPUF9TQ1JPTExfWSwKKyAgICBQUk9Q
X1BBR0VfWF9PRkZTRVQsCisgICAgUFJPUF9QQUdFX1lfT0ZGU0VULAorICAgIFBST1BfQ0xPU0VE
LAorICAgIFBST1BfTEVOR1RILAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1NUQVRVUywKKyAg
ICBQUk9QX0RFRkFVTFRfU1RBVFVTLAorICAgIFBST1BfU0VMRiwKKyAgICBQUk9QX1dJTkRPVywK
KyAgICBQUk9QX0ZSQU1FUywKKyAgICBQUk9QX09QRU5FUiwKKyAgICBQUk9QX1BBUkVOVCwKKyAg
ICBQUk9QX1RPUCwKKyAgICBQUk9QX0RPQ1VNRU5ULAorICAgIFBST1BfU1RZTEVfTUVESUEsCisg
ICAgUFJPUF9ERVZJQ0VfUElYRUxfUkFUSU8sCisgICAgUFJPUF9BUFBMSUNBVElPTl9DQUNIRSwK
KyAgICBQUk9QX1NFU1NJT05fU1RPUkFHRSwKKyAgICBQUk9QX0xPQ0FMX1NUT1JBR0UsCisgICAg
UFJPUF9PUklFTlRBVElPTiwKKyAgICBQUk9QX1BFUkZPUk1BTkNFLAorICAgIFBST1BfU1BFRUNI
X1NZTlRIRVNJUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fRE9NX1dJTkRPV19HRVRfUFJJVkFURShvYmplY3QpOworCisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwor
CisgICAgcHJpdi0+fldlYktpdERPTURPTVdpbmRvd1ByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX2RvbV93aW5kb3dfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3NldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTURPTVdpbmRvdyogc2VsZiA9IFdFQktJ
VF9ET01fRE9NX1dJTkRPVyhvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21fZG9tX3dpbmRvd19zZXRfbmFt
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NUQVRVUzoKKyAgICAgICAgd2Via2l0X2RvbV9kb21fd2luZG93X3NldF9zdGF0
dXMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9ERUZBVUxUX1NUQVRVUzoKKyAgICAgICAgd2Via2l0X2RvbV9kb21fd2luZG93
X3NldF9kZWZhdWx0X3N0YXR1cyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01ET01XaW5kb3cqIHNlbGYgPSBXRUJLSVRf
RE9NX0RPTV9XSU5ET1cob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9TQ1JFRU46CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfSElTVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2hpc3Rvcnkoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTE9DQVRJT05CQVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sb2NhdGlvbmJhcihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRU5VQkFSOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbWVudWJhcihzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QRVJTT05BTEJBUjoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BlcnNvbmFsYmFy
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTEJBUlM6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9z
Y3JvbGxiYXJzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NUQVRVU0JB
UjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X3N0YXR1c2JhcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9U
T09MQkFSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfdG9vbGJhcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9OQVZJR0FUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9kb21fd2luZG93X2dldF9uYXZpZ2F0b3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ0xJRU5UX0lORk9STUFUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY2xpZW50X2luZm9ybWF0aW9uKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZSQU1FX0VMRU1FTlQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9mcmFt
ZV9lbGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09GRlNDUkVF
Tl9CVUZGRVJJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfb2Zmc2NyZWVuX2J1ZmZlcmluZyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9PVVRFUl9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3V0ZXJfaGVpZ2h0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09VVEVSX1dJRFRIOgorICAgICAgICBnX3Zh
bHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X291dGVyX3dpZHRo
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOTkVSX0hFSUdIVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9p
bm5lcl9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5ORVJf
V0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfaW5uZXJfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU0NSRUVOX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfc2NyZWVuX3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU0NSRUVOX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0NSRUVOX0xFRlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX2xlZnQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU0NSRUVOX1RPUDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5fdG9wKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9YOgorICAgICAgICBnX3ZhbHVlX3NldF9s
b25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbF94KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9ZOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbF95KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBR0VfWF9PRkZTRVQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFnZV94X29m
ZnNldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQUdFX1lfT0ZGU0VU
OgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3BhZ2VfeV9vZmZzZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Q0xPU0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X2Nsb3NlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
U1RBVFVTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X3N0YXR1cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9ERUZBVUxUX1NUQVRVUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9kZWZhdWx0X3N0YXR1cyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TRUxGOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2VsZihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9XSU5ET1c6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF93aW5kb3coc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRlJBTUVTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZnJhbWVzKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX09QRU5FUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X29wZW5lcihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QQVJFTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYXJlbnQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVE9QOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfdG9wKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RPQ1VNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZG9jdW1lbnQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfU1RZTEVfTUVESUE6CisgICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zdHlsZV9tZWRpYShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfUElYRUxfUkFUSU86CisgICAg
ICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9k
ZXZpY2VfcGl4ZWxfcmF0aW8oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QVBQTElDQVRJT05fQ0FDSEU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9hcHBsaWNhdGlvbl9jYWNoZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TRVNTSU9OX1NUT1JBR0U6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zZXNzaW9uX3N0b3Jh
Z2Uoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9DQUxf
U1RPUkFHRToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X2xvY2FsX3N0b3JhZ2Uoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfT1JJRU5UQVRJT046CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmco
dmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3JpZW50YXRpb24oc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEVSRk9STUFOQ0U6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wZXJmb3JtYW5jZShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUEVFQ0hfU1lOVEhFU0lTOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfc3BlZWNoX3N5bnRoZXNpcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV9kb21fd2luZG93X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fZG9tX3dpbmRvd19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9N
RE9NV2luZG93UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX1dJTkRPV19HRVRfUFJJVkFU
RShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpE
T01XaW5kb3cqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0
KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19jbGFzc19pbml0KFdlYktpdERPTURPTVdpbmRvd0NsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01ET01XaW5kb3dQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25z
dHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9kb21fd2luZG93X2ZpbmFsaXplOworICAgIGdv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kb21fd2luZG93X3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NSRUVOLAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInNjcmVlbiIsCisgICAgICAgICAgICAi
RE9NV2luZG93OnNjcmVlbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVNjcmVl
biogRE9NV2luZG93OnNjcmVlbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU0NSRUVO
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfSElTVE9SWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJo
aXN0b3J5IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6aGlzdG9yeSIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUhpc3RvcnkqIERPTVdpbmRvdzpoaXN0b3J5IiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9ISVNUT1JZLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTE9DQVRJT05CQVIsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibG9jYXRpb25iYXIiLAorICAgICAgICAgICAg
IkRPTVdpbmRvdzpsb2NhdGlvbmJhciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERP
TUJhclByb3AqIERPTVdpbmRvdzpsb2NhdGlvbmJhciIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfQkFSX1BST1AsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9NRU5VQkFSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgIm1lbnViYXIiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzptZW51YmFyIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQmFyUHJvcCogRE9NV2luZG93Om1lbnVi
YXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEVSU09OQUxCQVIs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicGVyc29uYWxiYXIi
LAorICAgICAgICAgICAgIkRPTVdpbmRvdzpwZXJzb25hbGJhciIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTUJhclByb3AqIERPTVdpbmRvdzpwZXJzb25hbGJhciIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JPTExCQVJTLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInNjcm9sbGJhcnMiLAorICAgICAgICAgICAg
IkRPTVdpbmRvdzpzY3JvbGxiYXJzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
QmFyUHJvcCogRE9NV2luZG93OnNjcm9sbGJhcnMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX0JBUl9QUk9QLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfU1RBVFVTQkFSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgInN0YXR1c2JhciIsCisgICAgICAgICAgICAiRE9NV2luZG93OnN0YXR1c2Jh
ciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUJhclByb3AqIERPTVdpbmRvdzpz
dGF0dXNiYXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVE9PTEJB
UiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ0b29sYmFyIiwK
KyAgICAgICAgICAgICJET01XaW5kb3c6dG9vbGJhciIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTUJhclByb3AqIERPTVdpbmRvdzp0b29sYmFyIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9CQVJfUFJPUCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX05BVklHQVRPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJuYXZpZ2F0b3IiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpu
YXZpZ2F0b3IiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01OYXZpZ2F0b3IqIERP
TVdpbmRvdzpuYXZpZ2F0b3IiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05BVklHQVRP
UiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0NMSUVOVF9JTkZPUk1BVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJjbGllbnQtaW5mb3JtYXRpb24iLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpj
bGllbnQtaW5mb3JtYXRpb24iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01OYXZp
Z2F0b3IqIERPTVdpbmRvdzpjbGllbnQtaW5mb3JtYXRpb24iLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX05BVklHQVRPUiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0ZSQU1FX0VMRU1FTlQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiZnJhbWUtZWxlbWVudCIsCisgICAgICAgICAgICAiRE9N
V2luZG93OmZyYW1lLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01F
bGVtZW50KiBET01XaW5kb3c6ZnJhbWUtZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX09GRlNDUkVFTl9CVUZGRVJJTkcsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgIm9mZnNjcmVlbi1idWZmZXJpbmciLAorICAgICAgICAg
ICAgIkRPTVdpbmRvdzpvZmZzY3JlZW4tYnVmZmVyaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2Jvb2xlYW4gRE9NV2luZG93Om9mZnNjcmVlbi1idWZmZXJpbmciLAorICAgICAgICAgICAg
RkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9PVVRFUl9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAg
ICAgICAgIm91dGVyLWhlaWdodCIsCisgICAgICAgICAgICAiRE9NV2luZG93Om91dGVyLWhlaWdo
dCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERPTVdpbmRvdzpvdXRlci1oZWlnaHQi
LAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PVVRFUl9XSURUSCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAib3V0ZXItd2lkdGgiLAorICAg
ICAgICAgICAgIkRPTVdpbmRvdzpvdXRlci13aWR0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdsb25nIERPTVdpbmRvdzpvdXRlci13aWR0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdf
TUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0lOTkVSX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisg
ICAgICAgICAgICAiaW5uZXItaGVpZ2h0IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6aW5uZXIt
aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgRE9NV2luZG93OmlubmVyLWhl
aWdodCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOTkVSX1dJRFRI
LAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJpbm5lci13aWR0aCIs
CisgICAgICAgICAgICAiRE9NV2luZG93OmlubmVyLXdpZHRoIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2xvbmcgRE9NV2luZG93OmlubmVyLXdpZHRoIiwKKyAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU0NSRUVOX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgInNjcmVlbi14IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2NyZWVuLXgi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6c2NyZWVuLXgiLAorICAg
ICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JFRU5fWSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2NyZWVuLXkiLAorICAgICAgICAgICAgIkRP
TVdpbmRvdzpzY3JlZW4teSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERPTVdpbmRv
dzpzY3JlZW4teSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUkVF
Tl9MRUZULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JlZW4t
bGVmdCIsCisgICAgICAgICAgICAiRE9NV2luZG93OnNjcmVlbi1sZWZ0IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgRE9NV2luZG93OnNjcmVlbi1sZWZ0IiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NSRUVOX1RPUCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2xvbmcoCisgICAgICAgICAgICAic2NyZWVuLXRvcCIsCisgICAgICAgICAgICAiRE9NV2luZG93
OnNjcmVlbi10b3AiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6c2Ny
ZWVuLXRvcCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTF9Y
LAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JvbGwteCIsCisg
ICAgICAgICAgICAiRE9NV2luZG93OnNjcm9sbC14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2xvbmcgRE9NV2luZG93OnNjcm9sbC14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhM
T05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfU0NST0xMX1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAg
ICAgInNjcm9sbC15IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2Nyb2xsLXkiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6c2Nyb2xsLXkiLAorICAgICAgICAgICAg
R19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQUdFX1hfT0ZGU0VULAorICAgICAgICBnX3BhcmFt
X3NwZWNfbG9uZygKKyAgICAgICAgICAgICJwYWdlLXgtb2Zmc2V0IiwKKyAgICAgICAgICAgICJE
T01XaW5kb3c6cGFnZS14LW9mZnNldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERP
TVdpbmRvdzpwYWdlLXgtb2Zmc2V0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05H
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUEFHRV9ZX09GRlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAg
ICAgICAicGFnZS15LW9mZnNldCIsCisgICAgICAgICAgICAiRE9NV2luZG93OnBhZ2UteS1vZmZz
ZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6cGFnZS15LW9mZnNl
dCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NMT1NFRCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY2xvc2VkIiwKKyAgICAgICAg
ICAgICJET01XaW5kb3c6Y2xvc2VkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4g
RE9NV2luZG93OmNsb3NlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAi
RE9NV2luZG93Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01XaW5k
b3c6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAg
IkRPTVdpbmRvdzpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBET01XaW5k
b3c6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVEFUVVMsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAic3RhdHVzIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6
c3RhdHVzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBET01XaW5kb3c6c3RhdHVz
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0RFRkFVTFRfU1RBVFVTLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgImRlZmF1bHQtc3RhdHVzIiwKKyAgICAgICAgICAgICJE
T01XaW5kb3c6ZGVmYXVsdC1zdGF0dXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IERPTVdpbmRvdzpkZWZhdWx0LXN0YXR1cyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxGLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInNlbGYiLAorICAgICAgICAg
ICAgIkRPTVdpbmRvdzpzZWxmIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9N
V2luZG93KiBET01XaW5kb3c6c2VsZiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9N
X1dJTkRPVywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1dJTkRPVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJ3aW5kb3ciLAorICAgICAgICAgICAgIkRPTVdpbmRvdzp3aW5kb3ciLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01ET01XaW5kb3cqIERPTVdpbmRvdzp3aW5kb3ciLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GUkFNRVMsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZnJhbWVzIiwKKyAgICAgICAgICAgICJE
T01XaW5kb3c6ZnJhbWVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NV2lu
ZG93KiBET01XaW5kb3c6ZnJhbWVzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01f
V0lORE9XLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfT1BFTkVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgIm9wZW5lciIsCisgICAgICAgICAgICAiRE9NV2luZG93Om9wZW5lciIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTURPTVdpbmRvdyogRE9NV2luZG93Om9wZW5lciIsCisgICAg
ICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVywKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBUkVOVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwYXJlbnQiLAorICAgICAgICAgICAgIkRP
TVdpbmRvdzpwYXJlbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01XaW5k
b3cqIERPTVdpbmRvdzpwYXJlbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9X
SU5ET1csCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9UT1AsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAi
dG9wIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6dG9wIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRE9NV2luZG93KiBET01XaW5kb3c6dG9wIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9ET01fV0lORE9XLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRE9DVU1FTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAiZG9jdW1lbnQiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpk
b2N1bWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURvY3VtZW50KiBET01X
aW5kb3c6ZG9jdW1lbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5ULAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
U1RZTEVfTUVESUEsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAi
c3R5bGUtbWVkaWEiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpzdHlsZS1tZWRpYSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVN0eWxlTWVkaWEqIERPTVdpbmRvdzpzdHlsZS1t
ZWRpYSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfTUVESUEsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERVZJQ0Vf
UElYRUxfUkFUSU8sCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAi
ZGV2aWNlLXBpeGVsLXJhdGlvIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6ZGV2aWNlLXBpeGVs
LXJhdGlvIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBET01XaW5kb3c6ZGV2aWNl
LXBpeGVsLXJhdGlvIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9BUFBMSUNBVElPTl9DQUNIRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJhcHBsaWNhdGlvbi1jYWNoZSIsCisgICAgICAgICAgICAiRE9NV2luZG93OmFwcGxp
Y2F0aW9uLWNhY2hlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NQXBwbGlj
YXRpb25DYWNoZSogRE9NV2luZG93OmFwcGxpY2F0aW9uLWNhY2hlIiwKKyAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9ET01fQVBQTElDQVRJT05fQ0FDSEUsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRVNTSU9OX1NUT1JBR0UsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic2Vzc2lvbi1zdG9yYWdl
IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2Vzc2lvbi1zdG9yYWdlIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NU3RvcmFnZSogRE9NV2luZG93OnNlc3Npb24tc3RvcmFnZSIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1RPUkFHRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPQ0FMX1NUT1JBR0UsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibG9jYWwtc3RvcmFnZSIs
CisgICAgICAgICAgICAiRE9NV2luZG93OmxvY2FsLXN0b3JhZ2UiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01TdG9yYWdlKiBET01XaW5kb3c6bG9jYWwtc3RvcmFnZSIsCisgICAg
ICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1RPUkFHRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09SSUVOVEFUSU9OLAorICAgICAgICBn
X3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJvcmllbnRhdGlvbiIsCisgICAgICAgICAg
ICAiRE9NV2luZG93Om9yaWVudGF0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcg
RE9NV2luZG93Om9yaWVudGF0aW9uIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05H
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUEVSRk9STUFOQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAicGVyZm9ybWFuY2UiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpwZXJmb3JtYW5jZSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVBlcmZvcm1hbmNlKiBET01XaW5kb3c6
cGVyZm9ybWFuY2UiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
U1BFRUNIX1NZTlRIRVNJUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJzcGVlY2gtc3ludGhlc2lzIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c3BlZWNoLXN5
bnRoZXNpcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
cyogRE9NV2luZG93OnNwZWVjaC1zeW50aGVzaXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX1NQRUVDSF9TWU5USEVTSVMsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfaW5pdChXZWJLaXRE
T01ET01XaW5kb3cqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fRE9NX1dJTkRPV19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBu
ZXcgKHByaXYpIFdlYktpdERPTURPTVdpbmRvd1ByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NRE9N
U2VsZWN0aW9uKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NlbGVjdGlvbihXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01TZWxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5nZXRTZWxlY3Rpb24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19m
b2N1cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Zm9jdXMoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfYmx1cihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Ymx1cigpOworfQorCit2b2lkIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19jbG9zZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5k
b3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2xvc2UoKTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfcHJpbnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29y
ZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnByaW50
KCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3N0b3AoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnN0b3AoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfYWxlcnQoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobWVzc2Fn
ZSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lc3NhZ2UgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
bWVzc2FnZSk7CisgICAgaXRlbS0+YWxlcnQoY29udmVydGVkTWVzc2FnZSk7Cit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21fZG9tX3dpbmRvd19jb25maXJtKFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1dJTkRPVyhzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG1lc3NhZ2Us
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTWVzc2FnZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChtZXNzYWdlKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jb25maXJtKGNvbnZl
cnRlZE1lc3NhZ2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfcHJvbXB0KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIq
IG1lc3NhZ2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0VmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
bWVzc2FnZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGVmYXVsdFZhbHVlLCAwKTsK
KyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkTWVzc2FnZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZXNz
YWdlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWREZWZhdWx0VmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoZGVmYXVsdFZhbHVlKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5wcm9tcHQoY29udmVydGVkTWVzc2FnZSwgY29udmVydGVkRGVmYXVs
dFZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9k
b21fd2luZG93X2ZpbmQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogc3Ry
aW5nLCBnYm9vbGVhbiBjYXNlU2Vuc2l0aXZlLCBnYm9vbGVhbiBiYWNrd2FyZHMsIGdib29sZWFu
IHdyYXAsIGdib29sZWFuIHdob2xlV29yZCwgZ2Jvb2xlYW4gc2VhcmNoSW5GcmFtZXMsIGdib29s
ZWFuIHNob3dEaWFsb2cpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhz
ZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cmluZywgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJpbmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5n
KTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5maW5kKGNvbnZlcnRlZFN0cmluZywgY2Fz
ZVNlbnNpdGl2ZSwgYmFja3dhcmRzLCB3cmFwLCB3aG9sZVdvcmQsIHNlYXJjaEluRnJhbWVzLCBz
aG93RGlhbG9nKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19zY3JvbGxfYnkoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZG91YmxlIHgsIGdk
b3VibGUgeSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAg
IFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zY3JvbGxCeSh4LCB5KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xs
X3RvKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2RvdWJsZSB4LCBnZG91YmxlIHkpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2Nyb2xsVG8oeCwg
eSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3Njcm9sbChXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYsIGdkb3VibGUgeCwgZ2RvdWJsZSB5KQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNjcm9sbFRvKHgsIHkpOworfQorCit2b2lkIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19tb3ZlX2J5KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2Zs
b2F0IHgsIGdmbG9hdCB5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxm
KSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPm1vdmVCeSh4LCB5KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3df
bW92ZV90byhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdmbG9hdCB4LCBnZmxvYXQgeSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5tb3ZlVG8oeCwg
eSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3Jlc2l6ZV9ieShXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYsIGdmbG9hdCB4LCBnZmxvYXQgeSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5yZXNpemVCeSh4LCB5KTsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVzaXplX3RvKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwg
Z2Zsb2F0IHdpZHRoLCBnZmxvYXQgaGVpZ2h0KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQpOworfQorCitXZWJL
aXRET01NZWRpYVF1ZXJ5TGlzdCogd2Via2l0X2RvbV9kb21fd2luZG93X21hdGNoX21lZGlhKFdl
YktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHF1ZXJ5KQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHF1ZXJ5LCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUXVlcnkgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgocXVlcnkpOworICAgIFJlZlB0cjxXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1hdGNoTWVkaWEoY29udmVydGVkUXVl
cnkpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
Y29tcHV0ZWRfc3R5bGUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBXZWJLaXRET01FbGVtZW50
KiBlbGVtZW50LCBjb25zdCBnY2hhciogcHNldWRvRWxlbWVudCkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoZWxlbWVudCksIDApOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBj
b252ZXJ0ZWRFbGVtZW50ID0gV2ViS2l0Ojpjb3JlKGVsZW1lbnQpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFBzZXVkb0VsZW1lbnQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocHNldWRvRWxl
bWVudCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRDb21wdXRlZFN0eWxlKCpjb252ZXJ0ZWRFbGVt
ZW50LCBjb252ZXJ0ZWRQc2V1ZG9FbGVtZW50KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01XZWJLaXRQb2ludCogd2Via2l0X2Rv
bV9kb21fd2luZG93X3dlYmtpdF9jb252ZXJ0X3BvaW50X2Zyb21fcGFnZV90b19ub2RlKFdlYktp
dERPTURPTVdpbmRvdyogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgV2ViS2l0RE9NV2ViS2l0
UG9pbnQqIHApCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQktJVF9QT0lOVChw
KSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUobm9kZSk7
CisgICAgV2ViQ29yZTo6V2ViS2l0UG9pbnQqIGNvbnZlcnRlZFAgPSBXZWJLaXQ6OmNvcmUocCk7
CisgICAgUmVmUHRyPFdlYkNvcmU6OldlYktpdFBvaW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+d2Via2l0Q29udmVydFBvaW50RnJvbVBhZ2VUb05vZGUoY29udmVydGVkTm9k
ZSwgY29udmVydGVkUCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHdlYmtpdF9kb21fZG9tX3dpbmRvd193
ZWJraXRfY29udmVydF9wb2ludF9mcm9tX25vZGVfdG9fcGFnZShXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIFdlYktpdERPTVdlYktpdFBvaW50KiBwKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShub2RlKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfUE9JTlQocCksIDApOworICAgIFdl
YkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0Ojpjb3JlKG5vZGUpOworICAgIFdlYkNvcmU6
OldlYktpdFBvaW50KiBjb252ZXJ0ZWRQID0gV2ViS2l0Ojpjb3JlKHApOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpXZWJLaXRQb2ludD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPndl
YmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlKGNvbnZlcnRlZE5vZGUsIGNvbnZlcnRlZFAp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9kb21fd2luZG93X2NhbmNlbF9hbmltYXRpb25fZnJhbWUoV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmLCBnbG9uZyBpZCkKK3sKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
Y2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSIpCisjZW5kaWYgLyogRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJr
aXRfY2FuY2VsX2FuaW1hdGlvbl9mcmFtZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdsb25n
IGlkKQoreworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jYW5jZWxBbmltYXRpb25GcmFtZShp
ZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oaWQp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlJlcXVlc3QgQW5pbWF0aW9u
IEZyYW1lIikKKyNlbmRpZiAvKiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICovCit9
CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jYW5jZWxfcmVxdWVzdF9hbmlt
YXRpb25fZnJhbWUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnbG9uZyBpZCkKK3sKKyNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
V0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJSZXF1ZXN0IEFuaW1hdGlvbiBGcmFtZSIpCisjZW5k
aWYgLyogRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAqLworfQorCit2b2lkIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19jYXB0dXJlX2V2ZW50cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2FwdHVy
ZUV2ZW50cygpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19yZWxlYXNlX2V2ZW50
cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
V0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+cmVsZWFzZUV2ZW50cygpOworfQorCit2b2lkIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19jbGVhcl90aW1lb3V0KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2xv
bmcgaGFuZGxlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPmNsZWFyVGltZW91dChoYW5kbGUpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19jbGVhcl9pbnRlcnZhbChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdsb25nIGhhbmRsZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6
OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jbGVhcklu
dGVydmFsKGhhbmRsZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfYXRvYihX
ZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJpbmcsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cmluZywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJpbmcg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdG9iKGNvbnZlcnRlZFN0cmluZywgZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Y2hhciogd2Via2l0X2RvbV9kb21fd2luZG93X2J0b2EoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxm
LCBjb25zdCBnY2hhciogc3RyaW5nLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzdHJpbmcsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
LCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyaW5nID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0cmluZyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YnRvYShjb252ZXJ0ZWRTdHJpbmcs
IGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NU2NyZWVuKiB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpTY3JlZW4+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zY3JlZW4oKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01IaXN0b3J5KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2hpc3RvcnkoV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1co
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmhpc3RvcnkoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01CYXJQcm9wKiB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X2xvY2F0aW9uYmFyKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkJh
clByb3A+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sb2NhdGlvbmJhcigpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktp
dERPTUJhclByb3AqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbWVudWJhcihXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpCYXJQcm9wPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+bWVudWJhcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUJhclByb3AqIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19nZXRfcGVyc29uYWxiYXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QmFy
UHJvcD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBlcnNvbmFsYmFyKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NQmFyUHJvcCogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JvbGxiYXJzKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9X
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkJhclByb3A+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5zY3JvbGxiYXJzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQmFyUHJvcCogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9zdGF0dXNiYXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
QmFyUHJvcD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnN0YXR1c2JhcigpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktp
dERPTUJhclByb3AqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfdG9vbGJhcihXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpCYXJQcm9wPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+dG9vbGJhcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5hdmlnYXRvciogd2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9uYXZpZ2F0b3IoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TmF2
aWdhdG9yPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmF2aWdhdG9yKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NTmF2aWdhdG9yKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2NsaWVudF9pbmZvcm1hdGlv
bihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOYXZpZ2F0b3I+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jbGllbnRJbmZvcm1hdGlvbigpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1l
bnQqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZnJhbWVfZWxlbWVudChXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+ZnJhbWVFbGVtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9v
ZmZzY3JlZW5fYnVmZmVyaW5nKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPm9mZnNjcmVlbkJ1ZmZlcmluZygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3V0ZXJfaGVpZ2h0KFdlYktpdERPTURP
TVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+b3V0ZXJIZWlnaHQoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X291dGVyX3dpZHRo
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+b3V0ZXJXaWR0aCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
aW5uZXJfaGVpZ2h0KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+aW5u
ZXJIZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X2lubmVyX3dpZHRoKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0
ID0gaXRlbS0+aW5uZXJXaWR0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3goV2ViS2l0RE9NRE9NV2luZG93KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5zY3JlZW5YKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xv
bmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5feShXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcmVlblkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl9sZWZ0KFdlYktpdERPTURP
TVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2NyZWVuTGVmdCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3RvcChX
ZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcmVlblRvcCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Ny
b2xsX3goV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zY3JvbGxYKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF9zY3JvbGxfeShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcm9s
bFkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X3BhZ2VfeF9vZmZzZXQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5wYWdlWE9mZnNldCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfcGFnZV95X29mZnNldChXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGds
b25nIHJlc3VsdCA9IGl0ZW0tPnBhZ2VZT2Zmc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jbG9zZWQoV2ViS2l0RE9NRE9N
V2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2Vs
ZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2xvc2VkKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbGVuZ3RoKFdl
YktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
V0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X25hbWUo
V2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5uYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9k
b21fd2luZG93X3NldF9uYW1lKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXROYW1lKGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3RhdHVzKFdlYktp
dERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lO
RE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
c3RhdHVzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21f
d2luZG93X3NldF9zdGF0dXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFN0YXR1cyhjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2RlZmF1bHRfc3Rh
dHVzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+ZGVmYXVsdFN0YXR1cygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19zZXRfZGVmYXVsdF9zdGF0dXMoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fV0lORE9XKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldERlZmF1bHRTdGF0dXMoY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01ET01X
aW5kb3cqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2VsZihXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpET01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5zZWxmKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworV2ViS2l0RE9NRE9NV2luZG93KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3dp
bmRvdyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01XaW5kb3c+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aW5kb3coKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01ET01XaW5kb3cqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZnJhbWVzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkRPTVdpbmRvdz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZy
YW1lcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK1dlYktpdERPTURPTVdpbmRvdyogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9vcGVuZXIo
V2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b3BlbmVyKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NV2luZG93KiB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X3BhcmVudChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpET01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wYXJlbnQo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitX
ZWJLaXRET01ET01XaW5kb3cqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfdG9wKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9X
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdpbmRvdz4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnRvcCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURvY3VtZW50KiB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X2RvY3VtZW50KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5k
b3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3Vt
ZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZG9jdW1lbnQoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01T
dHlsZU1lZGlhKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3N0eWxlX21lZGlhKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9X
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0eWxlTWVkaWE+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5zdHlsZU1lZGlhKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X2RldmljZV9waXhlbF9yYXRpbyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0
ID0gaXRlbS0+ZGV2aWNlUGl4ZWxSYXRpbygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfYXBw
bGljYXRpb25fY2FjaGUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRv
dyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NQXBw
bGljYXRpb25DYWNoZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmFwcGxpY2F0
aW9uQ2FjaGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitXZWJLaXRET01TdG9yYWdlKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Nlc3Np
b25fc3RvcmFnZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2U+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5zZXNzaW9uU3RvcmFnZShlYykpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVN0b3JhZ2Uq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbG9jYWxfc3RvcmFnZShXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9XSU5ET1coc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAh
KmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlN0b3JhZ2U+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sb2NhbFN0
b3JhZ2UoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X29yaWVudGF0aW9uKFdl
YktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyNpZiBFTkFCTEUoT1JJRU5UQVRJT05fRVZFTlRT
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyBy
ZXN1bHQgPSBpdGVtLT5vcmllbnRhdGlvbigpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJPcmllbnRhdGlvbiBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykgKi8KK30KKworV2ViS2l0
RE9NUGVyZm9ybWFuY2UqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGVyZm9ybWFuY2UoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
UGVyZm9ybWFuY2U+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wZXJmb3JtYW5j
ZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoV0VC
X1RJTUlORykgKi8KK30KKworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X3NwZWVjaF9zeW50aGVzaXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQor
eworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoV2ViQ29yZTo6RE9NV2luZG93U3BlZWNoU3ludGhl
c2lzOjpzcGVlY2hTeW50aGVzaXMoKml0ZW0pKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICBy
ZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01ET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgwZDg2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NV2luZG93LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NV2lu
ZG93X2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NV2luZG93X2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVyAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fV0lORE9XKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9ET01fV0lORE9XLCBXZWJLaXRET01ET01XaW5kb3cpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RP
TV9XSU5ET1dfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csIFdlYktpdERPTURPTVdpbmRvd0NsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1cob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1cpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1dfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1cpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0RPTV9XSU5ET1dfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csIFdlYktpdERPTURP
TVdpbmRvd0NsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01ET01XaW5kb3cgeworICAgIFdlYktp
dERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURPTVdp
bmRvd0NsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3R5cGUodm9pZCk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01XaW5kb3dfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1ByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDA3MWJhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01XaW5kb3dQcml2
YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RPTVdpbmRvdy5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01XaW5k
b3cuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01XaW5kb3cqIHdyYXBET01X
aW5kb3coV2ViQ29yZTo6RE9NV2luZG93Kik7CitXZWJLaXRET01ET01XaW5kb3cqIGtpdChXZWJD
b3JlOjpET01XaW5kb3cqKTsKK1dlYkNvcmU6OkRPTVdpbmRvdyogY29yZShXZWJLaXRET01ET01X
aW5kb3cqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NRE9N
V2luZG93UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRo
ZXNpcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiMTcwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktp
dERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oIGFuZAorICAgIFdlYktpdERPTURPTVdpbmRv
d1NwZWVjaFN5bnRoZXNpcy5jcHAgYXJlIGNyZWF0ZWQgZm9yIERPTVdpbmRvd1NwZWVjaFN5bnRo
ZXNpcy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRy
eWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaCBhbmQK
KyAgICBXZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwIGF0IGV2ZXJ5IGJ1aWxk
LiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dTcGVlY2hT
eW50aGVzaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIxNzA2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaApAQCAtMCww
ICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVp
bGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oIGFuZAor
ICAgIFdlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAgYXJlIGNyZWF0ZWQgZm9y
IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUg
YnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01ET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMuaCBhbmQKKyAgICBXZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29t
cGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1Vuc3RhYmxlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TVdpbmRvd1Vuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0
ZGY0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93VW5zdGFibGUuaApAQCAtMCww
ICsxLDg4MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01ET01XaW5kb3dVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTURPTVdpbmRvd1Vuc3Rh
YmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUN1c3RvbVVuc3RhYmxlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2VsZWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NRE9NU2VsZWN0aW9uCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTURPTVNlbGVjdGlvbioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Vs
ZWN0aW9uKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b21fd2luZG93X2ZvY3VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZm9jdXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfYmx1cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9kb21fd2luZG93X2JsdXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xvc2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9N
V2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fZG9tX3dpbmRvd19jbG9zZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19wcmludDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X3ByaW50KFdlYktpdERPTURPTVdpbmRvdyog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3N0b3A6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19zdG9wKFdlYktpdERPTURPTVdp
bmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2FsZXJ0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQG1lc3NhZ2U6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
ZG9tX3dpbmRvd19hbGVydChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBt
ZXNzYWdlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY29uZmlybToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBtZXNzYWdlOiBBICNnY2hhcgorICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfY29uZmlybShXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfcHJvbXB0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICogQG1lc3NhZ2U6IEEgI2djaGFyCisgKiBAZGVmYXVsdFZhbHVlOiBBICNnY2hhcgorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fd2luZG93X3Byb21wdChXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVmYXVs
dFZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZmluZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBzdHJpbmc6IEEgI2djaGFyCisgKiBAY2FzZVNl
bnNpdGl2ZTogQSAjZ2Jvb2xlYW4KKyAqIEBiYWNrd2FyZHM6IEEgI2dib29sZWFuCisgKiBAd3Jh
cDogQSAjZ2Jvb2xlYW4KKyAqIEB3aG9sZVdvcmQ6IEEgI2dib29sZWFuCisgKiBAc2VhcmNoSW5G
cmFtZXM6IEEgI2dib29sZWFuCisgKiBAc2hvd0RpYWxvZzogQSAjZ2Jvb2xlYW4KKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb21fd2luZG93X2ZpbmQoV2ViS2l0RE9NRE9N
V2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogc3RyaW5nLCBnYm9vbGVhbiBjYXNlU2Vuc2l0aXZl
LCBnYm9vbGVhbiBiYWNrd2FyZHMsIGdib29sZWFuIHdyYXAsIGdib29sZWFuIHdob2xlV29yZCwg
Z2Jvb2xlYW4gc2VhcmNoSW5GcmFtZXMsIGdib29sZWFuIHNob3dEaWFsb2cpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19zY3JvbGxfYnk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RE9NV2luZG93CisgKiBAeDogQSAjZ2RvdWJsZQorICogQHk6IEEgI2dkb3VibGUKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21f
d2luZG93X3Njcm9sbF9ieShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdkb3VibGUgeCwgZ2Rv
dWJsZSB5KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xsX3RvOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHg6IEEgI2dkb3VibGUKKyAqIEB5OiBB
ICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19zY3JvbGxfdG8oV2ViS2l0RE9NRE9NV2luZG93KiBz
ZWxmLCBnZG91YmxlIHgsIGdkb3VibGUgeSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2lu
ZG93X3Njcm9sbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEB4OiBBICNn
ZG91YmxlCisgKiBAeTogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xsKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZiwgZ2RvdWJsZSB4LCBnZG91YmxlIHkpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19tb3ZlX2J5OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICogQHg6IEEgI2dmbG9hdAorICogQHk6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfbW92
ZV9ieShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdmbG9hdCB4LCBnZmxvYXQgeSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fd2luZG93X21vdmVfdG86CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKiBAeDogQSAjZ2Zsb2F0CisgKiBAeTogQSAjZ2Zsb2F0CisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19tb3ZlX3RvKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2Zsb2F0IHgsIGdmbG9h
dCB5KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVzaXplX2J5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHg6IEEgI2dmbG9hdAorICogQHk6IEEgI2dm
bG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVzaXplX2J5KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwg
Z2Zsb2F0IHgsIGdmbG9hdCB5KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVz
aXplX3RvOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHdpZHRoOiBBICNn
ZmxvYXQKKyAqIEBoZWlnaHQ6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVzaXplX3RvKFdl
YktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2Zsb2F0IHdpZHRoLCBnZmxvYXQgaGVpZ2h0KTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfbWF0Y2hfbWVkaWE6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRE9NV2luZG93CisgKiBAcXVlcnk6IEEgI2djaGFyCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdAorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCoK
K3dlYmtpdF9kb21fZG9tX3dpbmRvd19tYXRjaF9tZWRpYShXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYsIGNvbnN0IGdjaGFyKiBxdWVyeSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9jb21wdXRlZF9zdHlsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAq
IEBlbGVtZW50OiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAcHNldWRvRWxlbWVudDogKGFsbG93
LW5vbmUpOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKgord2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIFdl
YktpdERPTUVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IGdjaGFyKiBwc2V1ZG9FbGVtZW50KTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X2NvbnZlcnRfcG9pbnRfZnJvbV9w
YWdlX3RvX25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAbm9kZTog
QSAjV2ViS2l0RE9NTm9kZQorICogQHA6IEEgI1dlYktpdERPTVdlYktpdFBvaW50CisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01XZWJLaXRQb2ludAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01XZWJLaXRQb2lu
dCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJraXRfY29udmVydF9wb2ludF9mcm9tX3BhZ2Vf
dG9fbm9kZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIFdl
YktpdERPTVdlYktpdFBvaW50KiBwKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3df
d2Via2l0X2NvbnZlcnRfcG9pbnRfZnJvbV9ub2RlX3RvX3BhZ2U6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRE9NV2luZG93CisgKiBAbm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQHA6IEEgI1dl
YktpdERPTVdlYktpdFBvaW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01XZWJLaXRQb2ludAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01XZWJLaXRQb2ludCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJr
aXRfY29udmVydF9wb2ludF9mcm9tX25vZGVfdG9fcGFnZShXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIFdlYktpdERPTVdlYktpdFBvaW50KiBwKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2FuY2VsX2FuaW1hdGlvbl9mcmFtZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBpZDogQSAjZ2xvbmcKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2lu
ZG93X2NhbmNlbF9hbmltYXRpb25fZnJhbWUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnbG9u
ZyBpZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jYW5jZWxfYW5p
bWF0aW9uX2ZyYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGlkOiBB
ICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X2NhbmNlbF9hbmltYXRpb25fZnJhbWUoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmLCBnbG9uZyBpZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b21fd2luZG93X3dlYmtpdF9jYW5jZWxfcmVxdWVzdF9hbmltYXRpb25fZnJhbWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAaWQ6IEEgI2dsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRv
d193ZWJraXRfY2FuY2VsX3JlcXVlc3RfYW5pbWF0aW9uX2ZyYW1lKFdlYktpdERPTURPTVdpbmRv
dyogc2VsZiwgZ2xvbmcgaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19jYXB0
dXJlX2V2ZW50czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2lu
ZG93X2NhcHR1cmVfZXZlbnRzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb21fd2luZG93X3JlbGVhc2VfZXZlbnRzOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVsZWFzZV9ldmVudHMoV2ViS2l0RE9NRE9N
V2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xlYXJfdGlt
ZW91dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBoYW5kbGU6IEEgI2ds
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZG9tX3dpbmRvd19jbGVhcl90aW1lb3V0KFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZiwgZ2xvbmcgaGFuZGxlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xlYXJf
aW50ZXJ2YWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAaGFuZGxlOiBB
ICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2xlYXJfaW50ZXJ2YWwoV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmLCBnbG9uZyBoYW5kbGUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19h
dG9iOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHN0cmluZzogQSAjZ2No
YXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9k
b21fd2luZG93X2F0b2IoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogc3Ry
aW5nLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2J0
b2E6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAc3RyaW5nOiBBICNnY2hh
cgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfYnRvYShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJp
bmcsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X3NjcmVlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVNjcmVlbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01TY3JlZW4qCit3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfZ2V0X3NjcmVlbihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfaGlzdG9yeToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TUhpc3RvcnkKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSGlzdG9yeSoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfaGlzdG9yeShXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
bG9jYXRpb25iYXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01CYXJQcm9wCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUJhclByb3AqCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X2xvY2F0aW9uYmFyKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9tZW51YmFyOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NQmFyUHJvcAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01CYXJQcm9wKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9tZW51
YmFyKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9wZXJzb25hbGJhcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUJhclByb3AKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQmFyUHJv
cCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGVyc29uYWxiYXIoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbGJh
cnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01CYXJQcm9wCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUJhclByb3AqCit3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZ2V0X3Njcm9sbGJhcnMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3N0YXR1c2JhcjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTUJhclByb3AKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NQmFyUHJvcCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3RhdHVzYmFyKFdl
YktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF90b29sYmFyOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQmFyUHJvcAorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01CYXJQcm9wKgord2Via2l0
X2RvbV9kb21fd2luZG93X2dldF90b29sYmFyKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9uYXZpZ2F0b3I6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NTmF2aWdhdG9yKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9u
YXZpZ2F0b3IoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X2NsaWVudF9pbmZvcm1hdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TU5hdmlnYXRvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01OYXZpZ2F0b3IqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2NsaWVudF9pbmZv
cm1hdGlvbihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfZnJhbWVfZWxlbWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1l
bnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
RWxlbWVudCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZnJhbWVfZWxlbWVudChXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
b2Zmc2NyZWVuX2J1ZmZlcmluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9vZmZzY3Jl
ZW5fYnVmZmVyaW5nKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9vdXRlcl9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
b3V0ZXJfaGVpZ2h0KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9vdXRlcl93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9v
dXRlcl93aWR0aChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfaW5uZXJfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURP
TVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2lu
bmVyX2hlaWdodChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfaW5uZXJfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9N
V2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfaW5u
ZXJfd2lkdGgoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X3NjcmVlbl94OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl94
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9zY3JlZW5feToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5feShXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
c2NyZWVuX2xlZnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0
dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX2xlZnQoV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Nj
cmVlbl90b3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJu
czogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2xvbmcKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3RvcChXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Nyb2xs
X3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAj
Z2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcK
K3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Nyb2xsX3goV2ViS2l0RE9NRE9NV2luZG93KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbF95OgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbF95KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYWdlX3hfb2Zmc2V0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X3BhZ2VfeF9vZmZzZXQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BhZ2VfeV9vZmZzZXQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfcGFnZV95X29mZnNldChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY2xvc2VkOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X2Nsb3NlZChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfbGVuZ3RoKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdp
bmRvdworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9uYW1l
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2lu
ZG93X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X25hbWUoV2ViS2l0RE9NRE9NV2luZG93KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19nZXRfc3RhdHVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zdGF0dXMoV2ViS2l0RE9NRE9N
V2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X3N0YXR1
czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9kb21fd2luZG93X3NldF9zdGF0dXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZGVm
YXVsdF9zdGF0dXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2RlZmF1bHRfc3RhdHVzKFdlYktp
dERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3Nl
dF9kZWZhdWx0X3N0YXR1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X3NldF9kZWZhdWx0X3N0YXR1cyhXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9zZWxmOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NV2luZG93
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURP
TVdpbmRvdyoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2VsZihXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfd2luZG93Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTVdpbmRvdyoKK3dlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfd2luZG93KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9mcmFtZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9N
V2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NRE9NV2luZG93Kgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9mcmFtZXMoV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X29w
ZW5lcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X29wZW5lcihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFyZW50OgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTURPTVdpbmRvdyoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFyZW50KFdl
YktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF90b3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2luZG93Kgord2Via2l0
X2RvbV9kb21fd2luZG93X2dldF90b3AoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2RvY3VtZW50OgorICogQHNlbGY6IEEgI1dl
YktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NRG9jdW1lbnQqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2RvY3VtZW50
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9zdHlsZV9tZWRpYToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVN0eWxlTWVkaWEKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3R5bGVN
ZWRpYSoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3R5bGVfbWVkaWEoV2ViS2l0RE9NRE9N
V2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2Rldmlj
ZV9waXhlbF9yYXRpbzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBS
ZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZGV2aWNlX3BpeGVsX3Jh
dGlvKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9hcHBsaWNhdGlvbl9jYWNoZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTUFw
cGxpY2F0aW9uQ2FjaGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfYXBwbGljYXRpb25fY2FjaGUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Nlc3Npb25fc3RvcmFnZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NU3RvcmFnZQorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01TdG9yYWdlKgord2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9zZXNzaW9uX3N0b3JhZ2UoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sb2Nh
bF9zdG9yYWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01TdG9y
YWdlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TVN0b3JhZ2UqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2xvY2FsX3N0b3JhZ2UoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fd2luZG93X2dldF9vcmllbnRhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01X
aW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9vcmll
bnRhdGlvbihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfcGVyZm9ybWFuY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2lu
ZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01QZXJmb3Jt
YW5jZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01QZXJmb3JtYW5jZSoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGVyZm9ybWFuY2UoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3NwZWVjaF9zeW50aGVzaXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVz
aXMKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zcGVlY2hfc3ludGhl
c2lzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURP
TVdpbmRvd1Vuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURhdGFDdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjAzNzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFDdWUuY3BwCkBAIC0wLDAgKzEsMTM2IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRGF0YUN1ZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NRGF0YUN1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tD
dWVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01EYXRhQ3VlKiBraXQo
V2ViQ29yZTo6RGF0YUN1ZSogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0RBVEFfQ1VF
KGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tDdWUqPihvYmopKSk7Cit9CisKK1dl
YkNvcmU6OkRhdGFDdWUqIGNvcmUoV2ViS2l0RE9NRGF0YUN1ZSogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRhdGFDdWUqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01EYXRhQ3Vl
KiB3cmFwRGF0YUN1ZShXZWJDb3JlOjpEYXRhQ3VlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9EQVRBX0NVRShnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX0RBVEFfQ1VFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFZJREVPX1RSQUNLKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kYXRhX2N1ZV9kaXNw
YXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCog
ZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBX
ZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAo
IWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkRhdGFDdWUq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEYXRhQ3VlKj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50
Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2RhdGFfY3VlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpEYXRh
Q3VlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGF0YUN1ZSo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNF
RF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2RhdGFfY3VlX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBX
ZWJDb3JlOjpEYXRhQ3VlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGF0YUN1
ZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5h
bWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2Fw
dHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2si
KQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRU
YXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0
X2RvbV9kYXRhX2N1ZV9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9kYXRhX2N1ZV9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZGF0YV9jdWVfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01EYXRhQ3Vl
LCB3ZWJraXRfZG9tX2RhdGFfY3VlLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUUsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kYXRhX2N1
ZV9jbGFzc19pbml0KFdlYktpdERPTURhdGFDdWVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IFVOVVNFRF9QQVJBTShyZXF1ZXN0Q2xhc3MpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2RhdGFfY3VlX2luaXQoV2ViS2l0RE9NRGF0YUN1ZSogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0ocmVxdWVzdCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
YXRhQ3VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwNjgwMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRGF0YUN1ZV9oCisjZGVm
aW5lIFdlYktpdERPTURhdGFDdWVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVf
QVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01UZXh0VHJhY2tDdWUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0RBVEFfQ1VFICAgICAgICAgICAgKHdlYmtpdF9kb21fZGF0YV9jdWVfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9EQVRBX0NVRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfREFUQV9DVUUsIFdlYktpdERPTURh
dGFDdWUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RBVEFfQ1VFX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9EQVRBX0NVRSwg
V2ViS2l0RE9NRGF0YUN1ZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RBVEFfQ1VFKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9EQVRBX0NVRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfREFUQV9DVUVfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RB
VEFfQ1VFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9EQVRBX0NVRV9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfREFUQV9DVUUs
IFdlYktpdERPTURhdGFDdWVDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRGF0YUN1ZSB7Cisg
ICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlIHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NRGF0YUN1ZUNsYXNzIHsKKyAgICBXZWJLaXRET01UZXh0VHJhY2tDdWVDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RhdGFfY3Vl
X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRGF0YUN1ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0SXRlcmFibGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFDdWVQcml2YXRlLmgKc2ltaWxh
cml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZS5oCnJlbmFtZSB0byBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURhdGFDdWVQcml2YXRlLmgKaW5kZXggZWUwNmJhZi4uYTZhMDgzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEl0ZXJhYmxlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZVByaXZhdGUuaApAQCAtMTgsMTYg
KzE4LDE5IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRl
ZiBXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEl0
ZXJhYmxlUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTURhdGFDdWVQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NRGF0YUN1ZVByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdEl0ZXJhYmxlLmgi
Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RJdGVyYWJsZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRGF0YUN1ZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01EYXRhQ3Vl
Lmg+CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktp
dERPTVRlc3RJdGVyYWJsZSogd3JhcFRlc3RJdGVyYWJsZShXZWJDb3JlOjpUZXN0SXRlcmFibGUq
KTsKLVdlYktpdERPTVRlc3RJdGVyYWJsZSoga2l0KFdlYkNvcmU6OlRlc3RJdGVyYWJsZSopOwot
V2ViQ29yZTo6VGVzdEl0ZXJhYmxlKiBjb3JlKFdlYktpdERPTVRlc3RJdGVyYWJsZSopOworV2Vi
S2l0RE9NRGF0YUN1ZSogd3JhcERhdGFDdWUoV2ViQ29yZTo6RGF0YUN1ZSopOworV2ViS2l0RE9N
RGF0YUN1ZSoga2l0KFdlYkNvcmU6OkRhdGFDdWUqKTsKK1dlYkNvcmU6OkRhdGFDdWUqIGNvcmUo
V2ViS2l0RE9NRGF0YUN1ZSopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBX
ZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01EYXRhQ3VlUHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDg3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURhdGFiYXNlLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURhdGFiYXNl
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJ
VF9ET01fREFUQUJBU0VfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfREFUQUJBU0UsIFdlYktpdERPTURhdGFiYXNlUHJpdmF0
ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURhdGFiYXNlUHJpdmF0ZSB7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkRhdGFiYXNlPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01EYXRhYmFzZVBy
aXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01EYXRhYmFzZSoga2l0KFdl
YkNvcmU6OkRhdGFiYXNlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fREFUQUJBU0UocmV0KTsKKworICAgIHJldHVybiB3cmFw
RGF0YWJhc2Uob2JqKTsKK30KKworV2ViQ29yZTo6RGF0YWJhc2UqIGNvcmUoV2ViS2l0RE9NRGF0
YWJhc2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpEYXRhYmFzZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTURhdGFiYXNlKiB3cmFwRGF0YWJhc2UoV2ViQ29yZTo6RGF0YWJh
c2UqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0RBVEFCQVNFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfREFUQUJBU0Us
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRGF0YWJhc2UsIHdlYmtpdF9kb21f
ZGF0YWJhc2UsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX1ZFUlNJT04sCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RhdGFiYXNl
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01EYXRhYmFzZVByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX0RBVEFCQVNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlKCk7CisgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RhdGFiYXNlX2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTURhdGFiYXNlKiBzZWxmID0gV0VCS0lUX0RPTV9EQVRB
QkFTRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X1ZFUlNJT046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
ZGF0YWJhc2VfZ2V0X3ZlcnNpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fZGF0YWJhc2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29u
c3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFBy
b3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV9kYXRhYmFzZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRGF0
YWJhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9EQVRBQkFTRV9HRVRfUFJJVkFURShvYmpl
Y3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEYXRhYmFz
ZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisg
ICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kYXRhYmFzZV9j
bGFzc19pbml0KFdlYktpdERPTURhdGFiYXNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktp
dERPTURhdGFiYXNlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3
ZWJraXRfZG9tX2RhdGFiYXNlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfZG9tX2RhdGFiYXNlX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kYXRhYmFzZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVkVSU0lPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJ2ZXJzaW9uIiwKKyAgICAgICAgICAgICJEYXRhYmFzZTp2ZXJzaW9uIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2NoYXIqIERhdGFiYXNlOnZlcnNpb24iLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2RhdGFiYXNlX2luaXQoV2ViS2l0RE9NRGF0YWJhc2UqIHJlcXVlc3QpCit7
CisgICAgV2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9EQVRBQkFT
RV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTURhdGFiYXNl
UHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kYXRhYmFzZV9nZXRfdmVyc2lvbihX
ZWJLaXRET01EYXRhYmFzZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19EQVRB
QkFTRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RGF0YWJhc2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
dmVyc2lvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1dGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRGF0YWJhc2UuaApzaW1pbGFyaXR5IGluZGV4IDU0JQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1
dGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhYmFzZS5oCmluZGV4IDQxMGQ2NDcuLjEzNWExYjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTWF0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2UuaApAQCAtMTgsOCArMTgsOCBA
QAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0
RE9NYXR0cmlidXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NYXR0cmlidXRlX2gKKyNpZm5kZWYgV2Vi
S2l0RE9NRGF0YWJhc2VfaAorI2RlZmluZSBXZWJLaXRET01EYXRhYmFzZV9oCiAKICNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKIApAQCAtMjksNDAgKzI5LDM2IEBACiAKIEdfQkVH
SU5fREVDTFMKIAotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9BVFRS
SUJVVEUgICAgICAgICAgICAod2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3R5cGUoKSkKLSNkZWZp
bmUgV0VCS0lUX0RPTV9BVFRSSUJVVEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FUVFJJQlVURSwgV2ViS2l0RE9NYXR0
cmlidXRlKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9BVFRSSUJVVEVfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FUVFJJQlVU
RSwgV2ViS2l0RE9NYXR0cmlidXRlQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfQVRUUklC
VVRFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9BVFRSSUJVVEUpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX0FUVFJJQlVURV9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfQVRUUklCVVRFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9BVFRSSUJVVEVfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X0FUVFJJQlVURSwgV2ViS2l0RE9NYXR0cmlidXRlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfREFUQUJBU0UgICAgICAgICAgICAod2Via2l0X2RvbV9kYXRhYmFzZV9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0RBVEFCQVNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9EQVRBQkFTRSwgV2ViS2l0
RE9NRGF0YWJhc2UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RBVEFCQVNFX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9EQVRB
QkFTRSwgV2ViS2l0RE9NRGF0YWJhc2VDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19EQVRB
QkFTRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfREFUQUJBU0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RBVEFCQVNFX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9EQVRBQkFTRSkpCisjZGVmaW5lIFdFQktJVF9ET01fREFUQUJBU0VfR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RB
VEFCQVNFLCBXZWJLaXRET01EYXRhYmFzZUNsYXNzKSkKIAotc3RydWN0IF9XZWJLaXRET01hdHRy
aWJ1dGUgeworc3RydWN0IF9XZWJLaXRET01EYXRhYmFzZSB7CiAgICAgV2ViS2l0RE9NT2JqZWN0
IHBhcmVudF9pbnN0YW5jZTsKIH07CiAKLXN0cnVjdCBfV2ViS2l0RE9NYXR0cmlidXRlQ2xhc3Mg
eworc3RydWN0IF9XZWJLaXRET01EYXRhYmFzZUNsYXNzIHsKICAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX2F0
dHJpYnV0ZV9nZXRfdHlwZSh2b2lkKTsKK3dlYmtpdF9kb21fZGF0YWJhc2VfZ2V0X3R5cGUodm9p
ZCk7CiAKIC8qKgotICogd2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3JlYWRvbmx5OgotICogQHNl
bGY6IEEgI1dlYktpdERPTWF0dHJpYnV0ZQorICogd2Via2l0X2RvbV9kYXRhYmFzZV9nZXRfdmVy
c2lvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01EYXRhYmFzZQogICoKICAqIFJldHVybnM6IEEg
I2djaGFyCiAgKgogICogU3RhYmlsaXR5OiBVbnN0YWJsZQogKiovCiBXRUJLSVRfQVBJIGdjaGFy
Kgotd2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3JlYWRvbmx5KFdlYktpdERPTWF0dHJpYnV0ZSog
c2VsZik7Cit3ZWJraXRfZG9tX2RhdGFiYXNlX2dldF92ZXJzaW9uKFdlYktpdERPTURhdGFiYXNl
KiBzZWxmKTsKIAogR19FTkRfREVDTFMKIAogI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RFeGNlcHRpb25faCAqLwotI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTWF0
dHJpYnV0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NRGF0YWJhc2VfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01EYXRhYmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzMTJmNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRGF0YWJhc2VQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01EYXRhYmFzZVByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRET01EYXRhYmFzZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9EYXRh
YmFzZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01EYXRhYmFzZS5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURhdGFiYXNlKiB3cmFwRGF0YWJhc2UoV2ViQ29yZTo6
RGF0YWJhc2UqKTsKK1dlYktpdERPTURhdGFiYXNlKiBraXQoV2ViQ29yZTo6RGF0YWJhc2UqKTsK
K1dlYkNvcmU6OkRhdGFiYXNlKiBjb3JlKFdlYktpdERPTURhdGFiYXNlKik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURhdGFiYXNlUHJpdmF0ZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTURlcHJl
Y2F0ZWQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01EZXByZWNhdGVkLmNwcApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5h
bWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTURlcHJlY2F0
ZWQuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURlcHJlY2F0ZWQuY3BwCmluZGV4IGFiYjZlYWYuLjc1M2Fj
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9N
RGVwcmVjYXRlZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EZXByZWNhdGVkLmNwcApAQCAtMjAsMTIgKzIwLDEy
IEBACiAjaW5jbHVkZSAiV2ViS2l0RE9NRGVwcmVjYXRlZC5oIgogCiAjaW5jbHVkZSAiQ29udmVy
dFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNs
dWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0VsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MQ29sbGVjdGlvbi5oPgogI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTERvY3VtZW50UHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01EZXByZWNhdGVkLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURlcHJlY2F0ZWQuaApz
aW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EZXByZWNhdGVkLmgK
aW5kZXggY2M0NDg4OS4uMWI5MzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01EZXByZWNhdGVkLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EZXByZWNhdGVkLmgK
QEAgLTE2Myw2ICsxNjMsNyBAQCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2Ns
YXNzX25hbWUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYQogICogd2Via2l0X2Rv
bV9ub2RlX2Nsb25lX25vZGU6CiAgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQogICogQGRlZXA6
IEEgI2dib29sZWFuCisgKiBAZXJyb3I6ICNHRXJyb3IKICAqCiAgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRG9jdW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjI1OTFmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50LmNwcApAQCAtMCww
ICsxLDIwMDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQXR0clByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01DREFUQVNlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Db21tZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTURPTVdpbmRvd1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3Vt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50VHlwZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEhlYWRFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVGaWx0ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVM
aXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01SYW5nZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01UZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRyZWVXYWxrZXJQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01YUGF0aFJlc3VsdFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJLaXRET01Eb2N1bWVudCoga2l0KFdlYkNvcmU6OkRvY3VtZW50KiBvYmopCit7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fRE9DVU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUq
PihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkRvY3VtZW50KiBjb3JlKFdlYktpdERPTURvY3VtZW50
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RG9jdW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01Eb2N1bWVudCogd3JhcERvY3VtZW50KFdlYkNvcmU6OkRvY3VtZW50KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9ET0NVTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5ULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6
OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpEb2N1bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
Y29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlv
bi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fZG9jdW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2RvY3VtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNl
LT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZG9jdW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2RvY3VtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NRG9jdW1lbnQsIHdlYmtpdF9kb21fZG9jdW1lbnQsIFdFQktJVF9E
T01fVFlQRV9OT0RFLCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5U
X1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBS
T1BfMCwKKyAgICBQUk9QX0RPQ1RZUEUsCisgICAgUFJPUF9JTVBMRU1FTlRBVElPTiwKKyAgICBQ
Uk9QX0RPQ1VNRU5UX0VMRU1FTlQsCisgICAgUFJPUF9JTlBVVF9FTkNPRElORywKKyAgICBQUk9Q
X1hNTF9FTkNPRElORywKKyAgICBQUk9QX1hNTF9WRVJTSU9OLAorICAgIFBST1BfWE1MX1NUQU5E
QUxPTkUsCisgICAgUFJPUF9ET0NVTUVOVF9VUkksCisgICAgUFJPUF9ERUZBVUxUX1ZJRVcsCisg
ICAgUFJPUF9TVFlMRV9TSEVFVFMsCisgICAgUFJPUF9DT05URU5UX1RZUEUsCisgICAgUFJPUF9U
SVRMRSwKKyAgICBQUk9QX0RJUiwKKyAgICBQUk9QX0RFU0lHTl9NT0RFLAorICAgIFBST1BfUkVG
RVJSRVIsCisgICAgUFJPUF9ET01BSU4sCisgICAgUFJPUF9VUkwsCisgICAgUFJPUF9DT09LSUUs
CisgICAgUFJPUF9CT0RZLAorICAgIFBST1BfSEVBRCwKKyAgICBQUk9QX0lNQUdFUywKKyAgICBQ
Uk9QX0FQUExFVFMsCisgICAgUFJPUF9MSU5LUywKKyAgICBQUk9QX0ZPUk1TLAorICAgIFBST1Bf
QU5DSE9SUywKKyAgICBQUk9QX0VNQkVEUywKKyAgICBQUk9QX1BMVUdJTlMsCisgICAgUFJPUF9T
Q1JJUFRTLAorICAgIFBST1BfTEFTVF9NT0RJRklFRCwKKyAgICBQUk9QX0NIQVJTRVQsCisgICAg
UFJPUF9SRUFEWV9TVEFURSwKKyAgICBQUk9QX0NIQVJBQ1RFUl9TRVQsCisgICAgUFJPUF9QUkVG
RVJSRURfU1RZTEVTSEVFVF9TRVQsCisgICAgUFJPUF9TRUxFQ1RFRF9TVFlMRVNIRUVUX1NFVCwK
KyAgICBQUk9QX0FDVElWRV9FTEVNRU5ULAorICAgIFBST1BfQ09NUEFUX01PREUsCisgICAgUFJP
UF9XRUJLSVRfSVNfRlVMTF9TQ1JFRU4sCisgICAgUFJPUF9XRUJLSVRfRlVMTF9TQ1JFRU5fS0VZ
Qk9BUkRfSU5QVVRfQUxMT1dFRCwKKyAgICBQUk9QX1dFQktJVF9DVVJSRU5UX0ZVTExfU0NSRUVO
X0VMRU1FTlQsCisgICAgUFJPUF9XRUJLSVRfRlVMTFNDUkVFTl9FTkFCTEVELAorICAgIFBST1Bf
V0VCS0lUX0ZVTExTQ1JFRU5fRUxFTUVOVCwKKyAgICBQUk9QX1BPSU5URVJfTE9DS19FTEVNRU5U
LAorICAgIFBST1BfVklTSUJJTElUWV9TVEFURSwKKyAgICBQUk9QX0hJRERFTiwKKyAgICBQUk9Q
X0NVUlJFTlRfU0NSSVBULAorICAgIFBST1BfT1JJR0lOLAorICAgIFBST1BfU0NST0xMSU5HX0VM
RU1FTlQsCisgICAgUFJPUF9DSElMRFJFTiwKKyAgICBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQs
CisgICAgUFJPUF9MQVNUX0VMRU1FTlRfQ0hJTEQsCisgICAgUFJPUF9DSElMRF9FTEVNRU5UX0NP
VU5ULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCogc2VsZiA9IFdFQktJ
VF9ET01fRE9DVU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9YTUxfVkVSU0lPTjoKKyAgICAgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRf
eG1sX3ZlcnNpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9YTUxfU1RBTkRBTE9ORToKKyAgICAgICAgd2Vi
a2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3N0YW5kYWxvbmUoc2VsZiwgZ192YWx1ZV9nZXRfYm9v
bGVhbih2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9D
VU1FTlRfVVJJOgorICAgICAgICB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kb2N1bWVudF91cmko
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9USVRMRToKKyAgICAgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9ESVI6CisgICAgICAgIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2RpcihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RF
U0lHTl9NT0RFOgorICAgICAgICB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kZXNpZ25fbW9kZShz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0NPT0tJRToKKyAgICAgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfY29va2llKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ0hBUlNFVDoKKyAgICAgICAgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRf
Y2hhcnNldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX1NUWUxFU0hFRVRfU0VUOgorICAgICAgICB3ZWJraXRf
ZG9tX2RvY3VtZW50X3NldF9zZWxlY3RlZF9zdHlsZXNoZWV0X3NldChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0RPQ1VNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRE9DVFlQRToKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N0eXBlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lNUExFTUVOVEFUSU9OOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ltcGxlbWVudGF0
aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RPQ1VNRU5UX0VMRU1F
TlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfZG9jdW1lbnRfZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9JTlBVVF9FTkNPRElORzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW5wdXRfZW5jb2Rpbmcoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfWE1MX0VOQ09ESU5HOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxfZW5jb2Rpbmcoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfWE1MX1ZFUlNJT046CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF92ZXJz
aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1hNTF9TVEFOREFMT05F
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF94bWxfc3RhbmRhbG9uZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9ET0NVTUVOVF9VUkk6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2RvY3VtZW50X3VyaShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9ERUZBVUxUX1ZJRVc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVsdF92aWV3KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NUWUxFX1NIRUVUUzoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zdHlsZV9zaGVldHMoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09OVEVOVF9UWVBFOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb250
ZW50X3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVElUTEU6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X3RpdGxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJUjoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGly
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU0lHTl9NT0RFOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9k
ZXNpZ25fbW9kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUZFUlJF
UjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfcmVmZXJyZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9N
QUlOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9kb21haW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVJM
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF91cmwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09PS0lFOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9jb29raWUoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Qk9EWToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9ib2R5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFQUQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfaGVhZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTUFHRVM6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
aW1hZ2VzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FQUExFVFM6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
YXBwbGV0cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MSU5LUzoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9s
aW5rcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNUzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9mb3Jt
cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTkNIT1JTOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2FuY2hv
cnMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRU1CRURTOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VtYmVk
cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QTFVHSU5TOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3BsdWdp
bnMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NSSVBUUzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3Jp
cHRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBU1RfTU9ESUZJRUQ6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2xhc3RfbW9kaWZpZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Q0hBUlNFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfY2hhcnNldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9SRUFEWV9TVEFURToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfcmVhZHlfc3RhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQ0hBUkFDVEVSX1NFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hhcmFjdGVyX3NldChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUkVGRVJSRURfU1RZTEVTSEVFVF9TRVQ6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3By
ZWZlcnJlZF9zdHlsZXNoZWV0X3NldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9TRUxFQ1RFRF9TVFlMRVNIRUVUX1NFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUNUSVZFX0VMRU1FTlQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
YWN0aXZlX2VsZW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09N
UEFUX01PREU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2NvbXBhdF9tb2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1dFQktJVF9JU19GVUxMX1NDUkVFTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2lzX2Z1bGxfc2NyZWVuKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9GVUxMX1NDUkVFTl9L
RVlCT0FSRF9JTlBVVF9BTExPV0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbF9zY3JlZW5fa2V5Ym9hcmRfaW5w
dXRfYWxsb3dlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRf
Q1VSUkVOVF9GVUxMX1NDUkVFTl9FTEVNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9jdXJyZW50X2Z1bGxfc2NyZWVu
X2VsZW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0ZV
TExTQ1JFRU5fRU5BQkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZW5hYmxlZChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfRlVMTFNDUkVFTl9FTEVNRU5UOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X3dlYmtpdF9mdWxsc2NyZWVuX2VsZW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUE9JTlRFUl9MT0NLX0VMRU1FTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcG9pbnRlcl9sb2NrX2VsZW1lbnQoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVklTSUJJTElUWV9TVEFURToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
dmlzaWJpbGl0eV9zdGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9I
SURERU46CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2hpZGRlbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
VVJSRU5UX1NDUklQVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9jdXJyZW50X3NjcmlwdChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9PUklHSU46CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X29yaWdpbihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9TQ1JPTExJTkdfRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3JvbGxpbmdfZWxlbWVudChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSElMRFJFTjoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGlsZHJlbihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GSVJTVF9FTEVNRU5UX0NISUxE
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2ZpcnN0X2VsZW1lbnRfY2hpbGQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTEFTVF9FTEVNRU5UX0NISUxEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSElMRF9FTEVNRU5UX0NPVU5UOgorICAgICAg
ICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hpbGRf
ZWxlbWVudF9jb3VudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2RvY3VtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NRG9jdW1lbnRDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
RE9DVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJkb2N0
eXBlIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpkb2N0eXBlIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBEb2N1bWVudDpkb2N0eXBlIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9UWVBFLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSU1QTEVNRU5UQVRJT04sCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiaW1wbGVtZW50YXRpb24iLAor
ICAgICAgICAgICAgIkRvY3VtZW50OmltcGxlbWVudGF0aW9uIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIERvY3VtZW50OmltcGxlbWVudGF0aW9u
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04sCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ET0NV
TUVOVF9FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
ImRvY3VtZW50LWVsZW1lbnQiLAorICAgICAgICAgICAgIkRvY3VtZW50OmRvY3VtZW50LWVsZW1l
bnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBEb2N1bWVudDpk
b2N1bWVudC1lbGVtZW50IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
SU5QVVRfRU5DT0RJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiaW5wdXQtZW5jb2RpbmciLAorICAgICAgICAgICAgIkRvY3VtZW50OmlucHV0LWVuY29kaW5n
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50OmlucHV0LWVuY29kaW5n
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfWE1MX0VOQ09ESU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgInhtbC1lbmNvZGluZyIsCisgICAgICAgICAgICAiRG9jdW1l
bnQ6eG1sLWVuY29kaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50
OnhtbC1lbmNvZGluZyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1hNTF9WRVJTSU9OLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInhtbC12ZXJzaW9uIiwKKyAgICAgICAg
ICAgICJEb2N1bWVudDp4bWwtdmVyc2lvbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogRG9jdW1lbnQ6eG1sLXZlcnNpb24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfWE1MX1NUQU5EQUxP
TkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInhtbC1zdGFu
ZGFsb25lIiwKKyAgICAgICAgICAgICJEb2N1bWVudDp4bWwtc3RhbmRhbG9uZSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBEb2N1bWVudDp4bWwtc3RhbmRhbG9uZSIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9ET0NVTUVOVF9VUkksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiZG9jdW1lbnQtdXJpIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpk
b2N1bWVudC11cmkiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OmRv
Y3VtZW50LXVyaSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX1ZJRVcsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZGVmYXVsdC12aWV3IiwKKyAgICAgICAg
ICAgICJEb2N1bWVudDpkZWZhdWx0LXZpZXciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01ET01XaW5kb3cqIERvY3VtZW50OmRlZmF1bHQtdmlldyIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfRE9NX1dJTkRPVywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NUWUxFX1NIRUVUUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJzdHlsZS1zaGVldHMiLAorICAgICAgICAgICAgIkRv
Y3VtZW50OnN0eWxlLXNoZWV0cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVN0
eWxlU2hlZXRMaXN0KiBEb2N1bWVudDpzdHlsZS1zaGVldHMiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX1NUWUxFX1NIRUVUX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05URU5UX1RZUEUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29udGVudC10eXBlIiwKKyAgICAgICAgICAg
ICJEb2N1bWVudDpjb250ZW50LXR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
RG9jdW1lbnQ6Y29udGVudC10eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVElUTEUsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGl0bGUiLAorICAgICAgICAgICAg
IkRvY3VtZW50OnRpdGxlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBEb2N1bWVu
dDp0aXRsZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiZGlyIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpkaXIiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OmRpciIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9ERVNJR05fTU9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJkZXNpZ24tbW9kZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6ZGVzaWduLW1vZGUi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OmRlc2lnbi1tb2RlIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1JFRkVSUkVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgInJlZmVycmVyIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpyZWZlcnJl
ciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDpyZWZlcnJlciIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0RPTUFJTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJkb21haW4iLAorICAgICAgICAgICAgIkRvY3VtZW50OmRvbWFpbiIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDpkb21haW4iLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9VUkwsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidXJs
IiwKKyAgICAgICAgICAgICJEb2N1bWVudDp1cmwiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Y2hhciogRG9jdW1lbnQ6dXJsIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09PS0lFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvb2tpZSIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6Y29va2llIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBEb2N1bWVu
dDpjb29raWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQk9EWSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJib2R5IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpib2R5
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIERvY3VtZW50
OmJvZHkiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFQUQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiaGVhZCIsCisgICAg
ICAgICAgICAiRG9jdW1lbnQ6aGVhZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERP
TUhUTUxIZWFkRWxlbWVudCogRG9jdW1lbnQ6aGVhZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTUFHRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAiaW1hZ2VzIiwKKyAgICAgICAgICAgICJEb2N1bWVudDppbWFn
ZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9j
dW1lbnQ6aW1hZ2VzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJ
T04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9BUFBMRVRTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
ImFwcGxldHMiLAorICAgICAgICAgICAgIkRvY3VtZW50OmFwcGxldHMiLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6YXBwbGV0cyIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTElOS1MsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGlua3MiLAorICAgICAgICAg
ICAgIkRvY3VtZW50OmxpbmtzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb24qIERvY3VtZW50OmxpbmtzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9GT1JNUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJmb3JtcyIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6Zm9ybXMiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6Zm9y
bXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FOQ0hP
UlMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiYW5jaG9ycyIs
CisgICAgICAgICAgICAiRG9jdW1lbnQ6YW5jaG9ycyIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDphbmNob3JzIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9FTUJFRFMsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZW1iZWRzIiwKKyAgICAgICAgICAgICJEb2N1
bWVudDplbWJlZHMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVj
dGlvbiogRG9jdW1lbnQ6ZW1iZWRzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9QTFVHSU5TLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgInBsdWdpbnMiLAorICAgICAgICAgICAgIkRvY3VtZW50OnBsdWdpbnMiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6cGx1
Z2lucyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NS
SVBUUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzY3JpcHRz
IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpzY3JpcHRzIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIERvY3VtZW50OnNjcmlwdHMiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBU1RfTU9ESUZJRUQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibGFzdC1tb2RpZmllZCIsCisg
ICAgICAgICAgICAiRG9jdW1lbnQ6bGFzdC1tb2RpZmllZCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdjaGFyKiBEb2N1bWVudDpsYXN0LW1vZGlmaWVkIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hB
UlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaGFyc2V0
IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpjaGFyc2V0IiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBEb2N1bWVudDpjaGFyc2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFQURZX1NU
QVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInJlYWR5LXN0
YXRlIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpyZWFkeS1zdGF0ZSIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDpyZWFkeS1zdGF0ZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NIQVJBQ1RFUl9TRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiY2hhcmFjdGVyLXNldCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6Y2hhcmFjdGVyLXNldCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDpjaGFyYWN0ZXItc2V0IiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfUFJFRkVSUkVEX1NUWUxFU0hFRVRfU0VULAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInByZWZlcnJlZC1zdHlsZXNoZWV0LXNldCIs
CisgICAgICAgICAgICAiRG9jdW1lbnQ6cHJlZmVycmVkLXN0eWxlc2hlZXQtc2V0IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50OnByZWZlcnJlZC1zdHlsZXNoZWV0LXNl
dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1NFTEVDVEVEX1NUWUxFU0hFRVRfU0VULAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNlbGVjdGVkLXN0eWxlc2hlZXQtc2V0
IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpzZWxlY3RlZC1zdHlsZXNoZWV0LXNldCIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogRG9jdW1lbnQ6c2VsZWN0ZWQtc3R5bGVzaGVldC1z
ZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUNUSVZFX0VMRU1FTlQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAiYWN0aXZlLWVsZW1lbnQiLAorICAgICAgICAgICAg
IkRvY3VtZW50OmFjdGl2ZS1lbGVtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NRWxlbWVudCogRG9jdW1lbnQ6YWN0aXZlLWVsZW1lbnQiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DT01QQVRfTU9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJjb21wYXQtbW9kZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6
Y29tcGF0LW1vZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6Y29t
cGF0LW1vZGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfSVNfRlVMTF9TQ1JFRU4sCisgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndlYmtpdC1pcy1mdWxsLXNj
cmVlbiIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6d2Via2l0LWlzLWZ1bGwtc2NyZWVuIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gRG9jdW1lbnQ6d2Via2l0LWlzLWZ1bGwtc2Ny
ZWVuIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0ZVTExfU0NSRUVOX0tFWUJPQVJEX0lO
UFVUX0FMTE9XRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAg
IndlYmtpdC1mdWxsLXNjcmVlbi1rZXlib2FyZC1pbnB1dC1hbGxvd2VkIiwKKyAgICAgICAgICAg
ICJEb2N1bWVudDp3ZWJraXQtZnVsbC1zY3JlZW4ta2V5Ym9hcmQtaW5wdXQtYWxsb3dlZCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIERvY3VtZW50OndlYmtpdC1mdWxsLXNjcmVl
bi1rZXlib2FyZC1pbnB1dC1hbGxvd2VkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0NV
UlJFTlRfRlVMTF9TQ1JFRU5fRUxFTUVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJ3ZWJraXQtY3VycmVudC1mdWxsLXNjcmVlbi1lbGVtZW50IiwKKyAgICAg
ICAgICAgICJEb2N1bWVudDp3ZWJraXQtY3VycmVudC1mdWxsLXNjcmVlbi1lbGVtZW50IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCogRG9jdW1lbnQ6d2Via2l0LWN1
cnJlbnQtZnVsbC1zY3JlZW4tZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
RUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1dFQktJVF9GVUxMU0NSRUVOX0VOQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgIndlYmtpdC1mdWxsc2NyZWVuLWVuYWJsZWQiLAorICAg
ICAgICAgICAgIkRvY3VtZW50OndlYmtpdC1mdWxsc2NyZWVuLWVuYWJsZWQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnYm9vbGVhbiBEb2N1bWVudDp3ZWJraXQtZnVsbHNjcmVlbi1lbmFibGVk
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0ZVTExTQ1JFRU5fRUxFTUVOVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ3ZWJraXQtZnVsbHNjcmVlbi1l
bGVtZW50IiwKKyAgICAgICAgICAgICJEb2N1bWVudDp3ZWJraXQtZnVsbHNjcmVlbi1lbGVtZW50
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCogRG9jdW1lbnQ6d2Vi
a2l0LWZ1bGxzY3JlZW4tZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxF
TUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1BPSU5URVJfTE9DS19FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgInBvaW50ZXItbG9jay1lbGVtZW50IiwKKyAgICAgICAgICAgICJEb2N1
bWVudDpwb2ludGVyLWxvY2stZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTUVsZW1lbnQqIERvY3VtZW50OnBvaW50ZXItbG9jay1lbGVtZW50IiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVklTSUJJTElUWV9TVEFURSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2aXNpYmlsaXR5LXN0YXRlIiwKKyAgICAg
ICAgICAgICJEb2N1bWVudDp2aXNpYmlsaXR5LXN0YXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2NoYXIqIERvY3VtZW50OnZpc2liaWxpdHktc3RhdGUiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9I
SURERU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImhpZGRl
biIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6aGlkZGVuIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2Jvb2xlYW4gRG9jdW1lbnQ6aGlkZGVuIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1VSUkVO
VF9TQ1JJUFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY3Vy
cmVudC1zY3JpcHQiLAorICAgICAgICAgICAgIkRvY3VtZW50OmN1cnJlbnQtc2NyaXB0IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIERvY3VtZW50
OmN1cnJlbnQtc2NyaXB0IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NDUklQ
VF9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfT1JJR0lOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgIm9yaWdpbiIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6b3JpZ2luIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50Om9yaWdpbiIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1NDUk9MTElOR19FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAg
ICAgICAgInNjcm9sbGluZy1lbGVtZW50IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpzY3JvbGxp
bmctZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIERv
Y3VtZW50OnNjcm9sbGluZy1lbGVtZW50IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9F
TEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQ0hJTERSRU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAiY2hpbGRyZW4iLAorICAgICAgICAgICAgIkRvY3VtZW50OmNoaWxkcmVuIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIERvY3VtZW50OmNoaWxk
cmVuIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GSVJT
VF9FTEVNRU5UX0NISUxELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgImZpcnN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgIkRvY3VtZW50OmZpcnN0LWVs
ZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBE
b2N1bWVudDpmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfTEFTVF9FTEVNRU5UX0NISUxELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgImxhc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAgICAiRG9j
dW1lbnQ6bGFzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NRWxlbWVudCogRG9jdW1lbnQ6bGFzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hJTERfRUxFTUVOVF9DT1VOVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImNoaWxkLWVsZW1lbnQtY291bnQiLAorICAg
ICAgICAgICAgIkRvY3VtZW50OmNoaWxkLWVsZW1lbnQtY291bnQiLAorICAgICAgICAgICAgInJl
YWQtb25seSBndWxvbmcgRG9jdW1lbnQ6Y2hpbGQtZWxlbWVudC1jb3VudCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9pbml0KFdlYktpdERPTURv
Y3VtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2Vi
S2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChXZWJLaXRE
T01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHRhZ05hbWUsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbCh0YWdOYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGFnTmFtZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh0YWdOYW1lKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyhjb252ZXJ0ZWRUYWdOYW1lLCBl
YykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRl
X2RvY3VtZW50X2ZyYWdtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1l
bnRGcmFnbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01UZXh0KiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90ZXh0
X25vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChkYXRhLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWREYXRhID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KGRhdGEpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlVGV4dE5vZGUoY29udmVydGVkRGF0YSkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NQ29tbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY29tbWVudChXZWJLaXRET01E
b2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGRhdGEpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRhdGEs
IDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZERhdGEgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0
YSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNvbW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5jcmVhdGVDb21tZW50KGNvbnZlcnRlZERhdGEpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUNEQVRBU2VjdGlv
biogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY2RhdGFfc2VjdGlvbihXZWJLaXRET01Eb2N1
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChkYXRhLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRGF0YSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChkYXRhKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6Q0RBVEFTZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Y3JlYXRlQ0RBVEFTZWN0aW9uKGNvbnZlcnRlZERhdGEsIGVjKSk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9wcm9jZXNzaW5nX2luc3Ry
dWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdGFyZ2V0LCBjb25z
dCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHRhcmdldCwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGF0YSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFRhcmdl
dCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0YXJnZXQpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZERhdGEgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVj
dGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihjb252ZXJ0ZWRUYXJnZXQsIGNvbnZlcnRlZERhdGEsIGVjKSk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9N
QXR0ciogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0cmlidXRlKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKG5hbWUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KG5hbWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpBdHRyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlQXR0
cmlidXRlKGNvbnZlcnRlZE5hbWUsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlv
bihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHRhZ25hbWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHRhZ25hbWUsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFRhZ25hbWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodGFnbmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xs
ZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0RWxlbWVudHNCeVRh
Z05hbWUoY29udmVydGVkVGFnbmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9kb2N1bWVudF9p
bXBvcnRfbm9kZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2ViS2l0RE9NTm9kZSogaW1wb3J0
ZWROb2RlLCBnYm9vbGVhbiBkZWVwLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19OT0RFKGltcG9ydGVkTm9kZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRJbXBv
cnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUoaW1wb3J0ZWROb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmltcG9ydE5vZGUoKmNvbnZlcnRlZEltcG9ydGVkTm9kZSwg
ZGVlcCwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9l
bGVtZW50X25zKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNl
VVJJLCBjb25zdCBnY2hhciogcXVhbGlmaWVkTmFtZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHF1YWxpZmllZE5hbWUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRRdWFsaWZpZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHF1YWxpZmllZE5hbWUp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlRWxlbWVu
dE5TKGNvbnZlcnRlZE5hbWVzcGFjZVVSSSwgY29udmVydGVkUXVhbGlmaWVkTmFtZSwgZWMpKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitX
ZWJLaXRET01BdHRyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9hdHRyaWJ1dGVfbnMoV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdj
aGFyKiBxdWFsaWZpZWROYW1lLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocXVh
bGlmaWVkTmFtZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmll
ZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVBdHRyaWJ1dGVOUyhjb252ZXJ0ZWRO
YW1lc3BhY2VVUkksIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUsIGVjKSk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25z
X2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
bmFtZXNwYWNlVVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsb2NhbE5hbWUsIDAp
OworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZExvY2FsTmFtZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChsb2NhbE5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
Q29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldEVsZW1lbnRz
QnlUYWdOYW1lTlMoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0ZWRMb2NhbE5hbWUpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktp
dERPTU5vZGUqIHdlYmtpdF9kb21fZG9jdW1lbnRfYWRvcHRfbm9kZShXZWJLaXRET01Eb2N1bWVu
dCogc2VsZiwgV2ViS2l0RE9NTm9kZSogc291cmNlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNvdXJjZSksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRT
b3VyY2UgPSBXZWJLaXQ6OmNvcmUoc291cmNlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmFkb3B0Tm9kZSgqY29udmVydGVkU291cmNlLCBlYykpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUV2
ZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9ldmVudChXZWJLaXRET01Eb2N1bWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIGV2ZW50VHlwZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGV2ZW50VHlwZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEV2ZW50VHlwZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChldmVudFR5cGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFdmVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmNyZWF0ZUV2ZW50KGNvbnZlcnRlZEV2ZW50VHlwZSwgZWMpKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01SYW5n
ZSogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfcmFuZ2UoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0
ZVJhbmdlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKworV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9u
b2RlX2l0ZXJhdG9yKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01Ob2RlKiByb290
LCBndWxvbmcgd2hhdFRvU2hvdywgV2ViS2l0RE9NTm9kZUZpbHRlciogZmlsdGVyLCBnYm9vbGVh
biBleHBhbmRFbnRpdHlSZWZlcmVuY2VzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OT0RFKHJvb3QpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZmlsdGVyIHx8IFdFQktJVF9ET01fSVNfTk9ERV9GSUxURVIoZmlsdGVyKSwgMCk7CisgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSb290ID0gV2ViS2l0
Ojpjb3JlKHJvb3QpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlRmlsdGVyPiBjb252ZXJ0ZWRG
aWx0ZXIgPSBXZWJLaXQ6OmNvcmUoZmlsdGVyKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUl0
ZXJhdG9yPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlTm9kZUl0ZXJh
dG9yKCpjb252ZXJ0ZWRSb290LCB3aGF0VG9TaG93LCBXVEY6OmdldFB0cihjb252ZXJ0ZWRGaWx0
ZXIpLCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01UcmVlV2Fsa2VyKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV90cmVlX3dhbGtlcihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2Vi
S2l0RE9NTm9kZSogcm9vdCwgZ3Vsb25nIHdoYXRUb1Nob3csIFdlYktpdERPTU5vZGVGaWx0ZXIq
IGZpbHRlciwgZ2Jvb2xlYW4gZXhwYW5kRW50aXR5UmVmZXJlbmNlcywgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyb290KSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWZpbHRlciB8fCBXRUJLSVRfRE9NX0lTX05PREVfRklMVEVSKGZp
bHRlciksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVy
dGVkUm9vdCA9IFdlYktpdDo6Y29yZShyb290KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUZp
bHRlcj4gY29udmVydGVkRmlsdGVyID0gV2ViS2l0Ojpjb3JlKGZpbHRlcik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlRyZWVXYWxrZXI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5j
cmVhdGVUcmVlV2Fsa2VyKCpjb252ZXJ0ZWRSb290LCB3aGF0VG9TaG93LCBXVEY6OmdldFB0cihj
b252ZXJ0ZWRGaWx0ZXIpLCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01DU1NTdHlsZURl
Y2xhcmF0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9vdmVycmlkZV9zdHlsZShXZWJLaXRE
T01Eb2N1bWVudCogc2VsZiwgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCwgY29uc3QgZ2NoYXIq
IHBzZXVkb0VsZW1lbnQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2Vs
ZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChl
bGVtZW50KSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogY29udmVydGVkRWxlbWVudCA9IFdlYktpdDo6
Y29yZShlbGVtZW50KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQc2V1ZG9FbGVtZW50ID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHBzZXVkb0VsZW1lbnQpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpDU1NTdHlsZURlY2xhcmF0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Z2V0T3ZlcnJpZGVTdHlsZShjb252ZXJ0ZWRFbGVtZW50LCBjb252ZXJ0ZWRQc2V1ZG9FbGVtZW50
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitX
ZWJLaXRET01YUGF0aEV4cHJlc3Npb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2V4cHJl
c3Npb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBleHByZXNzaW9uLCBX
ZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoZXhwcmVzc2lvbiwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19YUEFUSF9OU19SRVNPTFZFUihyZXNvbHZlciksIDApOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRF
eHByZXNzaW9uID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGV4cHJlc3Npb24pOworICAgIFJlZlB0
cjxXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI+IGNvbnZlcnRlZFJlc29sdmVyID0gV2ViS2l0Ojpj
b3JlKHJlc29sdmVyKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+Y3JlYXRlRXhwcmVzc2lvbihjb252ZXJ0ZWRFeHByZXNzaW9uLCBXVEY6OmdldFB0
cihjb252ZXJ0ZWRSZXNvbHZlciksIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9uc19yZXNvbHZlcihXZWJLaXRET01Eb2N1bWVudCogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogbm9kZVJlc29sdmVyKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX05PREUobm9kZVJlc29sdmVyKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTm9k
ZVJlc29sdmVyID0gV2ViS2l0Ojpjb3JlKG5vZGVSZXNvbHZlcik7CisgICAgUmVmUHRyPFdlYkNv
cmU6OlhQYXRoTlNSZXNvbHZlcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNy
ZWF0ZU5TUmVzb2x2ZXIoY29udmVydGVkTm9kZVJlc29sdmVyKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01YUGF0aFJlc3VsdCog
d2Via2l0X2RvbV9kb2N1bWVudF9ldmFsdWF0ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIGV4cHJlc3Npb24sIFdlYktpdERPTU5vZGUqIGNvbnRleHROb2RlLCBXZWJLaXRE
T01YUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyLCBndXNob3J0IHR5cGUsIFdlYktpdERPTVhQYXRo
UmVzdWx0KiBpblJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGV4cHJl
c3Npb24sIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShj
b250ZXh0Tm9kZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFyZXNvbHZlciB8fCBX
RUJLSVRfRE9NX0lTX1hQQVRIX05TX1JFU09MVkVSKHJlc29sdmVyKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWluUmVzdWx0IHx8IFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxUKGlu
UmVzdWx0KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEV4cHJlc3Npb24gPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgoZXhwcmVzc2lvbik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkQ29udGV4dE5vZGUg
PSBXZWJLaXQ6OmNvcmUoY29udGV4dE5vZGUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpYUGF0aE5T
UmVzb2x2ZXI+IGNvbnZlcnRlZFJlc29sdmVyID0gV2ViS2l0Ojpjb3JlKHJlc29sdmVyKTsKKyAg
ICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogY29udmVydGVkSW5SZXN1bHQgPSBXZWJLaXQ6OmNvcmUo
aW5SZXN1bHQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0
cjxXZWJDb3JlOjpYUGF0aFJlc3VsdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmV2YWx1YXRlKGNvbnZlcnRlZEV4cHJlc3Npb24sIGNvbnZlcnRlZENvbnRleHROb2RlLCBXVEY6
OmdldFB0cihjb252ZXJ0ZWRSZXNvbHZlciksIHR5cGUsIGNvbnZlcnRlZEluUmVzdWx0LCBlYykp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwor
ICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfZXhlY19jb21tYW5kKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogY29tbWFuZCwgZ2Jvb2xlYW4gdXNlckludGVyZmFjZSwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29tbWFuZCwgRkFMU0Up
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHZhbHVlLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkQ29tbWFuZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+ZXhlY0NvbW1hbmQoY29udmVydGVkQ29tbWFuZCwg
dXNlckludGVyZmFjZSwgY29udmVydGVkVmFsdWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9lbmFibGVkKFdlYktp
dERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogY29tbWFuZCkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvbW1hbmQsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRDb21tYW5kID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PnF1ZXJ5Q29tbWFuZEVuYWJsZWQoY29udmVydGVkQ29tbWFuZCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX2luZGV0
ZXJtKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogY29tbWFuZCkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGNvbW1hbmQsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRDb21t
YW5kID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPnF1ZXJ5Q29tbWFuZEluZGV0ZXJtKGNvbnZlcnRlZENvbW1hbmQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29t
bWFuZF9zdGF0ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb21tYW5kLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkQ29tbWFuZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5xdWVyeUNvbW1hbmRTdGF0ZShjb252ZXJ0ZWRDb21tYW5kKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5
X2NvbW1hbmRfc3VwcG9ydGVkKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
Y29tbWFuZCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbW1hbmQsIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRDb21tYW5kID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChjb252ZXJ0ZWRD
b21tYW5kKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1
bWVudF9xdWVyeV9jb21tYW5kX3ZhbHVlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogY29tbWFuZCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29tbWFuZCwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkQ29tbWFuZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5xdWVyeUNvbW1hbmRWYWx1
ZShjb252ZXJ0ZWRDb21tYW5kKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9N
Tm9kZUxpc3QqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X25hbWUoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlbGVtZW50TmFtZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoZWxlbWVudE5hbWUsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEVsZW1lbnROYW1lID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGVsZW1lbnROYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRFbGVtZW50c0J5
TmFtZShjb252ZXJ0ZWRFbGVtZW50TmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1
bWVudF9lbGVtZW50X2Zyb21fcG9pbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGdsb25nIHgs
IGdsb25nIHkpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+ZWxlbWVudEZyb21Qb2ludCh4LCB5KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01SYW5nZSogd2Via2l0X2RvbV9kb2N1bWVu
dF9jYXJldF9yYW5nZV9mcm9tX3BvaW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBnbG9uZyB4
LCBnbG9uZyB5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5jYXJldFJhbmdlRnJvbVBvaW50KHgsIHkpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHdl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2Nzc19zdHlsZV9kZWNsYXJhdGlvbihXZWJLaXRET01E
b2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25h
bWVfYXNfaHRtbF9jb2xsZWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogY2xhc3NOYW1lcykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY2xhc3NOYW1lcywgMCk7CisgICAgV2Vi
Q29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkQ2xhc3NOYW1lcyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjbGFzc05hbWVz
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnZlcnRlZENsYXNzTmFt
ZXMpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfaGFzX2ZvY3VzKFdlYktpdERPTURvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzRm9jdXMoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfd2Via2l0X2NhbmNlbF9mdWxsX3NjcmVl
bihXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9kb2N1bWVudF93ZWJraXRfZXhpdF9mdWxsc2NyZWVuKFdlYktpdERPTURvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPndl
YmtpdEV4aXRGdWxsc2NyZWVuKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9leGl0
X3BvaW50ZXJfbG9jayhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoUE9J
TlRFUl9MT0NLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmV4
aXRQb2ludGVyTG9jaygpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiUG9pbnRlciBMb2NrIikKKyNlbmRpZiAvKiBF
TkFCTEUoUE9JTlRFUl9MT0NLKSAqLworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogZWxlbWVudElkKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChlbGVtZW50SWQsIDApOworICAg
IFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZEVsZW1lbnRJZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChlbGVtZW50
SWQpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+Z2V0RWxlbWVudEJ5SWQoY29udmVydGVkRWxlbWVudElkKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FbGVt
ZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X3NlbGVjdG9yKFdlYktpdERPTURvY3VtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZWN0b3JzLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5xdWVyeVNlbGVjdG9yKGNvbnZlcnRlZFNlbGVjdG9ycywgZWMpKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01Ob2RlTGlzdCogd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9zZWxlY3Rvcl9hbGwoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxlY3RvcnMsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5xdWVyeVNlbGVjdG9yQWxsKGNvbnZlcnRlZFNlbGVjdG9y
cywgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitXZWJLaXRET01Eb2N1bWVudFR5cGUqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Rv
Y3R5cGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudFR5cGU+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5kb2N0eXBlKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NSW1wbGVtZW50
YXRpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ltcGxlbWVudGF0aW9uKFdlYktpdERPTURv
Y3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb24+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2RvY3VtZW50X2VsZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZG9jdW1l
bnRFbGVtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2lucHV0X2VuY29kaW5nKFdl
YktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5j
aGFyYWN0ZXJTZXRXaXRoVVRGOEZhbGxiYWNrKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxfZW5jb2RpbmcoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnhtbEVuY29kaW5n
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF94bWxfdmVyc2lvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+eG1sVmVyc2lvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3htbF92ZXJzaW9uKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRYTUxWZXJzaW9uKGNvbnZl
cnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF94bWxfc3RhbmRhbG9uZShXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0
ZW0tPnhtbFN0YW5kYWxvbmUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21fZG9jdW1lbnRfc2V0X3htbF9zdGFuZGFsb25lKFdlYktpdERPTURvY3VtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJv
cik7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0WE1MU3RhbmRh
bG9uZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2RvY3VtZW50X3VyaShXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+ZG9jdW1lbnRVUkkoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kb2N1bWVudF91cmkoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0RG9jdW1lbnRVUkkoY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01ET01XaW5kb3cq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhXZWJLaXRET01Eb2N1bWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkRPTVdpbmRvdz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmRlZmF1bHRWaWV3KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworV2ViS2l0RE9NU3R5bGVTaGVldExpc3QqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X3N0eWxlX3NoZWV0cyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0eWxlU2hl
ZXRMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c3R5bGVTaGVldHMoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29udGVudF90eXBlKFdlYktpdERPTURvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jb250ZW50VHlwZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
dGl0bGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPnRpdGxlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9kb2N1bWVudF9zZXRfdGl0bGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VGl0bGUoY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGlyKFdlYktpdERPTURv
Y3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5kaXIoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kaXIo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0RGlyKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2Rlc2lnbl9tb2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5kZXNpZ25Nb2RlKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfZGVzaWduX21vZGUo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0RGVzaWduTW9kZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9yZWZlcnJlcihXZWJLaXRET01Eb2N1bWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cmVmZXJyZXIoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvbWFpbihX
ZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
ZG9tYWluKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF91cmwoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnVybEZvckJpbmRpbmdzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb29raWUoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y29va2llKGVjKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9jb29raWUoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAg
V2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldENvb2tpZShjb252
ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2JvZHkoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmJvZHlPckZyYW1lc2V0
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9ib2R5KFdlYktpdERPTURvY3VtZW50KiBzZWxm
LCBXZWJLaXRET01IVE1MRWxlbWVudCogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQodmFsdWUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogY29udmVydGVkVmFsdWUgPSBX
ZWJLaXQ6OmNvcmUodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPnNldEJvZHlPckZyYW1lc2V0KGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQor
CitXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQ+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5oZWFkKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ltYWdlcyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1h
Z2VzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2FwcGxl
dHMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmFwcGxldHMoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlv
biogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmxpbmtzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Zv
cm1zKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mb3JtcygpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9u
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hbmNob3JzKFdlYktpdERPTURvY3VtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5hbmNob3JzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2VtYmVkcyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZW1iZWRzKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3BsdWdpbnMoV2ViS2l0RE9NRG9jdW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnBsdWdpbnMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfc2NyaXB0cyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0
aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2NyaXB0cygpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9sYXN0X21vZGlmaWVkKFdlYktpdERPTURvY3VtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5sYXN0TW9kaWZpZWQoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoYXJz
ZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmNoYXJzZXQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2RvY3VtZW50X3NldF9jaGFyc2V0KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldENoYXJzZXQoY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcmVhZHlfc3RhdGUo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnJlYWR5U3RhdGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2NoYXJhY3Rlcl9zZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNoYXJhY3RlclNldFdpdGhVVEY4RmFsbGJh
Y2soKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3ByZWZlcnJlZF9zdHlsZXNoZWV0X3NldChXZWJLaXRET01Eb2N1bWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cHJlZmVycmVkU3R5bGVzaGVldFNldCgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnNlbGVjdGVkU3R5bGVzaGVldFNldCgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3NlbGVj
dGVkX3N0eWxlc2hlZXRfc2V0KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFNlbGVjdGVkU3R5bGVzaGVldFNl
dChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2FjdGl2ZV9lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
b2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmFjdGl2ZUVsZW1lbnQo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29tcGF0X21vZGUoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNvbXBhdE1vZGUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfd2Via2l0X2lzX2Z1bGxfc2NyZWVuKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+d2Via2l0SXNGdWxsU2NyZWVuKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxfc2NyZWVuX2tl
eWJvYXJkX2lucHV0X2FsbG93ZWQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpE
b2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT53ZWJraXRGdWxsU2NyZWVuS2V5Ym9hcmRJbnB1dEFsbG93ZWQoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF93ZWJraXRfY3VycmVudF9mdWxsX3NjcmVlbl9lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPndl
YmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X3dlYmtpdF9mdWxsc2NyZWVuX2VuYWJsZWQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dl
YmtpdF9mdWxsc2NyZWVuX2VsZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRv
Y3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpF
bGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2Via2l0RnVsbHNjcmVl
bkVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wb2ludGVy
X2xvY2tfZWxlbWVudChXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoUE9J
TlRFUl9MT0NLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PnBvaW50ZXJMb2NrRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJQb2ludGVyIExvY2siKQorICAgIHJldHVybiAwOwor
I2VuZGlmIC8qIEVOQUJMRShQT0lOVEVSX0xPQ0spICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF92aXNpYmlsaXR5X3N0YXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52aXNpYmlsaXR5U3RhdGUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGlk
ZGVuKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGlkZGVuKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2N1cnJlbnRfc2NyaXB0KFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5jdXJyZW50U2NyaXB0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X29yaWdp
bihXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+b3JpZ2luKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUVsZW1lbnQq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Njcm9sbGluZ19lbGVtZW50KFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPnNjcm9sbGluZ0VsZW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfY2hpbGRyZW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
Q29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNoaWxkcmVuKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGls
ZChXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5maXJzdEVsZW1lbnRDaGlsZCgpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01Eb2N1bWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5sYXN0RWxlbWVudENoaWxkKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoaWxkX2Vs
ZW1lbnRfY291bnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5jaGlsZEVs
ZW1lbnRDb3VudCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40MWY0OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudC5oCkBAIC0w
LDAgKzEsODQ0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmlu
ZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQor
I2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01Eb2N1bWVudF9oCisjZGVmaW5lIFdl
YktpdERPTURvY3VtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTU5vZGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RP
Q1VNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9ET0NVTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsIFdlYktpdERPTURvY3Vt
ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET0NVTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsIFdl
YktpdERPTURvY3VtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9DVU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0RPQ1VNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9D
VU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VNRU5UX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVCwg
V2ViS2l0RE9NRG9jdW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnQgewor
ICAgIFdlYktpdERPTU5vZGUgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01Eb2N1bWVudENsYXNzIHsKKyAgICBXZWJLaXRET01Ob2RlQ2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50OgorICogQHNl
bGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdGFnTmFtZTogQSAjZ2NoYXIKKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9N
RWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2NyZWF0ZV9lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdGFnTmFtZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2RvY3VtZW50X2ZyYWdtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3Vt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVu
dEZyYWdtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCoKK3dl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2RvY3VtZW50X2ZyYWdtZW50KFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90ZXh0X25v
ZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBkYXRhOiBBICNnY2hhcgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGV4dAorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTVRleHQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90ZXh0
X25vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jb21tZW50OgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKiBAZGF0YTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUNvbW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Db21tZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY29tbWVudChXZWJLaXRET01E
b2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGRhdGEpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9jdW1lbnRfY3JlYXRlX2NkYXRhX3NlY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyAqIEBkYXRhOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01DREFUQVNlY3Rpb24KKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01DREFUQVNlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9jZGF0YV9zZWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZGF0
YSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRl
X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQK
KyAqIEB0YXJnZXQ6IEEgI2djaGFyCisgKiBAZGF0YTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NUHJvY2Vz
c2luZ0luc3RydWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfcHJvY2Vzc2luZ19pbnN0cnVjdGlv
bihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHRhcmdldCwgY29uc3QgZ2No
YXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2NyZWF0ZV9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBu
YW1lOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01BdHRyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQXR0
cioKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0ZShXZWJLaXRET01Eb2N1bWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9hc19odG1sX2NvbGxl
Y3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB0YWduYW1lOiBBICNn
Y2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24KKyAqCisgKiBTaW5jZTogMi4xMgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhU
TUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25h
bWVfYXNfaHRtbF9jb2xsZWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdGFnbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9pbXBvcnRfbm9kZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGltcG9ydGVkTm9kZTogQSAjV2Vi
S2l0RE9NTm9kZQorICogQGRlZXA6IEEgI2dib29sZWFuCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9kb2N1bWVudF9pbXBvcnRfbm9kZShX
ZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2ViS2l0RE9NTm9kZSogaW1wb3J0ZWROb2RlLCBnYm9v
bGVhbiBkZWVwLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVu
dF9jcmVhdGVfZWxlbWVudF9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICog
QG5hbWVzcGFjZVVSSTogKGFsbG93LW5vbmUpOiBBICNnY2hhcgorICogQHF1YWxpZmllZE5hbWU6
IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVt
ZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudF9ucyhXZWJLaXRET01Eb2N1
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIHF1YWxp
ZmllZE5hbWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2NyZWF0ZV9hdHRyaWJ1dGVfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAq
IEBuYW1lc3BhY2VVUkk6IChhbGxvdy1ub25lKTogQSAjZ2NoYXIKKyAqIEBxdWFsaWZpZWROYW1l
OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IG5vbmUpOiBBICNXZWJLaXRET01BdHRyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQXR0cioK
K3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0ZV9ucyhXZWJLaXRET01Eb2N1bWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIHF1YWxpZmll
ZE5hbWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50c19ieV90YWdfbmFtZV9uc19hc19odG1sX2NvbGxlY3Rpb246CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBuYW1lc3BhY2VVUkk6IEEgI2djaGFyCisgKiBAbG9j
YWxOYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBTaW5jZTogMi4xMgorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVu
dHNfYnlfdGFnX25hbWVfbnNfYXNfaHRtbF9jb2xsZWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2Fkb3B0X25vZGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBzb3VyY2U6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9N
Tm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX2RvY3VtZW50
X2Fkb3B0X25vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktpdERPTU5vZGUqIHNvdXJj
ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRl
X2V2ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZXZlbnRUeXBlOiBB
ICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01FdmVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUV2ZW50Kgor
d2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiBldmVudFR5cGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9yYW5nZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1
bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NUmFuZ2UK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01SYW5nZSoKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3Jl
YXRlX3JhbmdlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9ub2RlX2l0ZXJhdG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTURv
Y3VtZW50CisgKiBAcm9vdDogQSAjV2ViS2l0RE9NTm9kZQorICogQHdoYXRUb1Nob3c6IEEgI2d1
bG9uZworICogQGZpbHRlcjogKGFsbG93LW5vbmUpOiBBICNXZWJLaXRET01Ob2RlRmlsdGVyCisg
KiBAZXhwYW5kRW50aXR5UmVmZXJlbmNlczogQSAjZ2Jvb2xlYW4KKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9kZUl0ZXJh
dG9yCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKgord2Via2l0X2RvbV9k
b2N1bWVudF9jcmVhdGVfbm9kZV9pdGVyYXRvcihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2Vi
S2l0RE9NTm9kZSogcm9vdCwgZ3Vsb25nIHdoYXRUb1Nob3csIFdlYktpdERPTU5vZGVGaWx0ZXIq
IGZpbHRlciwgZ2Jvb2xlYW4gZXhwYW5kRW50aXR5UmVmZXJlbmNlcywgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVfd2Fsa2VyOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAcm9vdDogQSAjV2ViS2l0RE9NTm9kZQor
ICogQHdoYXRUb1Nob3c6IEEgI2d1bG9uZworICogQGZpbHRlcjogKGFsbG93LW5vbmUpOiBBICNX
ZWJLaXRET01Ob2RlRmlsdGVyCisgKiBAZXhwYW5kRW50aXR5UmVmZXJlbmNlczogQSAjZ2Jvb2xl
YW4KKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRyZWVXYWxr
ZXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90cmVlX3dhbGtlcihXZWJLaXRET01Eb2N1
bWVudCogc2VsZiwgV2ViS2l0RE9NTm9kZSogcm9vdCwgZ3Vsb25nIHdoYXRUb1Nob3csIFdlYktp
dERPTU5vZGVGaWx0ZXIqIGZpbHRlciwgZ2Jvb2xlYW4gZXhwYW5kRW50aXR5UmVmZXJlbmNlcywg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X292ZXJy
aWRlX3N0eWxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZWxlbWVudDog
QSAjV2ViS2l0RE9NRWxlbWVudAorICogQHBzZXVkb0VsZW1lbnQ6IChhbGxvdy1ub25lKTogQSAj
Z2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUNTU1N0
eWxlRGVjbGFyYXRpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0
aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfb3ZlcnJpZGVfc3R5bGUoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IGdjaGFyKiBwc2V1
ZG9FbGVtZW50KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9leHByZXNz
aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZXhwcmVzc2lvbjogQSAj
Z2NoYXIKKyAqIEByZXNvbHZlcjogQSAjV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TVhQYXRoRXhwcmVzc2lvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVhQYXRoRXhwcmVzc2lv
bioKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2V4cHJlc3Npb24oV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBleHByZXNzaW9uLCBXZWJLaXRET01YUGF0aE5TUmVzb2x2
ZXIqIHJlc29sdmVyLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1
bWVudF9jcmVhdGVfbnNfcmVzb2x2ZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQK
KyAqIEBub2RlUmVzb2x2ZXI6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVhQYXRoTlNSZXNvbHZlcgorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTVhQYXRoTlNSZXNvbHZlcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25z
X3Jlc29sdmVyKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlUmVz
b2x2ZXIpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZXZhbHVhdGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBleHByZXNzaW9uOiBBICNnY2hhcgorICogQGNv
bnRleHROb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAcmVzb2x2ZXI6IChhbGxvdy1ub25lKTog
QSAjV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyCisgKiBAdHlwZTogQSAjZ3VzaG9ydAorICogQGlu
UmVzdWx0OiAoYWxsb3ctbm9uZSk6IEEgI1dlYktpdERPTVhQYXRoUmVzdWx0CisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVhQ
YXRoUmVzdWx0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NWFBhdGhSZXN1bHQqCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2V2YWx1YXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogZXhwcmVzc2lvbiwgV2ViS2l0RE9NTm9kZSogY29udGV4dE5vZGUsIFdlYktpdERPTVhQYXRo
TlNSZXNvbHZlciogcmVzb2x2ZXIsIGd1c2hvcnQgdHlwZSwgV2ViS2l0RE9NWFBhdGhSZXN1bHQq
IGluUmVzdWx0LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVu
dF9leGVjX2NvbW1hbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBjb21t
YW5kOiBBICNnY2hhcgorICogQHVzZXJJbnRlcmZhY2U6IEEgI2dib29sZWFuCisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9kb2N1bWVudF9leGVjX2NvbW1hbmQoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kLCBnYm9vbGVhbiB1c2VySW50ZXJmYWNlLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlf
Y29tbWFuZF9lbmFibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAY29t
bWFuZDogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfZW5hYmxlZChX
ZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9pbmRldGVybToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorICogQGNvbW1hbmQ6IEEgI2djaGFyCisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb2N1
bWVudF9xdWVyeV9jb21tYW5kX2luZGV0ZXJtKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogY29tbWFuZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9j
b21tYW5kX3N0YXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAY29tbWFu
ZDogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfc3RhdGUoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfc3VwcG9ydGVkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKiBAY29tbWFuZDogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50
X3F1ZXJ5X2NvbW1hbmRfc3VwcG9ydGVkKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogY29tbWFuZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21t
YW5kX3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAY29tbWFuZDog
QSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX3ZhbHVlKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogY29tbWFuZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZWxlbWVudHNfYnlfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1
bWVudAorICogQGVsZW1lbnROYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01O
b2RlTGlzdCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X25hbWUoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlbGVtZW50TmFtZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb2N1bWVudF9lbGVtZW50X2Zyb21fcG9pbnQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqIEB4OiBBICNnbG9uZworICogQHk6IEEgI2dsb25nCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZWxlbWVudF9mcm9t
X3BvaW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBnbG9uZyB4LCBnbG9uZyB5KTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jc3Nfc3R5bGVfZGVjbGFyYXRpb246Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVf
Y3NzX3N0eWxlX2RlY2xhcmF0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lX2FzX2h0bWxf
Y29sbGVjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGNsYXNzTmFt
ZXM6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNlOiAyLjEyCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19i
eV9jbGFzc19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIGNsYXNzTmFtZXMpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
aGFzX2ZvY3VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb2N1
bWVudF9oYXNfZm9jdXMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyAqIEBlbGVtZW50SWQ6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
RWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlbGVtZW50SWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfcXVlcnlfc2VsZWN0b3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyAqIEBzZWxlY3RvcnM6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9zZWxl
Y3RvcihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vy
cm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfc2VsZWN0
b3JfYWxsOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAc2VsZWN0b3JzOiBB
ICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVM
aXN0Kgord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9zZWxlY3Rvcl9hbGwoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N0eXBlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01Eb2N1bWVudFR5cGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudFR5cGUq
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N0eXBlKFdlYktpdERPTURvY3VtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbXBsZW1lbnRhdGlvbjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24KKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01ET01JbXBsZW1lbnRhdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ltcGxlbWVu
dGF0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9kb2N1bWVudF9lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3Vt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2RvY3VtZW50X2VsZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2lucHV0X2VuY29kaW5nOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2lucHV0X2VuY29kaW5nKFdlYktpdERP
TURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxf
ZW5jb2Rpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfeG1sX2VuY29kaW5nKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF94bWxfdmVyc2lvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
b2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxfdmVyc2lvbihXZWJLaXRET01Eb2N1bWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3ZlcnNpb246Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X3NldF94bWxfdmVyc2lvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfeG1sX3N0YW5kYWxvbmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF94bWxfc3RhbmRhbG9uZShXZWJLaXRET01Eb2N1bWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3N0YW5kYWxvbmU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X3NldF94bWxfc3RhbmRhbG9uZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9kb2N1bWVudF91cmk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfZG9jdW1lbnRfdXJpKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kb2N1bWVudF91cmk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfZG9jdW1lbnRfdXJpKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2RlZmF1bHRfdmlldzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NV2luZG93Cisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2luZG93Kgord2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZGVmYXVsdF92aWV3KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9zdHlsZV9zaGVldHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVN0
eWxlU2hlZXRMaXN0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3R5bGVTaGVldExpc3QqCit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zdHlsZV9zaGVldHMoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3RpdGxlKFdlYktpdERPTURv
Y3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF90aXRsZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF90aXRsZShXZWJL
aXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9kZXNpZ25fbW9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
b2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIuMTQKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Rlc2lnbl9tb2Rl
KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X3NldF9kZXNpZ25fbW9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9kb2N1bWVudF9zZXRfZGVzaWduX21vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfcmVmZXJyZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfcmVmZXJyZXIoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2RvbWFpbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9kb21haW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3VybDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF91cmwoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Nvb2tpZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2Nvb2tpZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2Nvb2tpZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01Eb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2Nvb2tpZShXZWJL
aXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NSFRNTEVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRWxlbWVudCoK
K3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2JvZHk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X3NldF9ib2R5KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01IVE1MRWxlbWVu
dCogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9oZWFkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9oZWFkKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9pbWFnZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9pbWFnZXMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2FwcGxldHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1l
bnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xs
ZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9hcHBsZXRzKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rczoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9N
SFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioK
K3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9mb3JtczoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVj
dGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Zvcm1zKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hbmNob3JzOgorICogQHNl
bGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhU
TUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYW5jaG9ycyhXZWJLaXRET01E
b2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZW1iZWRz
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNlOiAyLjE0
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9lbWJlZHMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X3BsdWdpbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxD
b2xsZWN0aW9uCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01I
VE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3BsdWdpbnMoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Njcmlw
dHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgorICogU2luY2U6IDIu
MTQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X3NjcmlwdHMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xhc3RfbW9kaWZpZWQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9tb2RpZmllZChXZWJLaXRET01E
b2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hhcnNl
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGFy
c2V0KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3NldF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9jdW1l
bnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcmVhZHlfc3RhdGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcmVhZHlfc3RhdGUo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2NoYXJhY3Rlcl9zZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfY2hhcmFjdGVyX3NldChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcHJlZmVycmVkX3N0eWxlc2hlZXRfc2V0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3ByZWZlcnJl
ZF9zdHlsZXNoZWV0X3NldChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2VsZWN0ZWRfc3R5bGVzaGVl
dF9zZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfc2V0X3NlbGVjdGVkX3N0eWxlc2hlZXRfc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3NlbGVjdGVkX3N0eWxlc2hlZXRfc2V0KFdlYktpdERP
TURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2FjdGl2ZV9lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURv
Y3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVt
ZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2FjdGl2ZV9lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb21wYXRfbW9kZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIu
MTQKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NvbXBh
dF9tb2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdlYktpdERPTURvY3VtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRBbmlt
YXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOGY0YzQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1l
bnRBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2Vu
ZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NRG9jdW1lbnRB
bmltYXRpb24uaCBhbmQKKyAgICBXZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5jcHAgYXJlIGNy
ZWF0ZWQgZm9yIERvY3VtZW50QW5pbWF0aW9uLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRo
ZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTURvY3VtZW50
QW5pbWF0aW9uLmggYW5kCisgICAgV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uY3BwIGF0IGV2
ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50QW5pbWF0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0YzQ4ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uaApAQCAtMCwwICsxLDYgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0
aGF0IFdlYktpdERPTURvY3VtZW50QW5pbWF0aW9uLmggYW5kCisgICAgV2ViS2l0RE9NRG9jdW1l
bnRBbmltYXRpb24uY3BwIGFyZSBjcmVhdGVkIGZvciBEb2N1bWVudEFuaW1hdGlvbi5pZGwsIGFu
ZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5l
cmF0ZSBXZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5oIGFuZAorICAgIFdlYktpdERPTURvY3Vt
ZW50QW5pbWF0aW9uLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRy
aWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYWVjNDNlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVu
dC5jcHAKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01E
b2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvblBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRG9j
dW1lbnRGcmFnbWVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURvY3Vt
ZW50RnJhZ21lbnQqIGtpdChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBvYmopCit7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fRE9DVU1FTlRfRlJBR01FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNv
cmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGNvcmUo
V2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50KiB3cmFwRG9jdW1lbnRGcmFnbWVudChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9ET0NVTUVOVF9GUkFHTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPQ1VN
RU5UX0ZSQUdNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1
bWVudF9mcmFnbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRp
c3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2ZyYWdtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRG
cmFnbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50RnJhZ21l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2
ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFk
ZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2ZyYWdtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCwgd2Via2l0X2RvbV9kb2N1
bWVudF9mcmFnbWVudCwgV0VCS0lUX0RPTV9UWVBFX05PREUsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0hJTERSRU4sCisgICAgUFJP
UF9GSVJTVF9FTEVNRU5UX0NISUxELAorICAgIFBST1BfTEFTVF9FTEVNRU5UX0NISUxELAorICAg
IFBST1BfQ0hJTERfRUxFTUVOVF9DT1VOVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZiA9IFdFQktJVF9ET01fRE9DVU1FTlRfRlJBR01FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DSElM
RFJFTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2ZyYWdtZW50X2dldF9jaGlsZHJlbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9GSVJTVF9FTEVNRU5UX0NISUxEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2ZpcnN0X2VsZW1lbnRfY2hp
bGQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFTVF9FTEVNRU5UX0NI
SUxEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1l
bnRfZnJhZ21lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9DSElMRF9FTEVNRU5UX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfY2hpbGRfZWxl
bWVudF9jb3VudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2RvY3VtZW50X2ZyYWdtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudENs
YXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfQ0hJTERSRU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAg
ICAgICAgICAiY2hpbGRyZW4iLAorICAgICAgICAgICAgIkRvY3VtZW50RnJhZ21lbnQ6Y2hpbGRy
ZW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9j
dW1lbnRGcmFnbWVudDpjaGlsZHJlbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRklSU1RfRUxFTUVOVF9DSElMRCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAg
ICJEb2N1bWVudEZyYWdtZW50OmZpcnN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01FbGVtZW50KiBEb2N1bWVudEZyYWdtZW50OmZpcnN0LWVsZW1lbnQt
Y2hpbGQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQVNUX0VMRU1F
TlRfQ0hJTEQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFz
dC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJEb2N1bWVudEZyYWdtZW50Omxhc3QtZWxl
bWVudC1jaGlsZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIERv
Y3VtZW50RnJhZ21lbnQ6bGFzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgIFdFQktJVF9E
T01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQ0hJTERfRUxFTUVOVF9DT1VOVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3Vsb25nKAorICAgICAgICAgICAgImNoaWxkLWVsZW1lbnQtY291bnQiLAorICAgICAgICAg
ICAgIkRvY3VtZW50RnJhZ21lbnQ6Y2hpbGQtZWxlbWVudC1jb3VudCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGd1bG9uZyBEb2N1bWVudEZyYWdtZW50OmNoaWxkLWVsZW1lbnQtY291bnQiLAor
ICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21l
bnRfaW5pdChXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNF
RF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1
bWVudF9mcmFnbWVudF9nZXRfZWxlbWVudF9ieV9pZChXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogZWxlbWVudElkKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPQ1VNRU5UX0ZSQUdNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChlbGVtZW50SWQsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRWxlbWVudElkID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGVsZW1lbnRJZCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVs
ZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRFbGVtZW50QnlJZChj
b252ZXJ0ZWRFbGVtZW50SWQpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJh
Z21lbnRfcXVlcnlfc2VsZWN0b3IoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9DVU1FTlRfRlJBR01FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGVjdG9ycywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5xdWVyeVNlbGVjdG9yKGNvbnZlcnRlZFNlbGVjdG9ycywgZWMpKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitX
ZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9xdWVyeV9zZWxl
Y3Rvcl9hbGwoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNl
bGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlRfRlJBR01FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGVj
dG9ycywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDAp
OworICAgIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHNlbGVjdG9ycyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+cXVlcnlTZWxlY3RvckFsbChjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9N
SFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2NoaWxkcmVu
KFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9DVU1FTlRfRlJBR01FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50
RnJhZ21lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2hpbGRy
ZW4oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9maXJz
dF9lbGVtZW50X2NoaWxkKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlRfRlJBR01FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5maXJzdEVsZW1lbnRDaGlsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRf
ZnJhZ21lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX0ZSQUdNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+bGFzdEVsZW1lbnRDaGlsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2ZyYWdtZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50KFdlYktpdERPTURvY3VtZW50RnJh
Z21lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlRfRlJBR01F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmNoaWxkRWxlbWVudENv
dW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVu
dEZyYWdtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iMmY3OGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVu
dEZyYWdtZW50LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1l
bnRGcmFnbWVudF9oCisjZGVmaW5lIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9kZS5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQgICAgICAgICAg
ICAod2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0RPQ1VNRU5UX0ZSQUdNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCwgV2Vi
S2l0RE9NRG9jdW1lbnRGcmFnbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfRlJB
R01FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5ULCBXZWJLaXRET01Eb2N1bWVudEZyYWdt
ZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9DVU1FTlRfRlJBR01FTlQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0RPQ1VNRU5UX0ZSQUdNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9GUkFH
TUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VN
RU5UX0ZSQUdNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCwgV2ViS2l0RE9NRG9jdW1l
bnRGcmFnbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50IHsK
KyAgICBXZWJLaXRET01Ob2RlIHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NRG9jdW1lbnRGcmFnbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01Ob2RlQ2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb2N1bWVudF9mcmFn
bWVudF9nZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERP
TURvY3VtZW50RnJhZ21lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODYyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURv
Y3VtZW50RnJhZ21lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01Eb2N1bWVudEZyYWdtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudCogd3JhcERvY3VtZW50RnJhZ21lbnQoV2ViQ29yZTo6RG9jdW1lbnRG
cmFnbWVudCopOworV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCoga2l0KFdlYkNvcmU6OkRvY3Vt
ZW50RnJhZ21lbnQqKTsKK1dlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGNvcmUoV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBX
ZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURv
Y3VtZW50RnJhZ21lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50VW5zdGFibGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTdjOTk4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDExNiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Eb2N1
bWVudEZyYWdtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50
VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfZWxlbWVudF9i
eV9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisgKiBAZWxlbWVu
dElkOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfZWxlbWVu
dF9ieV9pZChXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZWxl
bWVudElkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X3F1ZXJ5X3Nl
bGVjdG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQKKyAqIEBzZWxl
Y3RvcnM6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZnJhZ21lbnRfcXVlcnlfc2VsZWN0b3IoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfcXVlcnlfc2VsZWN0b3JfYWxsOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQKKyAqIEBzZWxlY3RvcnM6IEEgI2djaGFyCisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dl
YktpdERPTU5vZGVMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9xdWVy
eV9zZWxlY3Rvcl9hbGwoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZnJhZ21lbnRfZ2V0X2NoaWxkcmVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3Vt
ZW50RnJhZ21lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TUhUTUxDb2xsZWN0aW9uCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVu
dF9nZXRfY2hpbGRyZW4oV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2ZyYWdtZW50X2dldF9maXJzdF9lbGVtZW50X2NoaWxkKFdlYktpdERPTURvY3VtZW50
RnJhZ21lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRf
Z2V0X2xhc3RfZWxlbWVudF9jaGlsZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVt
ZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9sYXN0X2VsZW1lbnRf
Y2hpbGQoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfY2hpbGRfZWxlbWVudF9jb3VudDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25n
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Vi
a2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfY2hpbGRfZWxlbWVudF9jb3VudChXZWJLaXRE
T01Eb2N1bWVudEZyYWdtZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRG9jdW1l
bnRGcmFnbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURvY3VtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmNiOGJmODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50UHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9jdW1lbnRQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NRG9jdW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRE
T01Eb2N1bWVudCogd3JhcERvY3VtZW50KFdlYkNvcmU6OkRvY3VtZW50Kik7CitXZWJLaXRET01E
b2N1bWVudCoga2l0KFdlYkNvcmU6OkRvY3VtZW50Kik7CitXZWJDb3JlOjpEb2N1bWVudCogY29y
ZShXZWJLaXRET01Eb2N1bWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
KiBXZWJLaXRET01Eb2N1bWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVu
dFRpbWVsaW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhNTZkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9j
dW1lbnRUaW1lbGluZS5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3Vt
ZW50VGltZWxpbmUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTURvY3VtZW50VGltZWxpbmUqIGtpdChXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5l
KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdw
b2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdF
QktJVF9ET01fRE9DVU1FTlRfVElNRUxJTkUocmV0KTsKKworICAgIHJldHVybiB3cmFwRG9jdW1l
bnRUaW1lbGluZShvYmopOworfQorCitXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lKiBjb3JlKFdl
YktpdERPTURvY3VtZW50VGltZWxpbmUqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lKj4oV0VCS0lUX0RPTV9PQkpF
Q1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRG9jdW1lbnRUaW1l
bGluZSogd3JhcERvY3VtZW50VGltZWxpbmUoV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZSogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fRE9DVU1FTlRfVElNRUxJTkUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET0NVTUVO
VF9USU1FTElORSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9OUykK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lLCB3ZWJraXRfZG9tX2Rv
Y3VtZW50X3RpbWVsaW5lLCBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX1RJTUVMSU5FKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3RpbWVsaW5lX2NsYXNzX2luaXQoV2ViS2l0
RE9NRG9jdW1lbnRUaW1lbGluZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgVU5VU0VEX1BB
UkFNKHJlcXVlc3RDbGFzcyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRf
dGltZWxpbmVfaW5pdChXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKiByZXF1ZXN0KQoreworICAg
IFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRp
bWVsaW5lLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iZmU4NGNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRp
bWVsaW5lLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lX2gKKyNkZWZpbmUgV2ViS2l0RE9N
RG9jdW1lbnRUaW1lbGluZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUFuaW1hdGlvblRpbWVsaW5lLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9ET0NVTUVOVF9USU1FTElORSAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvY3VtZW50X3RpbWVs
aW5lX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfVElNRUxJTkUob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0RPQ1VNRU5UX1RJTUVMSU5FLCBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9ET0NVTUVOVF9USU1FTElORV9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVElN
RUxJTkUsIFdlYktpdERPTURvY3VtZW50VGltZWxpbmVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19ET0NVTUVOVF9USU1FTElORShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVElNRUxJTkUpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RJTUVMSU5FX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9USU1FTElO
RSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfVElNRUxJTkVfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VN
RU5UX1RJTUVMSU5FLCBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lQ2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTURvY3VtZW50VGltZWxpbmUgeworICAgIFdlYktpdERPTUFuaW1hdGlvblRpbWVs
aW5lIHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnRUaW1l
bGluZUNsYXNzIHsKKyAgICBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZUNsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfdGltZWxp
bmVfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5l
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RG9jdW1lbnRUaW1lbGluZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jOTE2NTdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lUHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZVByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01Eb2N1bWVudFRpbWVsaW5lUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50VGltZWxpbmUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRG9jdW1lbnRUaW1l
bGluZS5oPgorI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNlIFdlYktpdCB7
CitXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKiB3cmFwRG9jdW1lbnRUaW1lbGluZShXZWJDb3Jl
OjpEb2N1bWVudFRpbWVsaW5lKik7CitXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKiBraXQoV2Vi
Q29yZTo6RG9jdW1lbnRUaW1lbGluZSopOworV2ViQ29yZTo6RG9jdW1lbnRUaW1lbGluZSogY29y
ZShXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIEVOQUJMRShXRUJfQU5JTUFUSU9OUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERP
TURvY3VtZW50VGltZWxpbmVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRU
eXBlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mNDA5NmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGUu
Y3BwCkBAIC0wLDAgKzEsMjc3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRUeXBlLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVu
dFR5cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01OYW1lZE5v
ZGVNYXBQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50VHlwZVVuc3RhYmxlLmgiCisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTURvY3VtZW50VHlwZSoga2l0KFdlYkNvcmU6OkRvY3VtZW50VHlwZSog
b2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RZUEUoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkRvY3VtZW50VHlwZSog
Y29yZShXZWJLaXRET01Eb2N1bWVudFR5cGUqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVl
c3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudFR5cGUqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01Eb2N1bWVudFR5cGUq
IHdyYXBEb2N1bWVudFR5cGUoV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET0NVTUVOVF9U
WVBFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVFlQRSwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6
OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RG9jdW1lbnRUeXBlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwg
ZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRl
c2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkRvY3VtZW50
VHlwZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50VHlwZSo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6
OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnRUeXBlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnRUeXBl
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVu
dFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJr
aXRfZG9tX2RvY3VtZW50X3R5cGVfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9hZGRfZXZlbnRfbGlzdGVuZXI7
CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZG9jdW1lbnRf
dHlwZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdERPTURvY3VtZW50VHlwZSwgd2Via2l0X2RvbV9kb2N1bWVudF90eXBlLCBXRUJLSVRf
RE9NX1RZUEVfTk9ERSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVO
VF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfRU5USVRJRVMsCisgICAgUFJPUF9OT1RB
VElPTlMsCisgICAgUFJPUF9JTlRFUk5BTF9TVUJTRVQsCisgICAgUFJPUF9QVUJMSUNfSUQsCisg
ICAgUFJPUF9TWVNURU1fSUQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50
X3R5cGVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRG9jdW1lbnRU
eXBlKiBzZWxmID0gV0VCS0lUX0RPTV9ET0NVTUVOVF9UWVBFKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9uYW1lKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOVElUSUVTOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfZW50aXRp
ZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9UQVRJT05TOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9n
ZXRfbm90YXRpb25zKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOVEVS
TkFMX1NVQlNFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9kb2N1bWVudF90eXBlX2dldF9pbnRlcm5hbF9zdWJzZXQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUFVCTElDX0lEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3B1YmxpY19pZChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TWVNURU1fSUQ6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfc3lzdGVtX2lk
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRf
dHlwZV9jbGFzc19pbml0KFdlYktpdERPTURvY3VtZW50VHlwZUNsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9k
b2N1bWVudF90eXBlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAg
ICAgIkRvY3VtZW50VHlwZTpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERv
Y3VtZW50VHlwZTpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5USVRJRVMsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZW50aXRpZXMiLAorICAgICAgICAgICAg
IkRvY3VtZW50VHlwZTplbnRpdGllcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERP
TU5hbWVkTm9kZU1hcCogRG9jdW1lbnRUeXBlOmVudGl0aWVzIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PVEFUSU9OUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJub3RhdGlvbnMiLAorICAgICAgICAgICAgIkRvY3Vt
ZW50VHlwZTpub3RhdGlvbnMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01OYW1l
ZE5vZGVNYXAqIERvY3VtZW50VHlwZTpub3RhdGlvbnMiLAorICAgICAgICAgICAgV0VCS0lUX0RP
TV9UWVBFX05BTUVEX05PREVfTUFQLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSU5URVJOQUxfU1VCU0VULAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImludGVybmFsLXN1YnNldCIsCisgICAgICAgICAg
ICAiRG9jdW1lbnRUeXBlOmludGVybmFsLXN1YnNldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBEb2N1bWVudFR5cGU6aW50ZXJuYWwtc3Vic2V0IiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
UFVCTElDX0lELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInB1
YmxpYy1pZCIsCisgICAgICAgICAgICAiRG9jdW1lbnRUeXBlOnB1YmxpYy1pZCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudFR5cGU6cHVibGljLWlkIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfU1lTVEVNX0lELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgInN5c3RlbS1pZCIsCisgICAgICAgICAgICAiRG9jdW1lbnRUeXBlOnN5c3RlbS1pZCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudFR5cGU6c3lzdGVtLWlkIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2luaXQoV2ViS2l0RE9N
RG9jdW1lbnRUeXBlKiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfcmVtb3ZlKFdlYktpdERPTURvY3VtZW50
VHlwZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVF9UWVBFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudFR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+cmVtb3ZlKGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X25hbWUoV2Vi
S2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50VHlwZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5uYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5h
bWVkTm9kZU1hcCogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9lbnRpdGllcyhXZWJLaXRE
T01Eb2N1bWVudFR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1F
TlRfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOYW1lZE5vZGVNYXA+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5lbnRpdGllc0ZvckJpbmRpbmdzKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9N
TmFtZWROb2RlTWFwKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X25vdGF0aW9ucyhXZWJL
aXRET01Eb2N1bWVudFR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlRfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOYW1lZE5vZGVNYXA+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5ub3RhdGlvbnNGb3JCaW5kaW5ncygpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X2ludGVybmFsX3N1YnNldChXZWJLaXRET01E
b2N1bWVudFR5cGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlRf
VFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmludGVybmFsU3Vic2V0Rm9yQmluZGluZ3MoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfcHVibGljX2lkKFdlYktpdERP
TURvY3VtZW50VHlwZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVO
VF9UWVBFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudFR5cGUqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+cHVibGljSWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfc3lzdGVtX2lkKFdlYktpdERPTURvY3VtZW50VHlwZSog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9UWVBFKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudFR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3lzdGVtSWQo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5
cGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRG9jdW1lbnRUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODI3ZjIzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUeXBlLmgKQEAg
LTAsMCArMSwxMDggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQp
CisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50VHlwZV9oCisjZGVm
aW5lIFdlYktpdERPTURvY3VtZW50VHlwZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9ET0NVTUVOVF9UWVBFICAgICAgICAgICAgKHdlYmtpdF9kb21fZG9jdW1lbnRfdHlw
ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RZUEUob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0RPQ1VNRU5UX1RZUEUsIFdlYktpdERPTURvY3VtZW50VHlwZSkpCisjZGVmaW5lIFdFQktJVF9E
T01fRE9DVU1FTlRfVFlQRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVFlQRSwgV2ViS2l0RE9NRG9jdW1l
bnRUeXBlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9DVU1FTlRfVFlQRShvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
RE9DVU1FTlRfVFlQRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9DVU1FTlRfVFlQRV9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfRE9DVU1FTlRfVFlQRSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfVFlQRV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfRE9DVU1FTlRfVFlQRSwgV2ViS2l0RE9NRG9jdW1lbnRUeXBlQ2xhc3MpKQorCitzdHJ1
Y3QgX1dlYktpdERPTURvY3VtZW50VHlwZSB7CisgICAgV2ViS2l0RE9NTm9kZSBwYXJlbnRfaW5z
dGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURvY3VtZW50VHlwZUNsYXNzIHsKKyAgICBX
ZWJLaXRET01Ob2RlQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQor
d2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1
bWVudFR5cGUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9uYW1lKFdlYktpdERPTURvY3VtZW50VHlw
ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9lbnRpdGll
czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudFR5cGUKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTU5hbWVkTm9kZU1hcCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfZW50
aXRpZXMoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvY3VtZW50X3R5cGVfZ2V0X25vdGF0aW9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1
bWVudFR5cGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5h
bWVkTm9kZU1hcAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5hbWVkTm9kZU1hcCoKK3dlYmtp
dF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfbm90YXRpb25zKFdlYktpdERPTURvY3VtZW50VHlwZSog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9pbnRlcm5hbF9z
dWJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRUeXBlCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRf
dHlwZV9nZXRfaW50ZXJuYWxfc3Vic2V0KFdlYktpdERPTURvY3VtZW50VHlwZSogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9wdWJsaWNfaWQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRUeXBlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfcHVibGlj
X2lkKFdlYktpdERPTURvY3VtZW50VHlwZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b2N1bWVudF90eXBlX2dldF9zeXN0ZW1faWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1l
bnRUeXBlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfc3lzdGVtX2lkKFdlYktpdERPTURvY3VtZW50
VHlwZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01Eb2N1bWVu
dFR5cGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGVQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURvY3VtZW50VHlwZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zMTUyMjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGVQcml2YXRlLmgK
QEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01Eb2N1bWVudFR5cGVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9jdW1l
bnRUeXBlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50VHlwZS5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Eb2N1bWVudFR5cGUuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01Eb2N1bWVudFR5cGUqIHdyYXBEb2N1bWVudFR5cGUoV2ViQ29yZTo6
RG9jdW1lbnRUeXBlKik7CitXZWJLaXRET01Eb2N1bWVudFR5cGUqIGtpdChXZWJDb3JlOjpEb2N1
bWVudFR5cGUqKTsKK1dlYkNvcmU6OkRvY3VtZW50VHlwZSogY29yZShXZWJLaXRET01Eb2N1bWVu
dFR5cGUqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NRG9j
dW1lbnRUeXBlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VHlwZVVuc3Rh
YmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURvY3VtZW50VHlwZVVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNWNhNGMzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRU
eXBlVW5zdGFibGUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50VHlwZVVuc3RhYmxlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NRG9jdW1lbnRUeXBlVW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0
YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF90
eXBlX3JlbW92ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudFR5cGUKKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfcmVtb3ZlKFdlYktpdERPTURvY3VtZW50VHlw
ZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01Eb2N1bWVu
dFR5cGVVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VW5zdGFibGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjgzNTdkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50VW5zdGFibGUuaApA
QCAtMCwwICsxLDI3MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01Eb2N1bWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9jdW1lbnRV
bnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVD
TFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NhcmV0X3JhbmdlX2Zyb21fcG9pbnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB4OiBBICNnbG9uZworICogQHk6
IEEgI2dsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01S
YW5nZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01SYW5nZSoKK3dlYmtpdF9kb21fZG9jdW1lbnRfY2FyZXRfcmFuZ2VfZnJvbV9wb2ludChXZWJL
aXRET01Eb2N1bWVudCogc2VsZiwgZ2xvbmcgeCwgZ2xvbmcgeSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb2N1bWVudF93ZWJraXRfY2FuY2VsX2Z1bGxfc2NyZWVuOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfd2Via2l0X2NhbmNlbF9mdWxsX3NjcmVlbihX
ZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF93
ZWJraXRfZXhpdF9mdWxsc2NyZWVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fZG9jdW1lbnRfd2Via2l0X2V4aXRfZnVsbHNjcmVlbihXZWJLaXRET01Eb2N1bWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9leGl0X3BvaW50ZXJfbG9jazoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X2V4aXRfcG9pbnRlcl9s
b2NrKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9jb250ZW50X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NvbnRlbnRfdHlwZShX
ZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZGlyOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kaXIoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2RpcjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9k
aXIoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2lzX2Z1bGxfc2NyZWVuOgorICogQHNl
bGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9pc19mdWxsX3NjcmVlbihXZWJLaXRET01Eb2N1bWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxf
c2NyZWVuX2tleWJvYXJkX2lucHV0X2FsbG93ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
d2Via2l0X2Z1bGxfc2NyZWVuX2tleWJvYXJkX2lucHV0X2FsbG93ZWQoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9jdXJy
ZW50X2Z1bGxfc2NyZWVuX2VsZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVu
dCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9jdXJyZW50X2Z1bGxfc2NyZWVuX2Vs
ZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X3dlYmtpdF9mdWxsc2NyZWVuX2VuYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZW5hYmxlZChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZWxl
bWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZWxlbWVudChXZWJLaXRET01Eb2N1bWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcG9pbnRlcl9sb2NrX2VsZW1l
bnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3BvaW50ZXJfbG9ja19lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF92aXNpYmlsaXR5X3N0YXRlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF92aXNpYmlsaXR5X3N0YXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oaWRkZW46CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfaGlkZGVuKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jdXJyZW50X3NjcmlwdDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9jdXJyZW50X3NjcmlwdChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfb3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktpdERPTURv
Y3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9vcmln
aW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3Njcm9sbGluZ19lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1l
bnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3JvbGxpbmdfZWxlbWVudChXZWJLaXRET01E
b2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hpbGRy
ZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfY2hpbGRyZW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ZpcnN0X2VsZW1lbnRfY2hpbGQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2ZpcnN0X2VsZW1lbnRfY2hpbGQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9lbGVt
ZW50X2NoaWxkKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50OgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
Y2hpbGRfZWxlbWVudF9jb3VudChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlm
IC8qIFdlYktpdERPTURvY3VtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMmNlNWRjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5jcHAKQEAgLTAs
MCArMSwxNDA1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01BdHRyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1N0eWxlRGVj
bGFyYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxp
c3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01FbGVtZW50KiBraXQoV2ViQ29yZTo6RWxlbWVudCogb2JqKQoreworICAgIHJldHVy
biBXRUJLSVRfRE9NX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmop
KSk7Cit9CisKK1dlYkNvcmU6OkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01FbGVtZW50KiB3cmFwRWxlbWVudChXZWJDb3JlOjpFbGVtZW50KiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9FTEVNRU5U
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOwor
ICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3Bh
dGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1l
bnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUp
Cit7CisgICAgV2ViQ29yZTo6RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVu
dFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJr
aXRfZG9tX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUVsZW1lbnQs
IHdlYmtpdF9kb21fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX05PREUsIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVEFHX05BTUUsCisg
ICAgUFJPUF9BVFRSSUJVVEVTLAorICAgIFBST1BfU1RZTEUsCisgICAgUFJPUF9JRCwKKyAgICBQ
Uk9QX05BTUVTUEFDRV9VUkksCisgICAgUFJPUF9QUkVGSVgsCisgICAgUFJPUF9MT0NBTF9OQU1F
LAorICAgIFBST1BfT0ZGU0VUX0xFRlQsCisgICAgUFJPUF9PRkZTRVRfVE9QLAorICAgIFBST1Bf
T0ZGU0VUX1dJRFRILAorICAgIFBST1BfT0ZGU0VUX0hFSUdIVCwKKyAgICBQUk9QX0NMSUVOVF9M
RUZULAorICAgIFBST1BfQ0xJRU5UX1RPUCwKKyAgICBQUk9QX0NMSUVOVF9XSURUSCwKKyAgICBQ
Uk9QX0NMSUVOVF9IRUlHSFQsCisgICAgUFJPUF9TQ1JPTExfTEVGVCwKKyAgICBQUk9QX1NDUk9M
TF9UT1AsCisgICAgUFJPUF9TQ1JPTExfV0lEVEgsCisgICAgUFJPUF9TQ1JPTExfSEVJR0hULAor
ICAgIFBST1BfT0ZGU0VUX1BBUkVOVCwKKyAgICBQUk9QX0lOTkVSX0hUTUwsCisgICAgUFJPUF9P
VVRFUl9IVE1MLAorICAgIFBST1BfQ0xBU1NfTkFNRSwKKyAgICBQUk9QX0NMQVNTX0xJU1QsCisg
ICAgUFJPUF9XRUJLSVRfUkVHSU9OX09WRVJTRVQsCisgICAgUFJPUF9QUkVWSU9VU19FTEVNRU5U
X1NJQkxJTkcsCisgICAgUFJPUF9ORVhUX0VMRU1FTlRfU0lCTElORywKKyAgICBQUk9QX0NISUxE
UkVOLAorICAgIFBST1BfRklSU1RfRUxFTUVOVF9DSElMRCwKKyAgICBQUk9QX0xBU1RfRUxFTUVO
VF9DSElMRCwKKyAgICBQUk9QX0NISUxEX0VMRU1FTlRfQ09VTlQsCit9OworCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fRUxFTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0lEOgorICAgICAgICB3
ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lkKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX0xFRlQ6CisgICAgICAgIHdl
YmtpdF9kb21fZWxlbWVudF9zZXRfc2Nyb2xsX2xlZnQoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX1RPUDoKKyAgICAg
ICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9zY3JvbGxfdG9wKHNlbGYsIGdfdmFsdWVfZ2V0X2xv
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOTkVSX0hUTUw6Cisg
ICAgICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfaW5uZXJfaHRtbChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X09VVEVSX0hUTUw6CisgICAgICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbChz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NMQVNTX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21fZWxlbWVudF9z
ZXRfY2xhc3NfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVEFH
X05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZWxl
bWVudF9nZXRfdGFnX25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QVRUUklCVVRFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU1RZTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9lbGVtZW50X2dldF9zdHlsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9JRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9pZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FU1BB
Q0VfVVJJOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X25hbWVzcGFjZV91cmkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfUFJFRklYOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X3ByZWZpeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9MT0NBTF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X2xvY2FsX25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfT0ZGU0VUX0xFRlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1
ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfbGVmdChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9PRkZTRVRfVE9QOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3Vi
bGUodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3RvcChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PRkZTRVRfV0lEVEg6CisgICAgICAgIGdfdmFsdWVf
c2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfd2lkdGgoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT0ZGU0VUX0hFSUdIVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNl
dF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0xJRU5UX0xF
RlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50
X2dldF9jbGllbnRfbGVmdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
TElFTlRfVE9QOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfY2xpZW50X3RvcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DTElFTlRfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ0xJRU5UX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91Ymxl
KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9oZWlnaHQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX0xFRlQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2xlZnQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX1RPUDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfdG9wKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9XSURUSDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxf
d2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX0hFSUdI
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9zY3JvbGxfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09G
RlNFVF9QQVJFTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9lbGVtZW50X2dldF9vZmZzZXRfcGFyZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0lOTkVSX0hUTUw6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfaW5uZXJfaHRtbChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9PVVRFUl9IVE1MOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X291dGVyX2h0bWwoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0xBU1NfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGFzc19uYW1lKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NMQVNTX0xJU1Q6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGFzc19saXN0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9SRUdJT05fT1ZFUlNF
VDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50
X2dldF93ZWJraXRfcmVnaW9uX292ZXJzZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUFJFVklPVVNfRUxFTUVOVF9TSUJMSU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJldmlvdXNfZWxlbWVudF9zaWJs
aW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05FWFRfRUxFTUVOVF9T
SUJMSU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZWxl
bWVudF9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQ0hJTERSRU46CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZHJlbihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9GSVJTVF9FTEVNRU5UX0NISUxEOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQVNUX0VMRU1FTlRfQ0hJTEQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9sYXN0X2VsZW1lbnRfY2hpbGQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfQ0hJTERfRUxFTUVOVF9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUs
IHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRfZWxlbWVudF9jb3VudChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJL
aXRET01FbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAg
IGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UQUdfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJ0YWctbmFtZSIsCisgICAgICAgICAgICAiRWxlbWVudDp0
YWctbmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBFbGVtZW50OnRhZy1uYW1l
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQVRUUklCVVRFUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJhdHRyaWJ1dGVzIiwKKyAgICAgICAgICAgICJFbGVtZW50OmF0
dHJpYnV0ZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01OYW1lZE5vZGVNYXAq
IEVsZW1lbnQ6YXR0cmlidXRlcyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTkFNRURf
Tk9ERV9NQVAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9TVFlMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJzdHlsZSIsCisgICAgICAgICAgICAiRWxlbWVudDpzdHlsZSIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIEVsZW1lbnQ6c3R5bGUiLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9ERUNMQVJBVElPTiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lELAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImlkIiwKKyAgICAgICAg
ICAgICJFbGVtZW50OmlkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBFbGVtZW50
OmlkIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUVTUEFDRV9VUkksCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZXNwYWNlLXVyaSIsCisgICAgICAgICAgICAi
RWxlbWVudDpuYW1lc3BhY2UtdXJpIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEVs
ZW1lbnQ6bmFtZXNwYWNlLXVyaSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BSRUZJWCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwcmVmaXgiLAorICAgICAgICAgICAg
IkVsZW1lbnQ6cHJlZml4IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEVsZW1lbnQ6
cHJlZml4IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTE9DQUxfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJsb2NhbC1uYW1lIiwKKyAgICAgICAgICAgICJFbGVt
ZW50OmxvY2FsLW5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRWxlbWVudDps
b2NhbC1uYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT0ZGU0VUX0xFRlQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAib2Zmc2V0LWxlZnQiLAorICAgICAgICAgICAg
IkVsZW1lbnQ6b2Zmc2V0LWxlZnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEVs
ZW1lbnQ6b2Zmc2V0LWxlZnQiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJM
RSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX09GRlNFVF9UT1AsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAg
ICAgICAib2Zmc2V0LXRvcCIsCisgICAgICAgICAgICAiRWxlbWVudDpvZmZzZXQtdG9wIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBFbGVtZW50Om9mZnNldC10b3AiLAorICAgICAg
ICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09GRlNFVF9XSURUSCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJvZmZzZXQtd2lkdGgiLAorICAg
ICAgICAgICAgIkVsZW1lbnQ6b2Zmc2V0LXdpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2RvdWJsZSBFbGVtZW50Om9mZnNldC13aWR0aCIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUs
IEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfT0ZGU0VUX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Rv
dWJsZSgKKyAgICAgICAgICAgICJvZmZzZXQtaGVpZ2h0IiwKKyAgICAgICAgICAgICJFbGVtZW50
Om9mZnNldC1oZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEVsZW1lbnQ6
b2Zmc2V0LWhlaWdodCIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQ0xJRU5UX0xFRlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAg
ICAiY2xpZW50LWxlZnQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6Y2xpZW50LWxlZnQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEVsZW1lbnQ6Y2xpZW50LWxlZnQiLAorICAgICAg
ICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NMSUVOVF9UT1AsCisgICAgICAg
IGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAiY2xpZW50LXRvcCIsCisgICAgICAg
ICAgICAiRWxlbWVudDpjbGllbnQtdG9wIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJs
ZSBFbGVtZW50OmNsaWVudC10b3AiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERP
VUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NMSUVOVF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAg
ICAgICAgICAgICJjbGllbnQtd2lkdGgiLAorICAgICAgICAgICAgIkVsZW1lbnQ6Y2xpZW50LXdp
ZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBFbGVtZW50OmNsaWVudC13aWR0
aCIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0xJRU5UX0hF
SUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJjbGllbnQt
aGVpZ2h0IiwKKyAgICAgICAgICAgICJFbGVtZW50OmNsaWVudC1oZWlnaHQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnZG91YmxlIEVsZW1lbnQ6Y2xpZW50LWhlaWdodCIsCisgICAgICAgICAg
ICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NST0xMX0xFRlQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNjcm9sbC1sZWZ0IiwKKyAgICAgICAgICAg
ICJFbGVtZW50OnNjcm9sbC1sZWZ0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEVs
ZW1lbnQ6c2Nyb2xsLWxlZnQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfU0NST0xMX1RPUCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAi
c2Nyb2xsLXRvcCIsCisgICAgICAgICAgICAiRWxlbWVudDpzY3JvbGwtdG9wIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdsb25nIEVsZW1lbnQ6c2Nyb2xsLXRvcCIsCisgICAgICAgICAgICBH
X01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JPTExfV0lEVEgsCisgICAgICAgIGdfcGFyYW1f
c3BlY19sb25nKAorICAgICAgICAgICAgInNjcm9sbC13aWR0aCIsCisgICAgICAgICAgICAiRWxl
bWVudDpzY3JvbGwtd2lkdGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBFbGVtZW50
OnNjcm9sbC13aWR0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ND
Uk9MTF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNj
cm9sbC1oZWlnaHQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6c2Nyb2xsLWhlaWdodCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdsb25nIEVsZW1lbnQ6c2Nyb2xsLWhlaWdodCIsCisgICAgICAg
ICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09GRlNFVF9QQVJFTlQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAib2Zmc2V0LXBhcmVudCIsCisgICAgICAg
ICAgICAiRWxlbWVudDpvZmZzZXQtcGFyZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NRWxlbWVudCogRWxlbWVudDpvZmZzZXQtcGFyZW50IiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfSU5ORVJfSFRNTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJpbm5lci1odG1sIiwKKyAgICAgICAgICAgICJFbGVtZW50Omlu
bmVyLWh0bWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEVsZW1lbnQ6aW5uZXIt
aHRtbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PVVRFUl9IVE1MLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgIm91dGVyLWh0bWwiLAorICAgICAgICAgICAgIkVsZW1l
bnQ6b3V0ZXItaHRtbCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogRWxlbWVudDpv
dXRlci1odG1sIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NMQVNTX05BTUUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2xhc3MtbmFtZSIsCisgICAgICAgICAgICAi
RWxlbWVudDpjbGFzcy1uYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBFbGVt
ZW50OmNsYXNzLW5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0xBU1NfTElTVCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjbGFzcy1saXN0IiwKKyAgICAgICAg
ICAgICJFbGVtZW50OmNsYXNzLWxpc3QiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01ET01Ub2tlbkxpc3QqIEVsZW1lbnQ6Y2xhc3MtbGlzdCIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfUkVHSU9OX09WRVJTRVQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAid2Via2l0LXJlZ2lvbi1vdmVyc2V0
IiwKKyAgICAgICAgICAgICJFbGVtZW50OndlYmtpdC1yZWdpb24tb3ZlcnNldCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBFbGVtZW50OndlYmtpdC1yZWdpb24tb3ZlcnNldCIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1BSRVZJT1VTX0VMRU1FTlRfU0lCTElORywKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwcmV2aW91cy1lbGVtZW50LXNpYmxpbmciLAor
ICAgICAgICAgICAgIkVsZW1lbnQ6cHJldmlvdXMtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCogRWxlbWVudDpwcmV2aW91cy1lbGVtZW50
LXNpYmxpbmciLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ORVhUX0VM
RU1FTlRfU0lCTElORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAg
ICJuZXh0LWVsZW1lbnQtc2libGluZyIsCisgICAgICAgICAgICAiRWxlbWVudDpuZXh0LWVsZW1l
bnQtc2libGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIEVs
ZW1lbnQ6bmV4dC1lbGVtZW50LXNpYmxpbmciLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9DSElMRFJFTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJjaGlsZHJlbiIsCisgICAgICAgICAgICAiRWxlbWVudDpjaGlsZHJlbiIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBFbGVtZW50OmNoaWxk
cmVuIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GSVJT
VF9FTEVNRU5UX0NISUxELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgImZpcnN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6Zmlyc3QtZWxl
bWVudC1jaGlsZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIEVs
ZW1lbnQ6Zmlyc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
RUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0xBU1RfRUxFTUVOVF9DSElMRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJsYXN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgIkVsZW1l
bnQ6bGFzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
RWxlbWVudCogRWxlbWVudDpsYXN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DSElMRF9FTEVNRU5UX0NPVU5ULAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiY2hpbGQtZWxlbWVudC1jb3VudCIsCisgICAgICAg
ICAgICAiRWxlbWVudDpjaGlsZC1lbGVtZW50LWNvdW50IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ3Vsb25nIEVsZW1lbnQ6Y2hpbGQtZWxlbWVudC1jb3VudCIsCisgICAgICAgICAgICAwLCBH
X01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9lbGVtZW50X2luaXQoV2ViS2l0RE9NRWxlbWVudCog
cmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlKGNvbnZlcnRlZE5hbWUp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRf
YXR0cmlidXRlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lLCBjb25z
dCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChuYW1lKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
KTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZShjb252ZXJ0ZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwor
dm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZShXZWJLaXRET01FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZSk7CisgICAgV2ViQ29yZTo6RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIGl0ZW0tPnJlbW92ZUF0
dHJpYnV0ZShjb252ZXJ0ZWROYW1lKTsKK30KKworV2ViS2l0RE9NQXR0ciogd2Via2l0X2RvbV9l
bGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRBdHRyaWJ1dGVOb2Rl
KGNvbnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKK1dlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmli
dXRlX25vZGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgV2ViS2l0RE9NQXR0ciogbmV3QXR0ciwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSKG5ld0F0
dHIpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7
CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
ZWJDb3JlOjpBdHRyKiBjb252ZXJ0ZWROZXdBdHRyID0gV2ViS2l0Ojpjb3JlKG5ld0F0dHIpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpB
dHRyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2V0QXR0cmlidXRlTm9kZSgq
Y29udmVydGVkTmV3QXR0ciwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01BdHRyKiB3ZWJraXRfZG9tX2VsZW1lbnRf
cmVtb3ZlX2F0dHJpYnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUF0
dHIqIG9sZEF0dHIsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfQVRUUihvbGRBdHRyKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6QXR0ciogY29udmVydGVkT2xkQXR0ciA9IFdlYktpdDo6Y29y
ZShvbGRBdHRyKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlbW92
ZUF0dHJpYnV0ZU5vZGUoKmNvbnZlcnRlZE9sZEF0dHIsIGVjKSk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24qIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfYXNfaHRt
bF9jb2xsZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rp
b24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRFbGVtZW50c0J5VGFnTmFt
ZShjb252ZXJ0ZWROYW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZXMo
V2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVN
RU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVzKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRf
YXR0cmlidXRlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZXNwYWNl
VVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsb2NhbE5hbWUsIDApOworICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFj
ZVVSSSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KGxvY2FsTmFtZSk7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlTlMoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0
ZWRMb2NhbE5hbWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
ZWxlbWVudF9zZXRfYXR0cmlidXRlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBxdWFsaWZpZWROYW1lLCBjb25zdCBnY2hh
ciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChxdWFsaWZpZWROYW1lKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmllZE5h
bWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZU5TKGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSwgY29udmVydGVkUXVhbGlmaWVkTmFtZSwgY29udmVydGVkVmFs
dWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1
dGVfbnMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwg
Y29uc3QgZ2NoYXIqIGxvY2FsTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmFtZXNwYWNlVVJJKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKGxvY2FsTmFtZSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRMb2NhbE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobG9jYWxOYW1lKTsKKyAgICBp
dGVtLT5yZW1vdmVBdHRyaWJ1dGVOUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExv
Y2FsTmFtZSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zX2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRE
T01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciog
bG9jYWxOYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWVzcGFjZVVSSSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwobG9jYWxOYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFj
ZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZExvY2FsTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChsb2NhbE5hbWUp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29udmVydGVkTmFtZXNwYWNl
VVJJLCBjb252ZXJ0ZWRMb2NhbE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZWxlbWVudF9n
ZXRfYXR0cmlidXRlX25vZGVfbnMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChu
YW1lc3BhY2VVUkksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxvY2FsTmFtZSwgMCk7
CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
bmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRMb2NhbE5hbWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgobG9jYWxOYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldEF0dHJpYnV0ZU5vZGVOUyhjb252
ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQXR0ciogd2Via2l0
X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxm
LCBXZWJLaXRET01BdHRyKiBuZXdBdHRyLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0FUVFIobmV3QXR0ciksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE5ld0F0dHIg
PSBXZWJLaXQ6OmNvcmUobmV3QXR0cik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5zZXRBdHRyaWJ1dGVOb2RlTlMoKmNvbnZlcnRlZE5ld0F0dHIsIGVjKSk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV9lbGVtZW50X2hhc19hdHRyaWJ1dGUoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVO
VChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIEZBTFNFKTsK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlKGNvbnZlcnRlZE5hbWUpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZWxlbWVudF9oYXNf
YXR0cmlidXRlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWVz
cGFjZVVSSSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxvY2FsTmFtZSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGxvY2FsTmFtZSk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+aGFzQXR0cmlidXRlTlMoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0ZWRMb2Nh
bE5hbWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50
X2ZvY3VzKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPmZvY3VzKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50
X2JsdXIoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VM
RU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+Ymx1cigpOworfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9z
Y3JvbGxfaW50b192aWV3KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIGFsaWduV2l0
aFRvcCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2Nyb2xs
SW50b1ZpZXcoYWxpZ25XaXRoVG9wKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2Ny
b2xsX2ludG9fdmlld19pZl9uZWVkZWQoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
Y2VudGVySWZOZWVkZWQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNjcm9sbEludG9WaWV3SWZOZWVkZWQoY2VudGVySWZOZWVkZWQpOworfQorCit2b2lkIHdl
YmtpdF9kb21fZWxlbWVudF9zY3JvbGxfYnlfbGluZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwg
Z2xvbmcgbGluZXMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNjcm9sbEJ5TGluZXMobGluZXMpOworfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zY3Jv
bGxfYnlfcGFnZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgZ2xvbmcgcGFnZXMpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNjcm9sbEJ5UGFnZXMocGFnZXMp
OworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9lbGVtZW50X2dldF9l
bGVtZW50c19ieV9jbGFzc19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbihXZWJLaXRET01FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAg
ICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb252ZXJ0ZWROYW1lKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2VsZW1lbnRfbWF0Y2hlcyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZWN0
b3JzLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm1hdGNoZXMoY29udmVydGVkU2VsZWN0b3JzLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9k
b21fZWxlbWVudF9jbG9zZXN0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBz
ZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VM
RU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGVjdG9ycywgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jbG9zZXN0KGNvbnZl
cnRlZFNlbGVjdG9ycywgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1lbnRfd2Via2l0X21h
dGNoZXNfc2VsZWN0b3IoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVj
dG9ycywgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVO
VChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGVjdG9ycywgRkFM
U0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2Vs
ZWN0b3JzKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKGNvbnZlcnRlZFNlbGVjdG9ycywgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF93ZWJraXRfcmVx
dWVzdF9mdWxsX3NjcmVlbihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBndXNob3J0IGZsYWdzKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT53ZWJraXRSZXF1ZXN0
RnVsbFNjcmVlbihmbGFncyk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9y
ZXF1ZXN0X2Z1bGxzY3JlZW4oV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+d2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTsK
K30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2Vu
dF9lbGVtZW50KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB3aGVyZSwgV2Vi
S2l0RE9NRWxlbWVudCogZWxlbWVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
d2hlcmUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVO
VChlbGVtZW50KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkV2hlcmUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
d2hlcmUpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGNvbnZlcnRlZEVsZW1lbnQgPSBXZWJLaXQ6
OmNvcmUoZWxlbWVudCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5pbnNlcnRBZGphY2VudEVsZW1lbnQoY29udmVydGVkV2hlcmUsICpjb252ZXJ0ZWRFbGVtZW50
LCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF9odG1sKFdlYktp
dERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB3aGVyZSwgY29uc3QgZ2NoYXIqIGh0bWws
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh3aGVyZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChodG1s
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFdoZXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHdoZXJlKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRIdG1sID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGh0bWwpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmluc2VydEFkamFjZW50SFRN
TChjb252ZXJ0ZWRXaGVyZSwgY29udmVydGVkSHRtbCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJr
aXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X3RleHQoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHdoZXJlLCBjb25zdCBnY2hhciogdGV4dCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHdoZXJlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHRleHQpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkV2hlcmUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgod2hlcmUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFRl
eHQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+aW5zZXJ0QWRqYWNlbnRUZXh0KGNvbnZlcnRlZFdoZXJl
LCBjb252ZXJ0ZWRUZXh0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9y
ZXF1ZXN0X3BvaW50ZXJfbG9jayhXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJM
RShQT0lOVEVSX0xPQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnJlcXVlc3RQb2ludGVyTG9jaygpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiUG9pbnRlciBMb2NrIikKKyNlbmRp
ZiAvKiBFTkFCTEUoUE9JTlRFUl9MT0NLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVu
dF9yZW1vdmUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0t
PnJlbW92ZShlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgfQorfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2VsZW1l
bnRfcXVlcnlfc2VsZWN0b3IoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNl
bGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZWN0b3JzLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2Vi
Q29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRTZWxlY3RvcnMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnF1ZXJ5U2VsZWN0b3Io
Y29udmVydGVkU2VsZWN0b3JzLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX2Vs
ZW1lbnRfcXVlcnlfc2VsZWN0b3JfYWxsKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGVjdG9y
cywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkU2VsZWN0b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVj
dG9ycyk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cXVlcnlT
ZWxlY3RvckFsbChjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZWxl
bWVudF9nZXRfdGFnX25hbWUoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnRhZ05hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2Vi
S2l0RE9NTmFtZWROb2RlTWFwKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZXMoV2Vi
S2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOYW1lZE5vZGVNYXA+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5hdHRyaWJ1dGVzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiog
d2Via2l0X2RvbV9lbGVtZW50X2dldF9zdHlsZShXZWJLaXRET01FbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkNTU1N0eWxlRGVjbGFyYXRpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5j
c3NvbVN0eWxlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfaWQoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldElkQXR0cmlidXRlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3NldF9p
ZChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6aWRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X25hbWVzcGFjZV91cmkoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50X2dldF9wcmVmaXgoV2ViS2l0
RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnByZWZpeCgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9sb2NhbF9uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5sb2NhbE5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2RvdWJs
ZSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9sZWZ0KFdlYktpdERPTUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91Ymxl
IHJlc3VsdCA9IGl0ZW0tPm9mZnNldExlZnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
ZG91YmxlIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3RvcChXZWJLaXRET01FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Rv
dWJsZSByZXN1bHQgPSBpdGVtLT5vZmZzZXRUb3AoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnZG91YmxlIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3dpZHRoKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPm9mZnNldFdpZHRoKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9oZWlnaHQoV2Vi
S2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+b2Zmc2V0SGVpZ2h0KCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9s
ZWZ0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmNsaWVudExlZnQoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnZG91YmxlIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xp
ZW50X3RvcChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5jbGllbnRUb3AoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnZG91YmxlIHdlYmtpdF9kb21fZWxlbWVudF9nZXRf
Y2xpZW50X3dpZHRoKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmNsaWVudFdp
ZHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X2NsaWVudF9oZWlnaHQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+
Y2xpZW50SGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2Rv
bV9lbGVtZW50X2dldF9zY3JvbGxfbGVmdChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRl
bS0+c2Nyb2xsTGVmdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9lbGVtZW50X3NldF9zY3JvbGxfbGVmdChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBnbG9uZyB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U2Ny
b2xsTGVmdCh2YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xs
X3RvcChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2Nyb2xsVG9wKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF90
b3AoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNjcm9sbFRvcCh2YWx1ZSk7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX3dpZHRoKFdlYktpdERPTUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5zY3JvbGxXaWR0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dsb25nIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2hlaWdodChXZWJLaXRET01FbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfcGFy
ZW50KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmJpbmRpbmdzT2Zmc2V0UGFyZW50KCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfaW5uZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+aW5uZXJIVE1MKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3NldF9pbm5lcl9odG1sKFdlYktpdERPTUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRJbm5lckhUTUwoY29udmVydGVk
VmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X291dGVy
X2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPm91dGVySFRNTCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaXRlbS0+c2V0T3V0ZXJIVE1MKGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
fQorCitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGFzc19uYW1lKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2xhc3NBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2NsYXNzX25h
bWUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmNsYXNzQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01E
T01Ub2tlbkxpc3QqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xhc3NfbGlzdChXZWJLaXRET01F
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkRPTVRva2VuTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmNsYXNzTGlzdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3dlYmtpdF9y
ZWdpb25fb3ZlcnNldChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShDU1Nf
UkVHSU9OUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPndlYmtpdFJlZ2lvbk92ZXJzZXQo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNzcyBSZWdpb25zIikKKyAgICBy
ZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoQ1NTX1JFR0lPTlMpICovCit9CisKK1dlYktpdERP
TUVsZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJldmlvdXNfZWxlbWVudF9zaWJsaW5n
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5nKFdlYktpdERPTUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
Pm5leHRFbGVtZW50U2libGluZygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X2NoaWxkcmVuKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jaGlsZHJlbigpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERP
TUVsZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChXZWJL
aXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5maXJzdEVsZW1lbnRDaGlsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxkKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmxhc3RFbGVtZW50
Q2hpbGQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitndWxvbmcgd2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50KFdl
YktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+Y2hpbGRFbGVtZW50Q291bnQoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDkyZmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuaApAQCAtMCwwICsxLDY0MyBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0
ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0RE9NRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUVsZW1lbnRfaAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9k
ZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9FTEVNRU5UKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9FTEVNRU5ULCBXZWJLaXRET01FbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9F
TEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULCBXZWJLaXRET01FbGVtZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fRUxFTUVO
VF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfRE9NX1RZUEVfRUxFTUVOVCwgV2ViS2l0RE9NRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9X
ZWJLaXRET01FbGVtZW50IHsKKyAgICBXZWJLaXRET01Ob2RlIHBhcmVudF9pbnN0YW5jZTsKK307
CisKK3N0cnVjdCBfV2ViS2l0RE9NRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01Ob2RlQ2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9lbGVt
ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0
cmlidXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBuYW1lOiBBICNnY2hh
cgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1
dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5hbWU6IEEgI2djaGFyCisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZShX
ZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01FbGVtZW50CisgKiBAbmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTUF0dHIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01BdHRyKgor
d2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3Nl
dF9hdHRyaWJ1dGVfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmV3
QXR0cjogQSAjV2ViS2l0RE9NQXR0cgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01BdHRyCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NQXR0cioKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGUoV2ViS2l0
RE9NRWxlbWVudCogc2VsZiwgV2ViS2l0RE9NQXR0ciogbmV3QXR0ciwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25vZGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG9sZEF0dHI6IEEgI1dlYktpdERPTUF0
dHIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NQXR0cgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUF0dHIqCit3ZWJraXRf
ZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYs
IFdlYktpdERPTUF0dHIqIG9sZEF0dHIsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlv
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZTogQSAjZ2NoYXIKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9u
CisgKgorICogU2luY2U6IDIuMTIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVj
dGlvbioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfYXNfaHRt
bF9jb2xsZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZXM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZWxlbWVudF9oYXNfYXR0cmlidXRlcyhXZWJL
aXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0
dHJpYnV0ZV9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZXNwYWNl
VVJJOiBBICNnY2hhcgorICogQGxvY2FsTmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9lbGVtZW50X2dldF9h
dHRyaWJ1dGVfbnMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFj
ZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X3NldF9hdHRyaWJ1dGVfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICog
QG5hbWVzcGFjZVVSSTogKGFsbG93LW5vbmUpOiBBICNnY2hhcgorICogQHF1YWxpZmllZE5hbWU6
IEEgI2djaGFyCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMo
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3Qg
Z2NoYXIqIHF1YWxpZmllZE5hbWUsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25zOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBuYW1lc3BhY2VVUkk6IEEgI2djaGFyCisg
KiBAbG9jYWxOYW1lOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zX2FzX2h0
bWxfY29sbGVjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZXNw
YWNlVVJJOiBBICNnY2hhcgorICogQGxvY2FsTmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgorICogU2lu
Y2U6IDIuMTIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtp
dF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfbnNfYXNfaHRtbF9jb2xsZWN0
aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNv
bnN0IGdjaGFyKiBsb2NhbE5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRf
YXR0cmlidXRlX25vZGVfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5h
bWVzcGFjZVVSSTogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFyCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01BdHRyCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NQXR0cioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGVfbnMo
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3Qg
Z2NoYXIqIGxvY2FsTmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRy
aWJ1dGVfbm9kZV9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmV3QXR0
cjogQSAjV2ViS2l0RE9NQXR0cgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01BdHRyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NQXR0cioKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMoV2ViS2l0
RE9NRWxlbWVudCogc2VsZiwgV2ViS2l0RE9NQXR0ciogbmV3QXR0ciwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9oYXNfYXR0cmlidXRlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZWxlbWVu
dF9oYXNfYXR0cmlidXRlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1l
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZV9uczoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZXNwYWNlVVJJOiBBICNnY2hhcgorICog
QGxvY2FsTmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZV9ucyhX
ZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBn
Y2hhciogbG9jYWxOYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZm9jdXM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2VsZW1lbnRfZm9jdXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9lbGVtZW50X2JsdXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVu
dAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfYmx1cihXZWJL
aXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xs
X2ludG9fdmlldzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAYWxpZ25XaXRo
VG9wOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2Vs
ZW1lbnRfc2Nyb2xsX2ludG9fdmlldyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiBh
bGlnbldpdGhUb3ApOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9zY3JvbGxfaW50b192
aWV3X2lmX25lZWRlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAY2VudGVy
SWZOZWVkZWQ6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fZWxlbWVudF9zY3JvbGxfaW50b192aWV3X2lmX25lZWRlZChXZWJLaXRET01FbGVtZW50KiBz
ZWxmLCBnYm9vbGVhbiBjZW50ZXJJZk5lZWRlZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X3Njcm9sbF9ieV9saW5lczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBA
bGluZXM6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxl
bWVudF9zY3JvbGxfYnlfbGluZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgZ2xvbmcgbGluZXMp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9zY3JvbGxfYnlfcGFnZXM6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHBhZ2VzOiBBICNnbG9uZworICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2J5X3BhZ2VzKFdlYktpdERP
TUVsZW1lbnQqIHNlbGYsIGdsb25nIHBhZ2VzKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBT
aW5jZTogMi4xMgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lX2FzX2h0bWxfY29sbGVj
dGlvbihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9lbGVtZW50X3F1ZXJ5X3NlbGVjdG9yOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqIEBzZWxlY3RvcnM6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9lbGVtZW50X3F1ZXJ5
X3NlbGVjdG9yKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMs
IEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfcXVlcnlfc2Vs
ZWN0b3JfYWxsOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBzZWxlY3RvcnM6
IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTU5vZGVMaXN0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9k
ZUxpc3QqCit3ZWJraXRfZG9tX2VsZW1lbnRfcXVlcnlfc2VsZWN0b3JfYWxsKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShXZWJLaXRET01FbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZXM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NTmFtZWROb2RlTWFwCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
TmFtZWROb2RlTWFwKgord2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVzKFdlYktpdERP
TUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfc3R5bGU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3N0
eWxlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVu
dF9nZXRfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X2lkKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVu
dF9zZXRfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lk
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9lbGVtZW50X2dldF9uYW1lc3BhY2VfdXJpOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFNpbmNlOiAyLjE0
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X25hbWVzcGFj
ZV91cmkoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9wcmVmaXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJlZml4KFdlYktpdERPTUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfbG9jYWxfbmFtZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
aW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9lbGVtZW50X2dl
dF9sb2NhbF9uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZWxlbWVudF9nZXRfb2Zmc2V0X2xlZnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9sZWZ0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3RvcDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorKiovCitX
RUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3RvcChXZWJL
aXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29m
ZnNldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2RvdWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fZWxlbWVu
dF9nZXRfb2Zmc2V0X3dpZHRoKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorKiovCitXRUJLSVRfQVBJIGdk
b3VibGUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2hlaWdodChXZWJLaXRET01FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGll
bnRfbGVmdChXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X2NsaWVudF90b3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF90b3AoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfd2lkdGg6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyoqLworV0VCS0lU
X0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF93aWR0aChXZWJLaXRE
T01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVu
dF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dkb3VibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2VsZW1lbnRf
Z2V0X2NsaWVudF9oZWlnaHQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfbGVmdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZwor
d2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfbGVmdChXZWJLaXRET01FbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF9sZWZ0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3NldF9zY3JvbGxfbGVmdChXZWJLaXRE
T01FbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9zY3JvbGxfdG9wOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X3Njcm9sbF90b3AoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9lbGVtZW50X3NldF9zY3JvbGxfdG9wOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9lbGVtZW50X3NldF9zY3JvbGxfdG9wKFdlYktpdERPTUVsZW1lbnQqIHNlbGYs
IGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF93
aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3Jv
bGxfd2lkdGgoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9l
bGVtZW50X2dldF9zY3JvbGxfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9oZWlnaHQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfcGFyZW50OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfcGFyZW50KFdlYktpdERPTUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfaW5uZXJfaHRtbDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
aW5jZTogMi44CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X2lubmVyX2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9lbGVtZW50X3NldF9pbm5lcl9odG1sOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFNpbmNlOiAy
LjgKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lubmVyX2h0
bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBl
cnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9vdXRlcl9odG1sOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFNpbmNlOiAyLjgKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZWxlbWVu
dF9nZXRfb3V0ZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfc2V0X291dGVyX2h0bWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU2lu
Y2U6IDIuOAorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0
ZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsYXNzX25hbWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsYXNzX25h
bWUoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50
X3NldF9jbGFzc19uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50
X3NldF9jbGFzc19uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9wcmV2aW91c19lbGVtZW50X3Np
Ymxpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3ByZXZpb3VzX2VsZW1lbnRfc2li
bGluZyhXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9lbGVtZW50X2dl
dF9uZXh0X2VsZW1lbnRfc2libGluZyhXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NoaWxkcmVuOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhU
TUxDb2xsZWN0aW9uCisgKgorICogU2luY2U6IDIuMTAKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRyZW4oV2ViS2l0
RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9maXJz
dF9lbGVtZW50X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9lbGVtZW50X2dldF9maXJzdF9lbGVt
ZW50X2NoaWxkKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1l
bnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9lbGVtZW50
X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VC
S0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRfZWxlbWVudF9jb3Vu
dChXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdl
YktpdERPTUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01FbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAwNDczMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnRQcml2YXRlLmgKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01FbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUVsZW1lbnRQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01FbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRWxlbWVudCog
d3JhcEVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCopOworV2ViS2l0RE9NRWxlbWVudCoga2l0KFdl
YkNvcmU6OkVsZW1lbnQqKTsKK1dlYkNvcmU6OkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NRWxlbWVu
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01FbGVtZW50
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01F
bGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTEx
MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsx
LDE3NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01FbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01FbGVtZW50VW5zdGFibGVfaAor
CisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgor
ICogV0VCS0lUX0RPTV9FTEVNRU5UX0FMTE9XX0tFWUJPQVJEX0lOUFVUOgorICovCisjZGVmaW5l
IFdFQktJVF9ET01fRUxFTUVOVF9BTExPV19LRVlCT0FSRF9JTlBVVCAxCisKKy8qKgorICogd2Vi
a2l0X2RvbV9lbGVtZW50X21hdGNoZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAor
ICogQHNlbGVjdG9yczogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2VsZW1lbnRfbWF0Y2hlcyhXZWJLaXRET01FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9lbGVtZW50X2Nsb3Nlc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxl
bWVudAorICogQHNlbGVjdG9yczogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Vi
a2l0X2RvbV9lbGVtZW50X2Nsb3Nlc3QoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxl
bWVudF93ZWJraXRfbWF0Y2hlc19zZWxlY3RvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVt
ZW50CisgKiBAc2VsZWN0b3JzOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZWxlbWVudF93ZWJraXRfbWF0Y2hlc19zZWxl
Y3RvcihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9yZXF1ZXN0
X2Z1bGxfc2NyZWVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBmbGFnczog
QSAjZ3VzaG9ydAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbF9zY3JlZW4oV2ViS2l0
RE9NRWxlbWVudCogc2VsZiwgZ3VzaG9ydCBmbGFncyk7CisKKy8qKgorICogd2Via2l0X2RvbV9l
bGVtZW50X3dlYmtpdF9yZXF1ZXN0X2Z1bGxzY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2VsZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbHNjcmVlbihXZWJLaXRET01F
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFj
ZW50X2VsZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHdoZXJlOiBB
ICNnY2hhcgorICogQGVsZW1lbnQ6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVu
dAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01F
bGVtZW50Kgord2Via2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF9lbGVtZW50KFdlYktp
dERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB3aGVyZSwgV2ViS2l0RE9NRWxlbWVudCog
ZWxlbWVudCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9p
bnNlcnRfYWRqYWNlbnRfaHRtbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBA
d2hlcmU6IEEgI2djaGFyCisgKiBAaHRtbDogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHdoZXJlLCBjb25zdCBnY2hhciogaHRtbCwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfdGV4dDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAd2hlcmU6IEEgI2djaGFyCisgKiBAdGV4dDog
QSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50
X3RleHQoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHdoZXJlLCBjb25zdCBn
Y2hhciogdGV4dCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVu
dF9yZXF1ZXN0X3BvaW50ZXJfbG9jazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fZWxlbWVudF9yZXF1ZXN0X3BvaW50ZXJfbG9jayhXZWJLaXRET01FbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfcmVtb3ZlKFdlYktp
dERPTUVsZW1lbnQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2NsYXNzX2xpc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURP
TVRva2VuTGlzdCoKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xhc3NfbGlzdChXZWJLaXRET01F
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3dlYmtpdF9y
ZWdpb25fb3ZlcnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3dlYmtpdF9yZWdpb25fb3ZlcnNldChX
ZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRWxlbWVudFVu
c3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0NmJlZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRXZlbnQuY3BwCkBAIC0wLDAgKzEsNDkwIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFRhcmdldFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgi
CisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfR0VUX1BSSVZBVEUob2JqKSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRVZFTlQsIFdlYktp
dERPTUV2ZW50UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50UHJpdmF0
ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkV2ZW50PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01F
dmVudFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01FdmVudCoga2l0
KFdlYkNvcmU6OkV2ZW50KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fRVZFTlQocmV0KTsKKworICAgIHJldHVybiB3cmFwKG9i
aik7Cit9CisKK1dlYkNvcmU6OkV2ZW50KiBjb3JlKFdlYktpdERPTUV2ZW50KiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnQqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01F
dmVudCogd3JhcEV2ZW50KFdlYkNvcmU6OkV2ZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9FVkVOVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0VWRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRy
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERP
TUV2ZW50LCB3ZWJraXRfZG9tX2V2ZW50LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfVEFSR0VULAorICAgIFBS
T1BfQ1VSUkVOVF9UQVJHRVQsCisgICAgUFJPUF9FVkVOVF9QSEFTRSwKKyAgICBQUk9QX0JVQkJM
RVMsCisgICAgUFJPUF9DQU5DRUxBQkxFLAorICAgIFBST1BfQ09NUE9TRUQsCisgICAgUFJPUF9U
SU1FX1NUQU1QLAorICAgIFBST1BfREVGQVVMVF9QUkVWRU5URUQsCisgICAgUFJPUF9JU19UUlVT
VEVELAorICAgIFBST1BfU1JDX0VMRU1FTlQsCisgICAgUFJPUF9SRVRVUk5fVkFMVUUsCisgICAg
UFJPUF9DQU5DRUxfQlVCQkxFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRXZlbnRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9FVkVOVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAg
cHJpdi0+fldlYktpdERPTUV2ZW50UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fZXZlbnRfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9ldmVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01FdmVudCogc2VsZiA9IFdFQktJVF9ET01fRVZFTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9SRVRVUk5fVkFMVUU6Cisg
ICAgICAgIHdlYmtpdF9kb21fZXZlbnRfc2V0X3JldHVybl92YWx1ZShzZWxmLCBnX3ZhbHVlX2dl
dF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DQU5DRUxf
QlVCQkxFOgorICAgICAgICB3ZWJraXRfZG9tX2V2ZW50X3NldF9jYW5jZWxfYnViYmxlKHNlbGYs
IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZXZlbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NRXZlbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0VWRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfdHlwZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ldmVudF9nZXRfdGFyZ2V0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfVEFSR0VUOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2N1cnJlbnRfdGFyZ2V0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VWRU5UX1BIQVNFOgorICAgICAg
ICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFz
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CVUJCTEVTOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dldF9idWJibGVz
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NBTkNFTEFCTEU6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2NhbmNl
bGFibGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09NUE9TRUQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2Nv
bXBvc2VkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RJTUVfU1RBTVA6
CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3Rp
bWVfc3RhbXAoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9Q
UkVWRU5URUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
ZXZlbnRfZ2V0X2RlZmF1bHRfcHJldmVudGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0lTX1RSVVNURUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUs
IHdlYmtpdF9kb21fZXZlbnRfZ2V0X2lzX3RydXN0ZWQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU1JDX0VMRU1FTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9ldmVudF9nZXRfc3JjX2VsZW1lbnQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfUkVUVVJOX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dldF9yZXR1cm5fdmFsdWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FOQ0VMX0JVQkJMRToKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9ldmVudF9nZXRfY2FuY2VsX2J1YmJs
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9ldmVu
dF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2Jq
ZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2V2ZW50X3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01FdmVudFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX0VWRU5UX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NRXZlbnRDbGFzcyogcmVxdWVz
dENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENs
YXNzLCBzaXplb2YoV2ViS2l0RE9NRXZlbnRQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5j
b25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZXZlbnRfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZXZlbnRfZmluYWxpemU7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2V2ZW50X3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZXZlbnRfZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiRXZlbnQ6dHlwZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBFdmVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEFS
R0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInRhcmdldCIs
CisgICAgICAgICAgICAiRXZlbnQ6dGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIEV2ZW50OnRhcmdldCIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQ1VSUkVOVF9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiY3VycmVudC10YXJnZXQiLAorICAgICAgICAgICAgIkV2
ZW50OmN1cnJlbnQtdGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIEV2ZW50OmN1cnJlbnQtdGFyZ2V0IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9FVkVOVF9QSEFTRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vp
bnQoCisgICAgICAgICAgICAiZXZlbnQtcGhhc2UiLAorICAgICAgICAgICAgIkV2ZW50OmV2ZW50
LXBoYXNlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VzaG9ydCBFdmVudDpldmVudC1waGFz
ZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CVUJCTEVTLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJidWJibGVzIiwKKyAgICAgICAgICAgICJF
dmVudDpidWJibGVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gRXZlbnQ6YnVi
YmxlcyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NBTkNFTEFCTEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNhbmNlbGFibGUiLAorICAgICAgICAgICAgIkV2
ZW50OmNhbmNlbGFibGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBFdmVudDpj
YW5jZWxhYmxlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09NUE9TRUQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNvbXBvc2VkIiwKKyAgICAgICAgICAgICJF
dmVudDpjb21wb3NlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEV2ZW50OmNv
bXBvc2VkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVElNRV9TVEFNUCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQoCisgICAgICAgICAgICAidGltZS1zdGFtcCIsCisgICAgICAgICAgICAiRXZl
bnQ6dGltZS1zdGFtcCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50MzIgRXZlbnQ6dGlt
ZS1zdGFtcCIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX1BSRVZFTlRF
RCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGVmYXVsdC1w
cmV2ZW50ZWQiLAorICAgICAgICAgICAgIkV2ZW50OmRlZmF1bHQtcHJldmVudGVkIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gRXZlbnQ6ZGVmYXVsdC1wcmV2ZW50ZWQiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9JU19UUlVTVEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJpcy10cnVzdGVkIiwKKyAgICAgICAgICAgICJFdmVudDppcy10cnVz
dGVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gRXZlbnQ6aXMtdHJ1c3RlZCIs
CisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1NSQ19FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgInNyYy1lbGVtZW50IiwKKyAgICAgICAgICAgICJFdmVudDpz
cmMtZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUV2ZW50VGFyZ2V0
KiBFdmVudDpzcmMtZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRVZFTlRf
VEFSR0VULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfUkVUVVJOX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJyZXR1cm4tdmFsdWUiLAorICAgICAgICAgICAgIkV2ZW50OnJldHVybi12YWx1
ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBFdmVudDpyZXR1cm4tdmFsdWUi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0FOQ0VMX0JVQkJMRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY2FuY2VsLWJ1YmJsZSIsCisgICAgICAgICAgICAi
RXZlbnQ6Y2FuY2VsLWJ1YmJsZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBF
dmVudDpjYW5jZWwtYnViYmxlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZl
bnRfaW5pdChXZWJLaXRET01FdmVudCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01FdmVudFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0VWRU5UX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAg
IG5ldyAocHJpdikgV2ViS2l0RE9NRXZlbnRQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9ldmVudF9zdG9wX3Byb3BhZ2F0aW9uKFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnN0b3BQcm9wYWdhdGlvbigpOworfQorCit2
b2lkIHdlYmtpdF9kb21fZXZlbnRfcHJldmVudF9kZWZhdWx0KFdlYktpdERPTUV2ZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkV2
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnByZXZlbnREZWZhdWx0
KCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9ldmVudF9pbml0X2V2ZW50KFdlYktpdERPTUV2ZW50
KiBzZWxmLCBjb25zdCBnY2hhciogZXZlbnRUeXBlQXJnLCBnYm9vbGVhbiBjYW5CdWJibGVBcmcs
IGdib29sZWFuIGNhbmNlbGFibGVBcmcpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChldmVudFR5cGVBcmcpOworICAgIFdlYkNvcmU6
OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZEV2ZW50VHlwZUFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChldmVudFR5cGVBcmcpOwor
ICAgIGl0ZW0tPmluaXRFdmVudChjb252ZXJ0ZWRFdmVudFR5cGVBcmcsIGNhbkJ1YmJsZUFyZywg
Y2FuY2VsYWJsZUFyZyk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9ldmVudF9zdG9wX2ltbWVkaWF0
ZV9wcm9wYWdhdGlvbihXZWJLaXRET01FdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VWRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2V2ZW50X3R5cGUoV2ViS2l0RE9NRXZlbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3RhcmdldChX
ZWJLaXRET01FdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkV2ZW50VGFyZ2V0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+dGFyZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHdlYmtpdF9kb21fZXZlbnRf
Z2V0X2N1cnJlbnRfdGFyZ2V0KFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRUYXJnZXQ+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jdXJyZW50VGFyZ2V0KCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3VzaG9ydCB3ZWJr
aXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZShXZWJLaXRET01FdmVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RXZl
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVt
LT5ldmVudFBoYXNlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9ldmVudF9nZXRfYnViYmxlcyhXZWJLaXRET01FdmVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkV2ZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PmJ1YmJsZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X2V2ZW50X2dldF9jYW5jZWxhYmxlKFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
Y2FuY2VsYWJsZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21fZXZlbnRfZ2V0X2NvbXBvc2VkKFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
Y29tcG9zZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWludDMyIHdlYmtpdF9kb21f
ZXZlbnRfZ2V0X3RpbWVfc3RhbXAoV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50MzIgcmVzdWx0ID0gaXRlbS0+dGltZVN0
YW1wKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVu
dF9nZXRfZGVmYXVsdF9wcmV2ZW50ZWQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpFdmVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5kZWZhdWx0UHJldmVudGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9ldmVudF9nZXRfaXNfdHJ1c3RlZChXZWJLaXRET01FdmVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNv
cmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmlzVHJ1c3RlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERP
TUV2ZW50VGFyZ2V0KiB3ZWJraXRfZG9tX2V2ZW50X2dldF9zcmNfZWxlbWVudChXZWJLaXRET01F
dmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkV2ZW50VGFyZ2V0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+c3JjRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3JldHVybl92YWx1ZShX
ZWJLaXRET01FdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmxlZ2FjeVJldHVyblZhbHVlKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2V2ZW50X3NldF9yZXR1cm5f
dmFsdWUoV2ViS2l0RE9NRXZlbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRVZFTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldExlZ2FjeVJldHVyblZhbHVlKHZhbHVlKTsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF9nZXRfY2FuY2VsX2J1YmJsZShXZWJLaXRE
T01FdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNhbmNlbEJ1YmJsZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9ldmVudF9zZXRfY2FuY2VsX2J1YmJsZShXZWJL
aXRET01FdmVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19FVkVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0Q2FuY2VsQnViYmxlKHZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01FdmVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjliY2Q0MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50LmgKQEAgLTAs
MCArMSwyODkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5l
ZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVj
dGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUV2ZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NRXZlbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9FVkVOVCAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2V2ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fRVZFTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0VWRU5ULCBXZWJLaXRET01FdmVudCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fRVZFTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0VWRU5ULCBXZWJLaXRET01FdmVudENsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0VWRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfRVZFTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZ
UEVfRVZFTlQsIFdlYktpdERPTUV2ZW50Q2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01fRVZF
TlRfTk9ORToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX05PTkUgMAorCisvKioKKyAq
IFdFQktJVF9ET01fRVZFTlRfQ0FQVFVSSU5HX1BIQVNFOgorICovCisjZGVmaW5lIFdFQktJVF9E
T01fRVZFTlRfQ0FQVFVSSU5HX1BIQVNFIDEKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX0FU
X1RBUkdFVDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0FUX1RBUkdFVCAyCisKKy8q
KgorICogV0VCS0lUX0RPTV9FVkVOVF9CVUJCTElOR19QSEFTRToKKyAqLworI2RlZmluZSBXRUJL
SVRfRE9NX0VWRU5UX0JVQkJMSU5HX1BIQVNFIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5U
X01PVVNFRE9XTjoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX01PVVNFRE9XTiAxCisK
Ky8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9NT1VTRVVQOgorICovCisjZGVmaW5lIFdFQktJVF9E
T01fRVZFTlRfTU9VU0VVUCAyCisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9NT1VTRU9WRVI6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9NT1VTRU9WRVIgNAorCisvKioKKyAqIFdF
QktJVF9ET01fRVZFTlRfTU9VU0VPVVQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9N
T1VTRU9VVCA4CisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9NT1VTRU1PVkU6CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9NT1VTRU1PVkUgMTYKKworLyoqCisgKiBXRUJLSVRfRE9N
X0VWRU5UX01PVVNFRFJBRzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX01PVVNFRFJB
RyAzMgorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfQ0xJQ0s6CisgKi8KKyNkZWZpbmUgV0VC
S0lUX0RPTV9FVkVOVF9DTElDSyA2NAorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfREJMQ0xJ
Q0s6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9EQkxDTElDSyAxMjgKKworLyoqCisg
KiBXRUJLSVRfRE9NX0VWRU5UX0tFWURPV046CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVO
VF9LRVlET1dOIDI1NgorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfS0VZVVA6CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9LRVlVUCA1MTIKKworLyoqCisgKiBXRUJLSVRfRE9NX0VW
RU5UX0tFWVBSRVNTOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfS0VZUFJFU1MgMTAy
NAorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfRFJBR0RST1A6CisgKi8KKyNkZWZpbmUgV0VC
S0lUX0RPTV9FVkVOVF9EUkFHRFJPUCAyMDQ4CisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9G
T0NVUzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0ZPQ1VTIDQwOTYKKworLyoqCisg
KiBXRUJLSVRfRE9NX0VWRU5UX0JMVVI6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9C
TFVSIDgxOTIKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX1NFTEVDVDoKKyAqLworI2RlZmlu
ZSBXRUJLSVRfRE9NX0VWRU5UX1NFTEVDVCAxNjM4NAorCisvKioKKyAqIFdFQktJVF9ET01fRVZF
TlRfQ0hBTkdFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfQ0hBTkdFIDMyNzY4CisK
K3N0cnVjdCBfV2ViS2l0RE9NRXZlbnQgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5z
dGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUV2ZW50Q2xhc3MgeworICAgIFdlYktpdERP
TU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21fZXZlbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9z
dG9wX3Byb3BhZ2F0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZXZlbnRfc3RvcF9wcm9wYWdhdGlvbihXZWJLaXRE
T01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9wcmV2ZW50X2RlZmF1
bHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9ldmVudF9wcmV2ZW50X2RlZmF1bHQoV2ViS2l0RE9NRXZlbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfaW5pdF9ldmVudDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01FdmVudAorICogQGV2ZW50VHlwZUFyZzogQSAjZ2NoYXIKKyAqIEBjYW5CdWJibGVB
cmc6IEEgI2dib29sZWFuCisgKiBAY2FuY2VsYWJsZUFyZzogQSAjZ2Jvb2xlYW4KKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9ldmVudF9pbml0X2V2ZW50KFdlYktpdERPTUV2
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXZlbnRUeXBlQXJnLCBnYm9vbGVhbiBjYW5CdWJibGVB
cmcsIGdib29sZWFuIGNhbmNlbGFibGVBcmcpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRf
Z2V0X2V2ZW50X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9ldmVudF9n
ZXRfZXZlbnRfdHlwZShXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ldmVudF9nZXRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01FdmVudFRhcmdldAorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUV2ZW50VGFyZ2V0Kgord2Via2l0X2RvbV9ldmVudF9nZXRfdGFy
Z2V0KFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2dl
dF9jdXJyZW50X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRXZlbnRUYXJnZXQKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01FdmVudFRhcmdldCoKK3dlYmtpdF9kb21fZXZlbnRfZ2V0X2N1cnJl
bnRfdGFyZ2V0KFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2
ZW50X2dldF9ldmVudF9waGFzZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAq
IFJldHVybnM6IEEgI2d1c2hvcnQKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9t
X2V2ZW50X2dldF9ldmVudF9waGFzZShXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9ldmVudF9nZXRfYnViYmxlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fZXZlbnRfZ2V0X2J1YmJsZXMoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2NhbmNlbGFibGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2V2ZW50X2dldF9jYW5jZWxhYmxlKFdlYktpdERPTUV2ZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2dldF90aW1lX3N0YW1wOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ3VpbnQzMgorKiov
CitXRUJLSVRfQVBJIGd1aW50MzIKK3dlYmtpdF9kb21fZXZlbnRfZ2V0X3RpbWVfc3RhbXAoV2Vi
S2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3NyY19l
bGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01FdmVudFRhcmdldAorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTUV2ZW50VGFyZ2V0Kgord2Via2l0X2RvbV9ldmVudF9nZXRfc3JjX2VsZW1lbnQoV2Vi
S2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X3JldHVy
bl92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZXZlbnRfZ2V0
X3JldHVybl92YWx1ZShXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ldmVudF9zZXRfcmV0dXJuX3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50Cisg
KiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fZXZlbnRfc2V0X3JldHVybl92YWx1ZShXZWJLaXRET01FdmVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2NhbmNlbF9idWJibGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2V2ZW50X2dldF9jYW5jZWxfYnVi
YmxlKFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X3Nl
dF9jYW5jZWxfYnViYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZXZlbnRf
c2V0X2NhbmNlbF9idWJibGUoV2ViS2l0RE9NRXZlbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUV2ZW50X2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRXZlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzY3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUV2ZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRXZlbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NRXZlbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NRXZlbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01FdmVudCogd3JhcEV2ZW50KFdlYkNvcmU6OkV2ZW50Kik7CitXZWJLaXRET01FdmVudCog
a2l0KFdlYkNvcmU6OkV2ZW50Kik7CitXZWJDb3JlOjpFdmVudCogY29yZShXZWJLaXRET01FdmVu
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01FdmVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcApzaW1pbGFyaXR5
IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTUV2ZW50VGFyZ2V0LmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFRhcmdldC5jcHAKaW5k
ZXggOWUzYjEyYi4uOGI3NTBiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFRhcmdldC5j
cHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgog
CiAjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRUYXJnZXQuaD4KICNpbmNsdWRlICJXZWJLaXRET01FdmVu
dC5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0UHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRUYXJnZXQuaApzaW1p
bGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VGFyZ2V0LmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZl
bnRUYXJnZXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VGFyZ2V0UHJpdmF0ZS5oCnNpbWlsYXJpdHkg
aW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTUV2ZW50VGFyZ2V0UHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VGFyZ2V0UHJp
dmF0ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRVbnN0
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ODE2NjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDc2IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUV2ZW50VW5zdGFi
bGVfaAorI2RlZmluZSBXZWJLaXRET01FdmVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21fZXZl
bnRfc3RvcF9pbW1lZGlhdGVfcHJvcGFnYXRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZl
bnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9ldmVudF9zdG9wX2ltbWVkaWF0ZV9wcm9wYWdhdGlvbihXZWJLaXRET01FdmVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9nZXRfY29tcG9zZWQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9ldmVudF9nZXRfY29tcG9zZWQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZXZlbnRfZ2V0X2RlZmF1bHRfcHJldmVudGVkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZXZlbnRfZ2V0
X2RlZmF1bHRfcHJldmVudGVkKFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2V2ZW50X2dldF9pc190cnVzdGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZXZlbnRfZ2V0X2lzX3RydXN0
ZWQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01FdmVudFVu
c3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjljMGIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUZpbGUuY3BwCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRmls
ZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTUJsb2JQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RmlsZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUZpbGVVbnN0YWJsZS5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01GaWxlKiBraXQoV2ViQ29yZTo6RmlsZSogb2Jq
KQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0ZJTEUoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6
OkJsb2IqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkZpbGUqIGNvcmUoV2ViS2l0RE9NRmlsZSog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZp
bGUqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01GaWxlKiB3cmFwRmlsZShXZWJDb3JlOjpGaWxlKiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9GSUxFKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfRklMRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJL
aXRET01GaWxlLCB3ZWJraXRfZG9tX2ZpbGUsIFdFQktJVF9ET01fVFlQRV9CTE9CKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfTEFTVF9NT0RJRklFRCwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZmlsZV9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01GaWxlKiBzZWxmID0gV0VCS0lUX0RPTV9GSUxFKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9maWxlX2dldF9uYW1lKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBU1RfTU9ESUZJRUQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2ludDY0KHZhbHVlLCB3ZWJraXRfZG9tX2ZpbGVfZ2V0X2xhc3RfbW9k
aWZpZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9maWxl
X2NsYXNzX2luaXQoV2ViS2l0RE9NRmlsZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9maWxlX2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkZpbGU6bmFtZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBGaWxlOm5hbWUiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
QVNUX01PRElGSUVELAorICAgICAgICBnX3BhcmFtX3NwZWNfaW50NjQoCisgICAgICAgICAgICAi
bGFzdC1tb2RpZmllZCIsCisgICAgICAgICAgICAiRmlsZTpsYXN0LW1vZGlmaWVkIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2ludDY0IEZpbGU6bGFzdC1tb2RpZmllZCIsCisgICAgICAgICAg
ICBHX01JTklOVDY0LCBHX01BWElOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9maWxlX2luaXQoV2ViS2l0
RE9NRmlsZSogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2ZpbGVfZ2V0X25hbWUoV2ViS2l0RE9NRmlsZSogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19GSUxFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpGaWxl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2lu
dDY0IHdlYmtpdF9kb21fZmlsZV9nZXRfbGFzdF9tb2RpZmllZChXZWJLaXRET01GaWxlKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZJTEUoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkZpbGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2ludDY0IHJlc3VsdCA9
IGl0ZW0tPmxhc3RNb2RpZmllZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRmlsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMGFlYWY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZS5oCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUZpbGVfaAorI2RlZmluZSBXZWJLaXRET01G
aWxlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUJsb2IuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0ZJTEUgICAgICAgICAg
ICAod2Via2l0X2RvbV9maWxlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRklMRShv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfRklMRSwgV2ViS2l0RE9NRmlsZSkpCisjZGVmaW5lIFdFQktJVF9ET01fRklMRV9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfRklMRSwgV2ViS2l0RE9NRmlsZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0ZJTEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0ZJTEUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0ZJTEVfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0ZJ
TEUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0ZJTEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0ZJTEUsIFdlYktpdERPTUZp
bGVDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRmlsZSB7CisgICAgV2ViS2l0RE9NQmxvYiBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUZpbGVDbGFzcyB7CisgICAg
V2ViS2l0RE9NQmxvYkNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9kb21fZmlsZV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Zp
bGVfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRmlsZQorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2ZpbGVfZ2V0X25h
bWUoV2ViS2l0RE9NRmlsZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJL
aXRET01GaWxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3QuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxl
TGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1M2ViYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3QuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NRmlsZUxpc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01GaWxlTGlzdFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01GaWxlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRf
RE9NX0ZJTEVfTElTVF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShvYmosIFdFQktJVF9ET01fVFlQRV9GSUxFX0xJU1QsIFdlYktpdERPTUZpbGVMaXN0UHJpdmF0
ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUZpbGVMaXN0UHJpdmF0ZSB7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkZpbGVMaXN0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01GaWxlTGlzdFBy
aXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01GaWxlTGlzdCoga2l0KFdl
YkNvcmU6OkZpbGVMaXN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fRklMRV9MSVNUKHJldCk7CisKKyAgICByZXR1cm4gd3Jh
cEZpbGVMaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6OkZpbGVMaXN0KiBjb3JlKFdlYktpdERPTUZp
bGVMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RmlsZUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01GaWxlTGlzdCogd3JhcEZpbGVMaXN0KFdlYkNvcmU6OkZpbGVM
aXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9GSUxFX0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9GSUxFX0xJ
U1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRmlsZUxpc3QsIHdlYmtpdF9k
b21fZmlsZV9saXN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2ZpbGVf
bGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRmlsZUxpc3RQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9GSUxFX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01GaWxlTGlzdFByaXZhdGUoKTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX2ZpbGVfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01GaWxlTGlzdCogc2VsZiA9IFdFQktJVF9E
T01fRklMRV9MSVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBj
YXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV9maWxlX2xpc3RfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
R09iamVjdCogd2Via2l0X2RvbV9maWxlX2xpc3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3Vp
bnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0
cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV9maWxlX2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29u
c3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktp
dERPTUZpbGVMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRklMRV9MSVNUX0dFVF9QUklW
QVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkZpbGVMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVj
dCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Zp
bGVfbGlzdF9jbGFzc19pbml0KFdlYktpdERPTUZpbGVMaXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6
ZW9mKFdlYktpdERPTUZpbGVMaXN0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3Ry
dWN0b3IgPSB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9maWxlX2xpc3RfZmluYWxpemU7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmco
CisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJGaWxlTGlzdDpsZW5ndGgiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRmlsZUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAg
ICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9pbml0KFdlYktpdERP
TUZpbGVMaXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUZpbGVMaXN0UHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fRklMRV9MSVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAo
cHJpdikgV2ViS2l0RE9NRmlsZUxpc3RQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTUZpbGUqIHdl
YmtpdF9kb21fZmlsZV9saXN0X2l0ZW0oV2ViS2l0RE9NRmlsZUxpc3QqIHNlbGYsIGd1bG9uZyBp
bmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19GSUxFX0xJU1Qoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkZpbGVMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpGaWxlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRl
bShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKworZ3Vsb25nIHdlYmtpdF9kb21fZmlsZV9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NRmls
ZUxpc3QqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRklMRV9MSVNUKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpGaWxlTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlTGlzdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlTGlzdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTUyMTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUZpbGVMaXN0LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZp
bmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5o
PiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9N
RmlsZUxpc3RfaAorI2RlZmluZSBXZWJLaXRET01GaWxlTGlzdF9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2Zp
bGVfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0ZJTEVfTElTVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfRklMRV9MSVNULCBXZWJLaXRET01GaWxlTGlzdCkpCisjZGVmaW5lIFdFQktJVF9ET01fRklM
RV9MSVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9GSUxFX0xJU1QsIFdlYktpdERPTUZpbGVMaXN0Q2xhc3MpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfRklMRV9MSVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9GSUxFX0xJU1QpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0ZJTEVfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRklMRV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9GSUxFX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCwgV2ViS2l0RE9NRmlsZUxpc3RDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRmlsZUxpc3QgeworICAgIFdlYktpdERPTU9iamVjdCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUZpbGVMaXN0Q2xhc3Mgewor
ICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkg
R1R5cGUKK3dlYmtpdF9kb21fZmlsZV9saXN0X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZmlsZV9saXN0X2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRmlsZUxpc3QK
KyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01GaWxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRmlsZSoKK3dlYmtpdF9k
b21fZmlsZV9saXN0X2l0ZW0oV2ViS2l0RE9NRmlsZUxpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9maWxlX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01GaWxlTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJL
SVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9maWxlX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01G
aWxlTGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01GaWxl
TGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxl
TGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjE0MDJm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUZp
bGVMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUZpbGVMaXN0UHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0ZpbGVMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUZpbGVMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRmlsZUxpc3QqIHdy
YXBGaWxlTGlzdChXZWJDb3JlOjpGaWxlTGlzdCopOworV2ViS2l0RE9NRmlsZUxpc3QqIGtpdChX
ZWJDb3JlOjpGaWxlTGlzdCopOworV2ViQ29yZTo6RmlsZUxpc3QqIGNvcmUoV2ViS2l0RE9NRmls
ZUxpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NRmls
ZUxpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RmlsZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY4ZTAz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRmlsZVBy
aXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01GaWxlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0ZpbGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRmlsZS5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUZpbGUqIHdyYXBGaWxlKFdlYkNvcmU6OkZpbGUqKTsK
K1dlYktpdERPTUZpbGUqIGtpdChXZWJDb3JlOjpGaWxlKik7CitXZWJDb3JlOjpGaWxlKiBjb3Jl
KFdlYktpdERPTUZpbGUqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2Vi
S2l0RE9NRmlsZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlVW5zdGFibGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRmlsZVVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGJkZGYyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZVVuc3RhYmxlLmgKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01GaWxlVW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01GaWxlVW5zdGFibGVfaAorCisjaWZk
ZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Vi
a2l0X2RvbV9maWxlX2dldF9sYXN0X21vZGlmaWVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUZp
bGUKKyAqCisgKiBSZXR1cm5zOiBBICNnaW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2ludDY0Cit3ZWJraXRfZG9tX2ZpbGVfZ2V0X2xhc3RfbW9kaWZp
ZWQoV2ViS2l0RE9NRmlsZSogc2VsZik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUZpbGVVbnN0
YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzk1NDUyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01HYW1lcGFkLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERP
TUdhbWVwYWQuaCBhbmQKKyAgICBXZWJLaXRET01HYW1lcGFkLmNwcCBhcmUgY3JlYXRlZCBmb3Ig
R2FtZXBhZC5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9t
IHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01HYW1lcGFkLmggYW5kCisgICAgV2ViS2l0RE9N
R2FtZXBhZC5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0
byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFk
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5NTQ1MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NR2FtZXBhZC5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9N
R2FtZXBhZC5oIGFuZAorICAgIFdlYktpdERPTUdhbWVwYWQuY3BwIGFyZSBjcmVhdGVkIGZvciBH
YW1lcGFkLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20g
dHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTUdhbWVwYWQuaCBhbmQKKyAgICBXZWJLaXRET01H
YW1lcGFkLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRv
IGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkTGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdh
bWVwYWRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjc4MTQ3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkTGlzdC5jcHAKQEAgLTAsMCArMSw2IEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlw
dHMgdGhhdCBXZWJLaXRET01HYW1lcGFkTGlzdC5oIGFuZAorICAgIFdlYktpdERPTUdhbWVwYWRM
aXN0LmNwcCBhcmUgY3JlYXRlZCBmb3IgR2FtZXBhZExpc3QuaWRsLCBhbmQgdGh1cworICAgIHBy
ZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9N
R2FtZXBhZExpc3QuaCBhbmQKKyAgICBXZWJLaXRET01HYW1lcGFkTGlzdC5jcHAgYXQgZXZlcnkg
YnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NR2FtZXBhZExpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZExpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjc4MTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01HYW1lcGFkTGlzdC5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2Vu
ZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NR2FtZXBhZExp
c3QuaCBhbmQKKyAgICBXZWJLaXRET01HYW1lcGFkTGlzdC5jcHAgYXJlIGNyZWF0ZWQgZm9yIEdh
bWVwYWRMaXN0LmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZy
b20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTUdhbWVwYWRMaXN0LmggYW5kCisgICAgV2Vi
S2l0RE9NR2FtZXBhZExpc3QuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3Qg
YmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xvY2F0aW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NR2VvbG9jYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQ1NTM4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xvY2F0aW9uLmNwcApAQCAt
MCwwICsxLDEyNCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUdlb2xvY2F0aW9uLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fR0VPTE9D
QVRJT05fR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfR0VPTE9DQVRJT04sIFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZSB7CisjaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQorICAgIFJlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbj4gY29yZU9i
amVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCit9IFdlYktpdERPTUdlb2xvY2F0
aW9uUHJpdmF0ZTsKKworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTUdlb2xvY2F0aW9uKiBraXQoV2ViQ29yZTo6R2VvbG9jYXRpb24qIG9i
aikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50
ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lU
X0RPTV9HRU9MT0NBVElPTihyZXQpOworCisgICAgcmV0dXJuIHdyYXBHZW9sb2NhdGlvbihvYmop
OworfQorCitXZWJDb3JlOjpHZW9sb2NhdGlvbiogY29yZShXZWJLaXRET01HZW9sb2NhdGlvbiog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Okdl
b2xvY2F0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NR2VvbG9jYXRpb24qIHdyYXBHZW9sb2NhdGlvbihXZWJDb3JlOjpHZW9s
b2NhdGlvbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fR0VPTE9DQVRJT04oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9H
RU9MT0NBVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKKwor
R19ERUZJTkVfVFlQRShXZWJLaXRET01HZW9sb2NhdGlvbiwgd2Via2l0X2RvbV9nZW9sb2NhdGlv
biwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9nZW9s
b2NhdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NR2VvbG9j
YXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9HRU9MT0NBVElPTl9HRVRfUFJJVkFURShv
YmplY3QpOworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKEdF
T0xPQ0FUSU9OKQorICAgIHByaXYtPn5XZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2dlb2xvY2F0
aW9uX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdP
YmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZ2VvbG9jYXRpb25fcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgV2ViS2l0
RE9NR2VvbG9jYXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9HRU9MT0NBVElPTl9HRVRf
UFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpHZW9sb2NhdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKKyAgICByZXR1cm4gb2Jq
ZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2NsYXNzX2luaXQo
V2ViS2l0RE9NR2VvbG9jYXRpb25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NR2Vv
bG9jYXRpb25Qcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtp
dF9kb21fZ2VvbG9jYXRpb25fY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21fZ2VvbG9jYXRpb25fZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZ2VvbG9jYXRpb25faW5pdChXZWJLaXRET01HZW9sb2NhdGlvbiogcmVxdWVzdCkK
K3sKKyAgICBXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0dF
T0xPQ0FUSU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9N
R2VvbG9jYXRpb25Qcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9nZW9sb2NhdGlvbl9j
bGVhcl93YXRjaChXZWJLaXRET01HZW9sb2NhdGlvbiogc2VsZiwgZ2xvbmcgd2F0Y2hJRCkKK3sK
KyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19HRU9MT0NBVElP
TihzZWxmKSk7CisgICAgV2ViQ29yZTo6R2VvbG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+Y2xlYXJXYXRjaCh3YXRjaElEKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh3YXRjaElEKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJHZW9sb2NhdGlvbiIpCisjZW5kaWYgLyogRU5BQkxFKEdF
T0xPQ0FUSU9OKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xv
Y2F0aW9uLmgKc2ltaWxhcml0eSBpbmRleCA1MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbi5oCnJl
bmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUdlb2xvY2F0aW9uLmgKaW5kZXggNjI3NDU1My4uNGVkNmU1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEV4Y2VwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2VvbG9jYXRpb24uaApAQCAtMTgsOCArMTgs
OCBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2Vi
S2l0RE9NVGVzdEV4Y2VwdGlvbl9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RFeGNlcHRpb25faAor
I2lmbmRlZiBXZWJLaXRET01HZW9sb2NhdGlvbl9oCisjZGVmaW5lIFdlYktpdERPTUdlb2xvY2F0
aW9uX2gKIAogI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQogCkBAIC0yOSwzNiAr
MjksMzUgQEAKIAogR19CRUdJTl9ERUNMUwogCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNU
X0VYQ0VQVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF90eXBl
KCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FWENFUFRJT04ob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVhD
RVBUSU9OLCBXZWJLaXRET01UZXN0RXhjZXB0aW9uKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNU
X0VYQ0VQVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FWENFUFRJT04sIFdlYktpdERPTVRlc3RFeGNlcHRp
b25DbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0VYQ0VQVElPTihvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9FWENFUFRJT04pKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfRVhDRVBUSU9OX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX0VYQ0VQVElPTikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FWENFUFRJT05fR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfRVhDRVBUSU9OLCBXZWJLaXRET01UZXN0RXhjZXB0aW9uQ2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfR0VPTE9DQVRJT04gICAgICAgICAgICAod2Via2l0X2RvbV9n
ZW9sb2NhdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0dFT0xPQ0FUSU9OKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9HRU9MT0NBVElPTiwgV2ViS2l0RE9NR2VvbG9jYXRpb24pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0dFT0xPQ0FUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9HRU9MT0NBVElPTiwgV2ViS2l0RE9NR2VvbG9j
YXRpb25DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19HRU9MT0NBVElPTihvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfR0VP
TE9DQVRJT04pKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0dFT0xPQ0FUSU9OX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9HRU9M
T0NBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fR0VPTE9DQVRJT05fR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0dFT0xP
Q0FUSU9OLCBXZWJLaXRET01HZW9sb2NhdGlvbkNsYXNzKSkKIAotc3RydWN0IF9XZWJLaXRET01U
ZXN0RXhjZXB0aW9uIHsKK3N0cnVjdCBfV2ViS2l0RE9NR2VvbG9jYXRpb24gewogICAgIFdlYktp
dERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7CiB9OwogCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RF
eGNlcHRpb25DbGFzcyB7CitzdHJ1Y3QgX1dlYktpdERPTUdlb2xvY2F0aW9uQ2xhc3MgewogICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKIH07CiAKIFdFQktJVF9BUEkgR1R5
cGUKLXdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25fZ2V0X3R5cGUodm9pZCk7Cit3ZWJraXRfZG9t
X2dlb2xvY2F0aW9uX2dldF90eXBlKHZvaWQpOwogCiAvKioKLSAqIHdlYmtpdF9kb21fdGVzdF9l
eGNlcHRpb25fZ2V0X25hbWU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbgot
ICoKLSAqIFJldHVybnM6IEEgI2djaGFyCisgKiB3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2NsZWFy
X3dhdGNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUdlb2xvY2F0aW9uCisgKiBAd2F0Y2hJRDog
QSAjZ2xvbmcKICAqCiAgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCiAqKi8KLVdFQktJVF9BUEkgZ2No
YXIqCi13ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF9uYW1lKFdlYktpdERPTVRlc3RFeGNl
cHRpb24qIHNlbGYpOworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2Ns
ZWFyX3dhdGNoKFdlYktpdERPTUdlb2xvY2F0aW9uKiBzZWxmLCBnbG9uZyB3YXRjaElEKTsKIAog
R19FTkRfREVDTFMKIAogI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwot
I2VuZGlmIC8qIFdlYktpdERPTVRlc3RFeGNlcHRpb25faCAqLworI2VuZGlmIC8qIFdlYktpdERP
TUdlb2xvY2F0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ1Y2Y1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NR2Vv
bG9jYXRpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb24uaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NR2VvbG9jYXRpb24uaD4KKyNpZiBFTkFCTEUoR0VP
TE9DQVRJT04pCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NR2VvbG9jYXRpb24qIHdy
YXBHZW9sb2NhdGlvbihXZWJDb3JlOjpHZW9sb2NhdGlvbiopOworV2ViS2l0RE9NR2VvbG9jYXRp
b24qIGtpdChXZWJDb3JlOjpHZW9sb2NhdGlvbiopOworV2ViQ29yZTo6R2VvbG9jYXRpb24qIGNv
cmUoV2ViS2l0RE9NR2VvbG9jYXRpb24qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogRU5BQkxFKEdFT0xPQ0FUSU9OKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NR2VvbG9j
YXRpb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZTY2N2VhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsOTg4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxBbmNob3JFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVu
dCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQU5DSE9SX0VMRU1FTlQoa2l0
KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxB
bmNob3JFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEFuY2hvckVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQor
CitXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogd3JhcEhUTUxBbmNob3JFbGVtZW50KFdlYkNv
cmU6OkhUTUxBbmNob3JFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9BTkNIT1JfRUxFTUVOVCwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6
OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9hZGRfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxBbmNob3JFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRh
cmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBp
ZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5l
ciA9IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7Cisg
ICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9D
T0RFKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0hBUlNFVCwKKyAgICBQUk9Q
X0NPT1JEUywKKyAgICBQUk9QX0RPV05MT0FELAorICAgIFBST1BfSFJFRkxBTkcsCisgICAgUFJP
UF9OQU1FLAorICAgIFBST1BfUElORywKKyAgICBQUk9QX1JFTCwKKyAgICBQUk9QX1JFViwKKyAg
ICBQUk9QX1NIQVBFLAorICAgIFBST1BfVEFSR0VULAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9Q
X1RFWFQsCisgICAgUFJPUF9SRUxfTElTVCwKKyAgICBQUk9QX0hSRUYsCisgICAgUFJPUF9PUklH
SU4sCisgICAgUFJPUF9QUk9UT0NPTCwKKyAgICBQUk9QX1VTRVJOQU1FLAorICAgIFBST1BfUEFT
U1dPUkQsCisgICAgUFJPUF9IT1NULAorICAgIFBST1BfSE9TVE5BTUUsCisgICAgUFJPUF9QT1JU
LAorICAgIFBST1BfUEFUSE5BTUUsCisgICAgUFJPUF9TRUFSQ0gsCisgICAgUFJPUF9IQVNILAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0hBUlNFVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9jaGFyc2V0KHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09PUkRTOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2Nvb3JkcyhzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0RPV05MT0FEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2Rv
d25sb2FkKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSFJFRkxBTkc6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9zZXRfaHJlZmxhbmcoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QSU5HOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Bpbmcoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUw6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcmVsKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVWOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JldihzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NIQVBFOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3NoYXBlKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VEFSR0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Rhcmdl
dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9z
ZXRfdHlwZV9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X3NldF90ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFJFRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X3NldF9ocmVmKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcHJvdG9jb2woc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VSTkFNRToK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF91c2VybmFtZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BBU1NXT1JEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0
X3Bhc3N3b3JkKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfSE9TVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X3NldF9ob3N0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfSE9TVE5BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9zZXRfaG9zdG5hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QT1JUOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3BvcnQoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVRITkFNRToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wYXRobmFtZShzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NFQVJDSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9zZWFy
Y2goc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IQVNIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
c2V0X2hhc2goc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfQU5DSE9SX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DSEFSU0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2NoYXJzZXQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09PUkRTOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X2Nvb3JkcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ET1dOTE9B
RDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9kb3dubG9hZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9IUkVGTEFORzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVmbGFuZyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUElORzoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9waW5nKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTDoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9y
ZWwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVWOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X3JldihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSEFQRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9zaGFwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9U
QVJHRVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9nZXRfdGFyZ2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdHlwZV9hdHRyKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdGV4dChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUxfTElTVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JlbF9s
aXN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfaHJlZihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PUklHSU46
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfb3JpZ2luKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BST1RPQ09MOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Byb3RvY29sKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1VTRVJOQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3VzZXJuYW1lKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBU1NXT1JEOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X3Bhc3N3b3JkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1Q6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9nZXRfaG9zdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9I
T1NUTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2FuY2hvcl9lbGVtZW50X2dldF9ob3N0bmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9QT1JUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BvcnQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfUEFUSE5BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcGF0aG5hbWUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VBUkNIOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X3NlYXJjaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IQVNIOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfZ2V0X2hhc2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NIQVJTRVQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2hhcnNldCIsCisgICAgICAg
ICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6Y2hhcnNldCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6Y2hhcnNldCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9D
T09SRFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29vcmRz
IiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpjb29yZHMiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OmNvb3JkcyIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9ET1dOTE9BRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJkb3dubG9hZCIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6ZG93bmxvYWQi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OmRvd25s
b2FkIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0hSRUZMQU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImhyZWZsYW5nIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9y
RWxlbWVudDpocmVmbGFuZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFu
Y2hvckVsZW1lbnQ6aHJlZmxhbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJI
VE1MQW5jaG9yRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MQW5jaG9yRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BJTkcsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicGluZyIsCisgICAgICAgICAgICAi
SFRNTEFuY2hvckVsZW1lbnQ6cGluZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEFuY2hvckVsZW1lbnQ6cGluZyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRUwsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicmVsIiwKKyAgICAgICAgICAgICJI
VE1MQW5jaG9yRWxlbWVudDpyZWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxBbmNob3JFbGVtZW50OnJlbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVYsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicmV2IiwKKyAgICAgICAgICAgICJIVE1M
QW5jaG9yRWxlbWVudDpyZXYiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxB
bmNob3JFbGVtZW50OnJldiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSEFQRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzaGFwZSIsCisgICAgICAgICAgICAiSFRN
TEFuY2hvckVsZW1lbnQ6c2hhcGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxBbmNob3JFbGVtZW50OnNoYXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RBUkdFVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0YXJnZXQiLAorICAgICAgICAg
ICAgIkhUTUxBbmNob3JFbGVtZW50OnRhcmdldCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTEFuY2hvckVsZW1lbnQ6dGFyZ2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAg
ICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9URVhU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRleHQiLAorICAg
ICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnRleHQiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OnRleHQiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVM
X0xJU1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicmVsLWxp
c3QiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnJlbC1saXN0IiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBIVE1MQW5jaG9yRWxlbWVudDpy
ZWwtbGlzdCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9I
UkVGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhyZWYiLAor
ICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OmhyZWYiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OmhyZWYiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
T1JJR0lOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm9yaWdp
biIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6b3JpZ2luIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50Om9yaWdpbiIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1BST1RPQ09MLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInByb3RvY29sIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpwcm90b2NvbCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6cHJvdG9j
b2wiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVVNFUk5BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAidXNlcm5hbWUiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JF
bGVtZW50OnVzZXJuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5j
aG9yRWxlbWVudDp1c2VybmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVNTV09SRCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwYXNzd29yZCIsCisgICAgICAg
ICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6cGFzc3dvcmQiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OnBhc3N3b3JkIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0hPU1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaG9zdCIs
CisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6aG9zdCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6aG9zdCIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9IT1NUTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJo
b3N0bmFtZSIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6aG9zdG5hbWUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50Omhvc3RuYW1lIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1BPUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAicG9ydCIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6cG9ydCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6cG9ydCIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9QQVRITkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJwYXRobmFtZSIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1l
bnQ6cGF0aG5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JF
bGVtZW50OnBhdGhuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NFQVJDSCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzZWFyY2giLAorICAgICAgICAgICAgIkhU
TUxBbmNob3JFbGVtZW50OnNlYXJjaCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEFuY2hvckVsZW1lbnQ6c2VhcmNoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hBU0gsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaGFzaCIsCisgICAgICAgICAg
ICAiSFRNTEFuY2hvckVsZW1lbnQ6aGFzaCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEFuY2hvckVsZW1lbnQ6aGFzaCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogcmVx
dWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmNoYXJzZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhcnNldEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfY29vcmRzKFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjb29yZHNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2Nvb3JkcyhXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb29yZHNBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2Rvd25s
b2FkKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShET1dO
TE9BRF9BVFRSSUJVVEUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmRvd25sb2FkQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJEb3du
bG9hZCBBdHRyaWJ1dGUiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShET1dOTE9B
RF9BVFRSSUJVVEUpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X3NldF9kb3dubG9hZChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShET1dOTE9BRF9BVFRSSUJVVEUpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRvd25sb2FkQXR0ciwgY29udmVydGVkVmFs
dWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJEb3dubG9hZCBBdHRy
aWJ1dGUiKQorI2VuZGlmIC8qIEVOQUJMRShET1dOTE9BRF9BVFRSSUJVVEUpICovCit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWZsYW5nKFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpocmVmbGFuZ0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZmxhbmcoV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZmxhbmdBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X25hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFu
Y2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpu
YW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9waW5nKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwaW5nQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X3NldF9waW5nKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnBpbmdBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfZ2V0X3JlbChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVsQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X3NldF9yZWwoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxB
bmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVsQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9yZXYoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJldkF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9zZXRfcmV2KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
dkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfc2hhcGUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNoYXBlQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X3NldF9zaGFwZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpzaGFwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0YXJn
ZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfc2V0X3RhcmdldChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNI
T1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjp0YXJnZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hP
Ul9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9N
SFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+dGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdGV4dChXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFRleHQoY29udmVydGVkVmFsdWUpOwor
fQorCitXZWJLaXRET01ET01Ub2tlbkxpc3QqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfcmVsX2xpc3QoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkRPTVRva2VuTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPnJlbExpc3QoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dl
dF9ocmVmKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hyZWYoV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfb3JpZ2luKFdlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm9yaWdpbigpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wcm90b2NvbChX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wcm90b2NvbCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcHJvdG9j
b2woV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQcm90b2Nv
bChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfZ2V0X3VzZXJuYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnVzZXJuYW1l
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X3NldF91c2VybmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1Jf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldFVzZXJuYW1lKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcGFzc3dvcmQoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1Jf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+cGFzc3dvcmQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Bhc3N3b3JkKFdlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UGFzc3dvcmQoY29udmVydGVkVmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ob3N0KFdl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNo
b3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhvc3QoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hvc3QoV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRIb3N0KGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaG9z
dG5hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aG9zdG5hbWUoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0
X2hvc3RuYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
SG9zdG5hbWUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9wb3J0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnBvcnQo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X3BvcnQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRQb3J0KGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9nZXRfcGF0aG5hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+cGF0aG5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3BhdGhuYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UGF0aG5hbWUoY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9zZWFyY2goV2ViS2l0RE9N
SFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+c2VhcmNoKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9zZWFyY2goV2ViS2l0RE9N
SFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRTZWFyY2goY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9oYXNo
KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxB
bmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhhc2goKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hhc2goV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRIYXNoKGNvbnZlcnRl
ZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmVhOWQ5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LmgKQEAg
LTAsMCArMSwzNjkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQp
CisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50X2gK
KyNkZWZpbmUgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQU5DSE9SX0VMRU1FTlQgICAgICAgICAgICAo
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9BTkNIT1JfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BTkNIT1JfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQU5D
SE9SX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQU5DSE9SX0VMRU1FTlQsIFdlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxF
TUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9BTkNIT1JfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9BTkNIT1JfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BTkNIT1JfRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9BTkNIT1JfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BTkNIT1JfRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRDbGFzcyB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3R5cGUodm9p
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9jaGFyc2V0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfY2hhcnNldChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9jaGFyc2V0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9zZXRfY2hhcnNldChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X2Nvb3JkczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2Nvb3JkcyhXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9j
b29yZHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X3NldF9jb29yZHMoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9ocmVmbGFuZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWZsYW5nKFdlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfc2V0X2hyZWZsYW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZmxhbmcoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JlbChXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X3NldF9yZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9yZWwoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9yZXY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9yZXYoV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9zZXRfcmV2OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcmV2KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfc2hhcGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9zaGFwZShXZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X3NldF9zaGFwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3NoYXBlKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9nZXRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3RhcmdldChXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3R5cGVfYXR0
cihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90eXBlX2F0dHIo
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90ZXh0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfdGV4dChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVmOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaHJl
ZihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZihXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Byb3RvY29sOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
cHJvdG9jb2woV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcHJvdG9jb2w6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wcm90
b2NvbChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hvc3Q6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9ob3N0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hvc3Q6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9o
b3N0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaG9zdG5hbWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X2dldF9ob3N0bmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ob3N0bmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfc2V0X2hvc3RuYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfcG9ydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BvcnQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcG9y
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X3BvcnQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X2dldF9wYXRobmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BhdGhuYW1lKFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
c2V0X3BhdGhuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGF0aG5hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9zZWFyY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9zZWFyY2goV2ViS2l0RE9N
SFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9zZXRfc2VhcmNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfc2VhcmNoKFdlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaGFzaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hhc2goV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9zZXRfaGFzaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hhc2goV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE1OTRkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxBbmNob3JFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Lmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHdyYXBIVE1MQW5jaG9y
RWxlbWVudChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCopOworV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCopOworV2ViQ29yZTo6SFRN
TEFuY2hvckVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqKTsKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRQ
cml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRVbnN0YWJsZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMWNlOWU5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50VW5zdGFibGVf
aAorI2RlZmluZSBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfZG93bmxvYWQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9nZXRfZG93bmxvYWQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
ZG93bmxvYWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9kb3dubG9hZChXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Bpbmc6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcGluZyhXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3Nl
dF9waW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGluZyhXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X3NldF90ZXh0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfcmVsX2xpc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTVRva2Vu
TGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01ET01Ub2tlbkxpc3QqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JlbF9s
aXN0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X29yaWdpbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9vcmlnaW4oV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdXNlcm5h
bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdXNlcm5hbWUoV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9zZXRfdXNlcm5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X3NldF91c2VybmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X3Bhc3N3b3JkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3Bh
c3N3b3JkKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Bhc3N3b3JkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9zZXRfcGFzc3dvcmQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hNWY5ODk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudC5jcHAKQEAgLTAsMCArMSw1MjggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxB
cHBsZXRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIGtp
dChXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRf
RE9NX0hUTUxfQVBQTEVUX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihv
YmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhU
TUxBcHBsZXRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCog
d3JhcEhUTUxBcHBsZXRFbGVtZW50KFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBjb3JlT2Jq
ZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9I
VE1MX0FQUExFVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUFBM
RVRfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+
ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBH
Q2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpI
VE1MQXBwbGV0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VD
YXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChX
ZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hf
ZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5l
ciA9IHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7
Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50
LCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VM
RU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VU
LCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9BTFQsCisgICAgUFJPUF9BUkNISVZFLAorICAgIFBS
T1BfQ09ERSwKKyAgICBQUk9QX0NPREVfQkFTRSwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9Q
X0hTUEFDRSwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9PQkpFQ1QsCisgICAgUFJPUF9WU1BB
Q0UsCisgICAgUFJPUF9XSURUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxF
TUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FsaWdu
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQUxUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X2FsdChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0FSQ0hJVkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9zZXRfYXJjaGl2ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPREU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9zZXRfY29kZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPREVfQkFTRToKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlX2Jhc2Uoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SFNQQUNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2hzcGFj
ZShzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9PQkpFQ1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9zZXRfb2JqZWN0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQQUNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
YXBwbGV0X2VsZW1lbnRfc2V0X3ZzcGFjZShzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2FwcGxldF9lbGVtZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1M
QXBwbGV0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxFTUVOVChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0
X2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0FMVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2FwcGxldF9lbGVtZW50X2dldF9hbHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQVJDSElWRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hcmNoaXZlKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0NPREU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfY29kZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0RFX0JBU0U6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfY29kZV9i
YXNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFNQ
QUNFOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBw
bGV0X2VsZW1lbnRfZ2V0X2hzcGFjZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfT0JKRUNUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X29iamVjdChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9WU1BBQ0U6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfdnNwYWNlKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3dpZHRo
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50Q2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAgICAgICAgICAiSFRNTEFwcGxldEVs
ZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcHBsZXRF
bGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbHQiLAorICAgICAgICAgICAgIkhUTUxBcHBsZXRF
bGVtZW50OmFsdCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFwcGxldEVs
ZW1lbnQ6YWx0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FSQ0hJVkUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYXJjaGl2ZSIsCisgICAgICAgICAgICAiSFRNTEFw
cGxldEVsZW1lbnQ6YXJjaGl2ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TEFwcGxldEVsZW1lbnQ6YXJjaGl2ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT0RFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvZGUiLAorICAgICAgICAgICAg
IkhUTUxBcHBsZXRFbGVtZW50OmNvZGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxBcHBsZXRFbGVtZW50OmNvZGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09ERV9CQVNFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvZGUtYmFzZSIsCisg
ICAgICAgICAgICAiSFRNTEFwcGxldEVsZW1lbnQ6Y29kZS1iYXNlIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXBwbGV0RWxlbWVudDpjb2RlLWJhc2UiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTEFwcGxldEVsZW1lbnQ6aGVpZ2h0IiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXBwbGV0RWxlbWVudDpoZWlnaHQiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSFNQQUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAg
ICAgICAgICAgICJoc3BhY2UiLAorICAgICAgICAgICAgIkhUTUxBcHBsZXRFbGVtZW50OmhzcGFj
ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MQXBwbGV0RWxlbWVudDpoc3Bh
Y2UiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAg
ICJIVE1MQXBwbGV0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MQXBwbGV0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09CSkVDVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJvYmplY3QiLAorICAgICAg
ICAgICAgIkhUTUxBcHBsZXRFbGVtZW50Om9iamVjdCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTEFwcGxldEVsZW1lbnQ6b2JqZWN0IiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZT
UEFDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAidnNwYWNlIiwK
KyAgICAgICAgICAgICJIVE1MQXBwbGV0RWxlbWVudDp2c3BhY2UiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2xvbmcgSFRNTEFwcGxldEVsZW1lbnQ6dnNwYWNlIiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MQXBwbGV0RWxlbWVu
dDp3aWR0aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFwcGxldEVsZW1l
bnQ6d2lkdGgiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X2luaXQoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1l
bnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBw
bGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFs
aWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X2dldF9hbHQoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsdEF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9zZXRfYWx0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBw
bGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFs
dEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9nZXRfYXJjaGl2ZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXJjaGl2ZUF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9zZXRfYXJjaGl2ZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjphcmNoaXZlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9jb2RlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
Ojpjb2RlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQ
UExFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmNvZGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2NvZGVfYmFzZShXZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExF
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y29kZWJhc2VBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGVfYmFzZShXZWJLaXRET01IVE1M
QXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2RlYmFzZUF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfaGVpZ2h0
KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2hlaWdodChX
ZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9n
ZXRfaHNwYWNlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGds
b25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6aHNwYWNlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2hzcGFjZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExF
VF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmhzcGFjZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxBcHBs
ZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X29iamVjdChXZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6b2JqZWN0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9vYmplY3QoV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6b2JqZWN0QXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3ZzcGFj
ZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
QXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1
bHQgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZzcGFj
ZUF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X3NldF92c3BhY2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYs
IGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjp2c3BhY2VBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
YXBwbGV0X2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6d2lkdGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzA5NzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudC5oCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0
ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRET01IVE1MQXBwbGV0RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0FQ
UExFVF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQVBQTEVUX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfQVBQTEVUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0FQUExFVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FQUExF
VF9FTEVNRU5ULCBXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVBQTEVUX0VMRU1FTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
QVBQTEVUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQVBQTEVUX0VMRU1FTlRf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQVBQTEVUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50IHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TUhUTUxBcHBsZXRFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1M
QXBwbGV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9hcHBsZXRfZWxlbWVudF9nZXRfYWx0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBs
ZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYWx0KFdlYktpdERPTUhUTUxB
cHBsZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2Vs
ZW1lbnRfc2V0X2FsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FsdChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBw
bGV0X2VsZW1lbnRfZ2V0X2FyY2hpdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hcmNoaXZlKFdlYktpdERPTUhU
TUxBcHBsZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0
X2VsZW1lbnRfc2V0X2FyY2hpdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hcmNoaXZlKFdlYktpdERPTUhUTUxBcHBs
ZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfY29kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2NvZGUoV2ViS2l0
RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9zZXRfY29kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGUoV2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9jb2RlX2Jhc2U6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9jb2RlX2Jh
c2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfY29kZV9iYXNlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfY29kZV9iYXNl
KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfaGVpZ2h0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2hlaWdodDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X2hlaWdodChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2hzcGFj
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9nZXRfaHNwYWNlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2hzcGFjZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9u
ZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1l
bnRfc2V0X2hzcGFjZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0
X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X25hbWUoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9vYmplY3Q6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FwcGxl
dF9lbGVtZW50X2dldF9vYmplY3QoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfb2JqZWN0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVu
dF9zZXRfb2JqZWN0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRf
dnNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1s
X2FwcGxldF9lbGVtZW50X2dldF92c3BhY2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfdnNwYWNl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRf
ZWxlbWVudF9zZXRfdnNwYWNlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBnbG9u
ZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF93
aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
YXBwbGV0X2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3dpZHRoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42MjMzMTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50UHJpdmF0ZV9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxBcHBsZXRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUhUTUxBcHBsZXRFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQqIHdyYXBIVE1MQXBwbGV0RWxlbWVudChXZWJDb3JlOjpIVE1MQXBw
bGV0RWxlbWVudCopOworV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MQXBwbGV0RWxlbWVudCopOworV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTRiZDBmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNzk0IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1
bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVu
dExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTVRv
a2VuTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxB
cmVhRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50VW5zdGFibGUuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TEFyZWFFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9BUkVBX0VM
RU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNv
cmU6OkhUTUxBcmVhRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXJl
YUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHdyYXBIVE1MQXJlYUVsZW1lbnQoV2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVOVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0hUTUxfQVJFQV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZl
bnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2Vi
Q29yZTo6SFRNTEFyZWFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTEFyZWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2Ny
aXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQXJl
YUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXJlYUVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MQXJlYUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNw
YXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7
CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsK
K30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LCB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5U
LCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX0FMVCwKKyAgICBQUk9QX0NPT1JEUywKKyAgICBQUk9QX05PX0hSRUYsCisgICAgUFJPUF9Q
SU5HLAorICAgIFBST1BfUkVMLAorICAgIFBST1BfU0hBUEUsCisgICAgUFJPUF9UQVJHRVQsCisg
ICAgUFJPUF9SRUxfTElTVCwKKyAgICBQUk9QX0hSRUYsCisgICAgUFJPUF9PUklHSU4sCisgICAg
UFJPUF9QUk9UT0NPTCwKKyAgICBQUk9QX1VTRVJOQU1FLAorICAgIFBST1BfUEFTU1dPUkQsCisg
ICAgUFJPUF9IT1NULAorICAgIFBST1BfSE9TVE5BTUUsCisgICAgUFJPUF9QT1JULAorICAgIFBS
T1BfUEFUSE5BTUUsCisgICAgUFJPUF9TRUFSQ0gsCisgICAgUFJPUF9IQVNILAorfTsKKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfQVJFQV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfQUxUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9l
bGVtZW50X3NldF9hbHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9DT09SRFM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfc2V0X2Nvb3JkcyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05PX0hSRUY6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X25vX2hyZWYoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUElORzoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcGluZyhzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcmVsKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0hBUEU6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3NoYXBlKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFS
R0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF90YXJnZXQoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9IUkVGOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ocmVm
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
c2V0X3Byb3RvY29sKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVVNFUk5BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfc2V0X3VzZXJuYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFTU1dPUkQ6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Bhc3N3b3JkKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSE9TVDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfaG9zdChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1ROQU1F
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ob3N0bmFtZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BPUlQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3BvcnQo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9QQVRITkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9z
ZXRfcGF0aG5hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TRUFSQ0g6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfc2V0X3NlYXJjaChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hBU0g6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfc2V0X2hhc2goc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxBcmVhRWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTFQ6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2FsdChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT09SRFM6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X2Nvb3JkcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT19IUkVGOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9l
bGVtZW50X2dldF9ub19ocmVmKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1BJTkc6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfZ2V0X3Bpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfUkVMOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X2dldF9yZWwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0hBUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3NoYXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdGFyZ2V0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTF9MSVNUOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3JlbF9saXN0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hy
ZWYoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1JJR0lOOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2dldF9vcmlnaW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPVE9D
T0w6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfZ2V0X3Byb3RvY29sKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1VTRVJOQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF91c2VybmFtZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QQVNTV09SRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGFzc3dvcmQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSE9TVDoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaG9zdChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IT1NUTkFNRToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9n
ZXRfaG9zdG5hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9SVDoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9nZXRfcG9ydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
QVRITkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9nZXRfcGF0aG5hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0VBUkNIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9zZWFyY2goc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSEFTSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaGFzaChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2NsYXNz
X2luaXQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0FMVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJh
bHQiLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDphbHQiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDphbHQiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Q09PUkRTLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvb3Jk
cyIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50OmNvb3JkcyIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50OmNvb3JkcyIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9OT19IUkVGLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAg
ICJuby1ocmVmIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6bm8taHJlZiIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MQXJlYUVsZW1lbnQ6bm8taHJlZiIsCisg
ICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9QSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgInBpbmciLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpwaW5nIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6cGluZyIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9SRUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAicmVsIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6cmVsIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6cmVsIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1NIQVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInNoYXBlIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6c2hhcGUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDpzaGFwZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAidGFyZ2V0IiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6dGFyZ2V0IiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6dGFyZ2V0IiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1JFTF9MSVNULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgInJlbC1saXN0IiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6cmVs
LWxpc3QiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01Ub2tlbkxpc3QqIEhU
TUxBcmVhRWxlbWVudDpyZWwtbGlzdCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9N
X1RPS0VOX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9IUkVGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImhyZWYiLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpocmVmIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6aHJlZiIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9PUklHSU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAib3JpZ2luIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6b3JpZ2luIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDpvcmlnaW4iLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9QUk9UT0NPTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJwcm90b2NvbCIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50OnByb3Rv
Y29sIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6cHJv
dG9jb2wiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVVNFUk5BTUUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAidXNlcm5hbWUiLAorICAgICAgICAgICAgIkhUTUxBcmVh
RWxlbWVudDp1c2VybmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFy
ZWFFbGVtZW50OnVzZXJuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBU1NXT1JELAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBhc3N3b3JkIiwKKyAgICAgICAg
ICAgICJIVE1MQXJlYUVsZW1lbnQ6cGFzc3dvcmQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxBcmVhRWxlbWVudDpwYXNzd29yZCIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IT1NU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhvc3QiLAorICAg
ICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpob3N0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6aG9zdCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IT1NUTkFN
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJob3N0bmFtZSIs
CisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50Omhvc3RuYW1lIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6aG9zdG5hbWUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUE9SVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJw
b3J0IiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6cG9ydCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50OnBvcnQiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfUEFUSE5BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
cGF0aG5hbWUiLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpwYXRobmFtZSIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50OnBhdGhuYW1lIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NFQVJDSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJzZWFyY2giLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpzZWFyY2gi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDpzZWFyY2gi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfSEFTSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJoYXNoIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6aGFzaCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50Omhhc2giLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9pbml0KFdlYktp
dERPTUhUTUxBcmVhRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVz
dCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9hbHQoV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmFsdEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2FsdChXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjphbHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9jb29yZHMoV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmNvb3Jkc0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfc2V0X2Nvb3JkcyhXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJF
QV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpjb29yZHNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X25vX2hyZWYoV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5U
KHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpub2hyZWZBdHRyKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfc2V0X25vX2hyZWYoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsK
KyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6Om5vaHJl
ZkF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
Z2V0X3BpbmcoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnBpbmdBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9waW5nKFdlYktp
dERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnBpbmdBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9yZWwoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlbEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3JlbChXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWxBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9zaGFwZShXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2hh
cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X3NldF9zaGFwZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpzaGFwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfZ2V0X3RhcmdldChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGFyZ2V0QXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxl
bWVudF9zZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVh
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRhcmdl
dEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiB3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9yZWxfbGlzdChXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NVG9rZW5MaXN0PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVsTGlzdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X2dldF9ocmVmKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ocmVmKFdlYktpdERP
TUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhyZWZBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9vcmlnaW4oV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+b3JpZ2luKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wcm90b2NvbChXZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
UkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5wcm90b2NvbCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxB
cmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UHJvdG9jb2woY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdXNlcm5hbWUoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+dXNlcm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF91c2VybmFtZShXZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFVzZXJuYW1lKGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Bhc3N3b3JkKFdl
YktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnBhc3N3b3JkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcGFzc3dvcmQoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQYXNzd29yZChjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ob3N0KFdl
YktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhvc3QoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ob3N0KFdlYktpdERPTUhUTUxB
cmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0SG9zdChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ob3N0bmFtZShXZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
UkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5ob3N0bmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hvc3RuYW1lKFdlYktpdERPTUhUTUxB
cmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0SG9zdG5hbWUoY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcG9ydChXZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
UkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5wb3J0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcG9ydChXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldFBvcnQoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGF0aG5hbWUoV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+cGF0aG5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wYXRobmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldFBhdGhuYW1lKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3NlYXJjaChXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5zZWFyY2goKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9zZWFyY2goV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRTZWFyY2goY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaGFzaChXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5oYXNoKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9zZXRfaGFzaChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEhhc2goY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxB
cmVhRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xMzU1OTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQuaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50X2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0FSRUFfRUxFTUVOVCAgICAg
ICAgICAgICh3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVJFQV9FTEVNRU5U
LCBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQVJF
QV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FSRUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfQVJFQV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFf
RUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9BUkVBX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfQVJFQV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FSRUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxBcmVhRWxlbWVudCB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1l
bnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2FsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfYWx0KFdlYktpdERPTUhUTUxBcmVh
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9z
ZXRfYWx0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X3NldF9hbHQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X2Nvb3JkczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9nZXRfY29vcmRzKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfY29vcmRzOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3Nl
dF9jb29yZHMoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X25vX2hyZWY6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9nZXRfbm9faHJlZihXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X25vX2hyZWY6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFu
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
c2V0X25vX2hyZWYoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfc2hhcGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfZ2V0X3NoYXBlKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfc2hhcGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3NoYXBlKFdlYktp
dERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF90YXJnZXQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Rhcmdl
dChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfc2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxB
cmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ocmVmKFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxl
bWVudF9zZXRfaHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9zZXRfaHJlZihXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxl
bWVudF9nZXRfcHJvdG9jb2w6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxBcmVhRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRf
aG9zdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9nZXRfaG9zdChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hvc3RuYW1lOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dl
dF9ob3N0bmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BvcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BvcnQoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X2dldF9wYXRobmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGF0aG5hbWUoV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2dldF9zZWFyY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3NlYXJjaChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hhc2g6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfZ2V0X2hhc2goV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBcmVhRWxlbWVudF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxBcmVhRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50UHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjODNjNjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEFyZWFFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTUhUTUxBcmVhRWxlbWVudCogd3JhcEhUTUxBcmVhRWxlbWVudChXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxBcmVhRWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxBcmVhRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50VW5z
dGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzE0YWU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEs
MjEwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUhUTUxBcmVhRWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGluZzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BpbmcoV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X3NldF9waW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9waW5nKFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9yZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X2dldF9yZWwoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9yZWw6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfc2V0X3JlbChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9n
ZXRfcmVsX2xpc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NVG9r
ZW5MaXN0Kgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcmVsX2xpc3QoV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X2dldF9vcmlnaW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dl
dF9vcmlnaW4oV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wcm90b2NvbDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MQXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9zZXRfcHJvdG9jb2woV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
Z2V0X3VzZXJuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdXNlcm5h
bWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X3NldF91c2VybmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9zZXRfdXNlcm5hbWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Bh
c3N3b3JkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGFzc3dvcmQoV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X3NldF9wYXNzd29yZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRf
cGFzc3dvcmQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hvc3Q6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hvc3QoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfc2V0X2hvc3RuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVh
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9o
b3N0bmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcG9ydDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcG9ydChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9zZXRfcGF0aG5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Bh
dGhuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9zZWFyY2g6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3NlYXJjaChXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9zZXRfaGFzaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfaGFz
aChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBcmVhRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTU4NWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTM2IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9D
U1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJH
T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQXVkaW9FbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYg
RU5BQkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEF1ZGlv
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX0FVRElPX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6
Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTEF1ZGlvRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MQXVkaW9FbGVt
ZW50KiB3cmFwSFRNTEF1ZGlvRWxlbWVudChXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX0FVRElPX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0FV
RElPX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVudF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpFdmVudCogY29y
ZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50
Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYXVk
aW9fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SFRNTEF1ZGlvRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJn
ZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsK
KyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MQXVkaW9FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAg
IFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURF
TykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRE
T01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQg
PSB3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFj
ZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRfYWRk
X2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0df
REVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQsIHdlYmtpdF9k
b21faHRtbF9hdWRpb19lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJQV9FTEVNRU5U
LCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9hdWRpb19lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3RDbGFzcyk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hdWRpb19lbGVtZW50X2luaXQoV2ViS2l0RE9N
SFRNTEF1ZGlvRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXVk
aW9FbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZTY3ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TEF1ZGlvRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0FVRElPX0VMRU1FTlQgICAg
ICAgICAgICAod2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0FVRElPX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVVESU9fRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9BVURJT19FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FVRElPX0VMRU1FTlQsIFdlYktpdERPTUhU
TUxBdWRpb0VsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0FVRElPX0VM
RU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfQVVESU9fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9BVURJT19FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FVRElPX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfQVVESU9fRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BVURJT19FTEVNRU5U
LCBXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxBdWRpb0VsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50Q2xhc3Mgewor
ICAgIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVudF9nZXRfdHlwZSh2
b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXVkaW9FbGVt
ZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNWVhY2MK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRQcml2YXRlLmgKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01IVE1MQXVkaW9FbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxBdWRp
b0VsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEF1ZGlvRWxlbWVudC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50Lmg+CisjaWYg
RU5BQkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxBdWRpb0Vs
ZW1lbnQqIHdyYXBIVE1MQXVkaW9FbGVtZW50KFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqKTsK
K1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50
Kik7CitXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxBdWRpb0Vs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVP
KSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudFByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQlJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3ZjUzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MQlJFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTEJSRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01O
b2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxCUkVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQlJFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9CUl9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4o
b2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MQlJFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxC
UkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MQlJFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEJSRWxlbWVudCogd3JhcEhUTUxCUkVsZW1l
bnQoV2ViQ29yZTo6SFRNTEJSRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9CUl9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9CUl9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3Jl
T2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2
ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdl
YkNvcmU6OkhUTUxCUkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MQlJFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0
aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEJSRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TEJSRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxCUkVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2
ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdl
YmtpdF9kb21faHRtbF9icl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9hZGRfZXZlbnRfbGlz
dGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRt
bF9icl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NSFRNTEJSRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2JyX2VsZW1l
bnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0xFQVIsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MQlJFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX0JSX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9DTEVBUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfc2V0
X2NsZWFyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEJSRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01f
SFRNTF9CUl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfQ0xFQVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9icl9lbGVtZW50X2dldF9jbGVhcihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9jbGFzc19pbml0KFdlYktp
dERPTUhUTUxCUkVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X3NldF9w
cm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRt
bF9icl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DTEVBUiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjbGVhciIsCisgICAgICAg
ICAgICAiSFRNTEJSRWxlbWVudDpjbGVhciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEJSRWxlbWVudDpjbGVhciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfYnJfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxCUkVsZW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Jy
X2VsZW1lbnRfZ2V0X2NsZWFyKFdlYktpdERPTUhUTUxCUkVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MQlJFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjbGVhckF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X3NldF9jbGVhcihX
ZWJLaXRET01IVE1MQlJFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0JSX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjbGVhckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQlJFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjJmNzcyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQlJFbGVtZW50LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0
ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTEJSRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxCUkVs
ZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
QlJfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQlJfRUxFTUVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9C
Ul9FTEVNRU5ULCBXZWJLaXRET01IVE1MQlJFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX0JSX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlJfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJS
RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfQlJfRUxFTUVOVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9CUl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0JSX0VMRU1F
TlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQlJfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CUl9F
TEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0JSX0VMRU1FTlQsIFdlYktpdERPTUhUTUxCUkVsZW1lbnRD
bGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEJSRWxlbWVudCB7CisgICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1M
QlJFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRf
Z2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfZ2V0
X2NsZWFyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCUkVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Jy
X2VsZW1lbnRfZ2V0X2NsZWFyKFdlYktpdERPTUhUTUxCUkVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X3NldF9jbGVhcjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQlJFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X3NldF9jbGVhcihXZWJLaXRE
T01IVE1MQlJFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEJSRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxCUkVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1lbnRQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5OGQ0MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxCUkVsZW1l
bnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEJSRWxlbWVudFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MQlJFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxCUkVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01I
VE1MQlJFbGVtZW50KiB3cmFwSFRNTEJSRWxlbWVudChXZWJDb3JlOjpIVE1MQlJFbGVtZW50Kik7
CitXZWJLaXRET01IVE1MQlJFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEJSRWxlbWVudCopOwor
V2ViQ29yZTo6SFRNTEJSRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQlJFbGVtZW50Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxCUkVsZW1lbnRQ
cml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEJhc2VFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
MjlkMzUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1lbnQuY3BwCkBAIC0w
LDAgKzEsMjA4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEJhc2VFbGVt
ZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9CQVNFX0VMRU1FTlQoa2l0
KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxC
YXNlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01IVE1MQmFzZUVsZW1lbnQqIHdyYXBIVE1MQmFzZUVsZW1lbnQoV2ViQ29yZTo6SFRNTEJh
c2VFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0JBU0VfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0hUTUxfQkFTRV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAg
IGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRN
TEJhc2VFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJhc2VF
bGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3Jl
VGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3Jp
cHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBH
Q2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpI
VE1MQmFzZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQmFz
ZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktp
dERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVu
dCA9IHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZh
Y2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfYWRk
X2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LCB3ZWJraXRfZG9t
X2h0bWxfYmFzZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExF
TUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0hSRUYs
CisgICAgUFJPUF9UQVJHRVQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYmFz
ZV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxCYXNlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9CQVNFX0VMRU1FTlQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9IUkVGOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF9ocmVmKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFS
R0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF90YXJnZXQoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9C
QVNFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9IUkVGOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF9ocmVmKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfdGFyZ2V0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9iYXNlX2Vs
ZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfSFJFRiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJocmVm
IiwKKyAgICAgICAgICAgICJIVE1MQmFzZUVsZW1lbnQ6aHJlZiIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEJhc2VFbGVtZW50OmhyZWYiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
VEFSR0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRhcmdl
dCIsCisgICAgICAgICAgICAiSFRNTEJhc2VFbGVtZW50OnRhcmdldCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEJhc2VFbGVtZW50OnRhcmdldCIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEJhc2VF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRNTEJh
c2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQkFTRV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+aHJlZigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9iYXNlX2VsZW1lbnRfc2V0X2hyZWYoV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JB
U0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTEJhc2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRIcmVmKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X3RhcmdldChXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CQVNFX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGFyZ2V0
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Jh
c2VfZWxlbWVudF9zZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CQVNFX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxCYXNlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnRhcmdldEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
QmFzZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzliNmQwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJh
c2VFbGVtZW50LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEJh
c2VFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50X2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0JBU0VfRUxFTUVOVCAgICAg
ICAgICAgICh3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9CQVNFX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQkFTRV9FTEVNRU5U
LCBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQkFT
RV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JBU0VfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJhc2VF
bGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9CQVNFX0VMRU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfQkFTRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0JBU0Vf
RUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9CQVNFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfQkFTRV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JBU0VfRUxFTUVOVCwgV2ViS2l0RE9NSFRN
TEJhc2VFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxCYXNlRWxlbWVudCB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01IVE1MQmFzZUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1l
bnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2h0bWxfYmFzZV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9iYXNlX2VsZW1lbnRfZ2V0X2hyZWY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJh
c2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRNTEJh
c2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50
X3NldF9ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCYXNlRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
YmFzZV9lbGVtZW50X3NldF9ocmVmKFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50
X2dldF90YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9iYXNlX2VsZW1lbnRfZ2V0X3RhcmdldChXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfc2V0X3RhcmdldDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVu
dF9zZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxCYXNlRWxl
bWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEJhc2VFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjNiYjRkODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudFBy
aXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxCYXNlRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01IVE1MQmFzZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEJh
c2VFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxCYXNlRWxlbWVu
dC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxCYXNlRWxlbWVudCogd3Jh
cEhUTUxCYXNlRWxlbWVudChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqKTsKK1dlYktpdERPTUhU
TUxCYXNlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCopOworV2ViQ29yZTo6
SFRNTEJhc2VFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEJvZHlFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmIy
ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9keUVsZW1lbnQuY3BwCkBAIC0wLDAg
KzEsMzUyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50
KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQoa2l0KHN0
YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxCb2R5
RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRE
T01IVE1MQm9keUVsZW1lbnQqIHdyYXBIVE1MQm9keUVsZW1lbnQoV2ViQ29yZTo6SFRNTEJvZHlF
bGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX0hUTUxfQk9EWV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRy
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX2JvZHlfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlm
ICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEJv
ZHlFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJvZHlFbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFy
Z2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX2JvZHlfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRU
YXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwg
Z2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1M
Qm9keUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQm9keUVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERP
TUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9
IHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2h0bWxfYm9keV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LCB3ZWJraXRfZG9tX2h0
bWxfYm9keV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FfTElOSywK
KyAgICBQUk9QX0JBQ0tHUk9VTkQsCisgICAgUFJPUF9CR19DT0xPUiwKKyAgICBQUk9QX0xJTkss
CisgICAgUFJPUF9URVhULAorICAgIFBST1BfVl9MSU5LLAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxf
Qk9EWV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBj
YXNlIFBST1BfQV9MSU5LOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3Nl
dF9hX2xpbmsoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9CQUNLR1JPVU5EOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYm9k
eV9lbGVtZW50X3NldF9iYWNrZ3JvdW5kKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JnX2NvbG9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTElOSzoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfbGluayhzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RFWFQ6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3RleHQoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WX0xJ
Tks6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3ZfbGluayhzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0JP
RFlfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0FfTElOSzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYV9saW5rKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0JBQ0tHUk9VTkQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2JhY2tncm91bmQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2Jn
X2NvbG9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xJTks6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1l
bnRfZ2V0X2xpbmsoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVYVDoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2JvZHlf
ZWxlbWVudF9nZXRfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9W
X0xJTks6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9ib2R5X2VsZW1lbnRfZ2V0X3ZfbGluayhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRN
TEJvZHlFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9i
b2R5X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FfTElOSywKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhLWxpbmsiLAorICAgICAg
ICAgICAgIkhUTUxCb2R5RWxlbWVudDphLWxpbmsiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxCb2R5RWxlbWVudDphLWxpbmsiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkFDS0dS
T1VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJiYWNrZ3Jv
dW5kIiwKKyAgICAgICAgICAgICJIVE1MQm9keUVsZW1lbnQ6YmFja2dyb3VuZCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEJvZHlFbGVtZW50OmJhY2tncm91bmQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQkdfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiYmctY29sb3IiLAorICAgICAgICAgICAgIkhUTUxCb2R5RWxlbWVudDpiZy1j
b2xvciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEJvZHlFbGVtZW50OmJn
LWNvbG9yIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xJTkssCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAibGluayIsCisgICAgICAgICAgICAiSFRNTEJvZHlFbGVtZW50
OmxpbmsiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCb2R5RWxlbWVudDps
aW5rIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1RFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAidGV4dCIsCisgICAgICAgICAgICAiSFRNTEJvZHlFbGVtZW50OnRl
eHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCb2R5RWxlbWVudDp0ZXh0
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1ZfTElOSywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ2LWxpbmsiLAorICAgICAgICAgICAgIkhUTUxCb2R5RWxlbWVudDp2
LWxpbmsiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCb2R5RWxlbWVudDp2
LWxpbmsiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9p
bml0KFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dl
dF9hX2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaW5rQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYV9saW5rKFdl
YktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaW5rQXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYmFja2dy
b3VuZChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxC
b2R5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YmFja2dyb3VuZEF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JhY2tncm91
bmQoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YmFja2dyb3VuZEF0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRf
Z2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpiZ2NvbG9yQXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYmdf
Y29sb3IoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdjb2xvckF0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRf
Z2V0X2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmxpbmtBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9saW5rKFdlYktp
dERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmxpbmtBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF90ZXh0KFdlYktp
dERPTUhUTUxCb2R5RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0JPRFlfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjp0ZXh0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfdGV4dChXZWJLaXRET01IVE1MQm9keUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjp0ZXh0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfdl9saW5rKFdlYktpdERPTUhUTUxCb2R5
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
Ojp2bGlua0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9ib2R5X2VsZW1lbnRfc2V0X3ZfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9E
WV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjp2bGlua0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQm9keUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMGM2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEJvZHlFbGVtZW50LmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVm
aW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20u
aD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERP
TUhUTUxCb2R5RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudF9oCisK
KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CT0RZX0VMRU1F
TlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0JPRFlf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX0JPRFlfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CT0RZX0VMRU1FTlQsIFdlYktpdERPTUhU
TUxCb2R5RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVN
RU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0JPRFlfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9CT0RZX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQk9EWV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX0JPRFlfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CT0RZX0VMRU1FTlQsIFdlYktp
dERPTUhUTUxCb2R5RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MQm9keUVs
ZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhU
TUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9hX2xpbms6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEJvZHlFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2FfbGluayhXZWJL
aXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9i
b2R5X2VsZW1lbnRfc2V0X2FfbGluazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYV9saW5rKFdlYktpdERPTUhUTUxCb2R5RWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfYm9keV9lbGVtZW50X2dldF9iYWNrZ3JvdW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxCb2R5RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9iYWNrZ3JvdW5kKFdlYktp
dERPTUhUTUxCb2R5RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Jv
ZHlfZWxlbWVudF9zZXRfYmFja2dyb3VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9k
eUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYmFja2dyb3VuZChXZWJLaXRET01IVE1M
Qm9keUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYmdfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEJvZHlFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2JnX2NvbG9yKFdl
YktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2JvZHlfZWxlbWVudF9zZXRfYmdfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJv
ZHlFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxC
b2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9saW5rOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxCb2R5RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9saW5rKFdlYktpdERPTUhU
TUxCb2R5RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxl
bWVudF9zZXRfbGluazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2JvZHlfZWxlbWVudF9zZXRfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxl
bWVudF9nZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2JvZHlfZWxlbWVudF9nZXRfdGV4dChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3RleHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRf
c2V0X3RleHQoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3ZfbGluazoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2JvZHlfZWxl
bWVudF9nZXRfdl9saW5rKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfdl9saW5rOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF92X2xpbmso
V2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9keUVs
ZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkNTc0
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTEJvZHlFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxCb2R5
RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQm9keUVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50Lmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiB3cmFwSFRNTEJvZHlFbGVt
ZW50KFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCopOworV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MQm9keUVsZW1l
bnQqIGNvcmUoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudFByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTFmMjdiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudC5jcHAKQEAgLTAsMCArMSw2MzYg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdl
dC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCdXR0b25FbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WYWxp
ZGl0eVN0YXRlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEJ1dHRv
bkVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0JVVFRPTl9FTEVN
RU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3Jl
OjpIVE1MQnV0dG9uRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxC
dXR0b25FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHdyYXBIVE1MQnV0dG9uRWxlbWVu
dChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9CVVRUT05fRUxFTUVOVChn
X29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlVUVE9OX0VMRU1FTlQsICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
YWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjph
ZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfYnV0dG9uX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdP
YmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9o
dG1sX2J1dHRvbl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRf
bGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxf
YnV0dG9uX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBF
X1dJVEhfQ09ERShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9J
TlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FVVE9GT0NVUywK
KyAgICBQUk9QX0RJU0FCTEVELAorICAgIFBST1BfRk9STSwKKyAgICBQUk9QX0ZPUk1fQUNUSU9O
LAorICAgIFBST1BfRk9STV9FTkNUWVBFLAorICAgIFBST1BfRk9STV9NRVRIT0QsCisgICAgUFJP
UF9UWVBFLAorICAgIFBST1BfRk9STV9OT19WQUxJREFURSwKKyAgICBQUk9QX0ZPUk1fVEFSR0VU
LAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1ZBTFVFLAorICAgIFBST1BfV0lMTF9WQUxJREFU
RSwKKyAgICBQUk9QX1ZBTElESVRZLAorICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAg
IFBST1BfTEFCRUxTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9l
bGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNv
bnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhU
TUxCdXR0b25FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0JVVFRPTl9FTEVNRU5UKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQVVUT0ZP
Q1VTOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2F1dG9mb2N1
cyhzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X3NldF9kaXNhYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX0FDVElPTjoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX2FjdGlvbihzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fRU5DVFlQ
RToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX2VuY3R5
cGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9GT1JNX01FVEhPRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9l
bGVtZW50X3NldF9mb3JtX21ldGhvZChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9zZXRfYnV0dG9uX3R5cGUoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX05PX1ZBTElE
QVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fbm9f
dmFsaWRhdGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRk9STV9UQVJHRVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9i
dXR0b25fZWxlbWVudF9zZXRfZm9ybV90YXJnZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF92YWx1ZShzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9CVVRUT05f
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0FVVE9GT0NVUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9hdXRvZm9jdXMoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZGlzYWJsZWQoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STToKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zv
cm0oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9BQ1RJT046Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25f
ZWxlbWVudF9nZXRfZm9ybV9hY3Rpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfRk9STV9FTkNUWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX01FVEhPRDoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9m
b3JtX21ldGhvZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfZ2V0X2J1dHRvbl90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0ZPUk1fTk9fVkFMSURBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFs
dWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV9ub192YWxpZGF0ZShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX1RBUkdFVDoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X2dldF9mb3JtX3RhcmdldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsdWUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfV0lMTF9WQUxJREFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF93aWxsX3ZhbGlk
YXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElESVRZOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxl
bWVudF9nZXRfdmFsaWRpdHkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VkFMSURBVElPTl9NRVNTQUdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQUJFTFM6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9s
YWJlbHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X2J1dHRvbl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9GT0NVUywKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYXV0b2ZvY3VzIiwKKyAgICAgICAgICAg
ICJIVE1MQnV0dG9uRWxlbWVudDphdXRvZm9jdXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gSFRNTEJ1dHRvbkVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0RJU0FCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAg
ICJkaXNhYmxlZCIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6ZGlzYWJsZWQiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEJ1dHRvbkVsZW1lbnQ6ZGlzYWJs
ZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVu
dDpmb3JtIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
KiBIVE1MQnV0dG9uRWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9I
VE1MX0ZPUk1fRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0ZPUk1fQUNUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImZvcm0tYWN0aW9uIiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9u
RWxlbWVudDpmb3JtLWFjdGlvbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TEJ1dHRvbkVsZW1lbnQ6Zm9ybS1hY3Rpb24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STV9FTkNU
WVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImZvcm0tZW5j
dHlwZSIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybS1lbmN0eXBlIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQnV0dG9uRWxlbWVudDpmb3JtLWVuY3R5
cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STV9NRVRIT0QsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiZm9ybS1tZXRob2QiLAorICAgICAgICAgICAgIkhUTUxC
dXR0b25FbGVtZW50OmZvcm0tbWV0aG9kIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MQnV0dG9uRWxlbWVudDpmb3JtLW1ldGhvZCIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBF
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAg
ICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxCdXR0b25FbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9S
TV9OT19WQUxJREFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAiZm9ybS1uby12YWxpZGF0ZSIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9y
bS1uby12YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MQnV0
dG9uRWxlbWVudDpmb3JtLW5vLXZhbGlkYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk1f
VEFSR0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImZvcm0t
dGFyZ2V0IiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudDpmb3JtLXRhcmdldCIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybS10YXJn
ZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudDpu
YW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQnV0dG9uRWxlbWVudDpu
YW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgInZhbHVlIiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVu
dDp2YWx1ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEJ1dHRvbkVsZW1l
bnQ6dmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2lsbC12YWxpZGF0ZSIsCisgICAgICAg
ICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIEhUTUxCdXR0b25FbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9WQUxJRElUWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJ2YWxpZGl0eSIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6dmFs
aWRpdHkiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBI
VE1MQnV0dG9uRWxlbWVudDp2YWxpZGl0eSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
VkFMSURJVFlfU1RBVEUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAidmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAg
ICJIVE1MQnV0dG9uRWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnY2hhciogSFRNTEJ1dHRvbkVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTEFCRUxTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgImxhYmVscyIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6bGFiZWxz
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZUxpc3QqIEhUTUxCdXR0b25F
bGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNULAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfY2hlY2tfdmFsaWRpdHkoV2ViS2l0
RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0
b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmNoZWNrVmFsaWRpdHkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKGVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFcnJvciA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChlcnJvcik7CisgICAgaXRlbS0+c2V0Q3VzdG9tVmFsaWRpdHko
Y29udmVydGVkRXJyb3IpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9jbGljayhXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxC
dXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmNsaWNr
KCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfYXV0
b2ZvY3VzKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0ciwg
dmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0
X2Rpc2FibGVkKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZGlzYWJsZWQo
V2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0ciwg
dmFsdWUpOworfQorCitXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF9i
dXR0b25fZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50PiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmZvcm1B
Y3Rpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
YnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fYWN0aW9uKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0Rm9ybUFjdGlvbihjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZShXZWJL
aXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9u
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5mb3JtRW5jdHlwZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9l
bmN0eXBlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0Rm9y
bUVuY3R5cGUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50X2dldF9mb3JtX21ldGhvZChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5mb3JtTWV0aG9kKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX21ldGhvZChXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEZvcm1NZXRob2QoY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9idXR0b25fdHlw
ZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
QnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50eXBlKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9idXR0b25f
dHlwZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFR5cGUo
Y29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X2Zvcm1fbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxm
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmb3Jtbm92YWxpZGF0ZUF0
dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X3NldF9mb3JtX25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVU
VE9OX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpmb3Jtbm92YWxpZGF0ZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV90YXJnZXQoV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9CVVRUT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmZvcm10YXJnZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fdGFyZ2V0KFdl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZvcm10YXJnZXRBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1l
bnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0
ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2J1dHRvbl9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFs
dWVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
YnV0dG9uX2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRP
Tl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnZhbHVlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9C
VVRUT05fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0
ZW0tPndpbGxWYWxpZGF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTVZh
bGlkaXR5U3RhdGUqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsaWRpdHko
V2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1
dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6OlZhbGlkaXR5U3RhdGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT52YWxp
ZGl0eSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25f
bWVzc2FnZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWxpZGF0aW9uTWVzc2FnZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9sYWJlbHMoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bGFiZWxzKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjgxNWQzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0
b25FbGVtZW50LmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRfaAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRN
TEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlVUVE9OX0VMRU1F
TlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CVVRUT05fRUxFTUVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9C
VVRUT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfQlVUVE9OX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlVUVE9OX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9CVVRUT05fRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CVVRUT05fRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CVVRUT05fRUxF
TUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CVVRUT05fRUxFTUVOVF9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9CVVRUT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRDbGFzcykpCisK
K3N0cnVjdCBfV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxF
bGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1l
bnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X2dldF9hdXRvZm9jdXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2F1dG9mb2N1cyhXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X3NldF9hdXRvZm9jdXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9hdXRvZm9jdXMoV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dl
dF9kaXNhYmxlZChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0
X2Rpc2FibGVkKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfYnV0dG9uX3R5cGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X2dldF9idXR0b25fdHlwZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9idXR0b25fdHlwZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfc2V0X2J1dHRvbl90eXBlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxl
bWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRf
bmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0
dG9uX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X2dldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0
X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9i
dXR0b25fZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9l
bGVtZW50X2dldF93aWxsX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0
b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRl
KFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWY5NTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEJ1dHRvbkVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogd3JhcEhUTUxCdXR0b25F
bGVtZW50KFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Kik7CitXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Kik7CitXZWJDb3JlOjpIVE1M
QnV0dG9uRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFVuc3RhYmxlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lNjFjMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRVbnN0YWJsZV9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYg
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X3NldF9jdXN0b21fdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnQKKyAqIEBlcnJvcjogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3Nl
dF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X2NsaWNrOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9idXR0b25fZWxlbWVudF9jbGljayhXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX2FjdGlv
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX2FjdGlvbihX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX2FjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfc2V0X2Zvcm1fYWN0aW9uKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25f
ZWxlbWVudF9nZXRfZm9ybV9lbmN0eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0
b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX2VuY3R5
cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX2VuY3R5cGUoV2ViS2l0
RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX21ldGhvZDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX21ldGhvZChXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X3NldF9mb3JtX21ldGhvZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
c2V0X2Zvcm1fbWV0aG9kKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9n
ZXRfZm9ybV9ub192YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X2Zvcm1fbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9u
b192YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fbm9f
dmFsaWRhdGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fdGFy
Z2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fdGFyZ2V0
KFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9zZXRfZm9ybV90YXJnZXQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X2dldF92YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVmFs
aWRpdHlTdGF0ZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01WYWxpZGl0eVN0YXRlKgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dl
dF92YWxpZGl0eShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2U6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdl
KFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2xhYmVsczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NTm9kZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0
X2xhYmVscyhXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTdkMjE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBv
cnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0NBTlZB
U19FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVu
dCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHdyYXBIVE1MQ2FudmFz
RWxlbWVudChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9DQU5WQVNfRUxF
TUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFTX0VMRU1FTlQsICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZl
bnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2
ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRG
b3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRU
YXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0
X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfY2FudmFzX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklO
RV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCwgd2Via2l0X2RvbV9o
dG1sX2NhbnZhc19lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExF
TUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1dJRFRI
LAorICAgIFBST1BfSEVJR0hULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Nh
bnZhc19lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dERPTUhUTUxDYW52YXNFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0NBTlZBU19FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
V0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfd2lkdGgo
c2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0
X2hlaWdodChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF93aWR0aChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfaGVpZ2h0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9jYW52YXNf
ZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgIkhUTUxDYW52YXNFbGVtZW50
OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxDYW52YXNFbGVtZW50
OndpZHRoIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAg
ICAgICAgICJIVE1MQ2FudmFzRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2xvbmcgSFRNTENhbnZhc0VsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9pbml0KFdl
YktpdERPTUhUTUxDYW52YXNFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShy
ZXF1ZXN0KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF93
aWR0aChXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0NBTlZBU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MQ2FudmFzRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyBy
ZXN1bHQgPSBpdGVtLT53aWR0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MQ2FudmFz
RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0NBTlZBU19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRXaWR0aCh2YWx1ZSk7Cit9
CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktp
dERPTUhUTUxDYW52YXNFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQ0FOVkFTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0
ZW0tPmhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2NhbnZhc19lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQq
IHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9DQU5WQVNf
RUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SGVpZ2h0KHZhbHVlKTsKK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDU2N2YKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LmgKQEAgLTAsMCArMSw5MCBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01I
VE1MQ2FudmFzRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9DQU5WQVNfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfY2Fu
dmFzX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0NBTlZBU19F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX0NBTlZBU19FTEVNRU5ULCBXZWJLaXRET01IVE1MQ2FudmFz
RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9DQU5WQVNfRUxFTUVOVF9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9DQU5WQVNfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0NBTlZBU19FTEVNRU5UKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0NB
TlZBU19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0NBTlZBU19FTEVNRU5U
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX0NBTlZBU19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0NB
TlZBU19FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NBTlZBU19FTEVNRU5ULCBXZWJLaXRET01IVE1M
Q2FudmFzRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVu
dCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1M
RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxDYW52YXNFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VC
S0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF93aWR0aChX
ZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2NhbnZhc19lbGVtZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
Q2FudmFzRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhU
TUxDYW52YXNFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2NhbnZhc19lbGVtZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRf
QVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJL
aXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2NhbnZhc19lbGVtZW50X3NldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTENh
bnZhc0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRN
TENhbnZhc0VsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMWE5ODMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TENhbnZhc0VsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTENhbnZhc0VsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogd3JhcEhUTUxDYW52YXNF
bGVtZW50KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Kik7CitXZWJLaXRET01IVE1MQ2FudmFz
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxDb2xsZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjhj
ZDdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5jcHAKQEAgLTAsMCAr
MSwxNjUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvbi5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OX0dFVF9QUklWQVRF
KG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfQ09MTEVDVElPTiwgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlIHsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb24+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTUhUTUxDb2xsZWN0
aW9uUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxDb2xsZWN0
aW9uKiBraXQoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIG9iaikKK3sKKyAgICBpZiAoIW9iaikK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2Fj
aGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0NPTExFQ1RJT04o
cmV0KTsKKworICAgIHJldHVybiB3cmFwKG9iaik7Cit9CisKK1dlYkNvcmU6OkhUTUxDb2xsZWN0
aW9uKiBjb3JlKFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qPihXRUJLSVRf
RE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1M
Q29sbGVjdGlvbiogd3JhcEhUTUxDb2xsZWN0aW9uKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX0NPTExFQ1RJT04oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0NP
TExFQ1RJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24sIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9I
VE1MX0NPTExFQ1RJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5X
ZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX2h0bWxfY29sbGVjdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogc2VsZiA9IFdFQktJ
VF9ET01fSFRNTF9DT0xMRUNUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fY29uc3Ry
dWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0
Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2Jq
ZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAg
cHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKj4o
V0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlv
bl9jbGFzc19pbml0KFdlYktpdERPTUhUTUxDb2xsZWN0aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6
ZW9mKFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+
Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZmlu
YWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
Y29sbGVjdGlvbl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAg
ICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAg
ICAgICJIVE1MQ29sbGVjdGlvbjpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxv
bmcgSFRNTENvbGxlY3Rpb246bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pbml0KFdlYktpdERPTUhUTUxDb2xsZWN0aW9u
KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlKCk7Cit9CisKK1dlYktpdERP
TU5vZGUqIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2l0ZW0oV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24qIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0NPTExFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Vi
a2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fbmFtZWRfaXRlbShXZWJLaXRET01IVE1MQ29sbGVjdGlv
biogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9DT0xMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1l
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+bmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0
bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThkNGJlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtp
dGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0NP
TExFQ1RJT04gICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0NPTExFQ1RJT04ob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09M
TEVDVElPTiwgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfQ09MTEVDVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLCBXZWJLaXRET01IVE1MQ29s
bGVjdGlvbkNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9DT0xMRUNUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJ
T05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9DT0xM
RUNUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sIFdlYktpdERPTUhUTUxDb2xsZWN0aW9u
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxDb2xsZWN0aW9uIHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MQ29s
bGVjdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfdHlw
ZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKiBAaW5kZXg6IEEgI2d1bG9uZwor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVt
KFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX25hbWVkX2l0ZW06CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTU5vZGUqCit3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVtKFdlYktpdERP
TUhUTUxDb2xsZWN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRf
QVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbiogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MQ29sbGVjdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9u
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44ZmE4OTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
Q29sbGVjdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxDb2xsZWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxD
b2xsZWN0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24qIHdyYXBIVE1MQ29sbGVjdGlvbihXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiopOworV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qIGtpdChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiopOworV2ViQ29y
ZTo6SFRNTENvbGxlY3Rpb24qIGNvcmUoV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qKTsKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxETGlzdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIx
ODFiYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQuY3BwCkBAIC0w
LDAgKzEsMTcwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudC5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4K
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxETGlzdEVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJLaXRET01IVE1MRExpc3RFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTERMaXN0
RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRF9MSVNUX0VMRU1F
TlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6
OkhUTUxETGlzdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxETGlz
dEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01IVE1MRExpc3RFbGVtZW50KiB3cmFwSFRNTERMaXN0RWxlbWVudChXZWJD
b3JlOjpIVE1MRExpc3RFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0RfTElTVF9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9EX0xJU1RfRUxFTUVOVCwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6
OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2Vi
Q29yZTo6SFRNTERMaXN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxETGlzdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0
ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RfbGlzdF9l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VD
YXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkK
K3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2Vs
ZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVu
dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdl
YktpdERPTUhUTUxETGlzdEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudCwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DT01QQUNULAorfTsKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfRF9MSVNUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZF9s
aXN0X2VsZW1lbnRfc2V0X2NvbXBhY3Qoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVt
ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxETGlzdEVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRF9MSVNUX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1l
bnRfZ2V0X2NvbXBhY3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTERMaXN0RWxl
bWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9kX2xpc3Rf
ZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09NUEFDVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY29tcGFjdCIsCisgICAgICAg
ICAgICAiSFRNTERMaXN0RWxlbWVudDpjb21wYWN0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdib29sZWFuIEhUTUxETGlzdEVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MRExpc3RF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2dldF9jb21wYWN0KFdlYktpdERP
TUhUTUxETGlzdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9EX0xJU1RfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxETGlzdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmNvbXBhY3RBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9kX2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdChXZWJLaXRET01IVE1MRExpc3RFbGVt
ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
RF9MSVNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmNvbXBhY3RBdHRyLCB2YWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTERMaXN0RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1YTcyZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTERMaXN0RWxlbWVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAm
JiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJr
aXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdl
YktpdERPTUhUTUxETGlzdEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRExpc3RFbGVt
ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0Rf
TElTVF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRF9MSVNUX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRF9MSVNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfRF9MSVNUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRF9MSVNU
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX0RfTElTVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RfTElTVF9FTEVNRU5UKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0RfTElTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0Rf
TElTVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RfTElTVF9FTEVNRU5UX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX0RfTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRExpc3RFbGVtZW50Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQgeworICAgIFdlYktpdERP
TUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRN
TERMaXN0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVu
dF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9kX2xpc3Rf
ZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZF9saXN0
X2VsZW1lbnRfZ2V0X2NvbXBhY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERMaXN0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdChXZWJLaXRET01I
VE1MRExpc3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZF9saXN0
X2VsZW1lbnRfc2V0X2NvbXBhY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERMaXN0RWxl
bWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTERM
aXN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxETGlzdEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnRQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjZmVmNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxETGlz
dEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRExpc3RFbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitXZWJLaXRET01IVE1MRExpc3RFbGVtZW50KiB3cmFwSFRNTERMaXN0RWxlbWVudChXZWJD
b3JlOjpIVE1MRExpc3RFbGVtZW50Kik7CitXZWJLaXRET01IVE1MRExpc3RFbGVtZW50KiBraXQo
V2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCopOworV2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCog
Y29yZShXZWJLaXRET01IVE1MRExpc3RFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDAzNmFmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjEy
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFt
ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKERFVEFJTFNf
RUxFTUVOVCkKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxEZXRhaWxzRWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCogb2JqKQoreworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfREVUQUlMU19FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqIGNvcmUo
V2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTERl
dGFpbHNFbGVtZW50KiB3cmFwSFRNTERldGFpbHNFbGVtZW50KFdlYkNvcmU6OkhUTUxEZXRhaWxz
RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9ERVRBSUxTX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9IVE1MX0RFVEFJTFNfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShERVRBSUxTX0VMRU1FTlQpCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZGV0
YWlsc19lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKERF
VEFJTFNfRUxFTUVOVCkKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsK
KyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkRldGFpbHMgRWxlbWVudCIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVO
QUJMRShERVRBSUxTX0VMRU1FTlQpCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfZGV0YWlsc19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9v
bGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCisgICAgV2Vi
Q29yZTo6SFRNTERldGFpbHNFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTERldGFpbHNFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVO
VVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJEZXRhaWxzIEVsZW1lbnQiKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFC
TEUoREVUQUlMU19FTEVNRU5UKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X2RldGFpbHNfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgIFdl
YkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxEZXRhaWxzRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVF
dmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAg
IFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAg
ICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiRGV0YWlscyBFbGVtZW50IikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8g
RU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBp
ZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfZGV0YWlsc19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERP
TUhUTUxEZXRhaWxzRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudCwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9E
T01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitl
bnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9PUEVOLAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9N
X0hUTUxfREVUQUlMU19FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfT1BFTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2RldGFpbHNf
ZWxlbWVudF9zZXRfb3BlbihzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2dl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9ERVRBSUxTX0VMRU1FTlQob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9PUEVOOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2dl
dF9vcGVuKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9kZXRhaWxzX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAg
IGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxl
bWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1BFTiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAib3BlbiIsCisgICAgICAgICAgICAiSFRN
TERldGFpbHNFbGVtZW50Om9wZW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4g
SFRNTERldGFpbHNFbGVtZW50Om9wZW4iLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX2RldGFpbHNfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCog
cmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdl
YmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0X29wZW4oV2ViS2l0RE9NSFRNTERldGFp
bHNFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9ERVRBSUxTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om9wZW5BdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiRGV0YWlscyBFbGVtZW50IikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShERVRBSUxTX0VMRU1FTlQpICovCit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9zZXRfb3BlbihXZWJLaXRET01I
VE1MRGV0YWlsc0VsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShE
RVRBSUxTX0VMRU1FTlQpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RFVEFJTFNfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpvcGVuQXR0ciwgdmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJEZXRhaWxzIEVsZW1lbnQiKQorI2VuZGlmIC8qIEVOQUJMRShERVRBSUxTX0VMRU1F
TlQpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxEZXRhaWxzRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjY0MjE2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudC5oCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTERldGFp
bHNFbGVtZW50X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfREVUQUlM
U19FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RFVEFJTFNfRUxFTUVOVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9ERVRBSUxTX0VMRU1FTlQsIFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9ERVRBSUxTX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfREVU
QUlMU19FTEVNRU5ULCBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRDbGFzcykKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19IVE1MX0RFVEFJTFNfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ERVRBSUxTX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfREVUQUlMU19FTEVNRU5UX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0RFVEFJTFNfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9ERVRBSUxT
X0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfREVUQUlMU19FTEVNRU5ULCBXZWJLaXRET01IVE1MRGV0
YWlsc0VsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50
IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1M
RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9nZXRfb3BlbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MRGV0YWlsc0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9nZXRfb3BlbihXZWJLaXRET01IVE1MRGV0YWlsc0Vs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRf
c2V0X29wZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfc2V0X29wZW4oV2Vi
S2l0RE9NSFRNTERldGFpbHNFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRGV0YWlsc0VsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudFByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTAxOWFkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwz
NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MRGV0YWlsc0VsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTERldGFpbHNF
bGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxEZXRhaWxzRWxlbWVudC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQuaD4KKyNp
ZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TUhUTUxEZXRhaWxzRWxlbWVudCogd3JhcEhUTUxEZXRhaWxzRWxlbWVudChXZWJDb3JlOjpIVE1M
RGV0YWlsc0VsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxEZXRhaWxzRWxlbWVudCopOworV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50KiBj
b3JlKFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvKiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKSAqLworCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTERldGFpbHNFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxEaXJlY3RvcnlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTFkOGIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUg
IkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlF
bGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9ESVJFQ1RPUllfRUxF
TUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29y
ZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1l
bnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MRGlyZWN0b3J5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50KiB3cmFwSFRN
TERpcmVjdG9yeUVsZW1lbnQoV2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfRElSRUNUT1JZX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0RJ
UkVDVE9SWV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2RpcmVjdG9yeV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYg
KCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRGly
ZWN0b3J5RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEaXJl
Y3RvcnlFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0
aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxE
aXJlY3RvcnlFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERp
cmVjdG9yeUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VD
YXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2Uq
IGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9k
aXJlY3RvcnlfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2FkZF9ldmVudF9saXN0
ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1s
X2RpcmVjdG9yeV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQsIHdlYmtpdF9kb21f
aHRtbF9kaXJlY3RvcnlfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19J
TVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9D
T01QQUNULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVt
ZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxE
aXJlY3RvcnlFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09N
UEFDVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X3NldF9jb21w
YWN0KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCogc2VsZiA9
IFdFQktJVF9ET01fSFRNTF9ESVJFQ1RPUllfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIGdfdmFsdWVf
c2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9nZXRf
Y29tcGFjdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfZGlyZWN0b3J5X2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxl
bWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X3NldF9wcm9wZXJ0
eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9kaXJl
Y3RvcnlfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09NUEFDVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY29tcGFjdCIsCisg
ICAgICAgICAgICAiSFRNTERpcmVjdG9yeUVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRGlyZWN0b3J5RWxlbWVudDpjb21wYWN0IiwKKyAgICAg
ICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9pbml0KFdl
YktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJB
TShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVt
ZW50X2dldF9jb21wYWN0KFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVt
ZW50X3NldF9jb21wYWN0KFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50KiBzZWxmLCBnYm9v
bGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRElSRUNUT1JZX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpjb21wYWN0QXR0ciwgdmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxEaXJlY3RvcnlFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM3YWM5YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20v
d2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxE
aXJlY3RvcnlFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9k
aXJlY3RvcnlfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRElS
RUNUT1JZX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxEaXJlY3RvcnlFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RJUkVDVE9S
WV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5ULCBXZWJLaXRET01IVE1M
RGlyZWN0b3J5RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRElSRUNU
T1JZX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfRElSRUNUT1JZX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElSRUNUT1JZX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRElSRUNUT1JZX0VMRU1FTlRfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQsIFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50IHsKKyAgICBX
ZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktp
dERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9o
dG1sX2RpcmVjdG9yeV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9nZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MRGlyZWN0b3J5RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVu
dF9nZXRfY29tcGFjdChXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X3NldF9jb21wYWN0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50CisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kaXJlY3Rv
cnlfZWxlbWVudF9zZXRfY29tcGFjdChXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9N
SFRNTERpcmVjdG9yeUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50UHJpdmF0ZS5oCnNpbWlsYXJpdHkg
aW5kZXggNjclCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZS5oCnJlbmFtZSB0
byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50UHJpdmF0ZS5oCmluZGV4IDI2OGViZmEuLmY3MDFk
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TERpcmVjdG9yeUVsZW1lbnRQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3JQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3JQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRQcml2YXRlX2gKIAotI2lu
Y2x1ZGUgIlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRGlyZWN0
b3J5RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRGlyZWN0b3J5
RWxlbWVudC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RFdmVudENvbnN0
cnVjdG9yKiB3cmFwVGVzdEV2ZW50Q29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3Ry
dWN0b3IqKTsKLVdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVz
dEV2ZW50Q29uc3RydWN0b3IqKTsKLVdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3Jl
KFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKik7CitXZWJLaXRET01IVE1MRGlyZWN0b3J5
RWxlbWVudCogd3JhcEhUTUxEaXJlY3RvcnlFbGVtZW50KFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlF
bGVtZW50Kik7CitXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCoga2l0KFdlYkNvcmU6OkhU
TUxEaXJlY3RvcnlFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxlbWVudCogY29y
ZShXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGVfaCAqLwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxEaXZFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOThjNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxEaXZFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxEaXZFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MRGl2
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fSFRNTF9ESVZfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9k
ZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9N
SFRNTERpdkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxEaXZFbGVtZW50KiB3cmFwSFRN
TERpdkVsZW1lbnQoV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAg
QVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRElWX0VMRU1F
TlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0RJVl9FTEVNRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVu
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdl
YktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNv
cmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2FkZF9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkhUTUxEaXZFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TERpdkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNl
LT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9kaXNwYXRjaF9l
dmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2Rp
dl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5l
cjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQs
IHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVO
VCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAg
UFJPUF9BTElHTiwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVu
dF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRGl2
RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9ESVZfRUxFTUVOVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X2Rpdl9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhU
TUxEaXZFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RJVl9FTEVNRU5UKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVu
dF9nZXRfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX2Rpdl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAgICJIVE1MRGl2RWxlbWVu
dDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTERpdkVsZW1lbnQ6
YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2lu
aXQoV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2dldF9h
bGlnbihXZWJLaXRET01IVE1MRGl2RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0RJVl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRGl2
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhU
TUxEaXZFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0RJVl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxEaXZFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEaXZFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyOTY3YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20v
d2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRET01IVE1MRGl2RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxEaXZFbGVt
ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJ
Vl9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRElWX0VMRU1FTlQob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
RElWX0VMRU1FTlQsIFdlYktpdERPTUhUTUxEaXZFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX0RJVl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RJVl9FTEVNRU5ULCBXZWJLaXRET01I
VE1MRGl2RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRElWX0VMRU1F
TlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRElWX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
RElWX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElWX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfRElWX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElWX0VMRU1FTlQsIFdlYktpdERPTUhU
TUxEaXZFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxEaXZFbGVtZW50IHsK
KyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxEaXZFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9o
dG1sX2Rpdl9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9kaXZfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERpdkVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MRGl2RWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X3NldF9h
bGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRGl2RWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZGl2X2Vs
ZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxEaXZFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTERpdkVs
ZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGl2RWxlbWVudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTERpdkVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZjU3ZjEzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRQcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MRGl2RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MRGl2RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRGl2RWxl
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxEaXZFbGVtZW50KiB3cmFwSFRNTERp
dkVsZW1lbnQoV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxEaXZFbGVt
ZW50KiBraXQoV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxEaXZFbGVt
ZW50KiBjb3JlKFdlYktpdERPTUhUTUxEaXZFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxEaXZFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEb2N1bWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU0NGVmMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTERvY3VtZW50LmNwcApAQCAtMCwwICsxLDQyOSBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRU
YXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRG9jdW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01IVE1MRG9jdW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIG9iaikKK3sK
KyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0RPQ1VNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTERvY3VtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERvY3VtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTERvY3VtZW50KiB3cmFwSFRN
TERvY3VtZW50KFdlYkNvcmU6OkhUTUxEb2N1bWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9ET0NVTUVOVChnX29i
amVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRE9DVU1FTlQsICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2
ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdl
YkNvcmU6OkhUTUxEb2N1bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxEb2N1bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
Y29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlv
bi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRG9jdW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBo
YW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEb2N1bWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdP
YmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlm
YWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRE
T01IVE1MRG9jdW1lbnQsIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudCwgV0VCS0lUX0RPTV9UWVBF
X0RPQ1VNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RB
UkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1Bf
MCwKKyAgICBQUk9QX1dJRFRILAorICAgIFBST1BfSEVJR0hULAorICAgIFBST1BfRElSLAorICAg
IFBST1BfQkdfQ09MT1IsCisgICAgUFJPUF9GR19DT0xPUiwKKyAgICBQUk9QX0FMSU5LX0NPTE9S
LAorICAgIFBST1BfTElOS19DT0xPUiwKKyAgICBQUk9QX1ZMSU5LX0NPTE9SLAorfTsKKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiA9IFdFQktJVF9ET01f
SFRNTF9ET0NVTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX0RJUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9kaXIo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9CR19DT0xPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9i
Z19jb2xvcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0ZHX0NPTE9SOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZG9jdW1l
bnRfc2V0X2ZnX2NvbG9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxJTktfQ09MT1I6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9kb2N1bWVudF9zZXRfYWxpbmtfY29sb3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MSU5LX0NPTE9SOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2xpbmtfY29sb3Ioc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WTElOS19D
T0xPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF92bGlua19jb2xvcihz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRE9DVU1F
TlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9X
SURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9I
RUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9nZXRfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0RJUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2RvY3VtZW50X2dldF9kaXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QkdfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9kb2N1bWVudF9nZXRfYmdfY29sb3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRkdfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZmdfY29sb3Ioc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQUxJTktfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfYWxpbmtfY29sb3Ioc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTElOS19DT0xPUjoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9saW5r
X2NvbG9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZMSU5LX0NPTE9S
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfZ2V0X3ZsaW5rX2NvbG9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxEb2N1bWVu
dENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19s
b25nKAorICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MRG9jdW1lbnQ6d2lk
dGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MRG9jdW1lbnQ6d2lkdGgiLAor
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRN
TERvY3VtZW50OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIEhUTUxEb2N1
bWVudDpoZWlnaHQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVIs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGlyIiwKKyAgICAg
ICAgICAgICJIVE1MRG9jdW1lbnQ6ZGlyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MRG9jdW1lbnQ6ZGlyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JHX0NPTE9SLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImJnLWNvbG9yIiwKKyAgICAgICAg
ICAgICJIVE1MRG9jdW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxEb2N1bWVudDpiZy1jb2xvciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GR19DT0xPUiwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmZy1jb2xvciIsCisg
ICAgICAgICAgICAiSFRNTERvY3VtZW50OmZnLWNvbG9yIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MRG9jdW1lbnQ6ZmctY29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJ
TktfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxp
bmstY29sb3IiLAorICAgICAgICAgICAgIkhUTUxEb2N1bWVudDphbGluay1jb2xvciIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTERvY3VtZW50OmFsaW5rLWNvbG9yIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0xJTktfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAibGluay1jb2xvciIsCisgICAgICAgICAgICAiSFRNTERvY3VtZW50Omxp
bmstY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxEb2N1bWVudDps
aW5rLWNvbG9yIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZMSU5LX0NPTE9SLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZsaW5rLWNvbG9yIiwKKyAgICAgICAgICAg
ICJIVE1MRG9jdW1lbnQ6dmxpbmstY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxEb2N1bWVudDp2bGluay1jb2xvciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZG9jdW1lbnRfaW5pdChXZWJLaXRET01IVE1MRG9jdW1lbnQqIHJlcXVlc3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9jbG9zZShXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2xvc2UoKTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2xlYXIoV2ViS2l0RE9NSFRNTERvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPmNsZWFyKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2NhcHR1
cmVfZXZlbnRzKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jYXB0dXJlRXZlbnRzKCk7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3JlbGVhc2VfZXZlbnRzKFdlYktpdERP
TUhUTUxEb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5yZWxlYXNlRXZlbnRzKCk7Cit9CisKK2dsb25nIHdlYmtpdF9k
b21faHRtbF9kb2N1bWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
bG9uZyByZXN1bHQgPSBpdGVtLT53aWR0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxEb2N1
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+aGVpZ2h0KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZGlyKFdlYktp
dERPTUhUTUxEb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+ZGlyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2RvY3VtZW50X3NldF9kaXIoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldERp
cihjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRf
Z2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YmdDb2xvcigpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfYmdfY29sb3IoV2ViS2l0
RE9NSFRNTERvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEJnQ29sb3IoY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9mZ19jb2xvcihXZWJLaXRET01IVE1M
RG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmZnQ29sb3IoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfZG9jdW1lbnRfc2V0X2ZnX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTERv
Y3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRG
Z0NvbG9yKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9kb2N1
bWVudF9nZXRfYWxpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hbGlua0NvbG9yKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9hbGlu
a19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QWxpbmtDb2xvcihjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2xpbmtf
Y29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5saW5rQ29sb3IoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2xpbmtfY29sb3IoV2ViS2l0RE9N
SFRNTERvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldExpbmtDb2xvcihjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3ZsaW5rX2NvbG9yKFdlYktpdERPTUhU
TUxEb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+dmxpbmtDb2xvcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9kb2N1bWVudF9zZXRfdmxpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RP
Q1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldFZsaW5rQ29sb3IoY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxEb2N1bWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44ZTY3ZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9j
dW1lbnQuaApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxE
SU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUg
aW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTERvY3Vt
ZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTERvY3VtZW50X2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURvY3VtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0RPQ1VNRU5UICAgICAgICAgICAgKHdlYmtpdF9k
b21faHRtbF9kb2N1bWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRE9D
VU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRE9DVU1FTlQsIFdlYktpdERPTUhUTUxEb2N1bWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9ET0NVTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NVTUVOVCwg
V2ViS2l0RE9NSFRNTERvY3VtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9E
T0NVTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NVTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9ET0NVTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NVTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9ET0NVTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NVTUVOVCwgV2ViS2l0RE9NSFRNTERvY3VtZW50
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxEb2N1bWVudCB7CisgICAgV2ViS2l0RE9N
RG9jdW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MRG9j
dW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NRG9jdW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2Nsb3NlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2xvc2UoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2xlYXI6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9kb2N1bWVudF9jbGVhcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jYXB0dXJlX2V2ZW50czoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2NhcHR1cmVfZXZlbnRzKFdlYktpdERPTUhUTUxEb2N1
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3JlbGVhc2Vf
ZXZlbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfcmVsZWFzZV9ldmVudHMoV2Vi
S2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoK
KyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21f
aHRtbF9kb2N1bWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2hlaWdodDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitX
RUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2hlaWdodChXZWJL
aXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1
bWVudF9nZXRfZGlyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfZG9jdW1lbnRfZ2V0X2RpcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfZGlyOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxEb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2RpcihXZWJLaXRET01IVE1MRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X2dldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9j
dW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfYmdfY29s
b3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9z
ZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZmdfY29sb3I6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRf
ZmdfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2ZnX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxEb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2ZnX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfZG9jdW1lbnRfZ2V0X2FsaW5rX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxE
b2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2FsaW5rX2NvbG9yKFdlYktpdERPTUhUTUxE
b2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9h
bGlua19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50X3NldF9hbGlua19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9s
aW5rX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
ZG9jdW1lbnRfZ2V0X2xpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2xpbmtfY29sb3I6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfbGlua19jb2xv
cihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF92bGlua19jb2xvcjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF92bGlua19j
b2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9kb2N1bWVudF9zZXRfdmxpbmtfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TERvY3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfdmxpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERv
Y3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTERvY3VtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERv
Y3VtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxYzNjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTERvY3VtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTERvY3VtZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxEb2N1bWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTERvY3Vt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTERvY3VtZW50KiB3cmFw
SFRNTERvY3VtZW50KFdlYkNvcmU6OkhUTUxEb2N1bWVudCopOworV2ViS2l0RE9NSFRNTERvY3Vt
ZW50KiBraXQoV2ViQ29yZTo6SFRNTERvY3VtZW50Kik7CitXZWJDb3JlOjpIVE1MRG9jdW1lbnQq
IGNvcmUoV2ViS2l0RE9NSFRNTERvY3VtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxEb2N1bWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzc4OGIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRWxlbWVudC5jcHAKQEAgLTAsMCArMSw2NDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxl
bWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEVsZW1lbnQqIG9iaikK
K3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdl
YkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxFbGVtZW50KiBjb3JlKFdl
YktpdERPTUhUTUxFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MRWxlbWVudCogd3JhcEhUTUxF
bGVtZW50KFdlYkNvcmU6OkhUTUxFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0VMRU1FTlQoZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOwor
ICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6
SFRNTEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5h
bWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29s
ZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7
CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZGlz
cGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MRWxlbWVudCwgd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULCBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RJVExFLAor
ICAgIFBST1BfTEFORywKKyAgICBQUk9QX1RSQU5TTEFURSwKKyAgICBQUk9QX0RJUiwKKyAgICBQ
Uk9QX1RBQl9JTkRFWCwKKyAgICBQUk9QX0RSQUdHQUJMRSwKKyAgICBQUk9QX1dFQktJVERST1Ba
T05FLAorICAgIFBST1BfSElEREVOLAorICAgIFBST1BfQUNDRVNTX0tFWSwKKyAgICBQUk9QX0lO
TkVSX1RFWFQsCisgICAgUFJPUF9PVVRFUl9URVhULAorICAgIFBST1BfQ09OVEVOVF9FRElUQUJM
RSwKKyAgICBQUk9QX0lTX0NPTlRFTlRfRURJVEFCTEUsCisgICAgUFJPUF9TUEVMTENIRUNLLAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX1RJVExFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9z
ZXRfdGl0bGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9MQU5HOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9z
ZXRfbGFuZyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1RSQU5TTEFURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfc2V0X3RyYW5zbGF0ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVI6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9l
bGVtZW50X3NldF9kaXIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9UQUJfSU5ERVg6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X3NldF90YWJfaW5kZXgoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRFJBR0dBQkxFOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9zZXRfZHJhZ2dhYmxlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4o
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVERST1BaT05FOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfd2Via2l0ZHJvcHpvbmUoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9ISURERU46CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9oaWRkZW4oc2Vs
ZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQUNDRVNTX0tFWToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2Fj
Y2Vzc19rZXkoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9JTk5FUl9URVhUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZWxl
bWVudF9zZXRfaW5uZXJfdGV4dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxs
cHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09VVEVSX1RFWFQ6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9vdXRlcl90ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Q09OVEVOVF9FRElUQUJMRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2Nv
bnRlbnRfZWRpdGFibGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUEVMTENIRUNLOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfc3BlbGxjaGVjayhzZWxmLCBnX3ZhbHVlX2dldF9ib29s
ZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRWxl
bWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVElUTEU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90aXRsZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQU5HOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfbGFuZyhzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UUkFOU0xBVEU6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90cmFu
c2xhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElSOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRf
ZGlyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RBQl9JTkRFWDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0
X3RhYl9pbmRleChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EUkFHR0FC
TEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF9kcmFnZ2FibGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0VCS0lURFJPUFpPTkU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X2dldF93ZWJraXRkcm9wem9uZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9ISURERU46CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9oaWRkZW4oc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUNDRVNTX0tFWToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2FjY2Vzc19rZXko
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5ORVJfVEVYVDoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0
X2lubmVyX3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1VURVJf
VEVYVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfZ2V0X291dGVyX3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ09OVEVOVF9FRElUQUJMRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZWRpdGFibGUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSVNfQ09OVEVOVF9FRElUQUJMRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0
X2lzX2NvbnRlbnRfZWRpdGFibGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU1BFTExDSEVDSzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3NwZWxsY2hlY2soc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01I
VE1MRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3Byb3BlcnR5Owor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RJVExFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRpdGxlIiwKKyAgICAgICAgICAgICJIVE1MRWxl
bWVudDp0aXRsZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVsZW1lbnQ6
dGl0bGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJsYW5nIiwKKyAgICAgICAgICAgICJIVE1MRWxlbWVudDpsYW5n
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRWxlbWVudDpsYW5nIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1RSQU5TTEFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAidHJhbnNsYXRlIiwKKyAgICAgICAgICAgICJIVE1MRWxlbWVudDp0cmFu
c2xhdGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEVsZW1lbnQ6dHJh
bnNsYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJUiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJkaXIiLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OmRp
ciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVsZW1lbnQ6ZGlyIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1RBQl9JTkRFWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisg
ICAgICAgICAgICAidGFiLWluZGV4IiwKKyAgICAgICAgICAgICJIVE1MRWxlbWVudDp0YWItaW5k
ZXgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTEVsZW1lbnQ6dGFiLWluZGV4
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RSQUdHQUJMRSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZHJhZ2dhYmxlIiwKKyAg
ICAgICAgICAgICJIVE1MRWxlbWVudDpkcmFnZ2FibGUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2Jvb2xlYW4gSFRNTEVsZW1lbnQ6ZHJhZ2dhYmxlIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1dFQktJVERST1BaT05FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgIndlYmtpdGRyb3B6b25lIiwKKyAgICAgICAgICAgICJIVE1MRWxlbWVudDp3ZWJraXRkcm9w
em9uZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVsZW1lbnQ6d2Via2l0
ZHJvcHpvbmUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSElEREVOLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJoaWRkZW4iLAorICAgICAgICAgICAgIkhUTUxFbGVt
ZW50OmhpZGRlbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRWxlbWVu
dDpoaWRkZW4iLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUNDRVNTX0tFWSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhY2Nlc3Mta2V5IiwKKyAgICAgICAgICAg
ICJIVE1MRWxlbWVudDphY2Nlc3Mta2V5IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MRWxlbWVudDphY2Nlc3Mta2V5IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOTkVSX1RFWFQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaW5uZXItdGV4dCIs
CisgICAgICAgICAgICAiSFRNTEVsZW1lbnQ6aW5uZXItdGV4dCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEVsZW1lbnQ6aW5uZXItdGV4dCIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9PVVRFUl9URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
Im91dGVyLXRleHQiLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50Om91dGVyLXRleHQiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxFbGVtZW50Om91dGVyLXRleHQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQ09OVEVOVF9FRElUQUJMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJjb250ZW50LWVkaXRhYmxlIiwKKyAgICAgICAgICAgICJIVE1M
RWxlbWVudDpjb250ZW50LWVkaXRhYmxlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MRWxlbWVudDpjb250ZW50LWVkaXRhYmxlIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lTX0NP
TlRFTlRfRURJVEFCTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAg
ICAgImlzLWNvbnRlbnQtZWRpdGFibGUiLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OmlzLWNv
bnRlbnQtZWRpdGFibGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MRWxl
bWVudDppcy1jb250ZW50LWVkaXRhYmxlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1BFTExDSEVD
SywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic3BlbGxjaGVj
ayIsCisgICAgICAgICAgICAiSFRNTEVsZW1lbnQ6c3BlbGxjaGVjayIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRWxlbWVudDpzcGVsbGNoZWNrIiwKKyAgICAgICAgICAg
IEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEVsZW1l
bnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X2NsaWNrKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jbGlj
aygpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RpdGxlKFdlYktp
dERPTUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnRpdGxlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2VsZW1lbnRfc2V0X3RpdGxlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGl0bGVBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRf
bGFuZyhXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpsYW5nQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2xhbmcoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsYW5n
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZWxl
bWVudF9nZXRfdHJhbnNsYXRlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNv
cmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPnRyYW5zbGF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3RyYW5zbGF0ZShXZWJLaXRET01IVE1MRWxl
bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFRyYW5zbGF0ZSh2YWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfZGlyKFdlYktpdERPTUhUTUxFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZGlyKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2Rp
cihXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0RGlyKGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2xvbmcgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RhYl9pbmRleChXZWJLaXRET01IVE1M
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnRhYkluZGV4KCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdGFiX2luZGV4
KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VGFiSW5kZXgodmFsdWUp
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfZHJhZ2dhYmxlKFdl
YktpdERPTUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmRyYWdn
YWJsZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfc2V0X2RyYWdnYWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZikpOworICAg
IFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNldERyYWdnYWJsZSh2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZWxl
bWVudF9nZXRfd2Via2l0ZHJvcHpvbmUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2Via2l0ZHJvcHpvbmVBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfd2Vi
a2l0ZHJvcHpvbmUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3ZWJraXRkcm9wem9uZUF0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0
X2hpZGRlbihXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6aGlkZGVuQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9zZXRfaGlkZGVuKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnYm9v
bGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7
CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhpZGRlbkF0
dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9hY2Nl
c3Nfa2V5KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmFjY2Vzc2tleUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9hY2Nlc3Nfa2V5KFdlYktpdERPTUhUTUxF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6YWNjZXNza2V5QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoV2ViS2l0RE9NSFRNTEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5pbm5lclRleHQo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9zZXRfaW5uZXJfdGV4dChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldElubmVyVGV4dChjb252ZXJ0ZWRWYWx1ZSwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9vdXRlcl90ZXh0KFdl
YktpdERPTUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+b3V0ZXJUZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X291dGVyX3RleHQoV2ViS2l0RE9NSFRNTEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRPdXRlclRleHQoY29u
dmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9nZXRfY29udGVudF9lZGl0YWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNvbnRlbnRFZGl0YWJsZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9j
b250ZW50X2VkaXRhYmxlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0Q29udGVudEVkaXRhYmxlKGNvbnZlcnRlZFZhbHVlLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaXNfY29u
dGVudF9lZGl0YWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpI
VE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9zcGVsbGNoZWNrKFdlYktpdERP
TUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnNwZWxsY2hlY2so
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50
X3NldF9zcGVsbGNoZWNrKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c2V0U3BlbGxjaGVjayh2YWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40NTcyNWI0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaApAQCAtMCww
ICsxLDIxOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNl
cnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEVsZW1lbnRfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0VMRU1FTlQob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxf
RUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRWxlbWVudENsYXNz
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxF
bGVtZW50IHsKKyAgICBXZWJLaXRET01FbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NRWxlbWVudENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVt
ZW50X2NsaWNrOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2NsaWNrKFdlYktpdERPTUhU
TUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRf
dGl0bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfZ2V0X3RpdGxlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdGl0bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3RpdGxlKFdlYktpdERPTUhUTUxFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVt
ZW50X2dldF9sYW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9sYW5nKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfbGFuZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfbGFuZyhXZWJLaXRET01IVE1MRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfZGlyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9kaXIoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9kaXI6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2RpcihXZWJLaXRET01IVE1MRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfdGFiX2luZGV4OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RhYl9pbmRleChXZWJLaXRET01IVE1MRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3RhYl9pbmRleDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdGFiX2lu
ZGV4KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2FjY2Vzc19rZXk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2FjY2Vzc19rZXkoV2ViS2l0
RE9NSFRNTEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50
X3NldF9hY2Nlc3Nfa2V5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9lbGVtZW50X3NldF9hY2Nlc3Nfa2V5KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9p
bm5lcl90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF9pbm5lcl90ZXh0KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfaW5uZXJfdGV4dDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAj
R0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50
X3NldF9pbm5lcl90ZXh0KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9nZXRfb3V0ZXJfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9nZXRfb3V0ZXJfdGV4dChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X291dGVyX3RleHQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9zZXRfb3V0ZXJfdGV4dChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfZ2V0X2NvbnRlbnRfZWRpdGFibGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZWRpdGFibGUoV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3Nl
dF9jb250ZW50X2VkaXRhYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2NvbnRlbnRfZWRpdGFibGUoV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pc19jb250ZW50X2Vk
aXRhYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfZ2V0X2lzX2NvbnRlbnRfZWRpdGFibGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNl
bGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEVsZW1lbnRfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1l
bnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYjE2ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGVf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TUhUTUxFbGVtZW50KiB3cmFwSFRNTEVsZW1lbnQoV2ViQ29yZTo6SFRNTEVsZW1lbnQqKTsKK1dl
YktpdERPTUhUTUxFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEVsZW1lbnQqKTsKK1dlYkNvcmU6
OkhUTUxFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnRV
bnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMWRhODQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDEz
OSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MRWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEVsZW1lbnRVbnN0YWJs
ZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdHJhbnNsYXRlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF90cmFuc2xhdGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90cmFuc2xhdGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4K
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfc2V0X3RyYW5zbGF0ZShXZWJLaXRET01IVE1MRWxlbWVudCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dl
dF9kcmFnZ2FibGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2RyYWdnYWJsZShX
ZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfc2V0X2RyYWdnYWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAor
ICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfZHJhZ2dhYmxlKFdl
YktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3dlYmtpdGRyb3B6b25lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfd2Via2l0ZHJvcHpvbmUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF93ZWJraXRkcm9wem9uZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9zZXRfd2Via2l0ZHJvcHpvbmUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfZ2V0X2hpZGRlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaGlkZGVuKFdl
YktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxl
bWVudF9zZXRfaGlkZGVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9oaWRkZW4oV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZWxlbWVudF9nZXRfc3BlbGxjaGVjazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9nZXRfc3BlbGxjaGVjayhXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3NwZWxsY2hlY2s6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfc2V0X3NwZWxsY2hlY2soV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZh
bHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEVsZW1lbnRVbnN0YWJsZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzEwMDc1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAtMCwwICsxLDM0OCBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVk
ZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NSFRNTEVtYmVkRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIG9i
aikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0VNQkVEX0VMRU1FTlQoa2l0KHN0YXRp
Y19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxFbWJlZEVs
ZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRE
T01IVE1MRW1iZWRFbGVtZW50KiB3cmFwSFRNTEVtYmVkRWxlbWVudChXZWJDb3JlOjpIVE1MRW1i
ZWRFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0VNQkVEX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9IVE1MX0VNQkVEX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOwor
ICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6
SFRNTEVtYmVkRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxF
bWJlZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9
IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBk
ZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRp
b24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRW1iZWRF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTEVtYmVkRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRp
c3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9lbWJl
ZF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MRW1iZWRFbGVt
ZW50LCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
RUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJH
RVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAs
CisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX05BTUUsCisgICAg
UFJPUF9TUkMsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfV0lEVEgsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9IVE1MX0VNQkVEX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VtYmVk
X2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfZW1iZWRfZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfc3JjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRI
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwg
Z192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9FTUJF
RF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfc3JjKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF90eXBlX2F0
dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAg
IGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dl
dF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfZW1iZWRfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAgICAgICAgICAiSFRNTEVtYmVk
RWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVtYmVk
RWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19sb25nKAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTEVt
YmVkRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTEVt
YmVkRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1l
IiwKKyAgICAgICAgICAgICJIVE1MRW1iZWRFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxFbWJlZEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9TUkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3JjIiwK
KyAgICAgICAgICAgICJIVE1MRW1iZWRFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTEVtYmVkRWxlbWVudDpzcmMiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQ
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAg
ICAgICAgICAgICJIVE1MRW1iZWRFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxFbWJlZEVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURU
SCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAg
ICAgICAgICAgIkhUTUxFbWJlZEVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2xvbmcgSFRNTEVtYmVkRWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcs
IEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9pbml0KFdlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVl
c3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X2FsaWdu
KFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRW1i
ZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRE
T01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X2hlaWdodChX
ZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVk
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhlaWdodEF0dHIp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VtYmVkX2Vs
ZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBnbG9uZyB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSk7
CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6Omhl
aWdodEF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVt
ZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MRW1iZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRf
ZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxF
bWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpu
YW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Vt
YmVkX2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfc3JjKFdlYktpdERP
TUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF90eXBlX2F0dHIo
V2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbWJl
ZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF93aWR0aChX
ZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVk
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0cik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxl
bWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0
aEF0dHIsIHZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxFbWJlZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42MzIwZGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmgK
QEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAh
ZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJL
SVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVk
IGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRf
aAorI2RlZmluZSBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0VNQkVEX0VMRU1FTlQgICAgICAgICAgICAo
d2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX0VNQkVEX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRU1CRURfRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTEVtYmVkRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9FTUJFRF9F
TEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0VNQkVEX0VMRU1FTlQsIFdlYktpdERPTUhUTUxFbWJlZEVs
ZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRU1CRURfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9FTUJF
RF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0VNQkVEX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfRU1CRURfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTUJFRF9FTEVNRU5ULCBXZWJLaXRE
T01IVE1MRW1iZWRFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxFbWJlZEVs
ZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MRW1iZWRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9hbGlnbihX
ZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfZW1iZWRfZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVt
YmVkRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEVt
YmVkRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxFbWJlZEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRf
QVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9l
bWJlZF9lbGVtZW50X3NldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVtYmVk
RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxFbWJl
ZEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRW1iZWRF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxFbWJl
ZEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50
X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2VtYmVkX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxl
bWVudF9nZXRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfc3JjOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1l
bnRfc2V0X3NyYyhXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF90eXBl
X2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF90eXBlX2F0
dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRf
ZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1l
bnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9t
X2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X3dpZHRo
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VtYmVkX2Vs
ZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYsIGdsb25nIHZh
bHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxFbWJlZEVsZW1l
bnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmE2YjhkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxFbWJlZEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEVtYmVkRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRW1iZWRF
bGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVu
dCogd3JhcEhUTUxFbWJlZEVsZW1lbnQoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCopOworV2Vi
S2l0RE9NSFRNTEVtYmVkRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVu
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRW1i
ZWRFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43Zjc4M2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxG
aWVsZFNldEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01IVE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRmllbGRT
ZXRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01IVE1MRmllbGRTZXRFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NSFRNTEZpZWxkU2V0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQq
IG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKGtp
dChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1M
RmllbGRTZXRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRmll
bGRTZXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogd3JhcEhUTUxGaWVsZFNldEVs
ZW1lbnQoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9GSUVMRF9TRVRf
RUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRklFTERfU0VUX0VMRU1F
TlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0
X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2Vi
S2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVu
dCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2ZpZWxkX3NldF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZh
Y2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJL
aXRET01IVE1MRmllbGRTZXRFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRElTQUJMRUQsCisgICAgUFJPUF9G
T1JNLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9FTEVNRU5UUywK
KyAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAgUFJPUF9WQUxJRElUWSwKKyAgICBQUk9QX1ZB
TElEQVRJT05fTUVTU0FHRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9maWVs
ZF9zZXRfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZJRUxEX1NF
VF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVu
dF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zp
ZWxkX3NldF9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9l
bGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxGaWVs
ZFNldEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRklFTERfU0VUX0VMRU1FTlQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxF
RDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zp
ZWxkX3NldF9lbGVtZW50X2dldF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9GT1JNOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZm9ybShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9zZXRf
dHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTEVNRU5UUzoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0
X2VsZW1lbnRfZ2V0X2VsZW1lbnRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1dJTExfVkFMSURBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJRElUWToKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0
X3ZhbGlkaXR5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEQVRJ
T05fTUVTU0FHRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2Uoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVt
ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudENsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKAorICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAgICAgICJIVE1M
RmllbGRTZXRFbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29s
ZWFuIEhUTUxGaWVsZFNldEVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Rk9STSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJmb3JtIiwK
KyAgICAgICAgICAgICJIVE1MRmllbGRTZXRFbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxGaWVsZFNldEVsZW1lbnQ6Zm9y
bSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1F
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAg
ICAgICAgICAgIkhUTUxGaWVsZFNldEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTEZpZWxkU2V0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIs
CisgICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIEhUTUxGaWVsZFNldEVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0VMRU1FTlRTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
ImVsZW1lbnRzIiwKKyAgICAgICAgICAgICJIVE1MRmllbGRTZXRFbGVtZW50OmVsZW1lbnRzIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIEhUTUxGaWVs
ZFNldEVsZW1lbnQ6ZWxlbWVudHMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
Q09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFu
KAorICAgICAgICAgICAgIndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNl
dEVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFu
IEhUTUxGaWVsZFNldEVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1ZBTElESVRZLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZh
bGlkaXR5IiwKKyAgICAgICAgICAgICJIVE1MRmllbGRTZXRFbGVtZW50OnZhbGlkaXR5IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogSFRNTEZpZWxkU2V0
RWxlbWVudDp2YWxpZGl0eSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlf
U1RBVEUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAidmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICJIVE1MRmll
bGRTZXRFbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBIVE1MRmllbGRTZXRFbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9pbml0KFdlYktpdERP
TUhUTUxGaWVsZFNldEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVl
c3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfY2hl
Y2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja1ZhbGlkaXR5KCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnRfc2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxE
X1NFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGVycm9yKTsKKyAgICBX
ZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEVycm9yID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVy
cm9yKTsKKyAgICBpdGVtLT5zZXRDdXN0b21WYWxpZGl0eShjb252ZXJ0ZWRFcnJvcik7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZGlzYWJsZWQo
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfZGlzYWJsZWQo
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxl
ZEF0dHIsIHZhbHVlKTsKK30KKworV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3ZWJraXRfZG9t
X2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MRmllbGRTZXRF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VU
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfbmFtZShXZWJL
aXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxl
bWVudF9nZXRfc2V0X3R5cGUoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5
cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZWxlbWVudHMoV2ViS2l0RE9N
SFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRmllbGRT
ZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmVsZW1l
bnRzRm9yTmF0aXZlQmluZGluZ3MoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2Vs
ZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53aWxsVmFsaWRh
dGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiB3
ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhU
TUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9GSUVMRF9TRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZpZWxkU2V0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
VmFsaWRpdHlTdGF0ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnZhbGlkaXR5
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9t
ZXNzYWdlKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWxpZGF0aW9uTWVz
c2FnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxG
aWVsZFNldEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlY2YxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxGaWVsZFNldEVsZW1lbnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0
ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRET01IVE1MRmllbGRTZXRFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEZpZWxkU2V0
RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9GSUVMRF9TRVRfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0
X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZJRUxEX1NFVF9F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5U
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRmllbGRTZXRF
bGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVO
VChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9GSUVMRF9TRVRfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GSUVMRF9TRVRfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9G
SUVMRF9TRVRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudENsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1M
RWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxGaWVs
ZFNldEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0
X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxk
X3NldF9lbGVtZW50X2dldF9mb3JtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNl
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhU
TUxGb3JtRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCoK
K3dlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1M
RmllbGRTZXRFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxGaWVsZFNldEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRT
ZXRFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWViMzkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZpZWxkU2V0RWxlbWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogd3JhcEhUTUxG
aWVsZFNldEVsZW1lbnQoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCopOworV2ViS2l0RE9N
SFRNTEZpZWxkU2V0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEZpZWxkU2V0
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVs
ZFNldEVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50VW5zdGFibGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzlmMmNlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRmllbGRT
ZXRFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
CisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50
X2NoZWNrX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9l
bGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfY3VzdG9t
X3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQKKyAq
IEBlcnJvcjogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X3NldF9jdXN0b21f
dmFsaWRpdHkoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0
X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50
X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfc2V0X2Rpc2FibGVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MRmllbGRTZXRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1l
bnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfc2V0X25hbWUo
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3NldF90eXBl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfc2V0X3R5cGUo
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9lbGVtZW50czoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MRmllbGRTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21faHRt
bF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZWxlbWVudHMoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50
X2dldF93aWxsX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3Nl
dF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRf
dmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01WYWxp
ZGl0eVN0YXRlKgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF92YWxpZGl0
eShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2Fn
ZShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEZvbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNhMDQyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRm9udEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTEZvbnRFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4K
KyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTEZvbnRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fSFRNTF9GT05UX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihv
YmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxGb250RWxlbWVudCogY29yZShXZWJLaXRET01IVE1M
Rm9udEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHdyYXBIVE1M
Rm9udEVsZW1lbnQoV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxF
TUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9OVF9FTEVNRU5ULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9kaXNw
YXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCog
ZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQg
PSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAg
ICBXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MRm9udEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZvbnRf
ZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQor
eworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1l
bnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF9mb250X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
SFRNTEZvbnRFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50LCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBF
X0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX0NPTE9SLAorICAgIFBST1BfRkFDRSwKKyAgICBQUk9QX1NJ
WkUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxGb250RWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9GT05UX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT0xPUjoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfY29sb3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GQUNFOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9mYWNlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZShzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9mb250X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxFTUVOVChv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NPTE9S
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9u
dF9lbGVtZW50X2dldF9jb2xvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9GQUNFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfZm9udF9lbGVtZW50X2dldF9mYWNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1NJWkU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9mb250X2VsZW1lbnRfZ2V0X3NpemUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERP
TUhUTUxGb250RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0
bWxfZm9udF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT0xPUiwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb2xvciIsCisgICAg
ICAgICAgICAiSFRNTEZvbnRFbGVtZW50OmNvbG9yIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MRm9udEVsZW1lbnQ6Y29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRkFDRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmYWNlIiwKKyAgICAg
ICAgICAgICJIVE1MRm9udEVsZW1lbnQ6ZmFjZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTEZvbnRFbGVtZW50OmZhY2UiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0laRSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzaXplIiwKKyAgICAgICAg
ICAgICJIVE1MRm9udEVsZW1lbnQ6c2l6ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEZvbnRFbGVtZW50OnNpemUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX2ZvbnRfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxGb250RWxlbWVudCogcmVxdWVzdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfZm9udF9lbGVtZW50X2dldF9jb2xvcihXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29sb3JBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVt
ZW50X3NldF9jb2xvcihXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9udEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2xvckF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb250X2Vs
ZW1lbnRfZ2V0X2ZhY2UoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MRm9udEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZhY2VBdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9mYWNl
KFdlYktpdERPTUhUTUxGb250RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZhY2VBdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9zaXpl
KFdlYktpdERPTUhUTUxGb250RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0ZPTlRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvbnRF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpzaXplQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1M
Rm9udEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzaXplQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTA4N2U5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0
ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEZv
bnRFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9I
VE1MX0ZPTlRfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GT05UX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRk9OVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRm9udEVsZW1lbnQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfRk9OVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPTlRfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9GT05UX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9OVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX0ZPTlRfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT05UX0VMRU1FTlQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRk9OVF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPTlRf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTUhUTUxGb250RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MRm9udEVsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF90eXBlKHZvaWQpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2NvbG9yOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxGb250RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dl
dF9jb2xvcihXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxGb250RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9jb2xvcihXZWJLaXRET01I
VE1MRm9udEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfZmFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRm9udEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfZmFjZShXZWJLaXRE
T01IVE1MRm9udEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb250
X2VsZW1lbnRfc2V0X2ZhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9mb250X2VsZW1lbnRfc2V0X2ZhY2UoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb250
X2VsZW1lbnRfZ2V0X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9zaXpl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb250RWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVt
ZW50X3NldF9zaXplKFdlYktpdERPTUhUTUxGb250RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxGb250RWxl
bWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEZvbnRFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjNmOTVhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudFBy
aXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxGb250RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01IVE1MRm9udEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZv
bnRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxGb250RWxlbWVu
dC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxGb250RWxlbWVudCogd3Jh
cEhUTUxGb250RWxlbWVudChXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqKTsKK1dlYktpdERPTUhU
TUxGb250RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCopOworV2ViQ29yZTo6
SFRNTEZvbnRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxGb250RWxlbWVudCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRm9udEVsZW1lbnRQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQy
YzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0wLDAg
KzEsNjM4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50LmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9k
ZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxGb3JtRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxGb3JtRWxlbWVudCogd3Jh
cEhUTUxGb3JtRWxlbWVudChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRk9S
TV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQs
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2
ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVF
dmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRF
dmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZh
Y2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnQsIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQUNDRVBUX0NIQVJTRVQsCisgICAgUFJPUF9BQ1RJ
T04sCisgICAgUFJPUF9BVVRPQ09NUExFVEUsCisgICAgUFJPUF9FTkNUWVBFLAorICAgIFBST1Bf
RU5DT0RJTkcsCisgICAgUFJPUF9NRVRIT0QsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfTk9f
VkFMSURBVEUsCisgICAgUFJPUF9UQVJHRVQsCisgICAgUFJPUF9FTEVNRU5UUywKKyAgICBQUk9Q
X0xFTkdUSCwKKyAgICBQUk9QX0FVVE9DT1JSRUNULAorICAgIFBST1BfQVVUT0NBUElUQUxJWkUs
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9GT1JNX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BQ0NFUFRfQ0hBUlNFVDoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYWNjZXB0X2NoYXJzZXQoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9B
Q1RJT046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2FjdGlvbihz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0FVVE9DT01QTEVURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVu
dF9zZXRfYXV0b2NvbXBsZXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRU5DVFlQRToKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jdHlwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOQ09ESU5HOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9lbmNvZGluZyhzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FVEhPRDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfbWV0aG9kKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfbmFtZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX05PX1ZBTElEQVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3Nl
dF9ub192YWxpZGF0ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9m
b3JtX2VsZW1lbnRfc2V0X3RhcmdldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9DT1JSRUNUOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hdXRvY29ycmVjdChzZWxmLCBnX3ZhbHVlX2dl
dF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ0FQ
SVRBTElaRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYXV0b2Nh
cGl0YWxpemUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiA9IFdFQktJ
VF9ET01fSFRNTF9GT1JNX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9BQ0NFUFRfQ0hBUlNFVDoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWNjZXB0X2No
YXJzZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUNUSU9OOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X2dldF9hY3Rpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVU
T0NPTVBMRVRFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY29tcGxldGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRU5DVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jdHlwZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkNPRElORzoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jb2Rp
bmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVUSE9EOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2dldF9tZXRob2Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9O
T19WQUxJREFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfbm9fdmFsaWRhdGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF90YXJnZXQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRUxFTUVOVFM6CisgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZWxlbWVudHMo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBn
X3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9s
ZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NPUlJFQ1Q6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0FVVE9DQVBJVEFMSVpFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY2FwaXRhbGl6ZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0FDQ0VQVF9DSEFSU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImFjY2VwdC1jaGFyc2V0IiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVs
ZW1lbnQ6YWNjZXB0LWNoYXJzZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxGb3JtRWxlbWVudDphY2NlcHQtY2hhcnNldCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BQ1RJT04s
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWN0aW9uIiwKKyAg
ICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQ6YWN0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MRm9ybUVsZW1lbnQ6YWN0aW9uIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FV
VE9DT01QTEVURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJh
dXRvY29tcGxldGUiLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDphdXRvY29tcGxldGUi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb3JtRWxlbWVudDphdXRvY29t
cGxldGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5DVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJlbmN0eXBlIiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVs
ZW1lbnQ6ZW5jdHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZvcm1F
bGVtZW50OmVuY3R5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5DT0RJTkcsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZW5jb2RpbmciLAorICAgICAgICAgICAg
IkhUTUxGb3JtRWxlbWVudDplbmNvZGluZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEZvcm1FbGVtZW50OmVuY29kaW5nIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FVEhPRCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJtZXRob2QiLAorICAg
ICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDptZXRob2QiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxGb3JtRWxlbWVudDptZXRob2QiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFN
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAg
ICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTEZvcm1FbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTk9fVkFM
SURBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIm5vLXZh
bGlkYXRlIiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQ6bm8tdmFsaWRhdGUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEZvcm1FbGVtZW50Om5vLXZhbGlkYXRl
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1RBUkdFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ0YXJnZXQiLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVu
dDp0YXJnZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb3JtRWxlbWVu
dDp0YXJnZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRUxFTUVOVFMsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAiZWxlbWVudHMiLAorICAgICAgICAgICAgIkhUTUxG
b3JtRWxlbWVudDplbGVtZW50cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhU
TUxDb2xsZWN0aW9uKiBIVE1MRm9ybUVsZW1lbnQ6ZWxlbWVudHMiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVs
ZW1lbnQ6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTEZvcm1FbGVt
ZW50Omxlbmd0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9D
T1JSRUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhdXRv
Y29ycmVjdCIsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50OmF1dG9jb3JyZWN0IiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxGb3JtRWxlbWVudDphdXRvY29ycmVj
dCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPQ0FQSVRBTElaRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhdXRvY2FwaXRhbGl6ZSIsCisgICAgICAgICAg
ICAiSFRNTEZvcm1FbGVtZW50OmF1dG9jYXBpdGFsaXplIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MRm9ybUVsZW1lbnQ6YXV0b2NhcGl0YWxpemUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxGb3Jt
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zdWJtaXQoV2ViS2l0RE9NSFRNTEZvcm1F
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zdWJtaXQoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X3Jlc2V0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
cmVzZXQoKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9jaGVj
a192YWxpZGl0eShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hlY2tWYWxpZGl0eSgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9yZXF1ZXN0X2F1dG9jb21w
bGV0ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFJFUVVF
U1RfQVVUT0NPTVBMRVRFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5yZXF1ZXN0QXV0b2NvbXBsZXRlKCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJS
ZXF1ZXN0IEF1dG9jb21wbGV0ZSIpCisjZW5kaWYgLyogRU5BQkxFKFJFUVVFU1RfQVVUT0NPTVBM
RVRFKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWNj
ZXB0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFjY2VwdF9jaGFyc2V0QXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9z
ZXRfYWNjZXB0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWNj
ZXB0X2NoYXJzZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X2dldF9hY3Rpb24oV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0
VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YWN0aW9uQXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYWN0
aW9uKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFjdGlvbkF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0
X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdXRvY29tcGxldGUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X3NldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdXRvY29tcGxldGUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jdHlwZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5lbmN0
eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9zZXRfZW5jdHlwZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEVuY3R5cGUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jb2RpbmcoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZW5j
dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9m
b3JtX2VsZW1lbnRfc2V0X2VuY29kaW5nKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0RW5jdHlwZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X2dldF9tZXRob2QoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bWV0
aG9kKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9zZXRfbWV0aG9kKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0TWV0aG9kKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0
dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6bmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9nZXRfbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpub3ZhbGlkYXRlQXR0cik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X3NldF9ub192YWxpZGF0ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2Vs
ZikpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
bm92YWxpZGF0ZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfZ2V0X3RhcmdldChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGFyZ2V0QXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9z
ZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRhcmdldEF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9k
b21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VsZW1lbnRzKFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmVsZW1lbnRzRm9yTmF0aXZlQmluZGluZ3MoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnbG9uZyB3
ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9sZW5ndGgoV2ViS2l0RE9NSFRNTEZvcm1F
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVu
dF9nZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKQoreworI2lm
IEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmF1dG9jb3JyZWN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0YWxpemUiKQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09S
UkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9zZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRP
Q0FQSVRBTElaRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+c2V0QXV0b2NvcnJlY3QodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFsaXplIikK
KyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkgKi8K
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9jYXBpdGFs
aXplKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoSU9TX0FV
VE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0ZPUk1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF1dG9jYXBpdGFsaXplKCkpOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFsaXplIikKKyAgICBy
ZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRB
TElaRSkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hdXRv
Y2FwaXRhbGl6ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF1dG9jYXBpdGFsaXpl
KGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
SW9zIEF1dG9jb3JyZWN0IEFuZCBBdXRvY2FwaXRhbGl6ZSIpCisjZW5kaWYgLyogRU5BQkxFKElP
U19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpICovCit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDM0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxGb3JtRWxlbWVudC5oCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9t
Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVN
RU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVChvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JN
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9GT1JNX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULCBXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxF
TUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hU
TUxfRk9STV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9GT1JNX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULCBXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZvcm1F
bGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxGb3JtRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zdWJtaXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfc3VibWl0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9yZXNldDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9yZXNldChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2FjY2Vw
dF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X2dldF9hY2NlcHRfY2hhcnNldChXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2Fj
Y2VwdF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X3NldF9hY2NlcHRfY2hhcnNldChXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2Zvcm1fZWxlbWVudF9nZXRfYWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3Jt
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hY3Rpb24oV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X3NldF9hY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfc2V0X2FjdGlvbihXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxl
bWVudF9nZXRfZW5jdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jdHlwZShXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2Vu
Y3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfc2V0X2VuY3R5cGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
Z2V0X2VuY29kaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbmNvZGluZyhXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2VuY29k
aW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X3NldF9lbmNvZGluZyhXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9n
ZXRfbWV0aG9kOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X2dldF9tZXRob2QoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9tZXRob2Q6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
c2V0X21ldGhvZChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxl
bWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfdGFyZ2V0
KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9zZXRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxG
b3JtRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VsZW1lbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxGb3JtRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVj
dGlvbioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VsZW1lbnRzKFdlYktpdERP
TUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2xlbmd0aChXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEZvcm1F
bGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNTgyOWNkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
Rm9ybUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3
cmFwSFRNTEZvcm1FbGVtZW50KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCopOworV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Kik7CitXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Kik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnRVbnN0YWJsZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRm9ybUVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjQ3ZDYyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVu
dFVuc3RhYmxlLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50VW5zdGFibGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
LXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxG
b3JtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZm9y
bV9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9yZXF1ZXN0X2F1dG9jb21w
bGV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9yZXF1ZXN0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9j
b21wbGV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9jb21wbGV0
ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxl
bWVudF9zZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2dldF9ub192YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9n
ZXRfbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9ub192YWxpZGF0ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9nZXRfYXV0b2NvcnJlY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYXV0b2NvcnJlY3Q6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhU
TUxGb3JtRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9jYXBpdGFsaXplOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9nZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9h
dXRvY2FwaXRhbGl6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxp
emUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkg
Ki8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjZhZDExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50LmNwcApAQCAtMCwwICsxLDUxNiBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAi
R09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MRnJhbWVFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9GUkFN
RV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MRnJhbWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogd3JhcEhUTUxGcmFtZUVsZW1l
bnQoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9GUkFNRV9FTEVNRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9FTEVNRU5ULCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3Mo
KmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0
aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxGcmFtZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZyYW1l
X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNl
KQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnQsIFdF
QktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRf
RE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRlJBTUVfQk9SREVSLAorICAgIFBST1BfTE9O
R19ERVNDLAorICAgIFBST1BfTUFSR0lOX0hFSUdIVCwKKyAgICBQUk9QX01BUkdJTl9XSURUSCwK
KyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9OT19SRVNJWkUsCisgICAgUFJPUF9TQ1JPTExJTkcs
CisgICAgUFJPUF9TUkMsCisgICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAorICAgIFBST1BfQ09O
VEVOVF9XSU5ET1csCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0ZSQU1FX0JPUkRFUjoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X2ZyYW1lX2JvcmRlcihzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPTkdfREVTQzoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X2xvbmdfZGVzYyhzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX01BUkdJTl9IRUlHSFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X3NldF9tYXJnaW5faGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFSR0lOX1dJRFRIOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT19S
RVNJWkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9ub19yZXNp
emUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0NST0xMSU5HOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxl
bWVudF9zZXRfc2Nyb2xsaW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
ZnJhbWVfZWxlbWVudF9zZXRfc3JjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9GUkFNRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRlJBTUVfQk9SREVSOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVu
dF9nZXRfZnJhbWVfYm9yZGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0xPTkdfREVTQzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYyhzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9NQVJHSU5fSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX2hlaWdo
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVJHSU5fV0lEVEg6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X2dldF9tYXJnaW5fd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfTk9fUkVTSVpFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbm9fcmVzaXplKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTElORzoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3Njcm9s
bGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X2dldF9zcmMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09OVEVOVF9E
T0NVTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DT05URU5UX1dJTkRPVzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93
aW5kb3coc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MRnJhbWVF
bGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5z
ZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRlJBTUVfQk9SREVSLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImZyYW1lLWJvcmRlciIs
CisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVudDpmcmFtZS1ib3JkZXIiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGcmFtZUVsZW1lbnQ6ZnJhbWUtYm9yZGVyIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0xPTkdfREVTQywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJsb25nLWRlc2MiLAorICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQ6
bG9uZy1kZXNjIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRnJhbWVFbGVt
ZW50OmxvbmctZGVzYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NQVJHSU5fSEVJR0hULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1hcmdpbi1oZWlnaHQiLAorICAg
ICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQ6bWFyZ2luLWhlaWdodCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEZyYW1lRWxlbWVudDptYXJnaW4taGVpZ2h0IiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX01BUkdJTl9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJtYXJnaW4td2lkdGgiLAorICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1l
bnQ6bWFyZ2luLXdpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRnJh
bWVFbGVtZW50Om1hcmdpbi13aWR0aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAg
IkhUTUxGcmFtZUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEZyYW1lRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PX1JFU0laRSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibm8tcmVzaXplIiwKKyAg
ICAgICAgICAgICJIVE1MRnJhbWVFbGVtZW50Om5vLXJlc2l6ZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnYm9vbGVhbiBIVE1MRnJhbWVFbGVtZW50Om5vLXJlc2l6ZSIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9TQ1JPTExJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAic2Nyb2xsaW5nIiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVtZW50OnNjcm9s
bGluZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZyYW1lRWxlbWVudDpz
Y3JvbGxpbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1JDLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgInNyYyIsCisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVu
dDpzcmMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGcmFtZUVsZW1lbnQ6
c3JjIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY29udGVudC1kb2N1bWVudCIsCisgICAgICAg
ICAgICAiSFRNTEZyYW1lRWxlbWVudDpjb250ZW50LWRvY3VtZW50IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NRG9jdW1lbnQqIEhUTUxGcmFtZUVsZW1lbnQ6Y29udGVudC1kb2N1
bWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05URU5UX1dJ
TkRPVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjb250ZW50
LXdpbmRvdyIsCisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVudDpjb250ZW50LXdpbmRvdyIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVdpbmRvdyogSFRNTEZyYW1lRWxl
bWVudDpjb250ZW50LXdpbmRvdyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJ
TkRPVywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ3
aWR0aCIsCisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVudDp3aWR0aCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdsb25nIEhUTUxGcmFtZUVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAg
R19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19s
b25nKAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVu
dDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MRnJhbWVFbGVtZW50
OmhlaWdodCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogcmVx
dWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfZnJhbWVfYm9yZGVyKFdlYktpdERPTUhUTUxGcmFt
ZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpmcmFtZWJvcmRlckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9mcmFtZV9ib3JkZXIoV2ViS2l0RE9NSFRN
TEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZnJhbWVib3JkZXJBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19k
ZXNjKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
RnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsb25nZGVzY0F0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9sb25nX2Rl
c2MoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bG9uZ2Rlc2NBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVu
dF9nZXRfbWFyZ2luX2hlaWdodChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWFyZ2luaGVpZ2h0QXR0
cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1l
X2VsZW1lbnRfc2V0X21hcmdpbl9oZWlnaHQoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFN
RV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6bWFyZ2luaGVpZ2h0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aChXZWJLaXRET01I
VE1MRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
RlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6bWFyZ2lud2lkdGhBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX3dpZHRoKFdlYktp
dERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1hcmdpbndpZHRoQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0
X25hbWUoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X3NldF9uYW1lKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRy
LCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X2dldF9ub19yZXNpemUoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpub3Jlc2l6ZUF0dHIpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X25v
X3Jlc2l6ZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6bm9yZXNpemVB
dHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9n
ZXRfc2Nyb2xsaW5nKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzY3JvbGxpbmdBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9z
ZXRfc2Nyb2xsaW5nKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1l
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNjcm9s
bGluZ0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK1dlYktpdERPTURvY3VtZW50KiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9n
ZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5jb250ZW50RG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01ET01XaW5kb3cqIHdlYmtpdF9kb21faHRt
bF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdyhXZWJLaXRET01IVE1MRnJhbWVFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVudFdpbmRvdygpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRt
bF9mcmFtZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT53aWR0aCgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9oZWlnaHQo
V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFt
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0g
aXRlbS0+aGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTAyZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50LmgKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRk
b20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktp
dERPTUhUTUxGcmFtZUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50
X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1F
X0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VMRU1FTlQob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfRlJBTUVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9GUkFNRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19I
VE1MX0ZSQU1FX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfRUxFTUVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX0VMRU1FTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9G
UkFNRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBh
cmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudENs
YXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9mcmFt
ZV9ib3JkZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9nZXRfZnJhbWVfYm9yZGVyKFdlYktpdERPTUhUTUxGcmFtZUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9m
cmFtZV9ib3JkZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9zZXRfZnJhbWVfYm9yZGVyKFdlYktpdERPTUhUTUxGcmFtZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2MoV2ViS2l0
RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zy
YW1lX2VsZW1lbnRfc2V0X2xvbmdfZGVzYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJh
bWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9sb25nX2Rlc2MoV2ViS2l0RE9NSFRN
TEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX2hlaWdodDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9t
YXJnaW5faGVpZ2h0KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9tYXJnaW5faGVpZ2h0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0
X21hcmdpbl9oZWlnaHQoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRf
bWFyZ2luX3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aChXZWJLaXRET01IVE1MRnJhbWVF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9z
ZXRfbWFyZ2luX3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl93aWR0aChXZWJLaXRET01IVE1MRnJhbWVF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9mcmFtZV9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxG
cmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRN
TEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2Vs
ZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFt
ZV9lbGVtZW50X2dldF9ub19yZXNpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1l
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9ub19yZXNpemUoV2ViS2l0
RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zy
YW1lX2VsZW1lbnRfc2V0X25vX3Jlc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJh
bWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9ub19yZXNpemUoV2ViS2l0RE9N
SFRNTEZyYW1lRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9zY3JvbGxpbmc6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xs
aW5nKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9zY3JvbGxpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfc2Nyb2xsaW5nKFdl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3NyYzoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9z
cmMoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9zcmMoV2ViS2l0RE9NSFRNTEZy
YW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01Eb2N1bWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3Vt
ZW50Kgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQo
V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfd2luZG93OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTURPTVdpbmRvdworKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTVdpbmRvdyoK
K3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdyhXZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJh
bWVfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dl
YmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MRnJhbWVF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9n
ZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNl
bGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVu
dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYmFlODI0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudFBy
aXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
RnJhbWVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxGcmFtZUVs
ZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50
KiB3cmFwSFRNTEZyYW1lRWxlbWVudChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50Kik7CitXZWJL
aXRET01IVE1MRnJhbWVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCopOwor
V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50
Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxGcmFt
ZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjlhYTcxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFt
ZVNldEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZy
YW1lU2V0RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERP
TUhUTUxGcmFtZVNldEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVy
dFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MRnJhbWVTZXRF
bGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogb2JqKQoreworICAgIHJl
dHVybiBXRUJLSVRfRE9NX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdl
YkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQq
IGNvcmUoV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRE
T01IVE1MRnJhbWVTZXRFbGVtZW50KiB3cmFwSFRNTEZyYW1lU2V0RWxlbWVudChXZWJDb3JlOjpI
VE1MRnJhbWVTZXRFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVCwgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9kaXNwYXRj
aF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZl
bnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBX
ZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGcmFt
ZVNldEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRnJhbWVT
ZXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0
dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJL
aXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZl
bnQgPSB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRf
ZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxGcmFtZVNl
dEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudCwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9F
VkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAg
ICBQUk9QXzAsCisgICAgUFJPUF9DT0xTLAorICAgIFBST1BfUk9XUywKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09MUzoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9jb2xzKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUk9XUzoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9yb3dzKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX2ZyYW1lX3NldF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRlJBTUVf
U0VUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9DT0xTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X2NvbHMoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUk9XUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2dldF9yb3dzKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVu
dF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNz
LT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiY29scyIsCisgICAgICAgICAgICAiSFRNTEZyYW1lU2V0RWxl
bWVudDpjb2xzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRnJhbWVTZXRF
bGVtZW50OmNvbHMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUk9XUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJyb3dzIiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVT
ZXRFbGVtZW50OnJvd3MiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGcmFt
ZVNldEVsZW1lbnQ6cm93cyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJh
bWVfc2V0X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiByZXF1ZXN0
KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfY29scyhXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfU0VUX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmNvbHNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X2NvbHMoV2ViS2l0RE9NSFRNTEZyYW1lU2V0
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvbHNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X3Jvd3MoV2Vi
S2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
RnJhbWVTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyb3dzQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9yb3dz
KFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZVNldEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyb3dzQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk1NGI1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFt
ZVNldEVsZW1lbnQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1M
RnJhbWVTZXRFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudF9o
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9T
RVRfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVt
ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50Q2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVChvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9GUkFNRV9TRVRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9GUkFN
RV9TRVRfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9GUkFNRV9TRVRfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9TRVRf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9X
ZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1l
bnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRf
Z2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVt
ZW50X2dldF9jb2xzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2dldF9jb2xzKFdlYktpdERPTUhUTUxGcmFtZVNl
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxl
bWVudF9zZXRfY29sczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfY29scyhXZWJLaXRET01IVE1MRnJhbWVTZXRF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfcm93czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRnJhbWVTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfcm93cyhX
ZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X3Jvd3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X3Jvd3MoV2Vi
S2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRnJhbWVTZXRFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmIwYzNmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1l
bnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50UHJpdmF0ZV9oCisjZGVm
aW5lIFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTEZyYW1lU2V0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MRnJhbWVTZXRFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudCogd3JhcEhUTUxGcmFtZVNldEVsZW1lbnQoV2ViQ29yZTo6SFRN
TEZyYW1lU2V0RWxlbWVudCopOworV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1l
bnQqIGNvcmUoV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50UHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIUkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU4Y2Y5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50LmNwcApAQCAtMCwwICsxLDI3OCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxIUkVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09i
amVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MSFJFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRN
TEhSRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5v
ZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9N
SFRNTEhSRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MSFJFbGVtZW50KiB3cmFwSFRNTEhS
RWxlbWVudChXZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlQoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0hSX0VMRU1FTlQsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxIUkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVz
Y3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MSFJF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhSRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpIVE1MSFJFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhS
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdf
T0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0
RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50
ID0gd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9odG1sX2hyX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MSFJFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfaHJf
ZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJG
QUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9Q
X05PX1NIQURFLAorICAgIFBST1BfU0laRSwKKyAgICBQUk9QX1dJRFRILAorfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01f
SFRNTF9IUl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3Nl
dF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX05PX1NIQURFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaHJfZWxl
bWVudF9zZXRfbm9fc2hhZGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2hyX2VsZW1lbnRfc2V0X3NpemUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX2hyX2VsZW1lbnRfc2V0X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEhSRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9IUl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF9hbGlnbihzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT19TSEFERToKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X25v
X3NoYWRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50
X2dldF9zaXplKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaHJfZWxl
bWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX2hyX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MSFJFbGVtZW50Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxIUkVsZW1lbnQ6
YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxIUkVsZW1lbnQ6YWxp
Z24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTk9fU0hBREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgIm5vLXNoYWRlIiwKKyAgICAgICAgICAgICJIVE1MSFJFbGVt
ZW50Om5vLXNoYWRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxIUkVs
ZW1lbnQ6bm8tc2hhZGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0laRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzaXplIiwKKyAgICAgICAgICAgICJIVE1M
SFJFbGVtZW50OnNpemUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxIUkVs
ZW1lbnQ6c2l6ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTEhSRWxl
bWVudDp3aWR0aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEhSRWxlbWVu
dDp3aWR0aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9p
bml0KFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X2Fs
aWduKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9IUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSFJFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MSFJF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0hSX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X25vX3NoYWRlKFdlYktpdERPTUhUTUxIUkVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5U
KHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bm9zaGFkZUF0dHIpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRf
c2V0X25vX3NoYWRlKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpub3NoYWRlQXR0ciwg
dmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3NpemUo
V2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0hSX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnNpemVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MSFJFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0hSX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxIUkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpzaXplQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX2hyX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3Nl
dF93aWR0aChXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0hSX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxIUkVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjE3ZTBl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50LmgKQEAgLTAsMCArMSwxMjYg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJ
VERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9u
bHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNl
bmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxIUkVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MSFJFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX0hSX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2hyX2VsZW1l
bnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfSFJfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEhSRWxlbWVudCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9IUl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hSX0VMRU1FTlQsIFdlYktp
dERPTUhUTUxIUkVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0hSX0VM
RU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfSFJfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9IUl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hSX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfSFJfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IUl9FTEVNRU5ULCBXZWJLaXRET01IVE1M
SFJFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxIUkVsZW1lbnQgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTEhSRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9o
cl9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ocl9l
bGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSFJFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9ocl9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfYWxpZ246CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEhSRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfYWxp
Z24oV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfbm9fc2hhZGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEhSRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFu
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dl
dF9ub19zaGFkZShXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfbm9fc2hhZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEhSRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfbm9fc2hhZGUoV2ViS2l0
RE9NSFRNTEhSRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9ocl9lbGVtZW50X2dldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxIUkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRNTEhS
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0
X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEhSRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxl
bWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF93aWR0aDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSFJFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50
X2dldF93aWR0aChXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEhSRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEhS
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxIUkVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
SFJFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNWRlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxIUkVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MSFJFbGVtZW50UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIUkVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEhSRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MSFJFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEhSRWxl
bWVudCogd3JhcEhUTUxIUkVsZW1lbnQoV2ViQ29yZTo6SFRNTEhSRWxlbWVudCopOworV2ViS2l0
RE9NSFRNTEhSRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqKTsKK1dlYkNvcmU6
OkhUTUxIUkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSFJFbGVtZW50UHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFk
RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiZDFjMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxIZWFkRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdl
dC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxIZWFkRWxlbWVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YktpdERPTUhUTUxIZWFkRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxIZWFkRWxlbWVudCogb2Jq
KQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UKGtpdChzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MSGVhZEVsZW1l
bnQqIGNvcmUoV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRN
TEhlYWRFbGVtZW50KiB3cmFwSFRNTEhlYWRFbGVtZW50KFdlYkNvcmU6OkhUTUxIZWFkRWxlbWVu
dCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9IRUFEX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9I
VE1MX0hFQURfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9oZWFkX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNv
cmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxIZWFkRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIZWFkRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+
ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9oZWFkX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29s
ZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEhlYWRF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVu
dFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJr
aXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2FkZF9ldmVudF9s
aXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9o
dG1sX2hlYWRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZ
UEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2hl
YWRfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9QUk9GSUxFLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIHNlbGYg
PSBXRUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUFJPRklMRToKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX2hlYWRfZWxlbWVudF9zZXRfcHJvZmlsZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkX2Vs
ZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxFTUVOVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1BST0ZJTEU6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRf
Z2V0X3Byb2ZpbGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX2hlYWRfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxIZWFkRWxlbWVudENs
YXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QUk9GSUxFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInByb2ZpbGUiLAorICAgICAgICAgICAgIkhUTUxI
ZWFkRWxlbWVudDpwcm9maWxlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
SGVhZEVsZW1lbnQ6cHJvZmlsZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
aGVhZF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9o
ZWFkX2VsZW1lbnRfZ2V0X3Byb2ZpbGUoV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnByb2ZpbGVBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVt
ZW50X3NldF9wcm9maWxlKFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxIZWFk
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnByb2Zp
bGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjMwN2YyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxl
bWVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElO
R19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGlu
Y2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxIZWFkRWxl
bWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudF9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQgICAgICAgICAg
ICAod2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURfRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTEhlYWRFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxF
TUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQsIFdlYktpdERPTUhUTUxIZWFkRWxlbWVu
dENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRF9FTEVNRU5UKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9I
VE1MX0hFQURfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1F
TlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfSEVBRF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hF
QURfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQsIFdlYktpdERPTUhUTUxIZWFk
RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTEhlYWRFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1s
X2hlYWRfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aGVhZF9lbGVtZW50X2dldF9wcm9maWxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxIZWFk
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dldF9wcm9maWxlKFdlYktpdERPTUhUTUxI
ZWFkRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVu
dF9zZXRfcHJvZmlsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2hlYWRfZWxlbWVudF9zZXRfcHJvZmlsZShXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MSGVhZEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZEVsZW1l
bnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjIyZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MSGVhZEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnRQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxIZWFkRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MSGVhZEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1M
SGVhZEVsZW1lbnQqIHdyYXBIVE1MSGVhZEVsZW1lbnQoV2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50
Kik7CitXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSGVhZEVsZW1l
bnQqKTsKK1dlYkNvcmU6OkhUTUxIZWFkRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSGVhZEVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TEhlYWRFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkaW5nRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTMyMjQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhl
YWRpbmdFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxI
ZWFkaW5nRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERP
TUhUTUxIZWFkaW5nRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxIZWFkaW5nRWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCogb2JqKQoreworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfSEVBRElOR19FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqIGNvcmUo
V2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEhl
YWRpbmdFbGVtZW50KiB3cmFwSFRNTEhlYWRpbmdFbGVtZW50KFdlYkNvcmU6OkhUTUxIZWFkaW5n
RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9IRUFESU5HX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9IVE1MX0hFQURJTkdfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50
KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNv
cmU6OkhUTUxIZWFkaW5nRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxIZWFkaW5nRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBk
ZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
SFRNTEhlYWRpbmdFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TEhlYWRpbmdFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VD
YXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfaGVhZGlu
Z19lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIg
PSB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAg
ICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2hlYWRpbmdf
ZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9D
T0RFKFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2hlYWRpbmdf
ZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJG
QUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BTElHTiwKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiBzZWxm
ID0gV0VCS0lUX0RPTV9IVE1MX0hFQURJTkdfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfaGVhZGluZ19lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFk
aW5nX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRN
TEhlYWRpbmdFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0hFQURJTkdfRUxFTUVOVChv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdO
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaGVh
ZGluZ19lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRN
TEhlYWRpbmdFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVj
dENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
aHRtbF9oZWFkaW5nX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FM
SUdOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwK
KyAgICAgICAgICAgICJIVE1MSGVhZGluZ0VsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxIZWFkaW5nRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEhl
YWRpbmdFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktp
dERPTUhUTUxIZWFkaW5nRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0hFQURJTkdfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEhlYWRp
bmdFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfc2V0X2FsaWduKFdlYktp
dERPTUhUTUxIZWFkaW5nRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9IRUFESU5HX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MSGVhZGluZ0VsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45YWM2OGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQu
aApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VC
S0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRl
ZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1l
bnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRfaAorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRElOR19FTEVNRU5UICAgICAg
ICAgICAgKHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0hFQURJTkdfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFESU5H
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9IRUFESU5HX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRElOR19FTEVNRU5ULCBX
ZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19I
VE1MX0hFQURJTkdfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFESU5HX0VMRU1FTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRElOR19FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURJTkdf
RUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9IRUFESU5HX0VMRU1FTlRfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfSEVBRElOR19FTEVNRU5ULCBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50IHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxIZWFkaW5nRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9oZWFk
aW5nX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hl
YWRpbmdfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEhlYWRp
bmdFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhU
TUxIZWFkaW5nRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hlYWRp
bmdfZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEhlYWRpbmdF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxIZWFk
aW5nRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxIZWFkaW5nRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYmUyNGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudFByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTUhUTUxIZWFkaW5nRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSGVh
ZGluZ0VsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEhlYWRpbmdFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudCogd3Jh
cEhUTUxIZWFkaW5nRWxlbWVudChXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqKTsKK1dlYktp
dERPTUhUTUxIZWFkaW5nRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxIZWFkaW5nRWxlbWVudCop
OworV2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxIZWFkaW5n
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MSGVhZGluZ0VsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jNjliODcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRt
bEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEh0bWxF
bGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEh0
bWxFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJp
bmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSHRtbEVsZW1lbnRVbnN0YWJsZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
SHRtbEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0hUTUxfRUxF
TUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29y
ZTo6SFRNTEh0bWxFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIdG1s
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTUhUTUxIdG1sRWxlbWVudCogd3JhcEhUTUxIdG1sRWxlbWVudChXZWJDb3Jl
OjpIVE1MSHRtbEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfSFRNTF9IVE1MX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJy
b3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVu
dCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJD
b3JlOjpIVE1MSHRtbEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MSHRtbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3Jp
cHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxIdG1s
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkhUTUxIdG1sRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxIdG1sRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxl
bWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5l
ciA9IHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOwor
fQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQsIHdl
YmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfVkVSU0lPTiwKKyAgICBQUk9QX01BTklGRVNULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX2h0bWxfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSFRN
TF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfVkVSU0lPTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9zZXRf
dmVyc2lvbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX01BTklGRVNUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaHRtbF9l
bGVtZW50X3NldF9tYW5pZmVzdChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX0hUTUxfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZFUlNJT046CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X3ZlcnNp
b24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFOSUZFU1Q6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1l
bnRfZ2V0X21hbmlmZXN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9odG1sX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MSHRtbEVsZW1l
bnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAg
IGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVu
dF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkVSU0lPTiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2ZXJzaW9uIiwKKyAgICAgICAgICAgICJI
VE1MSHRtbEVsZW1lbnQ6dmVyc2lvbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEh0bWxFbGVtZW50OnZlcnNpb24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUFOSUZFU1QsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWFuaWZlc3QiLAorICAg
ICAgICAgICAgIkhUTUxIdG1sRWxlbWVudDptYW5pZmVzdCIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTEh0bWxFbGVtZW50Om1hbmlmZXN0IiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MSHRtbEVsZW1l
bnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfdmVyc2lvbihXZWJLaXRET01IVE1MSHRt
bEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6dmVyc2lvbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9odG1sX2VsZW1lbnRfc2V0X3ZlcnNpb24oV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6dmVyc2lvbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X21hbmlmZXN0KFdlYktpdERPTUhUTUxIdG1s
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0hUTUxfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6Om1hbmlmZXN0QXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2h0bWxfZWxl
bWVudF9zZXRfbWFuaWZlc3QoV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0hUTUxfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEh0
bWxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWFu
aWZlc3RBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0
bWxFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmE0OWVkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1s
RWxlbWVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlM
RElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxIdG1s
RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIdG1sRWxlbWVudF9oCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IVE1MX0VMRU1FTlQgICAgICAg
ICAgICAod2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0hUTUxfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hUTUxf
RUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IVE1MX0VMRU1FTlQsIFdlYktpdERPTUhUTUxIdG1sRWxl
bWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfSFRNTF9FTEVNRU5UKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0hUTUxfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9IVE1MX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfSFRNTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1M
X0hUTUxfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IVE1MX0VMRU1FTlQsIFdlYktpdERPTUhUTUxI
dG1sRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnQgewor
ICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9o
dG1sX2h0bWxfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaHRtbF9lbGVtZW50X2dldF92ZXJzaW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxI
dG1sRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2dldF92ZXJzaW9uKFdlYktpdERPTUhU
TUxIdG1sRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2h0bWxfZWxl
bWVudF9zZXRfdmVyc2lvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2h0bWxfZWxlbWVudF9zZXRfdmVyc2lvbihXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
ZWJLaXRET01IVE1MSHRtbEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWEwOTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MSHRtbEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MSHRtbEVsZW1lbnRQcml2
YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxIdG1sRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MSHRtbEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01I
VE1MSHRtbEVsZW1lbnQqIHdyYXBIVE1MSHRtbEVsZW1lbnQoV2ViQ29yZTo6SFRNTEh0bWxFbGVt
ZW50Kik7CitXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSHRtbEVs
ZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSHRt
bEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9N
SFRNTEh0bWxFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxl
bWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5ODc4NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEh0bWxFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxIdG1sRWxlbWVudFVu
c3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50VW5zdGFibGVfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfbWFuaWZlc3Q6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfaHRtbF9lbGVtZW50X2dldF9tYW5pZmVzdChXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfc2V0X21hbmlm
ZXN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxIdG1sRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3NldF9tYW5pZmVzdChXZWJLaXRET01IVE1M
SHRtbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTUhUTUxIdG1sRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TElGcmFtZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkMWVjOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNjE3IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2lu
ZG93UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCog
b2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQoa2l0KHN0
YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxJRnJh
bWVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElGcmFtZUVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogd3JhcEhUTUxJRnJhbWVFbGVtZW50KFdlYkNvcmU6
OkhUTUxJRnJhbWVFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0lGUkFNRV9FTEVNRU5UKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9JRlJBTUVfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3Jl
RXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5j
b2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJD
b3JlOjpIVE1MSUZyYW1lRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxJRnJhbWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfaWZyYW1l
X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAg
aWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9GUkFN
RV9CT1JERVIsCisgICAgUFJPUF9IRUlHSFQsCisgICAgUFJPUF9MT05HX0RFU0MsCisgICAgUFJP
UF9NQVJHSU5fSEVJR0hULAorICAgIFBST1BfTUFSR0lOX1dJRFRILAorICAgIFBST1BfTkFNRSwK
KyAgICBQUk9QX1NBTkRCT1gsCisgICAgUFJPUF9TQ1JPTExJTkcsCisgICAgUFJPUF9TUkMsCisg
ICAgUFJPUF9TUkNET0MsCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0NPTlRFTlRfRE9DVU1F
TlQsCisgICAgUFJPUF9DT05URU5UX1dJTkRPVywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9J
RlJBTUVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
c2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRlJBTUVfQk9SREVSOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfc2V0X2ZyYW1lX2JvcmRlcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9oZWlnaHQoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT05HX0RF
U0M6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19kZXNj
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTUFSR0lOX0hFSUdIVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X3NldF9tYXJnaW5faGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFSR0lOX1dJRFRIOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl93aWR0aChzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05B
TUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbmFtZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NBTkRCT1g6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRf
c2FuZGJveChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NDUk9MTElORzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9zY3JvbGxpbmcoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc3JjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDRE9DOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NyY2RvYyhzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3dpZHRoKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0lGUkFN
RV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfRlJBTUVfQk9SREVSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9n
ZXRfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPTkdfREVT
QzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lm
cmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2Moc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTUFSR0lOX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5faGVpZ2h0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BUkdJTl9XSURUSDoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF9tYXJnaW5fd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1NBTkRCT1g6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2FuZGJveChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExJTkc6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xsaW5nKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9z
cmMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDRE9DOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfZ2V0X3NyY2RvYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURU
SDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lm
cmFtZV9lbGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DT05URU5UX0RPQ1VNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05URU5UX1dJTkRPVzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfZ2V0X2NvbnRlbnRfd2luZG93KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxJ
RnJhbWVFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAg
ICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZS
QU1FX0JPUkRFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJm
cmFtZS1ib3JkZXIiLAorICAgICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50OmZyYW1lLWJvcmRl
ciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElGcmFtZUVsZW1lbnQ6ZnJh
bWUtYm9yZGVyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAgIkhUTUxJRnJh
bWVFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElG
cmFtZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPTkdfREVTQywKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsb25nLWRlc2MiLAorICAgICAg
ICAgICAgIkhUTUxJRnJhbWVFbGVtZW50OmxvbmctZGVzYyIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTElGcmFtZUVsZW1lbnQ6bG9uZy1kZXNjIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX01BUkdJTl9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAibWFyZ2luLWhlaWdodCIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6bWFy
Z2luLWhlaWdodCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElGcmFtZUVs
ZW1lbnQ6bWFyZ2luLWhlaWdodCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NQVJHSU5fV0lEVEgsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWFyZ2luLXdpZHRoIiwK
KyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDptYXJnaW4td2lkdGgiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50Om1hcmdpbi13aWR0aCIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50Om5hbWUiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50Om5hbWUiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU0FOREJPWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJzYW5kYm94IiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDpz
YW5kYm94IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVu
dDpzYW5kYm94IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTElORywKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzY3JvbGxpbmciLAorICAgICAgICAgICAgIkhU
TUxJRnJhbWVFbGVtZW50OnNjcm9sbGluZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTElGcmFtZUVsZW1lbnQ6c2Nyb2xsaW5nIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NSQywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzcmMiLAorICAgICAg
ICAgICAgIkhUTUxJRnJhbWVFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTElGcmFtZUVsZW1lbnQ6c3JjIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NSQ0RPQywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzcmNkb2MiLAorICAg
ICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50OnNyY2RvYyIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTElGcmFtZUVsZW1lbnQ6c3JjZG9jIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIndpZHRo
IiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTElGcmFtZUVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJjb250ZW50LWRvY3VtZW50IiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxl
bWVudDpjb250ZW50LWRvY3VtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
RG9jdW1lbnQqIEhUTUxJRnJhbWVFbGVtZW50OmNvbnRlbnQtZG9jdW1lbnQiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVOVF9XSU5ET1csCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY29udGVudC13aW5kb3ciLAorICAgICAg
ICAgICAgIkhUTUxJRnJhbWVFbGVtZW50OmNvbnRlbnQtd2luZG93IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NRE9NV2luZG93KiBIVE1MSUZyYW1lRWxlbWVudDpjb250ZW50LXdp
bmRvdyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVywKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBy
ZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfZnJhbWVfYm9yZGVyKFdlYktpdERP
TUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpmcmFtZWJvcmRlckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfZnJhbWVfYm9yZGVy
KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZyYW1lYm9yZGVyQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhlaWdodEF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
SUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmhlaWdodEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9pZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19kZXNjKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjps
b25nZGVzY0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19kZXNjKFdlYktpdERPTUhUTUxJRnJhbWVFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmxvbmdkZXNjQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5faGVpZ2h0KFdl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJh
bWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjptYXJnaW5oZWlnaHRBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdp
bl9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWFyZ2lu
aGVpZ2h0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5fd2lkdGgoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
Om1hcmdpbndpZHRoQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9tYXJnaW5fd2lkdGgoV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWFyZ2lud2lkdGhBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X25hbWUo
V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElG
cmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9z
ZXRfbmFtZShXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X2dldF9zYW5kYm94KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzYW5kYm94QXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X3NldF9zYW5kYm94KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNhbmRib3hBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3Njcm9sbGluZyhXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6c2Nyb2xsaW5nQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zY3JvbGxpbmcoV2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2Nyb2xsaW5nQXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9zcmMoV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6c3JjQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmMoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZS
QU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6c3JjQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9zcmNkb2MoV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNyY2RvY0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc3JjZG9jKFdlYktpdERPTUhUTUxJRnJhbWVFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnNyY2RvY0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRN
TElGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9J
RlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OndpZHRoQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MSUZy
YW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworV2ViS2l0RE9NRG9jdW1lbnQqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRf
Y29udGVudF9kb2N1bWVudChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5jb250ZW50RG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01ET01XaW5kb3cqIHdlYmtpdF9kb21faHRt
bF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93aW5kb3coV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdpbmRvdz4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRlbnRXaW5kb3coKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxJRnJhbWVFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmZDIxZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDI1MiBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYm
ICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtp
dGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTElGcmFtZUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9J
RlJBTUVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0lGUkFNRV9FTEVNRU5UKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9IVE1MX0lGUkFNRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JRlJB
TUVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0lGUkFNRV9FTEVNRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0lGUkFNRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0lGUkFNRV9FTEVNRU5U
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0lGUkFNRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCB7CisgICAgV2Vi
S2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01IVE1MSUZyYW1lRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9p
ZnJhbWVfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJh
bWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRN
TElGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2Jv
cmRlcihXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9mcmFtZV9ib3JkZXI6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9mcmFt
ZV9ib3JkZXIoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9oZWln
aHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lm
cmFtZV9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfaGVpZ2h0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9n
ZXRfbG9uZ19kZXNjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19kZXNjKFdlYktpdERPTUhUTUxJRnJhbWVF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
c2V0X2xvbmdfZGVzYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5f
aGVpZ2h0KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl9oZWlnaHQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9t
YXJnaW5faGVpZ2h0KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRf
bWFyZ2luX3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX3dpZHRoKFdlYktpdERPTUhUTUxJRnJh
bWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfc2V0X21hcmdpbl93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl93aWR0aChXZWJLaXRET01IVE1M
SUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9uYW1lKFdl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxJ
RnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xsaW5nOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2Ny
b2xsaW5nKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3Njcm9sbGluZzoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3Njcm9s
bGluZyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NyYzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2Vs
ZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmMo
V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3dpZHRoOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfd2lk
dGgoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9jb250ZW50X2Rv
Y3VtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVudAorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTURvY3VtZW50Kgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF9jb250ZW50X2RvY3VtZW50KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfd2lu
ZG93OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
Z2V0X2NvbnRlbnRfd2luZG93KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50X2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJ
RnJhbWVFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhjM2ZhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50UHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTElG
cmFtZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dCogd3JhcEhUTUxJRnJhbWVFbGVtZW50KFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50Kik7CitX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50
Kik7CitXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSUZyYW1l
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MSUZyYW1lRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1l
RWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50VW5zdGFibGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGNhOTQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MSUZyYW1l
RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRVbnN0
YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NhbmRib3g6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2FuZGJveChXZWJLaXRET01I
VE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9zYW5kYm94OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRf
c2FuZGJveChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NyY2Rv
YzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9zcmNkb2MoV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
ZnJhbWVfZWxlbWVudF9zZXRfc3JjZG9jOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJh
bWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9z
ZXRfc3JjZG9jKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudFVuc3RhYmxl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJ
bWFnZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOWQ4
MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0wLDAg
KzEsODQxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudC5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogb2Jq
KQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSU1BR0VfRUxFTUVOVChraXQoc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEltYWdlRWxl
bWVudCogY29yZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQqIHdyYXBIVE1MSW1hZ2VFbGVtZW50KFdlYkNvcmU6OkhUTUxJbWFn
ZUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXRUJLSVRfRE9NX0hUTUxfSU1BR0VfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0hUTUxfSU1BR0VfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Cisg
ICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpI
VE1MSW1hZ2VFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
Y29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlv
bi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBo
YW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlz
cGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9kaXNwYXRjaF9ldmVu
dDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlz
dGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9F
TEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdF
VCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX0FMVCwKKyAgICBQUk9Q
X0JPUkRFUiwKKyAgICBQUk9QX0NST1NTX09SSUdJTiwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQ
Uk9QX0hTUEFDRSwKKyAgICBQUk9QX0lTX01BUCwKKyAgICBQUk9QX0xPTkdfREVTQywKKyAgICBQ
Uk9QX1NSQywKKyAgICBQUk9QX1NSQ1NFVCwKKyAgICBQUk9QX1NJWkVTLAorICAgIFBST1BfQ1VS
UkVOVF9TUkMsCisgICAgUFJPUF9VU0VfTUFQLAorICAgIFBST1BfVlNQQUNFLAorICAgIFBST1Bf
V0lEVEgsCisgICAgUFJPUF9DT01QTEVURSwKKyAgICBQUk9QX0xPV1NSQywKKyAgICBQUk9QX05B
VFVSQUxfSEVJR0hULAorICAgIFBST1BfTkFUVVJBTF9XSURUSCwKKyAgICBQUk9QX1gsCisgICAg
UFJPUF9ZLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
c2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEltYWdl
RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9JTUFHRV9FTEVNRU5UKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxU
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfYWx0KHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Qk9SREVSOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfYm9yZGVy
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ1JPU1NfT1JJR0lOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfY3Jvc3Nfb3JpZ2luKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hTUEFDRToKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2hzcGFjZShzZWxmLCBnX3ZhbHVlX2dldF9s
b25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19NQVA6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9pc19tYXAoc2VsZiwgZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9O
R19ERVNDOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbG9uZ19k
ZXNjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU1JDOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9z
ZXRfc3JjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU1JDU0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfc3Jjc2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRVM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF9zaXplcyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRV9NQVA6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X3NldF91c2VfbWFwKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQQUNFOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfdnNwYWNlKHNlbGYsIGdfdmFsdWVf
Z2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192
YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9X
U1JDOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbG93c3JjKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRN
TF9JTUFHRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbHQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQk9SREVSOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYm9yZGVy
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NST1NTX09SSUdJTjoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfSFNQQUNFOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaHNwYWNlKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0lTX01BUDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2lzX21hcChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT05HX0RFU0M6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9sb25n
X2Rlc2Moc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9nZXRfc3JjKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQ1NFVDoK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfZ2V0X3NyY3NldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TSVpFUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3NpemVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0NVUlJFTlRfU1JDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3VycmVudF9zcmMoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFX01BUDoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3VzZV9t
YXAoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQQUNFOgorICAgICAg
ICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9n
ZXRfdnNwYWNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgor
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09N
UExFVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X2dldF9jb21wbGV0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MT1dTUkM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9sb3dzcmMoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTkFUVVJBTF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1cmFsX2hl
aWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQVRVUkFMX1dJRFRI
OgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2Vf
ZWxlbWVudF9nZXRfbmF0dXJhbF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9wcm9wZXJ0
eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAg
IkhUTUxJbWFnZUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEltYWdlRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAg
ICJIVE1MSW1hZ2VFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MSW1hZ2VFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMVCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbHQiLAorICAgICAgICAgICAg
IkhUTUxJbWFnZUVsZW1lbnQ6YWx0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MSW1hZ2VFbGVtZW50OmFsdCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CT1JERVIsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYm9yZGVyIiwKKyAgICAgICAgICAg
ICJIVE1MSW1hZ2VFbGVtZW50OmJvcmRlciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEltYWdlRWxlbWVudDpib3JkZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1JPU1NfT1JJ
R0lOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNyb3NzLW9y
aWdpbiIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpjcm9zcy1vcmlnaW4iLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6Y3Jvc3Mtb3JpZ2lu
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
CisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50Omhl
aWdodCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MSW1hZ2VFbGVtZW50Omhl
aWdodCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IU1BBQ0UsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImhzcGFjZSIsCisgICAgICAg
ICAgICAiSFRNTEltYWdlRWxlbWVudDpoc3BhY2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2xvbmcgSFRNTEltYWdlRWxlbWVudDpoc3BhY2UiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfSVNfTUFQLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJpcy1tYXAiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6aXMtbWFw
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbWFnZUVsZW1lbnQ6aXMt
bWFwIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPTkdfREVTQywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJsb25nLWRlc2MiLAorICAgICAgICAgICAgIkhUTUxJ
bWFnZUVsZW1lbnQ6bG9uZy1kZXNjIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MSW1hZ2VFbGVtZW50OmxvbmctZGVzYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TUkMsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3JjIiwKKyAgICAgICAgICAg
ICJIVE1MSW1hZ2VFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEltYWdlRWxlbWVudDpzcmMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1JDU0VULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNyY3NldCIsCisgICAgICAgICAg
ICAiSFRNTEltYWdlRWxlbWVudDpzcmNzZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxJbWFnZUVsZW1lbnQ6c3Jjc2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NJWkVTLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNpemVzIiwKKyAgICAg
ICAgICAgICJIVE1MSW1hZ2VFbGVtZW50OnNpemVzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MSW1hZ2VFbGVtZW50OnNpemVzIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NVUlJF
TlRfU1JDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImN1cnJl
bnQtc3JjIiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50OmN1cnJlbnQtc3JjIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6Y3VycmVudC1zcmMi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9VU0VfTUFQLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgInVzZS1tYXAiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6
dXNlLW1hcCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEltYWdlRWxlbWVu
dDp1c2UtbWFwIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZTUEFDRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCisgICAgICAgICAgICAidnNwYWNlIiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VF
bGVtZW50OnZzcGFjZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MSW1hZ2VF
bGVtZW50OnZzcGFjZSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9X
SURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAid2lkdGgiLAor
ICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2xvbmcgSFRNTEltYWdlRWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DT01QTEVURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAiY29tcGxldGUiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1l
bnQ6Y29tcGxldGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MSW1hZ2VF
bGVtZW50OmNvbXBsZXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTE9XU1JDLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxvd3NyYyIsCisgICAgICAgICAgICAi
SFRNTEltYWdlRWxlbWVudDpsb3dzcmMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxJbWFnZUVsZW1lbnQ6bG93c3JjIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BVFVSQUxfSEVJ
R0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJuYXR1cmFsLWhl
aWdodCIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpuYXR1cmFsLWhlaWdodCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIEhUTUxJbWFnZUVsZW1lbnQ6bmF0dXJhbC1oZWln
aHQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQVRVUkFMX1dJRFRI
LAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJuYXR1cmFsLXdpZHRo
IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50Om5hdHVyYWwtd2lkdGgiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MSW1hZ2VFbGVtZW50Om5hdHVyYWwtd2lkdGgiLAor
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9YLAorICAgICAgICBnX3BhcmFt
X3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ4IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVt
ZW50OngiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MSW1hZ2VFbGVtZW50Ongi
LAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ZLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ5IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VF
bGVtZW50OnkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MSW1hZ2VFbGVtZW50
OnkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHJlcXVlc3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0
TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1B
R0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2FsdChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWx0
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X2FsdChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjphbHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfYm9yZGVyKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpib3JkZXJBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2Vf
ZWxlbWVudF9zZXRfYm9yZGVyKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmJvcmRlckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X2dldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+Y3Jvc3NPcmlnaW4oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0Q3Jvc3NPcmlnaW4oY29udmVydGVkVmFsdWUpOwor
fQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
PmhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxm
LCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRIZWlnaHQodmFsdWUpOworfQorCitnbG9uZyB3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaHNwYWNlKFdlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aHNwYWNlQXR0cik7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaHNwYWNlKFdl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aHNwYWNlQXR0ciwgdmFsdWUpOwor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaXNfbWFwKFdl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6aXNtYXBBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9pc19tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmlzbWFwQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpsb25nZGVzY0F0dHIp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X3NldF9sb25nX2Rlc2MoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6bG9uZ2Rlc2NBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdl
dFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9zcmMo
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3Ny
Y3NldChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3Jjc2V0QXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3NyY3NldChX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNzZXRBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRf
c2l6ZXMoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNpemVzQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3NpemVzKFdl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNpemVzQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2N1
cnJlbnRfc3JjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmN1cnJlbnRTcmMoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X2dldF91c2VfbWFwKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp1c2VtYXBBdHRyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRf
dXNlX21hcChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp1c2VtYXBBdHRy
LCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X2dldF92c3BhY2UoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjp2c3BhY2VBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X3NldF92c3BhY2UoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdF
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjp2c3BhY2VBdHRyLCB2YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT53aWR0aCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3dpZHRo
KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpI
VE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNl
dFdpZHRoKHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfZ2V0X2NvbXBsZXRlKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jb21wbGV0ZSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbG93c3Jj
KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1h
Z2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6Omxvd3NyY0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9sb3dzcmMoV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6bG93c3JjQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9u
ZyB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmF0dXJhbF9oZWlnaHQoV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+
bmF0dXJhbEhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1cmFsX3dpZHRoKFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm5hdHVyYWxXaWR0
aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2dldF94KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdsb25nIHJlc3VsdCA9IGl0ZW0tPngoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9u
ZyB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfeShXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT55KCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xMGQzMWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LmgKQEAg
LTAsMCArMSwzMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQp
CisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRfaAor
I2RlZmluZSBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0lNQUdFX0VMRU1FTlQgICAgICAgICAgICAod2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX0lNQUdFX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU1BR0VfRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9JTUFHRV9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9IVE1MX0lNQUdFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfSU1BR0VfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9F
TEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9IVE1MX0lNQUdFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfSU1BR0VfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTUFHRV9FTEVNRU5ULCBXZWJLaXRET01I
VE1MSW1hZ2VFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1M
RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1h
Z2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1h
Z2VfZWxlbWVudF9nZXRfYWx0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2FsdChXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRf
YWx0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfc2V0X2FsdChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF9ib3JkZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfYm9yZGVyKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9ib3JkZXI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9zZXRfYm9yZGVyKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0
X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaGVpZ2h0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xv
bmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2hzcGFjZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X2hzcGFjZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaHNwYWNlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2hz
cGFjZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2lzX21hcDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfZ2V0X2lzX21hcChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaXNfbWFwOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2lz
X21hcChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X2dldF9sb25nX2Rlc2MoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2xvbmdfZGVzYzoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3Nl
dF9sb25nX2Rlc2MoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc3Jj
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfc3JjOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3NyYyhX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF91c2VfbWFwOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
Z2V0X3VzZV9tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3VzZV9tYXA6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfdXNlX21h
cChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF92c3BhY2U6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2ds
b25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X2dldF92c3BhY2UoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF92c3BhY2Uo
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLwor
V0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3dpZHRo
KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY29tcGxldGUo
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2xvd3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9sb3dzcmMoV2ViS2l0RE9N
SFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfc2V0X2xvd3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9sb3dzcmMoV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmF0dXJhbF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJ
VF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1cmFsX2hl
aWdodChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmF0dXJhbF93aWR0aDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLwor
V0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVy
YWxfd2lkdGgoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF94KFdlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X2dldF95OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfeShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxm
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MSW1hZ2VFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjk1NTMzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRQcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTElt
YWdlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCog
d3JhcEhUTUxJbWFnZUVsZW1lbnQoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCopOworV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqKTsKK1dl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRVbnN0
YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41Y2Y1YTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50VW5zdGFi
bGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50VW5zdGFibGVfaAorCisjaWZk
ZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X3NldF9jcm9zc19vcmlnaW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfY3Jvc3Nf
b3JpZ2luKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3NyY3NldDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc3Jjc2V0KFdlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X3NldF9zcmNzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfc3Jjc2V0
KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3NpemVzOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9zaXplcyhXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9z
ZXRfc2l6ZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfc2l6ZXMoV2ViS2l0RE9N
SFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3VycmVudF9zcmM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2N1cnJlbnRfc3JjKFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQqIHNlbGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDc4YWIxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5jcHAK
QEAgLTAsMCArMSwxNzkyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUZpbGVMaXN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlLmgi
CisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogb2JqKQoreworICAg
IHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSU5QVVRfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogY29y
ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHdyYXBIVE1MSW5wdXRFbGVtZW50KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0hUTUxfSU5QVVRfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hU
TUxfSU5QVVRfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFj
b3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBn
Ym9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5l
cihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdD
bG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0
dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJL
aXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZl
bnQgPSB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBp
ZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
YWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQsIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBH
X0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9Q
X0FDQ0VQVCwKKyAgICBQUk9QX0FMVCwKKyAgICBQUk9QX0FVVE9DT01QTEVURSwKKyAgICBQUk9Q
X0FVVE9GT0NVUywKKyAgICBQUk9QX0RFRkFVTFRfQ0hFQ0tFRCwKKyAgICBQUk9QX0NIRUNLRUQs
CisgICAgUFJPUF9ESVJfTkFNRSwKKyAgICBQUk9QX0RJU0FCTEVELAorICAgIFBST1BfRk9STSwK
KyAgICBQUk9QX0ZJTEVTLAorICAgIFBST1BfRk9STV9BQ1RJT04sCisgICAgUFJPUF9GT1JNX0VO
Q1RZUEUsCisgICAgUFJPUF9GT1JNX01FVEhPRCwKKyAgICBQUk9QX0ZPUk1fTk9fVkFMSURBVEUs
CisgICAgUFJPUF9GT1JNX1RBUkdFVCwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX0lOREVU
RVJNSU5BVEUsCisgICAgUFJPUF9MSVNULAorICAgIFBST1BfTUFYLAorICAgIFBST1BfTUFYX0xF
TkdUSCwKKyAgICBQUk9QX01JTiwKKyAgICBQUk9QX01VTFRJUExFLAorICAgIFBST1BfTkFNRSwK
KyAgICBQUk9QX1BBVFRFUk4sCisgICAgUFJPUF9QTEFDRUhPTERFUiwKKyAgICBQUk9QX1JFQURf
T05MWSwKKyAgICBQUk9QX1JFUVVJUkVELAorICAgIFBST1BfU0laRSwKKyAgICBQUk9QX1NSQywK
KyAgICBQUk9QX1NURVAsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfREVGQVVMVF9WQUxVRSwK
KyAgICBQUk9QX1ZBTFVFLAorICAgIFBST1BfVkFMVUVfQVNfTlVNQkVSLAorICAgIFBST1BfV0lE
VEgsCisgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgIFBST1BfVkFMSURJVFksCisgICAgUFJP
UF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgUFJPUF9MQUJFTFMsCisgICAgUFJPUF9BTElHTiwK
KyAgICBQUk9QX1VTRV9NQVAsCisgICAgUFJPUF9JTkNSRU1FTlRBTCwKKyAgICBQUk9QX0FVVE9D
T1JSRUNULAorICAgIFBST1BfQVVUT0NBUElUQUxJWkUsCisgICAgUFJPUF9DQVBUVVJFLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9JTlBVVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUNDRVBUOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWNjZXB0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxUOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWx0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NPTVBMRVRFOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQVVUT0ZPQ1VTOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfYXV0b2ZvY3VzKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfQ0hFQ0tFRDoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2RlZmF1bHRfY2hlY2tlZChzZWxmLCBnX3ZhbHVlX2dl
dF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSEVDS0VE
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY2hlY2tlZChzZWxm
LCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9ESVJfTkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X2Rpcl9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9kaXNhYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX0FDVElPTjoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fYWN0aW9uKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9F
TkNUWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV9l
bmN0eXBlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfRk9STV9NRVRIT0Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9mb3JtX21ldGhvZChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fTk9fVkFMSURBVEU6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX25vX3ZhbGlkYXRlKHNl
bGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0ZPUk1fVEFSR0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9zZXRfZm9ybV90YXJnZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF9oZWlnaHQoc2VsZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOREVURVJNSU5BVEU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbmRldGVybWluYXRlKHNlbGYsIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X01BWDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X21heChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX01BWF9MRU5HVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF9tYXhfbGVuZ3RoKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpLCBudWxscHRyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X21pbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01VTFRJUExFOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbXVsdGlwbGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9v
bGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVRURVJO
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcGF0dGVybihzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BMQUNFSE9MREVSOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfcGxhY2Vob2xkZXIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUFEX09OTFk6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF9yZWFkX29ubHkoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVRVUlSRUQ6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9yZXF1aXJlZChzZWxmLCBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpF
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2l6ZShzZWxmLCBn
X3ZhbHVlX2dldF91bG9uZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU1JDOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
c3JjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU1RFUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3N0ZXAoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfaW5wdXRfdHlwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfVkFMVUU6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVlKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZShzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1ZBTFVFX0FTX05VTUJFUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3ZhbHVlX2FzX251bWJlcihzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUpLCBudWxs
cHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfdWxv
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfTUFQ
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfdXNlX21hcChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0lOQ1JFTUVOVEFMOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfaW5jcmVtZW50YWwoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NPUlJFQ1Q6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvY29ycmVjdChzZWxmLCBnX3ZhbHVlX2dldF9ib29s
ZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ0FQSVRBTEla
RToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFs
aXplKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQ0FQVFVSRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X2NhcHR1cmUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
ID0gV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BQ0NFUFQ6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hY2NlcHQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxUOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRf
YWx0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9DT01QTEVURToK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X2F1dG9jb21wbGV0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvZm9jdXMoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9DSEVDS0VEOgorICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVm
YXVsdF9jaGVja2VkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIRUNL
RUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9jaGVja2VkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0RJUl9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGlyX25hbWUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kaXNhYmxlZChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3Jt
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZJTEVTOgorICAgICAgICBn
X3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9maWxlcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX0FDVElP
TjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0ZPUk1fRU5DVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX01FVEhPRDoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X2Zvcm1fbWV0aG9kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1f
Tk9fVkFMSURBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX25vX3ZhbGlkYXRlKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fVEFSR0VUOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV90
YXJnZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAg
ICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTkRF
VEVSTUlOQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5kZXRlcm1pbmF0ZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9MSVNUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9saXN0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21heChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfTEVOR1RIOgorICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbWF4X2xl
bmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU46CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9taW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTVVMVElQTEU6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF9tdWx0aXBsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9QQVRURVJOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcGF0dGVybihzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFDRUhPTERFUjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3BsYWNlaG9s
ZGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFQURfT05MWToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X3JlYWRfb25seShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9SRVFVSVJFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3JlcXVpcmVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfc2l6ZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TUkM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9zcmMoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RFUDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3N0ZXAoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2lucHV0X3R5
cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9WQUxVRToK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WQUxVRV9BU19OVU1CRVI6CisgICAgICAgIGdfdmFsdWVfc2V0X2Rv
dWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVlX2FzX251
bWJlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSUxMX1ZB
TElEQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WQUxJRElUWToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsaWRpdHkoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURBVElPTl9NRVNTQUdFOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0xBQkVMUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbGFiZWxzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFX01BUDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3VzZV9tYXAoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5DUkVNRU5UQUw6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9pbmNyZW1lbnRhbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9B
VVRPQ09SUkVDVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0FVVE9DQVBJVEFMSVpFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2NhcGl0
YWxpemUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FQVFVSRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2NhcHR1cmVfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BQ0NFUFQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWNjZXB0IiwKKyAgICAg
ICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmFjY2VwdCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDphY2NlcHQiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsdCIsCisgICAg
ICAgICAgICAiSFRNTElucHV0RWxlbWVudDphbHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6YWx0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9DT01Q
TEVURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhdXRvY29t
cGxldGUiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6YXV0b2NvbXBsZXRlIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmF1dG9jb21wbGV0
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPRk9DVVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgImF1dG9mb2N1cyIsCisgICAgICAgICAgICAiSFRNTElucHV0
RWxlbWVudDphdXRvZm9jdXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRN
TElucHV0RWxlbWVudDphdXRvZm9jdXMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVF9D
SEVDS0VELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkZWZh
dWx0LWNoZWNrZWQiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6ZGVmYXVsdC1jaGVj
a2VkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6
ZGVmYXVsdC1jaGVja2VkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NIRUNLRUQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNoZWNrZWQiLAorICAgICAgICAg
ICAgIkhUTUxJbnB1dEVsZW1lbnQ6Y2hlY2tlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Ym9vbGVhbiBIVE1MSW5wdXRFbGVtZW50OmNoZWNrZWQiLAorICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
RElSX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGly
LW5hbWUiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6ZGlyLW5hbWUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6ZGlyLW5hbWUiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmRp
c2FibGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1l
bnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1MSW5w
dXRFbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqIEhUTUxJbnB1dEVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GSUxFUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJmaWxlcyIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVu
dDpmaWxlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUZpbGVMaXN0KiBIVE1M
SW5wdXRFbGVtZW50OmZpbGVzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9GSUxFX0xJ
U1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9GT1JNX0FDVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJmb3JtLWFjdGlvbiIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpmb3JtLWFj
dGlvbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDpm
b3JtLWFjdGlvbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNX0VOQ1RZUEUsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZm9ybS1lbmN0eXBlIiwKKyAgICAgICAg
ICAgICJIVE1MSW5wdXRFbGVtZW50OmZvcm0tZW5jdHlwZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDpmb3JtLWVuY3R5cGUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfRk9STV9NRVRIT0QsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAiZm9ybS1tZXRob2QiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6Zm9ybS1t
ZXRob2QiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6
Zm9ybS1tZXRob2QiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STV9OT19WQUxJREFURSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZm9ybS1uby12YWxpZGF0ZSIs
CisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpmb3JtLW5vLXZhbGlkYXRlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6Zm9ybS1uby12YWxp
ZGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNX1RBUkdFVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmb3JtLXRhcmdldCIsCisgICAgICAgICAgICAi
SFRNTElucHV0RWxlbWVudDpmb3JtLXRhcmdldCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTElucHV0RWxlbWVudDpmb3JtLXRhcmdldCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9I
RUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJoZWlnaHQi
LAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGd1bG9uZyBIVE1MSW5wdXRFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAw
LCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0lOREVURVJNSU5BVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgImluZGV0ZXJtaW5hdGUiLAorICAgICAgICAgICAgIkhUTUxJ
bnB1dEVsZW1lbnQ6aW5kZXRlcm1pbmF0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9v
bGVhbiBIVE1MSW5wdXRFbGVtZW50OmluZGV0ZXJtaW5hdGUiLAorICAgICAgICAgICAgRkFMU0Us
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTElTVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJsaXN0
IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50Omxpc3QiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01IVE1MRWxlbWVudCogSFRNTElucHV0RWxlbWVudDpsaXN0IiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NQVgsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWF4IiwKKyAgICAgICAgICAgICJIVE1M
SW5wdXRFbGVtZW50Om1heCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElu
cHV0RWxlbWVudDptYXgiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUFYX0xFTkdUSCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAibWF4LWxlbmd0aCIsCisgICAgICAgICAg
ICAiSFRNTElucHV0RWxlbWVudDptYXgtbGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdsb25nIEhUTUxJbnB1dEVsZW1lbnQ6bWF4LWxlbmd0aCIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9NSU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAibWluIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50Om1pbiIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDptaW4iLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTVVMVElQTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgIm11bHRpcGxlIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50Om11
bHRpcGxlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1l
bnQ6bXVsdGlwbGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJIVE1MSW5w
dXRFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1
dEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVRURVJOLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBhdHRlcm4iLAorICAgICAgICAgICAgIkhU
TUxJbnB1dEVsZW1lbnQ6cGF0dGVybiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTElucHV0RWxlbWVudDpwYXR0ZXJuIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BMQUNFSE9MREVS
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBsYWNlaG9sZGVy
IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OnBsYWNlaG9sZGVyIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OnBsYWNlaG9sZGVyIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1JFQURfT05MWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAicmVhZC1vbmx5IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50
OnJlYWQtb25seSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MSW5wdXRF
bGVtZW50OnJlYWQtb25seSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVFVSVJFRCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicmVxdWlyZWQiLAorICAgICAg
ICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6cmVxdWlyZWQiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDpyZXF1aXJlZCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9TSVpFLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAic2l6
ZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpzaXplIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGd1bG9uZyBIVE1MSW5wdXRFbGVtZW50OnNpemUiLAorICAgICAgICAgICAgMCwg
R19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9TUkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAic3JjIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OnNyYyIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDpzcmMiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfU1RFUCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJzdGVwIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OnN0ZXAiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6c3RlcCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6dHlwZSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDp0eXBlIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0RFRkFVTFRfVkFMVUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiZGVmYXVsdC12YWx1ZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVu
dDpkZWZhdWx0LXZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5w
dXRFbGVtZW50OmRlZmF1bHQtdmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsdWUiLAorICAgICAgICAg
ICAgIkhUTUxJbnB1dEVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxJbnB1dEVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUVfQVNf
TlVNQkVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgInZhbHVl
LWFzLW51bWJlciIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDp2YWx1ZS1hcy1udW1i
ZXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBIVE1MSW5wdXRFbGVtZW50OnZh
bHVlLWFzLW51bWJlciIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAid2lk
dGgiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxJbnB1dEVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAg
MCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym9vbGVhbigKKyAgICAgICAgICAgICJ3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJIVE1M
SW5wdXRFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9v
bGVhbiBIVE1MSW5wdXRFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgRkFMU0Us
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9WQUxJRElUWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ2
YWxpZGl0eSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDp2YWxpZGl0eSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIEhUTUxJbnB1dEVsZW1l
bnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxl
bWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
SFRNTElucHV0RWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
QUJFTFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFiZWxz
IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTU5vZGVMaXN0KiBIVE1MSW5wdXRFbGVtZW50OmxhYmVscyIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNULAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhU
TUxJbnB1dEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxJbnB1dEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVVNFX01BUCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ1c2UtbWFwIiwKKyAgICAgICAg
ICAgICJIVE1MSW5wdXRFbGVtZW50OnVzZS1tYXAiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6dXNlLW1hcCIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTkNS
RU1FTlRBTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaW5j
cmVtZW50YWwiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6aW5jcmVtZW50YWwiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDppbmNyZW1l
bnRhbCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPQ09SUkVDVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYXV0b2NvcnJlY3QiLAorICAgICAgICAgICAg
IkhUTUxJbnB1dEVsZW1lbnQ6YXV0b2NvcnJlY3QiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDphdXRvY29ycmVjdCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9BVVRPQ0FQSVRBTElaRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJhdXRvY2FwaXRhbGl6ZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDph
dXRvY2FwaXRhbGl6ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0
RWxlbWVudDphdXRvY2FwaXRhbGl6ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DQVBUVVJFLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNhcHR1cmUiLAorICAgICAg
ICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6Y2FwdHVyZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDpjYXB0dXJlIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc3RlcF91cChXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmLCBnbG9uZyBuLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJy
b3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBpdGVtLT5zdGVwVXAobiwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zdGVwX2Rvd24oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2xv
bmcgbiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVU
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Ip
OworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c3RlcERv
d24obiwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfY2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsK
KyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNoZWNrVmFsaWRpdHkoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9j
dXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZEVycm9yID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVycm9yKTsKKyAgICBpdGVtLT5z
ZXRDdXN0b21WYWxpZGl0eShjb252ZXJ0ZWRFcnJvcik7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2VsZWN0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+c2VsZWN0KCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X3JhbmdlX3RleHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHJlcGxhY2VtZW50LCBndWxvbmcgc3RhcnQsIGd1bG9uZyBlbmQsIGNvbnN0IGdjaGFy
KiBzZWxlY3Rpb25Nb2RlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChyZXBsYWNl
bWVudCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxlY3Rpb25Nb2RlKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFJlcGxhY2VtZW50ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHJlcGxhY2VtZW50KTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3Rpb25Nb2RlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHNlbGVjdGlvbk1vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGl0ZW0tPnNldFJhbmdlVGV4dChjb252ZXJ0ZWRSZXBsYWNlbWVudCwgc3RhcnQsIGVuZCwgY29u
dmVydGVkU2VsZWN0aW9uTW9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9zZXRfdmFsdWVfZm9yX3VzZXIoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRWYWx1ZUZvclVzZXIoY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FjY2VwdChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6YWNjZXB0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FjY2VwdChXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjphY2NlcHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYWx0KFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9J
TlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjphbHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWx0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmFsdEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lO
UFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+YXV0b2NvbXBsZXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF1dG9jb21wbGV0ZShjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphdXRvZm9jdXNBdHRyKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvZm9j
dXMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1c0F0dHIs
IHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X2RlZmF1bHRfY2hlY2tlZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrZWRBdHRyKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9kZWZhdWx0
X2NoZWNrZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmNoZWNrZWRB
dHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja2VkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY2hlY2tlZChXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRD
aGVja2VkKHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9kaXJfbmFtZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlybmFtZUF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF9kaXJfbmFtZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXJuYW1l
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X2Rpc2FibGVkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxl
ZEF0dHIsIHZhbHVlKTsKK30KKworV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUZpbGVMaXN0KiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZmlsZXMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkZpbGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+ZmlsZXMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9maWxlcyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBXZWJLaXRET01GaWxl
TGlzdCogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19GSUxFX0xJU1QodmFs
dWUpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkZpbGVMaXN0KiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6
Y29yZSh2YWx1ZSk7CisgICAgaXRlbS0+c2V0RmlsZXMoY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uKFdlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmZvcm1BY3Rpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV9hY3Rpb24o
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRGb3JtQWN0aW9uKGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9mb3JtX2VuY3R5cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Zm9ybUVuY3R5cGUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfZm9ybV9lbmN0eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0Rm9ybUVuY3R5cGUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fbWV0aG9kKFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBV
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmZvcm1NZXRob2QoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV9tZXRob2QoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRGb3JtTWV0aG9kKGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zv
cm1fbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmb3Jtbm92YWxpZGF0ZUF0dHIpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zv
cm1fbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikp
OworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmZv
cm1ub3ZhbGlkYXRlQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X2Zvcm1fdGFyZ2V0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmb3JtdGFy
Z2V0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fdGFyZ2V0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmZvcm10YXJnZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2d1bG9u
ZyB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBV
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5oZWlnaHQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ3Vsb25n
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPnNldEhlaWdodCh2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbmRldGVybWluYXRlKFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9F
TEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pbmRl
dGVybWluYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5kZXRlcm1pbmF0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbmRldGVybWluYXRlKHZhbHVl
KTsKK30KKworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9saXN0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5B
QkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBV
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRWxlbWVudD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmxpc3QoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiRGF0YWxpc3QgRWxl
bWVudCIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQp
ICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbWF4KFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjptYXhBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbWF4KFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1heEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2xvbmcgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21heF9sZW5ndGgoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+
bWF4TGVuZ3RoRm9yQmluZGluZ3MoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tYXhfbGVuZ3RoKFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpdGVtLT5zZXRNYXhMZW5ndGhGb3JCaW5kaW5ncyh2YWx1ZSwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9taW4oV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6Om1pbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9taW4oV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWluQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbXVsdGlwbGUoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9
IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjptdWx0aXBsZUF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X211bHRpcGxlKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjptdWx0aXBsZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3BhdHRlcm4oV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnBhdHRlcm5BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcGF0dGVybihXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwYXR0ZXJuQXR0ciwgY29udmVydGVkVmFsdWUpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3BsYWNlaG9sZGVy
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwbGFjZWhvbGRlckF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9wbGFjZWhv
bGRlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwbGFjZWhvbGRlckF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X3JlYWRfb25seShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlYWRvbmx5QXR0cik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
cmVhZF9vbmx5KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWFkb25s
eUF0dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVxdWlyZWRBdHRyKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9yZXF1aXJl
ZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVxdWlyZWRBdHRyLCB2
YWx1ZSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfc2l6
ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0
ID0gaXRlbS0+c2l6ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3NpemUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZiwgZ3Vsb25nIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJy
b3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBpdGVtLT5zZXRTaXplKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc3JjKFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9zdGVw
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzdGVwQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3N0ZXAoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3RlcEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbnB1dF90eXBl
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5wdXRfdHlwZShX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFR5cGUoY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rl
ZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZGVmYXVsdFZhbHVlKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXREZWZhdWx0VmFsdWUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPnZhbHVlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5Q
VVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0VmFsdWUoY29udmVydGVkVmFsdWUpOworfQorCitnZG91YmxlIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWx1ZV9hc19udW1iZXIoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lO
UFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT52YWx1
ZUFzTnVtYmVyKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfdmFsdWVfYXNfbnVtYmVyKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPnNldFZhbHVlQXNOdW1iZXIodmFsdWUsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2d1
bG9uZyB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lO
UFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPndpZHRo
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ3Vsb25n
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPnNldFdpZHRoKHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VM
RU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndpbGxW
YWxpZGF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTVZhbGlkaXR5U3Rh
dGUqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWxpZGl0eShXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmFsaWRpdHlT
dGF0ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnZhbGlkaXR5KCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsaWRhdGlvbk1lc3NhZ2UoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9sYWJlbHMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+bGFiZWxzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hbGlnbihX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdXNlX21hcChX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6dXNlbWFwQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3VzZV9tYXAoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dXNlbWFwQXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5j
cmVtZW50YWwoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjppbmNyZW1lbnRhbEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2luY3JlbWVudGFs
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjppbmNyZW1lbnRhbEF0dHIs
IHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5B
QkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5hdXRvY29ycmVjdCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFsaXplIikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShJT1NfQVVUT0NPUlJF
Q1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9hdXRvY29ycmVjdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRP
Q0FQSVRBTElaRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRBdXRvY29ycmVjdCh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0YWxpemUi
KQorI2VuZGlmIC8qIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAq
LworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9jYXBp
dGFsaXplKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKElP
U19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF1dG9jYXBpdGFsaXplKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFsaXplIikK
KyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRP
Q0FQSVRBTElaRSkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJ
VEFMSVpFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdXRv
Y2FwaXRhbGl6ZShjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0YWxpemUiKQorI2VuZGlmIC8q
IEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NhcHR1cmVfdHlwZShXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShNRURJQV9DQVBUVVJFKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2FwdHVyZUF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgQ2FwdHVyZSIpCisgICAgcmV0
dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX0NBUFRVUkUpICovCit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2NhcHR1cmUoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShNRURJQV9D
QVBUVVJFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2FwdHVyZUF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiTWVkaWEgQ2FwdHVyZSIpCisjZW5kaWYgLyogRU5BQkxFKE1FRElBX0NBUFRVUkUpICovCit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5ZDg2NQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5oCkBAIC0wLDAgKzEsNDUzIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRE
T01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5
IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9JTlBVVF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9JTlBVVF9F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX0lOUFVUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSU5QVVRfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9JTlBVVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Q2xhc3MpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0lOUFVUX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9JTlBVVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfSU5QVVRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50IHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZWxlY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9zZWxlY3QoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FjY2VwdDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hY2NlcHQo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X2FjY2VwdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hY2NlcHQoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYWx0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FsdChXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfYWx0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9hdXRvZm9jdXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvZm9jdXMoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2F1dG9mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvZm9jdXMoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kZWZhdWx0X2NoZWNrZWQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9kZWZhdWx0X2NoZWNrZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NoZWNrZWQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9jaGVja2VkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xl
YW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X2NoZWNrZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kaXNh
YmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9kaXNh
YmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2Zvcm06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2ZpbGVzOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUZpbGVMaXN0CisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NRmlsZUxpc3QqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZmlsZXMo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X2ZpbGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NRmlsZUxpc3QKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2ZpbGVzKFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUZpbGVMaXN0KiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2hlaWdodDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z3Vsb25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9oZWlnaHQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNndWxvbmcKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2hl
aWdodChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbmRldGVybWluYXRlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfaW5kZXRlcm1pbmF0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5kZXRl
cm1pbmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF9pbmRldGVybWluYXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfbWF4X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21heF9sZW5ndGgoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfc2V0X21heF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tYXhf
bGVuZ3RoKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X211bHRpcGxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbXVsdGlwbGUoV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X211bHRpcGxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X211bHRpcGxlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9u
YW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfcmVhZF9vbmx5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3JlYWRfb25seShXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZwor
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZh
bHVlOiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfc3JjOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3Ny
YyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbnB1dF90eXBlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2lucHV0X3R5
cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2lucHV0X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5wdXRfdHlwZShX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2RlZmF1bHRfdmFs
dWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X2dldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
dmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF93aWR0
aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2d1bG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ3Vsb25n
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2ls
bF92YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hbGln
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF91c2VfbWFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X3VzZV9tYXAoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3VzZV9t
YXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfdXNlX21hcChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9jYXB0dXJlX3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJl
X3R5cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWY5ZDdhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxJbnB1dEVsZW1lbnQuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHdyYXBIVE1MSW5wdXRFbGVtZW50
KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IGtpdChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBjb3JlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDRmNjYwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFVuc3RhYmxl
LmgKQEAgLTAsMCArMSw1MzQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFi
bGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3N0ZXBfdXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAor
ICogQG46IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc3RlcF91cChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnbG9uZyBuLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc3Rl
cF9kb3duOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEBuOiBB
ICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3N0ZXBf
ZG93bihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnbG9uZyBuLCBHRXJyb3IqKiBl
cnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfY2hlY2tfdmFs
aWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9jaGVja192YWxp
ZGl0eShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEBlcnJvcjogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF9yYW5nZV90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQKKyAqIEByZXBsYWNlbWVudDogQSAjZ2NoYXIKKyAqIEBzdGFydDogQSAj
Z3Vsb25nCisgKiBAZW5kOiBBICNndWxvbmcKKyAqIEBzZWxlY3Rpb25Nb2RlOiBBICNnY2hhcgor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9yYW5nZV90ZXh0
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiByZXBsYWNlbWVu
dCwgZ3Vsb25nIHN0YXJ0LCBndWxvbmcgZW5kLCBjb25zdCBnY2hhciogc2VsZWN0aW9uTW9kZSwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF92YWx1ZV9mb3JfdXNlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1
ZV9mb3JfdXNlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRv
Y29tcGxldGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9jb21w
bGV0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9kZWZhdWx0X2NoZWNrZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfZGVmYXVsdF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYs
IGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfZGlyX25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rp
cl9uYW1lKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9kaXJfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9kaXJfbmFtZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9mb3JtX2FjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfZm9ybV9hY3Rpb24oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fYWN0aW9uOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fYWN0aW9uKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9nZXRfZm9ybV9lbmN0eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3Jt
X2VuY3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV9lbmN0eXBlKFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fbWV0aG9kOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX21ldGhvZChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfZm9ybV9tZXRob2Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
Zm9ybV9tZXRob2QoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9y
bV9ub192YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9mb3JtX25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX25vX3ZhbGlkYXRl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fbm9fdmFsaWRhdGUoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX3RhcmdldDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV90YXJnZXQoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X2Zvcm1fdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1f
dGFyZ2V0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2xpc3Q6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEVsZW1lbnQqCit3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbGlzdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbWF4
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9tYXgoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X21heDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tYXgoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbWluOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9taW4oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X21pbjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9taW4oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9nZXRfcGF0dGVybjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfcGF0dGVybihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcGF0dGVybjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9wYXR0ZXJuKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X3BsYWNlaG9sZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X2dldF9wbGFjZWhvbGRlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcGxhY2Vob2xkZXI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcGxhY2Vob2xkZXIoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcmVhZF9vbmx5OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3JlYWRfb25seShXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfcmVxdWlyZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRf
cmVxdWlyZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3JlcXVpcmVkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfc3RlcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfc3Rl
cChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc3RlcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9zdGVwKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVl
X2FzX251bWJlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFs
dWVfYXNfbnVtYmVyKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZV9hc19udW1iZXI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnZG91Ymxl
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlX2Fz
X251bWJlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
Z2V0X3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVmFs
aWRpdHlTdGF0ZSoKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWxpZGl0eShX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2xhYmVsczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlz
dCoKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9sYWJlbHMoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2luY3JlbWVudGFsOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2luY3JlbWVudGFsKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbmNyZW1lbnRhbDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbmNyZW1lbnRhbChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9hdXRvY29ycmVjdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRv
Y29ycmVjdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9jYXBpdGFs
aXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hdXRvY2FwaXRhbGl6
ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfY2FwdHVyZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9j
YXB0dXJlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRVbnN0YWJsZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEtleWdl
bkVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OTc5MTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmNwcApAQCAtMCwwICsx
LDQ3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVZhbGlkaXR5U3RhdGVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxLZXlnZW5FbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRN
TF9LRVlHRU5fRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsK
K30KKworV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEtleWdl
bkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiB3cmFwSFRN
TEtleWdlbkVsZW1lbnQoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfS0VZ
R0VOX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0tFWUdFTl9FTEVN
RU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2tleWdlbl9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRj
aEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2tl
eWdlbl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxLZXln
ZW5FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEtleWdlbkVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERP
TUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9
IHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFj
ZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2Fk
ZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKwor
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQsIHdlYmtp
dF9kb21faHRtbF9rZXlnZW5fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwg
R19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9BVVRPRk9DVVMsCisgICAgUFJPUF9DSEFMTEVOR0UsCisgICAgUFJPUF9ESVNBQkxFRCwKKyAg
ICBQUk9QX0ZPUk0sCisgICAgUFJPUF9LRVlUWVBFLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9Q
X1RZUEUsCisgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgIFBST1BfVkFMSURJVFksCisgICAg
UFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgUFJPUF9MQUJFTFMsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfS0VZR0VOX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9rZXlnZW5fZWxlbWVudF9zZXRfYXV0b2ZvY3VzKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4o
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIQUxMRU5HRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9jaGFsbGVuZ2Uoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9E
SVNBQkxFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9kaXNh
YmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9LRVlUWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2Vs
ZW1lbnRfc2V0X2tleXR5cGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
a2V5Z2VuX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1l
bnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfS0VZR0VOX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxl
bWVudF9nZXRfYXV0b2ZvY3VzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NIQUxMRU5HRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9jaGFsbGVuZ2Uoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfZGlzYWJsZWQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2Zvcm0o
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfS0VZVFlQRToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50
X2dldF9rZXl0eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXln
ZW5fZWxlbWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2tleWdlbl90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1dJTExfVkFMSURBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJRElUWToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1l
bnRfZ2V0X3ZhbGlkaXR5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZB
TElEQVRJT05fTUVTU0FHRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2Uoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFCRUxTOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfbGFi
ZWxzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9r
ZXlnZW5fZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50Q2xhc3Mq
IHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPRk9DVVMsCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImF1dG9mb2N1cyIsCisgICAgICAgICAgICAi
SFRNTEtleWdlbkVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdi
b29sZWFuIEhUTUxLZXlnZW5FbGVtZW50OmF1dG9mb2N1cyIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9DSEFMTEVOR0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
Y2hhbGxlbmdlIiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDpjaGFsbGVuZ2UiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxLZXlnZW5FbGVtZW50OmNoYWxsZW5n
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNBQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jv
b2xlYW4oCisgICAgICAgICAgICAiZGlzYWJsZWQiLAorICAgICAgICAgICAgIkhUTUxLZXlnZW5F
bGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxL
ZXlnZW5FbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk0sCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisgICAgICAgICAg
ICAiSFRNTEtleWdlbkVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTUhUTUxGb3JtRWxlbWVudCogSFRNTEtleWdlbkVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9LRVlUWVBFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImtleXR5cGUiLAorICAgICAgICAgICAg
IkhUTUxLZXlnZW5FbGVtZW50OmtleXR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxLZXlnZW5FbGVtZW50OmtleXR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAg
ICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MS2V5Z2VuRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAg
ICAgICAgICAiSFRNTEtleWdlbkVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBIVE1MS2V5Z2VuRWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lMTF9W
QUxJREFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2ls
bC12YWxpZGF0ZSIsCisgICAgICAgICAgICAiSFRNTEtleWdlbkVsZW1lbnQ6d2lsbC12YWxpZGF0
ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxLZXlnZW5FbGVtZW50Ondp
bGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxJRElUWSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ2YWxpZGl0eSIsCisgICAgICAgICAgICAi
SFRNTEtleWdlbkVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJL
aXRET01WYWxpZGl0eVN0YXRlKiBIVE1MS2V5Z2VuRWxlbWVudDp2YWxpZGl0eSIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxJREFUSU9OX01FU1NBR0Us
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsaWRhdGlvbi1t
ZXNzYWdlIiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDp2YWxpZGF0aW9uLW1lc3Nh
Z2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTEtleWdlbkVsZW1lbnQ6dmFs
aWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFCRUxTLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImxhYmVscyIsCisgICAgICAgICAgICAiSFRN
TEtleWdlbkVsZW1lbnQ6bGFiZWxzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
Tm9kZUxpc3QqIEhUTUxLZXlnZW5FbGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfTk9ERV9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2luaXQo
V2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRf
Y2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNoZWNrVmFsaWRpdHkoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRf
Y3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1M
S2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRFcnJvciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChlcnJvcik7CisgICAgaXRl
bS0+c2V0Q3VzdG9tVmFsaWRpdHkoY29udmVydGVkRXJyb3IpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MS2V5
Z2VuRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdF
Tl9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmF1
dG9mb2N1c0F0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2tleWdlbl9lbGVtZW50X3NldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9L
RVlHRU5fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1c0F0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfY2hhbGxlbmdlKFdlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZ
R0VOX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpjaGFsbGVuZ2VBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2NoYWxsZW5nZShXZWJLaXRET01I
VE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFsbGVuZ2VBdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRf
ZGlzYWJsZWQoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdl
YkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9kaXNhYmxlZChX
ZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyLCB2
YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxGb3JtRWxlbWVudCogd2Via2l0X2RvbV9odG1sX2tl
eWdlbl9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxl
bWVudF9nZXRfa2V5dHlwZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5rZXl0eXBlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2tleWdlbl9l
bGVtZW50X3NldF9rZXl0eXBlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0S2V5dHlwZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MS2V5Z2Vu
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9rZXlnZW5fdHlwZShXZWJL
aXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2Vu
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfd2lsbF92YWxp
ZGF0ZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+d2lsbFZhbGlkYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVt
ZW50X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnZhbGlkaXR5KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVu
dF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZh
bGlkYXRpb25NZXNzYWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5v
ZGVMaXN0KiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2xhYmVscyhXZWJLaXRE
T01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9k
ZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sYWJlbHMoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyYTEzZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQuaApAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVu
dF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50X2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfS0VZR0VOX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0
X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9LRVlHRU5fRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9LRVlHRU5fRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTEtleWdlbkVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfS0VZR0VOX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfS0VZR0VOX0VMRU1FTlQsIFdlYktpdERPTUhUTUxLZXlnZW5F
bGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9LRVlHRU5fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9L
RVlHRU5fRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9LRVlHRU5fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9LRVlHRU5fRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9LRVlHRU5fRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnRDbGFzcyB7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9jaGVja192YWxpZGl0eShX
ZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2tleWdlbl9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqIEBlcnJvcjogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2tl
eWdlbl9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2tleWdlbl9lbGVtZW50X2dldF9hdXRvZm9jdXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1s
X2tleWdlbl9lbGVtZW50X2dldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfYXV0
b2ZvY3VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKiBAdmFs
dWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfYXV0b2ZvY3VzKFdl
YktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9jaGFsbGVuZ2U6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfY2hhbGxlbmdlKFdlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2Vs
ZW1lbnRfc2V0X2NoYWxsZW5nZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2No
YWxsZW5nZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2Rpc2Fi
bGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfZGlzYWJs
ZWQoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2tl
eWdlbl9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxl
bWVudF9nZXRfZm9ybToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUhUTUxGb3JtRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfZm9y
bShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9rZXl0eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
a2V5Z2VuX2VsZW1lbnRfZ2V0X2tleXR5cGUoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfa2V5dHlw
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2tleXR5cGUoV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEtleWdl
bkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9rZXlnZW5fdHlwZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2tleWdlbl9lbGVtZW50X2dldF9rZXlnZW5fdHlwZShXZWJLaXRET01IVE1MS2V5Z2VuRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dl
dF93aWxsX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVu
dF9nZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF92YWxpZGl0eToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKgord2Vi
a2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MS2V5
Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVt
ZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtl
eWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5f
ZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2xh
YmVsczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJr
aXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2xhYmVscyhXZWJLaXRET01IVE1MS2V5Z2Vu
RWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MS2V5Z2VuRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zZTlkZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudFBy
aXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxLZXlnZW5FbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxLZXlnZW5FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxLZXln
ZW5FbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnQqIHdyYXBIVE1MS2V5Z2VuRWxlbWVudChXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCop
OworV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MS2V5Z2VuRWxl
bWVudCopOworV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEtl
eWdlbkVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0
RE9NSFRNTEtleWdlbkVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExJ
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjBjZTdlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExJRWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxMSUVsZW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MTElFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TExJRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTElfRUxFTUVO
VChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6
SFRNTExJRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTElFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExJRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTUhUTUxMSUVsZW1lbnQqIHdyYXBIVE1MTElFbGVtZW50KFdlYkNvcmU6OkhUTUxMSUVsZW1l
bnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0hUTUxfTElfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hU
TUxfTElfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9saV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZl
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MTElFbGVtZW50KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExJRWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hF
dmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9saV9l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MTElFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9saV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTElFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkK
K3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVu
dF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9odG1sX2xpX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1v
dmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxM
SUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RB
UkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1Bf
MCwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9WQUxVRSwKK307CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF9saV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTUhUTUxMSUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTElf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X3NldF90eXBlX2F0
dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfc2V0
X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTUhUTUxMSUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hU
TUxfTElfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9saV9lbGVtZW50X2dldF90eXBlX2F0dHIoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9jbGFzc19pbml0KFdl
YktpdERPTUhUTUxMSUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
aHRtbF9saV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAg
ICAgICAgIkhUTUxMSUVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTExJRWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ2YWx1ZSIsCisgICAgICAgICAgICAi
SFRNTExJRWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1M
TElFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTExJRWxlbWVudCog
cmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxMSUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTElFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0
cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpX2Vs
ZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MTElFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMSUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVu
dF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRNTExJRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0xJX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxMSUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0
ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWx1ZUF0
dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpX2Vs
ZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxMSUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSV9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTElFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsdWVBdHRyLCB2
YWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TElFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAwNmY4NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5oCkBAIC0wLDAgKzEsOTAgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERP
TV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkg
PHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxMSUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01I
VE1MTElFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0xJX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0xJX0VMRU1FTlQob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfTElfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExJRWxlbWVudCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9MSV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxMSUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0xJX0VMRU1F
TlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfTElfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9M
SV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0xJX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfTElfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSV9FTEVNRU5ULCBXZWJLaXRET01IVE1MTElF
bGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxMSUVsZW1lbnQgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NSFRNTExJRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9saV9l
bGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saV9lbGVt
ZW50X2dldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExJRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxMSUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X3NldF90eXBlX2F0
dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExJRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVu
dF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxMSUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3ZhbHVl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMSUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVu
dF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRNTExJRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfc2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxMSUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxM
SUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxMSUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTElFbGVt
ZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTElFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZWIyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxMSUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTElFbGVtZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxMSUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTExJRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTElF
bGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTExJRWxlbWVudCog
d3JhcEhUTUxMSUVsZW1lbnQoV2ViQ29yZTo6SFRNTExJRWxlbWVudCopOworV2ViS2l0RE9NSFRN
TExJRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxM
SUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTExJRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTElFbGVtZW50UHJpdmF0ZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdlNGJmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LmNwcApAQCAtMCwwICsxLDIyMSBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVk
ZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TExhYmVsRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4
U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxlLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIGtpdChXZWJDb3Jl
OjpIVE1MTGFiZWxFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9M
QUJFTF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQor
CitXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxMYWJlbEVsZW1l
bnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MTGFiZWxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogd3JhcEhUTUxMYWJlbEVs
ZW1lbnQoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9MQUJFTF9FTEVNRU5U
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9MQUJFTF9FTEVNRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfYWRk
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisg
ICAgV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZl
bnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xh
YmVsX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlm
YWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9sYWJl
bF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIg
PSB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAg
aWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVt
ZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnQs
IFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRk9STSwKKyAgICBQUk9QX0hUTUxfRk9S
LAorICAgIFBST1BfQ09OVFJPTCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9s
YWJlbF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dERPTUhUTUxMYWJlbEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVO
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0hU
TUxfRk9SOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9zZXRfaHRtbF9m
b3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX0xBQkVMX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9GT1JNOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dldF9mb3JtKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0hUTUxfRk9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfaHRtbF9mb3Ioc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09OVFJPTDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRf
Y29udHJvbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfbGFiZWxfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KAorICAgICAgICAgICAgImZvcm0iLAorICAgICAgICAgICAgIkhUTUxMYWJlbEVs
ZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogSFRNTExhYmVsRWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0ZPUk1fRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0hUTUxfRk9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImh0bWwtZm9yIiwKKyAgICAgICAgICAgICJIVE1MTGFiZWxFbGVt
ZW50Omh0bWwtZm9yIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTGFiZWxF
bGVtZW50Omh0bWwtZm9yIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTlRST0wsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY29udHJvbCIsCisgICAgICAgICAgICAi
SFRNTExhYmVsRWxlbWVudDpjb250cm9sIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NSFRNTEVsZW1lbnQqIEhUTUxMYWJlbEVsZW1lbnQ6Y29udHJvbCIsCisgICAgICAgICAgICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1l
bnRfaW5pdChXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNF
RF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3ZWJraXRf
ZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTEFCRUxfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbGFi
ZWxfZWxlbWVudF9nZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xBQkVMX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZvckF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVt
ZW50X3NldF9odG1sX2ZvcihXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xBQkVMX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxM
YWJlbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpm
b3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJr
aXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfY29udHJvbChXZWJLaXRET01IVE1MTGFiZWxF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTEFCRUxfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jb250cm9sKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TGFiZWxFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hNDk2OTNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TGFiZWxFbGVtZW50LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TExhYmVsRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRfaAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRN
TEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEFCRUxfRUxFTUVO
VCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MQUJF
TF9FTEVNRU5ULCBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX0xBQkVMX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEFCRUxfRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTExhYmVsRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTEFC
RUxfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MQUJFTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX0xBQkVMX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTEFCRUxfRUxFTUVOVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9MQUJFTF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xBQkVMX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0
RE9NSFRNTExhYmVsRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50Q2xhc3Mgewor
ICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X2Zvcm06CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRf
Z2V0X2Zvcm0oV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X2h0bWxfZm9yOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxMYWJlbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X2h0bWxf
Zm9yKFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9sYWJlbF9lbGVtZW50X3NldF9odG1sX2ZvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MTGFiZWxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X3NldF9odG1sX2ZvcihXZWJL
aXRET01IVE1MTGFiZWxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVs
ZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViZWEw
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFByaXZhdGUuaApAQCAt
MCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTUhUTUxMYWJlbEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTExh
YmVsRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTGFiZWxFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50KiB3cmFwSFRNTExh
YmVsRWxlbWVudChXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50Kik7CitXZWJLaXRET01IVE1MTGFi
ZWxFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCopOworV2ViQ29yZTo6SFRN
TExhYmVsRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50Kik7Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxMYWJlbEVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmVmMjZlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1l
bnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9sYWJlbF9lbGVtZW50X2dldF9jb250cm9sOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxM
YWJlbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERP
TUhUTUxFbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0
X2NvbnRyb2woV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogc2VsZik7CisKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxMZWdlbmRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjQ2MzAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxMZWdlbmRFbGVtZW50LmNwcApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxMZWdlbmRFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TUhUTUxMZWdlbmRFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1l
bnQqIGtpdChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBX
RUJLSVRfRE9NX0hUTUxfTEVHRU5EX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5v
ZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50KiBjb3JlKFdlYktp
dERPTUhUTUxMZWdlbmRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MTGVnZW5kRWxl
bWVudCogd3JhcEhUTUxMZWdlbmRFbGVtZW50KFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRN
TF9MRUdFTkRfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9sZWdlbmRfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICgh
Y29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTExlZ2Vu
ZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGVnZW5kRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJD
b3JlOjpIVE1MTGVnZW5kRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxMZWdlbmRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlz
cGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9sZWdl
bmRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9s
aXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxMZWdlbmRF
bGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9I
VE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRf
VEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfRk9STSwKKyAgICBQUk9QX0FMSUdOLAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX0xFR0VORF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9sZWdlbmRf
ZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQq
IHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTEVHRU5EX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9GT1JNOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfZm9y
bShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50
X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfbGVnZW5kX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVu
dENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxl
bWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1M
TGVnZW5kRWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50KiBIVE1MTGVnZW5kRWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAgICJIVE1MTGVnZW5k
RWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTExlZ2Vu
ZEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xlZ2Vu
ZF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQq
IHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MTGVn
ZW5kRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xFR0VO
RF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxMZWdlbmRFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTEVHRU5EX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9sZWdlbmRfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
TEVHRU5EX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWVkZWQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRv
bS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTExl
Z2VuZEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfTEVHRU5EX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2xlZ2VuZF9l
bGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxFTUVO
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9MRUdFTkRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTEVHRU5EX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfTEVHRU5EX0VMRU1FTlQsIFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50Q2xhc3MpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9MRUdFTkRfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MRUdFTkRf
RUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9MRUdFTkRfRUxFTUVOVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9MRUdFTkRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MRUdFTkRf
RUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MRUdFTkRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExlZ2Vu
ZEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQgewor
ICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1l
bnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF9mb3JtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxMZWdlbmRFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9N
SFRNTExlZ2VuZEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9sZWdl
bmRfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExlZ2VuZEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MTGVn
ZW5kRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVt
ZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfbGVnZW5kX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVn
ZW5kRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRQcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlYWEzNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTGVnZW5k
RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTGVnZW5kRWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50KiB3cmFwSFRNTExlZ2VuZEVsZW1lbnQo
V2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxMZWdlbmRF
bGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50UHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5r
RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2MDBkMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50LmNwcApAQCAtMCwwICsxLDYw
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxMaW5rRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MTGlua0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50VW5zdGFibGUuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9MSU5LX0VM
RU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNv
cmU6OkhUTUxMaW5rRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHdyYXBIVE1MTGlua0VsZW1lbnQoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0hUTUxfTElOS19FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZl
bnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2Vi
Q29yZTo6SFRNTExpbmtFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2Ny
aXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTGlu
a0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGlua0VsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MTGlua0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNw
YXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7
CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsK
K30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50LCB3
ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5U
LCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX0RJU0FCTEVELAorICAgIFBST1BfQ0hBUlNFVCwKKyAgICBQUk9QX0hSRUYsCisgICAgUFJP
UF9IUkVGTEFORywKKyAgICBQUk9QX01FRElBLAorICAgIFBST1BfUkVMLAorICAgIFBST1BfUkVW
LAorICAgIFBST1BfU0laRVMsCisgICAgUFJPUF9UQVJHRVQsCisgICAgUFJPUF9UWVBFLAorICAg
IFBST1BfQVMsCisgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgUFJPUF9TSEVFVCwKKyAgICBQ
Uk9QX1JFTF9MSVNULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxl
bWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25z
dCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1M
TGlua0VsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTElOS19FTEVNRU5UKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NIQVJTRVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2NoYXJz
ZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IUkVGOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3Nl
dF9ocmVmKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSFJFRkxBTkc6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfc2V0X2hyZWZsYW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVESUE6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfc2V0X21lZGlhKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVMOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X3NldF9yZWwoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVY6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3JldihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfdGFyZ2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfdHlwZV9hdHRyKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVM6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2FzKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1JP
U1NfT1JJR0lOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9jcm9z
c19vcmlnaW4oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiA9IFdFQktJ
VF9ET01fSFRNTF9MSU5LX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfZGlzYWJsZWQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hBUlNFVDoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfY2hh
cnNldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IUkVGOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2dldF9ocmVmKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUZMQU5H
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X2dldF9ocmVmbGFuZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9NRURJQToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2xpbmtfZWxlbWVudF9nZXRfbWVkaWEoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUkVMOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZWwoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUkVWOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZXYoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU0laRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2l6ZXMoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90YXJnZXQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfdHlwZV9h
dHRyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FTOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dl
dF9hcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DUk9TU19PUklHSU46
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TSEVFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9zaGVldChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9SRUxfTElTVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZWxfbGlzdChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2NsYXNz
X2luaXQoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0RJU0FCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAg
ICAgICJkaXNhYmxlZCIsCisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50OmRpc2FibGVkIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxMaW5rRWxlbWVudDpkaXNhYmxl
ZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSEFSU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImNoYXJzZXQiLAorICAgICAgICAgICAgIkhUTUxMaW5rRWxl
bWVudDpjaGFyc2V0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTGlua0Vs
ZW1lbnQ6Y2hhcnNldCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IUkVGLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhyZWYiLAorICAgICAgICAgICAgIkhUTUxMaW5r
RWxlbWVudDpocmVmIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTGlua0Vs
ZW1lbnQ6aHJlZiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IUkVGTEFORywKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJocmVmbGFuZyIsCisgICAgICAgICAgICAiSFRN
TExpbmtFbGVtZW50OmhyZWZsYW5nIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MTGlua0VsZW1lbnQ6aHJlZmxhbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUVESUEsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWVkaWEiLAorICAgICAgICAg
ICAgIkhUTUxMaW5rRWxlbWVudDptZWRpYSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTExpbmtFbGVtZW50Om1lZGlhIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFTCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJyZWwiLAorICAgICAgICAgICAg
IkhUTUxMaW5rRWxlbWVudDpyZWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxMaW5rRWxlbWVudDpyZWwiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVWLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInJldiIsCisgICAgICAgICAgICAiSFRNTExp
bmtFbGVtZW50OnJldiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTExpbmtF
bGVtZW50OnJldiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSVpFUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJzaXplcyIsCisgICAgICAgICAgICAiSFRNTExpbmtF
bGVtZW50OnNpemVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NVG9rZW5M
aXN0KiBIVE1MTGlua0VsZW1lbnQ6c2l6ZXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X0RPTV9UT0tFTl9MSVNULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfVEFSR0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgInRhcmdldCIsCisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50OnRhcmdl
dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTExpbmtFbGVtZW50OnRhcmdl
dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxMaW5rRWxlbWVudDp0eXBl
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTGlua0VsZW1lbnQ6dHlwZSIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9BUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJhcyIsCisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50OmFzIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTGlua0VsZW1lbnQ6YXMiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQ1JPU1NfT1JJR0lOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50OmNy
b3NzLW9yaWdpbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTExpbmtFbGVt
ZW50OmNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSEVFVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzaGVldCIsCisgICAgICAgICAgICAiSFRN
TExpbmtFbGVtZW50OnNoZWV0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NU3R5
bGVTaGVldCogSFRNTExpbmtFbGVtZW50OnNoZWV0IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9TVFlMRV9TSEVFVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1JFTF9MSVNULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgInJlbC1saXN0IiwKKyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQ6
cmVsLWxpc3QiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01Ub2tlbkxpc3Qq
IEhUTUxMaW5rRWxlbWVudDpyZWwtbGlzdCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
RE9NX1RPS0VOX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2luaXQoV2ViS2l0
RE9NSFRNTExpbmtFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfZGlzYWJs
ZWQoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTElOS19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0ciwgdmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfY2hhcnNldChXZWJLaXRET01IVE1MTGlu
a0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y2hhcnNldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y2hhcnNldEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZkF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0
X2hyZWYoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZkF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0
X2hyZWZsYW5nKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpocmVmbGFuZ0F0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2hyZWZs
YW5nKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhyZWZsYW5nQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9n
ZXRfbWVkaWEoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1lZGlhQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfbWVkaWEoV2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWVkaWFBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZWwoV2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTElOS19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlbEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3JlbChXZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTElOS19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWxBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZXYoV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
dkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9s
aW5rX2VsZW1lbnRfc2V0X3JldihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
TGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZXZBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTURPTVRva2VuTGlzdCogd2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2l6ZXMoV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVRva2VuTGlzdD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNpemVzKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfZ2V0X3RhcmdldChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGFyZ2V0QXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9z
ZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRhcmdldEF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3R5
cGVfYXR0cihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9n
ZXRfYXMoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
TGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFzQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfYXMoV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9jcm9zc19vcmlnaW4oV2ViS2l0
RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTElOS19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+Y3Jvc3NPcmlnaW4oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9jcm9zc19vcmlnaW4oV2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRDcm9zc09yaWdpbihjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTVN0eWxlU2hlZXQqIHdlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfZ2V0X3NoZWV0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpTdHlsZVNoZWV0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+c2hlZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01ET01Ub2tlbkxpc3QqIHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfZ2V0X3JlbF9saXN0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpET01Ub2tlbkxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5yZWxMaXN0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTExpbmtFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Ri
OGQwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50LmgKQEAgLTAsMCAr
MSwyMjUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudF9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxMaW5rRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9MSU5LX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTElO
S19FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJTktfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExpbmtF
bGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9MSU5LX0VMRU1FTlQsIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudENsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJTktfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TElOS19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9MSU5LX0VMRU1FTlQsIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudENsYXNzKSkK
Kworc3RydWN0IF9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxF
bGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTExpbmtF
bGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dl
dF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MTGlua0VsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2Rp
c2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVl
OiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYs
IGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2dldF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X2dldF9jaGFyc2V0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfY2hhcnNl
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxl
bWVudF9zZXRfY2hhcnNldChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRf
aHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2xp
bmtfZWxlbWVudF9nZXRfaHJlZihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2hyZWY6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2hyZWYo
V2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hyZWZsYW5nOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dl
dF9ocmVmbGFuZyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2hyZWZsYW5nOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9ocmVmbGFuZyhX
ZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfbWVkaWE6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X21l
ZGlhKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2xpbmtfZWxlbWVudF9zZXRfbWVkaWE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X21lZGlhKFdlYktpdERPTUhUTUxM
aW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3JlbChXZWJLaXRET01IVE1M
TGlua0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfc2V0X3JlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9zZXRfcmVsKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2dldF9yZXY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfZ2V0X3JldihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3JldjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfcmV2
KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90YXJnZXQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0
X3RhcmdldChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfdGFyZ2V0KFdlYktpdERP
TUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3R5cGVf
YXR0cihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktp
dERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9zaGVldDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6
IEEgI1dlYktpdERPTVN0eWxlU2hlZXQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01TdHlsZVNo
ZWV0Kgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2hlZXQoV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERP
TUhUTUxMaW5rRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjVlZTBkZjdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TGlua0VsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTGlua0VsZW1lbnRQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxMaW5rRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MTGlua0VsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MTGlu
a0VsZW1lbnQqIHdyYXBIVE1MTGlua0VsZW1lbnQoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Kik7
CitXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQq
KTsKK1dlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTGlua0VsZW1l
bnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudFVu
c3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NzA2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudFVuc3RhYmxl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYg
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NQ3VzdG9tVW5zdGFibGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9nZXRfc2l6ZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtF
bGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01U
b2tlbkxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NRE9NVG9rZW5MaXN0Kgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2l6
ZXMoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X2dldF9hczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlu
a0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfZ2V0X2FzKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfYXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTExpbmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfc2V0X2FzKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9jcm9zc19v
cmlnaW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9jcm9zc19vcmlnaW4o
V2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfbGlua19lbGVtZW50X3NldF9jcm9zc19vcmlnaW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTExpbmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfc2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9n
ZXRfcmVsX2xpc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NVG9r
ZW5MaXN0Kgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmVsX2xpc3QoV2ViS2l0
RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNYXBFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YWJiZDZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5j
cHAKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTWFwRWxlbWVudC5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxNYXBFbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCogb2Jq
KQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlQoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxNYXBFbGVtZW50
KiBjb3JlKFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MTWFw
RWxlbWVudCogd3JhcEhUTUxNYXBFbGVtZW50KFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX01BUF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVBf
RUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tYXBf
ZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJL
aXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50
KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVu
dEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tYXBfZWxl
bWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9tYXBfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfbWFwX2Vs
ZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERP
TUhUTUxNYXBFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnQsIFdFQktJVF9ET01f
VFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVf
RVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorICAgIFBST1BfQVJFQVMsCisgICAgUFJPUF9OQU1FLAorfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX01BUF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50
X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9IVE1MX01BUF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfQVJFQVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9hcmVhcyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2NsYXNz
X2luaXQoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tYXBf
ZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0FSRUFTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImFy
ZWFzIiwKKyAgICAgICAgICAgICJIVE1MTWFwRWxlbWVudDphcmVhcyIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBIVE1MTWFwRWxlbWVudDphcmVhcyIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAg
ICAgICJIVE1MTWFwRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MTWFwRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9tYXBfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRfYXJlYXMoV2ViS2l0RE9NSFRNTE1hcEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVBfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YXJlYXMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21h
cF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxNYXBFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFQX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxNYXBFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFwX2Vs
ZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFQX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNYXBFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MTWFwRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjI0ZjA5MjViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5oCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQp
CisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxNYXBFbGVtZW50X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUFQX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2Rv
bV9odG1sX21hcF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9N
QVBfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVBfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1hcEVs
ZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfTUFQX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNYXBFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfSFRNTF9NQVBfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVBfRUxFTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9NQVBfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVBfRUxF
TUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NQVBfRUxFTUVOVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9NQVBfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVu
dF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRDbGFzcyB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9hcmVhczoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWFwRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRfYXJl
YXMoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9tYXBfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFw
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTE1hcEVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9zZXRf
bmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFwRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFwX2Vs
ZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTWFwRWxl
bWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXBFbGVtZW50UHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MTWFwRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zMzQ0MmU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFwRWxlbWVudFByaXZh
dGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTUhUTUxNYXBFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TUhUTUxNYXBFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNYXBFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNYXBFbGVtZW50Lmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqIHdyYXBIVE1MTWFw
RWxlbWVudChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCopOworV2ViS2l0RE9NSFRNTE1hcEVsZW1l
bnQqIGtpdChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCopOworV2ViQ29yZTo6SFRNTE1hcEVsZW1l
bnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYyNDgzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNTQz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFt
ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQq
IG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01BUlFVRUVfRUxFTUVOVChraXQo
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTE1h
cnF1ZWVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNYXJxdWVl
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogd3JhcEhUTUxNYXJxdWVlRWxlbWVudChX
ZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTUFSUVVFRV9FTEVNRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVJRVUVFX0VMRU1FTlQsICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9
IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25z
dCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJl
KQoreworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZl
bnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Vi
a2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitH
X0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQsIHdlYmtp
dF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfQkVIQVZJT1IsCisgICAgUFJPUF9CR19DT0xPUiwKKyAgICBQUk9QX0RJUkVDVElPTiwKKyAg
ICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX0hTUEFDRSwKKyAgICBQUk9QX0xPT1AsCisgICAgUFJP
UF9TQ1JPTExfQU1PVU5ULAorICAgIFBST1BfU0NST0xMX0RFTEFZLAorICAgIFBST1BfVFJVRV9T
UEVFRCwKKyAgICBQUk9QX1ZTUEFDRSwKKyAgICBQUk9QX1dJRFRILAorfTsKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfTUFSUVVFRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQkVIQVZJT1I6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9tYXJxdWVlX2VsZW1lbnRfc2V0X2JlaGF2aW9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2JnX2NvbG9yKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElS
RUNUSU9OOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9kaXJl
Y3Rpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2Vs
ZW1lbnRfc2V0X2hlaWdodChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hTUEFDRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9zZXRfaHNwYWNlKHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT09QOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9sb29wKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmco
dmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9B
TU9VTlQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3Njcm9s
bF9hbW91bnQoc2VsZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NDUk9MTF9ERUxBWToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9zZXRfc2Nyb2xsX2RlbGF5KHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UUlVFX1NQRUVEOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF90cnVlX3NwZWVkKHNlbGYsIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1ZTUEFDRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfdnNw
YWNlKHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVu
dF9zZXRfd2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9NQVJRVUVFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9CRUhBVklPUjoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRf
YmVoYXZpb3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfZ2V0X2JnX2NvbG9yKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0RJUkVDVElPTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfZGlyZWN0aW9uKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfaGVpZ2h0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hTUEFDRToKKyAgICAgICAgZ192
YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0
X2hzcGFjZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT09QOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X2dldF9sb29wKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9M
TF9BTU9VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X2dldF9zY3JvbGxfYW1vdW50KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTF9ERUxBWToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxv
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3Njcm9sbF9kZWxh
eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UUlVFX1NQRUVEOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X2dldF90cnVlX3NwZWVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1ZTUEFDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3ZzcGFjZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9jbGFz
c19pbml0KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9CRUhBVklPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJiZWhhdmlvciIsCisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVFbGVtZW50
OmJlaGF2aW9yIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTWFycXVlZUVs
ZW1lbnQ6YmVoYXZpb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkdfQ09MT1IsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYmctY29sb3IiLAorICAgICAgICAgICAg
IkhUTUxNYXJxdWVlRWxlbWVudDpiZy1jb2xvciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTE1hcnF1ZWVFbGVtZW50OmJnLWNvbG9yIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJ
UkVDVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkaXJl
Y3Rpb24iLAorICAgICAgICAgICAgIkhUTUxNYXJxdWVlRWxlbWVudDpkaXJlY3Rpb24iLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNYXJxdWVlRWxlbWVudDpkaXJlY3Rpb24i
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVFbGVtZW50
OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE1hcnF1ZWVFbGVt
ZW50OmhlaWdodCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IU1BBQ0UsCisgICAgICAgIGdfcGFyYW1f
c3BlY191bG9uZygKKyAgICAgICAgICAgICJoc3BhY2UiLAorICAgICAgICAgICAgIkhUTUxNYXJx
dWVlRWxlbWVudDpoc3BhY2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxN
YXJxdWVlRWxlbWVudDpoc3BhY2UiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
T09QLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJsb29wIiwKKyAg
ICAgICAgICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6bG9vcCIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnbG9uZyBIVE1MTWFycXVlZUVsZW1lbnQ6bG9vcCIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9TQ1JPTExfQU1PVU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNf
dWxvbmcoCisgICAgICAgICAgICAic2Nyb2xsLWFtb3VudCIsCisgICAgICAgICAgICAiSFRNTE1h
cnF1ZWVFbGVtZW50OnNjcm9sbC1hbW91bnQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vs
b25nIEhUTUxNYXJxdWVlRWxlbWVudDpzY3JvbGwtYW1vdW50IiwKKyAgICAgICAgICAgIDAsIEdf
TUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfU0NST0xMX0RFTEFZLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmco
CisgICAgICAgICAgICAic2Nyb2xsLWRlbGF5IiwKKyAgICAgICAgICAgICJIVE1MTWFycXVlZUVs
ZW1lbnQ6c2Nyb2xsLWRlbGF5IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1bG9uZyBIVE1M
TWFycXVlZUVsZW1lbnQ6c2Nyb2xsLWRlbGF5IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfVFJVRV9TUEVFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAg
ICAgICAidHJ1ZS1zcGVlZCIsCisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVFbGVtZW50OnRydWUt
c3BlZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE1hcnF1ZWVFbGVt
ZW50OnRydWUtc3BlZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVlNQQUNFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAidnNwYWNlIiwKKyAgICAgICAgICAgICJI
VE1MTWFycXVlZUVsZW1lbnQ6dnNwYWNlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1bG9u
ZyBIVE1MTWFycXVlZUVsZW1lbnQ6dnNwYWNlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
d2lkdGgiLAorICAgICAgICAgICAgIkhUTUxNYXJxdWVlRWxlbWVudDp3aWR0aCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE1hcnF1ZWVFbGVtZW50OndpZHRoIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfaW5pdChXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVl
c3QpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc3RhcnQoV2Vi
S2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zdGFydCgpOworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc3RvcChXZWJLaXRET01IVE1M
TWFycXVlZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFV
RUVfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnN0b3AoKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2JlaGF2aW9yKFdlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01B
UlFVRUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpiZWhhdmlvckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2JlaGF2aW9yKFdlYktpdERP
TUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJlaGF2aW9yQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9n
ZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJnY29sb3JBdHRyKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X3NldF9iZ19jb2xvcihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpiZ2NvbG9yQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfZGlyZWN0aW9uKFdlYktpdERPTUhUTUxNYXJxdWVl
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpkaXJlY3Rpb25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9kaXJlY3Rpb24oV2ViS2l0RE9NSFRN
TE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlyZWN0aW9uQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRf
aGVpZ2h0KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3Nl
dF9oZWlnaHQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1
ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVp
Z2h0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9nZXRfaHNwYWNlKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5nZXRVbnNpZ25lZEludGVncmFs
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aHNwYWNlQXR0cik7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9oc3Bh
Y2UoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpo
c3BhY2VBdHRyLCB2YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2Vs
ZW1lbnRfZ2V0X2xvb3AoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+bG9vcCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfbG9vcChXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1M
TWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0TG9vcCh2YWx1ZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
K30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3Njcm9sbF9h
bW91bnQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vs
b25nIHJlc3VsdCA9IGl0ZW0tPnNjcm9sbEFtb3VudCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfc2Nyb2xsX2Ftb3Vu
dChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+c2V0U2Nyb2xsQW1vdW50KHZhbHVlKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRt
bF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3Njcm9sbF9kZWxheShXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+c2Nyb2xsRGVs
YXkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfc2V0X3Njcm9sbF9kZWxheShXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQq
IHNlbGYsIGd1bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVF
RV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U2Nyb2xsRGVsYXkodmFsdWUpOwor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF90cnVlX3Nw
ZWVkKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNv
cmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6dHJ1ZXNwZWVkQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF90cnVlX3NwZWVk
KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp0cnVlc3BlZWRB
dHRyLCB2YWx1ZSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50
X2dldF92c3BhY2UoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjp2c3BhY2VBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3ZzcGFjZShXZWJLaXRET01I
VE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFy
cXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VW5z
aWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZzcGFjZUF0dHIsIHZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3dp
ZHRoKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3dp
ZHRoKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxl
bWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi41NTRhNjAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVl
ZUVsZW1lbnQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBi
ZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRfaAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRN
TEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUFSUVVFRV9FTEVN
RU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01BUlFVRUVfRUxFTUVOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9NQVJRVUVFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9NQVJRVUVFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUFSUVVFRV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVJRVUVFX0VMRU1FTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X01BUlFVRUVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NQVJRVUVFX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfTUFSUVVFRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50IHsKKyAg
ICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTUhUTUxNYXJxdWVlRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVu
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
aHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21hcnF1ZWVfZWxlbWVudF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
TWFycXVlZUVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9zdGFydChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc3RvcDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zdG9wKFdlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ5YzcwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50UHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNYXJxdWVlRWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHdyYXBIVE1MTWFycXVlZUVsZW1l
bnQoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50Kik7CitXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxN
YXJxdWVlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqKTsKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFVuc3RhYmxl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTE4MjMwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1h
cnF1ZWVFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRVbnN0
YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFVuc3RhYmxlX2gKKwor
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2JlaGF2aW9yOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfYmVoYXZpb3IoV2ViS2l0RE9NSFRNTE1h
cnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X3NldF9iZWhhdmlvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRf
YmVoYXZpb3IoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2Jn
X2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfYmdfY29s
b3IoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9zZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfZ2V0X2RpcmVjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVl
X2VsZW1lbnRfZ2V0X2RpcmVjdGlvbihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2RpcmVjdGlv
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfZGlyZWN0aW9uKFdlYktpdERP
TUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTE1hcnF1
ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X3NldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2hlaWdo
dChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfaHNwYWNlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
dWxvbmcKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2hzcGFjZShXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9t
YXJxdWVlX2VsZW1lbnRfc2V0X2hzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1l
bnRfc2V0X2hzcGFjZShXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfbG9v
cDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnbG9uZword2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfbG9vcChXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9t
YXJxdWVlX2VsZW1lbnRfc2V0X2xvb3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1
ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfbG9vcChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQq
IHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfc2Nyb2xsX2Ftb3VudDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9zY3JvbGxfYW1vdW50KFdlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVf
ZWxlbWVudF9zZXRfc2Nyb2xsX2Ftb3VudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1l
bnRfc2V0X3Njcm9sbF9hbW91bnQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBn
dWxvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
Z2V0X3Njcm9sbF9kZWxheToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50
X2dldF9zY3JvbGxfZGVsYXkoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9zY3JvbGxfZGVsYXk6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9zY3JvbGxfZGVsYXkoV2ViS2l0
RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3RydWVfc3BlZWQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3RydWVfc3BlZWQoV2ViS2l0RE9N
SFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFy
cXVlZV9lbGVtZW50X3NldF90cnVlX3NwZWVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X3NldF90cnVlX3NwZWVkKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1l
bnRfZ2V0X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dl
dF92c3BhY2UoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF92c3BhY2U6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2d1bG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X3NldF92c3BhY2UoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
KiBzZWxmLCBndWxvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVl
X2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVu
dF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF93aWR0aDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1M
TWFycXVlZUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45ODBkZDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50LmNwcApAQCAtMCwwICsxLDE1MTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50TWVkaWFTZXNzaW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQq
IG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlQoa2l0KHN0
YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiB3cmFwSFRNTE1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJ
VF9ET01fVFlQRV9IVE1MX01FRElBX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoVklERU8pCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01F
dmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBX
ZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAo
IWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFy
Z2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0
ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VE
X1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYg
RU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BB
UkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFj
ZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9kaXNwYXRj
aF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5U
X1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBS
T1BfMCwKKyAgICBQUk9QX0VSUk9SLAorICAgIFBST1BfU1JDLAorICAgIFBST1BfQ1VSUkVOVF9T
UkMsCisgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgUFJPUF9ORVRXT1JLX1NUQVRFLAorICAg
IFBST1BfUFJFTE9BRCwKKyAgICBQUk9QX0JVRkZFUkVELAorICAgIFBST1BfUkVBRFlfU1RBVEUs
CisgICAgUFJPUF9TRUVLSU5HLAorICAgIFBST1BfQ1VSUkVOVF9USU1FLAorICAgIFBST1BfRFVS
QVRJT04sCisgICAgUFJPUF9QQVVTRUQsCisgICAgUFJPUF9ERUZBVUxUX1BMQVlCQUNLX1JBVEUs
CisgICAgUFJPUF9QTEFZQkFDS19SQVRFLAorICAgIFBST1BfUExBWUVELAorICAgIFBST1BfU0VF
S0FCTEUsCisgICAgUFJPUF9FTkRFRCwKKyAgICBQUk9QX0FVVE9QTEFZLAorICAgIFBST1BfTE9P
UCwKKyAgICBQUk9QX0NPTlRST0xTLAorICAgIFBST1BfVk9MVU1FLAorICAgIFBST1BfTVVURUQs
CisgICAgUFJPUF9ERUZBVUxUX01VVEVELAorICAgIFBST1BfV0VCS0lUX1BSRVNFUlZFU19QSVRD
SCwKKyAgICBQUk9QX1dFQktJVF9IQVNfQ0xPU0VEX0NBUFRJT05TLAorICAgIFBST1BfV0VCS0lU
X0NMT1NFRF9DQVBUSU9OU19WSVNJQkxFLAorICAgIFBST1BfV0VCS0lUX0FVRElPX0RFQ09ERURf
QllURV9DT1VOVCwKKyAgICBQUk9QX1dFQktJVF9WSURFT19ERUNPREVEX0JZVEVfQ09VTlQsCisg
ICAgUFJPUF9NRURJQV9HUk9VUCwKKyAgICBQUk9QX0NPTlRST0xMRVIsCisgICAgUFJPUF9XRUJL
SVRfQ1VSUkVOVF9QTEFZQkFDS19UQVJHRVRfSVNfV0lSRUxFU1MsCisgICAgUFJPUF9LSU5ELAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU1JDOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfc3JjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1JPU1NfT1JJR0lOOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
UFJFTE9BRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3ByZWxv
YWQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9DVVJSRU5UX1RJTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X3NldF9jdXJyZW50X3RpbWUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSwg
bnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZBVUxUX1BMQVlCQUNL
X1JBVEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9kZWZhdWx0
X3BsYXliYWNrX3JhdGUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFZQkFDS19SQVRFOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfcGxheWJhY2tfcmF0ZShzZWxmLCBnX3ZhbHVlX2dldF9k
b3VibGUodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9QTEFZOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfYXV0b3BsYXkoc2VsZiwg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTE9PUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2xvb3Ao
c2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ09OVFJPTFM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X3NldF9jb250cm9scyhzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9WT0xVTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X3NldF92b2x1bWUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSwg
bnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NVVRFRDoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X211dGVkKHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRf
TVVURUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9kZWZhdWx0
X211dGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1dFQktJVF9QUkVTRVJWRVNfUElUQ0g6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9tZWRpYV9lbGVtZW50X3NldF93ZWJraXRfcHJlc2VydmVzX3BpdGNoKHNlbGYsIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1dFQktJVF9DTE9TRURfQ0FQVElPTlNfVklTSUJMRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfc2V0X3dlYmtpdF9jbG9zZWRfY2FwdGlvbnNfdmlzaWJsZShzZWxmLCBn
X3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9NRURJQV9HUk9VUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0
X21lZGlhX2dyb3VwKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfS0lORDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfc2V0X2tpbmQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9FUlJPUjoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZXJyb3Io
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1JDOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRf
c3JjKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfU1JDOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfY3VycmVudF9zcmMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ1JPU1NfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2luKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05FVFdPUktfU1RBVEU6CisgICAgICAgIGdfdmFs
dWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9uZXR3
b3JrX3N0YXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BSRUxPQUQ6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2dldF9wcmVsb2FkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0JVRkZFUkVEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9idWZmZXJlZChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9SRUFEWV9TVEFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3JlYWR5X3N0YXRlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFRUtJTkc6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9z
ZWVraW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfVElN
RToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfY3VycmVudF90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0RVUkFUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9kdXJhdGlvbihzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVVTRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9wYXVzZWQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9QTEFZQkFDS19SQVRFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X2dldF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUExBWUJBQ0tfUkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91Ymxl
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxheWJhY2tfcmF0ZShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFZRUQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X3BsYXllZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUVLQUJMRToK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfc2Vla2FibGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfRU5ERUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9tZWRpYV9lbGVtZW50X2dldF9lbmRlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9BVVRPUExBWToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2F1dG9wbGF5KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPT1A6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9sb29wKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRST0xTOgorICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY29u
dHJvbHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVk9MVU1FOgorICAg
ICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X2dldF92b2x1bWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTVVU
RUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X2dldF9tdXRlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9ERUZBVUxUX01VVEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZGVmYXVsdF9tdXRlZChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfUFJFU0VSVkVTX1BJVENIOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfd2Via2l0X3ByZXNlcnZlc19waXRjaChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9XRUJLSVRfSEFTX0NMT1NFRF9DQVBUSU9OUzoKKyAgICAgICAgZ192YWx1
ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dl
YmtpdF9oYXNfY2xvc2VkX2NhcHRpb25zKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1dFQktJVF9DTE9TRURfQ0FQVElPTlNfVklTSUJMRToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtp
dF9jbG9zZWRfY2FwdGlvbnNfdmlzaWJsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XRUJLSVRfQVVESU9fREVDT0RFRF9CWVRFX0NPVU5UOgorICAgICAgICBnX3ZhbHVl
X3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtp
dF9hdWRpb19kZWNvZGVkX2J5dGVfY291bnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfV0VCS0lUX1ZJREVPX0RFQ09ERURfQllURV9DT1VOVDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJr
aXRfdmlkZW9fZGVjb2RlZF9ieXRlX2NvdW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX01FRElBX0dST1VQOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbWVkaWFfZ3JvdXAoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09OVFJPTExFUjoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY29u
dHJvbGxlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfQ1VS
UkVOVF9QTEFZQkFDS19UQVJHRVRfSVNfV0lSRUxFU1M6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfY3Vy
cmVudF9wbGF5YmFja190YXJnZXRfaXNfd2lyZWxlc3Moc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfS0lORDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2tpbmQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfRVJST1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAi
ZXJyb3IiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6ZXJyb3IiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01NZWRpYUVycm9yKiBIVE1MTWVkaWFFbGVtZW50OmVycm9y
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9NRURJQV9FUlJPUiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NSQywKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzcmMiLAorICAgICAgICAgICAg
IkhUTUxNZWRpYUVsZW1lbnQ6c3JjIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MTWVkaWFFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DVVJSRU5UX1NSQywKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjdXJyZW50LXNyYyIsCisg
ICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpjdXJyZW50LXNyYyIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdjaGFyKiBIVE1MTWVkaWFFbGVtZW50OmN1cnJlbnQtc3JjIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQ1JPU1NfT1JJR0lOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpj
cm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNZWRpYUVs
ZW1lbnQ6Y3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05FVFdPUktfU1RBVEUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgIm5ldHdvcmstc3RhdGUiLAor
ICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6bmV0d29yay1zdGF0ZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGd1c2hvcnQgSFRNTE1lZGlhRWxlbWVudDpuZXR3b3JrLXN0YXRlIiwKKyAg
ICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BSRUxPQUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAicHJlbG9hZCIsCisgICAgICAgICAgICAiSFRNTE1lZGlh
RWxlbWVudDpwcmVsb2FkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTWVk
aWFFbGVtZW50OnByZWxvYWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQlVGRkVSRUQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiYnVmZmVyZWQiLAorICAgICAgICAg
ICAgIkhUTUxNZWRpYUVsZW1lbnQ6YnVmZmVyZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBX
ZWJLaXRET01UaW1lUmFuZ2VzKiBIVE1MTWVkaWFFbGVtZW50OmJ1ZmZlcmVkIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9USU1FX1JBTkdFUywKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFQURZX1NUQVRFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAgICAgICJyZWFkeS1zdGF0ZSIsCisgICAgICAgICAg
ICAiSFRNTE1lZGlhRWxlbWVudDpyZWFkeS1zdGF0ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGd1c2hvcnQgSFRNTE1lZGlhRWxlbWVudDpyZWFkeS1zdGF0ZSIsCisgICAgICAgICAgICAwLCBH
X01BWFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9TRUVLSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJzZWVraW5nIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OnNlZWtp
bmciLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50OnNl
ZWtpbmciLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DVVJSRU5UX1RJTUUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAiY3VycmVudC10aW1lIiwKKyAgICAgICAgICAg
ICJIVE1MTWVkaWFFbGVtZW50OmN1cnJlbnQtdGltZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnZG91YmxlIEhUTUxNZWRpYUVsZW1lbnQ6Y3VycmVudC10aW1lIiwKKyAgICAgICAgICAgIC1H
X01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRFVSQVRJT04sCisgICAgICAgIGdfcGFyYW1f
c3BlY19kb3VibGUoCisgICAgICAgICAgICAiZHVyYXRpb24iLAorICAgICAgICAgICAgIkhUTUxN
ZWRpYUVsZW1lbnQ6ZHVyYXRpb24iLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEhU
TUxNZWRpYUVsZW1lbnQ6ZHVyYXRpb24iLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01B
WERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1BBVVNFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAg
ICAgICAgICAicGF1c2VkIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OnBhdXNlZCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxNZWRpYUVsZW1lbnQ6cGF1c2Vk
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVF9QTEFZQkFDS19SQVRFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImRlZmF1bHQtcGxheWJhY2stcmF0ZSIs
CisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpkZWZhdWx0LXBsYXliYWNrLXJhdGUiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBIVE1MTWVkaWFFbGVtZW50OmRlZmF1bHQt
cGxheWJhY2stcmF0ZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1BMQVlCQUNLX1JBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAg
ICAgICAicGxheWJhY2stcmF0ZSIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpwbGF5
YmFjay1yYXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgSFRNTE1lZGlhRWxl
bWVudDpwbGF5YmFjay1yYXRlIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VC
TEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfUExBWUVELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgInBsYXllZCIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpwbGF5ZWQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UaW1lUmFuZ2VzKiBIVE1MTWVkaWFFbGVtZW50
OnBsYXllZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVElNRV9SQU5HRVMsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUVL
QUJMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzZWVrYWJs
ZSIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpzZWVrYWJsZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTVRpbWVSYW5nZXMqIEhUTUxNZWRpYUVsZW1lbnQ6c2Vla2Fi
bGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VTLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5ERUQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImVuZGVkIiwKKyAgICAg
ICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmVuZGVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2Jvb2xlYW4gSFRNTE1lZGlhRWxlbWVudDplbmRlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FV
VE9QTEFZLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhdXRv
cGxheSIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDphdXRvcGxheSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50OmF1dG9wbGF5IiwKKyAg
ICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0xPT1AsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgImxvb3AiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6bG9vcCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50Omxvb3Ai
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVFJPTFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgImNvbnRyb2xzIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFF
bGVtZW50OmNvbnRyb2xzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxN
ZWRpYUVsZW1lbnQ6Y29udHJvbHMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVk9MVU1FLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgInZvbHVtZSIsCisgICAgICAg
ICAgICAiSFRNTE1lZGlhRWxlbWVudDp2b2x1bWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2RvdWJsZSBIVE1MTWVkaWFFbGVtZW50OnZvbHVtZSIsCisgICAgICAgICAgICAtR19NQVhET1VC
TEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX01VVEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJtdXRlZCIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpt
dXRlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50
Om11dGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFRkFVTFRfTVVURUQsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImRlZmF1bHQtbXV0ZWQiLAorICAgICAg
ICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6ZGVmYXVsdC1tdXRlZCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50OmRlZmF1bHQtbXV0ZWQiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfV0VCS0lUX1BSRVNFUlZFU19QSVRDSCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2Via2l0LXByZXNlcnZlcy1waXRjaCIsCisgICAg
ICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDp3ZWJraXQtcHJlc2VydmVzLXBpdGNoIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxNZWRpYUVsZW1lbnQ6d2Via2l0LXByZXNl
cnZlcy1waXRjaCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfSEFTX0NMT1NFRF9DQVBU
SU9OUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2Via2l0
LWhhcy1jbG9zZWQtY2FwdGlvbnMiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6d2Vi
a2l0LWhhcy1jbG9zZWQtY2FwdGlvbnMiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVh
biBIVE1MTWVkaWFFbGVtZW50OndlYmtpdC1oYXMtY2xvc2VkLWNhcHRpb25zIiwKKyAgICAgICAg
ICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfV0VCS0lUX0NMT1NFRF9DQVBUSU9OU19WSVNJQkxFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3ZWJraXQtY2xvc2VkLWNhcHRpb25zLXZp
c2libGUiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6d2Via2l0LWNsb3NlZC1jYXB0
aW9ucy12aXNpYmxlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxNZWRp
YUVsZW1lbnQ6d2Via2l0LWNsb3NlZC1jYXB0aW9ucy12aXNpYmxlIiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1dFQktJVF9BVURJT19ERUNPREVEX0JZVEVfQ09VTlQsCisgICAgICAgIGdfcGFyYW1f
c3BlY191bG9uZygKKyAgICAgICAgICAgICJ3ZWJraXQtYXVkaW8tZGVjb2RlZC1ieXRlLWNvdW50
IiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OndlYmtpdC1hdWRpby1kZWNvZGVkLWJ5
dGUtY291bnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgSFRNTE1lZGlhRWxlbWVu
dDp3ZWJraXQtYXVkaW8tZGVjb2RlZC1ieXRlLWNvdW50IiwKKyAgICAgICAgICAgIDAsIEdfTUFY
VUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9XRUJLSVRfVklERU9fREVDT0RFRF9CWVRFX0NPVU5ULAorICAgICAgICBnX3Bh
cmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAid2Via2l0LXZpZGVvLWRlY29kZWQtYnl0ZS1j
b3VudCIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDp3ZWJraXQtdmlkZW8tZGVjb2Rl
ZC1ieXRlLWNvdW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIEhUTUxNZWRpYUVs
ZW1lbnQ6d2Via2l0LXZpZGVvLWRlY29kZWQtYnl0ZS1jb3VudCIsCisgICAgICAgICAgICAwLCBH
X01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTUVESUFfR1JPVVAsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAibWVkaWEtZ3JvdXAiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1l
bnQ6bWVkaWEtZ3JvdXAiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNZWRp
YUVsZW1lbnQ6bWVkaWEtZ3JvdXAiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVFJPTExFUiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjb250cm9sbGVyIiwKKyAg
ICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmNvbnRyb2xsZXIiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIEhUTUxNZWRpYUVsZW1lbnQ6Y29udHJv
bGxlciIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfQ09OVFJPTExFUiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dF
QktJVF9DVVJSRU5UX1BMQVlCQUNLX1RBUkdFVF9JU19XSVJFTEVTUywKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2Via2l0LWN1cnJlbnQtcGxheWJhY2stdGFy
Z2V0LWlzLXdpcmVsZXNzIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OndlYmtpdC1j
dXJyZW50LXBsYXliYWNrLXRhcmdldC1pcy13aXJlbGVzcyIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdib29sZWFuIEhUTUxNZWRpYUVsZW1lbnQ6d2Via2l0LWN1cnJlbnQtcGxheWJhY2stdGFy
Z2V0LWlzLXdpcmVsZXNzIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfS0lORCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJraW5kIiwKKyAgICAgICAgICAgICJIVE1M
TWVkaWFFbGVtZW50OmtpbmQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxN
ZWRpYUVsZW1lbnQ6a2luZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2xvYWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2Vs
ZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+bG9hZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8q
IEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X2Nhbl9wbGF5X3R5cGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHR5cGUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwodHlwZSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUeXBlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHR5cGUpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmNhblBsYXlUeXBlKGNvbnZlcnRlZFR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfcGF1c2UoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VM
RU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cGF1c2UoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikK
KyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfZmFzdF9zZWVrKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdk
b3VibGUgdGltZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+ZmFzdFNlZWsodGltZSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odGltZSk7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVO
QUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF93
ZWJraXRfc2hvd19wbGF5YmFja190YXJnZXRfcGlja2VyKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2Vs
ZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+d2Via2l0U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJXaXJlbGVzcyBQbGF5YmFjayBUYXJnZXQiKQorI2VuZGlmIC8qIEVOQUJMRShXSVJF
TEVTU19QTEFZQkFDS19UQVJHRVQpICovCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLworfQorCitXZWJLaXRET01NZWRpYUVycm9yKiB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfZXJyb3IoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpNZWRpYUVycm9y
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZXJyb3IoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQor
ICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9zcmMoV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNyY0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQor
ICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfY3VycmVudF9zcmMoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJ
QV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmN1cnJlbnRTcmMoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2lu
KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jcm9zc09yaWdp
bigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVy
biAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldENyb3NzT3JpZ2luKGNvbnZl
cnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8i
KQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfbmV0d29ya19zdGF0ZShXZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBp
dGVtLT5uZXR3b3JrU3RhdGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndXNob3J0PigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9n
ZXRfcHJlbG9hZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJM
RShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
cHJlbG9hZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAg
IHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfcHJlbG9hZChXZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQcmVsb2FkKGNvbnZlcnRl
ZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworV2ViS2l0RE9NVGltZVJhbmdlcyogd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2J1ZmZlcmVkKFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6VGltZVJhbmdlcz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmJ1ZmZlcmVk
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICov
Cit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3JlYWR5X3N0
YXRlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPnJlYWR5U3RhdGUoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndXNo
b3J0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9zZWVraW5nKFdlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+c2Vla2luZygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBF
TkFCTEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfZ2V0X2N1cnJlbnRfdGltZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5jdXJyZW50VGlt
ZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfY3VycmVudF90aW1lKFdl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVy
cm9yKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVE
SUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJv
cik7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRD
dXJyZW50VGltZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5B
QkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X2dldF9kdXJhdGlvbihXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5kdXJhdGlvbigpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3BhdXNlZChXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPnBhdXNlZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfZ2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBp
dGVtLT5kZWZhdWx0UGxheWJhY2tSYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X3NldF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCog
c2VsZiwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0RGVmYXVs
dFBsYXliYWNrUmF0ZSh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUg
cmVzdWx0ID0gaXRlbS0+cGxheWJhY2tSYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X3NldF9wbGF5YmFja19yYXRlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYs
IGdkb3VibGUgdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFBsYXliYWNrUmF0
ZSh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikK
KyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK1dlYktpdERPTVRpbWVSYW5nZXMqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9wbGF5ZWQoV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpUaW1lUmFuZ2VzPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGxheWVkKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9
CisKK1dlYktpdERPTVRpbWVSYW5nZXMqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dl
dF9zZWVrYWJsZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJM
RShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5zZWVrYWJsZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfZW5kZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5lbmRlZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8p
ICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9hdXRv
cGxheShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphdXRvcGxheUF0dHIpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2F1dG9wbGF5KFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b3BsYXlBdHRyLCB2
YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X2dldF9sb29wKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFf
RUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFz
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Omxvb3BB
dHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9sb29wKFdlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6bG9vcEF0
dHIsIHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8i
KQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X2NvbnRyb2xzKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTUVESUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+Y29udHJvbHMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8i
KQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxF
KFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9j
b250cm9scyhXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VM
RU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q29udHJvbHModmFsdWUpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF92
b2x1bWUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+dm9sdW1lKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJs
ZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9tZWRpYV9lbGVtZW50X3NldF92b2x1bWUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCog
c2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFZvbHVtZSh2YWx1ZSwgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbXV0ZWQoV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5tdXRlZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBF
TkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
c2V0X211dGVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFf
RUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRNdXRlZCh2YWx1ZSk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9k
ZWZhdWx0X211dGVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5B
QkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om11dGVkQXR0cik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfZGVmYXVsdF9tdXRlZChXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6Om11dGVk
QXR0ciwgdmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRl
byIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X3ByZXNlcnZlc19waXRjaChXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdFByZXNlcnZlc1BpdGNoKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfd2Via2l0X3ByZXNlcnZlc19waXRjaChXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0V2Via2l0UHJlc2VydmVzUGl0Y2godmFsdWUpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVP
KSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Vi
a2l0X2hhc19jbG9zZWRfY2FwdGlvbnMoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJ
QV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53
ZWJraXRIYXNDbG9zZWRDYXB0aW9ucygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAv
KiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X2dldF93ZWJraXRfY2xvc2VkX2NhcHRpb25zX3Zpc2libGUoV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT53ZWJraXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
Ym9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF93ZWJraXRfY2xvc2VkX2NhcHRpb25zX3Zpc2li
bGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7Cisj
aWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFdlYmtpdENsb3NlZENhcHRpb25zVmlzaWJsZSh2YWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfd2Via2l0X2F1ZGlvX2RlY29kZWRfYnl0ZV9jb3VudChXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoTUVE
SUFfU1RBVElTVElDUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPndlYmtpdEF1ZGlvRGVj
b2RlZEJ5dGVDb3VudCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJNZWRpYSBT
dGF0aXN0aWNzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAv
KiBFTkFCTEUoTUVESUFfU1RBVElTVElDUykgKi8KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICov
Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X3Zp
ZGVvX2RlY29kZWRfYnl0ZV9jb3VudChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQor
eworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoTUVESUFfU1RBVElTVElDUykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z3Vsb25nIHJlc3VsdCA9IGl0ZW0tPndlYmtpdFZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJNZWRpYSBTdGF0aXN0aWNzIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU1RBVElT
VElDUykgKi8KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vs
b25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbWVkaWFfZ3JvdXAoV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjptZWRpYWdyb3VwQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxF
KFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9t
ZWRpYV9ncm91cChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6bWVkaWFncm91cEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURF
TykgKi8KK30KKworV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfY29udHJvbGxlcihXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxm
KQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01F
RElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhQ29udHJv
bGxlcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRyb2xsZXIoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
VmlkZW8iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwor
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9jdXJyZW50
X3BsYXliYWNrX3RhcmdldF9pc193aXJlbGVzcyhXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxm
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2Via2l0Q3VycmVudFBs
YXliYWNrVGFyZ2V0SXNXaXJlbGVzcygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJXaXJlbGVzcyBQbGF5YmFjayBUYXJnZXQiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9v
bGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgKi8K
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDAp
OworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF9raW5kKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorI2lmIEVOQUJMRShNRURJQV9TRVNTSU9OKSAmJiBFTkFC
TEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb246OmtpbmQoaXRlbSkpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyNpZiAhRU5BQkxFKFZJ
REVPKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRp
ZgorI2lmICFFTkFCTEUoTUVESUFfU0VTU0lPTikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJNZWRpYSBTZXNzaW9uIikKKyNlbmRpZgorICAgIHJldHVybiAwOworI2VuZGlm
IC8qIEVOQUJMRShNRURJQV9TRVNTSU9OKSAmJiBFTkFCTEUoVklERU8pICovCisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9raW5kKFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUo
VklERU8pCisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pICYmIEVOQUJMRShWSURFTykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudE1l
ZGlhU2Vzc2lvbjo6c2V0S2luZCgqaXRlbSwgY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNpZiAhRU5BQkxF
KFZJREVPKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNl
bmRpZgorI2lmICFFTkFCTEUoTUVESUFfU0VTU0lPTikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJNZWRpYSBTZXNzaW9uIikKKyNlbmRpZgorI2VuZGlmIC8qIEVOQUJMRShN
RURJQV9TRVNTSU9OKSAmJiBFTkFCTEUoVklERU8pICovCisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2ZGIxMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5oCkBAIC0wLDAgKzEsNjYxIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50X2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVESUFfRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfTUVESUFfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJQV9FTEVNRU5ULCBXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VM
RU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVESUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9NRURJQV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01FRElB
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVESUFfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9NRURJQV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01FRElBX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnRDbGFzcykpCisKKy8qKgorICogV0VCS0lUX0RPTV9IVE1MX01FRElB
X0VMRU1FTlRfTkVUV09SS19FTVBUWToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVE
SUFfRUxFTUVOVF9ORVRXT1JLX0VNUFRZIDAKKworLyoqCisgKiBXRUJLSVRfRE9NX0hUTUxfTUVE
SUFfRUxFTUVOVF9ORVRXT1JLX0lETEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01F
RElBX0VMRU1FTlRfTkVUV09SS19JRExFIDEKKworLyoqCisgKiBXRUJLSVRfRE9NX0hUTUxfTUVE
SUFfRUxFTUVOVF9ORVRXT1JLX0xPQURJTkc6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1M
X01FRElBX0VMRU1FTlRfTkVUV09SS19MT0FESU5HIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX0hU
TUxfTUVESUFfRUxFTUVOVF9ORVRXT1JLX05PX1NPVVJDRToKKyAqLworI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfTUVESUFfRUxFTUVOVF9ORVRXT1JLX05PX1NPVVJDRSAzCisKKy8qKgorICogV0VC
S0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfSEFWRV9OT1RISU5HOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX0hBVkVfTk9USElORyAwCisKKy8qKgorICogV0VC
S0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfSEFWRV9NRVRBREFUQToKKyAqLworI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX01FVEFEQVRBIDEKKworLyoqCisgKiBX
RUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX0NVUlJFTlRfREFUQToKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX0NVUlJFTlRfREFUQSAyCisK
Ky8qKgorICogV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfSEFWRV9GVVRVUkVfREFUQToK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX0ZVVFVSRV9E
QVRBIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX0VOT1VH
SF9EQVRBOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX0hBVkVf
RU5PVUdIX0RBVEEgNAorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2xvYWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9sb2FkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2Nhbl9w
bGF5X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHR5
cGU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9jYW5fcGxheV90eXBlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB0eXBlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9wYXVzZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X3BhdXNlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2Zhc3Rfc2VlazoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdGltZTogQSAjZ2RvdWJsZQor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9mYXN0X3NlZWsoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVu
dCogc2VsZiwgZ2RvdWJsZSB0aW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF93ZWJraXRfc2hvd19wbGF5YmFja190YXJnZXRfcGlja2VyOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfd2Via2l0
X3Nob3dfcGxheWJhY2tfdGFyZ2V0X3BpY2tlcihXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZXJyb3I6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTWVkaWFFcnJvcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01NZWRpYUVycm9yKgord2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2Vycm9yKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9z
cmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9zZXRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3NyYyhXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jdXJyZW50X3NyYzoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3VycmVudF9zcmMoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9nZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9jcm9zc19vcmlnaW46Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X25ldHdvcmtfc3RhdGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X25ldHdvcmtfc3RhdGUoV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfZ2V0X3ByZWxvYWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3By
ZWxvYWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3ByZWxvYWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9zZXRfcHJlbG9hZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X2dldF9idWZmZXJlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRpbWVS
YW5nZXMqCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfYnVmZmVyZWQoV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfZ2V0X3JlYWR5X3N0YXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0CisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1c2hvcnQKK3dlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2dldF9yZWFkeV9zdGF0ZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfc2Vla2luZzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9zZWVraW5nKFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X2dldF9jdXJyZW50X3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfZ2V0X2N1cnJlbnRfdGltZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfY3VycmVu
dF90aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2RvdWJsZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X3NldF9jdXJyZW50X3RpbWUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2RvdWJs
ZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2dldF9kdXJhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfZHVyYXRpb24oV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3BhdXNlZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9wYXVzZWQoV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfZ2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKFdlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3Nl
dF9kZWZhdWx0X3BsYXliYWNrX3JhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudAorICogQHZhbHVlOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3Nl
dF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwg
Z2RvdWJsZSB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X3BsYXliYWNrX3JhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3BsYXliYWNrX3JhdGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnZG91
YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9wbGF5YmFja19yYXRlKFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdkb3VibGUgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9wbGF5ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NVGltZVJhbmdlcworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01UaW1lUmFuZ2VzKgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X3BsYXllZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfc2Vla2FibGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NVGltZVJhbmdlcworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01UaW1lUmFuZ2VzKgord2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfZ2V0X3NlZWthYmxlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9lbmRlZDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9lbmRlZChXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfYXV0b3BsYXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9nZXRfYXV0b3BsYXkoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2F1dG9wbGF5OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2F1dG9wbGF5KFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfbG9vcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X2dldF9sb29wKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9sb29wOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfc2V0X2xvb3AoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X2dldF9jb250cm9sczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dl
dF9jb250cm9scyhXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfY29udHJvbHM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9zZXRfY29udHJvbHMoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCog
c2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X2dldF92b2x1bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X3ZvbHVtZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfdm9sdW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF92b2x1bWUoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9tdXRlZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9tdXRlZChXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9zZXRfbXV0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfbXV0ZWQoV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9kZWZhdWx0X211dGVkOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfbXV0ZWQoV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfc2V0X2RlZmF1bHRfbXV0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9zZXRfZGVmYXVsdF9tdXRlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBn
Ym9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X3dlYmtpdF9wcmVzZXJ2ZXNfcGl0Y2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfd2Via2l0X3ByZXNlcnZlc19waXRjaChXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9z
ZXRfd2Via2l0X3ByZXNlcnZlc19waXRjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X3NldF93ZWJraXRfcHJlc2VydmVzX3BpdGNoKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNl
bGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfd2Via2l0X2hhc19jbG9zZWRfY2FwdGlvbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X2hhc19jbG9zZWRfY2FwdGlvbnMoV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9jbG9zZWRfY2FwdGlvbnNfdmlzaWJsZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfY2xvc2VkX2NhcHRpb25z
X3Zpc2libGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3dlYmtpdF9jbG9zZWRfY2FwdGlvbnNfdmlz
aWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF93ZWJraXRfY2xvc2VkX2Nh
cHRpb25zX3Zpc2libGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJr
aXRfYXVkaW9fZGVjb2RlZF9ieXRlX2NvdW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFf
ZWxlbWVudF9nZXRfd2Via2l0X2F1ZGlvX2RlY29kZWRfYnl0ZV9jb3VudChXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfd2Via2l0X3ZpZGVvX2RlY29kZWRfYnl0ZV9jb3VudDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF92aWRlb19kZWNvZGVkX2J5dGVfY291bnQo
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X21lZGlhX2dyb3VwOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X2dldF9tZWRpYV9ncm91cChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfbWVkaWFf
Z3JvdXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfbWVkaWFfZ3JvdXAoV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY29udHJvbGxlcjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKgord2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2NvbnRyb2xsZXIoV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X3dlYmtpdF9jdXJyZW50X3BsYXliYWNrX3RhcmdldF9pc193aXJlbGVzczoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfY3VycmVudF9wbGF5YmFj
a190YXJnZXRfaXNfd2lyZWxlc3MoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2tpbmQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2tpbmQoV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0
X2tpbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfa2luZChXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkN2I4MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MTWVkaWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQuaD4KKyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogd3JhcEhUTUxNZWRpYUVs
ZW1lbnQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCopOworV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCopOworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxN
ZW51RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZW51RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4ZjQxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TE1lbnVFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxN
ZW51RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxNZW51RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxNZW51RWxlbWVudCoga2l0
KFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9N
X0hUTUxfTUVOVV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkp
OworfQorCitXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1lbnVF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTE1lbnVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50KiB3cmFwSFRNTE1lbnVF
bGVtZW50KFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9NRU5VX0VMRU1FTlQo
Z19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX01FTlVfRUxFTUVOVCwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2Vi
Q29yZTo6SFRNTE1lbnVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTE1lbnVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VD
YXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAg
ICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfbWVudV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3Zl
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxN
ZW51RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVO
VF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9DT01QQUNULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX21lbnVfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUVOVV9FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
Q09NUEFDVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9zZXRfY29tcGFj
dChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTUhUTUxNZW51RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01f
SFRNTF9NRU5VX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewor
ICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X2dldF9jb21wYWN0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfY2xhc3Nf
aW5pdChXZWJLaXRET01IVE1MTWVudUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tZW51
X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ09NUEFDVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAiY29tcGFjdCIsCisgICAgICAgICAgICAiSFRNTE1lbnVFbGVtZW50OmNvbXBhY3QiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE1lbnVFbGVtZW50OmNvbXBhY3QiLAor
ICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9pbml0KFdl
YktpdERPTUhUTUxNZW51RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfZ2V0X2Nv
bXBhY3QoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVOVV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
SFRNTE1lbnVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjb21wYWN0QXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X3NldF9jb21wYWN0KFdlYktpdERPTUhUTUxN
ZW51RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX01FTlVfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjb21wYWN0QXR0ciwgdmFsdWUpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNZW51RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDEyNWVmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MTWVudUVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Vi
a2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRET01IVE1MTWVudUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWVudUVsZW1l
bnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVO
VV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9NRU5VX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNZW51RWxlbWVudCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9NRU5VX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVOVV9FTEVNRU5ULCBXZWJL
aXRET01IVE1MTWVudUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01F
TlVfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRU5VX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0hUTUxfTUVOVV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01FTlVfRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9NRU5VX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVOVV9FTEVNRU5U
LCBXZWJLaXRET01IVE1MTWVudUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRN
TE1lbnVFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZW51RWxlbWVudENsYXNzIHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9nZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTWVudUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X2dl
dF9jb21wYWN0KFdlYktpdERPTUhUTUxNZW51RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9zZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MTWVudUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9zZXRfY29tcGFjdChX
ZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxNZW51RWxlbWVudF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNZW51RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjFiMjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZW51RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUhUTUxNZW51RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWVudUVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1lbnVFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNZW51RWxlbWVudC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTUhUTUxNZW51RWxlbWVudCogd3JhcEhUTUxNZW51RWxlbWVudChX
ZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxNZW51RWxlbWVudCoga2l0
KFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCopOworV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50KiBj
b3JlKFdlYktpdERPTUhUTUxNZW51RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTWVudUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjJmMTU5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBvYmopCit7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6
Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MTWV0YUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQq
IHdyYXBIVE1MTWV0YUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1M
X01FVEFfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVUQV9FTEVN
RU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21ldGFfZWxl
bWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRE
T01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBj
b3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50
Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21ldGFfZWxl
bWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUs
IGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX21ldGFfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2Uq
IGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9t
ZXRhX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5l
ciA9IHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAg
IGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVt
ZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50LCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lU
X0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NPTlRFTlQsCisgICAgUFJPUF9IVFRQX0VR
VUlWLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1NDSEVNRSwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX01FVEFfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0NPTlRFTlQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1l
bnRfc2V0X2NvbnRlbnQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9IVFRQX0VRVUlWOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfbWV0YV9lbGVtZW50X3NldF9odHRwX2VxdWl2KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDSEVNRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfc2NoZW1lKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX21ldGFfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09O
VEVOVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X21ldGFfZWxlbWVudF9nZXRfY29udGVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9IVFRQX0VRVUlWOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9odHRwX2VxdWl2KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NIRU1FOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9zY2hlbWUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21ldGFf
ZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudENsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9wcm9wZXJ0eTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DT05URU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImNvbnRlbnQiLAorICAgICAgICAgICAgIkhUTUxNZXRhRWxlbWVudDpj
b250ZW50IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTWV0YUVsZW1lbnQ6
Y29udGVudCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IVFRQX0VRVUlWLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImh0dHAtZXF1aXYiLAorICAgICAgICAgICAgIkhU
TUxNZXRhRWxlbWVudDpodHRwLWVxdWl2IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MTWV0YUVsZW1lbnQ6aHR0cC1lcXVpdiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAg
ICAgICAgIkhUTUxNZXRhRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MTWV0YUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ0hFTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2NoZW1lIiwKKyAgICAg
ICAgICAgICJIVE1MTWV0YUVsZW1lbnQ6c2NoZW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MTWV0YUVsZW1lbnQ6c2NoZW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9tZXRhX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHJl
cXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfY29udGVudChXZWJLaXRET01IVE1MTWV0YUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRVRBX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29u
dGVudEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9tZXRhX2VsZW1lbnRfc2V0X2NvbnRlbnQoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FVEFf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTE1ldGFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y29udGVudEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2h0dHBfZXF1aXYoV2ViS2l0RE9NSFRNTE1ldGFFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVUQV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Omh0
dHBfZXF1aXZBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfbWV0YV9lbGVtZW50X3NldF9odHRwX2VxdWl2KFdlYktpdERPTUhUTUxNZXRhRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9NRVRBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6Omh0dHBfZXF1aXZBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxNZXRh
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FVEFfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxNZXRh
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRVRBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9zY2hlbWUoV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVUQV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNjaGVtZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X3NjaGVtZShXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
TUVUQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpzY2hlbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE1ldGFFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlODg3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxNZXRhRWxlbWVudC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0
ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRET01IVE1MTWV0YUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWV0YUVsZW1lbnRf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVUQV9F
TEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FVEFfRUxFTUVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9N
RVRBX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9NRVRBX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVUQV9FTEVNRU5ULCBXZWJLaXRE
T01IVE1MTWV0YUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01FVEFf
RUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9NRVRBX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0hUTUxfTUVUQV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01FVEFfRUxFTUVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9NRVRBX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVUQV9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MTWV0YUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZXRhRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfY29udGVudDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTWV0YUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfY29udGVu
dChXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9tZXRhX2VsZW1lbnRfc2V0X2NvbnRlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1ldGFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X2NvbnRlbnQoV2ViS2l0RE9NSFRN
TE1ldGFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2h0dHBfZXF1aXY6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE1ldGFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2h0dHBfZXF1
aXYoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfbWV0YV9lbGVtZW50X3NldF9odHRwX2VxdWl2OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxNZXRhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9odHRwX2VxdWl2KFdlYktp
dERPTUhUTUxNZXRhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxNZXRhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9uYW1lKFdl
YktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X21ldGFfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWV0YUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MTWV0YUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X21ldGFfZWxlbWVudF9nZXRfc2NoZW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZXRh
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9zY2hlbWUoV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50
X3NldF9zY2hlbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9tZXRhX2VsZW1lbnRfc2V0X3NjaGVtZShXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRE
T01IVE1MTWV0YUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mNmQxMzBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TWV0YUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTWV0YUVsZW1lbnRQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxNZXRhRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MTWV0YUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MTWV0
YUVsZW1lbnQqIHdyYXBIVE1MTWV0YUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50Kik7
CitXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQq
KTsKK1dlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWV0YUVsZW1l
bnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmY2MjA1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LmNw
cApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxNb2RFbGVtZW50LmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01IVE1MTW9kRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxNb2RF
bGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVChr
aXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRN
TE1vZEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTUhUTUxNb2RFbGVtZW50KiB3cmFwSFRNTE1vZEVsZW1lbnQoV2ViQ29yZTo6SFRNTE1vZEVs
ZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfTU9EX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQ
RV9IVE1MX01PRF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX21vZF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFj
b3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MTW9kRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX21vZF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX21vZF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
aHRtbF9tb2RfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsK
KyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21vZF9l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NP
REUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudCwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DSVRFLAorICAgIFBST1BfREFURV9USU1F
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNb2RFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX01PRF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0lURToKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX21vZF9lbGVtZW50X3NldF9jaXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFURV9USU1FOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfc2V0X2RhdGVfdGltZShzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9tb2RfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MTW9kRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NJVEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVu
dF9nZXRfY2l0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRFX1RJ
TUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9t
b2RfZWxlbWVudF9nZXRfZGF0ZV90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxN
b2RFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfc2V0X3Byb3BlcnR5
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX21vZF9l
bGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSVRFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNpdGUiLAorICAgICAgICAgICAgIkhU
TUxNb2RFbGVtZW50OmNpdGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxN
b2RFbGVtZW50OmNpdGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREFURV9USU1FLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRhdGUtdGltZSIsCisgICAgICAgICAg
ICAiSFRNTE1vZEVsZW1lbnQ6ZGF0ZS10aW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MTW9kRWxlbWVudDpkYXRlLXRpbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX21vZF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX21vZF9lbGVtZW50X2dldF9jaXRlKFdlYktpdERPTUhUTUxNb2RFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTU9EX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmNpdGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfc2V0X2NpdGUoV2ViS2l0
RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfTU9EX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2l0ZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfZGF0ZV90aW1lKFdlYktp
dERPTUhUTUxNb2RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTU9EX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpkYXRldGltZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfZGF0ZV90aW1lKFdlYktpdERPTUhUTUxN
b2RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX01PRF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmRhdGV0aW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwODAxOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20v
d2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRET01IVE1MTW9kRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxNb2RFbGVt
ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX01P
RF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTU9EX0VMRU1FTlQob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TU9EX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNb2RFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX01PRF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01PRF9FTEVNRU5ULCBXZWJLaXRET01I
VE1MTW9kRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTU9EX0VMRU1F
TlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfTU9EX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
TU9EX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTU9EX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfTU9EX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTU9EX0VMRU1FTlQsIFdlYktpdERPTUhU
TUxNb2RFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxNb2RFbGVtZW50IHsK
KyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxNb2RFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9o
dG1sX21vZF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9tb2RfZWxlbWVudF9nZXRfY2l0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTW9kRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2NpdGUoV2ViS2l0RE9NSFRNTE1vZEVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfY2l0
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTW9kRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1l
bnRfc2V0X2NpdGUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dldF9kYXRlX3Rp
bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21vZF9l
bGVtZW50X2dldF9kYXRlX3RpbWUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfZGF0ZV90aW1lOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNb2RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfZGF0
ZV90aW1lKFdlYktpdERPTUhUTUxNb2RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTW9kRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1v
ZEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1
YTRmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRQcml2YXRlLmgKQEAg
LTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01IVE1MTW9kRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTW9k
RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTW9kRWxlbWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTW9kRWxlbWVudC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxNb2RFbGVtZW50KiB3cmFwSFRNTE1vZEVsZW1lbnQo
V2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxNb2RFbGVtZW50KiBraXQo
V2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxNb2RFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxNb2RFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxPTGlzdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2M2MjBlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmNwcApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVu
dCoga2l0KFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX09fTElTVF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2Rl
Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxPTGlzdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCog
d3JhcEhUTUxPTGlzdEVsZW1lbnQoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRN
TF9PX0xJU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfT19MSVNU
X0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb19s
aXN0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpF
dmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X29fbGlzdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MT0xp
c3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9MaXN0RWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNl
LT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfYWRk
X2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitH
X0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LCB3ZWJraXRf
ZG9tX2h0bWxfb19saXN0X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
Q09NUEFDVCwKKyAgICBQUk9QX1NUQVJULAorICAgIFBST1BfUkVWRVJTRUQsCisgICAgUFJPUF9U
WVBFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3Nl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxPTGlzdEVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3Qoc2VsZiwgZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RB
UlQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfc3RhcnQoc2Vs
ZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfUkVWRVJTRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRf
cmV2ZXJzZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29fbGlzdF9l
bGVtZW50X3NldF90eXBlX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9PX0xJU1RfRUxFTUVOVChvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9n
ZXRfY29tcGFjdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEFSVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29fbGlzdF9l
bGVtZW50X2dldF9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9S
RVZFUlNFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX29fbGlzdF9lbGVtZW50X2dldF9yZXZlcnNlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfY2xh
c3NfaW5pdChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
b19saXN0X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DT01QQUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJjb21wYWN0IiwKKyAgICAgICAgICAgICJIVE1MT0xpc3RFbGVtZW50OmNvbXBh
Y3QiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE9MaXN0RWxlbWVudDpj
b21wYWN0IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NUQVJULAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfbG9uZygKKyAgICAgICAgICAgICJzdGFydCIsCisgICAgICAgICAgICAiSFRNTE9MaXN0RWxl
bWVudDpzdGFydCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MT0xpc3RFbGVt
ZW50OnN0YXJ0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFVkVS
U0VELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJyZXZlcnNl
ZCIsCisgICAgICAgICAgICAiSFRNTE9MaXN0RWxlbWVudDpyZXZlcnNlZCIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MT0xpc3RFbGVtZW50OnJldmVyc2VkIiwKKyAgICAg
ICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTE9MaXN0RWxlbWVudDp0eXBlIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT0xpc3RFbGVtZW50OnR5cGUiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2luaXQoV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVz
dCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfY29t
cGFjdChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpIVE1MT0xpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjb21wYWN0QXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9N
SFRNTE9MaXN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MT0xp
c3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xl
YW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjb21wYWN0QXR0ciwgdmFsdWUpOworfQor
CitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3N0YXJ0KFdlYktpdERP
TUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9PX0xJU1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5z
dGFydCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29f
bGlzdF9lbGVtZW50X3NldF9zdGFydChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmLCBn
bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0U3RhcnQodmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3JldmVyc2VkKFdlYktpdERPTUhUTUxPTGlz
dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PX0xJU1Rf
RUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFz
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJldmVy
c2VkQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
b19saXN0X2VsZW1lbnRfc2V0X3JldmVyc2VkKFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNl
bGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PX0xJU1Rf
RUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmV2ZXJzZWRBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfb19saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X09fTElTVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6dHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWYxNjFmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT0xpc3RF
bGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1M
X09fTElTVF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVu
dF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VMRU1FTlQob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfT19MSVNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT19M
SVNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX09fTElTVF9FTEVNRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X09fTElTVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09fTElTVF9FTEVNRU5U
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX09fTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTE9MaXN0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9vX2xp
c3RfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb19s
aXN0X2VsZW1lbnRfZ2V0X2NvbXBhY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9MaXN0
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdChXZWJLaXRE
T01IVE1MT0xpc3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb19s
aXN0X2VsZW1lbnRfc2V0X2NvbXBhY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9MaXN0
RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRN
TE9MaXN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTE9MaXN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfc3RhcnQoV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29f
bGlzdF9lbGVtZW50X3NldF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT0xpc3RF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfc3RhcnQoV2ViS2l0RE9NSFRNTE9MaXN0
RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9v
X2xpc3RfZWxlbWVudF9nZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxP
TGlzdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29f
bGlzdF9lbGVtZW50X3NldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9M
aXN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01I
VE1MT0xpc3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYwMGZmYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUhUTUxPTGlzdEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE9MaXN0RWxl
bWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MT0xpc3RFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiB3cmFwSFRNTE9MaXN0RWxl
bWVudChXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50Kik7CitXZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50KiBraXQoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCopOworV2ViQ29yZTo6SFRNTE9MaXN0
RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxPTGlzdEVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmYxN2NkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRVbnN0
YWJsZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNF
X1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vX2xp
c3RfZWxlbWVudF9nZXRfcmV2ZXJzZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9MaXN0
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfb19saXN0
X2VsZW1lbnRfZ2V0X3JldmVyc2VkKFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfcmV2ZXJzZWQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9v
bGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3JldmVyc2VkKFdlYktpdERPTUhUTUxP
TGlzdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisj
ZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliZTI0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsODQ0IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TE9iamVjdEVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1M
T2JqZWN0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBvYmopCit7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9PQkpFQ1RfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQq
IGNvcmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50KiB3cmFwSFRNTE9iamVjdEVsZW1lbnQoV2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXRUJLSVRfRE9NX0hUTUxfT0JKRUNUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9IVE1MX09CSkVDVF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7
CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3Jl
OjpIVE1MT2JqZWN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxPYmplY3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2Ny
aXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxP
YmplY3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9iamVj
dEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5h
bWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAg
IGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9k
aXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudCwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9GT1JNLAorICAgIFBST1BfQ09ERSwKKyAgICBQUk9Q
X0FMSUdOLAorICAgIFBST1BfQVJDSElWRSwKKyAgICBQUk9QX0JPUkRFUiwKKyAgICBQUk9QX0NP
REVfQkFTRSwKKyAgICBQUk9QX0NPREVfVFlQRSwKKyAgICBQUk9QX0RBVEEsCisgICAgUFJPUF9E
RUNMQVJFLAorICAgIFBST1BfSEVJR0hULAorICAgIFBST1BfSFNQQUNFLAorICAgIFBST1BfTkFN
RSwKKyAgICBQUk9QX1NUQU5EQlksCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfVVNFX01BUCwK
KyAgICBQUk9QX1ZTUEFDRSwKKyAgICBQUk9QX1dJRFRILAorICAgIFBST1BfV0lMTF9WQUxJREFU
RSwKKyAgICBQUk9QX1ZBTElESVRZLAorICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAg
IFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9PQkpFQ1Rf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0NPREU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY29k
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
c2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQVJDSElWRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X3NldF9hcmNoaXZlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQk9SREVSOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2JvcmRlcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPREVfQkFTRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlX2Jhc2Uoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
T0RFX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY29k
ZV90eXBlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfREFUQToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X3NldF9kYXRhKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfREVDTEFSRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X3NldF9kZWNsYXJlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9oZWlnaHQoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IU1BBQ0U6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaHNwYWNlKHNlbGYsIGdfdmFs
dWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfbmFtZShzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NUQU5EQlk6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfc3Rh
bmRieShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVu
dF9zZXRfdHlwZV9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFX01BUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X3NldF91c2VfbWFwKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQQUNFOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3ZzcGFjZShzZWxmLCBnX3ZhbHVlX2dldF9s
b25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9PQkpFQ1Rf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0ZPUk06CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X2dldF9mb3JtKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0NPREU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BUkNISVZFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2FyY2hpdmUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQk9SREVSOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X2JvcmRlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT0RFX0JB
U0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9nZXRfY29kZV9iYXNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0NPREVfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlX3R5cGUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREFUQToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9kYXRhKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFQ0xBUkU6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRf
ZGVjbGFyZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9nZXRfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0hTUEFDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF9oc3BhY2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NUQU5EQlk6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfc3RhbmRieShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0
cihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfTUFQOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1l
bnRfZ2V0X3VzZV9tYXAoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQ
QUNFOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfZ2V0X3ZzcGFjZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9XSUxMX1ZBTElEQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURJVFk6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X2dldF92YWxpZGl0eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJ
REFUSU9OX01FU1NBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRFTlRfRE9DVU1FTlQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X2dldF9jb250ZW50X2RvY3VtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZvcm0iLAorICAgICAg
ICAgICAgIkhUTUxPYmplY3RFbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgInJlYWQtb25seSBX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxPYmplY3RFbGVtZW50OmZvcm0iLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09ERSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb2RlIiwKKyAgICAgICAgICAgICJI
VE1MT2JqZWN0RWxlbWVudDpjb2RlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MT2JqZWN0RWxlbWVudDpjb2RlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAg
ICJIVE1MT2JqZWN0RWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTE9iamVjdEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVJDSElWRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhcmNoaXZlIiwKKyAg
ICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDphcmNoaXZlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDphcmNoaXZlIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0JPUkRFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJi
b3JkZXIiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OmJvcmRlciIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1lbnQ6Ym9yZGVyIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0NPREVfQkFTRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJjb2RlLWJhc2UiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OmNv
ZGUtYmFzZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1l
bnQ6Y29kZS1iYXNlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPREVfVFlQRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb2RlLXR5cGUiLAorICAgICAgICAgICAg
IkhUTUxPYmplY3RFbGVtZW50OmNvZGUtdHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTE9iamVjdEVsZW1lbnQ6Y29kZS10eXBlIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RB
VEEsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGF0YSIsCisg
ICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6ZGF0YSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1lbnQ6ZGF0YSIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9E
RUNMQVJFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkZWNs
YXJlIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDpkZWNsYXJlIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxPYmplY3RFbGVtZW50OmRlY2xhcmUiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6aGVp
Z2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDpo
ZWlnaHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFNQQUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
bG9uZygKKyAgICAgICAgICAgICJoc3BhY2UiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVt
ZW50OmhzcGFjZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MT2JqZWN0RWxl
bWVudDpoc3BhY2UiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFN
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAg
ICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NU
QU5EQlksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3RhbmRi
eSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6c3RhbmRieSIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1lbnQ6c3RhbmRieSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OnR5cGUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OnR5cGUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfVVNFX01BUCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJ1c2UtbWFwIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDp1c2UtbWFw
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDp1c2Ut
bWFwIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1ZTUEFDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoCisgICAgICAgICAgICAidnNwYWNlIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVu
dDp2c3BhY2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTE9iamVjdEVsZW1l
bnQ6dnNwYWNlIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJRFRI
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIndpZHRoIiwKKyAg
ICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTE9iamVjdEVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
V0lMTF9WQUxJREFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAid2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6d2lsbC12
YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxPYmplY3RFbGVt
ZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxJRElUWSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ2YWxpZGl0eSIsCisgICAgICAg
ICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBIVE1MT2JqZWN0RWxlbWVudDp2YWxpZGl0eSIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxJREFUSU9OX01F
U1NBR0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsaWRh
dGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDp2YWxpZGF0aW9u
LW1lc3NhZ2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTE9iamVjdEVsZW1l
bnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVOVF9ET0NVTUVO
VCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjb250ZW50LWRv
Y3VtZW50IiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDpjb250ZW50LWRvY3VtZW50
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRG9jdW1lbnQqIEhUTUxPYmplY3RF
bGVtZW50OmNvbnRlbnQtZG9jdW1lbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RP
Q1VNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRN
TE9iamVjdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfY2hlY2tfdmFsaWRp
dHkoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmNoZWNrVmFsaWRpdHkoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlk
aXR5KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKGVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRF
cnJvciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChlcnJvcik7CisgICAgaXRlbS0+c2V0Q3VzdG9t
VmFsaWRpdHkoY29udmVydGVkRXJyb3IpOworfQorCitXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQq
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVD
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmNvZGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JK
RUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y29kZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTE9iamVjdEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYXJjaGl2ZShXZWJLaXRET01IVE1M
T2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09C
SkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6YXJjaGl2ZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYXJjaGl2ZShXZWJLaXRET01IVE1M
T2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphcmNoaXZlQXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9ib3JkZXIo
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJvcmRlckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYm9yZGVyKFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJvcmRlckF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9n
ZXRfY29kZV9iYXNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2RlYmFzZUF0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVu
dF9zZXRfY29kZV9iYXNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmNvZGViYXNlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlX3R5cGUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmNvZGV0eXBlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlX3R5cGUoV2ViS2l0RE9NSFRNTE9iamVjdEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y29kZXR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2RhdGEoV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
ZGF0YUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9zZXRfZGF0YShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpF
Q1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpkYXRhQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2RlY2xhcmUoV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1Rf
RUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhh
c0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkZWNs
YXJlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
b2JqZWN0X2VsZW1lbnRfc2V0X2RlY2xhcmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1Rf
RUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OmRlY2xhcmVBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
aGVpZ2h0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
T0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6aGVpZ2h0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2hzcGFjZShXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVD
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5nZXRJbnRl
Z3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhzcGFjZUF0dHIpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9o
c3BhY2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpoc3BhY2VBdHRy
LCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0
X25hbWUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpu
YW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X2dldF9zdGFuZGJ5KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzdGFuZGJ5
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X3NldF9zdGFuZGJ5KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVD
VF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnN0YW5kYnlBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVD
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxPYmpl
Y3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3VzZV9tYXAoV2ViS2l0
RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnVzZW1hcEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdXNlX21hcChXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp1c2VtYXBBdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdnNw
YWNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJl
c3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6dnNw
YWNlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
b2JqZWN0X2VsZW1lbnRfc2V0X3ZzcGFjZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2Vs
ZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnZzcGFjZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRo
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1Rf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjp3aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JK
RUNUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT53aWxsVmFsaWRhdGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01WYWxp
ZGl0eVN0YXRlKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpWYWxpZGl0eVN0YXRlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dmFsaWRp
dHkoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21l
c3NhZ2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsaWRhdGlvbk1lc3NhZ2UoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NRG9jdW1lbnQqIHdlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVD
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jb250ZW50RG9jdW1lbnQoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzZGMxOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQuaApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9t
L3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9PQkpFQ1RfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09CSkVDVF9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX09CSkVDVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9PQkpFQ1RfRUxFTUVOVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9PQkpFQ1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX09CSkVDVF9F
TEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX09CSkVDVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09CSkVDVF9F
TEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX09CSkVDVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVu
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2Zvcm06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTUhUTUxGb3JtRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxGb3JtRWxl
bWVudCoKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01I
VE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X2dldF9jb2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZShXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X3NldF9jb2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9zZXRfY29kZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVu
dF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfZ2V0X2FyY2hpdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9hcmNoaXZlKFdlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfc2V0X2FyY2hpdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9hcmNoaXZlKFdlYktpdERPTUhUTUxPYmpl
Y3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYm9yZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYm9yZGVyKFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
T2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2JvcmRlcihXZWJLaXRET01I
VE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGVfYmFzZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0
X2NvZGVfYmFzZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlX2Jhc2U6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9j
b2RlX2Jhc2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2Rl
X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF9jb2RlX3R5cGUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY29k
ZV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9zZXRfY29kZV90eXBlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9nZXRfZGF0YToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2RhdGEoV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVu
dF9zZXRfZGF0YToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2RhdGEoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X2dldF9kZWNsYXJlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9kZWNsYXJlKFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfc2V0X2RlY2xhcmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9kZWNsYXJlKFdlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9oZWlnaHQo
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfaHNwYWNlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoq
LworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9o
c3BhY2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaHNwYWNlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaHNwYWNlKFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfbmFt
ZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01I
VE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3N0YW5kYnk6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9z
dGFuZGJ5KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3N0YW5kYnk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9zdGFuZGJ5
KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdHlwZV9hdHRyOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1l
bnRfZ2V0X3VzZV9tYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF91c2VfbWFwKFdlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
c2V0X3VzZV9tYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X3NldF91c2VfbWFwKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9nZXRfdnNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmpl
Y3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92c3BhY2UoV2ViS2l0RE9NSFRN
TE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9zZXRfdnNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdnNwYWNlKFdlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29i
amVjdF9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfc2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF9jb250ZW50X2RvY3VtZW50OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50Kgor
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb250ZW50X2RvY3VtZW50KFdlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MjA5NWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRQcml2
YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9iamVjdEVsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogd3JhcEhUTUxPYmplY3RFbGVtZW50
KFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Kik7CitXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dCoga2l0KFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MT2JqZWN0
RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCopOworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFVuc3RhYmxlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mZGQ5M2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dFVuc3RhYmxlLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfY2hlY2tfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0
X2N1c3RvbV92YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dAorICogQGVycm9yOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2N1c3Rv
bV92YWxpZGl0eShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dp
bGxfdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVZhbGlkaXR5U3RhdGUqCit3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X3ZhbGlkYXRpb25fbWVzc2FnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFVuc3RhYmxlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxP
cHRHcm91cEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4
ZTRjZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LmNwcApA
QCAtMCwwICsxLDIwNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9I
VE1MX09QVF9HUk9VUF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2Jq
KSkpOworfQorCitXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50KiBjb3JlKFdlYktpdERPTUhU
TUxPcHRHcm91cEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
cmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxl
bWVudCogd3JhcEhUTUxPcHRHcm91cEVsZW1lbnQoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVu
dCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50
KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNv
cmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MT3B0R3JvdXBFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVu
dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUs
IGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2FkZF9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MT3B0R3JvdXBFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9vcHRf
Z3JvdXBfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdP
YmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9o
dG1sX29wdF9ncm91cF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LCB3ZWJraXRf
ZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfRElTQUJMRUQsCisgICAgUFJPUF9MQUJFTCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX09QVF9HUk9VUF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vcHRf
Z3JvdXBfZWxlbWVudF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFCRUw6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfbGFiZWwoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9PUFRfR1JP
VVBfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X2xhYmVsKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRfZ3Jv
dXBfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnRDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1l
bnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJU0FCTEVELAorICAgICAgICBn
X3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkaXNhYmxlZCIsCisgICAgICAgICAg
ICAiSFRNTE9wdEdyb3VwRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnYm9vbGVhbiBIVE1MT3B0R3JvdXBFbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0xBQkVMLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImxhYmVsIiwKKyAgICAgICAgICAgICJIVE1MT3B0R3JvdXBFbGVtZW50OmxhYmVsIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT3B0R3JvdXBFbGVtZW50OmxhYmVsIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9pbml0KFdl
YktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1l
bnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cik7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1l
bnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRfR1JPVVBfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6ZGlzYWJsZWRBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X2xhYmVsKFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRfR1JPVVBfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6bGFiZWxBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X2xhYmVsKFdlYktpdERPTUhUTUxPcHRHcm91
cEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsYWJlbEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxP
cHRHcm91cEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWVh
NzJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LmgKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNl
cnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudF9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQgICAgICAgICAg
ICAod2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRfR1JP
VVBfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRfR1JPVVBfRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUX0dST1VQX0VMRU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfT1BUX0dST1VQX0VMRU1FTlRfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfT1BUX0dST1VQX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BUX0dS
T1VQX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQsIFdlYktpdERPTUhU
TUxPcHRHcm91cEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9wdEdyb3Vw
RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsK
Kworc3RydWN0IF9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50Q2xhc3MgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfZGlzYWJsZWQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9v
cHRfZ3JvdXBfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3Nl
dF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTE9wdEdy
b3VwRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfbGFiZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTE9wdEdyb3VwRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X2xhYmVs
KFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfbGFiZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTE9wdEdyb3VwRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X2xhYmVs
KFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE9wdEdyb3VwRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jNDA2YzRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3JvdXBF
bGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudFByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxPcHRHcm91cEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIHdyYXBIVE1MT3B0R3JvdXBFbGVtZW50KFdlYkNvcmU6
OkhUTUxPcHRHcm91cEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqIGtp
dChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MT3B0R3JvdXBF
bGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
YzhjZmVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5jcHAKQEAg
LTAsMCArMSwzODAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1l
bnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX09QVElPTl9FTEVNRU5UKGtp
dChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30K
KworV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHdyYXBIVE1MT3B0aW9uRWxlbWVudChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9PUFRJT05fRUxFTUVOVChnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OX0VMRU1FTlQsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0
Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygq
Y29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRp
b24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb3B0
aW9uX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSog
aWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX29w
dGlvbl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOwor
ICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX29wdGlvbl9l
bGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZB
Q0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0RJU0FCTEVELAorICAgIFBS
T1BfRk9STSwKKyAgICBQUk9QX0xBQkVMLAorICAgIFBST1BfREVGQVVMVF9TRUxFQ1RFRCwKKyAg
ICBQUk9QX1NFTEVDVEVELAorICAgIFBST1BfVkFMVUUsCisgICAgUFJPUF9URVhULAorICAgIFBS
T1BfSU5ERVgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1l
bnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9w
dGlvbkVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OX0VMRU1FTlQob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9kaXNhYmxlZChzZWxm
LCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9MQUJFTDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9s
YWJlbChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0RFRkFVTFRfU0VMRUNURUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9v
cHRpb25fZWxlbWVudF9zZXRfZGVmYXVsdF9zZWxlY3RlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29s
ZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9zZWxlY3RlZChzZWxmLCBn
X3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF92YWx1
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZiA9IFdFQktJVF9E
T01fSFRNTF9PUFRJT05fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk06CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9mb3Jt
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRf
Z2V0X2xhYmVsKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRf
U0VMRUNURUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZGVmYXVsdF9zZWxlY3RlZChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9zZWxlY3RlZChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dl
dF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URVhUOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2Vs
ZW1lbnRfZ2V0X3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5E
RVg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRp
b25fZWxlbWVudF9nZXRfaW5kZXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTE9w
dGlvbkVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJU0FCTEVE
LAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkaXNhYmxlZCIs
CisgICAgICAgICAgICAiSFRNTE9wdGlvbkVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE9wdGlvbkVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudDpmb3JtIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1MT3B0aW9u
RWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxF
TUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0xBQkVMLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImxhYmVsIiwKKyAgICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudDpsYWJlbCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9wdGlvbkVsZW1lbnQ6bGFiZWwiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfREVGQVVMVF9TRUxFQ1RFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAiZGVmYXVsdC1zZWxlY3RlZCIsCisgICAgICAgICAgICAiSFRNTE9w
dGlvbkVsZW1lbnQ6ZGVmYXVsdC1zZWxlY3RlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Ym9vbGVhbiBIVE1MT3B0aW9uRWxlbWVudDpkZWZhdWx0LXNlbGVjdGVkIiwKKyAgICAgICAgICAg
IEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1NFTEVDVEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJzZWxlY3RlZCIsCisgICAgICAgICAgICAiSFRNTE9wdGlvbkVsZW1lbnQ6c2VsZWN0
ZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE9wdGlvbkVsZW1lbnQ6
c2VsZWN0ZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsdWUiLAorICAgICAgICAgICAgIkhUTUxPcHRp
b25FbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT3B0
aW9uRWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9URVhULAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRleHQiLAorICAgICAgICAgICAgIkhUTUxP
cHRpb25FbGVtZW50OnRleHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTE9w
dGlvbkVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOREVYLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJpbmRleCIsCisgICAgICAgICAgICAiSFRNTE9w
dGlvbkVsZW1lbnQ6aW5kZXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBIVE1MT3B0
aW9uRWxlbWVudDppbmRleCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRE
T01IVE1MT3B0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX09QVElPTl9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlv
bkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmRpc2FibGVkQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIsIHZhbHVlKTsKK30KKworV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0
X2Zvcm0oV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmZvcm0oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9sYWJlbChX
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0
aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5sYWJlbCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfbGFiZWwoV2Vi
S2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRMYWJlbChjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9n
ZXRfZGVmYXVsdF9zZWxlY3RlZChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNlbGVjdGVkQXR0cik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0
X2RlZmF1bHRfc2VsZWN0ZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChz
ZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNlbGVjdGVkQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uX2VsZW1lbnRfZ2V0X3NlbGVjdGVkKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2Vs
ZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zZWxlY3RlZCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVt
ZW50X3NldF9zZWxlY3RlZChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZiwgZ2Jvb2xl
YW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTZWxlY3RlZCh2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnZhbHVlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01IVE1MT3B0aW9uRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldFZhbHVlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfdGV4dChXZWJLaXRET01IVE1M
T3B0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09Q
VElPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25n
IHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfaW5kZXgoV2ViS2l0RE9NSFRNTE9w
dGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJ
T05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+aW5kZXgo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODRjNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlv
bkVsZW1lbnQuaApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9w
dGlvbkVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudF9oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05fRUxFTUVO
VCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09QVElPTl9FTEVNRU5UKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX09Q
VElPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSFRNTF9PUFRJT05fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05fRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19I
VE1MX09QVElPTl9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX09QVElPTl9FTEVNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX09QVElPTl9FTEVN
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09QVElPTl9FTEVNRU5UX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9I
VE1MX09QVElPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudENsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVs
ZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MT3B0aW9u
RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVu
dF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1l
bnRfZ2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgor
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1M
T3B0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9l
bGVtZW50X3NldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxl
bWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxP
cHRpb25FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9mb3JtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9N
SFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRp
b25fZWxlbWVudF9nZXRfbGFiZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9sYWJlbChXZWJLaXRET01IVE1MT3B0
aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVt
ZW50X3NldF9sYWJlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2xhYmVsKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9v
cHRpb25fZWxlbWVudF9nZXRfZGVmYXVsdF9zZWxlY3RlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZGVm
YXVsdF9zZWxlY3RlZChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9kZWZhdWx0X3NlbGVjdGVkOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25f
ZWxlbWVudF9zZXRfZGVmYXVsdF9zZWxlY3RlZChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCog
c2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25f
ZWxlbWVudF9nZXRfc2VsZWN0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3NlbGVjdGVkKFdlYktpdERP
TUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0
aW9uX2VsZW1lbnRfc2V0X3NlbGVjdGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfc2VsZWN0ZWQoV2ViS2l0RE9N
SFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxPcHRpb25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfdmFsdWUo
V2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9vcHRpb25fZWxlbWVudF9zZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE9wdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01I
VE1MT3B0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF90ZXh0
KFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2luZGV4OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQ
SSBnbG9uZword2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9pbmRleChXZWJLaXRE
T01IVE1MT3B0aW9uRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg1OTUyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50UHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxPcHRpb25FbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHdyYXBIVE1MT3B0aW9uRWxlbWVudChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCopOworV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQq
IGtpdChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCopOworV2ViQ29yZTo6SFRNTE9wdGlvbkVs
ZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41OTA1MGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24u
Y3BwCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0
aW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5v
ZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxl
Y3Rpb25VbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24qIGtpdChXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIG9iaikKK3sKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX09QVElPTlNfQ09MTEVDVElPTihraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxP
cHRpb25zQ29sbGVjdGlvbiogY29yZShXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
T3B0aW9uc0NvbGxlY3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVj
dCkgOiAwOworfQorCitXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHdyYXBIVE1MT3B0
aW9uc0NvbGxlY3Rpb24oV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1M
X09QVElPTlNfQ09MTEVDVElPTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BU
SU9OU19DT0xMRUNUSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUhUTUxP
cHRpb25zQ29sbGVjdGlvbiwgd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbiwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTikKKworZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfU0VMRUNURURfSU5ERVgsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX3NldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZiA9
IFdFQktJVF9ET01fSFRNTF9PUFRJT05TX0NPTExFQ1RJT04ob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9JTkRFWDoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9zZXRfc2VsZWN0ZWRfaW5kZXgoc2Vs
ZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU0VMRUNURURfSU5ERVg6CisgICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X3Nl
bGVjdGVkX2luZGV4KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xFTkdU
SDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRp
b25zX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2NsYXNzX2luaXQoV2ViS2l0
RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19j
b2xsZWN0aW9uX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NFTEVDVEVEX0lOREVYLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygK
KyAgICAgICAgICAgICJzZWxlY3RlZC1pbmRleCIsCisgICAgICAgICAgICAiSFRNTE9wdGlvbnND
b2xsZWN0aW9uOnNlbGVjdGVkLWluZGV4IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25n
IEhUTUxPcHRpb25zQ29sbGVjdGlvbjpzZWxlY3RlZC1pbmRleCIsCisgICAgICAgICAgICBHX01J
TkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9u
ZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkhUTUxPcHRpb25zQ29sbGVj
dGlvbjpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgSFRNTE9wdGlvbnND
b2xsZWN0aW9uOmxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9pbml0KFdlYktpdERPTUhUTUxPcHRpb25zQ29s
bGVjdGlvbiogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK1dl
YktpdERPTU5vZGUqIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fbmFtZWRfaXRl
bShXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1l
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKHNl
bGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPm5hbWVkSXRlbShjb252ZXJ0ZWROYW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2Nv
bGxlY3Rpb25fYWRkKFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZiwgV2ViS2l0
RE9NSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiwgZ3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVO
VChvcHRpb24pKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAg
ICBXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGNvbnZlcnRlZE9wdGlvbiA9IFdl
YktpdDo6Y29yZShvcHRpb24pOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPmFkZCgqY29udmVydGVkT3B0aW9uLCBpbmRleCwgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX3JlbW92ZShXZWJLaXRET01IVE1M
T3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYsIGdsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04oc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxP
cHRpb25zQ29sbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5y
ZW1vdmUoaW5kZXgpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0
aW9uX2dldF9zZWxlY3RlZF9pbmRleChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04o
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zZWxlY3RlZEluZGV4
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
c19jb2xsZWN0aW9uX3NldF9zZWxlY3RlZF9pbmRleChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxl
Y3Rpb24qIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9P
UFRJT05TX0NPTExFQ1RJT04oc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVj
dGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTZWxlY3RlZElu
ZGV4KHZhbHVlKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rp
b25fZ2V0X2xlbmd0aChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04oc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWFhYjI2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxE
SU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUg
aW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uX2gK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUhUTUxDb2xsZWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX09QVElP
TlNfQ09MTEVDVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0
aW9uX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9PUFRJT05TX0NPTExFQ1RJ
T04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OLCBXZWJLaXRET01IVE1MT3B0aW9u
c0NvbGxlY3Rpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9O
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX09QVElPTlNfQ09MTEVDVElPTiwgV2ViS2l0RE9NSFRNTE9wdGlvbnND
b2xsZWN0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05TX0NPTExF
Q1RJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX09QVElPTlNfQ09MTEVDVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJ
T04pKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX09QVElPTlNfQ09MTEVDVElPTiwgV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9u
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiB7CisgICAg
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24gcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb25DbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fbmFtZWRfaXRlbToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24KKyAqIEBuYW1lOiBBICNnY2hhcgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0
aW9uX25hbWVkX2l0ZW0oV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVj
dGlvbl9nZXRfc2VsZWN0ZWRfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBn
bG9uZword2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfc2VsZWN0ZWRfaW5k
ZXgoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX3NldF9zZWxlY3RlZF9pbmRleDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24KKyAqIEB2YWx1ZTogQSAjZ2xv
bmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29s
bGVjdGlvbl9zZXRfc2VsZWN0ZWRfaW5kZXgoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9u
KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbnNf
Y29sbGVjdGlvbl9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25z
Q29sbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1
bG9uZword2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKFdlYktp
dERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2
YXRlLmgKc2ltaWxhcml0eSBpbmRleCA2NiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVy
UHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGUuaApp
bmRleCBlZWY4Y2JmLi5lZWI2NGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2YXRlLmgKQEAgLTE4LDE2
ICsxOCwxNiBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01IVE1M
T3B0aW9uc0NvbGxlY3Rpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE9wdGlvbnND
b2xsZWN0aW9uUHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIK
LSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewotV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB3cmFwVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciopOwotV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKiBraXQoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKik7Ci1X
ZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNvcmUoV2ViS2l0RE9NVGVzdEN1c3RvbU5h
bWVkR2V0dGVyKik7CitXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHdyYXBIVE1MT3B0
aW9uc0NvbGxlY3Rpb24oV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKik7CitXZWJLaXRE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGtpdChXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rp
b24qKTsKK1dlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbiogY29yZShXZWJLaXRET01IVE1M
T3B0aW9uc0NvbGxlY3Rpb24qKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyog
V2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxPcHRpb25zQ29sbGVjdGlvblVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVj
dGlvblVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlMzZk
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uVW5zdGFibGUu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblVuc3RhYmxlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uVW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X29wdGlvbnNfY29sbGVjdGlvbl9hZGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uCisgKiBAb3B0aW9uOiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAor
ICogQGluZGV4OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
c19jb2xsZWN0aW9uX2FkZChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYsIFdl
YktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24sIGd1bG9uZyBpbmRleCwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fcmVt
b3ZlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbgorICogQGlu
ZGV4OiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX3JlbW92ZShXZWJLaXRE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYsIGdsb25nIGluZGV4KTsKKworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYg
LyogV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uVW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQ3NzI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAKQEAgLTAsMCArMSwx
NzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudC5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
UGFyYWdyYXBoRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfUEFS
QUdSQVBIX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9
CisKK1dlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxQYXJh
Z3JhcGhFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVu
dCogd3JhcEhUTUxQYXJhZ3JhcGhFbGVtZW50KFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQp
OworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29y
ZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MUGFyYWdyYXBoRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZl
bnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2Rl
LCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJD
b3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9w
YXJhZ3JhcGhfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRf
ZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFk
ZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50LCB3
ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VM
RU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VU
LCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfQUxJR04sCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYWdy
YXBoX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfUEFSQUdSQVBI
X0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3Nl
dF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfZ2V0
X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9wYXJhZ3JhcGhfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVt
ZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfc2V0X3Byb3BlcnR5
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3BhcmFn
cmFwaF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAgICAg
ICAgICAiSFRNTFBhcmFncmFwaEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxQYXJhZ3JhcGhFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxQYXJh
Z3JhcGhFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfYWxpZ24oV2Vi
S2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TFBhcmFncmFwaEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3NldF9h
bGlnbihXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFBhcmFn
cmFwaEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjph
bGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFy
YWdyYXBoRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MjEwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxQYXJhZ3JhcGhFbGVtZW50LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYm
ICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtp
dGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MUGFyYWdy
YXBoRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9QQVJBR1JBUEhfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfcGFyYWdy
YXBoX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1BBUkFHUkFQ
SF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5ULCBXZWJLaXRET01IVE1M
UGFyYWdyYXBoRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxF
TUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFBhcmFn
cmFwaEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9F
TEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9I
VE1MX1BBUkFHUkFQSF9FTEVNRU5ULCBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudENsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCB7CisgICAgV2ViS2l0
RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01I
VE1MUGFyYWdyYXBoRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9w
YXJhZ3JhcGhfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfcGFyYWdyYXBoX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxQYXJhZ3JhcGhFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfYWxpZ24o
V2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3NldF9hbGln
bihXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVt
ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MUGFyYWdyYXBoRWxlbWVudFByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYWdy
YXBoRWxlbWVudFByaXZhdGUuaAppbmRleCAyMzM3NjBkLi41ODhmZDlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50
UHJpdmF0ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0
ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZV9oCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50UHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBhcmFncmFwaEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciogd3JhcFRlc3RO
YW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKik7Ci1XZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9y
Kik7Ci1XZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogY29yZShXZWJLaXRET01UZXN0TmFt
ZWRDb25zdHJ1Y3RvciopOworV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHdyYXBIVE1M
UGFyYWdyYXBoRWxlbWVudChXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCopOworV2ViS2l0
RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVu
dCopOworV2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFBh
cmFncmFwaEVsZW1lbnQqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRE
T01IVE1MUGFyYWdyYXBoRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
UGFyYW1FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1YmJiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFBhcmFtRWxlbWVudC5jcHAKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MUGFyYW1FbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4K
KyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTFBhcmFtRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxQYXJhbUVsZW1l
bnQqIGtpdChXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2Rl
Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxQYXJhbUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCog
d3JhcEhUTUxQYXJhbUVsZW1lbnQoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudCogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRN
TF9QQVJBTV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBTV9F
TEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3BhcmFt
X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2Vi
S2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVu
dCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRj
aEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3Bh
cmFtX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFBhcmFtRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50
VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtp
dF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
aHRtbF9wYXJhbV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCwgd2Via2l0X2RvbV9odG1s
X3BhcmFtX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5U
X0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKKyAg
ICBQUk9QX1RZUEUsCisgICAgUFJPUF9WQUxVRSwKKyAgICBQUk9QX1ZBTFVFX1RZUEUsCit9Owor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxm
ID0gV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfcGFyYW1fZWxlbWVudF9zZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9wYXJhbV9lbGVtZW50X3NldF90eXBlX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3ZhbHVlKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUVf
VFlQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3ZhbHVlX3R5
cGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX1BBUkFNX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfdHlwZV9hdHRyKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfdmFs
dWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUVfVFlQRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3BhcmFtX2Vs
ZW1lbnRfZ2V0X3ZhbHVlX3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MUGFy
YW1FbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfcHJvcGVy
dHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfcGFy
YW1fZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAg
ICJIVE1MUGFyYW1FbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxQYXJhbUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAg
IkhUTUxQYXJhbUVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTFBhcmFtRWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZhbHVlIiwKKyAgICAgICAgICAg
ICJIVE1MUGFyYW1FbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MUGFyYW1FbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVFX1RZUEUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsdWUtdHlwZSIs
CisgICAgICAgICAgICAiSFRNTFBhcmFtRWxlbWVudDp2YWx1ZS10eXBlIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MUGFyYW1FbGVtZW50OnZhbHVlLXR5cGUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfaW5pdChXZWJLaXRET01I
VE1MUGFyYW1FbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF9uYW1lKFdlYktp
dERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9QQVJBTV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYW1FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfbmFtZShX
ZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3R5
cGVfYXR0cihXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFBhcmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF90eXBlX2F0
dHIoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dl
dF92YWx1ZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFBhcmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsdWVBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfdmFsdWUo
V2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsdWVBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRf
dmFsdWVfdHlwZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTFBhcmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsdWV0eXBlQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0
X3ZhbHVlX3R5cGUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYW1F
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsdWV0
eXBlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJh
bUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmNiMzJmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJh
bUVsZW1lbnQuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFBh
cmFtRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQU1fRUxFTUVOVCAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBTV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX1BBUkFNX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQU1fRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTFBhcmFtRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1f
RUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBTV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX1BBUkFNX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQU1fRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFNX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTFBhcmFtRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50Q2xhc3MgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X25hbWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9n
ZXRfbmFtZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MUGFyYW1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERP
TUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF90
eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MUGFyYW1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF90eXBlX2F0
dHIoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfdmFsdWU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVu
dF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxQYXJhbUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3ZhbHVlKFdl
YktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3ZhbHVlX3R5cGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVu
dF9nZXRfdmFsdWVfdHlwZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfdmFsdWVfdHlwZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3Nl
dF92YWx1ZV90eXBlKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MUGFyYW1F
bGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFBhcmFtRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lMTYzMTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYW1FbGVt
ZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudFByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxQYXJhbUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFBh
cmFtRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxQYXJhbUVs
ZW1lbnQqIHdyYXBIVE1MUGFyYW1FbGVtZW50KFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqKTsK
K1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50
Kik7CitXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxQYXJhbUVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TFBhcmFtRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxQcmVFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wNzEyZTRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVu
dC5jcHAKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MUHJlRWxlbWVudC5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxQcmVFbGVtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
UHJlRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1F
TlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6
OkhUTUxQcmVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFByZUVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01IVE1MUHJlRWxlbWVudCogd3JhcEhUTUxQcmVFbGVtZW50KFdlYkNvcmU6OkhUTUxQ
cmVFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1BSRV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9N
X1RZUEVfSFRNTF9QUkVfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9wcmVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlm
ICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFBy
ZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUHJlRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9wcmVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MUHJlRWxlbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MUHJlRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRf
ZG9tX2h0bWxfcHJlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVu
ZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9w
cmVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYktpdERPTUhUTUxQcmVFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1l
bnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfV0lEVEgsCisgICAgUFJPUF9XUkFQ
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX1BSRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9wcmVfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV1JBUDoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX3ByZV9lbGVtZW50X3NldF93cmFwKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9wcmVfZWxl
bWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MUHJlRWxl
bWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVChvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3Zh
bHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3dpZHRo
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dSQVA6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9nZXRf
d3JhcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
cHJlX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MUHJlRWxlbWVudENsYXNzKiByZXF1
ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MUHJlRWxlbWVudDp3aWR0aCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MUHJlRWxlbWVudDp3aWR0aCIsCisg
ICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XUkFQLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3cmFwIiwKKyAgICAgICAgICAgICJIVE1M
UHJlRWxlbWVudDp3cmFwIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxQ
cmVFbGVtZW50OndyYXAiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3By
ZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfcHJlX2Vs
ZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUFJFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxQcmVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
d2lkdGhBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9wcmVfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQqIHNlbGYsIGds
b25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QUkVfRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp3
aWR0aEF0dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ByZV9lbGVt
ZW50X2dldF93cmFwKFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfUFJFX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MUHJlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6d3JhcEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF93cmFwKFdlYktpdERPTUhUTUxQcmVF
bGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfUFJFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjp3cmFwQXR0ciwgdmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxQcmVFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQcmVFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4YjZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFByZUVsZW1lbnQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1M
UHJlRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxQcmVFbGVtZW50X2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX1BSRV9FTEVNRU5UICAgICAg
ICAgICAgKHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUFJFX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxQcmVFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1BSRV9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9IVE1MX1BSRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MUHJlRWxlbWVudENs
YXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfUFJFX0VMRU1FTlQob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
UFJFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfUFJFX0VMRU1FTlRfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfUFJFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfUFJFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxQcmVFbGVtZW50Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxQcmVFbGVtZW50IHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxQ
cmVFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50
X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9n
ZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxf
cHJlX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3dpZHRoOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxQcmVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9zZXRfd2lkdGgo
V2ViS2l0RE9NSFRNTFByZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3dyYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFByZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3dyYXAoV2Vi
S2l0RE9NSFRNTFByZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9w
cmVfZWxlbWVudF9zZXRfd3JhcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUHJlRWxlbWVu
dAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3dyYXAoV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxQcmVFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxQcmVFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjAyNjJhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQ
cmVFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTFByZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFBy
ZUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MUHJlRWxlbWVu
dCogd3JhcEhUTUxQcmVFbGVtZW50KFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50Kik7CitXZWJLaXRE
T01IVE1MUHJlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50Kik7CitXZWJDb3Jl
OjpIVE1MUHJlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MUHJlRWxlbWVudCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MUHJlRWxlbWVudFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01IVE1MUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQcml2YXRlLmNwcApzaW1pbGFyaXR5IGlu
ZGV4IDc2JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUhUTUxQcml2YXRlLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJpdmF0ZS5jcHAKaW5kZXgg
M2Y0OTI5Ni4uYTJlYTg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01IVE1MUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJpdmF0ZS5jcHAK
QEAgLTMxLDY0ICszMSw2NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktp
dERPTUhUTUxQcml2YXRlLmgiCiAKLSNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTEF1ZGlvRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MQmFzZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MQm9keUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MQnV0dG9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxDYW52
YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERMaXN0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxEaXJlY3RvcnlFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxFbWJlZEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZvbnRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSFJF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEhl
YWRpbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SFRNTElGcmFtZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxLZXlnZW5FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTExJRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMaW5rRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1hcnF1
ZWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1lbnVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TE1ldGFFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1vZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TE9iamVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxQYXJhbUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MUHJlRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxRdW90ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MU2Ny
aXB0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SFRNTFN0eWxlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVD
b2xFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxUYWJsZVJvd0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGl0bGVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxW
aWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxBbmNob3JFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MQXBwbGV0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTEFyZWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQXVkaW9FbGVtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQlJFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MQmFzZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCb2R5RWxlbWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTEJ1dHRvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxDYW52YXNFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRExpc3RFbGVtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRGlyZWN0b3J5RWxlbWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTERpdkVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxFbGVtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRW1iZWRFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MRmllbGRTZXRFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9udEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEZyYW1lRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZyYW1l
U2V0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEhSRWxlbWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTEhlYWRFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSGVh
ZGluZ0VsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxIdG1sRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTElGcmFtZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxJbWFnZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxJbnB1dEVsZW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxLZXlnZW5FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MTElFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTGFiZWxFbGVtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTGVnZW5kRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTExpbmtFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWFwRWxlbWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1hcnF1ZWVFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MTWVudUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZXRhRWxlbWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1vZEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9iamVjdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxPcHRHcm91cEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxPcHRpb25FbGVt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MUGFyYWdyYXBoRWxlbWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTFBhcmFtRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBy
ZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxRdW90ZUVsZW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxTY3JpcHRFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
U2VsZWN0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFN0eWxlRWxlbWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFi
bGVDb2xFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFibGVFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFibGVSb3dFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRleHRB
cmVhRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRpdGxlRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TFZpZGVvRWxlbWVudC5oPgogI2luY2x1ZGUgIldlYktpdERPTUhUTUxBbmNob3JFbGVtZW50UHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYktpdERPTUhUTUxBcmVhRWxlbWVudFByaXZhdGUuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NSFRNTFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01IVE1MUHJpdmF0ZS5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxQcml2YXRlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjczNzJlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxRdW90ZUVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFF1b3RlRWxl
bWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxRdW90
ZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50KiBraXQoV2Vi
Q29yZTo6SFRNTFF1b3RlRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfUVVPVEVfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsK
K30KKworV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MUXVvdGVF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTFF1b3RlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHdyYXBIVE1MUXVv
dGVFbGVtZW50KFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAg
QVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfUVVPVEVfRUxF
TUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfUVVPVEVfRUxFTUVOVCwgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50
KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVu
dCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJp
bmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBk
ZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9xdW90ZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9v
bGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVj
dEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNl
KiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxf
cXVvdGVfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOwor
ICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfcXVvdGVf
ZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9D
T0RFKFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVt
ZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0Uo
V0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NJVEUsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9IVE1MX1FVT1RFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9DSVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfcXVvdGVf
ZWxlbWVudF9zZXRfY2l0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0hUTUxfUVVPVEVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NJVEU6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X2dldF9jaXRlKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9xdW90ZV9l
bGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudENsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0NJVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiY2l0ZSIsCisgICAgICAgICAgICAiSFRNTFF1b3RlRWxlbWVudDpjaXRl
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MUXVvdGVFbGVtZW50OmNpdGUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfaW5pdChX
ZWJLaXRET01IVE1MUXVvdGVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShy
ZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X2dldF9j
aXRlKFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9RVU9URV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
UXVvdGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmNpdGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9zZXRfY2l0ZShXZWJLaXRET01IVE1MUXVvdGVFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1FVT1RFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjaXRlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTc4ODEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVf
XykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20v
d2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRl
ZiBXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFF1b3Rl
RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9RVU9URV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9RVU9URV9FTEVNRU5UKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9IVE1MX1FVT1RFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfUVVPVEVfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9RVU9URV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfSFRNTF9RVU9URV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1FVT1RFX0VMRU1FTlQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfUVVPVEVfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9RVU9URV9F
TEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1FVT1RFX0VMRU1FTlRfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfUVVPVEVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudENsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxl
bWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxRdW90ZUVs
ZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9n
ZXRfY2l0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9xdW90ZV9lbGVtZW50X2dldF9jaXRlKFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X3NldF9jaXRlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRf
c2V0X2NpdGUoV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxRdW90ZUVsZW1l
bnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50UHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MUXVvdGVFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjEyN2I0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxRdW90ZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TFF1b3RlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MUXVvdGVF
bGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVu
dCogd3JhcEhUTUxRdW90ZUVsZW1lbnQoV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCopOworV2Vi
S2l0RE9NSFRNTFF1b3RlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVu
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MUXVv
dGVFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjJiMjNiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50LmNwcApAQCAtMCwwICsxLDQ5MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50VW5zdGFibGUuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIGtpdChXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
U0NSSVBUX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9
CisKK1dlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogd3JhcEhUTUxT
Y3JpcHRFbGVtZW50KFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1NDUklQ
VF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9TQ1JJUFRfRUxFTUVO
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxl
bWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRE
T01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBj
b3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hF
dmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9zY3Jp
cHRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01F
dmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3
ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0df
REVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LCB3ZWJraXRf
ZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
VEVYVCwKKyAgICBQUk9QX0hUTUxfRk9SLAorICAgIFBST1BfRVZFTlQsCisgICAgUFJPUF9DSEFS
U0VULAorICAgIFBST1BfQVNZTkMsCisgICAgUFJPUF9ERUZFUiwKKyAgICBQUk9QX1NSQywKKyAg
ICBQUk9QX1RZUEUsCisgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgUFJPUF9OT05DRSwKK307
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdGV4dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hUTUxfRk9SOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2h0bWxfZm9yKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVZF
TlQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfZXZlbnQoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DSEFSU0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0
X2NoYXJzZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9BU1lOQzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X3NldF9hc3luYyhzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZFUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X3NjcmlwdF9lbGVtZW50X3NldF9kZWZlcihzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfc3JjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF90eXBlX2F0dHIoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DUk9TU19P
UklHSU46CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfY3Jvc3Nf
b3JpZ2luKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTk9OQ0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxl
bWVudF9zZXRfbm9uY2Uoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0hUTUxfU0NSSVBUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3RleHQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFRNTF9GT1I6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9nZXRfaHRtbF9mb3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVZF
TlQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9z
Y3JpcHRfZWxlbWVudF9nZXRfZXZlbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ0hBUlNFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9jaGFyc2V0KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0FTWU5DOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2FzeW5jKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkVSOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2RlZmVyKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9z
cmMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50
X2dldF90eXBlX2F0dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1JP
U1NfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9OT05DRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9ub25jZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
Y2xhc3NfaW5pdChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9o
dG1sX3NjcmlwdF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ0ZXh0IiwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudDp0ZXh0IiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MU2NyaXB0RWxlbWVudDp0ZXh0IiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0hUTUxfRk9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImh0bWwtZm9yIiwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVu
dDpodG1sLWZvciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNjcmlwdEVs
ZW1lbnQ6aHRtbC1mb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRVZFTlQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZXZlbnQiLAorICAgICAgICAgICAgIkhUTUxT
Y3JpcHRFbGVtZW50OmV2ZW50IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
U2NyaXB0RWxlbWVudDpldmVudCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSEFSU0VULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNoYXJzZXQiLAorICAgICAgICAg
ICAgIkhUTUxTY3JpcHRFbGVtZW50OmNoYXJzZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxTY3JpcHRFbGVtZW50OmNoYXJzZXQiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVNZ
TkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImFzeW5jIiwK
KyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudDphc3luYyIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnYm9vbGVhbiBIVE1MU2NyaXB0RWxlbWVudDphc3luYyIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9ERUZFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAiZGVmZXIiLAorICAgICAgICAgICAgIkhUTUxTY3JpcHRFbGVtZW50OmRlZmVyIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxTY3JpcHRFbGVtZW50OmRlZmVyIiwKKyAg
ICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1NSQywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJzcmMiLAorICAgICAgICAgICAgIkhUTUxTY3JpcHRFbGVtZW50OnNyYyIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNjcmlwdEVsZW1lbnQ6c3JjIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTFNjcmlwdEVsZW1lbnQ6dHlwZSIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNjcmlwdEVsZW1lbnQ6dHlwZSIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiY3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0
RWxlbWVudDpjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxTY3JpcHRFbGVtZW50OmNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OT05DRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJub25jZSIsCisgICAg
ICAgICAgICAiSFRNTFNjcmlwdEVsZW1lbnQ6bm9uY2UiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxTY3JpcHRFbGVtZW50Om5vbmNlIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxTY3JpcHRFbGVt
ZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfdGV4dChXZWJLaXRET01IVE1MU2Ny
aXB0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQ
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT50ZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF90ZXh0KFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VGV4dChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2h0bWxfZm9yKFdlYktpdERP
TUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfU0NSSVBUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpmb3JBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2h0bWxfZm9yKFdlYktpdERPTUhU
TUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZvckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfZXZlbnQoV2Vi
S2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlw
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmV2ZW50QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9ldmVudChXZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpldmVudEF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfY2hh
cnNldChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhcnNldEF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfY2hh
cnNldChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyc2V0QXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0
X2VsZW1lbnRfZ2V0X2FzeW5jKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5hc3luYygpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9hc3lu
YyhXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJD
b3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5zZXRBc3luYyh2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9zY3Jp
cHRfZWxlbWVudF9nZXRfZGVmZXIoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkZWZlckF0dHIpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9k
ZWZlcihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGVmZXJBdHRy
LCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0
X3NyYyhXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRET01IVE1MU2NyaXB0
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERP
TUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2Nyb3Nz
X29yaWdpbihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jcm9zc09yaWdpbigpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9zZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0Q3Jvc3NPcmlnaW4oY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9ub25jZShXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6bm9uY2VBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X25vbmNlKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1NDUklQVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6Om5vbmNlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4Mjc2ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuaApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0
ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9TQ1JJUFRfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfc2NyaXB0
X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1NDUklQVF9FTEVN
RU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9IVE1MX1NDUklQVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9TQ1JJUFRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRDbGFzcykKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1NDUklQ
VF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9IVE1MX1NDUklQVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1NDUklQ
VF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NDUklQVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MU2Ny
aXB0RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxl
bWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90ZXh0KFdlYktp
dERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfc2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlw
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF90ZXh0KFdlYktpdERPTUhUTUxTY3Jp
cHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfaHRtbF9mb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9odG1sX2Zv
cihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9odG1sX2ZvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2h0bWxfZm9yKFdl
YktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfZXZlbnQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50
X2dldF9ldmVudChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9ldmVudDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2V2ZW50
KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfY2hhcnNldDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfZ2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfZGVmZXI6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfZ2V0X2RlZmVyKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2RlZmVyOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9z
ZXRfZGVmZXIoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3NyYzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9zcmM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9zcmMo
V2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90eXBlX2F0dHI6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdHlwZV9hdHRyOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxl
bWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TFNjcmlwdEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwOTRiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFNjcmlwdEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFByaXZhdGVfaAorCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MU2NyaXB0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUhUTUxTY3JpcHRFbGVtZW50KiB3cmFwSFRNTFNjcmlwdEVsZW1lbnQoV2ViQ29yZTo6SFRN
TFNjcmlwdEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTFNjcmlwdEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNjcmlwdEVs
ZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDRh
MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50VW5zdGFibGUuaApA
QCAtMCwwICsxLDEwNyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTFNjcmlwdEVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfc2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9jaGFy
c2V0KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfYXN5bmM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Ym9vbGVhbgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9hc3luYyhXZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3Nj
cmlwdF9lbGVtZW50X3NldF9hc3luYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0
RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
c2V0X2FzeW5jKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9jcm9zc19v
cmlnaW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfY3Jvc3Nfb3Jp
Z2luKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfZ2V0X25vbmNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3Jp
cHRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfZ2V0X25vbmNlKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X25vbmNlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfbm9uY2UoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxT
Y3JpcHRFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yMzJlZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudC5jcHAKQEAgLTAsMCArMSw3NDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVO
VChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Cit9CisKK1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiB3cmFwSFRNTFNlbGVjdEVsZW1lbnQo
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfU0VMRUNUX0VMRU1FTlQoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1NFTEVDVF9FTEVNRU5ULCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVu
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdl
YktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2Fk
ZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
ICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRk
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X3NlbGVjdF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9v
bGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZh
Y2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5l
cjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BVVRPRk9DVVMsCisg
ICAgUFJPUF9ESVNBQkxFRCwKKyAgICBQUk9QX0ZPUk0sCisgICAgUFJPUF9NVUxUSVBMRSwKKyAg
ICBQUk9QX05BTUUsCisgICAgUFJPUF9SRVFVSVJFRCwKKyAgICBQUk9QX1NJWkUsCisgICAgUFJP
UF9UWVBFLAorICAgIFBST1BfT1BUSU9OUywKKyAgICBQUk9QX0xFTkdUSCwKKyAgICBQUk9QX1NF
TEVDVEVEX09QVElPTlMsCisgICAgUFJPUF9TRUxFQ1RFRF9JTkRFWCwKKyAgICBQUk9QX1ZBTFVF
LAorICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICBQUk9QX1ZBTElESVRZLAorICAgIFBST1Bf
VkFMSURBVElPTl9NRVNTQUdFLAorICAgIFBST1BfTEFCRUxTLAorICAgIFBST1BfQVVUT0NPTVBM
RVRFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3Nl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1NFTEVDVF9FTEVNRU5UKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQVVUT0ZPQ1VTOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhzZWxmLCBn
X3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9ESVNBQkxFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9k
aXNhYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9NVUxUSVBMRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVj
dF9lbGVtZW50X3NldF9tdWx0aXBsZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVFVSVJFRDoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9yZXF1aXJlZChzZWxmLCBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpF
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NpemUoc2VsZiwg
Z192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TEVOR1RIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2xlbmd0
aChzZWxmLCBnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU0VMRUNURURfSU5ERVg6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9zZXRfc2VsZWN0ZWRfaW5kZXgoc2VsZiwgZ192YWx1ZV9nZXRfbG9u
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfdmFsdWUoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09N
UExFVEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfYXV0b2Nv
bXBsZXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmID0gV0VC
S0lUX0RPTV9IVE1MX1NFTEVDVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQVVUT0ZPQ1VTOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2F1dG9mb2N1
cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X2dldF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9G
T1JNOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9nZXRfZm9ybShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9NVUxUSVBMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9tdWx0aXBsZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVRVUlSRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfcmVxdWly
ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRToKKyAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dl
dF9zaXplKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxl
bWVudF9nZXRfc2VsZWN0X3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfT1BUSU9OUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X29wdGlvbnMoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9sZW5ndGgoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURURfT1BUSU9OUzoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3Nl
bGVjdGVkX29wdGlvbnMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VM
RUNURURfSU5ERVg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfaW5kZXgoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsdWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lMTF9WQUxJREFURToKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dl
dF93aWxsX3ZhbGlkYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZB
TElESVRZOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsaWRpdHkoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVkFMSURBVElPTl9NRVNTQUdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25f
bWVzc2FnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQUJFTFM6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X2dldF9sYWJlbHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QVVUT0NPTVBMRVRFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2F1dG9jb21wbGV0ZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfY2xhc3Nf
aW5pdChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfQVVUT0ZPQ1VTLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJhdXRvZm9jdXMiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OmF1
dG9mb2N1cyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MU2VsZWN0RWxl
bWVudDphdXRvZm9jdXMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAg
ICAgICJIVE1MU2VsZWN0RWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnYm9vbGVhbiBIVE1MU2VsZWN0RWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9GT1JNLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZv
cm0iLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OmZvcm0iLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxTZWxlY3RFbGVtZW50OmZv
cm0iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTVVM
VElQTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIm11bHRp
cGxlIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudDptdWx0aXBsZSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MU2VsZWN0RWxlbWVudDptdWx0aXBsZSIsCisg
ICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50Om5hbWUi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxTZWxlY3RFbGVtZW50Om5hbWUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfUkVRVUlSRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgInJlcXVpcmVkIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxl
bWVudDpyZXF1aXJlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MU2Vs
ZWN0RWxlbWVudDpyZXF1aXJlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSVpFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzaXplIiwKKyAgICAgICAgICAgICJI
VE1MU2VsZWN0RWxlbWVudDpzaXplIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhU
TUxTZWxlY3RFbGVtZW50OnNpemUiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0
eXBlIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxTZWxlY3RFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9PUFRJT05TLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
Im9wdGlvbnMiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50Om9wdGlvbnMiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIEhUTUxT
ZWxlY3RFbGVtZW50Om9wdGlvbnMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
T1BUSU9OU19DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmco
CisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudDps
ZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxTZWxlY3RFbGVtZW50
Omxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NFTEVDVEVEX09QVElP
TlMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic2VsZWN0ZWQt
b3B0aW9ucyIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6c2VsZWN0ZWQtb3B0aW9u
cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBIVE1M
U2VsZWN0RWxlbWVudDpzZWxlY3RlZC1vcHRpb25zIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxFQ1RFRF9JTkRFWCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCisgICAgICAgICAgICAic2VsZWN0ZWQtaW5kZXgiLAorICAgICAgICAgICAgIkhU
TUxTZWxlY3RFbGVtZW50OnNlbGVjdGVkLWluZGV4IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdsb25nIEhUTUxTZWxlY3RFbGVtZW50OnNlbGVjdGVkLWluZGV4IiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgInZhbHVlIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVu
dDp2YWx1ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNlbGVjdEVsZW1l
bnQ6dmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2lsbC12YWxpZGF0ZSIsCisgICAgICAg
ICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIEhUTUxTZWxlY3RFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9WQUxJRElUWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJ2YWxpZGl0eSIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6dmFs
aWRpdHkiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBI
VE1MU2VsZWN0RWxlbWVudDp2YWxpZGl0eSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
VkFMSURJVFlfU1RBVEUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAidmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAg
ICJIVE1MU2VsZWN0RWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnY2hhciogSFRNTFNlbGVjdEVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTEFCRUxTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgImxhYmVscyIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6bGFiZWxz
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZUxpc3QqIEhUTUxTZWxlY3RF
bGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNULAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QVVUT0NPTVBMRVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6YXV0b2NvbXBs
ZXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MU2VsZWN0RWxlbWVudDph
dXRvY29tcGxldGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfaXRlbShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwg
Z3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X25hbWVkX2l0ZW0oV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KG5hbWUsIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5uYW1lZEl0ZW0oY29udmVydGVkTmFtZSkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfYWRkKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxmLCBXZWJLaXRET01IVE1MRWxlbWVudCogZWxlbWVudCwgV2ViS2l0RE9NSFRNTEVsZW1lbnQq
IGJlZm9yZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NF
TEVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9FTEVNRU5UKGVsZW1lbnQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9FTEVNRU5UKGJlZm9yZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBjb252ZXJ0ZWRFbGVtZW50
ID0gV2ViS2l0Ojpjb3JlKGVsZW1lbnQpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBjb252
ZXJ0ZWRCZWZvcmUgPSBXZWJLaXQ6OmNvcmUoYmVmb3JlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5hZGQoKmNvbnZlcnRlZEVsZW1lbnQsIGNvbnZlcnRl
ZEJlZm9yZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfcmVtb3ZlKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikpOworICAg
IFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnJlbW92ZUJ5SW5kZXgoaW5kZXgpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfY2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNoZWNr
VmFsaWRpdHkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGVycm9y
KTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFcnJvciA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChlcnJvcik7CisgICAgaXRlbS0+c2V0Q3VzdG9tVmFsaWRpdHkoY29udmVydGVkRXJyb3Ip
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2F1dG9m
b2N1cyhXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1c0F0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9hdXRvZm9jdXMoV2Vi
S2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1c0F0dHIsIHZh
bHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9k
aXNhYmxlZChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIsIHZh
bHVlKTsKK30KKworV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmZvcm0oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X211bHRpcGxlKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tdWx0aXBsZSgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9t
dWx0aXBsZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRNdWx0aXBsZSh2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3JlcXVpcmVkKFdlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVxdWlyZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlcXVpcmVkQXR0ciwgdmFsdWUpOworfQorCitnbG9u
ZyB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxF
Q1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2l6ZSgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X3NldF9zaXplKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnbG9uZyB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikp
OworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPnNldFNpemUodmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3RfdHlwZShXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUhUTUxP
cHRpb25zQ29sbGVjdGlvbiogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9vcHRp
b25zKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5vcHRpb25zKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRf
bGVuZ3RoKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9u
ZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbGVuZ3RoKFdlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0TGVuZ3RoKHZhbHVlLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitX
ZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dl
dF9zZWxlY3RlZF9vcHRpb25zKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnNlbGVjdGVkT3B0aW9ucygpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfaW5kZXgoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2VsZWN0ZWRJbmRleCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X3NldF9zZWxlY3RlZF9pbmRleChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwg
Z2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5U
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTZWxlY3RlZEluZGV4KHZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9T
RUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VmFsdWUoY29udmVydGVkVmFsdWUpOwor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3dpbGxfdmFs
aWRhdGUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPndpbGxWYWxpZGF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1dlYktpdERPTVZhbGlkaXR5U3RhdGUqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxl
bWVudF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT52YWxpZGl0eSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52
YWxpZGF0aW9uTWVzc2FnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01O
b2RlTGlzdCogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9sYWJlbHMoV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bGFiZWxzKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
U0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF1dG9jb21wbGV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRl
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXV0b2NvbXBs
ZXRlKGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNlOTQ1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50LmgKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlM
RElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0VMRUNUX0VMRU1FTlQg
ICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9TRUxF
Q1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfU0VMRUNUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0VMRUNUX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9TRUxFQ1RfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9TRUxFQ1RfRUxFTUVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9TRUxFQ1RfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVOVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9TRUxFQ1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRDbGFzcykpCisKK3N0
cnVjdCBfV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRf
Z2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEBpbmRl
eDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9pdGVtKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBndWxv
bmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9uYW1l
ZF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAbmFt
ZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERP
TU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X25hbWVkX2l0ZW0oV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfYWRkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBA
ZWxlbWVudDogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEBiZWZvcmU6IEEgI1dlYktpdERP
TUhUTUxFbGVtZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2FkZChXZWJLaXRET01IVE1MU2VsZWN0
RWxlbWVudCogc2VsZiwgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGVsZW1lbnQsIFdlYktpdERPTUhU
TUxFbGVtZW50KiBiZWZvcmUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfcmVtb3ZlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50CisgKiBAaW5kZXg6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9yZW1vdmUoV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYsIGdsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2F1dG9mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfYXV0b2Zv
Y3VzKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2F1dG9mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2F1dG9m
b2N1cyhXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfZGlzYWJsZWQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2Rpc2FibGVk
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYs
IGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfZ2V0X2Zvcm06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVu
dAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCoKK3dlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9tdWx0
aXBsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbXVsdGlwbGUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRf
bXVsdGlwbGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X3NldF9tdWx0aXBsZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVj
dF9lbGVtZW50X2dldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zaXplKFdlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRf
c2V0X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3NlbGVjdF9lbGVtZW50X3NldF9zaXplKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxm
LCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF9zZWxlY3RfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdF90eXBlKFdlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X29wdGlvbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxPcHRp
b25zQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVj
dGlvbioKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfb3B0aW9ucyhXZWJLaXRE
T01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxv
bmcKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbGVuZ3RoKFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0
X2VsZW1lbnRfc2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudAorICogQHZhbHVlOiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2xlbmd0
aChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlLCBHRXJyb3Iq
KiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9z
ZWxlY3RlZF9pbmRleDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfaW5kZXgoV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxl
bWVudF9zZXRfc2VsZWN0ZWRfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9zZWxlY3RlZF9pbmRleChXZWJLaXRE
T01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF92YWx1ZShX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X3NldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
U2VsZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxl
bWVudF9nZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wYTg2YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFBy
aXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxTZWxlY3RFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnQqIHdyYXBIVE1MU2VsZWN0RWxlbWVudChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCop
OworV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudCopOworV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFVuc3RhYmxlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxOWExMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMTQxIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9E
RUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9jaGVja192YWxp
ZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfY2hlY2tfdmFs
aWRpdHkoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAZXJyb3I6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfcmVxdWlyZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9yZXF1aXJlZChXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3Nl
dF9yZXF1aXJlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3JlcXVpcmVk
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3RlZF9vcHRpb25z
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlv
bioKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfb3B0aW9ucyhX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X2dldF92YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21l
c3NhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsaWRhdGlv
bl9tZXNzYWdlKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2xhYmVsczoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X2xhYmVscyhXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9hdXRvY29tcGxldGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKFdlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
c2VsZWN0X2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MU3R5bGVFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40ZGMzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50
LmNwcApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQu
aCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MU3R5bGVFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlU2hlZXRQcml2
YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxTdHlsZUVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01IVE1MU3R5bGVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogb2JqKQor
eworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfU1RZTEVfRUxFTUVOVChraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhU
TUxTdHlsZUVsZW1lbnQqIHdyYXBIVE1MU3R5bGVFbGVtZW50KFdlYkNvcmU6OkhUTUxTdHlsZUVs
ZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfU1RZTEVfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX0hUTUxfU1RZTEVfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAg
aWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1M
U3R5bGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFN0eWxl
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29y
ZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3JlbW92ZV9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkhUTUxTdHlsZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MU3R5bGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7
Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQs
IHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVN
RU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0RJU0FCTEVELAorICAgIFBST1BfTUVESUEsCisgICAgUFJPUF9UWVBFLAorICAgIFBS
T1BfU0hFRVQsCisgICAgUFJPUF9OT05DRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9zdHlsZV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfU1RZTEVf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRf
ZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTUVESUE6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zdHlsZV9l
bGVtZW50X3NldF9tZWRpYShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9z
dHlsZV9lbGVtZW50X3NldF90eXBlX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT05DRToKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X25vbmNlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3N0
eWxlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRN
TFN0eWxlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9zdHls
ZV9lbGVtZW50X2dldF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9NRURJQToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X21lZGlhKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF90eXBlX2F0dHIoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU0hFRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3NoZWV0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05PTkNFOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfbm9uY2Uo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3N0eWxl
X2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNz
LT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfcHJvcGVy
dHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAgICAgICJIVE1MU3R5bGVF
bGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxT
dHlsZUVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUVESUEsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWVkaWEiLAorICAgICAgICAg
ICAgIkhUTUxTdHlsZUVsZW1lbnQ6bWVkaWEiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxTdHlsZUVsZW1lbnQ6bWVkaWEiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAg
ICAgICJIVE1MU3R5bGVFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxTdHlsZUVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSEVFVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzaGVldCIsCisgICAgICAg
ICAgICAiSFRNTFN0eWxlRWxlbWVudDpzaGVldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTVN0eWxlU2hlZXQqIEhUTUxTdHlsZUVsZW1lbnQ6c2hlZXQiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTk9OQ0UsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAibm9uY2UiLAorICAgICAgICAgICAgIkhUTUxTdHlsZUVs
ZW1lbnQ6bm9uY2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxTdHlsZUVs
ZW1lbnQ6bm9uY2UiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfaW5pdChXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVO
VVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3N0eWxl
X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5kaXNhYmxlZCgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X2Rp
c2FibGVkKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldERpc2FibGVkKHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9z
dHlsZV9lbGVtZW50X2dldF9tZWRpYShXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWVkaWFBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxl
bWVudF9zZXRfbWVkaWEoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MU3R5
bGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWVk
aWFBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc3R5
bGVfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NUWUxFX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
Ojp0eXBlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01TdHlsZVNoZWV0KiB3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfc2hlZXQoV2ViS2l0RE9NSFRNTFN0eWxl
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NUWUxFX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0eWxlU2hlZXQ+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zaGVldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
c3R5bGVfZWxlbWVudF9nZXRfbm9uY2UoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NUWUxFX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5vbmNlQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfc2V0X25vbmNlKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFN0
eWxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5v
bmNlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmFhYTcwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFN0
eWxlRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU1RZTEVfRUxFTUVOVCAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfU1RZTEVfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9TVFlMRV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX1NUWUxFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU1RZTEVfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTFN0eWxlRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVf
RUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9TVFlMRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX1NUWUxFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU1RZTEVfRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NUWUxFX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTFN0eWxlRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50Q2xhc3MgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X2Rpc2FibGVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Ym9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfc3R5bGVf
ZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X2Rpc2FibGVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xl
YW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1l
bnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfbWVk
aWE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc3R5
bGVfZWxlbWVudF9nZXRfbWVkaWEoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X21lZGlhOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0
X21lZGlhKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3R5cGVfYXR0
cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zdHls
ZV9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVt
ZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9n
ZXRfc2hlZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudAorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NU3R5bGVTaGVldAorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTVN0eWxlU2hlZXQqCit3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxl
bWVudF9nZXRfc2hlZXQoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZik7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxl
bWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFlNGRi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTFN0eWxlRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MU3R5
bGVFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxTdHlsZUVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIHdyYXBIVE1MU3R5
bGVFbGVtZW50KFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1M
U3R5bGVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFN0eWxlRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjVhNjMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVu
dFVuc3RhYmxlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3N0eWxlX2VsZW1lbnRfZ2V0X25vbmNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVt
ZW50X2dldF9ub25jZShXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfbm9uY2U6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
c3R5bGVfZWxlbWVudF9zZXRfbm9uY2UoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFN0eWxlRWxl
bWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiMmM0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVj
dEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NBUFRJ
T05fRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKwor
V2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxUYWJsZUNhcHRp
b25FbGVtZW50KiB3cmFwSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoV2ViQ29yZTo6SFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQsICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2
ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVF
dmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9u
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRp
b25FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2Vs
ZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNh
cHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdP
YmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRk
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9h
ZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MVGFibGVDYXB0aW9u
RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudCwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQ
RV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9BTElHTiwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9U
QUJMRV9DQVBUSU9OX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRfYWxpZ24oc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRp
b25fZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9j
YXB0aW9uX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAg
ICAgICAgICJIVE1MVGFibGVDYXB0aW9uRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9pbml0KFdlYktp
dERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJB
TShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2Vs
ZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVD
YXB0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jNTcyZDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVm
aW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20u
aD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERP
TUhUTUxUYWJsZUNhcHRpb25FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF90
YWJsZV9jYXB0aW9uX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1M
X1RBQkxFX0NBUFRJT05fRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DQVBUSU9O
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFC
TEVfQ0FQVElPTl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NB
UFRJT05fRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RB
QkxFX0NBUFRJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1l
bnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0
aW9uX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X3Nl
dF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVD
YXB0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxU
YWJsZUNhcHRpb25FbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmZlNzRhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25F
bGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2YXRlX2gKKwor
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogd3JhcEhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50KFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50Kik7CitXZWJL
aXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRp
b25FbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudFByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJs
ZUNlbGxFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWY5
ZjVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKQEAg
LTAsMCArMSw2NTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGtpdChXZWJD
b3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9N
X0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4o
b2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogY29yZShXZWJLaXRE
T01IVE1MVGFibGVDZWxsRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqIHdyYXBIVE1MVGFibGVDZWxsRWxlbWVudChXZWJDb3JlOjpIVE1MVGFibGVD
ZWxsRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0
Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25z
dCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJl
KQoreworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVDZWxsRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJs
ZUNlbGxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VD
YXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChX
ZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hf
ZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50
OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50LCBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RP
TV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2Vu
dW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NFTExfSU5ERVgsCisgICAgUFJPUF9BTElHTiwK
KyAgICBQUk9QX0FYSVMsCisgICAgUFJPUF9CR19DT0xPUiwKKyAgICBQUk9QX0NILAorICAgIFBS
T1BfQ0hfT0ZGLAorICAgIFBST1BfQ09MX1NQQU4sCisgICAgUFJPUF9ST1dfU1BBTiwKKyAgICBQ
Uk9QX0hFQURFUlMsCisgICAgUFJPUF9IRUlHSFQsCisgICAgUFJPUF9OT19XUkFQLAorICAgIFBS
T1BfVl9BTElHTiwKKyAgICBQUk9QX1dJRFRILAorICAgIFBST1BfQUJCUiwKKyAgICBQUk9QX1ND
T1BFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElH
TjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYWxpZ24o
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9BWElTOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X3NldF9heGlzKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfc2V0X2JnX2NvbG9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0g6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hfT0ZGOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jaF9vZmYoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
T0xfU1BBTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRf
Y29sX3NwYW4oc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUk9XX1NQQU46CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfc2V0X3Jvd19zcGFuKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFQURFUlM6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlYWRlcnMoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlaWdodChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX05PX1dSQVA6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
c2V0X25vX3dyYXAoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVl9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9zZXRfdl9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FCQlI6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2FiYnIoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TQ09QRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRf
c2NvcGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxm
ID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NFTExfSU5ERVg6CisgICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
Z2V0X2NlbGxfaW5kZXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxJ
R046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0FYSVM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2F4aXMoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2JnX2NvbG9y
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2dldF9jaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSF9PRkY6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X2NoX29mZihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DT0xfU1BBTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY29sX3NwYW4oc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfUk9XX1NQQU46CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3Jvd19zcGFuKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFQURFUlM6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1l
bnRfZ2V0X2hlYWRlcnMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJ
R0hUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfTk9fV1JBUDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfbm9fd3JhcChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF92
X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2Vs
bF9lbGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9BQkJSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9hYmJyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NDT1BFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9zY29wZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0VMTF9JTkRFWCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiY2VsbC1pbmRleCIsCisgICAgICAgICAgICAiSFRN
TFRhYmxlQ2VsbEVsZW1lbnQ6Y2VsbC1pbmRleCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGds
b25nIEhUTUxUYWJsZUNlbGxFbGVtZW50OmNlbGwtaW5kZXgiLAorICAgICAgICAgICAgR19NSU5M
T05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJhbGlnbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
YWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNlbGxFbGVt
ZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FYSVMsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiYXhpcyIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6YXhpcyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6YXhpcyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CR19DT0xPUiwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJiZy1jb2xvciIsCisgICAgICAgICAg
ICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxUYWJsZUNlbGxFbGVtZW50OmJnLWNvbG9yIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0NILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNoIiwK
KyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDpjaCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Y2giLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQ0hfT0ZGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNo
LW9mZiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Y2gtb2ZmIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVudDpjaC1vZmYiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQ09MX1NQQU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgImNvbC1zcGFuIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVu
dDpjb2wtc3BhbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MVGFibGVDZWxs
RWxlbWVudDpjb2wtc3BhbiIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9ST1dfU1BBTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAicm93
LXNwYW4iLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OnJvdy1zcGFuIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxUYWJsZUNlbGxFbGVtZW50OnJvdy1zcGFu
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFQURFUlMsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaGVhZGVycyIsCisgICAgICAg
ICAgICAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6aGVhZGVycyIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6aGVhZGVycyIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
aGVpZ2h0IiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDpoZWlnaHQiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNlbGxFbGVtZW50OmhlaWdodCIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9OT19XUkFQLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJuby13cmFwIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxl
bWVudDpuby13cmFwIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxUYWJs
ZUNlbGxFbGVtZW50Om5vLXdyYXAiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVl9BTElHTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2LWFsaWduIiwKKyAgICAg
ICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDp2LWFsaWduIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVudDp2LWFsaWduIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
IndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDp3aWR0aCIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6d2lkdGgiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQUJCUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJhYmJyIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDphYmJy
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVudDph
YmJyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NDT1BFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgInNjb3BlIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxl
bWVudDpzY29wZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6c2NvcGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NlbGxfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiByZXF1ZXN0
KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2VsbF9pbmRleChXZWJLaXRET01IVE1MVGFibGVD
ZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+
Y2VsbEluZGV4KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VM
TF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1M
VGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2dldF9heGlzKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXhpc0F0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfc2V0X2F4aXMoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VM
TF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmF4aXNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1M
VGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmJnY29sb3JBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9iZ19jb2xv
cihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNl
bGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdj
b2xvckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y2hhckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2hfb2ZmKFdl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhcm9mZkF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
c2V0X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y2hhcm9mZkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY29sX3NwYW4oV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
PmNvbFNwYW5Gb3JCaW5kaW5ncygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY29sX3NwYW4oV2ViS2l0RE9NSFRN
TFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxU
YWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNl
dENvbFNwYW5Gb3JCaW5kaW5ncyh2YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3Jvd19zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5yb3dTcGFu
Rm9yQmluZGluZ3MoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3Jvd19zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNl
bGxFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxs
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRSb3dTcGFu
Rm9yQmluZGluZ3ModmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nl
bGxfZWxlbWVudF9nZXRfaGVhZGVycyhXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmhlYWRlcnNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9oZWFkZXJzKFdlYktpdERPTUhUTUxUYWJsZUNl
bGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpoZWFkZXJzQXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRf
aGVpZ2h0KFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVpZ2h0QXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NF
TExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X25vX3dyYXAoV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1M
VGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6bm93cmFwQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9ub193cmFwKFdlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6bm93cmFwQXR0ciwg
dmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9n
ZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZhbGlnbkF0dHIp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfc2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnZhbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF93aWR0
aChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNl
bGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lk
dGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X2dldF9hYmJyKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6YWJickF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2FiYnIoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFiYnJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9zY29wZShX
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c2NvcGUoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X3NldF9zY29wZShXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRTY29wZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzVmYzllCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5oCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJ
REVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRk
b20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lm
bmRlZiBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhU
TUxUYWJsZUNlbGxFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0
bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9UQUJMRV9DRUxMX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9U
QUJMRV9DRUxMX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5ULCBXZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfQ0VMTF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
VEFCTEVfQ0VMTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExf
RUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQsIFdlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Q2xhc3MgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jZWxsX2luZGV4
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9nZXRfY2VsbF9pbmRleChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2F4aXM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfYXhpcyhXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYXhpczoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X3NldF9heGlzKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1l
bnRfZ2V0X2JnX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2JnX2NvbG9yKFdlYktpdERPTUhU
TUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X3NldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9iZ19jb2xvcihX
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jaDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X2dldF9jaChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY2g6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2Nl
bGxfZWxlbWVudF9zZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9nZXRfY2hfb2ZmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NoX29mZihXZWJLaXRET01I
VE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9zZXRfY2hfb2ZmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NoX29mZihXZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jb2xfc3BhbjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfZ2V0X2NvbF9zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3Nl
dF9jb2xfc3BhbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAor
ICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jb2xfc3BhbihXZWJLaXRET01IVE1MVGFibGVD
ZWxsRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3Jvd19zcGFuOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VC
S0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfcm93
X3NwYW4oV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3Jvd19zcGFuOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1l
bnRfc2V0X3Jvd19zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBnbG9u
ZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9n
ZXRfaGVhZGVyczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWFkZXJzKFdlYktpdERPTUhUTUxUYWJs
ZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2Vs
bF9lbGVtZW50X3NldF9oZWFkZXJzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNl
bGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlYWRlcnMoV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfaGVpZ2h0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfaGVpZ2h0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X2dldF9ub193cmFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfbm9f
d3JhcChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfbm9fd3JhcDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X3NldF9ub193cmFwKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBnYm9v
bGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfdl9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF92X2FsaWduKFdlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3NldF92X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3ZfYWxpZ24oV2ViS2l0
RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2Nl
bGxfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3dpZHRo
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfZ2V0X2FiYnI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWJicihXZWJLaXRE
T01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYWJicjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGFibGVDZWxsRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9hYmJyKFdlYktp
dERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3Njb3BlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X3Njb3BlKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9zY29w
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X3NldF9zY29wZShXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzg4ZTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1l
bnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVu
dCogd3JhcEhUTUxUYWJsZUNlbGxFbGVtZW50KFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50
Kik7CitXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJs
ZUNlbGxFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0Y2Y5ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKQEAgLTAsMCArMSwz
NTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50LmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVGFi
bGVDb2xFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9D
T0xfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKwor
V2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVGFibGVDb2xF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHdyYXBI
VE1MVGFibGVDb2xFbGVtZW50KFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfVEFCTEVfQ09MX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1RB
QkxFX0NPTF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NvbF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYg
KCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVDb2xFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxl
Q29sRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
Y29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlv
bi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVDb2xFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxl
Q29sRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAg
IHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdf
T0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNl
KQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9j
b2xfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVy
ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsK
KyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NvbF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NvbF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdOLAor
ICAgIFBST1BfQ0gsCisgICAgUFJPUF9DSF9PRkYsCisgICAgUFJPUF9TUEFOLAorICAgIFBST1Bf
Vl9BTElHTiwKKyAgICBQUk9QX1dJRFRILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxf
VEFCTEVfQ09MX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewor
ICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9l
bGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY29sX2VsZW1lbnRfc2V0X2NoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hfT0ZGOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2NoX29mZihzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NQQU46CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfc3BhbihzZWxmLCBnX3ZhbHVl
X2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WX0FMSUdO
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3ZfYWxpZ24o
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50
X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9n
ZXRfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0g6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xf
ZWxlbWVudF9nZXRfY2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hf
T0ZGOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY29sX2VsZW1lbnRfZ2V0X2NoX29mZihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9TUEFOOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3NwYW4oc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVl9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF92X2FsaWduKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0
X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF90YWJsZV9jb2xfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1l
bnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfcHJvcGVydHk7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y29sX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAg
ICAgICJIVE1MVGFibGVDb2xFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MVGFibGVDb2xFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NI
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNoIiwKKyAgICAg
ICAgICAgICJIVE1MVGFibGVDb2xFbGVtZW50OmNoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MVGFibGVDb2xFbGVtZW50OmNoIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NIX09G
RiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaC1vZmYiLAor
ICAgICAgICAgICAgIkhUTUxUYWJsZUNvbEVsZW1lbnQ6Y2gtb2ZmIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDb2xFbGVtZW50OmNoLW9mZiIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TUEFOLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJz
cGFuIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDb2xFbGVtZW50OnNwYW4iLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFRhYmxlQ29sRWxlbWVudDpzcGFuIiwKKyAgICAgICAg
ICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZfQUxJR04sCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidi1hbGlnbiIsCisgICAgICAgICAgICAiSFRNTFRh
YmxlQ29sRWxlbWVudDp2LWFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MVGFibGVDb2xFbGVtZW50OnYtYWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAg
ICAgICAgIkhUTUxUYWJsZUNvbEVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxUYWJsZUNvbEVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFRhYmxl
Q29sRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktp
dERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRh
YmxlQ29sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2FsaWdu
KFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
b2xfZWxlbWVudF9nZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyQXR0
cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NvbF9lbGVtZW50X3NldF9jaChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NP
TF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y2hhckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJs
ZUNvbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9DT0xfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y2hhcm9mZkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2hfb2ZmKFdlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyb2ZmQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfZ2V0X3NwYW4oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNwYW4oKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfc3BhbihXZWJL
aXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6
OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2V0U3Bhbih2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29s
X2VsZW1lbnRfZ2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWxp
Z25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY29sX2VsZW1lbnRfc2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9DT0xfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OnZhbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0
RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfd2lkdGgo
V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY3OTZlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJs
ZUNvbEVsZW1lbnQuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TFRhYmxlQ29sRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVf
Q09MX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVF9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudENs
YXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfQ09MX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ09M
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQg
cGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVt
ZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50
X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxl
bWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJs
ZUNvbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xf
ZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJs
ZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9jaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGFibGVDb2xFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfY2go
V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9jaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGFibGVDb2xFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2goV2ViS2l0
RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2NoX29mZjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xf
ZWxlbWVudF9nZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2hfb2ZmOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2Nv
bF9lbGVtZW50X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29s
X2VsZW1lbnRfZ2V0X3NwYW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfc3BhbihXZWJLaXRET01IVE1MVGFi
bGVDb2xFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29s
X2VsZW1lbnRfc2V0X3NwYW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3NwYW4oV2ViS2l0RE9NSFRNTFRhYmxl
Q29sRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9jb2xfZWxlbWVudF9nZXRfdl9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGFibGVDb2xFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfdl9hbGln
bihXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3ZfYWxpZ246CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3Zf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3dp
ZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X3RhYmxlX2NvbF9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0
X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RhYmxlX2NvbF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxU
YWJsZUNvbEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMTM3NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhU
TUxUYWJsZUNvbEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRhYmxlQ29s
RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFibGVDb2xFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiB3cmFw
SFRNTFRhYmxlQ29sRWxlbWVudChXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Kik7CitXZWJL
aXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVu
dCopOworV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVGFi
bGVDb2xFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxUYWJsZUNvbEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YjE4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNzE3IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTFRhYmxlRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01IVE1MVGFibGVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogb2JqKQor
eworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVChraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhU
TUxUYWJsZUVsZW1lbnQqIHdyYXBIVE1MVGFibGVFbGVtZW50KFdlYkNvcmU6OkhUTUxUYWJsZUVs
ZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX0hUTUxfVEFCTEVfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAg
aWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1M
VGFibGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxl
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29y
ZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3JlbW92ZV9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkhUTUxUYWJsZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MVGFibGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7
Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQs
IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVN
RU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0NBUFRJT04sCisgICAgUFJPUF9UX0hFQUQsCisgICAgUFJPUF9UX0ZPT1QsCisgICAg
UFJPUF9ST1dTLAorICAgIFBST1BfVF9CT0RJRVMsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9Q
X0JHX0NPTE9SLAorICAgIFBST1BfQk9SREVSLAorICAgIFBST1BfQ0VMTF9QQURESU5HLAorICAg
IFBST1BfQ0VMTF9TUEFDSU5HLAorICAgIFBST1BfRlJBTUUsCisgICAgUFJPUF9SVUxFUywKKyAg
ICBQUk9QX1NVTU1BUlksCisgICAgUFJPUF9XSURUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxf
VEFCTEVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9z
ZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfc2V0X2JnX2NvbG9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQk9SREVSOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9zZXRfYm9yZGVyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0VMTF9QQURESU5HOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2VsbF9wYWRkaW5nKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfQ0VMTF9TUEFDSU5HOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9z
ZXRfY2VsbF9zcGFjaW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfRlJBTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X3NldF9mcmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JVTEVTOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9zZXRfcnVsZXMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVU1NQVJZOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfc3VtbWFyeShzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxF
X0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9DQVBUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jYXB0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1RfSEVBRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9oZWFkKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RfRk9PVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9mb290KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JPV1M6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3Mo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVF9CT0RJRVM6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
Z2V0X3RfYm9kaWVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSUdO
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfQkdfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF9iZ19jb2xvcihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9CT1JERVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9ib3JkZXIoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0VMTF9QQURESU5HOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfY2Vs
bF9wYWRkaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NFTExfU1BB
Q0lORzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxfc3BhY2luZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9GUkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2ZyYW1lKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1JVTEVTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcnVsZXMoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1VNTUFSWToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3N1bW1h
cnkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DQVBUSU9OLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNhcHRpb24iLAorICAgICAgICAgICAgIkhU
TUxUYWJsZUVsZW1lbnQ6Y2FwdGlvbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERP
TUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBIVE1MVGFibGVFbGVtZW50OmNhcHRpb24iLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5ULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVF9I
RUFELAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInQtaGVhZCIs
CisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDp0LWhlYWQiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogSFRNTFRhYmxlRWxlbWVu
dDp0LWhlYWQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VDVElP
Tl9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfVF9GT09ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAg
ICAgICAgInQtZm9vdCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDp0LWZvb3QiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCog
SFRNTFRhYmxlRWxlbWVudDp0LWZvb3QiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfVEFCTEVfU0VDVElPTl9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUk9XUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJyb3dzIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50
OnJvd3MiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiog
SFRNTFRhYmxlRWxlbWVudDpyb3dzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9UX0JPRElFUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJ0LWJvZGllcyIsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDp0LWJv
ZGllcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBI
VE1MVGFibGVFbGVtZW50OnQtYm9kaWVzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9I
VE1MX0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJhbGlnbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDphbGlnbiIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlRWxlbWVudDphbGlnbiIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9CR19DT0xPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJiZy1jb2xvciIsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVu
dDpiZy1jb2xvciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlRWxl
bWVudDpiZy1jb2xvciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CT1JERVIsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYm9yZGVyIiwKKyAgICAgICAgICAgICJIVE1M
VGFibGVFbGVtZW50OmJvcmRlciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TFRhYmxlRWxlbWVudDpib3JkZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0VMTF9QQURESU5HLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNlbGwtcGFkZGluZyIs
CisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDpjZWxsLXBhZGRpbmciLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUVsZW1lbnQ6Y2VsbC1wYWRkaW5nIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0NFTExfU1BBQ0lORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJjZWxsLXNwYWNpbmciLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVs
ZW1lbnQ6Y2VsbC1zcGFjaW5nIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
VGFibGVFbGVtZW50OmNlbGwtc3BhY2luZyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GUkFNRSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmcmFtZSIsCisgICAgICAg
ICAgICAiSFRNTFRhYmxlRWxlbWVudDpmcmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTFRhYmxlRWxlbWVudDpmcmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SVUxFUywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJydWxlcyIsCisgICAg
ICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDpydWxlcyIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTFRhYmxlRWxlbWVudDpydWxlcyIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVU1N
QVJZLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInN1bW1hcnki
LAorICAgICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQ6c3VtbWFyeSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlRWxlbWVudDpzdW1tYXJ5IiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
IndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50OndpZHRoIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVFbGVtZW50OndpZHRoIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9
CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9j
cmVhdGVfdF9oZWFkKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpIVE1MRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmNyZWF0ZVRIZWFkKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVf
dF9oZWFkKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+ZGVsZXRlVEhl
YWQoKTsKK30KKworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2NyZWF0ZV90X2Zvb3QoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+Y3JlYXRlVEZvb3QoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X2RlbGV0ZV90X2Zvb3QoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5k
ZWxldGVURm9vdCgpOworfQorCitXZWJLaXRET01IVE1MRWxlbWVudCogd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfY3JlYXRlX3RfYm9keShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVUQm9keSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfY2FwdGlvbihXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVDYXB0aW9uKCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfY2FwdGlvbihXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPmRlbGV0ZUNhcHRpb24oKTsKK30KKworV2ViS2l0RE9NSFRN
TEVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2luc2VydF9yb3coV2ViS2l0
RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdl
YkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxF
bGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW5zZXJ0Um93KGluZGV4
LCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3JvdyhXZWJL
aXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxU
YWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+ZGVsZXRlUm93KGluZGV4LCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
fQorCitXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfZ2V0X2NhcHRpb24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2FwdGlvbigpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfc2V0X2NhcHRpb24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwg
V2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5U
KHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogY29udmVydGVkVmFsdWUgPSBXZWJL
aXQ6OmNvcmUodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGl0ZW0tPnNldENhcHRpb24oY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9n
ZXRfdF9oZWFkKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnRIZWFkKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRf
dF9oZWFkKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50KiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVCh2YWx1ZSkpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRUSGVhZChj
b252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2Zvb3QoV2ViS2l0RE9N
SFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dEZvb3Qo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF90X2Zvb3QoV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudCogc2VsZiwgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHZh
bHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfU0VDVElPTl9FTEVNRU5UKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJy
b3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCog
Y29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFRGb290KGNvbnZlcnRlZFZhbHVlLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZ2V0X3Jvd3MoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+cm93cygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfdF9ib2RpZXMoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+dEJvZGllcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
c2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpiZ2NvbG9yQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRh
YmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJn
Y29sb3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfYm9yZGVyKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpib3JkZXJBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9zZXRfYm9yZGVyKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmJvcmRlckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3BhZGRpbmcoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNl
bGxwYWRkaW5nQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NlbGxfcGFkZGluZyhXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpjZWxscGFkZGluZ0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3NwYWNpbmco
V2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmNlbGxzcGFjaW5nQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NlbGxfc3Bh
Y2luZyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjZWxsc3BhY2luZ0F0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2dldF9mcmFtZShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZnJhbWVBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9z
ZXRfZnJhbWUoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZnJhbWVBdHRy
LCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxl
bWVudF9nZXRfcnVsZXMoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJ1bGVzQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0
X3J1bGVzKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJ1bGVzQXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfZ2V0X3N1bW1hcnkoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnN1bW1hcnlBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9z
ZXRfc3VtbWFyeShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzdW1tYXJ5
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X3NldF93aWR0aChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hNTUyNWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50LmgKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElO
R19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGlu
Y2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50X2gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0VMRU1FTlQgICAgICAg
ICAgICAod2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9U
QUJMRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxU
YWJsZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1F
TlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfVEFCTEVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxU
YWJsZUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudENsYXNzIHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV90X2hlYWQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01IVE1MRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV90X2hl
YWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3RfaGVhZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGFibGVFbGVtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV90X2hlYWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY3JlYXRl
X3RfZm9vdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfY3JlYXRlX3RfZm9vdChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfdF9mb290OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3RfZm9vdChXZWJLaXRE
T01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfZWxlbWVudF9jcmVhdGVfY2FwdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01I
VE1MRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY3JlYXRlX2NhcHRpb24oV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
ZGVsZXRlX2NhcHRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9k
ZWxldGVfY2FwdGlvbihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9pbnNlcnRfcm93OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqIEBpbmRleDogQSAjZ2xvbmcKKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9N
SFRNTEVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRWxlbWVudCoKK3dlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2luc2VydF9yb3coV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfcm93OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqIEBpbmRleDogQSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxl
bWVudF9kZWxldGVfcm93KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGdsb25nIGlu
ZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X2NhcHRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9u
RWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jYXB0aW9uKFdlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X3NldF9jYXB0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2FwdGlvbihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
KiBzZWxmLCBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogdmFsdWUsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9o
ZWFkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9oZWFkKFdlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3Nl
dF90X2hlYWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZh
bHVlOiBBICNXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICogQGVycm9yOiAjR0Vy
cm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X3NldF90X2hlYWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgV2ViS2l0RE9N
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3RfZm9vdDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfZ2V0X3RfZm9vdChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfdF9mb290OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjV2ViS2l0RE9N
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfdF9mb290KFdl
YktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF9yb3dzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhU
TUxDb2xsZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93cyhXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9n
ZXRfdF9ib2RpZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24K
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF90X2JvZGllcyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfYWxpZ246
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2Fs
aWduKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2JnX2NvbG9yOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9iZ19jb2xvcjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3Nl
dF9iZ19jb2xvcihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9ib3Jk
ZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfZWxlbWVudF9nZXRfYm9yZGVyKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9ib3JkZXI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9z
ZXRfYm9yZGVyKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxf
cGFkZGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3BhZGRpbmcoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2Nl
bGxfcGFkZGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X3NldF9jZWxsX3BhZGRpbmcoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfY2VsbF9zcGFjaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxfc3BhY2luZyhX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9zZXRfY2VsbF9zcGFjaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NlbGxfc3BhY2luZyhX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9ydWxlczoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dl
dF9ydWxlcyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfcnVsZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfcnVsZXMoV2ViS2l0
RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfc3VtbWFyeToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9z
dW1tYXJ5KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9zdW1tYXJ5OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3N1bW1hcnkoV2Vi
S2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRf
d2lkdGgoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50X2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTVhMDA3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0
RE9NSFRNTFRhYmxlRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUYWJsZUVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudC5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHdyYXBIVE1MVGFibGVF
bGVtZW50KFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MVGFi
bGVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFRhYmxlRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYmFlOWQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFVu
c3RhYmxlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11
bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfY3JlYXRlX3RfYm9keToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01I
VE1MRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01IVE1MRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0
ZV90X2JvZHkoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2ZyYW1lOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF9mcmFtZShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfZnJhbWU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfZnJhbWUoV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
SFRNTFRhYmxlRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxl
Um93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTM5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTFRhYmxlUm93RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTFRhYmxlUm93RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfVEFCTEVfUk9XX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmop
KSk7Cit9CisKK1dlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRN
TFRhYmxlUm93RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MVGFibGVSb3dFbGVt
ZW50KiB3cmFwSFRNTFRhYmxlUm93RWxlbWVudChXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQp
OworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29y
ZTo6SFRNTFRhYmxlUm93RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxUYWJsZVJvd0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29y
ZTo6SFRNTFRhYmxlUm93RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxUYWJsZVJvd0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxl
X3Jvd19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwg
Y29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElm
YWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfcm93X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
aHRtbF90YWJsZV9yb3dfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVG
SU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQsIHdlYmtpdF9k
b21faHRtbF90YWJsZV9yb3dfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwg
R19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9ST1dfSU5ERVgsCisgICAgUFJPUF9TRUNUSU9OX1JPV19JTkRFWCwKKyAgICBQUk9QX0NFTExT
LAorICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9CR19DT0xPUiwKKyAgICBQUk9QX0NILAorICAg
IFBST1BfQ0hfT0ZGLAorICAgIFBST1BfVl9BTElHTiwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9yb3dfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9iZ19jb2xvcihzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2NoKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hf
T0ZGOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2NoX29m
ZihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1ZfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxl
bWVudF9zZXRfdl9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9n
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUk9XX0lOREVYOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2Vs
ZW1lbnRfZ2V0X3Jvd19pbmRleChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TRUNUSU9OX1JPV19JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9zZWN0aW9uX3Jvd19pbmRleChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DRUxMUzoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0
X2NlbGxzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93
X2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0JHX0NPTE9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2JnX2NvbG9yKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0NIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2NoKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIX09GRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jaF9vZmYo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVl9BTElHTjoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVt
ZW50X2dldF92X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxUYWJs
ZVJvd0VsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JP
V19JTkRFWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAicm93LWlu
ZGV4IiwKKyAgICAgICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50OnJvdy1pbmRleCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdsb25nIEhUTUxUYWJsZVJvd0VsZW1lbnQ6cm93LWluZGV4IiwK
KyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VDVElPTl9ST1dfSU5ERVgs
CisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNlY3Rpb24tcm93LWlu
ZGV4IiwKKyAgICAgICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50OnNlY3Rpb24tcm93LWluZGV4
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTFRhYmxlUm93RWxlbWVudDpzZWN0
aW9uLXJvdy1pbmRleCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NF
TExTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNlbGxzIiwK
KyAgICAgICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50OmNlbGxzIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIEhUTUxUYWJsZVJvd0VsZW1lbnQ6Y2Vs
bHMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdO
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAg
ICAgICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MVGFibGVSb3dFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0JHX0NPTE9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImJnLWNvbG9yIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50OmJnLWNvbG9yIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVSb3dFbGVtZW50OmJnLWNv
bG9yIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImNoIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVSb3dFbGVtZW50OmNo
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVSb3dFbGVtZW50OmNo
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0NIX09GRiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJjaC1vZmYiLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0VsZW1l
bnQ6Y2gtb2ZmIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVSb3dF
bGVtZW50OmNoLW9mZiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WX0FMSUdOLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInYtYWxpZ24iLAorICAgICAgICAgICAgIkhU
TUxUYWJsZVJvd0VsZW1lbnQ6di1hbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTFRhYmxlUm93RWxlbWVudDp2LWFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxUYWJsZVJvd0Vs
ZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitXZWJL
aXRET01IVE1MRWxlbWVudCogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2luc2Vy
dF9jZWxsKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYsIGdsb25nIGluZGV4LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JP
V19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5pbnNlcnRDZWxsKGluZGV4LCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxl
X3Jvd19lbGVtZW50X2RlbGV0ZV9jZWxsKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNl
bGYsIGdsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVy
cm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgaXRlbS0+ZGVsZXRlQ2VsbChpbmRleCwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2xvbmcgd2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9yb3dfaW5kZXgoV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RB
QkxFX1JPV19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
PnJvd0luZGV4KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9zZWN0aW9uX3Jvd19pbmRleChXZWJLaXRET01IVE1M
VGFibGVSb3dFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfUk9XX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0Vs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRl
bS0+c2VjdGlvblJvd0luZGV4KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9N
SFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2Vs
bHMoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmNlbGxzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVu
dF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MVGFibGVSb3dF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9X
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmJnY29sb3JBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpiZ2NvbG9yQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50
X2dldF9jaChXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1l
bnRfc2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpjaGFyQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X2dldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpjaGFyb2ZmQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxl
Um93RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJvZmZBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3Zf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWxpZ25BdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1l
bnRfc2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnZhbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MVGFibGVSb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2RiOTg5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50LmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRv
bS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
VGFibGVSb3dFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF90
YWJsZV9yb3dfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFC
TEVfUk9XX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxUYWJsZVJvd0VsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfUk9X
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQsIFdlYktpdERPTUhUTUxU
YWJsZVJvd0VsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JP
V19FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1JPV19FTEVN
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX1RBQkxFX1JPV19FTEVNRU5ULCBXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTFRhYmxlUm93RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9yb3dfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfcm93X2VsZW1lbnRfaW5zZXJ0X2NlbGw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFRhYmxlUm93RWxlbWVudAorICogQGluZGV4OiBBICNnbG9uZworICogQGVycm9yOiAjR0Vy
cm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRWxl
bWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2luc2VydF9jZWxsKFdlYktpdERPTUhUTUxUYWJsZVJvd0Vs
ZW1lbnQqIHNlbGYsIGdsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2RlbGV0ZV9jZWxsOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQKKyAqIEBpbmRleDogQSAjZ2xvbmcKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfcm93X2VsZW1lbnRfZGVsZXRlX2NlbGwoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3Jvd19pbmRleDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoq
LworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dl
dF9yb3dfaW5kZXgoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9zZWN0aW9uX3Jvd19pbmRl
eDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX3Rh
YmxlX3Jvd19lbGVtZW50X2dldF9zZWN0aW9uX3Jvd19pbmRleChXZWJLaXRET01IVE1MVGFibGVS
b3dFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2Vs
ZW1lbnRfZ2V0X2NlbGxzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xs
ZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2NlbGxzKFdlYktpdERPTUhUTUxUYWJsZVJv
d0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxl
bWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJs
ZVJvd0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3df
ZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJs
ZVJvd0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9n
ZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9iZ19jb2xvcjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxl
bWVudF9zZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2Vs
ZW1lbnRfZ2V0X2NoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jaChXZWJLaXRET01IVE1MVGFibGVSb3dF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1l
bnRfc2V0X2NoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9jaChXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9yb3dfZWxlbWVudF9nZXRfY2hfb2ZmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxU
YWJsZVJvd0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jaF9vZmYoV2Vi
S2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9jaF9vZmY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFRhYmxlUm93RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2NoX29mZihX
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfdl9hbGlnbjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9yb3dfZWxlbWVudF9nZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X3Zf
YWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfcm93X2VsZW1lbnRfc2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
VGFibGVSb3dFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMGE2YzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MVGFibGVSb3dFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUYWJsZVJv
d0VsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRhYmxlUm93RWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Lmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogd3Jh
cEhUTUxUYWJsZVJvd0VsZW1lbnQoV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCopOworV2Vi
S2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1l
bnQqKTsKK1dlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MVGFibGVSb3dFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODNjODcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcApAQCAtMCwwICsxLDMz
NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1F
TlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6
OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCogd3JhcEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChnX29iamVjdF9uZXcoV0VC
S0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9kaXNwYXRj
aF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZl
bnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBX
ZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hF
dmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9zZWN0aW9uX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29s
ZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRh
cmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlm
YWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF90YWJs
ZV9zZWN0aW9uX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9s
aXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKwor
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQs
IHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9I
VE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRf
VEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9DSCwKKyAgICBQUk9QX0NIX09GRiwKKyAg
ICBQUk9QX1ZfQUxJR04sCisgICAgUFJPUF9ST1dTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiA9IFdF
QktJVF9ET01fSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2goc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
SF9PRkY6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0
X2NoX29mZihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1ZfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9z
ZWN0aW9uX2VsZW1lbnRfc2V0X3ZfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2Vj
dGlvbl9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJ
T05fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9DSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfY2goc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hfT0ZGOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50
X2dldF9jaF9vZmYoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVl9BTElH
TjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfdl9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9ST1dTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3Jvd3Moc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxl
bWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Q2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9u
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAg
ICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQ0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2giLAor
ICAgICAgICAgICAgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OmNoIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpjaCIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9DSF9PRkYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiY2gtb2ZmIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpjaC1vZmYi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
OmNoLW9mZiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WX0FMSUdOLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgInYtYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OnYtYWxpZ24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OnYtYWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUk9X
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJyb3dzIiwKKyAg
ICAgICAgICAgICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpyb3dzIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
OnJvd3MiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7
Cit9CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlv
bl9lbGVtZW50X2luc2VydF9yb3coV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNl
bGYsIGdsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRWxlbWVudD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmluc2VydFJvdyhpbmRleCwgZWMpKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZGVsZXRlX3JvdyhXZWJL
aXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmRlbGV0
ZVJvdyhpbmRleCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9z
ZWN0aW9uX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25B
dHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X2dldF9jaChXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmNoYXJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9jaChXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhckF0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9u
X2VsZW1lbnRfZ2V0X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmNoYXJvZmZBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJvZmZB
dHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X2dldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElP
Tl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6dmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfdl9hbGlnbihXZWJL
aXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
dmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlv
biogd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfcm93cyhXZWJLaXRE
T01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+cm93cygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40NzYwN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0
aW9uRWxlbWVudC5oCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
QlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1M
X1RBQkxFX1NFQ1RJT05fRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJM
RV9TRUNUSU9OX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9UQUJMRV9TRUNUSU9OX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVN
RU5ULCBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1NF
Q1RJT05fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9O
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9T
RUNUSU9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Q2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1s
X3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2luc2VydF9yb3c6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqIEBpbmRleDogQSAjZ2xvbmcKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NSFRNTEVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRWxlbWVudCoK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfaW5zZXJ0X3JvdyhXZWJLaXRE
T01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2Rl
bGV0ZV9yb3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQK
KyAqIEBpbmRleDogQSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2RlbGV0ZV9y
b3coV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYsIGdsb25nIGluZGV4LCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25f
ZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0
RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
c2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2Vs
ZW1lbnRfZ2V0X2NoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2NoKFdlYktpdERPTUhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfc2VjdGlvbl9lbGVtZW50X3NldF9jaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9jaChXZWJL
aXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9jaF9v
ZmY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2Vj
dGlvbl9lbGVtZW50X3NldF9jaF9vZmY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2hfb2ZmKFdl
YktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3Zf
YWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxl
X3NlY3Rpb25fZWxlbWVudF9zZXRfdl9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF92X2Fs
aWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
Z2V0X3Jvd3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0
aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9yb3dzKFdlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50UHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGUwNTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogd3JhcEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFdlYkNv
cmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CitXZWJLaXRET01IVE1MVGFibGVTZWN0aW9u
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7CitXZWJDb3Jl
OjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVGFibGVTZWN0aW9u
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlYTcyMWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTA1MCBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09i
amVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01O
b2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WYWxpZGl0eVN0
YXRlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUZXh0QXJl
YUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RFWFRfQVJFQV9F
TEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJD
b3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MVGV4dEFyZWFFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogd3JhcEhUTUxU
ZXh0QXJlYUVsZW1lbnQoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogY29yZU9iamVjdCkK
K3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9U
RVhUX0FSRUFfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEVYVF9B
UkVBX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
dGV4dF9hcmVhX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNv
cmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJl
YUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3Jl
VGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3Jp
cHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBo
YW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJl
YUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkK
K3sKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7
CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAg
IGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQVVUT0ZPQ1VTLAor
ICAgIFBST1BfRElSX05BTUUsCisgICAgUFJPUF9ESVNBQkxFRCwKKyAgICBQUk9QX0ZPUk0sCisg
ICAgUFJPUF9NQVhfTEVOR1RILAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1BMQUNFSE9MREVS
LAorICAgIFBST1BfUkVBRF9PTkxZLAorICAgIFBST1BfUkVRVUlSRUQsCisgICAgUFJPUF9ST1dT
LAorICAgIFBST1BfQ09MUywKKyAgICBQUk9QX1dSQVAsCisgICAgUFJPUF9UWVBFLAorICAgIFBS
T1BfREVGQVVMVF9WQUxVRSwKKyAgICBQUk9QX1ZBTFVFLAorICAgIFBST1BfVEVYVF9MRU5HVEgs
CisgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgIFBST1BfVkFMSURJVFksCisgICAgUFJPUF9W
QUxJREFUSU9OX01FU1NBR0UsCisgICAgUFJPUF9MQUJFTFMsCisgICAgUFJPUF9TRUxFQ1RJT05f
U1RBUlQsCisgICAgUFJPUF9TRUxFQ1RJT05fRU5ELAorICAgIFBST1BfU0VMRUNUSU9OX0RJUkVD
VElPTiwKKyAgICBQUk9QX0FVVE9DT1JSRUNULAorICAgIFBST1BfQVVUT0NBUElUQUxJWkUsCisg
ICAgUFJPUF9BVVRPQ09NUExFVEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
dGV4dF9hcmVhX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9URVhU
X0FSRUFfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX0FVVE9GT0NVUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X3NldF9hdXRvZm9jdXMoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElSX05BTUU6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGlyX25hbWUoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kaXNhYmxlZChz
ZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NQVhfTEVOR1RIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfc2V0X21heF9sZW5ndGgoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSksIG51bGxw
dHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExBQ0VIT0xERVI6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcGxhY2Vob2xk
ZXIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9SRUFEX09OTFk6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9zZXRfcmVhZF9vbmx5KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFUVVJUkVEOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JlcXVpcmVkKHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JPV1M6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcm93cyhzZWxmLCBn
X3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
T0xTOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2NvbHMo
c2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfV1JBUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3Nl
dF93cmFwKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfREVGQVVMVF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfdmFsdWUoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxF
Q1RJT05fU1RBUlQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9z
ZXRfc2VsZWN0aW9uX3N0YXJ0KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVElPTl9FTkQ6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX2VuZChzZWxmLCBnX3ZhbHVl
X2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RJ
T05fRElSRUNUSU9OOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X3NlbGVjdGlvbl9kaXJlY3Rpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09SUkVDVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvY29ycmVjdChzZWxmLCBnX3Zh
bHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9B
VVRPQ0FQSVRBTElaRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NldF9hdXRvY2FwaXRhbGl6ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9DT01QTEVURToKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9U
RVhUX0FSRUFfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0FVVE9GT0NVUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvZm9jdXMoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElSX05BTUU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfZGlyX25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElTQUJM
RUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGlzYWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfRk9STToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Zvcm0oc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTUFYX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9tYXhfbGVuZ3Ro
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFDRUhP
TERFUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X2dldF9wbGFjZWhvbGRlcihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9SRUFEX09OTFk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcmVhZF9vbmx5KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFUVVJUkVEOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X3JlcXVpcmVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JP
V1M6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfcm93cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DT0xTOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2NvbHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfV1JBUDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF93cmFwKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXJlYV90eXBlKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfVkFMVUU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9nZXRfZGVmYXVsdF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9WQUxVRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9URVhUX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxv
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdGV4dF9sZW5n
dGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lMTF9WQUxJREFURToK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1ZBTElESVRZOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRpdHkoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURBVElPTl9NRVNTQUdFOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MQUJFTFM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9sYWJlbHMoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNUSU9OX1NUQVJUOgorICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Nl
bGVjdGlvbl9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxF
Q1RJT05fRU5EOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9lbmQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNUSU9OX0RJUkVDVElPTjoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dl
dF9zZWxlY3Rpb25fZGlyZWN0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0FVVE9DT1JSRUNUOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9jb3JyZWN0KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9DQVBJVEFMSVpFOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
Z2V0X2F1dG9jYXBpdGFsaXplKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0FVVE9DT01QTEVURToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY29tcGxldGUoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0ZPQ1VTLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhdXRvZm9jdXMiLAorICAgICAgICAgICAgIkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29s
ZWFuIEhUTUxUZXh0QXJlYUVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0RJUl9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRp
ci1uYW1lIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmRpci1uYW1lIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50OmRpci1uYW1l
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0RJU0FCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICJkaXNhYmxlZCIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVh
RWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1M
VGV4dEFyZWFFbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk0sCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisgICAgICAg
ICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1MVGV4dEFyZWFFbGVtZW50OmZvcm0iLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUFYX0xFTkdUSCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAibWF4LWxlbmd0aCIsCisg
ICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDptYXgtbGVuZ3RoIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdsb25nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6bWF4LWxlbmd0aCIsCisgICAg
ICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxUZXh0
QXJlYUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRl
eHRBcmVhRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BMQUNFSE9MREVSLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBsYWNlaG9sZGVyIiwKKyAg
ICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OnBsYWNlaG9sZGVyIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50OnBsYWNlaG9sZGVyIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1JFQURfT05MWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAicmVhZC1vbmx5IiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVt
ZW50OnJlYWQtb25seSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MVGV4
dEFyZWFFbGVtZW50OnJlYWQtb25seSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVFVSVJFRCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicmVxdWlyZWQiLAor
ICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6cmVxdWlyZWQiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFRleHRBcmVhRWxlbWVudDpyZXF1aXJlZCIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9ST1dTLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAg
ICAgICAgICJyb3dzIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OnJvd3MiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFRleHRBcmVhRWxlbWVudDpyb3dzIiwK
KyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTFMsCisgICAgICAgIGdf
cGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImNvbHMiLAorICAgICAgICAgICAgIkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6Y29scyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1M
VGV4dEFyZWFFbGVtZW50OmNvbHMiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfV1JBUCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ3
cmFwIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OndyYXAiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVsZW1lbnQ6d3JhcCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6dHlwZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50OnR5cGUiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9ERUZBVUxUX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImRlZmF1bHQtdmFsdWUiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJl
YUVsZW1lbnQ6ZGVmYXVsdC12YWx1ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTFRleHRBcmVhRWxlbWVudDpkZWZhdWx0LXZhbHVlIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZB
TFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZhbHVlIiwK
KyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1RFWFRfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAg
ICAgICAidGV4dC1sZW5ndGgiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6dGV4
dC1sZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgSFRNTFRleHRBcmVhRWxl
bWVudDp0ZXh0LWxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lMTF9W
QUxJREFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2ls
bC12YWxpZGF0ZSIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDp3aWxsLXZhbGlk
YXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTFRleHRBcmVhRWxlbWVu
dDp3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURJVFksCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidmFsaWRpdHkiLAorICAgICAgICAg
ICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBIVE1MVGV4dEFyZWFFbGVtZW50OnZhbGlkaXR5IiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElEQVRJT05f
TUVTU0FHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWxp
ZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6dmFsaWRh
dGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFCRUxTLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImxhYmVscyIsCisgICAg
ICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpsYWJlbHMiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01Ob2RlTGlzdCogSFRNTFRleHRBcmVhRWxlbWVudDpsYWJlbHMiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NFTEVDVElPTl9TVEFSVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2VsZWN0aW9uLXN0YXJ0IiwK
KyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OnNlbGVjdGlvbi1zdGFydCIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MVGV4dEFyZWFFbGVtZW50OnNlbGVjdGlvbi1z
dGFydCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxFQ1RJT05f
RU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzZWxlY3Rpb24t
ZW5kIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OnNlbGVjdGlvbi1lbmQiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFRleHRBcmVhRWxlbWVudDpzZWxlY3Rp
b24tZW5kIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NFTEVDVElP
Tl9ESVJFQ1RJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
c2VsZWN0aW9uLWRpcmVjdGlvbiIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpz
ZWxlY3Rpb24tZGlyZWN0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
VGV4dEFyZWFFbGVtZW50OnNlbGVjdGlvbi1kaXJlY3Rpb24iLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QVVUT0NPUlJFQ1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAg
ImF1dG9jb3JyZWN0IiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmF1dG9jb3Jy
ZWN0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6YXV0b2NvcnJlY3QiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0NBUElUQUxJWkUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYXV0b2NhcGl0YWxpemUi
LAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6YXV0b2NhcGl0YWxpemUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVsZW1lbnQ6YXV0b2NhcGl0
YWxpemUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0NPTVBMRVRFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAi
SFRNTFRleHRBcmVhRWxlbWVudDphdXRvY29tcGxldGUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVsZW1lbnQ6YXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9pbml0KFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3Qp
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfY2hlY2tf
dmFsaWRpdHkoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja1ZhbGlkaXR5KCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJF
QV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGVycm9yKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZEVycm9yID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVycm9y
KTsKKyAgICBpdGVtLT5zZXRDdXN0b21WYWxpZGl0eShjb252ZXJ0ZWRFcnJvcik7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NlbGVjdChXZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhU
X0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZWxlY3QoKTsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JhbmdlX3RleHQoV2ViS2l0
RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHJlcGxhY2VtZW50LCBn
dWxvbmcgc3RhcnQsIGd1bG9uZyBlbmQsIGNvbnN0IGdjaGFyKiBzZWxlY3Rpb25Nb2RlLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwocmVwbGFjZW1lbnQpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZWN0aW9uTW9kZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRSZXBsYWNlbWVudCA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChyZXBsYWNlbWVudCk7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkU2VsZWN0aW9uTW9kZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxlY3Rpb25Nb2Rl
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRSYW5n
ZVRleHQoY29udmVydGVkUmVwbGFjZW1lbnQsIHN0YXJ0LCBlbmQsIGNvbnZlcnRlZFNlbGVjdGlv
bk1vZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVt
ZW50X3NldF9zZWxlY3Rpb25fcmFuZ2UoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2Vs
ZiwgZ2xvbmcgc3RhcnQsIGdsb25nIGVuZCwgY29uc3QgZ2NoYXIqIGRpcmVjdGlvbikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoZGlyZWN0aW9uKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZERpcmVjdGlvbiA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChkaXJlY3Rpb24pOworICAgIGl0ZW0t
PnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGNvbnZlcnRlZERpcmVjdGlvbik7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0b2ZvY3Vz
KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNv
cmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1c0F0dHIpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvZm9j
dXMoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjphdXRv
Zm9jdXNBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfZ2V0X2Rpcl9uYW1lKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGly
bmFtZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpcm5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGlzYWJs
ZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGlzYWJs
ZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNh
YmxlZEF0dHIsIHZhbHVlKTsKK30KKworV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJF
QV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2xvbmcgd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9tYXhfbGVuZ3RoKFdlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9U
RVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVt
LT5tYXhMZW5ndGhGb3JCaW5kaW5ncygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9tYXhfbGVuZ3RoKFdlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhU
TUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0TWF4TGVuZ3RoRm9yQmluZGlu
Z3ModmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdl
dE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3BsYWNlaG9s
ZGVyKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGxhY2Vob2xkZXJBdHRyKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfc2V0X3BsYWNlaG9sZGVyKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9B
UkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpwbGFjZWhvbGRlckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yZWFkX29ubHkoV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVhZG9ubHlBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcmVhZF9vbmx5KFdl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVhZG9ubHlB
dHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9nZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVxdWlyZWRBdHRyKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9zZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jv
b2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZXF1aXJlZEF0dHIsIHZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yb3dzKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5yb3dzKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfc2V0X3Jvd3MoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2xvbmcg
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFJvd3ModmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2NvbHMoV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJF
QV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNvbHMo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2Fy
ZWFfZWxlbWVudF9zZXRfY29scyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBn
bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q29scyh2YWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3dyYXAoV2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RF
WFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjp3cmFwQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF93cmFwKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3cmFwQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dl
dF9hcmVhX3R5cGUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90ZXh0X2Fy
ZWFfZWxlbWVudF9nZXRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+ZGVmYXVsdFZhbHVlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVlKFdlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldERlZmF1bHRW
YWx1ZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT52YWx1ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VmFsdWUoY29udmVydGVkVmFsdWUpOworfQorCitn
dWxvbmcgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF90ZXh0X2xlbmd0aChX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25n
IHJlc3VsdCA9IGl0ZW0tPnRleHRMZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRh
dGUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53aWxsVmFsaWRhdGUoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZT4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnZhbGlkaXR5KCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9U
RVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWxpZGF0aW9uTWVzc2FnZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2dldF9sYWJlbHMoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmxhYmVscygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9nZXRfc2VsZWN0aW9uX3N0YXJ0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zZWxlY3Rpb25TdGFy
dCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fc3RhcnQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RF
WFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNlbGVjdGlvblN0YXJ0
KHZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dl
dF9zZWxlY3Rpb25fZW5kKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zZWxlY3Rpb25FbmQoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9z
ZXRfc2VsZWN0aW9uX2VuZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9u
ZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U2VsZWN0aW9uRW5kKHZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX2RpcmVj
dGlvbihXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c2VsZWN0aW9uRGlyZWN0
aW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZGlyZWN0aW9uKFdlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFNlbGVjdGlvbkRpcmVjdGlvbihj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9nZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5hdXRvY29ycmVjdCgpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBp
dGFsaXplIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8q
IEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NvcnJlY3QoV2ViS2l0
RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5B
QkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEF1
dG9jb3JyZWN0KHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
SW9zIEF1dG9jb3JyZWN0IEFuZCBBdXRvY2FwaXRhbGl6ZSIpCisjZW5kaWYgLyogRU5BQkxFKElP
U19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpICovCit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKElPU19BVVRPQ09SUkVDVF9B
TkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FS
RUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdXRvY2FwaXRhbGl6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFuZCBBdXRvY2FwaXRhbGl6ZSIpCisgICAgcmV0
dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJ
WkUpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9h
dXRvY2FwaXRhbGl6ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisjaWYgRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElU
QUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFy
ZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdXRvY2FwaXRhbGl6ZShjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0YWxpemUiKQorI2Vu
ZGlmIC8qIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY29tcGxl
dGUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF1dG9jb21wbGV0ZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVY
VF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF1dG9jb21wbGV0ZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxOTlmNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oCkBAIC0wLDAgKzEs
MjgwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50X2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9URVhUX0FSRUFfRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RFWFRfQVJFQV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5U
LCBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9URVhUX0FSRUFfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9URVhUX0FSRUFfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9URVhUX0FSRUFf
RUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9URVhUX0FSRUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9N
SFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NlbGVjdDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZWxlY3QoV2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X3NldF9zZWxlY3Rpb25fcmFuZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudAorICogQHN0YXJ0OiBBICNnbG9uZworICogQGVuZDogQSAjZ2xvbmcK
KyAqIEBkaXJlY3Rpb246IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3JhbmdlKFdlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdsb25nIHN0YXJ0LCBnbG9uZyBlbmQsIGNvbnN0
IGdjaGFyKiBkaXJlY3Rpb24pOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9nZXRfYXV0b2ZvY3VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1dG9mb2N1cyhX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRf
YXV0b2ZvY3VzKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Rp
c2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Zvcm06CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dl
dF9mb3JtKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfbmFtZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0
X25hbWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Jl
YWRfb25seToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yZWFkX29ubHkoV2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X3NldF9yZWFkX29ubHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JlYWRfb25seShXZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yb3dzOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X3Jvd3MoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yb3dzOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NldF9yb3dzKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2NvbHM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfY29scyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2NvbHM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZhbHVlOiBB
ICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfc2V0X2NvbHMoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwg
Z2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9nZXRfYXJlYV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hcmVhX3R5cGUoV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kZWZhdWx0
X3ZhbHVlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGVmYXVsdF92YWx1ZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9zZXRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2Fy
ZWFfZWxlbWVudF9nZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3ZhbHVlKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2dldF9zZWxlY3Rpb25fc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcK
K3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX3N0YXJ0KFdl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3N0YXJ0OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3Nl
dF9zZWxlY3Rpb25fc3RhcnQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2xv
bmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfc2VsZWN0aW9uX2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9zZWxlY3Rpb25fZW5kKFdlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0
aW9uX2VuZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42NjZlYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFF
bGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHdyYXBIVE1MVGV4dEFyZWFFbGVtZW50KFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIGtp
dChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50VW5zdGFibGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYmNlZTVhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFVuc3Rh
YmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudFVuc3RhYmxlX2gKKwor
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9jaGVja192YWxpZGl0eToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9jaGVja192YWxpZGl0eShX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAZXJyb3I6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yYW5nZV90ZXh0OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEByZXBsYWNlbWVudDogQSAjZ2No
YXIKKyAqIEBzdGFydDogQSAjZ3Vsb25nCisgKiBAZW5kOiBBICNndWxvbmcKKyAqIEBzZWxlY3Rp
b25Nb2RlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9zZXRfcmFuZ2VfdGV4dChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogcmVwbGFjZW1lbnQsIGd1bG9uZyBzdGFydCwgZ3Vsb25nIGVuZCwgY29u
c3QgZ2NoYXIqIHNlbGVjdGlvbk1vZGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Rpcl9uYW1lOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X3NldF9kaXJfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9zZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X21heF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X21heF9sZW5ndGgoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9tYXhfbGVuZ3Ro
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X21heF9sZW5ndGgoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2xvbmcg
dmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfZ2V0X3BsYWNlaG9sZGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfcGxhY2Vob2xkZXIoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3Nl
dF9wbGFjZWhvbGRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcGxh
Y2Vob2xkZXIoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X3JlcXVpcmVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2dldF9yZXF1aXJlZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JlcXVpcmVkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yZXF1aXJlZChXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF93cmFwOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfd3JhcChXZWJLaXRET01IVE1MVGV4dEFyZWFF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfc2V0X3dyYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3dyYXAo
V2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3RleHRfbGVu
Z3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3RleHRf
bGVuZ3RoKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRpdHk6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKgord2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X2xhYmVsczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlz
dAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01O
b2RlTGlzdCoKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbGFiZWxzKFdl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX2RpcmVjdGlvbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9kaXJlY3Rpb24o
V2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZGlyZWN0aW9uOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZGlyZWN0aW9uKFdlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY29ycmVjdDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0b2Nv
cnJlY3QoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvY29ycmVjdDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFu
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0b2NhcGl0YWxpemU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY2FwaXRhbGl6ZShXZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvY2FwaXRhbGl6ZShXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJhN2E5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUaXRs
ZUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRpdGxl
RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NSFRNTFRpdGxlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqIG9iaikK
K3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RJVExFX0VMRU1FTlQoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxUaXRsZUVsZW1l
bnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01I
VE1MVGl0bGVFbGVtZW50KiB3cmFwSFRNTFRpdGxlRWxlbWVudChXZWJDb3JlOjpIVE1MVGl0bGVF
bGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX1RJVExFX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9IVE1MX1RJVExFX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRh
cmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAg
IGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRN
TFRpdGxlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUaXRs
ZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNv
cmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24u
bmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGl0bGVFbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJD
b3JlOjpIVE1MVGl0bGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTFRpdGxlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7
CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90aXRsZV9l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50
LCB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxF
TUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQs
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9URVhULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RpdGxlX2Vs
ZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRN
TFRpdGxlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9USVRMRV9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfc2V0X3RleHQoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MVGl0bGVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RJVExFX0VM
RU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9URVhUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfdGl0bGVfZWxlbWVudF9nZXRfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhU
TUxUaXRsZUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X3NldF9w
cm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRt
bF90aXRsZV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9URVhULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRleHQiLAorICAgICAg
ICAgICAgIkhUTUxUaXRsZUVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTFRpdGxlRWxlbWVudDp0ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF90aXRsZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCogcmVx
dWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9nZXRfdGV4dChXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT50ZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X3RpdGxlX2VsZW1lbnRfc2V0X3RleHQoV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGl0bGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRUZXh0KGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MVGl0bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmNkN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MVGl0bGVFbGVtZW50LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZp
bmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5o
PiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9N
SFRNTFRpdGxlRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVElUTEVfRUxF
TUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9U
SVRMRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX1RJVExFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVElUTEVfRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTFRpdGxlRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
VElUTEVfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9USVRMRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVElUTEVfRUxFTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9USVRMRV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RJVExF
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTFRpdGxlRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50Q2xhc3Mg
eworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3R5cGUodm9p
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3RleHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxl
bWVudF9nZXRfdGV4dChXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9zZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGl0bGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X3NldF90ZXh0KFdl
YktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxl
RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzc3
NzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50UHJpdmF0ZS5oCkBA
IC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
VGl0bGVFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUaXRsZUVsZW1l
bnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIHdyYXBIVE1M
VGl0bGVFbGVtZW50KFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxU
aXRsZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Kik7CitXZWJDb3JlOjpI
VE1MVGl0bGVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQqKTsKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFVMaXN0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZmM4N2IzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudC5jcHAKQEAg
LTAsMCArMSwyMDYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVUxp
c3RFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9VX0xJU1RfRUxF
TUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29y
ZTo6SFRNTFVMaXN0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50KiByZXF1
ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFVM
aXN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Cit9CisKK1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIHdyYXBIVE1MVUxpc3RFbGVtZW50KFdl
YkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVV9MSVNUX0VMRU1FTlQoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1VfTElTVF9FTEVNRU5ULCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2Rpc3BhdGNoX2V2
ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktp
dDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9hZGRfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTFVMaXN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdV9saXN0
X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNl
KQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF91X2xpc3Rf
ZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBp
ZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVt
ZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VC
S0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkp
CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NPTVBBQ1QsCisgICAgUFJPUF9UWVBF
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxVTGlzdEVsZW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVV9MSVNUX0VMRU1FTlQob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3Qoc2VsZiwgZ192YWx1ZV9n
ZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X3NldF90eXBlX2F0dHIoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRN
TF9VX0xJU1RfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUs
IHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdV9saXN0
X2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT01QQUNULAorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym9vbGVhbigKKyAgICAgICAgICAgICJjb21wYWN0IiwKKyAgICAgICAgICAgICJIVE1MVUxpc3RF
bGVtZW50OmNvbXBhY3QiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFVM
aXN0RWxlbWVudDpjb21wYWN0IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAi
SFRNTFVMaXN0RWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MVUxpc3RFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X3VfbGlzdF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogcmVxdWVzdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF91X2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdChXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVV9MSVNUX0VMRU1FTlQo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb21wYWN0QXR0cik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2Vs
ZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogc2VsZiwgZ2Jvb2xl
YW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1VfTElTVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
Ojpjb21wYWN0QXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3VfbGlz
dF9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1VfTElTVF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9l
bGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9VX0xJU1RfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTFVMaXN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFVMaXN0RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwODU0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFVMaXN0RWxlbWVudC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4g
Y2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhU
TUxVTGlzdEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX1VfTElTVF9FTEVN
RU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVV9MSVNUX0VMRU1FTlQob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
VV9MSVNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfVV9MSVNUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVV9MSVNUX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19I
VE1MX1VfTElTVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1VfTElTVF9FTEVNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19IVE1MX1VfTElTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1VfTElTVF9FTEVN
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1VfTElTVF9FTEVNRU5UX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9I
VE1MX1VfTElTVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Q2xhc3MpKQorCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFVMaXN0RWxl
bWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRf
Z2V0X2NvbXBhY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdChXZWJLaXRET01IVE1MVUxpc3RF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRf
c2V0X2NvbXBhY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudAorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF91X2xp
c3RfZWxlbWVudF9nZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxVTGlz
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9N
SFRNTFVMaXN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3VfbGlz
dF9lbGVtZW50X3NldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFVMaXN0
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1M
VUxpc3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxVTGlzdEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnRQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkODIzZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhU
TUxVTGlzdEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVu
dFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50KiB3cmFwSFRNTFVMaXN0RWxlbWVu
dChXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50Kik7CitXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCopOworV2ViQ29yZTo6SFRNTFVMaXN0RWxl
bWVudCogY29yZShXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnRQcml2YXRlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRlb0Vs
ZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNjUwMTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNjYy
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdl
dC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoVklERU8pCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
VklERU9fRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30K
KworV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVmlkZW9FbGVt
ZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTFZpZGVvRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHdyYXBIVE1MVmlkZW9F
bGVtZW50KFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNT
RVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVklERU9fRUxFTUVO
VChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfVklERU9fRUxFTUVOVCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF92aWRlb19lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYg
RU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2
ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29k
ZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExp
c3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTSho
YW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SFRNTFZpZGVv
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnRO
YW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNh
cHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2Uq
IGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF92
aWRlb19lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7Cisg
ICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF92aWRlb19l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NP
REUoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1l
bnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX01FRElBX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVS
RkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfV0lEVEgsCisgICAgUFJP
UF9IRUlHSFQsCisgICAgUFJPUF9WSURFT19XSURUSCwKKyAgICBQUk9QX1ZJREVPX0hFSUdIVCwK
KyAgICBQUk9QX1BPU1RFUiwKKyAgICBQUk9QX1BMQVlTX0lOTElORSwKKyAgICBQUk9QX1dFQktJ
VF9TVVBQT1JUU19GVUxMU0NSRUVOLAorICAgIFBST1BfV0VCS0lUX0RJU1BMQVlJTkdfRlVMTFND
UkVFTiwKKyAgICBQUk9QX1dFQktJVF9XSVJFTEVTU19WSURFT19QTEFZQkFDS19ESVNBQkxFRCwK
KyAgICBQUk9QX1dFQktJVF9ERUNPREVEX0ZSQU1FX0NPVU5ULAorICAgIFBST1BfV0VCS0lUX0RS
T1BQRURfRlJBTUVfQ09VTlQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01IVE1MVmlkZW9FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1ZJREVPX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9XSURU
SDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3dpZHRoKHNlbGYs
IGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9IRUlHSFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9oZWln
aHQoc2VsZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1BPU1RFUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRf
c2V0X3Bvc3RlcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1BMQVlTX0lOTElORToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfc2V0X3BsYXlzX2lubGluZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFu
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfV0lSRUxFU1Nf
VklERU9fUExBWUJBQ0tfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF92aWRlb19l
bGVtZW50X3NldF93ZWJraXRfd2lyZWxlc3NfdmlkZW9fcGxheWJhY2tfZGlzYWJsZWQoc2VsZiwg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9W
SURFT19FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBj
YXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9WSURFT19XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF92aWRlb193aWR0
aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WSURFT19IRUlHSFQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxl
bWVudF9nZXRfdmlkZW9faGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BPU1RFUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3Bvc3RlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9QTEFZU19JTkxJTkU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF9wbGF5c19pbmxpbmUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX1NVUFBPUlRTX0ZVTExT
Q1JFRU46CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRt
bF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfc3VwcG9ydHNfZnVsbHNjcmVlbihzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfRElTUExBWUlOR19GVUxMU0NSRUVO
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9nZXRfd2Via2l0X2Rpc3BsYXlpbmdfZnVsbHNjcmVlbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfV0lSRUxFU1NfVklERU9fUExBWUJBQ0tf
RElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
aHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfd2lyZWxlc3NfdmlkZW9fcGxheWJhY2tfZGlz
YWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0RFQ09E
RURfRlJBTUVfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X2RlY29kZWRfZnJhbWVfY291bnQoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0RST1BQRURfRlJBTUVf
Q09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
dmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X2Ryb3BwZWRfZnJhbWVfY291bnQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfY2xh
c3NfaW5pdChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
dmlkZW9fZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAg
ICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTFZpZGVvRWxlbWVudDp3aWR0aCIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBndWxvbmcgSFRNTFZpZGVvRWxlbWVudDp3aWR0aCIsCisgICAg
ICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3Vsb25nKAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTFZpZGVvRWxl
bWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxWaWRlb0Vs
ZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVklERU9fV0lE
VEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJ2aWRlby13aWR0
aCIsCisgICAgICAgICAgICAiSFRNTFZpZGVvRWxlbWVudDp2aWRlby13aWR0aCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1bG9uZyBIVE1MVmlkZW9FbGVtZW50OnZpZGVvLXdpZHRoIiwKKyAg
ICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WSURFT19IRUlHSFQsCisgICAgICAgIGdfcGFy
YW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJ2aWRlby1oZWlnaHQiLAorICAgICAgICAgICAg
IkhUTUxWaWRlb0VsZW1lbnQ6dmlkZW8taGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z3Vsb25nIEhUTUxWaWRlb0VsZW1lbnQ6dmlkZW8taGVpZ2h0IiwKKyAgICAgICAgICAgIDAsIEdf
TUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9QT1NURVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAicG9zdGVyIiwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OnBvc3RlciIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFZpZGVvRWxlbWVudDpwb3N0ZXIi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfUExBWVNfSU5MSU5FLAorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym9vbGVhbigKKyAgICAgICAgICAgICJwbGF5cy1pbmxpbmUiLAorICAgICAgICAgICAgIkhUTUxW
aWRlb0VsZW1lbnQ6cGxheXMtaW5saW5lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29s
ZWFuIEhUTUxWaWRlb0VsZW1lbnQ6cGxheXMtaW5saW5lIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1dFQktJVF9TVVBQT1JUU19GVUxMU0NSRUVOLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJ3ZWJraXQtc3VwcG9ydHMtZnVsbHNjcmVlbiIsCisgICAgICAgICAg
ICAiSFRNTFZpZGVvRWxlbWVudDp3ZWJraXQtc3VwcG9ydHMtZnVsbHNjcmVlbiIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxWaWRlb0VsZW1lbnQ6d2Via2l0LXN1cHBvcnRz
LWZ1bGxzY3JlZW4iLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfRElTUExBWUlOR19GVUxM
U0NSRUVOLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3ZWJr
aXQtZGlzcGxheWluZy1mdWxsc2NyZWVuIiwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50
OndlYmtpdC1kaXNwbGF5aW5nLWZ1bGxzY3JlZW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Ym9vbGVhbiBIVE1MVmlkZW9FbGVtZW50OndlYmtpdC1kaXNwbGF5aW5nLWZ1bGxzY3JlZW4iLAor
ICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfV0lSRUxFU1NfVklERU9fUExBWUJBQ0tfRElTQUJM
RUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndlYmtpdC13
aXJlbGVzcy12aWRlby1wbGF5YmFjay1kaXNhYmxlZCIsCisgICAgICAgICAgICAiSFRNTFZpZGVv
RWxlbWVudDp3ZWJraXQtd2lyZWxlc3MtdmlkZW8tcGxheWJhY2stZGlzYWJsZWQiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFZpZGVvRWxlbWVudDp3ZWJraXQtd2lyZWxl
c3MtdmlkZW8tcGxheWJhY2stZGlzYWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lU
X0RFQ09ERURfRlJBTUVfQ09VTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAg
ICAgICAgICJ3ZWJraXQtZGVjb2RlZC1mcmFtZS1jb3VudCIsCisgICAgICAgICAgICAiSFRNTFZp
ZGVvRWxlbWVudDp3ZWJraXQtZGVjb2RlZC1mcmFtZS1jb3VudCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGd1bG9uZyBIVE1MVmlkZW9FbGVtZW50OndlYmtpdC1kZWNvZGVkLWZyYW1lLWNvdW50
IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfRFJPUFBFRF9GUkFNRV9D
T1VOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgIndlYmtpdC1k
cm9wcGVkLWZyYW1lLWNvdW50IiwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OndlYmtp
dC1kcm9wcGVkLWZyYW1lLWNvdW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIEhU
TUxWaWRlb0VsZW1lbnQ6d2Via2l0LWRyb3BwZWQtZnJhbWUtY291bnQiLAorICAgICAgICAgICAg
MCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2luaXQoV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVx
dWVzdCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfd2Via2l0X2Vu
dGVyX2Z1bGxzY3JlZW4oV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwgR0Vycm9yKiog
ZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9W
SURFT19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPndl
YmtpdEVudGVyRnVsbHNjcmVlbihlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3dlYmtpdF9leGl0X2Z1bGxzY3JlZW4oV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
d2Via2l0RXhpdEZ1bGxzY3JlZW4oKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBF
TkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRf
d2Via2l0X2VudGVyX2Z1bGxfc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYs
IEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJy
b3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBpdGVtLT53ZWJraXRFbnRlckZ1bGxTY3JlZW4oZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8K
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJraXRfZXhpdF9mdWxs
X3NjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT53ZWJraXRFeGl0RnVsbFNjcmVlbigpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF92
aWRlb19lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQor
eworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVP
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmdldFVuc2ln
bmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MVmlkZW9F
bGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNl
dFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIs
IHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF92
aWRlb19lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURF
T19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5nZXRVbnNp
Z25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVpZ2h0QXR0cik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpoZWlnaHRB
dHRyLCB2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0
bWxfdmlkZW9fZWxlbWVudF9nZXRfdmlkZW9fd2lkdGgoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVu
dCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVt
LT52aWRlb1dpZHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU8pICovCit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfdmlk
ZW9faGVpZ2h0KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+dmlkZW9IZWlnaHQoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF9wb3N0ZXIoV2ViS2l0RE9NSFRNTFZpZGVv
RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnBvc3RlckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfcG9zdGVyKFdlYktpdERPTUhUTUxW
aWRlb0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwb3N0ZXJBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVT
RURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21faHRtbF92aWRlb19lbGVtZW50X2dldF9wbGF5c19pbmxpbmUoV2ViS2l0RE9NSFRNTFZpZGVv
RWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRN
TFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cGxheXNpbmxpbmVBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19l
bGVtZW50X3NldF9wbGF5c19pbmxpbmUoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpwbGF5c2lubGluZUF0dHIsIHZhbHVlKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJM
RShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRf
Z2V0X3dlYmtpdF9zdXBwb3J0c19mdWxsc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVklERU9fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0Vs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+d2Via2l0U3VwcG9ydHNGdWxsc2NyZWVuKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kaXNwbGF5aW5nX2Z1bGxzY3JlZW4oV2ViS2l0RE9N
SFRNTFZpZGVvRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT53ZWJraXREaXNwbGF5aW5nRnVsbHNjcmVlbigpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfd2lyZWxlc3Nfdmlk
ZW9fcGxheWJhY2tfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdFdpcmVsZXNzVmlkZW9QbGF5
YmFja0Rpc2FibGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldpcmVsZXNz
IFBsYXliYWNrIFRhcmdldCIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsK
KyNlbmRpZiAvKiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAqLworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVt
ZW50X3NldF93ZWJraXRfd2lyZWxlc3NfdmlkZW9fcGxheWJhY2tfZGlzYWJsZWQoV2ViS2l0RE9N
SFRNTFZpZGVvRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJ
REVPKQorI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0V2Via2l0
V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJXaXJlbGVzcyBQbGF5YmFjayBUYXJnZXQiKQorI2VuZGlmIC8q
IEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICovCisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9
CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X2RlY29k
ZWRfZnJhbWVfY291bnQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVklERU8pCisjaWYgRU5BQkxFKE1FRElBX1NUQVRJU1RJQ1MpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyBy
ZXN1bHQgPSBpdGVtLT53ZWJraXREZWNvZGVkRnJhbWVDb3VudCgpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJNZWRpYSBTdGF0aXN0aWNzIikKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU1RBVElTVElDUykgKi8KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9nZXRfd2Via2l0X2Ryb3BwZWRfZnJhbWVfY291bnQoV2ViS2l0RE9NSFRNTFZp
ZGVvRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKE1FRElB
X1NUQVRJU1RJQ1MpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT53ZWJraXREcm9wcGVkRnJh
bWVDb3VudCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJNZWRpYSBTdGF0aXN0
aWNzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoTUVESUFfU1RBVElTVElDUykgKi8KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVt
ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwODFmNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudC5oCkBAIC0wLDAgKzEsMjYyIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxWaWRl
b0VsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50X2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9WSURFT19FTEVNRU5UICAgICAgICAg
ICAgKHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9WSURFT19FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1ZJREVPX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVklE
RU9fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9WSURFT19FTEVNRU5ULCBXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5U
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9IVE1MX1ZJREVPX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxf
VklERU9fRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9WSURFT19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX1ZJREVPX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVklERU9fRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudENsYXNzIHsKKyAgICBX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfd2Via2l0X2VudGVyX2Z1
bGxzY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICogQGVy
cm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3dlYmtpdF9lbnRlcl9mdWxsc2Ny
ZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJraXRfZXhpdF9mdWxsc2Ny
ZWVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3Zp
ZGVvX2VsZW1lbnRfd2Via2l0X2V4aXRfZnVsbHNjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJr
aXRfZW50ZXJfZnVsbF9zY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxl
bWVudAorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3dlYmtpdF9l
bnRlcl9mdWxsX3NjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmLCBHRXJyb3Iq
KiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfd2Via2l0
X2V4aXRfZnVsbF9zY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVu
dAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJraXRfZXhpdF9mdWxsX3NjcmVlbihXZWJLaXRE
T01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X2dldF93aWR0aChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICogQHZhbHVlOiBBICNndWxvbmcKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3Zp
ZGVvX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYsIGd1
bG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0
X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X2hlaWdodChX
ZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdmlkZW9fZWxlbWVudF9zZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxW
aWRlb0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfdmlkZW9fd2lk
dGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF92aWRlb193aWR0aChX
ZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdmlkZW9fZWxlbWVudF9nZXRfdmlkZW9faGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxWaWRlb0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxf
dmlkZW9fZWxlbWVudF9nZXRfdmlkZW9faGVpZ2h0KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF9wb3N0
ZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3Bvc3RlcihXZWJLaXRE
T01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9zZXRfcG9zdGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0Vs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3Bv
c3RlcihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF9wbGF5c19pbmxp
bmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfcGxheXNfaW5s
aW5lKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF92aWRlb19lbGVtZW50X3NldF9wbGF5c19pbmxpbmU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
dmlkZW9fZWxlbWVudF9zZXRfcGxheXNfaW5saW5lKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9nZXRfd2Via2l0X3N1cHBvcnRzX2Z1bGxzY3JlZW46CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X3N1cHBvcnRzX2Z1bGxzY3JlZW4oV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kaXNwbGF5aW5nX2Z1bGxzY3JlZW46CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X2Rpc3BsYXlpbmdfZnVs
bHNjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X3dpcmVsZXNzX3ZpZGVvX3BsYXli
YWNrX2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0
X3dlYmtpdF93aXJlbGVzc192aWRlb19wbGF5YmFja19kaXNhYmxlZChXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVu
dF9zZXRfd2Via2l0X3dpcmVsZXNzX3ZpZGVvX3BsYXliYWNrX2Rpc2FibGVkOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3dlYmtpdF93aXJlbGVzc192aWRlb19wbGF5YmFja19k
aXNhYmxlZChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9kZWNv
ZGVkX2ZyYW1lX2NvdW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRf
d2Via2l0X2RlY29kZWRfZnJhbWVfY291bnQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9k
cm9wcGVkX2ZyYW1lX2NvdW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxWaWRlb0VsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9n
ZXRfd2Via2l0X2Ryb3BwZWRfZnJhbWVfY291bnQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCog
c2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFZpZGVvRWxl
bWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjcxZDAx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxWaWRlb0VsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudC5oPgorI2lm
IEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MVmlkZW9F
bGVtZW50KiB3cmFwSFRNTFZpZGVvRWxlbWVudChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kik7
CitXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVu
dCopOworV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVmlkZW9F
bGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShWSURF
TykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRQcml2YXRlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGNjODEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhpc3RvcnkuY3BwCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSGlzdG9y
eS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTUhpc3RvcnlQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJ
VF9ET01fSElTVE9SWV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShvYmosIFdFQktJVF9ET01fVFlQRV9ISVNUT1JZLCBXZWJLaXRET01IaXN0b3J5UHJpdmF0ZSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhpc3RvcnlQcml2YXRlIHsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6SGlzdG9yeT4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NSGlzdG9yeVByaXZhdGU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IaXN0b3J5KiBraXQoV2ViQ29yZTo6
SGlzdG9yeSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX0hJU1RPUlkocmV0KTsKKworICAgIHJldHVybiB3cmFwSGlzdG9yeShv
YmopOworfQorCitXZWJDb3JlOjpIaXN0b3J5KiBjb3JlKFdlYktpdERPTUhpc3RvcnkqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIaXN0b3J5
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NSGlzdG9yeSogd3JhcEhpc3RvcnkoV2ViQ29yZTo6SGlzdG9yeSogY29yZU9iamVjdCkK
K3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSElTVE9S
WShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hJU1RPUlksICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0RE9NSGlzdG9yeSwgd2Via2l0X2RvbV9oaXN0b3J5LCBXRUJLSVRfRE9N
X1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2hpc3RvcnlfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTUhpc3RvcnlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9I
SVNUT1JZX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
Ojpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9N
SGlzdG9yeVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2hpc3Rvcnlf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9oaXN0b3J5X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhp
c3RvcnkqIHNlbGYgPSBXRUJLSVRfRE9NX0hJU1RPUlkob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0
X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2hpc3RvcnlfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9oaXN0b3J5X2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21faGlzdG9yeV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMp
OworCisgICAgV2ViS2l0RE9NSGlzdG9yeVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0hJU1RP
UllfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SGlzdG9yeSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmpl
Y3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9oaXN0b3J5X2NsYXNzX2luaXQoV2ViS2l0RE9NSGlzdG9yeUNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xh
c3MsIHNpemVvZihXZWJLaXRET01IaXN0b3J5UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+
Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2hpc3RvcnlfY29uc3RydWN0b3I7CisgICAgZ29iamVj
dENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21faGlzdG9yeV9maW5hbGl6ZTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faGlzdG9yeV9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmco
CisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJIaXN0b3J5Omxlbmd0aCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBIaXN0b3J5Omxlbmd0aCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9oaXN0b3J5X2luaXQoV2ViS2l0RE9NSGlz
dG9yeSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01IaXN0b3J5UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fSElTVE9SWV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdl
YktpdERPTUhpc3RvcnlQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9oaXN0b3J5X2Jh
Y2soV2ViS2l0RE9NSGlzdG9yeSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hJU1RP
Ulkoc2VsZikpOworICAgIFdlYkNvcmU6Okhpc3RvcnkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+YmFjaygpOworfQorCit2b2lkIHdlYmtpdF9kb21faGlzdG9yeV9mb3J3
YXJkKFdlYktpdERPTUhpc3RvcnkqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ISVNU
T1JZKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIaXN0b3J5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPmZvcndhcmQoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2hpc3Rvcnlf
Z28oV2ViS2l0RE9NSGlzdG9yeSogc2VsZiwgZ2xvbmcgZGlzdGFuY2UpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ISVNUT1JZKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIaXN0b3J5KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmdvKGRpc3RhbmNlKTsKK30KKworZ3Vsb25n
IHdlYmtpdF9kb21faGlzdG9yeV9nZXRfbGVuZ3RoKFdlYktpdERPTUhpc3RvcnkqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSElTVE9SWShzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SGlzdG9yeSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0
ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IaXN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xNjdjNDNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IaXN0b3J5LmgKQEAg
LTAsMCArMSw5MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01IaXN0b3J5X2gKKyNkZWZpbmUgV2ViS2l0RE9NSGlzdG9yeV9oCisKKyNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfSElTVE9SWSAgICAgICAgICAgICh3ZWJraXRfZG9tX2hpc3Rvcnlf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ISVNUT1JZKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ISVNUT1JZ
LCBXZWJLaXRET01IaXN0b3J5KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ISVNUT1JZX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9ISVNUT1JZLCBXZWJLaXRET01IaXN0b3J5Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SElTVE9SWShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSElTVE9SWSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSElTVE9SWV9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfSElTVE9SWSkpCisjZGVmaW5lIFdFQktJVF9ET01fSElTVE9SWV9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSElT
VE9SWSwgV2ViS2l0RE9NSGlzdG9yeUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IaXN0b3J5
IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01IaXN0b3J5Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faGlzdG9yeV9nZXRfdHlw
ZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2hpc3RvcnlfYmFjazoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IaXN0b3J5CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faGlzdG9yeV9iYWNrKFdlYktpdERPTUhpc3RvcnkqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faGlzdG9yeV9mb3J3YXJkOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhpc3RvcnkKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9oaXN0b3J5X2ZvcndhcmQoV2ViS2l0RE9NSGlzdG9yeSog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9oaXN0b3J5X2dvOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhpc3RvcnkKKyAqIEBkaXN0YW5jZTogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9oaXN0b3J5X2dvKFdl
YktpdERPTUhpc3RvcnkqIHNlbGYsIGdsb25nIGRpc3RhbmNlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2hpc3RvcnlfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IaXN0b3J5Cisg
KgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9oaXN0b3J5X2dldF9sZW5ndGgoV2ViS2l0
RE9NSGlzdG9yeSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IaXN0b3J5X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSGlzdG9yeVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSGlzdG9yeVByaXZhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzg4YThiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IaXN0b3J5UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSGlzdG9yeVByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01IaXN0b3J5UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hp
c3RvcnkuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSGlzdG9yeS5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhpc3RvcnkqIHdyYXBIaXN0b3J5KFdlYkNvcmU6Okhp
c3RvcnkqKTsKK1dlYktpdERPTUhpc3RvcnkqIGtpdChXZWJDb3JlOjpIaXN0b3J5Kik7CitXZWJD
b3JlOjpIaXN0b3J5KiBjb3JlKFdlYktpdERPTUhpc3RvcnkqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSGlzdG9yeVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01LZXlib2FyZEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5Ym9hcmRFdmVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0NzAxOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NS2V5Ym9hcmRFdmVudC5jcHAKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4K
KyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUtl
eWJvYXJkRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9N
S2V5Ym9hcmRFdmVudCoga2l0KFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIG9iaikKK3sKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RXZlbnQqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OktleWJvYXJkRXZlbnQqIGNvcmUoV2ViS2l0
RE9NS2V5Ym9hcmRFdmVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OktleWJvYXJkRXZlbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01LZXlib2FyZEV2ZW50KiB3cmFwS2V5
Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVChn
X29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0tFWUJPQVJEX0VWRU5ULCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitH
X0RFRklORV9UWVBFKFdlYktpdERPTUtleWJvYXJkRXZlbnQsIHdlYmtpdF9kb21fa2V5Ym9hcmRf
ZXZlbnQsIFdFQktJVF9ET01fVFlQRV9VSV9FVkVOVCkKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfS0VZX0lERU5USUZJRVIsCisgICAgUFJPUF9LRVlfTE9DQVRJT04sCisgICAgUFJP
UF9DVFJMX0tFWSwKKyAgICBQUk9QX1NISUZUX0tFWSwKKyAgICBQUk9QX0FMVF9LRVksCisgICAg
UFJPUF9NRVRBX0tFWSwKKyAgICBQUk9QX0FMVF9HUkFQSF9LRVksCit9OworCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0tFWUJPQVJEX0VW
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
S0VZX0lERU5USUZJRVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2tleV9pZGVudGlmaWVyKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0tFWV9MT0NBVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWxvbmcodmFsdWUsIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2tleV9sb2NhdGlvbihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DVFJMX0tFWToKKyAgICAgICAg
Z192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRf
Y3RybF9rZXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0hJRlRfS0VZ
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2tleWJvYXJk
X2V2ZW50X2dldF9zaGlmdF9rZXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfQUxUX0tFWToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2tleShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9NRVRBX0tFWToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwg
d2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfbWV0YV9rZXkoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQUxUX0dSQVBIX0tFWToKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2dyYXBoX2tl
eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2tleWJvYXJk
X2V2ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudENsYXNzKiByZXF1ZXN0Q2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9rZXlib2FyZF9ldmVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfS0VZX0lE
RU5USUZJRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAia2V5
LWlkZW50aWZpZXIiLAorICAgICAgICAgICAgIktleWJvYXJkRXZlbnQ6a2V5LWlkZW50aWZpZXIi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogS2V5Ym9hcmRFdmVudDprZXktaWRlbnRp
ZmllciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0tFWV9MT0NBVElPTiwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3Vsb25nKAorICAgICAgICAgICAgImtleS1sb2NhdGlvbiIsCisgICAgICAgICAgICAiS2V5
Ym9hcmRFdmVudDprZXktbG9jYXRpb24iLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcg
S2V5Ym9hcmRFdmVudDprZXktbG9jYXRpb24iLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0NUUkxfS0VZLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAg
ICJjdHJsLWtleSIsCisgICAgICAgICAgICAiS2V5Ym9hcmRFdmVudDpjdHJsLWtleSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEtleWJvYXJkRXZlbnQ6Y3RybC1rZXkiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9TSElGVF9LRVksCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFu
KAorICAgICAgICAgICAgInNoaWZ0LWtleSIsCisgICAgICAgICAgICAiS2V5Ym9hcmRFdmVudDpz
aGlmdC1rZXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBLZXlib2FyZEV2ZW50
OnNoaWZ0LWtleSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMVF9LRVksCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImFsdC1rZXkiLAorICAgICAgICAgICAgIktl
eWJvYXJkRXZlbnQ6YWx0LWtleSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEtl
eWJvYXJkRXZlbnQ6YWx0LWtleSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FVEFfS0VZLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJtZXRhLWtleSIsCisgICAg
ICAgICAgICAiS2V5Ym9hcmRFdmVudDptZXRhLWtleSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdib29sZWFuIEtleWJvYXJkRXZlbnQ6bWV0YS1rZXkiLAorICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9B
TFRfR1JBUEhfS0VZLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAg
ICJhbHQtZ3JhcGgta2V5IiwKKyAgICAgICAgICAgICJLZXlib2FyZEV2ZW50OmFsdC1ncmFwaC1r
ZXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBLZXlib2FyZEV2ZW50OmFsdC1n
cmFwaC1rZXkiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50
X2luaXQoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0
X21vZGlmaWVyX3N0YXRlKFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBrZXlJZGVudGlmaWVyQXJnKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJPQVJE
X0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoa2V5SWRlbnRp
ZmllckFyZywgRkFMU0UpOworICAgIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkS2V5SWRlbnRpZmllckFy
ZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChrZXlJZGVudGlmaWVyQXJnKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5nZXRNb2RpZmllclN0YXRlKGNvbnZlcnRlZEtleUlkZW50aWZpZXJB
cmcpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9rZXlib2FyZF9l
dmVudF9pbml0X2tleWJvYXJkX2V2ZW50KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB0eXBlLCBnYm9vbGVhbiBjYW5CdWJibGUsIGdib29sZWFuIGNhbmNlbGFibGUs
IFdlYktpdERPTURPTVdpbmRvdyogdmlldywgY29uc3QgZ2NoYXIqIGtleUlkZW50aWZpZXIsIGd1
bG9uZyBsb2NhdGlvbiwgZ2Jvb2xlYW4gY3RybEtleSwgZ2Jvb2xlYW4gYWx0S2V5LCBnYm9vbGVh
biBzaGlmdEtleSwgZ2Jvb2xlYW4gbWV0YUtleSwgZ2Jvb2xlYW4gYWx0R3JhcGhLZXkpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh0eXBlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJ
TkRPVyh2aWV3KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChrZXlJZGVudGlmaWVyKTsKKyAgICBX
ZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFR5cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodHlwZSk7Cisg
ICAgV2ViQ29yZTo6RE9NV2luZG93KiBjb252ZXJ0ZWRWaWV3ID0gV2ViS2l0Ojpjb3JlKHZpZXcp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEtleUlkZW50aWZpZXIgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoa2V5SWRlbnRpZmllcik7CisgICAgaXRlbS0+aW5pdEtleWJvYXJkRXZlbnQoY29u
dmVydGVkVHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCBjb252ZXJ0ZWRWaWV3LCBjb252ZXJ0
ZWRLZXlJZGVudGlmaWVyLCBsb2NhdGlvbiwgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0
YUtleSwgYWx0R3JhcGhLZXkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9rZXlib2FyZF9ldmVu
dF9nZXRfa2V5X2lkZW50aWZpZXIoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6S2V5Ym9hcmRFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5rZXlJZGVudGlmaWVyKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50
X2dldF9rZXlfbG9jYXRpb24oV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6S2V5Ym9hcmRFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcg
cmVzdWx0ID0gaXRlbS0+bG9jYXRpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9v
bGVhbiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9jdHJsX2tleShXZWJLaXRET01LZXli
b2FyZEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VW
RU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jdHJsS2V5KCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9rZXlib2FyZF9l
dmVudF9nZXRfc2hpZnRfa2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPnNoaWZ0S2V5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2tleShXZWJLaXRE
T01LZXlib2FyZEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJP
QVJEX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5hbHRL
ZXkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2tleWJv
YXJkX2V2ZW50X2dldF9tZXRhX2tleShXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VWRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tZXRhS2V5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2dyYXBoX2tl
eShXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0tFWUJPQVJEX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6S2V5Ym9hcmRF
dmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5hbHRHcmFwaEtleSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NS2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3ZDA1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
S2V5Ym9hcmRFdmVudC5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01L
ZXlib2FyZEV2ZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudF9oCisKKyNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01VSUV2ZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9LRVlCT0FSRF9FVkVOVCAgICAgICAgICAg
ICh3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fS0VZQk9BUkRfRVZFTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0tFWUJPQVJEX0VWRU5ULCBXZWJLaXRET01LZXli
b2FyZEV2ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
S0VZQk9BUkRfRVZFTlQsIFdlYktpdERPTUtleWJvYXJkRXZlbnRDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfS0VZQk9BUkRfRVZFTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VWRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9LRVlCT0FSRF9FVkVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0tFWUJPQVJEX0VWRU5U
LCBXZWJLaXRET01LZXlib2FyZEV2ZW50Q2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01fS0VZ
Qk9BUkRfRVZFTlRfS0VZX0xPQ0FUSU9OX1NUQU5EQVJEOgorICovCisjZGVmaW5lIFdFQktJVF9E
T01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FUSU9OX1NUQU5EQVJEIDB4MDAKKworLyoqCisgKiBX
RUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElPTl9MRUZUOgorICovCisjZGVmaW5l
IFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FUSU9OX0xFRlQgMHgwMQorCisvKioK
KyAqIFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FUSU9OX1JJR0hUOgorICovCisj
ZGVmaW5lIFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FUSU9OX1JJR0hUIDB4MDIK
KworLyoqCisgKiBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElPTl9OVU1QQUQ6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlfTE9DQVRJT05fTlVN
UEFEIDB4MDMKKworc3RydWN0IF9XZWJLaXRET01LZXlib2FyZEV2ZW50IHsKKyAgICBXZWJLaXRE
T01VSUV2ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NS2V5Ym9h
cmRFdmVudENsYXNzIHsKKyAgICBXZWJLaXRET01VSUV2ZW50Q2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfdHlw
ZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9tb2RpZmll
cl9zdGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01LZXlib2FyZEV2ZW50CisgKiBAa2V5SWRl
bnRpZmllckFyZzogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9tb2RpZmll
cl9zdGF0ZShXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmLCBjb25zdCBnY2hhcioga2V5SWRl
bnRpZmllckFyZyk7CisKKy8qKgorICogd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9pbml0X2tl
eWJvYXJkX2V2ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUtleWJvYXJkRXZlbnQKKyAqIEB0
eXBlOiBBICNnY2hhcgorICogQGNhbkJ1YmJsZTogQSAjZ2Jvb2xlYW4KKyAqIEBjYW5jZWxhYmxl
OiBBICNnYm9vbGVhbgorICogQHZpZXc6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGtleUlk
ZW50aWZpZXI6IEEgI2djaGFyCisgKiBAbG9jYXRpb246IEEgI2d1bG9uZworICogQGN0cmxLZXk6
IEEgI2dib29sZWFuCisgKiBAYWx0S2V5OiBBICNnYm9vbGVhbgorICogQHNoaWZ0S2V5OiBBICNn
Ym9vbGVhbgorICogQG1ldGFLZXk6IEEgI2dib29sZWFuCisgKiBAYWx0R3JhcGhLZXk6IEEgI2di
b29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZl
bnRfaW5pdF9rZXlib2FyZF9ldmVudChXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdHlwZSwgZ2Jvb2xlYW4gY2FuQnViYmxlLCBnYm9vbGVhbiBjYW5jZWxhYmxlLCBX
ZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIGNvbnN0IGdjaGFyKiBrZXlJZGVudGlmaWVyLCBndWxv
bmcgbG9jYXRpb24sIGdib29sZWFuIGN0cmxLZXksIGdib29sZWFuIGFsdEtleSwgZ2Jvb2xlYW4g
c2hpZnRLZXksIGdib29sZWFuIG1ldGFLZXksIGdib29sZWFuIGFsdEdyYXBoS2V5KTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9rZXlfaWRlbnRpZmllcjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01LZXlib2FyZEV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2tl
eV9pZGVudGlmaWVyKFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2tleV9sb2NhdGlvbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01LZXlib2FyZEV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8KK1dF
QktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9rZXlfbG9jYXRp
b24oV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9r
ZXlib2FyZF9ldmVudF9nZXRfY3RybF9rZXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NS2V5Ym9h
cmRFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2N0cmxfa2V5KFdlYktpdERPTUtl
eWJvYXJkRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRf
Z2V0X3NoaWZ0X2tleToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01LZXlib2FyZEV2ZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfc2hpZnRfa2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2FsdF9rZXk6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NS2V5Ym9hcmRFdmVudAorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fa2V5Ym9hcmRf
ZXZlbnRfZ2V0X2FsdF9rZXkoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfbWV0YV9rZXk6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NS2V5Ym9hcmRFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8K
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X21ldGFf
a2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
a2V5Ym9hcmRfZXZlbnRfZ2V0X2FsdF9ncmFwaF9rZXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
S2V5Ym9hcmRFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2FsdF9ncmFwaF9rZXko
V2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXZWJLaXRET01LZXlib2FyZEV2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5Ym9hcmRF
dmVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5Ym9hcmRFdmVudFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWZhNjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01L
ZXlib2FyZEV2ZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudFByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01LZXlib2FyZEV2ZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NS2V5Ym9h
cmRFdmVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUtleWJvYXJkRXZlbnQq
IHdyYXBLZXlib2FyZEV2ZW50KFdlYkNvcmU6OktleWJvYXJkRXZlbnQqKTsKK1dlYktpdERPTUtl
eWJvYXJkRXZlbnQqIGtpdChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CitXZWJDb3JlOjpLZXli
b2FyZEV2ZW50KiBjb3JlKFdlYktpdERPTUtleWJvYXJkRXZlbnQqKTsKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NS2V5Ym9hcmRFdmVudFByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2ZlOTQzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTUtleWZyYW1lRWZmZWN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0lt
cG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NS2V5ZnJhbWVF
ZmZlY3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QqIGtpdChXZWJDb3JlOjpLZXlm
cmFtZUVmZmVjdCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAg
IHJldHVybiBXRUJLSVRfRE9NX0tFWUZSQU1FX0VGRkVDVChyZXQpOworCisgICAgcmV0dXJuIHdy
YXBLZXlmcmFtZUVmZmVjdChvYmopOworfQorCitXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdCogY29y
ZShXZWJLaXRET01LZXlmcmFtZUVmZmVjdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OktleWZyYW1lRWZmZWN0Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NS2V5ZnJhbWVFZmZl
Y3QqIHdyYXBLZXlmcmFtZUVmZmVjdChXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdCogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fS0VZ
RlJBTUVfRUZGRUNUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfS0VZRlJBTUVfRUZGRUNU
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BTklNQVRJT05TKQorCitHX0RFRklO
RV9UWVBFKFdlYktpdERPTUtleWZyYW1lRWZmZWN0LCB3ZWJraXRfZG9tX2tleWZyYW1lX2VmZmVj
dCwgV0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9FRkZFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fa2V5ZnJhbWVfZWZmZWN0X2NsYXNzX2luaXQoV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0Q2xhc3MpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2tleWZyYW1lX2VmZmVjdF9pbml0KFdlYktpdERP
TUtleWZyYW1lRWZmZWN0KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVm
ZmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZDNkNjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0LmgKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01LZXlmcmFtZUVm
ZmVjdF9oCisjZGVmaW5lIFdlYktpdERPTUtleWZyYW1lRWZmZWN0X2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9LRVlGUkFNRV9FRkZFQ1QgICAgICAgICAgICAod2Via2l0
X2RvbV9rZXlmcmFtZV9lZmZlY3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlG
UkFNRV9FRkZFQ1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0tFWUZSQU1FX0VGRkVDVCwgV2ViS2l0RE9NS2V5ZnJhbWVF
ZmZlY3QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0tFWUZSQU1FX0VGRkVDVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfS0VZ
RlJBTUVfRUZGRUNULCBXZWJLaXRET01LZXlmcmFtZUVmZmVjdENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0tFWUZSQU1FX0VGRkVDVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfS0VZRlJBTUVfRUZGRUNUKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19LRVlGUkFNRV9FRkZFQ1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0tFWUZSQU1FX0VGRkVDVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fS0VZRlJBTUVfRUZGRUNUX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9LRVlGUkFNRV9F
RkZFQ1QsIFdlYktpdERPTUtleWZyYW1lRWZmZWN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TUtleWZyYW1lRWZmZWN0IHsKKyAgICBXZWJLaXRET01BbmltYXRpb25FZmZlY3QgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01LZXlmcmFtZUVmZmVjdENsYXNzIHsKKyAg
ICBXZWJLaXRET01BbmltYXRpb25FZmZlY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2tleWZyYW1lX2VmZmVjdF9nZXRfdHlwZSh2b2lkKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTUtleWZyYW1lRWZmZWN0X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NS2V5ZnJhbWVFZmZlY3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0UHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTZkZDcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NS2V5ZnJhbWVF
ZmZlY3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZnJhbWVFZmZlY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QuaD4KKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMp
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QqIHdyYXBLZXlm
cmFtZUVmZmVjdChXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdCopOworV2ViS2l0RE9NS2V5ZnJhbWVF
ZmZlY3QqIGtpdChXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdCopOworV2ViQ29yZTo6S2V5ZnJhbWVF
ZmZlY3QqIGNvcmUoV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogRU5BQkxFKFdFQl9BTklNQVRJT05TKSAqLworCisjZW5kaWYgLyog
V2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9j
YXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Mb2NhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzFjYjE0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9jYXRpb24uY3BwCkBA
IC0wLDAgKzEsMzI4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTG9jYXRpb24uaCIKKworI2luY2x1ZGUg
PFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJL
aXRET01Mb2NhdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9MT0NBVElPTl9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9MT0NBVElPTiwgV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TG9j
YXRpb24+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTUxvY2F0aW9uUHJpdmF0ZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTUxvY2F0aW9uKiBraXQoV2ViQ29yZTo6TG9jYXRpb24q
IG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3Bv
aW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VC
S0lUX0RPTV9MT0NBVElPTihyZXQpOworCisgICAgcmV0dXJuIHdyYXBMb2NhdGlvbihvYmopOwor
fQorCitXZWJDb3JlOjpMb2NhdGlvbiogY29yZShXZWJLaXRET01Mb2NhdGlvbiogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkxvY2F0aW9uKj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0
RE9NTG9jYXRpb24qIHdyYXBMb2NhdGlvbihXZWJDb3JlOjpMb2NhdGlvbiogY29yZU9iamVjdCkK
K3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fTE9DQVRJ
T04oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9MT0NBVElPTiwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19E
RUZJTkVfVFlQRShXZWJLaXRET01Mb2NhdGlvbiwgd2Via2l0X2RvbV9sb2NhdGlvbiwgV0VCS0lU
X0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfSFJFRiwK
KyAgICBQUk9QX1BST1RPQ09MLAorICAgIFBST1BfSE9TVCwKKyAgICBQUk9QX0hPU1ROQU1FLAor
ICAgIFBST1BfUE9SVCwKKyAgICBQUk9QX1BBVEhOQU1FLAorICAgIFBST1BfU0VBUkNILAorICAg
IFBST1BfSEFTSCwKKyAgICBQUk9QX09SSUdJTiwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fbG9jYXRpb25fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUxv
Y2F0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTE9DQVRJT05fR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01Mb2NhdGlvblByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2xvY2F0aW9uX3BhcmVudF9jbGFzcyktPmZpbmFs
aXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYgPSBXRUJL
SVRfRE9NX0xPQ0FUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfSFJFRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfaHJlZihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9QUk9UT0NPTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfcHJvdG9jb2woc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfSE9TVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfaG9zdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9IT1NUTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfaG9zdG5hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUE9SVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfcG9ydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9QQVRITkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfcGF0aG5hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0VBUkNIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9zZWFyY2goc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfSEFTSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfaGFzaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9PUklHSU46CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fbG9jYXRpb25fZ2V0X29yaWdpbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
R09iamVjdCogd2Via2l0X2RvbV9sb2NhdGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX2xvY2F0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRE
T01Mb2NhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0xPQ0FUSU9OX0dFVF9QUklWQVRF
KG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Okxv
Y2F0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7
CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2xvY2F0
aW9uX2NsYXNzX2luaXQoV2ViS2l0RE9NTG9jYXRpb25DbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2Yo
V2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3Rv
ciA9IHdlYmtpdF9kb21fbG9jYXRpb25fY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF9kb21fbG9jYXRpb25fZmluYWxpemU7CisgICAgZ29iamVjdENsYXNz
LT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9IUkVGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImhyZWYiLAorICAgICAgICAgICAgIkxvY2F0aW9uOmhyZWYiLAorICAgICAgICAgICAg
InJlYWQtb25seSBnY2hhciogTG9jYXRpb246aHJlZiIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BST1RP
Q09MLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInByb3RvY29s
IiwKKyAgICAgICAgICAgICJMb2NhdGlvbjpwcm90b2NvbCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdjaGFyKiBMb2NhdGlvbjpwcm90b2NvbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hPU1QsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaG9zdCIsCisgICAgICAg
ICAgICAiTG9jYXRpb246aG9zdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBMb2Nh
dGlvbjpob3N0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSE9TVE5BTUUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaG9zdG5hbWUiLAorICAgICAgICAgICAgIkxvY2F0
aW9uOmhvc3RuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIExvY2F0aW9uOmhv
c3RuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUE9SVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJwb3J0IiwKKyAgICAgICAgICAgICJMb2NhdGlvbjpwb3J0IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIExvY2F0aW9uOnBvcnQiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9QQVRITkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJwYXRobmFtZSIsCisgICAgICAgICAgICAiTG9jYXRpb246cGF0aG5hbWUiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogTG9jYXRpb246cGF0aG5hbWUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9TRUFSQ0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
c2VhcmNoIiwKKyAgICAgICAgICAgICJMb2NhdGlvbjpzZWFyY2giLAorICAgICAgICAgICAgInJl
YWQtb25seSBnY2hhciogTG9jYXRpb246c2VhcmNoIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEFTSCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJoYXNoIiwKKyAgICAg
ICAgICAgICJMb2NhdGlvbjpoYXNoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIExv
Y2F0aW9uOmhhc2giLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PUklHSU4sCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAib3JpZ2luIiwKKyAgICAgICAgICAgICJMb2NhdGlv
bjpvcmlnaW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTG9jYXRpb246b3JpZ2lu
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9sb2NhdGlvbl9pbml0KFdlYktpdERPTUxv
Y2F0aW9uKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUxvY2F0aW9uUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fTE9DQVRJT05fR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2
KSBXZWJLaXRET01Mb2NhdGlvblByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbG9j
YXRpb25fZ2V0X2hyZWYoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTE9DQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmhyZWYoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3Byb3RvY29sKFdlYktpdERPTUxvY2F0aW9uKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpMb2NhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wcm90b2NvbCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfaG9zdChXZWJL
aXRET01Mb2NhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19MT0NBVElP
TihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aG9z
dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlv
bl9nZXRfaG9zdG5hbWUoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTE9DQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmhvc3RuYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wb3J0KFdlYktpdERPTUxvY2F0aW9uKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpMb2NhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wb3J0KCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wYXRobmFtZShXZWJL
aXRET01Mb2NhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19MT0NBVElP
TihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cGF0
aG5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbG9j
YXRpb25fZ2V0X3NlYXJjaChXZWJLaXRET01Mb2NhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19MT0NBVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TG9jYXRpb24q
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+c2VhcmNoKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9oYXNoKFdlYktpdERPTUxvY2F0aW9uKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpMb2NhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5oYXNoKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9vcmlnaW4oV2ViS2l0
RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTE9DQVRJT04o
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm9yaWdp
bigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUxvY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzM2M2I3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9jYXRpb24uaApAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01M
b2NhdGlvbl9oCisjZGVmaW5lIFdlYktpdERPTUxvY2F0aW9uX2gKKworI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9MT0NBVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF90
eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTE9DQVRJT04ob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0xPQ0FUSU9OLCBX
ZWJLaXRET01Mb2NhdGlvbikpCisjZGVmaW5lIFdFQktJVF9ET01fTE9DQVRJT05fQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0xPQ0FUSU9OLCBXZWJLaXRET01Mb2NhdGlvbkNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0xPQ0FUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9MT0NBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTE9DQVRJ
T05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX0xPQ0FUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9MT0NBVElPTl9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZ
UEVfTE9DQVRJT04sIFdlYktpdERPTUxvY2F0aW9uQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TUxvY2F0aW9uIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01Mb2NhdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2xvY2F0
aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hy
ZWY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTG9jYXRpb24KKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hyZWYoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3Byb3RvY29sOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUxvY2F0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2xvY2F0
aW9uX2dldF9wcm90b2NvbChXZWJLaXRET01Mb2NhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfaG9zdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Mb2NhdGlv
bgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfaG9zdChXZWJL
aXRET01Mb2NhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRf
aG9zdG5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTG9jYXRpb24KKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hvc3RuYW1lKFdlYktpdERPTUxvY2F0aW9u
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wb3J0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUxvY2F0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2xvY2F0aW9uX2dldF9wb3J0KFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wYXRobmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01M
b2NhdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfcGF0
aG5hbWUoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbG9j
YXRpb25fZ2V0X3NlYXJjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Mb2NhdGlvbgorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfc2VhcmNoKFdlYktpdERPTUxv
Y2F0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9oYXNoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUxvY2F0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2xvY2F0aW9uX2dldF9oYXNoKFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9vcmlnaW46CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTG9jYXRpb24KKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0
X29yaWdpbihXZWJLaXRET01Mb2NhdGlvbiogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01M
b2NhdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0aW9uUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01M
b2NhdGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTg3
ZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Mb2NhdGlvblByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUxvY2F0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUxvY2F0aW9uUHJpdmF0ZV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0xvY2F0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUxvY2F0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NTG9jYXRpb24q
IHdyYXBMb2NhdGlvbihXZWJDb3JlOjpMb2NhdGlvbiopOworV2ViS2l0RE9NTG9jYXRpb24qIGtp
dChXZWJDb3JlOjpMb2NhdGlvbiopOworV2ViQ29yZTo6TG9jYXRpb24qIGNvcmUoV2ViS2l0RE9N
TG9jYXRpb24qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9N
TG9jYXRpb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45ZDc2MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRyb2xsZXIu
Y3BwCkBAIC0wLDAgKzEsNjU0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUuaCIKKyNpbmNs
dWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xM
RVJfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJL
SVRfRE9NX1RZUEVfTUVESUFfQ09OVFJPTExFUiwgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJp
dmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGUg
eworI2lmIEVOQUJMRShWSURFTykKKyAgICBSZWZQdHI8V2ViQ29yZTo6TWVkaWFDb250cm9sbGVy
PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKK30gV2ViS2l0RE9NTWVkaWFD
b250cm9sbGVyUHJpdmF0ZTsKKworI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTU1lZGlhQ29udHJvbGxlcioga2l0KFdlYkNvcmU6Ok1lZGlhQ29udHJv
bGxlciogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
IChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVy
biBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xMRVIocmV0KTsKKworICAgIHJldHVybiB3cmFwTWVk
aWFDb250cm9sbGVyKG9iaik7Cit9CisKK1dlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogY29yZShX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXIqIHdyYXBNZWRpYUNvbnRyb2xsZXIoV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBjb3JlT2Jq
ZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9N
RURJQV9DT05UUk9MTEVSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTUVESUFfQ09OVFJP
TExFUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9kaXNwYXRjaF9ldmVudChXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9y
KQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlcio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdz
KCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50
KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2Fk
ZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9tZWRp
YV9jb250cm9sbGVyX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpNZWRpYUNv
bnRyb2xsZXIqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYUNvbnRyb2xs
ZXIqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnRO
YW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNh
cHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2Uq
IGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fbWVkaWFf
Y29udHJvbGxlcl9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVy
ID0gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBp
ZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVy
X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0RE9NTWVkaWFDb250cm9sbGVyLCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXIsIFdFQktJ
VF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVf
RVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorICAgIFBST1BfQlVGRkVSRUQsCisgICAgUFJPUF9TRUVLQUJMRSwKKyAgICBQ
Uk9QX0RVUkFUSU9OLAorICAgIFBST1BfQ1VSUkVOVF9USU1FLAorICAgIFBST1BfUEFVU0VELAor
ICAgIFBST1BfUExBWUVELAorICAgIFBST1BfUExBWUJBQ0tfU1RBVEUsCisgICAgUFJPUF9ERUZB
VUxUX1BMQVlCQUNLX1JBVEUsCisgICAgUFJPUF9QTEFZQkFDS19SQVRFLAorICAgIFBST1BfVk9M
VU1FLAorICAgIFBST1BfTVVURUQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlh
X2NvbnRyb2xsZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU1l
ZGlhQ29udHJvbGxlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xMRVJf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVO
QUJMRShWSURFTykKKyAgICBwcml2LT5+V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZSgp
OworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21l
ZGlhX2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmID0gV0VCS0lUX0RPTV9NRURJQV9DT05UUk9MTEVS
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ1VS
UkVOVF9USU1FOgorICAgICAgICB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X2N1cnJl
bnRfdGltZShzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfUExBWUJBQ0tfUkFURToKKyAgICAgICAgd2Via2l0X2Rv
bV9tZWRpYV9jb250cm9sbGVyX3NldF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoc2VsZiwgZ192YWx1
ZV9nZXRfZG91YmxlKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFZ
QkFDS19SQVRFOgorICAgICAgICB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X3BsYXli
YWNrX3JhdGUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WT0xVTUU6CisgICAgICAgIHdlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl9zZXRfdm9sdW1lKHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTVVURUQ6CisgICAgICAgIHdlYmtpdF9k
b21fbWVkaWFfY29udHJvbGxlcl9zZXRfbXV0ZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9jb250
cm9sbGVyX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTU1lZGlhQ29u
dHJvbGxlciogc2VsZiA9IFdFQktJVF9ET01fTUVESUFfQ09OVFJPTExFUihvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0JVRkZFUkVEOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9n
ZXRfYnVmZmVyZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VFS0FC
TEU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9j
b250cm9sbGVyX2dldF9zZWVrYWJsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9EVVJBVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2R1cmF0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfVElNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91Ymxl
KHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfdGltZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVVTRUQ6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGF1
c2VkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BMQVlFRDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJf
Z2V0X3BsYXllZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFZQkFD
S19TVEFURToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9t
ZWRpYV9jb250cm9sbGVyX2dldF9wbGF5YmFja19zdGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9ERUZBVUxUX1BMQVlCQUNLX1JBVEU6CisgICAgICAgIGdfdmFsdWVf
c2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9kZWZhdWx0
X3BsYXliYWNrX3JhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExB
WUJBQ0tfUkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXliYWNrX3JhdGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVk9MVU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFs
dWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfdm9sdW1lKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01VVEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X211dGVkKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xs
ZXJfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09i
amVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVy
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYktpdERP
TU1lZGlhQ29udHJvbGxlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xM
RVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9j
bGFzc19pbml0KFdlYktpdERPTU1lZGlhQ29udHJvbGxlckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5j
b25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2Zp
bmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9tZWRp
YV9jb250cm9sbGVyX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQlVGRkVSRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAiYnVmZmVyZWQiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpidWZmZXJlZCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRpbWVSYW5nZXMqIE1lZGlhQ29udHJv
bGxlcjpidWZmZXJlZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVElNRV9SQU5HRVMs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9TRUVLQUJMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJz
ZWVrYWJsZSIsCisgICAgICAgICAgICAiTWVkaWFDb250cm9sbGVyOnNlZWthYmxlIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGltZVJhbmdlcyogTWVkaWFDb250cm9sbGVyOnNl
ZWthYmxlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9USU1FX1JBTkdFUywKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RVUkFU
SU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImR1cmF0aW9u
IiwKKyAgICAgICAgICAgICJNZWRpYUNvbnRyb2xsZXI6ZHVyYXRpb24iLAorICAgICAgICAgICAg
InJlYWQtb25seSBnZG91YmxlIE1lZGlhQ29udHJvbGxlcjpkdXJhdGlvbiIsCisgICAgICAgICAg
ICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1VSUkVOVF9USU1FLAorICAgICAgICBn
X3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImN1cnJlbnQtdGltZSIsCisgICAgICAg
ICAgICAiTWVkaWFDb250cm9sbGVyOmN1cnJlbnQtdGltZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnZG91YmxlIE1lZGlhQ29udHJvbGxlcjpjdXJyZW50LXRpbWUiLAorICAgICAgICAgICAg
LUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVVTRUQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKAorICAgICAgICAgICAgInBhdXNlZCIsCisgICAgICAgICAgICAiTWVkaWFD
b250cm9sbGVyOnBhdXNlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIE1lZGlh
Q29udHJvbGxlcjpwYXVzZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QTEFZRUQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicGxheWVkIiwKKyAgICAgICAgICAg
ICJNZWRpYUNvbnRyb2xsZXI6cGxheWVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NVGltZVJhbmdlcyogTWVkaWFDb250cm9sbGVyOnBsYXllZCIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfVElNRV9SQU5HRVMsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QTEFZQkFDS19TVEFURSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwbGF5YmFjay1zdGF0ZSIsCisgICAgICAgICAg
ICAiTWVkaWFDb250cm9sbGVyOnBsYXliYWNrLXN0YXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2NoYXIqIE1lZGlhQ29udHJvbGxlcjpwbGF5YmFjay1zdGF0ZSIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0RFRkFVTFRfUExBWUJBQ0tfUkFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgK
KyAgICAgICAgICAgICJkZWZhdWx0LXBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgIk1lZGlh
Q29udHJvbGxlcjpkZWZhdWx0LXBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2RvdWJsZSBNZWRpYUNvbnRyb2xsZXI6ZGVmYXVsdC1wbGF5YmFjay1yYXRlIiwKKyAgICAg
ICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUExBWUJBQ0tfUkFURSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJwbGF5YmFjay1yYXRlIiwK
KyAgICAgICAgICAgICJNZWRpYUNvbnRyb2xsZXI6cGxheWJhY2stcmF0ZSIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnZG91YmxlIE1lZGlhQ29udHJvbGxlcjpwbGF5YmFjay1yYXRlIiwKKyAg
ICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVk9MVU1FLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgInZvbHVtZSIsCisgICAgICAgICAg
ICAiTWVkaWFDb250cm9sbGVyOnZvbHVtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZG91
YmxlIE1lZGlhQ29udHJvbGxlcjp2b2x1bWUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBH
X01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9NVVRFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisg
ICAgICAgICAgICAibXV0ZWQiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjptdXRlZCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBNZWRpYUNvbnRyb2xsZXI6bXV0ZWQi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2luaXQo
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTU1lZGlh
Q29udHJvbGxlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xMRVJfR0VU
X1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXJQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3BsYXko
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZikpOworICAgIFdlYkNvcmU6
Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5w
bGF5KCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwor
fQorCit2b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9wYXVzZShXZWJLaXRET01NZWRp
YUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9s
bGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnBhdXNlKCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdl
YmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl91bnBhdXNlKFdlYktpdERPTU1lZGlhQ29udHJvbGxl
ciogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJ
QV9DT05UUk9MTEVSKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+dW5wYXVzZSgpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
VmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworV2ViS2l0RE9NVGltZVJh
bmdlcyogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9idWZmZXJlZChXZWJLaXRET01N
ZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6VGltZVJhbmdlcz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmJ1ZmZl
cmVkKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8p
ICovCit9CisKK1dlYktpdERPTVRpbWVSYW5nZXMqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxl
cl9nZXRfc2Vla2FibGUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5zZWVrYWJsZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fbWVk
aWFfY29udHJvbGxlcl9nZXRfZHVyYXRpb24oV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxm
KQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9D
T05UUk9MTEVSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5kdXJhdGlv
bigpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30K
KworZ2RvdWJsZSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfdGltZShX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZiksIDApOworICAgIFdl
YkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
ZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fbWVkaWFf
Y29udHJvbGxlcl9zZXRfY3VycmVudF90aW1lKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2Vs
ZiwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xs
ZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q3VycmVudFRpbWUo
dmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisj
ZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX21lZGlh
X2NvbnRyb2xsZXJfZ2V0X3BhdXNlZChXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRS
T0xMRVIoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cGF1c2Vk
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30K
KworV2ViS2l0RE9NVGltZVJhbmdlcyogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9w
bGF5ZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5wbGF5ZWQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8q
IEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxl
cl9nZXRfcGxheWJhY2tfc3RhdGUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9M
TEVSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+cGxheWJhY2tTdGF0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
VmlkZW8iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwor
Z2RvdWJsZSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2RlZmF1bHRfcGxheWJhY2tf
cmF0ZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmRlZmF1bHRQbGF5YmFja1JhdGUoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmLCBnZG91YmxlIHZhbHVlKQoreworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZikpOworICAg
IFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXREZWZhdWx0UGxheWJhY2tSYXRlKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8K
K30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXliYWNrX3Jh
dGUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5wbGF5YmFja1JhdGUoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91Ymxl
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9t
ZWRpYV9jb250cm9sbGVyX3NldF9wbGF5YmFja19yYXRlKFdlYktpdERPTU1lZGlhQ29udHJvbGxl
ciogc2VsZiwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNv
bnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0UGxheWJh
Y2tSYXRlKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfZ2V0X3ZvbHVtZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElB
X0NPTlRST0xMRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnZvbHVt
ZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30K
Kwordm9pZCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X3ZvbHVtZShXZWJLaXRET01N
ZWRpYUNvbnRyb2xsZXIqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdl
YkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRWb2x1bWUodmFsdWUs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9tdXRlZChXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+bXV0ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl9zZXRfbXV0ZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9D
T05UUk9MTEVSKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0TXV0ZWQodmFsdWUpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01N
ZWRpYUNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzQ5
MTc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRyb2xsZXIuaApAQCAtMCwwICsx
LDI1MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJfaAor
CisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX01FRElBX0NPTlRST0xMRVIgICAgICAgICAgICAo
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fTUVESUFfQ09OVFJPTExFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTUVESUFfQ09OVFJPTExFUiwgV2ViS2l0RE9N
TWVkaWFDb250cm9sbGVyKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9DT05UUk9MTEVSX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9NRURJQV9DT05UUk9MTEVSLCBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9DT05U
Uk9MTEVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9N
RURJQV9DT05UUk9MTEVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9DT05UUk9MTEVSX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9NRURJQV9DT05UUk9MTEVSLCBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJDbGFzcykp
CisKK3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyIHsKKyAgICBXZWJLaXRET01PYmpl
Y3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXJDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF90eXBlKHZv
aWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9wbGF5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfcGxh
eShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bWVkaWFfY29udHJvbGxlcl9wYXVzZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRy
b2xsZXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3BhdXNlKFdlYktpdERPTU1lZGlhQ29udHJvbGxl
ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3VucGF1c2U6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl91bnBhdXNlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9idWZmZXJlZDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6
IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NVGltZVJhbmdlcyoKK3dlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl9nZXRfYnVmZmVyZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3NlZWthYmxlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NVGltZVJhbmdlcworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UaW1lUmFuZ2VzKgord2Via2l0X2RvbV9tZWRpYV9j
b250cm9sbGVyX2dldF9zZWVrYWJsZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfZHVyYXRpb246CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKgorICogUmV0dXJuczogQSAjZ2Rv
dWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91Ymxl
Cit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2R1cmF0aW9uKFdlYktpdERPTU1lZGlh
Q29udHJvbGxlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVy
X2dldF9jdXJyZW50X3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVy
CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0
X2N1cnJlbnRfdGltZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfY3VycmVudF90aW1lOgorICogQHNlbGY6
IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICogQHZhbHVlOiBBICNnZG91YmxlCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
bWVkaWFfY29udHJvbGxlcl9zZXRfY3VycmVudF90aW1lKFdlYktpdERPTU1lZGlhQ29udHJvbGxl
ciogc2VsZiwgZ2RvdWJsZSB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250
cm9sbGVyX2dldF9wYXVzZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVy
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9n
ZXRfcGF1c2VkKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wbGF5ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01UaW1lUmFuZ2VzCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTVRpbWVSYW5nZXMqCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJf
Z2V0X3BsYXllZChXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGxheWJhY2tfc3RhdGU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXliYWNrX3N0YXRlKFdlYktpdERPTU1lZGlhQ29u
dHJvbGxlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dl
dF9kZWZhdWx0X3BsYXliYWNrX3JhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250
cm9sbGVyCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xs
ZXJfZ2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfZGVmYXVsdF9w
bGF5YmFja19yYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICog
QHZhbHVlOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfZGVmYXVsdF9wbGF5
YmFja19yYXRlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZiwgZ2RvdWJsZSB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wbGF5YmFja19yYXRl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVybnM6
IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2RvdWJsZQord2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wbGF5YmFja19yYXRlKFdl
YktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRp
YV9jb250cm9sbGVyX3NldF9wbGF5YmFja19yYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1l
ZGlhQ29udHJvbGxlcgorICogQHZhbHVlOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxl
cl9zZXRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYsIGdkb3Vi
bGUgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfdm9s
dW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJldHVy
bnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2RvdWJsZQord2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF92b2x1bWUoV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2Nv
bnRyb2xsZXJfc2V0X3ZvbHVtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXIKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFf
Y29udHJvbGxlcl9zZXRfdm9sdW1lKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZiwgZ2Rv
dWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFf
Y29udHJvbGxlcl9nZXRfbXV0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9s
bGVyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxl
cl9nZXRfbXV0ZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X211dGVkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTU1lZGlhQ29udHJvbGxlcgorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX21lZGlhX2Nv
bnRyb2xsZXJfc2V0X211dGVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZiwgZ2Jvb2xl
YW4gdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRy
b2xsZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBkYTI3
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU1lZGlhQ29u
dHJvbGxlclByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYUNvbnRyb2xsZXIuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyLmg+CisjaWYgRU5B
QkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU1lZGlhQ29udHJvbGxl
ciogd3JhcE1lZGlhQ29udHJvbGxlcihXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqKTsKK1dlYktp
dERPTU1lZGlhQ29udHJvbGxlcioga2l0KFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciopOworV2Vi
Q29yZTo6TWVkaWFDb250cm9sbGVyKiBjb3JlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciopOwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCisKKyNl
bmRpZiAvKiBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTWVkaWFEZXZpY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTA3NzhjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01NZWRpYURldmljZXMuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVk
aWFEZXZpY2VzLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9ERVZJQ0VTX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX01FRElBX0RFVklD
RVMsIFdlYktpdERPTU1lZGlhRGV2aWNlc1ByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01NZWRpYURldmljZXNQcml2YXRlIHsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAg
IFJlZlB0cjxXZWJDb3JlOjpNZWRpYURldmljZXM+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKK30gV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZTsKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01N
ZWRpYURldmljZXMqIGtpdChXZWJDb3JlOjpNZWRpYURldmljZXMqIG9iaikKK3sKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9NRURJQV9ERVZJ
Q0VTKHJldCk7CisKKyAgICByZXR1cm4gd3JhcE1lZGlhRGV2aWNlcyhvYmopOworfQorCitXZWJD
b3JlOjpNZWRpYURldmljZXMqIGNvcmUoV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFEZXZpY2Vz
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NTWVkaWFEZXZpY2VzKiB3cmFwTWVkaWFEZXZpY2VzKFdlYkNvcmU6Ok1lZGlhRGV2aWNl
cyogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fTUVESUFfREVWSUNFUyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX01FRElB
X0RFVklDRVMsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCitH
X0RFRklORV9UWVBFKFdlYktpdERPTU1lZGlhRGV2aWNlcywgd2Via2l0X2RvbV9tZWRpYV9kZXZp
Y2VzLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21l
ZGlhX2RldmljZXNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU1l
ZGlhRGV2aWNlc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0RFVklDRVNfR0VUX1BS
SVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBF
TkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHByaXYtPn5XZWJLaXRET01NZWRpYURldmljZXNQcml2
YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX21lZGlhX2RldmljZXNfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRp
ZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9t
ZWRpYV9kZXZpY2VzX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKyAgICBXZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9NRURJQV9ERVZJQ0VTX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhRGV2aWNlcyo+KFdFQktJVF9ET01fT0JKRUNU
KG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChw
cml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9t
ZWRpYV9kZXZpY2VzX2NsYXNzX2luaXQoV2ViS2l0RE9NTWVkaWFEZXZpY2VzQ2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTU1lZGlhRGV2aWNlc1ByaXZhdGUpKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX2NvbnN0cnVjdG9y
OworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX21lZGlhX2RldmljZXNf
ZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfZGV2aWNlc19pbml0
KFdlYktpdERPTU1lZGlhRGV2aWNlcyogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01NZWRpYURl
dmljZXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9ERVZJQ0VTX0dFVF9QUklWQVRF
KHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZSgp
OworfQorCitXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMqIHdlYmtpdF9k
b21fbWVkaWFfZGV2aWNlc19nZXRfc3VwcG9ydGVkX2NvbnN0cmFpbnRzKFdlYktpdERPTU1lZGlh
RGV2aWNlcyogc2VsZikKK3sKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX01FRElBX0RFVklDRVMoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlh
RGV2aWNlcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+Z2V0U3VwcG9ydGVkQ29uc3RyYWludHMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgU3RyZWFtIikKKyAg
ICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU1RSRUFNKSAqLworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0RXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzLmgKc2ltaWxhcml0eSBp
bmRleCA1MCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFE
ZXZpY2VzLmgKaW5kZXggOGM3NjY2OC4uZTkxYzU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01NZWRpYURldmljZXMuaApAQCAtMTgsOCArMTgsOCBAQAogICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEV2ZW50
VGFyZ2V0X2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0X2gKKyNpZm5kZWYgV2Vi
S2l0RE9NTWVkaWFEZXZpY2VzX2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVkaWFEZXZpY2VzX2gKIAog
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQogCkBAIC0yOSwzNyArMjksMzYgQEAK
IAogR19CRUdJTl9ERUNMUwogCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0VWRU5UX1RB
UkdFVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2dldF90eXBlKCkp
Ci0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVQob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZF
TlRfVEFSR0VULCBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQpKQotI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfRVZFTlRfVEFSR0VUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0VWRU5UX1RBUkdFVCwgV2ViS2l0RE9N
VGVzdEV2ZW50VGFyZ2V0Q2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9U
QVJHRVQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRfVEFSR0VUKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX0VWRU5UX1RBUkdFVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9UQVJHRVQpKQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0VWRU5UX1RBUkdFVCwgV2Vi
S2l0RE9NVGVzdEV2ZW50VGFyZ2V0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTUVE
SUFfREVWSUNFUyAgICAgICAgICAgICh3ZWJraXRfZG9tX21lZGlhX2RldmljZXNfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9ERVZJQ0VTKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9ERVZJ
Q0VTLCBXZWJLaXRET01NZWRpYURldmljZXMpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0RF
VklDRVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX01FRElBX0RFVklDRVMsIFdlYktpdERPTU1lZGlhRGV2aWNlc0NsYXNz
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX0RFVklDRVMob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX0RFVklD
RVMpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX0RFVklDRVNfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0RF
VklDRVMpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0RFVklDRVNfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX01FRElB
X0RFVklDRVMsIFdlYktpdERPTU1lZGlhRGV2aWNlc0NsYXNzKSkKIAotc3RydWN0IF9XZWJLaXRE
T01UZXN0RXZlbnRUYXJnZXQgeworc3RydWN0IF9XZWJLaXRET01NZWRpYURldmljZXMgewogICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7CiB9OwogCi1zdHJ1Y3QgX1dlYktpdERP
TVRlc3RFdmVudFRhcmdldENsYXNzIHsKK3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFEZXZpY2VzQ2xh
c3MgewogICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKIH07CiAKIFdFQktJ
VF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZ2V0X3R5cGUodm9pZCk7
Cit3ZWJraXRfZG9tX21lZGlhX2RldmljZXNfZ2V0X3R5cGUodm9pZCk7CiAKIC8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9pdGVtOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RFdmVudFRhcmdldAotICogQGluZGV4OiBBICNndWxvbmcKKyAqIHdlYmtpdF9kb21fbWVkaWFf
ZGV2aWNlc19nZXRfc3VwcG9ydGVkX2NvbnN0cmFpbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TU1lZGlhRGV2aWNlcwogICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NTm9kZQorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01NZWRpYVRy
YWNrU3VwcG9ydGVkQ29uc3RyYWludHMKICAqCiAgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCiAqKi8K
LVdFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKLXdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRf
aXRlbShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHNlbGYsIGd1bG9uZyBpbmRleCk7CitXRUJL
SVRfQVBJIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyoKK3dlYmtpdF9k
b21fbWVkaWFfZGV2aWNlc19nZXRfc3VwcG9ydGVkX2NvbnN0cmFpbnRzKFdlYktpdERPTU1lZGlh
RGV2aWNlcyogc2VsZik7CiAKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRfaCAq
LworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlhRGV2aWNlc19oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TU1lZGlhRGV2aWNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzE2MTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU1lZGlhRGV2aWNlc1ByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTU1lZGlhRGV2aWNlc1ByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvTWVkaWFEZXZpY2VzLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU1l
ZGlhRGV2aWNlcy5oPgorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiB3cmFwTWVkaWFEZXZpY2VzKFdlYkNvcmU6Ok1l
ZGlhRGV2aWNlcyopOworV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiBraXQoV2ViQ29yZTo6TWVkaWFE
ZXZpY2VzKik7CitXZWJDb3JlOjpNZWRpYURldmljZXMqIGNvcmUoV2ViS2l0RE9NTWVkaWFEZXZp
Y2VzKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9T
VFJFQU0pICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTWVkaWFFcnJvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMGRiNzkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU1lZGlhRXJyb3IuY3BwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NTWVkaWFFcnJvci5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfRVJST1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfTUVESUFfRVJST1IsIFdl
YktpdERPTU1lZGlhRXJyb3JQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVk
aWFFcnJvclByaXZhdGUgeworI2lmIEVOQUJMRShWSURFTykKKyAgICBSZWZQdHI8V2ViQ29yZTo6
TWVkaWFFcnJvcj4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCit9IFdlYktp
dERPTU1lZGlhRXJyb3JQcml2YXRlOworCisjaWYgRU5BQkxFKFZJREVPKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViS2l0RE9NTWVkaWFFcnJvcioga2l0KFdlYkNvcmU6Ok1lZGlhRXJyb3Iq
IG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3Bv
aW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VC
S0lUX0RPTV9NRURJQV9FUlJPUihyZXQpOworCisgICAgcmV0dXJuIHdyYXBNZWRpYUVycm9yKG9i
aik7Cit9CisKK1dlYkNvcmU6Ok1lZGlhRXJyb3IqIGNvcmUoV2ViS2l0RE9NTWVkaWFFcnJvciog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1l
ZGlhRXJyb3IqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01NZWRpYUVycm9yKiB3cmFwTWVkaWFFcnJvcihXZWJDb3JlOjpNZWRpYUVy
cm9yKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9NRURJQV9FUlJPUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX01FRElB
X0VSUk9SLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCitHX0RFRklORV9U
WVBFKFdlYktpdERPTU1lZGlhRXJyb3IsIHdlYmtpdF9kb21fbWVkaWFfZXJyb3IsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NPREUsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fTUVESUFfRVJST1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKyAgICBwcml2LT5+V2ViS2l0RE9NTWVkaWFF
cnJvclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX21lZGlhX2Vycm9y
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fbWVkaWFfZXJyb3JfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NTWVkaWFFcnJvciogc2VsZiA9IFdFQktJVF9ET01fTUVESUFfRVJST1Iob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT0RFOgorICAgICAgICBn
X3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2dldF9jb2RlKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX21lZGlhX2Vy
cm9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdP
YmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVkaWFfZXJyb3JfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViS2l0RE9NTWVk
aWFFcnJvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0VSUk9SX0dFVF9QUklWQVRF
KG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1l
ZGlhRXJyb3IqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0
KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9lcnJvcl9jbGFzc19pbml0KFdlYktpdERPTU1lZGlh
RXJyb3JDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9tZWRpYV9lcnJv
cl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9t
ZWRpYV9lcnJvcl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21fbWVkaWFfZXJyb3JfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NP
REUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgImNvZGUiLAorICAg
ICAgICAgICAgIk1lZGlhRXJyb3I6Y29kZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1c2hv
cnQgTWVkaWFFcnJvcjpjb2RlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fbWVkaWFfZXJyb3JfaW5pdChXZWJLaXRET01NZWRpYUVycm9yKiByZXF1ZXN0KQorewor
ICAgIFdlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9F
UlJPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU1lZGlh
RXJyb3JQcml2YXRlKCk7Cit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV9tZWRpYV9lcnJvcl9nZXRf
Y29kZShXZWJLaXRET01NZWRpYUVycm9yKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9FUlJPUihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6TWVkaWFFcnJvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJl
c3VsdCA9IGl0ZW0tPmNvZGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndXNob3J0PigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFFcnJvci5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01N
ZWRpYUVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2ZTUyNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFFcnJvci5oCkBAIC0wLDAgKzEsODQgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTWVkaWFFcnJv
cl9oCisjZGVmaW5lIFdlYktpdERPTU1lZGlhRXJyb3JfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX01FRElBX0VSUk9SICAgICAgICAgICAgKHdlYmtpdF9kb21fbWVkaWFfZXJyb3JfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9FUlJPUihvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTUVESUFf
RVJST1IsIFdlYktpdERPTU1lZGlhRXJyb3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0VS
Uk9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9NRURJQV9FUlJPUiwgV2ViS2l0RE9NTWVkaWFFcnJvckNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX0VSUk9SKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9FUlJPUikpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfTUVESUFfRVJST1JfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0VSUk9SKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9NRURJQV9FUlJPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfRVJST1IsIFdlYktpdERP
TU1lZGlhRXJyb3JDbGFzcykpCisKKy8qKgorICogV0VCS0lUX0RPTV9NRURJQV9FUlJPUl9NRURJ
QV9FUlJfQUJPUlRFRDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0VSUk9SX01FRElB
X0VSUl9BQk9SVEVEIDEKKworLyoqCisgKiBXRUJLSVRfRE9NX01FRElBX0VSUk9SX01FRElBX0VS
Ul9ORVRXT1JLOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfRVJST1JfTUVESUFfRVJS
X05FVFdPUksgMgorCisvKioKKyAqIFdFQktJVF9ET01fTUVESUFfRVJST1JfTUVESUFfRVJSX0RF
Q09ERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0VSUk9SX01FRElBX0VSUl9ERUNP
REUgMworCisvKioKKyAqIFdFQktJVF9ET01fTUVESUFfRVJST1JfTUVESUFfRVJSX1NSQ19OT1Rf
U1VQUE9SVEVEOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfRVJST1JfTUVESUFfRVJS
X1NSQ19OT1RfU1VQUE9SVEVEIDQKKworc3RydWN0IF9XZWJLaXRET01NZWRpYUVycm9yIHsKKyAg
ICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01NZWRpYUVycm9yQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbWVkaWFfZXJyb3JfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9lcnJvcl9nZXRfY29kZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUVycm9yCisgKgorICogUmV0dXJuczogQSAjZ3VzaG9y
dAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3
ZWJraXRfZG9tX21lZGlhX2Vycm9yX2dldF9jb2RlKFdlYktpdERPTU1lZGlhRXJyb3IqIHNlbGYp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFFcnJvcl9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TU1lZGlhRXJyb3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjYmUwYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVkaWFFcnJvclByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9N
ZWRpYUVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU1lZGlhRXJyb3IuaD4K
KyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NTWVkaWFF
cnJvciogd3JhcE1lZGlhRXJyb3IoV2ViQ29yZTo6TWVkaWFFcnJvciopOworV2ViS2l0RE9NTWVk
aWFFcnJvcioga2l0KFdlYkNvcmU6Ok1lZGlhRXJyb3IqKTsKK1dlYkNvcmU6Ok1lZGlhRXJyb3Iq
IGNvcmUoV2ViS2l0RE9NTWVkaWFFcnJvciopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU8pICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYUVycm9y
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlh
TGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4OTY3NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFMaXN0LmNwcApAQCAtMCwwICsxLDIzOSBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTU1lZGlhTGlzdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU1lZGlhTGlzdFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRv
VVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9MSVNUX0dFVF9QUklWQVRFKG9iaikg
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX01FRElBX0xJ
U1QsIFdlYktpdERPTU1lZGlhTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01NZWRpYUxpc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TWVkaWFMaXN0PiBjb3Jl
T2JqZWN0OworfSBXZWJLaXRET01NZWRpYUxpc3RQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NTWVkaWFMaXN0KiBraXQoV2ViQ29yZTo6TWVkaWFMaXN0KiBvYmopCit7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
TUVESUFfTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBNZWRpYUxpc3Qob2JqKTsKK30KKwor
V2ViQ29yZTo6TWVkaWFMaXN0KiBjb3JlKFdlYktpdERPTU1lZGlhTGlzdCogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhTGlzdCo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TU1lZGlhTGlzdCogd3JhcE1lZGlhTGlzdChXZWJDb3JlOjpNZWRpYUxpc3QqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX01FRElB
X0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9NRURJQV9MSVNULCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitHX0RFRklORV9UWVBFKFdlYktpdERPTU1lZGlhTGlzdCwgd2Via2l0X2RvbV9tZWRpYV9saXN0
LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9NRURJQV9URVhULAorICAgIFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9tZWRpYV9saXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRE
T01NZWRpYUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9MSVNUX0dFVF9QUklW
QVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0
ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVkaWFfbGlzdF9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlh
X2xpc3Rfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NTWVk
aWFMaXN0KiBzZWxmID0gV0VCS0lUX0RPTV9NRURJQV9MSVNUKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTUVESUFfVEVYVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9tZWRpYV9saXN0X3NldF9tZWRpYV90ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9tZWRpYV9saXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTU1l
ZGlhTGlzdCogc2VsZiA9IFdFQktJVF9ET01fTUVESUFfTElTVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX01FRElBX1RFWFQ6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfbWVkaWFf
dGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X2xl
bmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9t
ZWRpYV9saXN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQorewor
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVkaWFfbGlz
dF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fTUVESUFfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAg
IHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYUxpc3QqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9jbGFzc19p
bml0KFdlYktpdERPTU1lZGlhTGlzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01N
ZWRpYUxpc3RQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtp
dF9kb21fbWVkaWFfbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXpl
ID0gd2Via2l0X2RvbV9tZWRpYV9saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9tZWRpYV9saXN0X3NldF9wcm9wZXJ0eTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfcHJvcGVy
dHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUVESUFfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJtZWRpYS10ZXh0IiwKKyAgICAgICAgICAgICJNZWRpYUxp
c3Q6bWVkaWEtdGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogTWVkaWFMaXN0
Om1lZGlhLXRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJNZWRpYUxp
c3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIE1lZGlhTGlzdDpsZW5n
dGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfbGlz
dF9pbml0KFdlYktpdERPTU1lZGlhTGlzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01NZWRp
YUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9MSVNUX0dFVF9QUklWQVRFKHJl
cXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZSgpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9tZWRpYV9saXN0X2l0ZW0oV2ViS2l0RE9NTWVkaWFMaXN0KiBz
ZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfTElT
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPml0
ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fbWVk
aWFfbGlzdF9kZWxldGVfbWVkaXVtKFdlYktpdERPTU1lZGlhTGlzdCogc2VsZiwgY29uc3QgZ2No
YXIqIG9sZE1lZGl1bSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19N
RURJQV9MSVNUKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9sZE1lZGl1bSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6TWVkaWFM
aXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZE9sZE1lZGl1bSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChvbGRNZWRpdW0pOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmRlbGV0ZU1lZGl1bShjb252ZXJ0
ZWRPbGRNZWRpdW0sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9saXN0X2Fw
cGVuZF9tZWRpdW0oV2ViS2l0RE9NTWVkaWFMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogbmV3TWVk
aXVtLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0xJU1Qo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmV3TWVkaXVtKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpNZWRpYUxpc3QqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmV3TWVkaXVt
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5ld01lZGl1bSk7CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+YXBwZW5kTWVkaXVtKGNvbnZlcnRlZE5ld01lZGl1
bSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfbWVkaWFf
dGV4dChXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTUVESUFfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFMaXN0KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPm1lZGlhVGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21fbWVkaWFfbGlzdF9zZXRfbWVkaWFfdGV4dChXZWJLaXRET01NZWRpYUxpc3QqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19NRURJQV9MSVNUKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpN
ZWRpYUxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldE1lZGlhVGV4dChjb252ZXJ0ZWRW
YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKworZ3Vsb25nIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfbGVu
Z3RoKFdlYktpdERPTU1lZGlhTGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19NRURJQV9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUxpc3QqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFMaXN0LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU1lZGlhTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjk1
ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdC5oCkBAIC0wLDAgKzEsMTEyIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRE
T01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5
IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRET01NZWRpYUxpc3RfaAorI2RlZmluZSBXZWJLaXRET01NZWRp
YUxpc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9NRURJQV9MSVNU
ICAgICAgICAgICAgKHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX01FRElBX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX0xJU1QsIFdlYktpdERPTU1lZGlh
TGlzdCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfTElTVF9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfTElT
VCwgV2ViS2l0RE9NTWVkaWFMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFf
TElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfTUVESUFfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfTElT
VF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfTUVESUFfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfTElTVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfTUVESUFfTElTVCwgV2ViS2l0RE9NTWVkaWFMaXN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTU1lZGlhTGlzdCB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21fbWVkaWFfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlh
X2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUxpc3QKKyAqIEBpbmRleDog
QSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fbWVkaWFfbGlzdF9pdGVtKFdlYktpdERPTU1lZGlhTGlzdCogc2VsZiwg
Z3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2xpc3RfZGVsZXRlX21l
ZGl1bToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUxpc3QKKyAqIEBvbGRNZWRpdW06IEEg
I2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9tZWRpYV9saXN0X2RlbGV0ZV9tZWRpdW0oV2ViS2l0RE9NTWVkaWFMaXN0KiBzZWxm
LCBjb25zdCBnY2hhciogb2xkTWVkaXVtLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9tZWRpYV9saXN0X2FwcGVuZF9tZWRpdW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
TWVkaWFMaXN0CisgKiBAbmV3TWVkaXVtOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFfbGlzdF9hcHBlbmRfbWVk
aXVtKFdlYktpdERPTU1lZGlhTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIG5ld01lZGl1bSwgR0Vy
cm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfbWVkaWFf
dGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUxpc3QKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9tZWRpYV9saXN0X2dl
dF9tZWRpYV90ZXh0KFdlYktpdERPTU1lZGlhTGlzdCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9tZWRpYV9saXN0X3NldF9tZWRpYV90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1l
ZGlhTGlzdAorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbWVkaWFfbGlzdF9zZXRfbWVkaWFfdGV4dChX
ZWJLaXRET01NZWRpYUxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRfbGVuZ3RoOgorICogQHNl
bGY6IEEgI1dlYktpdERPTU1lZGlhTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiov
CitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9tZWRpYV9saXN0X2dldF9sZW5ndGgoV2Vi
S2l0RE9NTWVkaWFMaXN0KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTU1lZGlhTGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTWVkaWFMaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY2MjNhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhTGlzdFByaXZhdGUuaApA
QCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTU1lZGlhTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01NZWRpYUxpc3RQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFMaXN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTU1lZGlhTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTU1lZGlhTGlzdCogd3JhcE1lZGlhTGlzdChXZWJDb3JlOjpNZWRpYUxpc3QqKTsKK1dlYktp
dERPTU1lZGlhTGlzdCoga2l0KFdlYkNvcmU6Ok1lZGlhTGlzdCopOworV2ViQ29yZTo6TWVkaWFM
aXN0KiBjb3JlKFdlYktpdERPTU1lZGlhTGlzdCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYUxpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVkaWFRdWVyeUxpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4NTJjOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVkaWFRdWVyeUxpc3QuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
TWVkaWFRdWVyeUxpc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9RVUVSWV9MSVNUX0dFVF9QUklWQVRFKG9i
aikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX01FRElB
X1FVRVJZX0xJU1QsIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok1lZGlhUXVlcnlMaXN0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01NZWRpYVF1ZXJ5TGlz
dFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01NZWRpYVF1ZXJ5TGlz
dCoga2l0KFdlYkNvcmU6Ok1lZGlhUXVlcnlMaXN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTUVESUFfUVVFUllfTElTVChy
ZXQpOworCisgICAgcmV0dXJuIHdyYXBNZWRpYVF1ZXJ5TGlzdChvYmopOworfQorCitXZWJDb3Jl
OjpNZWRpYVF1ZXJ5TGlzdCogY29yZShXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhUXVlcnlM
aXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QqIHdyYXBNZWRpYVF1ZXJ5TGlzdChXZWJDb3JlOjpNZWRp
YVF1ZXJ5TGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fTUVESUFfUVVFUllfTElTVChnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX01FRElBX1FVRVJZX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NTWVkaWFRdWVyeUxpc3QsIHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdCwgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTUVESUEsCisg
ICAgUFJPUF9NQVRDSEVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9xdWVy
eV9saXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01NZWRpYVF1
ZXJ5TGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX1FVRVJZX0xJU1RfR0VUX1BS
SVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01NZWRpYVF1ZXJ5TGlz
dFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xp
c3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTU1lZGlhUXVlcnlMaXN0KiBzZWxmID0gV0VCS0lUX0RPTV9NRURJQV9RVUVSWV9M
SVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
TUVESUE6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbWVk
aWFfcXVlcnlfbGlzdF9nZXRfbWVkaWEoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTUFUQ0hFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF9tYXRjaGVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfY29uc3RydWN0b3Io
R1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3Ry
dWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0g
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X3BhcmVudF9jbGFzcykt
PmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJv
cGVydGllcyk7CisKKyAgICBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX01FRElBX1FVRVJZX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9j
bGFzc19pbml0KFdlYktpdERPTU1lZGlhUXVlcnlMaXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29u
c3RydWN0b3IgPSB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfY29uc3RydWN0b3I7CisgICAg
Z29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9maW5h
bGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbWVkaWFf
cXVlcnlfbGlzdF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUVESUEsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibWVkaWEiLAorICAgICAgICAg
ICAgIk1lZGlhUXVlcnlMaXN0Om1lZGlhIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IE1lZGlhUXVlcnlMaXN0Om1lZGlhIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUFUQ0hFUywKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibWF0Y2hlcyIsCisgICAgICAg
ICAgICAiTWVkaWFRdWVyeUxpc3Q6bWF0Y2hlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdi
b29sZWFuIE1lZGlhUXVlcnlMaXN0Om1hdGNoZXMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfaW5pdChXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCogcmVx
dWVzdCkKK3sKKyAgICBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX01FRElBX1FVRVJZX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChw
cml2KSBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfbWVkaWEoV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3Qq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfUVVFUllfTElTVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bWVk
aWEoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9tZWRp
YV9xdWVyeV9saXN0X2dldF9tYXRjaGVzKFdlYktpdERPTU1lZGlhUXVlcnlMaXN0KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX1FVRVJZX0xJU1Qoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tYXRjaGVzKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YVF1ZXJ5TGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MWI1MzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0LmgKQEAgLTAsMCArMSw3NSBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZWRp
YVF1ZXJ5TGlzdF9oCisjZGVmaW5lIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0X2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9NRURJQV9RVUVSWV9MSVNUICAgICAgICAgICAgKHdlYmtpdF9k
b21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElB
X1FVRVJZX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX1FVRVJZX0xJU1QsIFdlYktpdERPTU1lZGlhUXVl
cnlMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9RVUVSWV9MSVNUX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9N
RURJQV9RVUVSWV9MSVNULCBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdENsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX01FRElBX1FVRVJZX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX1FVRVJZX0xJU1QpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX1FVRVJZX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX1FVRVJZ
X0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX1FVRVJZX0xJU1RfR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX01F
RElBX1FVRVJZX0xJU1QsIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0Q2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTU1lZGlhUXVlcnlMaXN0IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdENsYXNzIHsKKyAg
ICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF9tZWRpYToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01NZWRpYVF1ZXJ5TGlzdAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9t
ZWRpYV9xdWVyeV9saXN0X2dldF9tZWRpYShXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF9tYXRjaGVzOgorICog
QHNlbGY6IEEgI1dlYktpdERPTU1lZGlhUXVlcnlMaXN0CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9nZXRfbWF0Y2hlcyhXZWJLaXRET01NZWRp
YVF1ZXJ5TGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YVF1ZXJ5TGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
NTUzNjliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUuaApA
QCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU1lZGlh
UXVlcnlMaXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhUXVlcnlMaXN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0Lmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QqIHdyYXBNZWRpYVF1ZXJ5TGlz
dChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdCopOworV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QqIGtp
dChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdCopOworV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqIGNv
cmUoV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFUcmFj
a1N1cHBvcnRlZENvbnN0cmFpbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wYWRjYWFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMuY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFU
cmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFUcmFja1N1
cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX01FRElB
X1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UU19HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9NRURJQV9UUkFDS19TVVBQT1JU
RURfQ09OU1RSQUlOVFMsIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1By
aXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29u
c3RyYWludHNQcml2YXRlIHsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFJlZlB0cjxX
ZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHM+IGNvcmVPYmplY3Q7CisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKK30gV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRl
ZENvbnN0cmFpbnRzUHJpdmF0ZTsKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMq
IGtpdChXZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMqIG9iaikKK3sKKyAg
ICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0g
RE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9NRURJ
QV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFMocmV0KTsKKworICAgIHJldHVybiB3cmFwTWVk
aWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKG9iaik7Cit9CisKK1dlYkNvcmU6Ok1lZGlhVHJh
Y2tTdXBwb3J0ZWRDb25zdHJhaW50cyogY29yZShXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01NZWRpYVRyYWNr
U3VwcG9ydGVkQ29uc3RyYWludHMqIHdyYXBNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMo
V2ViQ29yZTo6TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9NRURJQV9UUkFD
S19TVVBQT1JURURfQ09OU1RSQUlOVFMoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9NRURJ
QV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFMsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTUVESUFfU1RSRUFNKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTU1lZGlhVHJhY2tTdXBw
b3J0ZWRDb25zdHJhaW50cywgd2Via2l0X2RvbV9tZWRpYV90cmFja19zdXBwb3J0ZWRfY29uc3Ry
YWludHMsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
bWVkaWFfdHJhY2tfc3VwcG9ydGVkX2NvbnN0cmFpbnRzX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFNfR0VU
X1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHByaXYtPn5XZWJLaXRET01NZWRpYVRyYWNrU3Vw
cG9ydGVkQ29uc3RyYWludHNQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV9tZWRpYV90cmFja19zdXBwb3J0ZWRfY29uc3RyYWludHNfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fbWVkaWFfdHJhY2tf
c3VwcG9ydGVkX2NvbnN0cmFpbnRzX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fbWVkaWFfdHJhY2tfc3VwcG9ydGVkX2NvbnN0cmFpbnRzX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBXZWJLaXRET01NZWRpYVRyYWNrU3Vw
cG9ydGVkQ29uc3RyYWludHNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9UUkFDS19T
VVBQT1JURURfQ09OU1RSQUlOVFNfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFp
bnRzKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Cisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50c19j
bGFzc19pbml0KFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c0NsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQ
cml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbWVk
aWFfdHJhY2tfc3VwcG9ydGVkX2NvbnN0cmFpbnRzX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJh
aW50c19maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV90cmFja19z
dXBwb3J0ZWRfY29uc3RyYWludHNfaW5pdChXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29u
c3RyYWludHMqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENv
bnN0cmFpbnRzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVESUFfVFJBQ0tfU1VQUE9SVEVE
X0NPTlNUUkFJTlRTX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0
RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZSgpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRy
YWNrU3VwcG9ydGVkQ29uc3RyYWludHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hYTMwNDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c19o
CisjZGVmaW5lIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c19oCisKKyNp
ZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRT
ICAgICAgICAgICAgKHdlYmtpdF9kb21fbWVkaWFfdHJhY2tfc3VwcG9ydGVkX2NvbnN0cmFpbnRz
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NP
TlNUUkFJTlRTKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFMsIFdl
YktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cykpCisjZGVmaW5lIFdFQktJVF9E
T01fTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9NRURJQV9UUkFD
S19TVVBQT1JURURfQ09OU1RSQUlOVFMsIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25z
dHJhaW50c0NsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX1RSQUNLX1NVUFBPUlRF
RF9DT05TVFJBSU5UUyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFNf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUykpCisjZGVmaW5lIFdFQktJ
VF9ET01fTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9NRURJQV9U
UkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFMsIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRD
b25zdHJhaW50c0NsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c0NsYXNzIHsK
KyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50c19nZXRf
dHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25z
dHJhaW50c19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJh
aW50c1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MTZlZWMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUuaApA
QCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQcml2YXRlX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oPgor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiB3cmFwTWVkaWFUcmFja1N1cHBvcnRlZENv
bnN0cmFpbnRzKFdlYkNvcmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyopOworV2Vi
S2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiBraXQoV2ViQ29yZTo6TWVkaWFU
cmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKik7CitXZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMqIGNvcmUoV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRz
Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9TVFJF
QU0pICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWlu
dHNQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVzc2FnZVBvcnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01N
ZXNzYWdlUG9ydC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllMDdm
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVzc2FnZVBvcnQuY3BwCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NTWVzc2FnZVBvcnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAi
R09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVzc2FnZVBvcnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTUVTU0FHRV9QT1JUX0dFVF9QUklWQVRF
KG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX01F
U1NBR0VfUE9SVCwgV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TWVz
c2FnZVBvcnQ+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU1lc3NhZ2VQb3J0KiBraXQoV2ViQ29yZTo6
TWVzc2FnZVBvcnQqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9NRVNTQUdFX1BPUlQocmV0KTsKKworICAgIHJldHVybiB3cmFw
TWVzc2FnZVBvcnQob2JqKTsKK30KKworV2ViQ29yZTo6TWVzc2FnZVBvcnQqIGNvcmUoV2ViS2l0
RE9NTWVzc2FnZVBvcnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpNZXNzYWdlUG9ydCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTU1lc3NhZ2VQb3J0KiB3cmFwTWVzc2FnZVBv
cnQoV2ViQ29yZTo6TWVzc2FnZVBvcnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX01FU1NBR0VfUE9SVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAg
aWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpNZXNz
YWdlUG9ydCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9t
ZXNzYWdlX3BvcnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6TWVzc2FnZVBvcnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpNZXNzYWdlUG9ydCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjph
ZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX21l
c3NhZ2VfcG9ydF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpNZXNzYWdlUG9ydCogY29yZVRhcmdldCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAg
ICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9kaXNwYXRj
aF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9tZXNz
YWdlX3BvcnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlz
dGVuZXIgPSB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9
CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTU1lc3NhZ2VQb3J0LCB3ZWJraXRf
ZG9tX21lc3NhZ2VfcG9ydCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQpKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9NRVNTQUdFX1BPUlRfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsK
KworICAgIHByaXYtPn5XZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fTUVTU0FHRV9QT1JUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+
Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Kj4oV0VCS0lUX0RP
TV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNo
ZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2Jq
ZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9jbGFzc19pbml0
KFdlYktpdERPTU1lc3NhZ2VQb3J0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTU1l
c3NhZ2VQb3J0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJr
aXRfZG9tX21lc3NhZ2VfcG9ydF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X2luaXQoV2ViS2l0RE9NTWVzc2FnZVBvcnQqIHJlcXVl
c3QpCit7CisgICAgV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9NRVNTQUdFX1BPUlRfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJL
aXRET01NZXNzYWdlUG9ydFByaXZhdGUoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVzc2FnZVBvcnQuaApzaW1pbGFyaXR5IGluZGV4IDU2JQpyZW5hbWUgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01yZWFkb25seS5o
CnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0LmgKaW5kZXggNzQyODZiOC4uYjMxY2QyYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NcmVhZG9ubHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0LmgKQEAgLTE4LDggKzE4LDgg
QEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktp
dERPTXJlYWRvbmx5X2gKLSNkZWZpbmUgV2ViS2l0RE9NcmVhZG9ubHlfaAorI2lmbmRlZiBXZWJL
aXRET01NZXNzYWdlUG9ydF9oCisjZGVmaW5lIFdlYktpdERPTU1lc3NhZ2VQb3J0X2gKIAogI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQogCkBAIC0yOSwyOSArMjksMjUgQEAKIAog
R19CRUdJTl9ERUNMUwogCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X1JFQURPTkxZICAgICAgICAgICAgKHdlYmtpdF9kb21fcmVhZG9ubHlfZ2V0X3R5cGUoKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9SRUFET05MWShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUkVBRE9OTFksIFdlYktpdERPTXJl
YWRvbmx5KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9SRUFET05MWV9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUkVBRE9OTFks
IFdlYktpdERPTXJlYWRvbmx5Q2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfUkVBRE9OTFko
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1JFQURPTkxZKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19SRUFET05MWV9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
UkVBRE9OTFkpKQotI2RlZmluZSBXRUJLSVRfRE9NX1JFQURPTkxZX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9SRUFET05M
WSwgV2ViS2l0RE9NcmVhZG9ubHlDbGFzcykpCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9NRVNT
QUdFX1BPUlQgICAgICAgICAgICAod2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9NRVNTQUdFX1BPUlQob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FU1NBR0VfUE9SVCwg
V2ViS2l0RE9NTWVzc2FnZVBvcnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfTUVTU0FHRV9QT1JULCBXZWJLaXRET01NZXNzYWdlUG9ydENsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX01FU1NBR0VfUE9SVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTUVTU0FHRV9QT1JUKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19NRVNTQUdFX1BPUlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FU1NBR0VfUE9SVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fTUVTU0FHRV9QT1JUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9NRVNTQUdFX1BPUlQsIFdlYktp
dERPTU1lc3NhZ2VQb3J0Q2xhc3MpKQogCi1zdHJ1Y3QgX1dlYktpdERPTXJlYWRvbmx5IHsKK3N0
cnVjdCBfV2ViS2l0RE9NTWVzc2FnZVBvcnQgewogICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRf
aW5zdGFuY2U7CiB9OwogCi1zdHJ1Y3QgX1dlYktpdERPTXJlYWRvbmx5Q2xhc3Mgeworc3RydWN0
IF9XZWJLaXRET01NZXNzYWdlUG9ydENsYXNzIHsKICAgICBXZWJLaXRET01PYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3JlYWRvbmx5
X2dldF90eXBlKHZvaWQpOword2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfZ2V0X3R5cGUodm9pZCk7
CiAKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkg
Ki8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0SW50ZXJmYWNlX2ggKi8KLSNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01yZWFkb25seV9o
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NTWVzc2FnZVBvcnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01NZXNzYWdlUG9ydFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlYTE0ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGVf
aAorI2RlZmluZSBXZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9NZXNzYWdlUG9ydC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01NZXNzYWdl
UG9ydC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU1lc3NhZ2VQb3J0KiB3cmFw
TWVzc2FnZVBvcnQoV2ViQ29yZTo6TWVzc2FnZVBvcnQqKTsKK1dlYktpdERPTU1lc3NhZ2VQb3J0
KiBraXQoV2ViQ29yZTo6TWVzc2FnZVBvcnQqKTsKK1dlYkNvcmU6Ok1lc3NhZ2VQb3J0KiBjb3Jl
KFdlYktpdERPTU1lc3NhZ2VQb3J0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1v
dXNlRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45YzcwM2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50
LmNwcApAQCAtMCwwICsxLDUyOSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTU1vdXNlRXZlbnQuaCIKKwor
I2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENh
Y2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NTW91c2VFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTW91c2VFdmVudFVu
c3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU1vdXNlRXZlbnQqIGtpdChXZWJD
b3JlOjpNb3VzZUV2ZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fTU9VU0VfRVZF
TlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50Kj4ob2JqKSkpOworfQorCitXZWJDb3Jl
OjpNb3VzZUV2ZW50KiBjb3JlKFdlYktpdERPTU1vdXNlRXZlbnQqIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNb3VzZUV2ZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NTW91
c2VFdmVudCogd3JhcE1vdXNlRXZlbnQoV2ViQ29yZTo6TW91c2VFdmVudCogY29yZU9iamVjdCkK
K3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fTU9VU0Vf
RVZFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9NT1VTRV9FVkVOVCwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01Nb3VzZUV2ZW50LCB3ZWJraXRfZG9tX21vdXNlX2V2
ZW50LCBXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX1NDUkVFTl9YLAorICAgIFBST1BfU0NSRUVOX1ksCisgICAgUFJPUF9DTElFTlRfWCwK
KyAgICBQUk9QX0NMSUVOVF9ZLAorICAgIFBST1BfQ1RSTF9LRVksCisgICAgUFJPUF9TSElGVF9L
RVksCisgICAgUFJPUF9BTFRfS0VZLAorICAgIFBST1BfTUVUQV9LRVksCisgICAgUFJPUF9CVVRU
T04sCisgICAgUFJPUF9SRUxBVEVEX1RBUkdFVCwKKyAgICBQUk9QX01PVkVNRU5UX1gsCisgICAg
UFJPUF9NT1ZFTUVOVF9ZLAorICAgIFBST1BfT0ZGU0VUX1gsCisgICAgUFJPUF9PRkZTRVRfWSwK
KyAgICBQUk9QX1gsCisgICAgUFJPUF9ZLAorICAgIFBST1BfRlJPTV9FTEVNRU5ULAorICAgIFBS
T1BfVE9fRUxFTUVOVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbW91c2VfZXZlbnRf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NTW91c2VFdmVudCogc2Vs
ZiA9IFdFQktJVF9ET01fTU9VU0VfRVZFTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9TQ1JFRU5fWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2NyZWVuX3goc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NSRUVOX1k6CisgICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NjcmVlbl95KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NMSUVOVF9YOgorICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9jbGllbnRfeChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTElFTlRfWToKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY2xpZW50X3ko
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1RSTF9LRVk6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2N0
cmxfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NISUZUX0tFWToK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfc2hpZnRfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FM
VF9LRVk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fbW91
c2VfZXZlbnRfZ2V0X2FsdF9rZXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTUVUQV9LRVk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X21ldGFfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0JVVFRPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0
X2RvbV9tb3VzZV9ldmVudF9nZXRfYnV0dG9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1JFTEFURURfVEFSR0VUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3JlbGF0ZWRfdGFyZ2V0KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01PVkVNRU5UX1g6CisgICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X21vdmVtZW50X3goc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTU9WRU1FTlRfWToKKyAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbW92ZW1l
bnRfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PRkZTRVRfWDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRf
b2Zmc2V0X3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT0ZGU0VUX1k6
CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRf
Z2V0X29mZnNldF95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1g6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0
X3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfWToKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfeShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUk9NX0VMRU1FTlQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfZnJvbV9l
bGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RPX0VMRU1FTlQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfdG9fZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX21vdXNlX2V2ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NTW91c2VFdmVudENsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
U0NSRUVOX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNjcmVl
bi14IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OnNjcmVlbi14IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2xvbmcgTW91c2VFdmVudDpzY3JlZW4teCIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1NDUkVFTl9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygK
KyAgICAgICAgICAgICJzY3JlZW4teSIsCisgICAgICAgICAgICAiTW91c2VFdmVudDpzY3JlZW4t
eSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIE1vdXNlRXZlbnQ6c2NyZWVuLXkiLAor
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DTElFTlRfWCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiY2xpZW50LXgiLAorICAgICAgICAgICAg
Ik1vdXNlRXZlbnQ6Y2xpZW50LXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3Vz
ZUV2ZW50OmNsaWVudC14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Q0xJRU5UX1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImNsaWVu
dC15IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OmNsaWVudC15IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2xvbmcgTW91c2VFdmVudDpjbGllbnQteSIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0NUUkxfS0VZLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJjdHJsLWtleSIsCisgICAgICAgICAgICAiTW91c2VFdmVudDpjdHJs
LWtleSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIE1vdXNlRXZlbnQ6Y3RybC1r
ZXkiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSElGVF9LRVksCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgInNoaWZ0LWtleSIsCisgICAgICAgICAgICAiTW91c2VF
dmVudDpzaGlmdC1rZXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBNb3VzZUV2
ZW50OnNoaWZ0LWtleSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMVF9LRVksCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImFsdC1rZXkiLAorICAgICAgICAgICAg
Ik1vdXNlRXZlbnQ6YWx0LWtleSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIE1v
dXNlRXZlbnQ6YWx0LWtleSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FVEFfS0VZLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJtZXRhLWtleSIsCisgICAgICAg
ICAgICAiTW91c2VFdmVudDptZXRhLWtleSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29s
ZWFuIE1vdXNlRXZlbnQ6bWV0YS1rZXkiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CVVRUT04sCisg
ICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgImJ1dHRvbiIsCisgICAgICAg
ICAgICAiTW91c2VFdmVudDpidXR0b24iLAorICAgICAgICAgICAgInJlYWQtb25seSBndXNob3J0
IE1vdXNlRXZlbnQ6YnV0dG9uIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFTEFU
RURfVEFSR0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInJl
bGF0ZWQtdGFyZ2V0IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OnJlbGF0ZWQtdGFyZ2V0IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRXZlbnRUYXJnZXQqIE1vdXNlRXZlbnQ6
cmVsYXRlZC10YXJnZXQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdF
VCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX01PVkVNRU5UX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
Im1vdmVtZW50LXgiLAorICAgICAgICAgICAgIk1vdXNlRXZlbnQ6bW92ZW1lbnQteCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdsb25nIE1vdXNlRXZlbnQ6bW92ZW1lbnQteCIsCisgICAgICAg
ICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01PVkVNRU5UX1ksCisgICAgICAgIGdfcGFy
YW1fc3BlY19sb25nKAorICAgICAgICAgICAgIm1vdmVtZW50LXkiLAorICAgICAgICAgICAgIk1v
dXNlRXZlbnQ6bW92ZW1lbnQteSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIE1vdXNl
RXZlbnQ6bW92ZW1lbnQteSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X09GRlNFVF9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJvZmZz
ZXQteCIsCisgICAgICAgICAgICAiTW91c2VFdmVudDpvZmZzZXQteCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdsb25nIE1vdXNlRXZlbnQ6b2Zmc2V0LXgiLAorICAgICAgICAgICAgR19NSU5M
T05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9PRkZTRVRfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
CisgICAgICAgICAgICAib2Zmc2V0LXkiLAorICAgICAgICAgICAgIk1vdXNlRXZlbnQ6b2Zmc2V0
LXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3VzZUV2ZW50Om9mZnNldC15IiwK
KyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfWCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2xvbmcoCisgICAgICAgICAgICAieCIsCisgICAgICAgICAgICAiTW91c2VFdmVudDp4
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgTW91c2VFdmVudDp4IiwKKyAgICAgICAg
ICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoCisgICAgICAgICAgICAieSIsCisgICAgICAgICAgICAiTW91c2VFdmVudDp5IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgTW91c2VFdmVudDp5IiwKKyAgICAgICAgICAgIEdfTUlO
TE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfRlJPTV9FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgImZyb20tZWxlbWVudCIsCisgICAgICAgICAgICAiTW91c2VF
dmVudDpmcm9tLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2Rl
KiBNb3VzZUV2ZW50OmZyb20tZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
Tk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1RPX0VMRU1FTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAidG8tZWxlbWVudCIsCisgICAgICAgICAgICAiTW91c2VFdmVudDp0by1lbGVtZW50IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogTW91c2VFdmVudDp0by1lbGVt
ZW50IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tb3Vz
ZV9ldmVudF9pbml0KFdlYktpdERPTU1vdXNlRXZlbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfaW5pdF9t
b3VzZV9ldmVudChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdHlwZSwg
Z2Jvb2xlYW4gY2FuQnViYmxlLCBnYm9vbGVhbiBjYW5jZWxhYmxlLCBXZWJLaXRET01ET01XaW5k
b3cqIHZpZXcsIGdsb25nIGRldGFpbCwgZ2xvbmcgc2NyZWVuWCwgZ2xvbmcgc2NyZWVuWSwgZ2xv
bmcgY2xpZW50WCwgZ2xvbmcgY2xpZW50WSwgZ2Jvb2xlYW4gY3RybEtleSwgZ2Jvb2xlYW4gYWx0
S2V5LCBnYm9vbGVhbiBzaGlmdEtleSwgZ2Jvb2xlYW4gbWV0YUtleSwgZ3VzaG9ydCBidXR0b24s
IFdlYktpdERPTUV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTU9VU0VfRVZFTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHlwZSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1codmlldykpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVF9UQVJHRVQocmVsYXRlZFRhcmdl
dCkpOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVHlwZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0
eXBlKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGNvbnZlcnRlZFZpZXcgPSBXZWJLaXQ6OmNv
cmUodmlldyk7CisgICAgV2ViQ29yZTo6RXZlbnRUYXJnZXQqIGNvbnZlcnRlZFJlbGF0ZWRUYXJn
ZXQgPSBXZWJLaXQ6OmNvcmUocmVsYXRlZFRhcmdldCk7CisgICAgaXRlbS0+aW5pdE1vdXNlRXZl
bnQoY29udmVydGVkVHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCBjb252ZXJ0ZWRWaWV3LCBk
ZXRhaWwsIHNjcmVlblgsIHNjcmVlblksIGNsaWVudFgsIGNsaWVudFksIGN0cmxLZXksIGFsdEtl
eSwgc2hpZnRLZXksIG1ldGFLZXksIGJ1dHRvbiwgY29udmVydGVkUmVsYXRlZFRhcmdldCk7Cit9
CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NjcmVlbl94KFdlYktpdERPTU1v
dXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2NyZWVuWCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NjcmVlbl95KFdl
YktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9V
U0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2NyZWVuWSgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2Ns
aWVudF94KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Y2xpZW50
WCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X2NsaWVudF95KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNl
RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRl
bS0+Y2xpZW50WSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X2N0cmxfa2V5KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPmN0cmxLZXkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9zaGlmdF9rZXkoV2ViS2l0RE9N
TW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVO
VChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+c2hpZnRLZXkoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dl
dF9hbHRfa2V5KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0
ZW0tPmFsdEtleSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X21ldGFfa2V5KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPm1ldGFLZXkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitndXNob3J0IHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2J1dHRvbihXZWJLaXRET01Nb3Vz
ZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+YnV0dG9uKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRf
Z2V0X3JlbGF0ZWRfdGFyZ2V0KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1v
dXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkV2ZW50VGFyZ2V0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVsYXRlZFRh
cmdldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X21vdmVtZW50X3goV2ViS2l0RE9N
TW91c2VFdmVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3Vz
ZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0
ZW0tPm1vdmVtZW50WCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJQb2ludGVy
IExvY2siKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5B
QkxFKFBPSU5URVJfTE9DSykgKi8KK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9n
ZXRfbW92ZW1lbnRfeShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShQ
T0lOVEVSX0xPQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+bW92ZW1lbnRZKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlBvaW50ZXIgTG9jayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGds
b25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoUE9JTlRFUl9MT0NLKSAqLworfQorCitnbG9uZyB3
ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeChXZWJLaXRET01Nb3VzZUV2ZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdsb25nIHJlc3VsdCA9IGl0ZW0tPm9mZnNldFgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnbG9uZyB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeShXZWJLaXRET01Nb3Vz
ZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm9mZnNldFkoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF94KFdlYktpdERPTU1v
dXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+eCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3koV2ViS2l0RE9NTW91c2VF
dmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT55KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfZnJvbV9lbGVtZW50
KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
TU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mcm9tRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X3RvX2VsZW1lbnQoV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRvRWxl
bWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0NTdkZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTW91c2VFdmVudC5oCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0
ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRET01Nb3VzZUV2ZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NTW91c2VFdmVudF9oCisKKyNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01VSUV2ZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9NT1VTRV9FVkVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTU9V
U0VfRVZFTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX01PVVNFX0VWRU5ULCBXZWJLaXRET01Nb3VzZUV2ZW50KSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9NT1VTRV9FVkVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTU9VU0VfRVZFTlQsIFdlYktp
dERPTU1vdXNlRXZlbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfTU9VU0VfRVZFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9NT1VTRV9FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fTU9VU0VfRVZFTlRfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX01PVVNFX0VWRU5ULCBXZWJLaXRET01Nb3VzZUV2ZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTU1vdXNlRXZlbnQgeworICAgIFdlYktpdERPTVVJRXZlbnQgcGFyZW50X2luc3RhbmNl
OworfTsKKworc3RydWN0IF9XZWJLaXRET01Nb3VzZUV2ZW50Q2xhc3MgeworICAgIFdlYktpdERP
TVVJRXZlbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX21vdXNlX2V2ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bW91c2VfZXZlbnRfaW5pdF9tb3VzZV9ldmVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3Vz
ZUV2ZW50CisgKiBAdHlwZTogQSAjZ2NoYXIKKyAqIEBjYW5CdWJibGU6IEEgI2dib29sZWFuCisg
KiBAY2FuY2VsYWJsZTogQSAjZ2Jvb2xlYW4KKyAqIEB2aWV3OiBBICNXZWJLaXRET01ET01XaW5k
b3cKKyAqIEBkZXRhaWw6IEEgI2dsb25nCisgKiBAc2NyZWVuWDogQSAjZ2xvbmcKKyAqIEBzY3Jl
ZW5ZOiBBICNnbG9uZworICogQGNsaWVudFg6IEEgI2dsb25nCisgKiBAY2xpZW50WTogQSAjZ2xv
bmcKKyAqIEBjdHJsS2V5OiBBICNnYm9vbGVhbgorICogQGFsdEtleTogQSAjZ2Jvb2xlYW4KKyAq
IEBzaGlmdEtleTogQSAjZ2Jvb2xlYW4KKyAqIEBtZXRhS2V5OiBBICNnYm9vbGVhbgorICogQGJ1
dHRvbjogQSAjZ3VzaG9ydAorICogQHJlbGF0ZWRUYXJnZXQ6IEEgI1dlYktpdERPTUV2ZW50VGFy
Z2V0CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfaW5p
dF9tb3VzZV9ldmVudChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdHlw
ZSwgZ2Jvb2xlYW4gY2FuQnViYmxlLCBnYm9vbGVhbiBjYW5jZWxhYmxlLCBXZWJLaXRET01ET01X
aW5kb3cqIHZpZXcsIGdsb25nIGRldGFpbCwgZ2xvbmcgc2NyZWVuWCwgZ2xvbmcgc2NyZWVuWSwg
Z2xvbmcgY2xpZW50WCwgZ2xvbmcgY2xpZW50WSwgZ2Jvb2xlYW4gY3RybEtleSwgZ2Jvb2xlYW4g
YWx0S2V5LCBnYm9vbGVhbiBzaGlmdEtleSwgZ2Jvb2xlYW4gbWV0YUtleSwgZ3VzaG9ydCBidXR0
b24sIFdlYktpdERPTUV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX21vdXNlX2V2ZW50X2dldF9zY3JlZW5feDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01N
b3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2NyZWVuX3goV2ViS2l0RE9NTW91c2VFdmVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2NyZWVuX3k6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2ds
b25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3Nj
cmVlbl95KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bW91c2VfZXZlbnRfZ2V0X2NsaWVudF94OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZl
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJr
aXRfZG9tX21vdXNlX2V2ZW50X2dldF9jbGllbnRfeChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9jbGllbnRfeToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoq
LworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY2xpZW50X3ko
V2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9l
dmVudF9nZXRfY3RybF9rZXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoK
KyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21fbW91c2VfZXZlbnRfZ2V0X2N0cmxfa2V5KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NoaWZ0X2tleToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2hp
ZnRfa2V5KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bW91c2VfZXZlbnRfZ2V0X2FsdF9rZXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2FsdF9rZXkoV2ViS2l0RE9NTW91c2VFdmVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbWV0YV9rZXk6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0
X21ldGFfa2V5KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X2J1dHRvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2
ZW50CisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorKiovCitXRUJLSVRfQVBJIGd1c2hvcnQK
K3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2J1dHRvbihXZWJLaXRET01Nb3VzZUV2ZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9yZWxhdGVkX3Rhcmdl
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01FdmVudFRhcmdldAorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTUV2ZW50VGFyZ2V0Kgord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfcmVsYXRlZF90
YXJnZXQoV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9t
b3VzZV9ldmVudF9nZXRfb2Zmc2V0X3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtp
dF9kb21fbW91c2VfZXZlbnRfZ2V0X29mZnNldF94KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X29mZnNldF95OgorICogQHNl
bGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiov
CitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeShX
ZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2
ZW50X2dldF94OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX21vdXNlX2V2
ZW50X2dldF94KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X3koV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfZnJvbV9lbGVtZW50OgorICogQHNlbGY6IEEg
I1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2Rv
bV9tb3VzZV9ldmVudF9nZXRfZnJvbV9lbGVtZW50KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3RvX2VsZW1lbnQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3
ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF90b19lbGVtZW50KFdlYktpdERPTU1vdXNlRXZlbnQq
IHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NTW91c2VFdmVudF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZl
bnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3MjVmMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTU1v
dXNlRXZlbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NTW91c2VFdmVudFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTU1vdXNlRXZlbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01Nb3Vz
ZUV2ZW50KiB3cmFwTW91c2VFdmVudChXZWJDb3JlOjpNb3VzZUV2ZW50Kik7CitXZWJLaXRET01N
b3VzZUV2ZW50KiBraXQoV2ViQ29yZTo6TW91c2VFdmVudCopOworV2ViQ29yZTo6TW91c2VFdmVu
dCogY29yZShXZWJLaXRET01Nb3VzZUV2ZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIFdlYktpdERPTU1vdXNlRXZlbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTW91c2VFdmVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnRVbnN0YWJsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYjA3NjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU1vdXNlRXZlbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTW91c2VFdmVudFVuc3RhYmxl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NTW91c2VFdmVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21f
bW91c2VfZXZlbnRfZ2V0X21vdmVtZW50X3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VF
dmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tb3Zl
bWVudF94KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bW91c2VfZXZlbnRfZ2V0X21vdmVtZW50X3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VF
dmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tb3Zl
bWVudF95KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRE
T01Nb3VzZUV2ZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXAu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01OYW1lZE5vZGVNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjA1MmEzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVkTm9kZU1hcC5jcHAK
QEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01OYW1lZE5vZGVNYXAuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9k
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUF9HRVRfUFJJ
VkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQ
RV9OQU1FRF9OT0RFX01BUCwgV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJD
b3JlOjpOYW1lZE5vZGVNYXA+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTU5hbWVkTm9kZU1hcFBy
aXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01OYW1lZE5vZGVNYXAqIGtp
dChXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUChyZXQpOworCisg
ICAgcmV0dXJuIHdyYXBOYW1lZE5vZGVNYXAob2JqKTsKK30KKworV2ViQ29yZTo6TmFtZWROb2Rl
TWFwKiBjb3JlKFdlYktpdERPTU5hbWVkTm9kZU1hcCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
cmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCo+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTU5hbWVkTm9k
ZU1hcCogd3JhcE5hbWVkTm9kZU1hcChXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX05BTUVE
X05PREVfTUFQKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVAsICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTmFtZWROb2RlTWFwLCB3ZWJraXRfZG9t
X25hbWVkX25vZGVfbWFwLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25h
bWVkX25vZGVfbWFwX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01O
YW1lZE5vZGVNYXBQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUF9HRVRf
UFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHBy
aXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTU5hbWVkTm9kZU1h
cFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFw
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmID0gV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9t
YXBfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Vi
a2l0X2RvbV9uYW1lZF9ub2RlX21hcF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJv
cGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX25hbWVkX25vZGVfbWFwX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRE
T01OYW1lZE5vZGVNYXBQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUF9H
RVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpOYW1lZE5vZGVNYXAqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfY2xhc3NfaW5pdChXZWJLaXRET01OYW1lZE5vZGVNYXBD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFw
X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX25h
bWVkX25vZGVfbWFwX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVu
Z3RoIiwKKyAgICAgICAgICAgICJOYW1lZE5vZGVNYXA6bGVuZ3RoIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3Vsb25nIE5hbWVkTm9kZU1hcDpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19N
QVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfaW5pdChXZWJLaXRET01OYW1l
ZE5vZGVNYXAqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fTkFNRURfTk9ERV9NQVBfR0VUX1BSSVZBVEUocmVxdWVzdCk7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlKCk7Cit9CisKK1dlYktp
dERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X25hbWVkX2l0ZW0oV2ViS2l0
RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19OQU1FRF9OT0RFX01BUChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwobmFtZSwgMCk7CisgICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXROYW1lZEl0ZW0oY29udmVydGVkTmFtZSkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbShXZWJLaXRE
T01OYW1lZE5vZGVNYXAqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQKHNlbGYpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJD
b3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29y
ZTo6Tm9kZSogY29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNldE5hbWVkSXRlbSgqY29udmVydGVkTm9kZSwg
ZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1l
ZF9pdGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQ
KHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6TmFt
ZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yZW1vdmVOYW1lZEl0ZW0oY29udmVydGVkTmFtZSwg
ZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2l0ZW0oV2ViS2l0
RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTkFNRURfTk9ERV9NQVAoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hbWVkTm9k
ZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9k
ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5v
ZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X25hbWVkX2l0ZW1fbnMoV2ViS2l0RE9N
TmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hh
ciogbG9jYWxOYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQ
KHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lc3BhY2VVUkksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxvY2FsTmFtZSwgMCk7CisgICAgV2ViQ29yZTo6TmFt
ZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZExvY2FsTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChsb2NhbE5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0TmFtZWRJdGVtTlMoY29udmVydGVkTmFtZXNwYWNlVVJJ
LCBjb252ZXJ0ZWRMb2NhbE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9t
YXBfc2V0X25hbWVkX2l0ZW1fbnMoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBXZWJLaXRE
T01Ob2RlKiBub2RlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OQU1FRF9OT0RFX01BUChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFKG5vZGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJy
b3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJL
aXQ6OmNvcmUobm9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
UmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5z
ZXROYW1lZEl0ZW0oKmNvbnZlcnRlZE5vZGUsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2Rv
bV9uYW1lZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVN
YXAqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5h
bWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05P
REVfTUFQKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lc3BhY2VVUkks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxvY2FsTmFtZSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5hbWVk
Tm9kZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRMb2NhbE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgobG9jYWxOYW1lKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJl
bW92ZU5hbWVkSXRlbU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVSSSwgY29udmVydGVkTG9jYWxOYW1l
LCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9sZW5ndGgoV2ViS2l0
RE9NTmFtZWROb2RlTWFwKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVE
X05PREVfTUFQKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU5hbWVkTm9kZU1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjkzOTY3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVkTm9kZU1hcC5oCkBAIC0wLDAg
KzEsMTM5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQo
X19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vy
cm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3Rs
eS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01OYW1lZE5vZGVNYXBfaAorI2RlZmluZSBX
ZWJLaXRET01OYW1lZE5vZGVNYXBfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9OQU1FRF9OT0RFX01BUCAgICAgICAgICAgICh3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFw
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTkFNRURfTk9ERV9NQVAob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X05BTUVEX05PREVfTUFQLCBXZWJLaXRET01OYW1lZE5vZGVNYXApKQorI2RlZmluZSBXRUJLSVRf
RE9NX05BTUVEX05PREVfTUFQX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCwgV2ViS2l0RE9NTmFt
ZWROb2RlTWFwQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTkFNRURfTk9ERV9NQVAob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX05BTUVEX05PREVfTUFQKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OQU1FRF9OT0RFX01B
UF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfTkFNRURfTk9ERV9NQVApKQorI2RlZmluZSBXRUJLSVRfRE9NX05BTUVEX05PREVf
TUFQX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCwgV2ViS2l0RE9NTmFtZWROb2RlTWFwQ2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTU5hbWVkTm9kZU1hcCB7CisgICAgV2ViS2l0RE9NT2JqZWN0
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTmFtZWROb2RlTWFwQ2xh
c3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbmFtZWRfaXRlbToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9uYW1lZF9p
dGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0ZW06CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NTmFtZWROb2RlTWFwCisgKiBAbm9kZTogQSAjV2ViS2l0RE9NTm9kZQor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNX
ZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21f
bmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxm
LCBXZWJLaXRET01Ob2RlKiBub2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01OYW1lZE5vZGVNYXAKKyAqIEBuYW1lOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9y
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVt
b3ZlX25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBnY2hhciog
bmFtZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9t
YXBfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyAqIEBpbmRleDog
QSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01O
b2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbmFtZWRfbm9k
ZV9tYXBfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbmFtZWRfaXRlbV9uczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyAqIEBuYW1lc3BhY2VVUkk6IEEgI2dj
aGFyCisgKiBAbG9jYWxOYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3
ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9uYW1lZF9pdGVtX25zKFdlYktpdERPTU5hbWVk
Tm9kZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxv
Y2FsTmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRf
aXRlbV9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyAqIEBub2RlOiBB
ICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01O
b2RlKgord2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbV9ucyhXZWJLaXRE
T01OYW1lZE5vZGVNYXAqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVt
X25zOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAorICogQG5hbWVzcGFjZVVS
STogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1v
dmVfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUsIEdFcnJvcioqIGVycm9yKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9sZW5ndGg6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NTmFtZWROb2RlTWFwCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisq
Ki8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9sZW5n
dGgoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdlYktpdERPTU5hbWVkTm9kZU1hcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVkTm9k
ZU1hcFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZDZkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5h
bWVkTm9kZU1hcFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUv
TmFtZWROb2RlTWFwLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5hbWVkTm9kZU1h
cC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU5hbWVkTm9kZU1hcCogd3JhcE5h
bWVkTm9kZU1hcChXZWJDb3JlOjpOYW1lZE5vZGVNYXAqKTsKK1dlYktpdERPTU5hbWVkTm9kZU1h
cCoga2l0KFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCopOworV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBj
b3JlKFdlYktpdERPTU5hbWVkTm9kZU1hcCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBXZWJLaXRET01OYW1lZE5vZGVNYXBQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTmF2aWdhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mMWIyZmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0
b3IuY3BwCkBAIC0wLDAgKzEsNjkxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTmF2aWdhdG9yLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9OYXZpZ2F0b3JCYXR0ZXJ5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OYXZp
Z2F0b3JDb250ZW50VXRpbHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05hdmlnYXRvckdlb2xvY2F0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0b3JNZWRpYURldmljZXMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL05hdmlnYXRvclZpYnJhdGlvbi5oPgorI2luY2x1ZGUgIldlYktpdERPTUJh
dHRlcnlNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTU1pbWVUeXBlQXJy
YXlQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5hdmlnYXRv
clByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9OQVZJR0FUT1JfR0VUX1BSSVZBVEUo
b2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfTkFW
SUdBVE9SLCBXZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NTmF2aWdhdG9yUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5hdmlnYXRvcj4g
Y29yZU9iamVjdDsKK30gV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTU5hdmlnYXRvcioga2l0KFdlYkNvcmU6Ok5hdmlnYXRvciogb2Jq
KQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRl
ciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRf
RE9NX05BVklHQVRPUihyZXQpOworCisgICAgcmV0dXJuIHdyYXBOYXZpZ2F0b3Iob2JqKTsKK30K
KworV2ViQ29yZTo6TmF2aWdhdG9yKiBjb3JlKFdlYktpdERPTU5hdmlnYXRvciogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5hdmlnYXRvcio+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTU5hdmlnYXRvciogd3JhcE5hdmlnYXRvcihXZWJDb3JlOjpOYXZpZ2F0b3IqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX05B
VklHQVRPUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX05BVklHQVRPUiwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01OYXZpZ2F0b3IsIHdlYmtpdF9kb21fbmF2aWdhdG9y
LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9QTFVHSU5TLAorICAgIFBST1BfTUlNRV9UWVBFUywKKyAgICBQUk9QX0NPT0tJRV9FTkFCTEVE
LAorICAgIFBST1BfV0VCS0lUX0JBVFRFUlksCisgICAgUFJPUF9HRU9MT0NBVElPTiwKKyAgICBQ
Uk9QX01FRElBX0RFVklDRVMsCisgICAgUFJPUF9IQVJEV0FSRV9DT05DVVJSRU5DWSwKKyAgICBQ
Uk9QX0FQUF9DT0RFX05BTUUsCisgICAgUFJPUF9BUFBfTkFNRSwKKyAgICBQUk9QX0FQUF9WRVJT
SU9OLAorICAgIFBST1BfUExBVEZPUk0sCisgICAgUFJPUF9QUk9EVUNULAorICAgIFBST1BfUFJP
RFVDVF9TVUIsCisgICAgUFJPUF9VU0VSX0FHRU5ULAorICAgIFBST1BfVkVORE9SLAorICAgIFBS
T1BfVkVORE9SX1NVQiwKKyAgICBQUk9QX0xBTkdVQUdFLAorICAgIFBST1BfT05fTElORSwKK307
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbmF2aWdhdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9OQVZJR0FUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJL
aXRET01OYXZpZ2F0b3JQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9u
YXZpZ2F0b3JfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmID0gV0VCS0lUX0RPTV9OQVZJR0FUT1Iob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9QTFVHSU5TOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9w
bHVnaW5zKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTUVfVFlQRVM6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3Jf
Z2V0X21pbWVfdHlwZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09P
S0lFX0VOQUJMRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21fbmF2aWdhdG9yX2dldF9jb29raWVfZW5hYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9XRUJLSVRfQkFUVEVSWToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfd2Via2l0X2JhdHRlcnkoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfR0VPTE9DQVRJT046CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2dlb2xvY2F0aW9u
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FRElBX0RFVklDRVM6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0
X21lZGlhX2RldmljZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEFS
RFdBUkVfQ09OQ1VSUkVOQ1k6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Vi
a2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2hhcmR3YXJlX2NvbmN1cnJlbmN5KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FQUF9DT0RFX05BTUU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9hcHBfY29kZV9uYW1l
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FQUF9OQU1FOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfYXBw
X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVBQX1ZFUlNJT046
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9y
X2dldF9hcHBfdmVyc2lvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
TEFURk9STToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9u
YXZpZ2F0b3JfZ2V0X3BsYXRmb3JtKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BST0RVQ1Q6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21fbmF2aWdhdG9yX2dldF9wcm9kdWN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1BST0RVQ1RfU1VCOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvZHVjdF9zdWIoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVVNFUl9BR0VOVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3VzZXJfYWdlbnQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkVORE9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdmVuZG9yKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZFTkRPUl9TVUI6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF92ZW5kb3Jfc3ViKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBTkdVQUdFOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbGFuZ3Vh
Z2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT05fTElORToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X29u
X2xpbmUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21f
bmF2aWdhdG9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQorewor
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbmF2aWdhdG9y
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01OYXZpZ2F0b3JQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9OQVZJR0FUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBw
cml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TmF2aWdhdG9yKj4oV0VCS0lU
X0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RD
YWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4g
b2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25hdmlnYXRvcl9jbGFzc19pbml0
KFdlYktpdERPTU5hdmlnYXRvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01OYXZp
Z2F0b3JQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9k
b21fbmF2aWdhdG9yX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX25hdmlnYXRvcl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9QTFVHSU5TLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
InBsdWdpbnMiLAorICAgICAgICAgICAgIk5hdmlnYXRvcjpwbHVnaW5zIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIE5hdmlnYXRvcjpwbHVnaW5zIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOX0FSUkFZLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUlNRV9UWVBF
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJtaW1lLXR5cGVz
IiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6bWltZS10eXBlcyIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIE5hdmlnYXRvcjptaW1lLXR5cGVzIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFX0FSUkFZLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09PS0lF
X0VOQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNv
b2tpZS1lbmFibGVkIiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6Y29va2llLWVuYWJsZWQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBOYXZpZ2F0b3I6Y29va2llLWVuYWJsZWQi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfQkFUVEVSWSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJ3ZWJraXQtYmF0dGVyeSIsCisgICAgICAgICAgICAi
TmF2aWdhdG9yOndlYmtpdC1iYXR0ZXJ5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NQmF0dGVyeU1hbmFnZXIqIE5hdmlnYXRvcjp3ZWJraXQtYmF0dGVyeSIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfQkFUVEVSWV9NQU5BR0VSLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfR0VPTE9DQVRJT04sCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZ2VvbG9jYXRpb24iLAorICAgICAg
ICAgICAgIk5hdmlnYXRvcjpnZW9sb2NhdGlvbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTUdlb2xvY2F0aW9uKiBOYXZpZ2F0b3I6Z2VvbG9jYXRpb24iLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX0dFT0xPQ0FUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUVESUFfREVWSUNFUywKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJtZWRpYS1kZXZpY2VzIiwKKyAgICAgICAg
ICAgICJOYXZpZ2F0b3I6bWVkaWEtZGV2aWNlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTU1lZGlhRGV2aWNlcyogTmF2aWdhdG9yOm1lZGlhLWRldmljZXMiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0RFVklDRVMsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IQVJEV0FSRV9DT05DVVJSRU5DWSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJoYXJkd2FyZS1jb25j
dXJyZW5jeSIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOmhhcmR3YXJlLWNvbmN1cnJlbmN5IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBOYXZpZ2F0b3I6aGFyZHdhcmUtY29uY3Vy
cmVuY3kiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BUFBfQ09ERV9OQU1FLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFwcC1jb2RlLW5hbWUi
LAorICAgICAgICAgICAgIk5hdmlnYXRvcjphcHAtY29kZS1uYW1lIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIE5hdmlnYXRvcjphcHAtY29kZS1uYW1lIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQVBQX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
YXBwLW5hbWUiLAorICAgICAgICAgICAgIk5hdmlnYXRvcjphcHAtbmFtZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdjaGFyKiBOYXZpZ2F0b3I6YXBwLW5hbWUiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9BUFBfVkVSU0lPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJhcHAtdmVyc2lvbiIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOmFwcC12ZXJzaW9uIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5hdmlnYXRvcjphcHAtdmVyc2lvbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1BMQVRGT1JNLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInBsYXRmb3JtIiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6cGxhdGZvcm0iLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdhdG9yOnBsYXRmb3JtIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfUFJPRFVDVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJwcm9kdWN0IiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6cHJvZHVjdCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBOYXZpZ2F0b3I6cHJvZHVjdCIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1BST0RVQ1RfU1VCLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgInByb2R1Y3Qtc3ViIiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6cHJvZHVjdC1zdWIi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdhdG9yOnByb2R1Y3Qtc3ViIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfVVNFUl9BR0VOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ1c2VyLWFnZW50IiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6dXNl
ci1hZ2VudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBOYXZpZ2F0b3I6dXNlci1h
Z2VudCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1ZFTkRPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ2ZW5kb3IiLAorICAgICAgICAgICAgIk5hdmlnYXRvcjp2ZW5k
b3IiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdhdG9yOnZlbmRvciIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1ZFTkRPUl9TVUIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAidmVuZG9yLXN1YiIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOnZlbmRv
ci1zdWIiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdhdG9yOnZlbmRvci1z
dWIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9MQU5HVUFHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJsYW5ndWFnZSIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOmxh
bmd1YWdlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5hdmlnYXRvcjpsYW5ndWFn
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX09OX0xJTkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgIm9uLWxpbmUiLAorICAgICAgICAgICAgIk5hdmlnYXRvcjpvbi1s
aW5lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gTmF2aWdhdG9yOm9uLWxpbmUi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25hdmlnYXRvcl9pbml0KFdlYktpdERP
TU5hdmlnYXRvciogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9OQVZJR0FUT1JfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3
IChwcml2KSBXZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlKCk7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fbmF2aWdhdG9yX2phdmFfZW5hYmxlZChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCBGQUxTRSk7CisgICAg
V2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmphdmFFbmFibGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfc3RvcmFnZV91cGRhdGVzKFdlYktpdERP
TU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxm
KSk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPmdldFN0b3JhZ2VVcGRhdGVzKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9uYXZp
Z2F0b3JfcmVnaXN0ZXJfcHJvdG9jb2xfaGFuZGxlcihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYs
IGNvbnN0IGdjaGFyKiBzY2hlbWUsIGNvbnN0IGdjaGFyKiB1cmwsIGNvbnN0IGdjaGFyKiB0aXRs
ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKE5BVklHQVRPUl9DT05URU5UX1VUSUxT
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNjaGVtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh1cmwpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodGl0bGUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Ip
OworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTY2hlbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2No
ZW1lKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRVcmwgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodXJsKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUaXRsZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh0aXRsZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
V2ViQ29yZTo6TmF2aWdhdG9yQ29udGVudFV0aWxzOjpyZWdpc3RlclByb3RvY29sSGFuZGxlcigq
aXRlbSwgY29udmVydGVkU2NoZW1lLCBjb252ZXJ0ZWRVcmwsIGNvbnZlcnRlZFRpdGxlLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHNj
aGVtZSk7CisgICAgVU5VU0VEX1BBUkFNKHVybCk7CisgICAgVU5VU0VEX1BBUkFNKHRpdGxlKTsK
KyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIk5hdmlnYXRvciBDb250ZW50IFV0aWxzIikKKyNlbmRpZiAvKiBFTkFCTEUoTkFWSUdB
VE9SX0NPTlRFTlRfVVRJTFMpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9p
c19wcm90b2NvbF9oYW5kbGVyX3JlZ2lzdGVyZWQoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmLCBj
b25zdCBnY2hhciogc2NoZW1lLCBjb25zdCBnY2hhciogdXJsLCBHRXJyb3IqKiBlcnJvcikKK3sK
KyNpZiBFTkFCTEUoQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAmJiBFTkFCTEUoTkFWSUdBVE9SX0NP
TlRFTlRfVVRJTFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzY2hlbWUsIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHVybCwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEq
ZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTY2hlbWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgoc2NoZW1lKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRVcmwgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodXJsKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhXZWJDb3JlOjpOYXZpZ2F0b3JD
b250ZW50VXRpbHM6OmlzUHJvdG9jb2xIYW5kbGVyUmVnaXN0ZXJlZChpdGVtLCBjb252ZXJ0ZWRT
Y2hlbWUsIGNvbnZlcnRlZFVybCwgZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHNjaGVtZSk7CisgICAgVU5V
U0VEX1BBUkFNKHVybCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyNpZiAhRU5BQkxFKE5B
VklHQVRPUl9DT05URU5UX1VUSUxTKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIk5hdmlnYXRvciBDb250ZW50IFV0aWxzIikKKyNlbmRpZgorI2lmICFFTkFCTEUoQ1VTVE9N
X1NDSEVNRV9IQU5ETEVSKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkN1
c3RvbSBTY2hlbWUgSGFuZGxlciIpCisjZW5kaWYKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBF
TkFCTEUoQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAmJiBFTkFCTEUoTkFWSUdBVE9SX0NPTlRFTlRf
VVRJTFMpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9uYXZpZ2F0b3JfdW5yZWdpc3Rlcl9wcm90
b2NvbF9oYW5kbGVyKFdlYktpdERPTU5hdmlnYXRvciogc2VsZiwgY29uc3QgZ2NoYXIqIHNjaGVt
ZSwgY29uc3QgZ2NoYXIqIHVybCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKENVU1RP
TV9TQ0hFTUVfSEFORExFUikgJiYgRU5BQkxFKE5BVklHQVRPUl9DT05URU5UX1VUSUxTKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHNjaGVtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh1cmwpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTY2hlbWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoc2NoZW1lKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRVcmwg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodXJsKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnVucmVnaXN0ZXJQ
cm90b2NvbEhhbmRsZXIoKml0ZW0sIGNvbnZlcnRlZFNjaGVtZSwgY29udmVydGVkVXJsLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHNj
aGVtZSk7CisgICAgVU5VU0VEX1BBUkFNKHVybCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsK
KyNpZiAhRU5BQkxFKE5BVklHQVRPUl9DT05URU5UX1VUSUxTKQorICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIk5hdmlnYXRvciBDb250ZW50IFV0aWxzIikKKyNlbmRpZgorI2lm
ICFFTkFCTEUoQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIkN1c3RvbSBTY2hlbWUgSGFuZGxlciIpCisjZW5kaWYKKyNlbmRpZiAvKiBF
TkFCTEUoQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAmJiBFTkFCTEUoTkFWSUdBVE9SX0NPTlRFTlRf
VVRJTFMpICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbmF2aWdhdG9yX3ZpYnJhdGUoV2Vi
S2l0RE9NTmF2aWdhdG9yKiBzZWxmLCBndWxvbmcgdGltZSkKK3sKKyNpZiBFTkFCTEUoVklCUkFU
SU9OKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBXZWJDb3JlOjpOYXZpZ2F0b3JWaWJyYXRpb246OnZpYnJhdGUoKml0
ZW0sIHRpbWUpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odGltZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlicmF0aW9uIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+
KDApOworI2VuZGlmIC8qIEVOQUJMRShWSUJSQVRJT04pICovCit9CisKK1dlYktpdERPTURPTVBs
dWdpbkFycmF5KiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcGx1Z2lucyhXZWJLaXRET01OYXZp
Z2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5PiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+cGx1Z2lucygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHdlYmtpdF9k
b21fbmF2aWdhdG9yX2dldF9taW1lX3R5cGVzKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNv
cmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6RE9NTWltZVR5cGVBcnJheT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
Pm1pbWVUeXBlcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9jb29raWVfZW5hYmxl
ZChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
TkFWSUdBVE9SKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNvb2tpZUVu
YWJsZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01CYXR0ZXJ5TWFuYWdl
ciogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3dlYmtpdF9iYXR0ZXJ5KFdlYktpdERPTU5hdmln
YXRvciogc2VsZikKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3Iq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkJhdHRlcnlN
YW5hZ2VyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoV2ViQ29yZTo6TmF2aWdhdG9yQmF0
dGVyeTo6d2Via2l0QmF0dGVyeSgqaXRlbSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkJhdHRlcnkgU3RhdHVzIikKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpICovCit9CisKK1dlYktpdERP
TUdlb2xvY2F0aW9uKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfZ2VvbG9jYXRpb24oV2ViS2l0
RE9NTmF2aWdhdG9yKiBzZWxmKQoreworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hdmln
YXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6R2Vv
bG9jYXRpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihXZWJDb3JlOjpOYXZpZ2F0b3JH
ZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb24oKml0ZW0pKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJHZW9sb2NhdGlvbiIpCisgICAgcmV0
dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKEdFT0xPQ0FUSU9OKSAqLworfQorCitXZWJLaXRET01N
ZWRpYURldmljZXMqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9tZWRpYV9kZXZpY2VzKFdlYktp
dERPTU5hdmlnYXRvciogc2VsZikKK3sKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2
aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpN
ZWRpYURldmljZXM+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihXZWJDb3JlOjpOYXZpZ2F0
b3JNZWRpYURldmljZXM6Om1lZGlhRGV2aWNlcygqaXRlbSkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFN0cmVhbSIpCisg
ICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NUUkVBTSkgKi8KK30KKworZ3Vp
bnQ2NCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfaGFyZHdhcmVfY29uY3VycmVuY3koV2ViS2l0
RE9NTmF2aWdhdG9yKiBzZWxmKQoreworI2lmIEVOQUJMRShOQVZJR0FUT1JfSFdDT05DVVJSRU5D
WSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdl
YkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0
IHJlc3VsdCA9IGl0ZW0tPmhhcmR3YXJlQ29uY3VycmVuY3koKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiTmF2aWdhdG9yIEh3Y29uY3VycmVuY3kiKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoTkFWSUdBVE9SX0hXQ09OQ1VS
UkVOQ1kpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfYXBwX2NvZGVf
bmFtZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXBwQ29kZU5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9hcHBfbmFtZShXZWJLaXRET01OYXZpZ2F0b3IqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXBwTmFtZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2FwcF92
ZXJzaW9uKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hcHBWZXJzaW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcGxhdGZvcm0oV2ViS2l0RE9NTmF2aWdhdG9yKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnBsYXRmb3JtKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJv
ZHVjdChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+cHJvZHVjdCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Byb2R1Y3Rfc3ViKFdlYktpdERPTU5hdmlnYXRvciogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAg
IFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wcm9kdWN0U3ViKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdXNl
cl9hZ2VudChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+dXNlckFnZW50KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdmVuZG9yKFdlYktpdERPTU5hdmlnYXRvciogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAg
IFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52ZW5kb3IoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF92ZW5kb3Jf
c3ViKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT52ZW5kb3JTdWIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21fbmF2aWdhdG9yX2dldF9sYW5ndWFnZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGFuZ3VhZ2UoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X29uX2xp
bmUoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X05BVklHQVRPUihzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5vbkxpbmUo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01OYXZpZ2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
MGMyMDMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3IuaApAQCAtMCwwICsxLDMy
MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01O
YXZpZ2F0b3JfaAorI2RlZmluZSBXZWJLaXRET01OYXZpZ2F0b3JfaAorCisjaWZkZWYgV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX05BVklHQVRPUiAgICAgICAgICAgICh3ZWJraXRfZG9tX25hdmlnYXRvcl9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX05BVklHQVRPUihvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTkFWSUdB
VE9SLCBXZWJLaXRET01OYXZpZ2F0b3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX05BVklHQVRPUl9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfTkFWSUdBVE9SLCBXZWJLaXRET01OYXZpZ2F0b3JDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19OQVZJR0FUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX05BVklHQVRPUikpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfTkFWSUdBVE9SX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX05B
VklHQVRPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfTkFWSUdBVE9SLCBXZWJLaXRET01OYXZpZ2F0b3JDbGFzcykpCisK
K3N0cnVjdCBfV2ViS2l0RE9NTmF2aWdhdG9yIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01OYXZpZ2F0b3JDbGFzcyB7CisgICAg
V2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0
X2RvbV9uYXZpZ2F0b3JfamF2YV9lbmFibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmln
YXRvcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25hdmlnYXRvcl9qYXZh
X2VuYWJsZWQoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X25hdmlnYXRvcl9nZXRfc3RvcmFnZV91cGRhdGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5h
dmlnYXRvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfc3RvcmFnZV91cGRhdGVzKFdlYktpdERPTU5hdmln
YXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfcmVnaXN0ZXJfcHJv
dG9jb2xfaGFuZGxlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqIEBzY2hl
bWU6IEEgI2djaGFyCisgKiBAdXJsOiBBICNnY2hhcgorICogQHRpdGxlOiBBICNnY2hhcgorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fbmF2aWdhdG9yX3JlZ2lzdGVyX3Byb3RvY29sX2hhbmRsZXIo
V2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmLCBjb25zdCBnY2hhciogc2NoZW1lLCBjb25zdCBnY2hh
ciogdXJsLCBjb25zdCBnY2hhciogdGl0bGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX25hdmlnYXRvcl9pc19wcm90b2NvbF9oYW5kbGVyX3JlZ2lzdGVyZWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKiBAc2NoZW1lOiBBICNnY2hhcgorICogQHVy
bDogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9uYXZpZ2F0b3JfaXNfcHJvdG9jb2xfaGFuZGxlcl9yZWdpc3RlcmVkKFdlYktpdERP
TU5hdmlnYXRvciogc2VsZiwgY29uc3QgZ2NoYXIqIHNjaGVtZSwgY29uc3QgZ2NoYXIqIHVybCwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX3VucmVnaXN0
ZXJfcHJvdG9jb2xfaGFuZGxlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAq
IEBzY2hlbWU6IEEgI2djaGFyCisgKiBAdXJsOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9y
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fbmF2aWdhdG9yX3VucmVnaXN0ZXJfcHJvdG9jb2xfaGFuZGxlcihXZWJLaXRET01OYXZp
Z2F0b3IqIHNlbGYsIGNvbnN0IGdjaGFyKiBzY2hlbWUsIGNvbnN0IGdjaGFyKiB1cmwsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl92aWJyYXRlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICogQHRpbWU6IEEgI2d1bG9uZworICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25hdmlnYXRvcl92aWJyYXRlKFdlYktpdERP
TU5hdmlnYXRvciogc2VsZiwgZ3Vsb25nIHRpbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2
aWdhdG9yX2dldF9wbHVnaW5zOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9N
UGx1Z2luQXJyYXkqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcGx1Z2lucyhXZWJLaXRET01O
YXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9taW1l
X3R5cGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheQorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01NaW1lVHlwZUFy
cmF5Kgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X21pbWVfdHlwZXMoV2ViS2l0RE9NTmF2aWdh
dG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfY29va2llX2Vu
YWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9jb29raWVfZW5hYmxlZChXZWJLaXRE
T01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF93
ZWJraXRfYmF0dGVyeToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUJhdHRlcnlN
YW5hZ2VyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3dlYmtpdF9iYXR0ZXJ5KFdlYktpdERP
TU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2dl
b2xvY2F0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NR2VvbG9jYXRpb24KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NR2VvbG9jYXRpb24qCit3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfZ2VvbG9jYXRpb24oV2ViS2l0RE9NTmF2aWdhdG9yKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbWVkaWFfZGV2aWNlczoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTU1lZGlhRGV2aWNlcworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01NZWRpYURldmljZXMqCit3ZWJraXRfZG9t
X25hdmlnYXRvcl9nZXRfbWVkaWFfZGV2aWNlcyhXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9oYXJkd2FyZV9jb25jdXJyZW5jeToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNndWlu
dDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQK
K3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9oYXJkd2FyZV9jb25jdXJyZW5jeShXZWJLaXRET01O
YXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9hcHBf
Y29kZV9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2FwcF9jb2RlX25hbWUoV2ViS2l0RE9N
TmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfYXBw
X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfYXBwX25hbWUoV2ViS2l0RE9NTmF2aWdhdG9y
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfYXBwX3ZlcnNpb246
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfYXBwX3ZlcnNpb24oV2ViS2l0RE9NTmF2aWdhdG9yKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcGxhdGZvcm06CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX25hdmlnYXRvcl9nZXRfcGxhdGZvcm0oV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvZHVjdDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2aWdh
dG9yX2dldF9wcm9kdWN0KFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Byb2R1Y3Rfc3ViOgorICogQHNlbGY6IEEgI1dlYktpdERP
TU5hdmlnYXRvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0
X3Byb2R1Y3Rfc3ViKFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9uYXZpZ2F0b3JfZ2V0X3VzZXJfYWdlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2
aWdhdG9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdXNl
cl9hZ2VudChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bmF2aWdhdG9yX2dldF92ZW5kb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdmVuZG9yKFdlYktp
dERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0
X3ZlbmRvcl9zdWI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdmVuZG9yX3N1YihXZWJLaXRET01O
YXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9sYW5n
dWFnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9sYW5ndWFnZShXZWJLaXRET01OYXZpZ2F0b3Iq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9vbl9saW5lOgorICog
QHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFu
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfb25fbGluZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NTmF2aWdhdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEyZjJlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwCkBAIC0wLDAgKzEsNiBAQAor
LyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRz
IHRoYXQgV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmggYW5kCisgICAgV2ViS2l0RE9N
TmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCBhcmUgY3JlYXRlZCBmb3IgTmF2aWdhdG9yTWVkaWFE
ZXZpY2VzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20g
dHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGFuZAor
ICAgIFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRo
aXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTJmMmUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5oCkBAIC0wLDAgKzEsNiBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRo
YXQgV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmggYW5kCisgICAgV2ViS2l0RE9NTmF2
aWdhdG9yTWVkaWFEZXZpY2VzLmNwcCBhcmUgY3JlYXRlZCBmb3IgTmF2aWdhdG9yTWVkaWFEZXZp
Y2VzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5
aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5oIGFuZAorICAg
IFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMg
ZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TmF2aWdhdG9yUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmNjc5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TmF2aWdhdG9yUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTU5hdmlnYXRvclByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9OYXZpZ2F0
b3IuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTmF2aWdhdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NTmF2aWdhdG9yKiB3cmFwTmF2aWdhdG9yKFdlYkNvcmU6
Ok5hdmlnYXRvciopOworV2ViS2l0RE9NTmF2aWdhdG9yKiBraXQoV2ViQ29yZTo6TmF2aWdhdG9y
Kik7CitXZWJDb3JlOjpOYXZpZ2F0b3IqIGNvcmUoV2ViS2l0RE9NTmF2aWdhdG9yKik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTU5hdmlnYXRvclByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyNzJhZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTm9kZS5jcHAKQEAgLTAsMCArMSw3MzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVV
bnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX05PREUsIFdlYktpdERPTU5v
ZGVQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZVByaXZhdGUgeworICAg
IFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01Ob2RlUHJpdmF0
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU5vZGUqIGtpdChXZWJDb3JlOjpO
b2RlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fTk9ERShyZXQpOworCisgICAgcmV0dXJuIHdyYXAob2JqKTsKK30KKworV2Vi
Q29yZTo6Tm9kZSogY29yZShXZWJLaXRET01Ob2RlKiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTU5vZGUqIHdyYXBOb2RlKFdl
YkNvcmU6Ok5vZGUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX05PREUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9OT0RF
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9ub2RlX2Rpc3BhdGNoX2V2
ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktp
dDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fbm9kZV9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpOb2RlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2Vi
Q29yZTo6Tm9kZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
bm9kZV9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9ub2RlX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9ub2RlX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKwor
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NTm9kZSwgd2Via2l0X2RvbV9ub2RlLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9U
WVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX05PREVfTkFNRSwKKyAgICBQUk9QX05PREVfVkFMVUUs
CisgICAgUFJPUF9OT0RFX1RZUEUsCisgICAgUFJPUF9QQVJFTlRfTk9ERSwKKyAgICBQUk9QX0NI
SUxEX05PREVTLAorICAgIFBST1BfRklSU1RfQ0hJTEQsCisgICAgUFJPUF9MQVNUX0NISUxELAor
ICAgIFBST1BfUFJFVklPVVNfU0lCTElORywKKyAgICBQUk9QX05FWFRfU0lCTElORywKKyAgICBQ
Uk9QX09XTkVSX0RPQ1VNRU5ULAorICAgIFBST1BfQkFTRV9VUkksCisgICAgUFJPUF9URVhUX0NP
TlRFTlQsCisgICAgUFJPUF9JU19DT05ORUNURUQsCisgICAgUFJPUF9QQVJFTlRfRUxFTUVOVCwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbm9kZV9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RE9NTm9kZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05PREVf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01Ob2RlUHJp
dmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbm9kZV9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfc2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NTm9kZSogc2VsZiA9
IFdFQktJVF9ET01fTk9ERShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX05PREVfVkFMVUU6CisgICAgICAgIHdlYmtpdF9kb21fbm9kZV9zZXRfbm9k
ZV92YWx1ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RFWFRfQ09OVEVOVDoKKyAgICAgICAgd2Via2l0X2Rv
bV9ub2RlX3NldF90ZXh0X2NvbnRlbnQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwg
bnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NTm9kZSogc2VsZiA9IFdFQktJ
VF9ET01fTk9ERShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX05PREVfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTk9ERV9WQUxVRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3ZhbHVlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX05PREVfVFlQRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwg
d2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUEFSRU5UX05PREU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfbm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9DSElMRF9OT0RFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0ZJUlNUX0NISUxEOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfZmlyc3RfY2hpbGQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFTVF9DSElMRDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X2xhc3RfY2hpbGQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJFVklPVVNfU0lCTElORzoKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3Np
Ymxpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkVYVF9TSUJMSU5H
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRf
bmV4dF9zaWJsaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09XTkVS
X0RPQ1VNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
bm9kZV9nZXRfb3duZXJfZG9jdW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQkFTRV9VUkk6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fbm9kZV9nZXRfYmFzZV91cmkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfVEVYVF9DT05URU5UOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX25vZGVfZ2V0X3RleHRfY29udGVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9JU19DT05ORUNURUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4o
dmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfaXNfY29ubmVjdGVkKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVF9FTEVNRU5UOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X2VsZW1lbnQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fbm9kZV9jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX25vZGVfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KTsKKworICAgIFdlYktpdERPTU5vZGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OT0RFX0dF
VF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6Ok5vZGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2Jq
ZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
bm9kZV9jbGFzc19pbml0KFdlYktpdERPTU5vZGVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NTm9kZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Vi
a2l0X2RvbV9ub2RlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX25vZGVfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX25vZGVfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9ub2RlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9OT0RFX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
bm9kZS1uYW1lIiwKKyAgICAgICAgICAgICJOb2RlOm5vZGUtbmFtZSIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdjaGFyKiBOb2RlOm5vZGUtbmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PREVf
VkFMVUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibm9kZS12
YWx1ZSIsCisgICAgICAgICAgICAiTm9kZTpub2RlLXZhbHVlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBOb2RlOm5vZGUtdmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTk9ERV9U
WVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAgICAgICJub2RlLXR5cGUi
LAorICAgICAgICAgICAgIk5vZGU6bm9kZS10eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z3VzaG9ydCBOb2RlOm5vZGUtdHlwZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9Q
QVJFTlRfTk9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJw
YXJlbnQtbm9kZSIsCisgICAgICAgICAgICAiTm9kZTpwYXJlbnQtbm9kZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIE5vZGU6cGFyZW50LW5vZGUiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSElMRF9OT0RFUywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJjaGlsZC1ub2RlcyIsCisgICAgICAgICAgICAiTm9k
ZTpjaGlsZC1ub2RlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGVMaXN0
KiBOb2RlOmNoaWxkLW5vZGVzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFX0xJ
U1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9GSVJTVF9DSElMRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJmaXJzdC1jaGlsZCIsCisgICAgICAgICAgICAiTm9kZTpmaXJzdC1jaGlsZCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIE5vZGU6Zmlyc3QtY2hpbGQiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQVNUX0NISUxELAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImxhc3QtY2hpbGQiLAorICAgICAgICAgICAg
Ik5vZGU6bGFzdC1jaGlsZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUq
IE5vZGU6bGFzdC1jaGlsZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BS
RVZJT1VTX1NJQkxJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAg
ICAicHJldmlvdXMtc2libGluZyIsCisgICAgICAgICAgICAiTm9kZTpwcmV2aW91cy1zaWJsaW5n
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogTm9kZTpwcmV2aW91cy1z
aWJsaW5nIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkVYVF9TSUJMSU5H
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm5leHQtc2libGlu
ZyIsCisgICAgICAgICAgICAiTm9kZTpuZXh0LXNpYmxpbmciLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01Ob2RlKiBOb2RlOm5leHQtc2libGluZyIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX09XTkVSX0RPQ1VNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgIm93bmVyLWRvY3VtZW50IiwKKyAgICAgICAgICAgICJOb2Rl
Om93bmVyLWRvY3VtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRG9jdW1l
bnQqIE5vZGU6b3duZXItZG9jdW1lbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RP
Q1VNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQkFTRV9VUkksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAiYmFzZS11cmkiLAorICAgICAgICAgICAgIk5vZGU6YmFzZS11cmkiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogTm9kZTpiYXNlLXVyaSIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RF
WFRfQ09OVEVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0
ZXh0LWNvbnRlbnQiLAorICAgICAgICAgICAgIk5vZGU6dGV4dC1jb250ZW50IiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBOb2RlOnRleHQtY29udGVudCIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9JU19DT05ORUNURUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAg
ICAgICAgImlzLWNvbm5lY3RlZCIsCisgICAgICAgICAgICAiTm9kZTppcy1jb25uZWN0ZWQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBOb2RlOmlzLWNvbm5lY3RlZCIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1BBUkVOVF9FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgInBhcmVudC1lbGVtZW50IiwKKyAgICAgICAgICAgICJOb2RlOnBh
cmVudC1lbGVtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCog
Tm9kZTpwYXJlbnQtZWxlbWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVO
VCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fbm9kZV9pbml0KFdlYktpdERPTU5vZGUqIHJlcXVlc3QpCit7CisgICAg
V2ViS2l0RE9NTm9kZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05PREVfR0VUX1BSSVZBVEUo
cmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01Ob2RlUHJpdmF0ZSgpOworfQorCitX
ZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXZWJLaXRET01Ob2Rl
KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBuZXdDaGlsZCwgV2ViS2l0RE9NTm9kZSogcmVmQ2hpbGQs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShuZXdDaGls
ZCksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFyZWZDaGlsZCB8fCBXRUJLSVRfRE9N
X0lTX05PREUocmVmQ2hpbGQpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROZXdDaGlsZCA9IFdlYktpdDo6Y29y
ZShuZXdDaGlsZCk7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmQ2hpbGQgPSBXZWJL
aXQ6OmNvcmUocmVmQ2hpbGQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGJvb2wgb2sgPSBpdGVtLT5pbnNlcnRCZWZvcmUoKmNvbnZlcnRlZE5ld0NoaWxkLCBjb252
ZXJ0ZWRSZWZDaGlsZCwgZWMpOworICAgIGlmIChvaykKKyAgICAgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGNvbnZlcnRlZE5ld0NoaWxkKTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICByZXR1cm4gMDsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX3JlcGxh
Y2VfY2hpbGQoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV3Q2hpbGQsIFdl
YktpdERPTU5vZGUqIG9sZENoaWxkLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREUobmV3Q2hpbGQpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX05PREUob2xkQ2hpbGQpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROZXdDaGlsZCA9IFdl
YktpdDo6Y29yZShuZXdDaGlsZCk7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkT2xkQ2hp
bGQgPSBXZWJLaXQ6OmNvcmUob2xkQ2hpbGQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGJvb2wgb2sgPSBpdGVtLT5yZXBsYWNlQ2hpbGQoKmNvbnZlcnRlZE5ld0No
aWxkLCAqY29udmVydGVkT2xkQ2hpbGQsIGVjKTsKKyAgICBpZiAob2spCisgICAgICAgIHJldHVy
biBXZWJLaXQ6OmtpdChjb252ZXJ0ZWRPbGRDaGlsZCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21f
bm9kZV9yZW1vdmVfY2hpbGQoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogb2xk
Q2hpbGQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUo
c2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShv
bGRDaGlsZCksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
LCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE9sZENoaWxkID0gV2ViS2l0Ojpjb3JlKG9sZENoaWxk
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBib29sIG9rID0gaXRl
bS0+cmVtb3ZlQ2hpbGQoKmNvbnZlcnRlZE9sZENoaWxkLCBlYyk7CisgICAgaWYgKG9rKQorICAg
ICAgICByZXR1cm4gV2ViS2l0OjpraXQoY29udmVydGVkT2xkQ2hpbGQpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIHJldHVybiAwOworfQorCitXZWJLaXRET01Ob2RlKiB3
ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERP
TU5vZGUqIG5ld0NoaWxkLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUobmV3Q2hpbGQpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROZXdDaGlsZCA9IFdlYktpdDo6Y29y
ZShuZXdDaGlsZCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9v
bCBvayA9IGl0ZW0tPmFwcGVuZENoaWxkKCpjb252ZXJ0ZWROZXdDaGlsZCwgZWMpOworICAgIGlm
IChvaykKKyAgICAgICAgcmV0dXJuIFdlYktpdDo6a2l0KGNvbnZlcnRlZE5ld0NoaWxkKTsKKwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXZWJLaXRET01Ob2RlKiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmhhc0NoaWxkTm9kZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZV93aXRoX2Vycm9yKFdlYktpdERP
TU5vZGUqIHNlbGYsIGdib29sZWFuIGRlZXAsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xv
bmVOb2RlRm9yQmluZGluZ3MoZGVlcCwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21fbm9kZV9ub3JtYWxp
emUoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2Vs
ZikpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+bm9ybWFsaXplKCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbm9kZV9pc19zdXBw
b3J0ZWQoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIGZlYXR1cmUsIGNvbnN0IGdj
aGFyKiB2ZXJzaW9uKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIEZB
TFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChmZWF0dXJlLCBGQUxTRSk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwodmVyc2lvbiwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRmVhdHVy
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChmZWF0dXJlKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWZXJzaW9uID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZlcnNpb24pOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmlzU3VwcG9ydGVkRm9yQmluZGluZ3MoY29udmVydGVkRmVhdHVy
ZSwgY29udmVydGVkVmVyc2lvbik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRE
T01Ob2RlKiBvdGhlcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCBG
QUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG90aGVy
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkT3RoZXIgPSBXZWJLaXQ6OmNvcmUob3RoZXIp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmlzU2FtZU5vZGUoY29udmVydGVkT3RoZXIp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbm9kZV9pc19l
cXVhbF9ub2RlKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG90aGVyKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUob3RoZXIpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2Rl
KiBjb252ZXJ0ZWRPdGhlciA9IFdlYktpdDo6Y29yZShvdGhlcik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+aXNFcXVhbE5vZGUoY29udmVydGVkT3RoZXIpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25vZGVfbG9va3VwX3ByZWZpeChXZWJLaXRET01O
b2RlKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWVz
cGFjZVVSSSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5sb29rdXBQcmVmaXgoY29udmVydGVkTmFtZXNwYWNlVVJJKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9sb29rdXBfbmFtZXNw
YWNlX3VyaShXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogcHJlZml4KQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHByZWZpeCwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQcmVmaXggPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgocHJlZml4KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5sb29rdXBOYW1lc3BhY2VVUkkoY29udmVydGVkUHJlZml4KSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9ub2RlX2lzX2RlZmF1bHRfbmFtZXNw
YWNlKFdlYktpdERPTU5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkkpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKG5hbWVzcGFjZVVSSSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNw
YWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+aXNEZWZhdWx0TmFtZXNwYWNlKGNvbnZlcnRlZE5hbWVzcGFjZVVS
SSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX25vZGVfY29t
cGFyZV9kb2N1bWVudF9wb3NpdGlvbihXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiBvdGhlcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUob3RoZXIpLCAwKTsKKyAg
ICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6
Ok5vZGUqIGNvbnZlcnRlZE90aGVyID0gV2ViS2l0Ojpjb3JlKG90aGVyKTsKKyAgICBndXNob3J0
IHJlc3VsdCA9IGl0ZW0tPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCpjb252ZXJ0ZWRPdGhlcik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9ub2RlX2NvbnRh
aW5zKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG90aGVyKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUob3RoZXIpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252
ZXJ0ZWRPdGhlciA9IFdlYktpdDo6Y29yZShvdGhlcik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+Y29udGFpbnMoY29udmVydGVkT3RoZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShXZWJLaXRET01Ob2RlKiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIFdlYkNv
cmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bm9kZU5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV92YWx1ZShXZWJLaXRET01O
b2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bm9kZVZhbHVlKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9ub2RlX3NldF9ub2RlX3ZhbHVlKFdl
YktpdERPTU5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXROb2RlVmFsdWUoY29udmVy
dGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV9ub2RlX2dldF9ub2Rl
X3R5cGUoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19O
T0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+bm9kZVR5cGUoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9u
b2RlKFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9E
RShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnBhcmVudE5vZGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9ub2RlX2dldF9j
aGlsZF9ub2RlcyhXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+Y2hpbGROb2RlcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9k
ZV9nZXRfZmlyc3RfY2hpbGQoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zmlyc3RDaGlsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21f
bm9kZV9nZXRfbGFzdF9jaGlsZChXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sYXN0Q2hpbGQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9t
X25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmcoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cHJldmlvdXNTaWJsaW5nKCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9k
ZSogd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoV2ViS2l0RE9NTm9kZSogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpO
b2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmV4dFNpYmxpbmcoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01Eb2N1bWVudCogd2Via2l0X2RvbV9ub2RlX2dldF9vd25lcl9kb2N1bWVudChXZWJLaXRET01O
b2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkRvY3VtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b3du
ZXJEb2N1bWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25vZGVfZ2V0X2Jhc2VfdXJpKFdlYktpdERPTU5v
ZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5iYXNlVVJJKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3RleHRfY29udGVudChX
ZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGV4dENvbnRlbnQo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX25vZGVfc2V0X3Rl
eHRfY29udGVudChXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvcik7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0VGV4
dENvbnRlbnQoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21fbm9kZV9nZXRfaXNfY29ubmVjdGVkKFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
aW5Eb2N1bWVudCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUVsZW1lbnQq
IHdlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X2VsZW1lbnQoV2ViS2l0RE9NTm9kZSogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpF
bGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGFyZW50RWxlbWVudCgp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTm9kZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNDZiYmViYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZS5oCkBA
IC0wLDAgKzEsNDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01Ob2RlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NTm9kZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX05PREUg
ICAgICAgICAgICAod2Via2l0X2RvbV9ub2RlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fTk9ERShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfTk9ERSwgV2ViS2l0RE9NTm9kZSkpCisjZGVmaW5lIFdFQktJVF9E
T01fTk9ERV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwgV2ViS2l0RE9NTm9kZUNsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX05PREUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX05PREUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX05PREVf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX05PREUpKQorI2RlZmluZSBXRUJLSVRfRE9NX05PREVfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX05PREUsIFdl
YktpdERPTU5vZGVDbGFzcykpCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0VMRU1FTlRfTk9E
RToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRUxFTUVOVF9OT0RFIDEKKworLyoqCisg
KiBXRUJLSVRfRE9NX05PREVfQVRUUklCVVRFX05PREU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9OT0RFX0FUVFJJQlVURV9OT0RFIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfVEVYVF9O
T0RFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9URVhUX05PREUgMworCisvKioKKyAq
IFdFQktJVF9ET01fTk9ERV9DREFUQV9TRUNUSU9OX05PREU6CisgKi8KKyNkZWZpbmUgV0VCS0lU
X0RPTV9OT0RFX0NEQVRBX1NFQ1RJT05fTk9ERSA0CisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RF
X0VOVElUWV9SRUZFUkVOQ0VfTk9ERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRU5U
SVRZX1JFRkVSRU5DRV9OT0RFIDUKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRU5USVRZX05P
REU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0VOVElUWV9OT0RFIDYKKworLyoqCisg
KiBXRUJLSVRfRE9NX05PREVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgorICovCisjZGVm
aW5lIFdFQktJVF9ET01fTk9ERV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgNworCisvKioK
KyAqIFdFQktJVF9ET01fTk9ERV9DT01NRU5UX05PREU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9OT0RFX0NPTU1FTlRfTk9ERSA4CisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5U
X05PREU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX05PREUgOQorCisv
KioKKyAqIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9UWVBFX05PREU6CisgKi8KKyNkZWZpbmUg
V0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1RZUEVfTk9ERSAxMAorCisvKioKKyAqIFdFQktJVF9E
T01fTk9ERV9ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01f
Tk9ERV9ET0NVTUVOVF9GUkFHTUVOVF9OT0RFIDExCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RF
X0RPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9N
X05PREVfRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIDB4MDEKKworLyoqCisgKiBXRUJL
SVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcgMHgwMgorCisvKioKKyAq
IFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc6CisgKi8KKyNkZWZp
bmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyAweDA0CisKKy8q
KgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TOgorICovCisj
ZGVmaW5lIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUyAweDA4CisK
Ky8qKgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWToK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVE
X0JZIDB4MTAKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fSU1Q
TEVNRU5UQVRJT05fU1BFQ0lGSUM6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VN
RU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDIDB4MjAKKworc3RydWN0IF9XZWJL
aXRET01Ob2RlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01Ob2RlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbm9kZV9nZXRf
dHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAbmV3Q2hpbGQ6IEEgI1dlYktpdERPTU5vZGUK
KyAqIEByZWZDaGlsZDogKGFsbG93LW5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5v
ZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9ub2RlX2luc2Vy
dF9iZWZvcmUoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV3Q2hpbGQsIFdl
YktpdERPTU5vZGUqIHJlZkNoaWxkLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICog
QG5ld0NoaWxkOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb2xkQ2hpbGQ6IEEgI1dlYktpdERPTU5v
ZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRf
ZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiBuZXdDaGlsZCwgV2ViS2l0RE9NTm9kZSogb2xkQ2hpbGQsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX25vZGVfcmVtb3ZlX2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTU5vZGUKKyAqIEBvbGRDaGlsZDogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vy
cm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hp
bGQoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogb2xkQ2hpbGQsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkOgorICogQHNl
bGY6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBuZXdDaGlsZDogQSAjV2ViS2l0RE9NTm9kZQorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9k
ZV9hcHBlbmRfY2hpbGQoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV3Q2hp
bGQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxk
X25vZGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiBBICNn
Ym9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25vZGVfaGFzX2No
aWxkX25vZGVzKFdlYktpdERPTU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9k
ZV9jbG9uZV9ub2RlX3dpdGhfZXJyb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICog
QGRlZXA6IEEgI2dib29sZWFuCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBTaW5jZTogMi4xNAorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZV93
aXRoX2Vycm9yKFdlYktpdERPTU5vZGUqIHNlbGYsIGdib29sZWFuIGRlZXAsIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfbm9ybWFsaXplOgorICogQHNlbGY6IEEg
I1dlYktpdERPTU5vZGUKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9ub2Rl
X25vcm1hbGl6ZShXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25v
ZGVfaXNfc3VwcG9ydGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBmZWF0dXJl
OiBBICNnY2hhcgorICogQHZlcnNpb246IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9ub2RlX2lzX3N1cHBv
cnRlZChXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogZmVhdHVyZSwgY29uc3QgZ2No
YXIqIHZlcnNpb24pOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG90aGVyOiBBICNXZWJLaXRET01Ob2RlCisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01O
b2RlKiBvdGhlcik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2lzX2VxdWFsX25vZGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG90aGVyOiBBICNXZWJLaXRET01Ob2RlCisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9ub2RlX2lzX2VxdWFsX25vZGUoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9N
Tm9kZSogb3RoZXIpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9sb29rdXBfcHJlZml4Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBuYW1lc3BhY2VVUkk6IEEgI2djaGFyCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fbm9kZV9sb29rdXBfcHJlZml4KFdlYktpdERPTU5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiBu
YW1lc3BhY2VVUkkpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9sb29rdXBfbmFtZXNwYWNl
X3VyaToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAcHJlZml4OiBBICNnY2hhcgor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX25vZGVfbG9va3VwX25hbWVzcGFjZV91cmkoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3Qg
Z2NoYXIqIHByZWZpeCk7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2lzX2RlZmF1bHRfbmFt
ZXNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBuYW1lc3BhY2VVUkk6IEEg
I2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV9ub2RlX2lzX2RlZmF1bHRfbmFtZXNwYWNlKFdlYktpdERPTU5vZGUq
IHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkkpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bm9kZV9jb21wYXJlX2RvY3VtZW50X3Bvc2l0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5v
ZGUKKyAqIEBvdGhlcjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEgI2d1c2hv
cnQKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX25vZGVfY29tcGFyZV9kb2N1
bWVudF9wb3NpdGlvbihXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBvdGhlcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2NvbnRhaW5zOgorICogQHNlbGY6IEEgI1dlYktp
dERPTU5vZGUKKyAqIEBvdGhlcjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbm9kZV9jb250
YWlucyhXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBvdGhlcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
Tm9kZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfdmFsdWUoV2ViS2l0RE9NTm9kZSogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9ub2RlX3NldF9ub2RlX3ZhbHVlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTU5vZGUKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX25vZGVfc2V0X25vZGVfdmFsdWUoV2Vi
S2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3R5cGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQKKyoqLworV0VCS0lUX0FQSSBn
dXNob3J0Cit3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfdHlwZShXZWJLaXRET01Ob2RlKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9ub2RlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dl
YktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9u
b2RlX2dldF9wYXJlbnRfbm9kZShXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVMaXN0Cisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX25vZGVfZ2V0X2No
aWxkX25vZGVzKFdlYktpdERPTU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9k
ZV9nZXRfZmlyc3RfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfZ2V0X2ZpcnN0X2NoaWxkKFdlYktpdERP
TU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfbGFzdF9jaGlsZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dl
YmtpdF9kb21fbm9kZV9nZXRfbGFzdF9jaGlsZChXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3VzX3NpYmxpbmc6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVf
Z2V0X3ByZXZpb3VzX3NpYmxpbmcoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9k
ZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2li
bGluZyhXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0
X293bmVyX2RvY3VtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50CisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NRG9jdW1lbnQqCit3ZWJraXRfZG9tX25vZGVfZ2V0X293bmVyX2RvY3VtZW50
KFdlYktpdERPTU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfYmFz
ZV91cmk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX25vZGVfZ2V0X2Jhc2VfdXJp
KFdlYktpdERPTU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfdGV4
dF9jb250ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9ub2RlX2dldF90ZXh0
X2NvbnRlbnQoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2Rl
X3NldF90ZXh0X2NvbnRlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQHZhbHVl
OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fbm9kZV9zZXRfdGV4dF9jb250ZW50KFdlYktpdERPTU5vZGUqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bm9kZV9nZXRfcGFyZW50X2VsZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9l
bGVtZW50KFdlYktpdERPTU5vZGUqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NTm9kZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmlsdGVyLmNwcApzaW1p
bGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVGaWx0ZXIuY3Bw
CmluZGV4IGQ4MGZlNzAuLjhmZTZlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmlsdGVy
LmNwcApAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgIldlYktpdERPTU5vZGVGaWx0ZXIuaCIK
IAogI2luY2x1ZGUgIkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmgiCi0jaW5jbHVkZSAiTmF0
aXZlTm9kZUZpbHRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTmF0aXZlTm9kZUZpbHRlci5oPgog
I2luY2x1ZGUgIldlYktpdERPTU5vZGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01Ob2RlRmlsdGVy
UHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC03Miw3ICs3Miw3IEBAIFJl
ZlB0cjxXZWJDb3JlOjpOb2RlRmlsdGVyPiBjb3JlKFdlYktpdERPTU5vZGVGaWx0ZXIqIG5vZGVG
aWx0ZXIpCiAKICAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUZpbHRlcj4gY29yZU5vZGVGaWx0ZXIg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlRmlsdGVyKj4oZ19vYmplY3RfZ2V0X2RhdGEoR19P
QkpFQ1Qobm9kZUZpbHRlciksICJ3ZWJraXQtY29yZS1ub2RlLWZpbHRlciIpKTsKICAgICBpZiAo
IWNvcmVOb2RlRmlsdGVyKSB7Ci0gICAgICAgIGNvcmVOb2RlRmlsdGVyID0gV2ViQ29yZTo6TmF0
aXZlTm9kZUZpbHRlcjo6Y3JlYXRlKFdlYkNvcmU6OkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9u
OjpjcmVhdGUobm9kZUZpbHRlcikpOworICAgICAgICBjb3JlTm9kZUZpbHRlciA9IFdlYkNvcmU6
Ok5hdGl2ZU5vZGVGaWx0ZXI6OmNyZWF0ZShXZWJLaXQ6OkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0
aW9uOjpjcmVhdGUobm9kZUZpbHRlcikpOwogICAgICAgICBub2RlRmlsdGVyTWFwKCkuYWRkKGNv
cmVOb2RlRmlsdGVyLmdldCgpLCBub2RlRmlsdGVyKTsKICAgICAgICAgZ19vYmplY3Rfd2Vha19y
ZWYoR19PQkpFQ1Qobm9kZUZpbHRlciksIG5vZGVGaWx0ZXJPYmplY3REZXN0cm95ZWRDYWxsYmFj
aywgY29yZU5vZGVGaWx0ZXIuZ2V0KCkpOwogICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09C
SkVDVChub2RlRmlsdGVyKSwgIndlYmtpdC1jb3JlLW5vZGUtZmlsdGVyIiwgY29yZU5vZGVGaWx0
ZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01Ob2RlRmlsdGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVGaWx0ZXIuaApzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01Ob2RlRmlsdGVyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUZpbHRlci5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXJQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU5vZGVGaWx0ZXJQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFt
ZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRl
clByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmlsdGVyUHJpdmF0ZS5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU5vZGVJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzMTJjOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTm9kZUl0ZXJhdG9yLmNwcApAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTU5v
ZGVJdGVyYXRvci5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVGaWx0ZXJQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9JVEVSQVRPUl9HRVRf
UFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01f
VFlQRV9OT0RFX0lURVJBVE9SLCBXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok5vZGVJdGVyYXRvcj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NTm9kZUl0ZXJhdG9y
UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU5vZGVJdGVyYXRvciog
a2l0KFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0
KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX05PREVfSVRFUkFUT1IocmV0KTsKKwor
ICAgIHJldHVybiB3cmFwTm9kZUl0ZXJhdG9yKG9iaik7Cit9CisKK1dlYkNvcmU6Ok5vZGVJdGVy
YXRvciogY29yZShXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlSXRlcmF0b3IqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01Ob2RlSXRl
cmF0b3IqIHdyYXBOb2RlSXRlcmF0b3IoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RF
X0lURVJBVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTk9ERV9JVEVSQVRPUiwgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01Ob2RlSXRlcmF0b3IsIHdlYmtpdF9kb21f
bm9kZV9pdGVyYXRvciwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfUk9PVCwKKyAgICBQUk9QX1dIQVRfVE9fU0hPVywKKyAgICBQUk9QX0ZJ
TFRFUiwKKyAgICBQUk9QX1JFRkVSRU5DRV9OT0RFLAorICAgIFBST1BfUE9JTlRFUl9CRUZPUkVf
UkVGRVJFTkNFX05PREUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0
b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU5vZGVJdGVyYXRv
clByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05PREVfSVRFUkFUT1JfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbm9kZV9p
dGVyYXRvcl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01Ob2RlSXRl
cmF0b3IqIHNlbGYgPSBXRUJLSVRfRE9NX05PREVfSVRFUkFUT1Iob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ST09UOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcm9vdChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSEFUX1RPX1NIT1c6CisgICAgICAg
IGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3do
YXRfdG9fc2hvdyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GSUxURVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2l0ZXJh
dG9yX2dldF9maWx0ZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVG
RVJFTkNFX05PREU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9ub2RlX2l0ZXJhdG9yX2dldF9yZWZlcmVuY2Vfbm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9QT0lOVEVSX0JFRk9SRV9SRUZFUkVOQ0VfTk9ERToKKyAgICAgICAg
Z192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9w
b2ludGVyX2JlZm9yZV9yZWZlcmVuY2Vfbm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgR09iamVjdCogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5
cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFt
KiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rv
cih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwor
CisgICAgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTk9E
RV9JVEVSQVRPUl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlSXRlcmF0b3IqPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9jbGFzc19pbml0KFdlYktpdERPTU5v
ZGVJdGVyYXRvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01Ob2RlSXRlcmF0b3JQ
cml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbm9k
ZV9pdGVyYXRvcl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9wcm9wZXJ0eTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9ST09ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgInJvb3QiLAorICAgICAgICAgICAgIk5vZGVJdGVyYXRvcjpyb290IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogTm9kZUl0ZXJhdG9yOnJvb3QiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSEFUX1RPX1NIT1csCisgICAgICAgIGdfcGFyYW1f
c3BlY191bG9uZygKKyAgICAgICAgICAgICJ3aGF0LXRvLXNob3ciLAorICAgICAgICAgICAgIk5v
ZGVJdGVyYXRvcjp3aGF0LXRvLXNob3ciLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcg
Tm9kZUl0ZXJhdG9yOndoYXQtdG8tc2hvdyIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfRklMVEVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZp
bHRlciIsCisgICAgICAgICAgICAiTm9kZUl0ZXJhdG9yOmZpbHRlciIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTU5vZGVGaWx0ZXIqIE5vZGVJdGVyYXRvcjpmaWx0ZXIiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREVfRklMVEVSLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVGRVJFTkNFX05PREUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicmVmZXJlbmNlLW5vZGUi
LAorICAgICAgICAgICAgIk5vZGVJdGVyYXRvcjpyZWZlcmVuY2Utbm9kZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIE5vZGVJdGVyYXRvcjpyZWZlcmVuY2Utbm9kZSIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BPSU5URVJfQkVGT1JFX1JFRkVS
RU5DRV9OT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJw
b2ludGVyLWJlZm9yZS1yZWZlcmVuY2Utbm9kZSIsCisgICAgICAgICAgICAiTm9kZUl0ZXJhdG9y
OnBvaW50ZXItYmVmb3JlLXJlZmVyZW5jZS1ub2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2Jvb2xlYW4gTm9kZUl0ZXJhdG9yOnBvaW50ZXItYmVmb3JlLXJlZmVyZW5jZS1ub2RlIiwKKyAg
ICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2luaXQoV2ViS2l0RE9N
Tm9kZUl0ZXJhdG9yKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTU5vZGVJdGVyYXRvclByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX05PREVfSVRFUkFUT1JfR0VUX1BSSVZBVEUocmVxdWVzdCk7
CisgICAgbmV3IChwcml2KSBXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlKCk7Cit9CisKK1dl
YktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9uZXh0X25vZGUoV2ViS2l0RE9N
Tm9kZUl0ZXJhdG9yKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19OT0RFX0lURVJBVE9SKHNlbGYpLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3Ip
OworICAgIFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPm5leHROb2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX3ByZXZp
b3VzX25vZGUoV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFX0lURVJBVE9SKHNlbGYpLCAwKTsKKyAgICBV
TlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnByZXZpb3VzTm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9ub2RlX2l0
ZXJhdG9yX2RldGFjaChXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFX0lURVJBVE9SKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpOb2RlSXRlcmF0
b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+ZGV0YWNoKCk7Cit9CisK
K1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcm9vdChXZWJLaXRE
T01Ob2RlSXRlcmF0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERV9J
VEVSQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+cm9vdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3Jf
Z2V0X3doYXRfdG9fc2hvdyhXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
Tm9kZUl0ZXJhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1
bHQgPSBpdGVtLT53aGF0VG9TaG93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0
RE9NTm9kZUZpbHRlciogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9maWx0ZXIoV2ViS2l0
RE9NTm9kZUl0ZXJhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREVf
SVRFUkFUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUZpbHRlcj4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZpbHRlcigpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9k
b21fbm9kZV9pdGVyYXRvcl9nZXRfcmVmZXJlbmNlX25vZGUoV2ViS2l0RE9NTm9kZUl0ZXJhdG9y
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREVfSVRFUkFUT1Ioc2VsZiks
IDApOworICAgIFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnJlZmVyZW5jZU5vZGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0
X3BvaW50ZXJfYmVmb3JlX3JlZmVyZW5jZV9ub2RlKFdlYktpdERPTU5vZGVJdGVyYXRvciogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFX0lURVJBVE9SKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2Rl
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlSXRlcmF0
b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOWRkNDczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yLmgKQEAg
LTAsMCArMSwxMjcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQp
CisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTU5vZGVJdGVyYXRvcl9oCisjZGVm
aW5lIFdlYktpdERPTU5vZGVJdGVyYXRvcl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX05PREVfSVRFUkFUT1IgICAgICAgICAgICAod2Via2l0X2RvbV9ub2RlX2l0ZXJh
dG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9JVEVSQVRPUihvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfTk9ERV9JVEVSQVRPUiwgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9OT0RFX0lURVJBVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9OT0RFX0lURVJBVE9SLCBXZWJLaXRET01Ob2Rl
SXRlcmF0b3JDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OT0RFX0lURVJBVE9SKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9OT0RFX0lURVJBVE9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OT0RFX0lURVJBVE9SX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9OT0RFX0lURVJBVE9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0lURVJBVE9SX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9OT0RFX0lURVJBVE9SLCBXZWJLaXRET01Ob2RlSXRlcmF0b3JDbGFzcykpCisKK3N0
cnVjdCBfV2ViS2l0RE9NTm9kZUl0ZXJhdG9yIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50
X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01Ob2RlSXRlcmF0b3JDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF90eXBlKHZvaWQpOworCisvKioKKyAq
IHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9uZXh0X25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTm9kZUl0ZXJhdG9yCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01O
b2RlKgord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX25leHRfbm9kZShXZWJLaXRET01Ob2RlSXRl
cmF0b3IqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVf
aXRlcmF0b3JfcHJldmlvdXNfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRlcmF0
b3IKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRf
ZG9tX25vZGVfaXRlcmF0b3JfcHJldmlvdXNfbm9kZShXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNl
bGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3Jf
ZGV0YWNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGVJdGVyYXRvcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZGV0YWNoKFdlYktpdERPTU5v
ZGVJdGVyYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dl
dF9yb290OgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGVJdGVyYXRvcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3Jvb3QoV2ViS2l0RE9N
Tm9kZUl0ZXJhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3Jf
Z2V0X3doYXRfdG9fc2hvdzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRlcmF0b3IKKyAq
CisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9k
b21fbm9kZV9pdGVyYXRvcl9nZXRfd2hhdF90b19zaG93KFdlYktpdERPTU5vZGVJdGVyYXRvciog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9maWx0ZXI6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZUl0ZXJhdG9yCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlRmlsdGVyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NTm9kZUZpbHRlcioKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfZmlsdGVyKFdlYktp
dERPTU5vZGVJdGVyYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2l0ZXJh
dG9yX2dldF9yZWZlcmVuY2Vfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRlcmF0
b3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dl
dF9yZWZlcmVuY2Vfbm9kZShXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcG9pbnRlcl9iZWZvcmVfcmVmZXJlbmNlX25v
ZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZUl0ZXJhdG9yCisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9ub2RlX2l0
ZXJhdG9yX2dldF9wb2ludGVyX2JlZm9yZV9yZWZlcmVuY2Vfbm9kZShXZWJLaXRET01Ob2RlSXRl
cmF0b3IqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NTm9kZUl0
ZXJhdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Ob2RlSXRlcmF0b3JQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTkwYWVjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU5vZGVJ
dGVyYXRvclByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlSXRlcmF0b3IuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiB3cmFwTm9kZUl0ZXJhdG9yKFdlYkNvcmU6
Ok5vZGVJdGVyYXRvciopOworV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBraXQoV2ViQ29yZTo6Tm9k
ZUl0ZXJhdG9yKik7CitXZWJDb3JlOjpOb2RlSXRlcmF0b3IqIGNvcmUoV2ViS2l0RE9NTm9kZUl0
ZXJhdG9yKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTU5v
ZGVJdGVyYXRvclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlTGlzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU5vZGVMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmNi
NWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlTGlzdC5jcHAKQEAgLTAsMCArMSwxNTQg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Ob2RlTGlzdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJ
bXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5l
IFdFQktJVF9ET01fTk9ERV9MSVNUX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCwgV2ViS2l0RE9NTm9kZUxp
c3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlIHsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTU5v
ZGVMaXN0UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU5vZGVMaXN0
KiBraXQoV2ViQ29yZTo6Tm9kZUxpc3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFX0xJU1QocmV0KTsKKworICAgIHJl
dHVybiB3cmFwTm9kZUxpc3Qob2JqKTsKK30KKworV2ViQ29yZTo6Tm9kZUxpc3QqIGNvcmUoV2Vi
S2l0RE9NTm9kZUxpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpOb2RlTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3cmFwTm9kZUxpc3QoV2ViQ29y
ZTo6Tm9kZUxpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX05PREVfTElTVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBF
X05PREVfTElTVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01Ob2RlTGlzdCwg
d2Via2l0X2RvbV9ub2RlX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fbm9kZV9saXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01O
b2RlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05PREVfTElTVF9HRVRfUFJJVkFURShv
YmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTU5vZGVMaXN0UHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbm9kZV9saXN0X3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbm9kZV9saXN0X2dl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTU5vZGVMaXN0KiBzZWxmID0g
V0VCS0lUX0RPTV9OT0RFX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVl
LCB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX25vZGVfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX25vZGVfbGlzdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0
eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisg
ICAgV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OT0RFX0xJU1Rf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Tm9kZUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fbm9kZV9saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NTm9kZUxpc3RDbGFzcyogcmVxdWVz
dENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENs
YXNzLCBzaXplb2YoV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNz
LT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2NvbnN0cnVjdG9yOworICAgIGdv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9maW5hbGl6ZTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIk5vZGVMaXN0Omxl
bmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBOb2RlTGlzdDpsZW5ndGgiLAor
ICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbm9kZV9saXN0X2luaXQo
V2ViS2l0RE9NTm9kZUxpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NTm9kZUxpc3RQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OT0RFX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUoKTsKK30KKworV2ViS2l0RE9N
Tm9kZSogd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShXZWJLaXRET01Ob2RlTGlzdCogc2VsZiwg
Z3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREVfTElTVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZUxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChXZWJL
aXRET01Ob2RlTGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFX0xJ
U1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGVMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVMaXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVMaXN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiMDVlNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTm9kZUxpc3QuaApAQCAtMCwwICsxLDczIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Vi
a2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRET01Ob2RlTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTU5vZGVMaXN0X2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNUICAgICAgICAgICAgKHdlYmtp
dF9kb21fbm9kZV9saXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9MSVNU
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9OT0RFX0xJU1QsIFdlYktpdERPTU5vZGVMaXN0KSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9OT0RFX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCwgV2ViS2l0RE9NTm9kZUxpc3RDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OT0RFX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfTk9ERV9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9OT0RFX0xJU1QpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX05PREVfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNULCBXZWJLaXRET01Ob2Rl
TGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Ob2RlTGlzdCB7CisgICAgV2ViS2l0RE9N
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTm9kZUxpc3RD
bGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X3R5cGUodm9pZCk7CisKKy8q
KgorICogd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01O
b2RlTGlzdAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgor
d2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShXZWJLaXRET01Ob2RlTGlzdCogc2VsZiwgZ3Vsb25n
IGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoOgorICog
QHNlbGY6IEEgI1dlYktpdERPTU5vZGVMaXN0CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisq
Ki8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKFdl
YktpdERPTU5vZGVMaXN0KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTU5vZGVMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU5vZGVMaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjRhNDg1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVMaXN0UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NTm9kZUxpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRl
X2gKKworI2luY2x1ZGUgPFdlYkNvcmUvTm9kZUxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NTm9kZUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01Ob2Rl
TGlzdCogd3JhcE5vZGVMaXN0KFdlYkNvcmU6Ok5vZGVMaXN0Kik7CitXZWJLaXRET01Ob2RlTGlz
dCoga2l0KFdlYkNvcmU6Ok5vZGVMaXN0Kik7CitXZWJDb3JlOjpOb2RlTGlzdCogY29yZShXZWJL
aXRET01Ob2RlTGlzdCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01Ob2RlTGlzdFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Ob2RlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmI1M2EwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVQcml2YXRlLmgKQEAgLTAsMCAr
MSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01Ob2RlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU5vZGVQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvTm9kZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NTm9kZSogd3JhcE5vZGUoV2ViQ29yZTo6
Tm9kZSopOworV2ViS2l0RE9NTm9kZSoga2l0KFdlYkNvcmU6Ok5vZGUqKTsKK1dlYkNvcmU6Ok5v
ZGUqIGNvcmUoV2ViS2l0RE9NTm9kZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiBXZWJLaXRET01Ob2RlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVVbnN0
YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Ob2RlVW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lZWJiZDZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlVW5zdGFibGUuaApA
QCAtMCwwICsxLDUwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTU5vZGVVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTU5vZGVVbnN0YWJsZV9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoq
CisgKiBXRUJLSVRfRE9NX05PREVfTk9UQVRJT05fTk9ERToKKyAqLworI2RlZmluZSBXRUJLSVRf
RE9NX05PREVfTk9UQVRJT05fTk9ERSAxMgorCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRf
aXNfY29ubmVjdGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2RvbV9ub2RlX2dldF9pc19jb25uZWN0ZWQoV2ViS2l0RE9NTm9k
ZSogc2VsZik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTU5vZGVVbnN0YWJsZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU9iamVjdC5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LmNwcApyZW5hbWUg
dG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01PYmplY3QuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTU9iamVjdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3QuaApzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01PYmplY3QuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmpl
Y3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU9iamVjdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4wMmIxMWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3RQcml2
YXRlLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisKKyNpZm5kZWYgV2ViS2l0RE9NT2JqZWN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TU9iamVjdFByaXZhdGVfaAorCisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5o
PgorCitzdHJ1Y3QgX1dlYktpdERPTU9iamVjdCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTU9iamVjdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworCisgICAgdm9pZCAoKiB3cmFwKSAoV2ViS2l0RE9NT2JqZWN0Kiwgdm9pZCogY29y
ZU9iamVjdCk7Cit9OworCit2b2lkIHdlYmtpdERPTU9iamVjdFdyYXAoV2ViS2l0RE9NT2JqZWN0
Kiwgdm9pZCogY29yZU9iamVjdCk7CisKKyNlbmRpZiAvKiBXZWJLaXRET01PYmplY3RfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNmMmI5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01QZXJmb3JtYW5jZS5jcHAKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01QZXJmb3JtYW5jZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRU
YXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9E
T01fUEVSRk9STUFOQ0VfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0UsIFdlYktpdERPTVBlcmZvcm1hbmNl
UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZSB7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgUmVmUHRyPFdlYkNvcmU6OlBlcmZvcm1hbmNl
PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorfSBXZWJLaXRET01Q
ZXJmb3JtYW5jZVByaXZhdGU7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTVBlcmZvcm1hbmNlKiBraXQoV2ViQ29yZTo6UGVyZm9ybWFu
Y2UqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
Z3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4g
V0VCS0lUX0RPTV9QRVJGT1JNQU5DRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBQZXJmb3JtYW5j
ZShvYmopOworfQorCitXZWJDb3JlOjpQZXJmb3JtYW5jZSogY29yZShXZWJLaXRET01QZXJmb3Jt
YW5jZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlBlcmZvcm1hbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHdyYXBQZXJmb3JtYW5jZShXZWJDb3Jl
OjpQZXJmb3JtYW5jZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fUEVSRk9STUFOQ0UoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9QRVJGT1JNQU5DRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5H
KQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdF
cnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkV2
ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQZXJmb3JtYW5jZSo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZv
ckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BB
UkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6UGVyZm9y
bWFuY2UqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQZXJmb3JtYW5jZSo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6
OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAg
IFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykK
KyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlBlcmZvcm1hbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VE
X1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNF
RF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9U
SU1JTkcpCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2
ZW50ID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9hZGRfZXZlbnRfbGlz
dGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRET01QZXJmb3JtYW5jZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZSwgV0VCS0lU
X0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9F
VkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAg
ICBQUk9QXzAsCisgICAgUFJPUF9OQVZJR0FUSU9OLAorICAgIFBST1BfVElNSU5HLAorfTsKKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9QRVJGT1JNQU5DRV9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBwcml2LT5+V2ViS2l0RE9N
UGVyZm9ybWFuY2VQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9wZXJm
b3JtYW5jZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRShvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BVklHQVRJ
T046CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV9nZXRfbmF2aWdhdGlvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9USU1JTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV9nZXRfdGltaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fcGVyZm9ybWFuY2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29u
c3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUo
V0VCX1RJTUlORykKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1BFUkZPUk1BTkNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBlcmZvcm1hbmNlKj4oV0VCS0lUX0RPTV9PQkpF
Q1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV9jbGFzc19pbml0KFdlYktpdERPTVBlcmZvcm1hbmNlQ2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFz
cywgc2l6ZW9mKFdlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFz
cy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2NvbnN0cnVjdG9yOworICAg
IGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2ZpbmFsaXpl
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFWSUdBVElPTiwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJuYXZpZ2F0aW9uIiwKKyAgICAgICAg
ICAgICJQZXJmb3JtYW5jZTpuYXZpZ2F0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBQZXJmb3JtYW5jZTpuYXZpZ2F0aW9uIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVElNSU5H
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInRpbWluZyIsCisg
ICAgICAgICAgICAiUGVyZm9ybWFuY2U6dGltaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIFBlcmZvcm1hbmNlOnRpbWluZyIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5HLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV9pbml0KFdlYktpdERPTVBlcmZvcm1hbmNlKiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTVBlcmZvcm1hbmNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfR0VU
X1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01QZXJmb3JtYW5jZVBy
aXZhdGUoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2NsZWFyX3Jlc291cmNl
X3RpbWluZ3MoV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRShzZWxmKSk7CisgICAgV2Vi
Q29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
Y2xlYXJSZXNvdXJjZVRpbWluZ3MoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorI2VuZGlm
IC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2Vfc2V0X3Jlc291cmNlX3RpbWluZ19idWZmZXJfc2l6ZShXZWJLaXRET01QZXJmb3JtYW5jZSog
c2VsZiwgZ3Vsb25nIG1heFNpemUpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRShzZWxmKSk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFu
Y2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0UmVzb3VyY2VUaW1p
bmdCdWZmZXJTaXplKG1heFNpemUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgVU5VU0VEX1BBUkFNKG1heFNpemUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIldlYiBUaW1pbmciKQorI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQor
Cit2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vfd2Via2l0X21hcmsoV2ViS2l0RE9NUGVyZm9y
bWFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBtYXJrTmFtZSwgR0Vycm9yKiogZXJyb3IpCit7Cisj
aWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRShz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChtYXJrTmFtZSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTWFya05hbWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobWFya05hbWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPndlYmtpdE1hcmsoY29udmVydGVkTWFya05hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0o
bWFya05hbWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1J
TkcpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfY2xlYXJfbWFy
a3MoV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBtYXJrTmFtZSkKK3sK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNF
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG1hcmtOYW1lKTsKKyAgICBXZWJDb3JlOjpQ
ZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRNYXJrTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtYXJrTmFtZSk7CisgICAg
aXRlbS0+d2Via2l0Q2xlYXJNYXJrcyhjb252ZXJ0ZWRNYXJrTmFtZSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0obWFya05hbWUpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorI2VuZGlmIC8qIEVOQUJM
RShXRUJfVElNSU5HKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vfd2Via2l0
X21lYXN1cmUoV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZWFzdXJl
TmFtZSwgY29uc3QgZ2NoYXIqIHN0YXJ0TWFyaywgY29uc3QgZ2NoYXIqIGVuZE1hcmssIEdFcnJv
cioqIGVycm9yKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUEVSRk9STUFOQ0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobWVhc3VyZU5hbWUp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RhcnRNYXJrKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KGVuZE1hcmspOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAg
IFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZE1lYXN1cmVOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1l
YXN1cmVOYW1lKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdGFydE1hcmsgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgoc3RhcnRNYXJrKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRFbmRN
YXJrID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVuZE1hcmspOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPndlYmtpdE1lYXN1cmUoY29udmVydGVkTWVhc3Vy
ZU5hbWUsIGNvbnZlcnRlZFN0YXJ0TWFyaywgY29udmVydGVkRW5kTWFyaywgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShtZWFzdXJlTmFt
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0TWFyayk7CisgICAgVU5VU0VEX1BBUkFNKGVuZE1h
cmspOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICov
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfY2xlYXJfbWVhc3VyZXMo
V2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZWFzdXJlTmFtZSkKK3sK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNF
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG1lYXN1cmVOYW1lKTsKKyAgICBXZWJDb3Jl
OjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRNZWFzdXJlTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZWFzdXJlTmFt
ZSk7CisgICAgaXRlbS0+d2Via2l0Q2xlYXJNZWFzdXJlcyhjb252ZXJ0ZWRNZWFzdXJlTmFtZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0obWVhc3Vy
ZU5hbWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmci
KQorI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9k
b21fcGVyZm9ybWFuY2Vfbm93KFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmKQoreworI2lmIEVO
QUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPm5vdygpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Rv
dWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK1dlYktpdERP
TVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9nZXRfbmF2aWdh
dGlvbihXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlO
RykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRShzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPm5hdmlnYXRpb24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIDA7
CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK1dlYktpdERPTVBlcmZvcm1h
bmNlVGltaW5nKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF90aW1pbmcoV2ViS2l0RE9NUGVy
Zm9ybWFuY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfUEVSRk9STUFOQ0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1h
bmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpQZXJm
b3JtYW5jZVRpbWluZz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRpbWluZygp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJ
TUlORykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJm
b3JtYW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkOWUxMjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUGVyZm9ybWFu
Y2VfaAorI2RlZmluZSBXZWJLaXRET01QZXJmb3JtYW5jZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfUEVSRk9STUFOQ0UgICAgICAgICAgICAod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QRVJG
T1JNQU5DRSwgV2ViS2l0RE9NUGVyZm9ybWFuY2UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZP
Uk1BTkNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRSwgV2ViS2l0RE9NUGVyZm9ybWFuY2VDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRShvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0UpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFLCBXZWJL
aXRET01QZXJmb3JtYW5jZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZSB7
CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NUGVyZm9ybWFuY2VDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2NsZWFyX3Jl
c291cmNlX3RpbWluZ3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV9jbGVhcl9yZXNvdXJjZV90aW1pbmdzKFdlYktpdERPTVBlcmZvcm1hbmNlKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3NldF9yZXNvdXJjZV90aW1p
bmdfYnVmZmVyX3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqIEBt
YXhTaXplOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9zZXRfcmVzb3VyY2VfdGltaW5nX2J1
ZmZlcl9zaXplKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBndWxvbmcgbWF4U2l6ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfbWFyazoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01QZXJmb3JtYW5jZQorICogQG1hcmtOYW1lOiBBICNnY2hhcgorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2Vfd2Via2l0X21hcmsoV2ViS2l0RE9NUGVyZm9ybWFu
Y2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBtYXJrTmFtZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vfd2Via2l0X2NsZWFyX21hcmtzOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlCisgKiBAbWFya05hbWU6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcGVy
Zm9ybWFuY2Vfd2Via2l0X2NsZWFyX21hcmtzKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBj
b25zdCBnY2hhciogbWFya05hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
d2Via2l0X21lYXN1cmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqIEBt
ZWFzdXJlTmFtZTogQSAjZ2NoYXIKKyAqIEBzdGFydE1hcms6IEEgI2djaGFyCisgKiBAZW5kTWFy
azogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3dlYmtpdF9t
ZWFzdXJlKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBjb25zdCBnY2hhciogbWVhc3VyZU5h
bWUsIGNvbnN0IGdjaGFyKiBzdGFydE1hcmssIGNvbnN0IGdjaGFyKiBlbmRNYXJrLCBHRXJyb3Iq
KiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfY2xlYXJf
bWVhc3VyZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqIEBtZWFzdXJl
TmFtZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfY2xlYXJfbWVhc3VyZXMoV2Vi
S2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZWFzdXJlTmFtZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9ub3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
UGVyZm9ybWFuY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fcGVyZm9ybWFu
Y2Vfbm93KFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX2dldF9uYXZpZ2F0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZv
cm1hbmNlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb24KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKgord2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV9nZXRfbmF2aWdhdGlvbihXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9nZXRfdGltaW5nOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVBlcmZvcm1hbmNlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJL
aXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyoKK3dlYmtpdF9kb21fcGVyZm9y
bWFuY2VfZ2V0X3RpbWluZyhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAv
KiBXZWJLaXRET01QZXJmb3JtYW5jZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNl
RW50cnkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lN2Y0NjNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3Jt
YW5jZUVudHJ5LmNwcApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZvcm1h
bmNlRW50cnkuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZX0dFVF9QUklWQVRFKG9iaikg
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1B
TkNFX0VOVFJZLCBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlIHsKKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGVyZm9ybWFuY2VFbnRyeT4gY29yZU9iamVj
dDsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKK30gV2ViS2l0RE9NUGVyZm9ybWFuY2VF
bnRyeVByaXZhdGU7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIGtpdChXZWJDb3JlOjpQZXJmb3JtYW5j
ZUVudHJ5KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0
dXJuIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfRU5UUlkocmV0KTsKKworICAgIHJldHVybiB3cmFw
UGVyZm9ybWFuY2VFbnRyeShvYmopOworfQorCitXZWJDb3JlOjpQZXJmb3JtYW5jZUVudHJ5KiBj
b3JlKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQZXJmb3JtYW5jZUVudHJ5Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NUGVyZm9y
bWFuY2VFbnRyeSogd3JhcFBlcmZvcm1hbmNlRW50cnkoV2ViQ29yZTo6UGVyZm9ybWFuY2VFbnRy
eSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fUEVSRk9STUFOQ0VfRU5UUlkoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9Q
RVJGT1JNQU5DRV9FTlRSWSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5H
KQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnksIHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfZW50cnksIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAg
IFBST1BfMCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9FTlRSWV9UWVBFLAorICAgIFBST1Bf
U1RBUlRfVElNRSwKKyAgICBQUk9QX0RVUkFUSU9OLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1BFUkZP
Uk1BTkNFX0VOVFJZX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcp
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHByaXYtPn5XZWJLaXRET01Q
ZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfZW50cnlfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBzZWxmID0gV0VCS0lU
X0RPTV9QRVJGT1JNQU5DRV9FTlRSWShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X25hbWUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfRU5UUllfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfZW50cnlfdHlw
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEFSVF9USU1FOgorICAg
ICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50
cnlfZ2V0X3N0YXJ0X3RpbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RFVSQVRJT046CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV9lbnRyeV9nZXRfZHVyYXRpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIEdPYmplY3QqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYktpdERPTVBlcmZvcm1hbmNl
RW50cnlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWV9HRVRfUFJJ
VkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpQZXJmb3JtYW5jZUVudHJ5Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9jbGFz
c19pbml0KFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2Yo
V2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdG9yID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfZW50cnlfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAg
ICAgICAiUGVyZm9ybWFuY2VFbnRyeTpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2No
YXIqIFBlcmZvcm1hbmNlRW50cnk6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VOVFJZX1RZUEUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZW50cnktdHlwZSIs
CisgICAgICAgICAgICAiUGVyZm9ybWFuY2VFbnRyeTplbnRyeS10eXBlIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2NoYXIqIFBlcmZvcm1hbmNlRW50cnk6ZW50cnktdHlwZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1NUQVJUX1RJTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAg
ICAgICAgICAic3RhcnQtdGltZSIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VFbnRyeTpzdGFy
dC10aW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBQZXJmb3JtYW5jZUVudHJ5
OnN0YXJ0LXRpbWUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0RVUkFUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImR1
cmF0aW9uIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZUVudHJ5OmR1cmF0aW9uIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBQZXJmb3JtYW5jZUVudHJ5OmR1cmF0aW9uIiwKKyAg
ICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX2VudHJ5X2luaXQoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogcmVxdWVzdCkKK3sK
KyAgICBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
UEVSRk9STUFOQ0VfRU5UUllfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfbmFtZShXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBz
ZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1BFUkZPUk1BTkNFX0VOVFJZKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZUVu
dHJ5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShXRUJf
VElNSU5HKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRf
ZW50cnlfdHlwZShXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBzZWxmKQoreworI2lmIEVOQUJM
RShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX0VOVFJZ
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZUVudHJ5KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmVudHJ5VHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRp
bWluZyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9
CisKK2dkb3VibGUgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfc3RhcnRfdGltZShX
ZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX0VOVFJZKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZUVudHJ5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+c3RhcnRUaW1lKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
ZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ2RvdWJs
ZSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF9kdXJhdGlvbihXZWJLaXRET01QZXJm
b3JtYW5jZUVudHJ5KiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX0VOVFJZKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpQZXJmb3JtYW5jZUVudHJ5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3Vi
bGUgcmVzdWx0ID0gaXRlbS0+ZHVyYXRpb24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBl
cmZvcm1hbmNlRW50cnkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNzk1OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Q
ZXJmb3JtYW5jZUVudHJ5LmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5X2gKKyNkZWZpbmUg
V2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
LXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVf
UEVSRk9STUFOQ0VfRU5UUlkgICAgICAgICAgICAod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRy
eV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9QRVJGT1JNQU5DRV9FTlRSWSwgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSkpCisjZGVm
aW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfRU5UUllfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX0VO
VFJZLCBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfUEVSRk9STUFOQ0VfRU5UUlkob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX0VOVFJZKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9FTlRSWV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfRU5UUlkp
KQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JN
QU5DRV9FTlRSWSwgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeUNsYXNzKSkKKworc3RydWN0IF9X
ZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5Q2xhc3Mgewor
ICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkg
R1R5cGUKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X3R5cGUodm9pZCk7CisKKy8q
KgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfbmFtZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF9uYW1lKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnkq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X2VudHJ5
X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeQorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfZW50cnlfdHlwZShX
ZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX2VudHJ5X2dldF9zdGFydF90aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBl
cmZvcm1hbmNlRW50cnkKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fcGVyZm9y
bWFuY2VfZW50cnlfZ2V0X3N0YXJ0X3RpbWUoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfZHVyYXRpb246
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeQorICoKKyAqIFJldHVybnM6
IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2RvdWJsZQord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfZHVyYXRpb24oV2ViS2l0
RE9NUGVyZm9ybWFuY2VFbnRyeSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01QZXJmb3Jt
YW5jZUVudHJ5X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBl
cmZvcm1hbmNlRW50cnlQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEludGVyZmFjZVByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0
ZS5oCmluZGV4IDI4MDU3NzUuLmUxY2RlNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZS5oCkBAIC0xOCwxOSArMTgsMTkg
QEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktp
dERPTVRlc3RJbnRlcmZhY2VQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEludGVyZmFj
ZVByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlX2gKIAotI2luY2x1ZGUgIlRl
c3RJbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdEludGVyZmFj
ZS5oPgotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpbmNs
dWRlIDxXZWJDb3JlL1BlcmZvcm1hbmNlRW50cnkuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5oPgorI2lmIEVOQUJMRShXRUJfVElNSU5HKQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHdyYXBUZXN0SW50ZXJmYWNl
KFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqKTsKLVdlYktpdERPTVRlc3RJbnRlcmZhY2UqIGtpdChX
ZWJDb3JlOjpUZXN0SW50ZXJmYWNlKik7Ci1XZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBjb3JlKFdl
YktpdERPTVRlc3RJbnRlcmZhY2UqKTsKK1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIHdyYXBQ
ZXJmb3JtYW5jZUVudHJ5KFdlYkNvcmU6OlBlcmZvcm1hbmNlRW50cnkqKTsKK1dlYktpdERPTVBl
cmZvcm1hbmNlRW50cnkqIGtpdChXZWJDb3JlOjpQZXJmb3JtYW5jZUVudHJ5Kik7CitXZWJDb3Jl
OjpQZXJmb3JtYW5jZUVudHJ5KiBjb3JlKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqKTsKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKSAqLworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLwogCi0j
ZW5kaWYgLyogV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdl
YktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTg3ZTg4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg1IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
UGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1BF
UkZPUk1BTkNFX05BVklHQVRJT05fR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfTkFWSUdBVElPTiwgV2Vi
S2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZhdGUgeworI2lmIEVOQUJMRShXRUJfVElN
SU5HKQorICAgIFJlZlB0cjxXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRpb24+IGNvcmVPYmpl
Y3Q7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCit9IFdlYktpdERPTVBlcmZvcm1hbmNl
TmF2aWdhdGlvblByaXZhdGU7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbioga2l0KFdlYkNvcmU6
OlBlcmZvcm1hbmNlTmF2aWdhdGlvbiogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9i
aikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT04ocmV0
KTsKKworICAgIHJldHVybiB3cmFwUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKG9iaik7Cit9CisKK1dl
YkNvcmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbiogY29yZShXZWJLaXRET01QZXJmb3JtYW5jZU5h
dmlnYXRpb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24q
IHdyYXBQZXJmb3JtYW5jZU5hdmlnYXRpb24oV2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9u
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfUEVSRk9STUFOQ0VfTkFWSUdBVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfVElNSU5HKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlv
biwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9UWVBFLAorICAgIFBST1BfUkVE
SVJFQ1RfQ09VTlQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25h
dmlnYXRpb25fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVBlcmZv
cm1hbmNlTmF2aWdhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05B
VklHQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisgICAgcHJpdi0+fldlYktpdERPTVBlcmZv
cm1hbmNlTmF2aWdhdGlvblByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX25hdmlnYXRpb25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlv
biogc2VsZiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTihvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdf
dmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9n
ZXRfbmF2aWdhdGlvbl90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1JFRElSRUNUX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fZ2V0X3JlZGlyZWN0X2NvdW50KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmln
YXRpb25fY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAg
R09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9u
YXZpZ2F0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcp
CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHBy
aXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRp
b24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fY2xhc3NfaW5pdChXZWJL
aXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29u
c3RydWN0b3IgPSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fY29uc3RydWN0b3I7
CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2
aWdhdGlvbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAgICAgICAidHlw
ZSIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VOYXZpZ2F0aW9uOnR5cGUiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBndXNob3J0IFBlcmZvcm1hbmNlTmF2aWdhdGlvbjp0eXBlIiwKKyAgICAg
ICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1JFRElSRUNUX0NPVU5ULAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWludCgKKyAgICAgICAgICAgICJyZWRpcmVjdC1jb3VudCIsCisgICAgICAgICAgICAi
UGVyZm9ybWFuY2VOYXZpZ2F0aW9uOnJlZGlyZWN0LWNvdW50IiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ3VzaG9ydCBQZXJmb3JtYW5jZU5hdmlnYXRpb246cmVkaXJlY3QtY291bnQiLAorICAg
ICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0
aW9uX2luaXQoV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiByZXF1ZXN0KQoreworICAg
IFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X1BFUkZPUk1BTkNFX05BVklHQVRJT05fR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChw
cml2KSBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlKCk7Cit9CisKK2d1c2hv
cnQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUo
V2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJf
VElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX05BVklHQVRJT04o
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPnR5cGUoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGd1c2hvcnQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLwor
fQorCitndXNob3J0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfcmVkaXJl
Y3RfY291bnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBzZWxmKQoreworI2lmIEVO
QUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX05B
VklHQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPnJl
ZGlyZWN0Q291bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWlu
ZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1c2hvcnQ+KDApOworI2VuZGlmIC8qIEVOQUJM
RShXRUJfVElNSU5HKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdh
dGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wMDM0MTM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3Jt
YW5jZU5hdmlnYXRpb24uaApAQCAtMCwwICsxLDk1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbl9oCisjZGVm
aW5lIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbl9oCisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfUEVSRk9STUFOQ0VfTkFWSUdBVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX25hdmlnYXRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJG
T1JNQU5DRV9OQVZJR0FUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OLCBXZWJL
aXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1B
TkNFX05BVklHQVRJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX05BVklHQVRJT04sIFdlYktpdERP
TVBlcmZvcm1hbmNlTmF2aWdhdGlvbkNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1BFUkZP
Uk1BTkNFX05BVklHQVRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX05BVklHQVRJT04pKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX05BVklHQVRJT05fQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNF
X05BVklHQVRJT04pKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT05f
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX1BFUkZPUk1BTkNFX05BVklHQVRJT04sIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2
aWdhdGlvbkNsYXNzKSkKKworLyoqCisgKiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJ
T05fVFlQRV9OQVZJR0FURToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05B
VklHQVRJT05fVFlQRV9OQVZJR0FURSAwCisKKy8qKgorICogV0VCS0lUX0RPTV9QRVJGT1JNQU5D
RV9OQVZJR0FUSU9OX1RZUEVfUkVMT0FEOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fUEVSRk9S
TUFOQ0VfTkFWSUdBVElPTl9UWVBFX1JFTE9BRCAxCisKKy8qKgorICogV0VCS0lUX0RPTV9QRVJG
T1JNQU5DRV9OQVZJR0FUSU9OX1RZUEVfQkFDS19GT1JXQVJEOgorICovCisjZGVmaW5lIFdFQktJ
VF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9UWVBFX0JBQ0tfRk9SV0FSRCAyCisKKy8qKgor
ICogV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX1RZUEVfUkVTRVJWRUQ6CisgKi8K
KyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX1RZUEVfUkVTRVJWRUQg
MjU1CisKK3N0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uIHsKKyAgICBXZWJL
aXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb25DbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9u
YXZpZ2F0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2VfbmF2aWdhdGlvbl9nZXRfbmF2aWdhdGlvbl90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TVBlcmZvcm1hbmNlTmF2aWdhdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoV2ViS2l0RE9NUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX25hdmlnYXRpb25fZ2V0X3JlZGlyZWN0X2NvdW50OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVBlcmZvcm1hbmNlTmF2aWdhdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9yZWRpcmVjdF9jb3VudChXZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb24qIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NUGVyZm9ybWFu
Y2VOYXZpZ2F0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9u
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0YmI3OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUGVyZm9ybWFuY2VO
YXZpZ2F0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlv
blByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmg+Cisj
aWYgRU5BQkxFKFdFQl9USU1JTkcpCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uKiB3cmFwUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKFdlYkNvcmU6OlBl
cmZvcm1hbmNlTmF2aWdhdGlvbiopOworV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBr
aXQoV2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9uKik7CitXZWJDb3JlOjpQZXJmb3JtYW5j
ZU5hdmlnYXRpb24qIGNvcmUoV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworCisj
ZW5kaWYgLyogV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTAxYWZhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVBlcmZvcm1h
bmNlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL1BlcmZvcm1hbmNlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVBlcmZvcm1hbmNlLmg+CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHdyYXBQZXJmb3JtYW5jZShXZWJDb3JlOjpQ
ZXJmb3JtYW5jZSopOworV2ViS2l0RE9NUGVyZm9ybWFuY2UqIGtpdChXZWJDb3JlOjpQZXJmb3Jt
YW5jZSopOworV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGNvcmUoV2ViS2l0RE9NUGVyZm9ybWFuY2Uq
KTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcp
ICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5n
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjYxMWFkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZy5jcHAKQEAgLTAsMCArMSw3MzYgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZy5oIgorCisjaW5jbHVkZSA8V2ViQ29y
ZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVBl
cmZvcm1hbmNlVGltaW5nUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1B
TkNFX1RJTUlOR19HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShv
YmosIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9USU1JTkcsIFdlYktpdERPTVBlcmZvcm1h
bmNlVGltaW5nUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNl
VGltaW5nUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgUmVmUHRyPFdlYkNv
cmU6OlBlcmZvcm1hbmNlVGltaW5nPiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShXRUJf
VElNSU5HKQorfSBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGU7CisKKyNpZiBFTkFC
TEUoV0VCX1RJTUlORykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVBlcmZvcm1h
bmNlVGltaW5nKiBraXQoV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIG9iaikKK3sKKyAgICBp
ZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9N
T2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9QRVJGT1JN
QU5DRV9USU1JTkcocmV0KTsKKworICAgIHJldHVybiB3cmFwUGVyZm9ybWFuY2VUaW1pbmcob2Jq
KTsKK30KKworV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGNvcmUoV2ViS2l0RE9NUGVyZm9y
bWFuY2VUaW1pbmcqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiB3cmFw
UGVyZm9ybWFuY2VUaW1pbmcoV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1BFUkZP
Uk1BTkNFX1RJTUlORyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJ
TUlORywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorCitHX0RFRklO
RV9UWVBFKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3RpbWluZywgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfTkFWSUdBVElPTl9TVEFSVCwKKyAgICBQUk9QX1VOTE9BRF9FVkVOVF9TVEFSVCwK
KyAgICBQUk9QX1VOTE9BRF9FVkVOVF9FTkQsCisgICAgUFJPUF9SRURJUkVDVF9TVEFSVCwKKyAg
ICBQUk9QX1JFRElSRUNUX0VORCwKKyAgICBQUk9QX0ZFVENIX1NUQVJULAorICAgIFBST1BfRE9N
QUlOX0xPT0tVUF9TVEFSVCwKKyAgICBQUk9QX0RPTUFJTl9MT09LVVBfRU5ELAorICAgIFBST1Bf
Q09OTkVDVF9TVEFSVCwKKyAgICBQUk9QX0NPTk5FQ1RfRU5ELAorICAgIFBST1BfU0VDVVJFX0NP
Tk5FQ1RJT05fU1RBUlQsCisgICAgUFJPUF9SRVFVRVNUX1NUQVJULAorICAgIFBST1BfUkVTUE9O
U0VfU1RBUlQsCisgICAgUFJPUF9SRVNQT05TRV9FTkQsCisgICAgUFJPUF9ET01fTE9BRElORywK
KyAgICBQUk9QX0RPTV9JTlRFUkFDVElWRSwKKyAgICBQUk9QX0RPTV9DT05URU5UX0xPQURFRF9F
VkVOVF9TVEFSVCwKKyAgICBQUk9QX0RPTV9DT05URU5UX0xPQURFRF9FVkVOVF9FTkQsCisgICAg
UFJPUF9ET01fQ09NUExFVEUsCisgICAgUFJPUF9MT0FEX0VWRU5UX1NUQVJULAorICAgIFBST1Bf
TE9BRF9FVkVOVF9FTkQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3RpbWluZ19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NUGVyZm9y
bWFuY2VUaW1pbmdQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9USU1JTkdf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9USU1JTkcpCisgICAgcHJpdi0+fldlYktpdERPTVBlcmZvcm1hbmNlVGlt
aW5nUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
dGltaW5nX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmID0gV0VCS0lUX0RPTV9QRVJG
T1JNQU5DRV9USU1JTkcob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9OQVZJR0FUSU9OX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQo
dmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9uYXZpZ2F0aW9uX3N0YXJ0
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VOTE9BRF9FVkVOVF9TVEFS
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX3RpbWluZ19nZXRfdW5sb2FkX2V2ZW50X3N0YXJ0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1VOTE9BRF9FVkVOVF9FTkQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vp
bnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3VubG9hZF9ldmVu
dF9lbmQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVESVJFQ1RfU1RB
UlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV90aW1pbmdfZ2V0X3JlZGlyZWN0X3N0YXJ0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1JFRElSRUNUX0VORDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZh
bHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVkaXJlY3RfZW5kKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZFVENIX1NUQVJUOgorICAgICAgICBn
X3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dl
dF9mZXRjaF9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ET01B
SU5fTE9PS1VQX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21haW5fbG9va3VwX3N0YXJ0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RPTUFJTl9MT09LVVBfRU5EOgorICAgICAg
ICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5n
X2dldF9kb21haW5fbG9va3VwX2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DT05ORUNUX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdl
YmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9jb25uZWN0X3N0YXJ0KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTk5FQ1RfRU5EOgorICAgICAgICBnX3ZhbHVl
X3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9jb25u
ZWN0X2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUNVUkVfQ09O
TkVDVElPTl9TVEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfc2VjdXJlX2Nvbm5lY3Rpb25fc3RhcnQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVRVUVTVF9TVEFSVDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19n
ZXRfcmVxdWVzdF9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9S
RVNQT05TRV9TVEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVzcG9uc2Vfc3RhcnQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVTUE9OU0VfRU5EOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXNwb25z
ZV9lbmQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9NX0xPQURJTkc6
CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV90aW1pbmdfZ2V0X2RvbV9sb2FkaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0RPTV9JTlRFUkFDVElWRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVl
LCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2ludGVyYWN0aXZlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RPTV9DT05URU5UX0xPQURFRF9FVkVO
VF9TVEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbnRlbnRfbG9hZGVkX2V2ZW50X3N0YXJ0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RPTV9DT05URU5UX0xPQURFRF9FVkVO
VF9FTkQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb250ZW50X2xvYWRlZF9ldmVudF9lbmQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9NX0NPTVBMRVRFOgorICAgICAgICBnX3Zh
bHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9k
b21fY29tcGxldGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9BRF9F
VkVOVF9TVEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfbG9hZF9ldmVudF9zdGFydChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9MT0FEX0VWRU5UX0VORDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfbG9hZF9l
dmVudF9lbmQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxF
KFdFQl9USU1JTkcpCisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9USU1JTkdfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1p
bmcqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19jbGFzc19pbml0KFdlYktpdERP
TVBlcmZvcm1hbmNlVGltaW5nQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVBlcmZv
cm1hbmNlVGltaW5nUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZmluYWxpemU7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3Rp
bWluZ19nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFWSUdBVElPTl9TVEFSVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJuYXZpZ2F0aW9uLXN0
YXJ0IiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpuYXZpZ2F0aW9uLXN0YXJ0IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpuYXZpZ2F0
aW9uLXN0YXJ0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVU5MT0FEX0VWRU5U
X1NUQVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgInVubG9h
ZC1ldmVudC1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6dW5sb2FkLWV2
ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRp
bWluZzp1bmxvYWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9VTkxPQURfRVZFTlRfRU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAg
ICAgICAgInVubG9hZC1ldmVudC1lbmQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5n
OnVubG9hZC1ldmVudC1lbmQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZv
cm1hbmNlVGltaW5nOnVubG9hZC1ldmVudC1lbmQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5U
NjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9SRURJUkVDVF9TVEFSVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAg
ICAgICAgICAgICJyZWRpcmVjdC1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1p
bmc6cmVkaXJlY3Qtc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZv
cm1hbmNlVGltaW5nOnJlZGlyZWN0LXN0YXJ0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUkVESVJFQ1RfRU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAg
ICAgICAgInJlZGlyZWN0LWVuZCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6cmVk
aXJlY3QtZW5kIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRp
bWluZzpyZWRpcmVjdC1lbmQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GRVRD
SF9TVEFSVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJmZXRj
aC1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6ZmV0Y2gtc3RhcnQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOmZldGNoLXN0
YXJ0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRE9NQUlOX0xPT0tVUF9TVEFS
VCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJkb21haW4tbG9v
a3VwLXN0YXJ0IiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpkb21haW4tbG9va3Vw
LXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWlu
Zzpkb21haW4tbG9va3VwLXN0YXJ0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
RE9NQUlOX0xPT0tVUF9FTkQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAg
ICAgICAiZG9tYWluLWxvb2t1cC1lbmQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5n
OmRvbWFpbi1sb29rdXAtZW5kIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJm
b3JtYW5jZVRpbWluZzpkb21haW4tbG9va3VwLWVuZCIsCisgICAgICAgICAgICAwLCBHX01BWFVJ
TlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NPTk5FQ1RfU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisg
ICAgICAgICAgICAiY29ubmVjdC1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1p
bmc6Y29ubmVjdC1zdGFydCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9y
bWFuY2VUaW1pbmc6Y29ubmVjdC1zdGFydCIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0NPTk5FQ1RfRU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAg
ICAgImNvbm5lY3QtZW5kIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpjb25uZWN0
LWVuZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6
Y29ubmVjdC1lbmQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUNVUkVfQ09O
TkVDVElPTl9TVEFSVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAg
ICJzZWN1cmUtY29ubmVjdGlvbi1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1p
bmc6c2VjdXJlLWNvbm5lY3Rpb24tc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWlu
dDY0IFBlcmZvcm1hbmNlVGltaW5nOnNlY3VyZS1jb25uZWN0aW9uLXN0YXJ0IiwKKyAgICAgICAg
ICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVRVUVTVF9TVEFSVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJyZXF1ZXN0LXN0YXJ0IiwKKyAgICAgICAgICAgICJQ
ZXJmb3JtYW5jZVRpbWluZzpyZXF1ZXN0LXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpyZXF1ZXN0LXN0YXJ0IiwKKyAgICAgICAgICAgIDAs
IEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfUkVTUE9OU0VfU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191
aW50NjQoCisgICAgICAgICAgICAicmVzcG9uc2Utc3RhcnQiLAorICAgICAgICAgICAgIlBlcmZv
cm1hbmNlVGltaW5nOnJlc3BvbnNlLXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vp
bnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpyZXNwb25zZS1zdGFydCIsCisgICAgICAgICAgICAwLCBH
X01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1JFU1BPTlNFX0VORCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2
NCgKKyAgICAgICAgICAgICJyZXNwb25zZS1lbmQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNl
VGltaW5nOnJlc3BvbnNlLWVuZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVy
Zm9ybWFuY2VUaW1pbmc6cmVzcG9uc2UtZW5kIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfRE9NX0xPQURJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAg
ICAgICAiZG9tLWxvYWRpbmciLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5nOmRvbS1s
b2FkaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWlu
Zzpkb20tbG9hZGluZyIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RPTV9JTlRF
UkFDVElWRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJkb20t
aW50ZXJhY3RpdmUiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5nOmRvbS1pbnRlcmFj
dGl2ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6
ZG9tLWludGVyYWN0aXZlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRE9NX0NP
TlRFTlRfTE9BREVEX0VWRU5UX1NUQVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAor
ICAgICAgICAgICAgImRvbS1jb250ZW50LWxvYWRlZC1ldmVudC1zdGFydCIsCisgICAgICAgICAg
ICAiUGVyZm9ybWFuY2VUaW1pbmc6ZG9tLWNvbnRlbnQtbG9hZGVkLWV2ZW50LXN0YXJ0IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpkb20tY29udGVu
dC1sb2FkZWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9E
T01fQ09OVEVOVF9MT0FERURfRVZFTlRfRU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0
KAorICAgICAgICAgICAgImRvbS1jb250ZW50LWxvYWRlZC1ldmVudC1lbmQiLAorICAgICAgICAg
ICAgIlBlcmZvcm1hbmNlVGltaW5nOmRvbS1jb250ZW50LWxvYWRlZC1ldmVudC1lbmQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOmRvbS1jb250ZW50
LWxvYWRlZC1ldmVudC1lbmQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ET01f
Q09NUExFVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAiZG9t
LWNvbXBsZXRlIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpkb20tY29tcGxldGUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOmRvbS1j
b21wbGV0ZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPQURfRVZFTlRfU1RB
UlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAibG9hZC1ldmVu
dC1zdGFydCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6bG9hZC1ldmVudC1zdGFy
dCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6bG9h
ZC1ldmVudC1zdGFydCIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPQURfRVZF
TlRfRU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgImxvYWQt
ZXZlbnQtZW5kIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpsb2FkLWV2ZW50LWVu
ZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6bG9h
ZC1ldmVudC1lbmQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX3RpbWluZ19pbml0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiByZXF1
ZXN0KQoreworICAgIFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlKCk7Cit9CisKK2d1aW50
NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X25hdmlnYXRpb25fc3RhcnQoV2Vi
S2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcp
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPm5hdmlnYXRpb25TdGFydCgpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisK
K2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3VubG9hZF9ldmVudF9z
dGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+dW5sb2FkRXZlbnRTdGFydCgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcp
ICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3VubG9h
ZF9ldmVudF9lbmQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5B
QkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElN
SU5HKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnVubG9hZEV2ZW50
RW5kKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJ
TUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRf
cmVkaXJlY3Rfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0Vf
VElNSU5HKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnJlZGlyZWN0
U3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJf
VElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dl
dF9yZWRpcmVjdF9lbmQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0Vf
VElNSU5HKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnJlZGlyZWN0
RW5kKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJ
TUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRf
ZmV0Y2hfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5B
QkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElN
SU5HKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmZldGNoU3RhcnQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5H
KSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21h
aW5fbG9va3VwX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lm
IEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNF
X1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5kb21haW5M
b29rdXBTdGFydCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5n
IikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxF
KFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1p
bmdfZ2V0X2RvbWFpbl9sb29rdXBfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxm
KQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BF
UkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1p
bmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVt
LT5kb21haW5Mb29rdXBFbmQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2Vi
IFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8q
IEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2VfdGltaW5nX2dldF9jb25uZWN0X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBz
ZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VU
aW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBp
dGVtLT5jb25uZWN0U3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2Vi
IFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8q
IEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2VfdGltaW5nX2dldF9jb25uZWN0X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19Q
RVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGlt
aW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRl
bS0+Y29ubmVjdEVuZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGlt
aW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5B
QkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90
aW1pbmdfZ2V0X3NlY3VyZV9jb25uZWN0aW9uX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGlt
aW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9y
bWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1
bHQgPSBpdGVtLT5zZWN1cmVDb25uZWN0aW9uU3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+
KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXF1ZXN0X3N0YXJ0KFdlYktpdERPTVBlcmZv
cm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vp
bnQ2NCByZXN1bHQgPSBpdGVtLT5yZXF1ZXN0U3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+
KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXNwb25zZV9zdGFydChXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
aW50NjQgcmVzdWx0ID0gaXRlbS0+cmVzcG9uc2VTdGFydCgpOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2
ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Vi
a2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Jlc3BvbnNlX2VuZChXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
aW50NjQgcmVzdWx0ID0gaXRlbS0+cmVzcG9uc2VFbmQoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+
KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fbG9hZGluZyhXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50
NjQgcmVzdWx0ID0gaXRlbS0+ZG9tTG9hZGluZygpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9pbnRlcmFjdGl2ZShXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50
NjQgcmVzdWx0ID0gaXRlbS0+ZG9tSW50ZXJhY3RpdmUoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+
KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29udGVudF9sb2FkZWRfZXZlbnRfc3Rh
cnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmRvbUNvbnRlbnRMb2FkZWRFdmVu
dFN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VC
X1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19n
ZXRfZG9tX2NvbnRlbnRfbG9hZGVkX2V2ZW50X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
Zyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1h
bmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0
ID0gaXRlbS0+ZG9tQ29udGVudExvYWRlZEV2ZW50RW5kKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbXBsZXRlKFdlYktpdERPTVBlcmZv
cm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vp
bnQ2NCByZXN1bHQgPSBpdGVtLT5kb21Db21wbGV0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0
X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2xvYWRfZXZlbnRfc3RhcnQoV2ViS2l0RE9NUGVy
Zm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
dWludDY0IHJlc3VsdCA9IGl0ZW0tPmxvYWRFdmVudFN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWlu
dDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfbG9hZF9ldmVudF9lbmQoV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmxvYWRFdmVudEVuZCgpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vp
bnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGM1ZTBiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZy5oCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVBlcmZvcm1hbmNlVGlt
aW5nX2gKKyNkZWZpbmUgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdfaAorCisjaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJTUlORyAgICAgICAgICAgICh3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZP
Uk1BTkNFX1RJTUlORyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5HLCBXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZykpCisjZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9QRVJGT1JNQU5DRV9USU1JTkcsIFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nQ2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QRVJG
T1JNQU5DRV9USU1JTkcpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlO
R19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5HKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JN
QU5DRV9USU1JTkdfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJTUlORywgV2ViS2l0RE9NUGVyZm9y
bWFuY2VUaW1pbmdDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcg
eworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTVBlcmZvcm1hbmNlVGltaW5nQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fcGVyZm9y
bWFuY2VfdGltaW5nX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfdGltaW5nX2dldF9uYXZpZ2F0aW9uX3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3RpbWluZ19nZXRfbmF2aWdhdGlvbl9zdGFydChXZWJLaXRET01QZXJmb3JtYW5j
ZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdf
Z2V0X3VubG9hZF9ldmVudF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5j
ZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90
aW1pbmdfZ2V0X3VubG9hZF9ldmVudF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3VubG9h
ZF9ldmVudF9lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAq
CisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF91
bmxvYWRfZXZlbnRfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVkaXJlY3Rfc3RhcnQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBB
ICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1
aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZWRpcmVjdF9zdGFydChX
ZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3JlZGlyZWN0X2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3JlZGlyZWN0X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRp
bWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0
X2ZldGNoX3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisg
KgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRf
ZmV0Y2hfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21haW5fbG9va3VwX3N0YXJ0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczog
QSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
dWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tYWluX2xvb2t1cF9z
dGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbWFpbl9sb29rdXBfZW5kOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2
NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tYWluX2xvb2t1cF9lbmQoV2ViS2l0
RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfdGltaW5nX2dldF9jb25uZWN0X3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVBl
cmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX3RpbWluZ19nZXRfY29ubmVjdF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
Zyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2Nv
bm5lY3RfZW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgor
ICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfY29u
bmVjdF9lbmQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9zZWN1cmVfY29ubmVjdGlvbl9zdGFydDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6
IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3NlY3VyZV9jb25uZWN0
aW9uX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVxdWVzdF9zdGFydDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50
NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAor
d2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3JlcXVlc3Rfc3RhcnQoV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFu
Y2VfdGltaW5nX2dldF9yZXNwb25zZV9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV90aW1pbmdfZ2V0X3Jlc3BvbnNlX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5n
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVz
cG9uc2VfZW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgor
ICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVz
cG9uc2VfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2xvYWRpbmc6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dl
YmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fbG9hZGluZyhXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90
aW1pbmdfZ2V0X2RvbV9pbnRlcmFjdGl2ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV90aW1pbmdfZ2V0X2RvbV9pbnRlcmFjdGl2ZShXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9j
b250ZW50X2xvYWRlZF9ldmVudF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV90aW1pbmdfZ2V0X2RvbV9jb250ZW50X2xvYWRlZF9ldmVudF9zdGFydChXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90
aW1pbmdfZ2V0X2RvbV9jb250ZW50X2xvYWRlZF9ldmVudF9lbmQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29udGVudF9sb2FkZWRfZXZlbnRfZW5kKFdl
YktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbXBsZXRlKFdlYktpdERPTVBlcmZvcm1hbmNlVGlt
aW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRf
bG9hZF9ldmVudF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
ZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdf
Z2V0X2xvYWRfZXZlbnRfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9sb2FkX2V2ZW50X2Vu
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVy
bnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2xvYWRfZXZlbnRf
ZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktp
dERPTVBlcmZvcm1hbmNlVGltaW5nX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VU
aW1pbmdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWE4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1p
bmdQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvUGVyZm9ybWFuY2VUaW1pbmcuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuaD4KKyNpZiBFTkFCTEUoV0VCX1RJTUlO
RykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogd3Jh
cFBlcmZvcm1hbmNlVGltaW5nKFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKik7CitXZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZyoga2l0KFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKik7CitX
ZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogY29yZShXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
ZyopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlO
RykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nUHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVBy
aXZhdGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Qcml2YXRlLmNwcApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3Bw
CnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVByaXZhdGUuY3BwCmluZGV4IDIxZGZiMzYuLjMyNjZjMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Qcml2YXRlLmNwcApAQCAtMjQsMTggKzI0LDE4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgogCi0jaW5jbHVkZSAiQmxv
Yi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQmxvYi5oPgogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJGaWxlLmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0j
aW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKLSNpbmNsdWRl
ICJVSUV2ZW50LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnRUYXJnZXQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZl
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01vdXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1N0eWxlU2hlZXQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VJRXZlbnQuaD4KICNpbmNsdWRlICJX
ZWJLaXRET01BdHRyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTUJsb2JQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0RE9NQ0RBVEFTZWN0aW9uUHJpdmF0ZS5oIgpAQCAtNjMsOCArNjMs
OCBAQAogI2luY2x1ZGUgIldlYktpdERPTVdoZWVsRXZlbnRQcml2YXRlLmgiCiAKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCi0jaW5jbHVkZSAiRGF0YUN1ZS5oIgotI2luY2x1ZGUgIlZUVEN1ZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRGF0YUN1ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVlRUQ3Vl
Lmg+CiAjaW5jbHVkZSAiV2ViS2l0RE9NRGF0YUN1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJL
aXRET01UZXh0VHJhY2tDdWVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NVlRUQ3VlUHJp
dmF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVu
YW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Qcml2YXRl
LmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NUHJpdmF0ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjMzBjOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJ
bXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2Jq
ZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3R5bGVTaGVldFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbioga2l0KFdlYkNvcmU6OlByb2Nlc3Np
bmdJbnN0cnVjdGlvbiogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX1BST0NFU1NJTkdf
SU5TVFJVQ1RJT04oa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisK
K1dlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiogY29yZShXZWJLaXRET01Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24qIHdyYXBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0
aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9N
X1RZUEVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9kaXNwYXRjaF9ldmVudChXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZl
bnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2Vi
Q29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNv
cmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2FkZF9l
dmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBl
dmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAg
IFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRE
T01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQg
PSB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZGlzcGF0Y2hfZXZlbnQ7CisgICAg
aWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVj
dGlvbl9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5l
ciA9IHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbiwgd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uLCBXRUJLSVRfRE9NX1RZ
UEVfQ0hBUkFDVEVSX0RBVEEsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVf
RVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorICAgIFBST1BfVEFSR0VULAorICAgIFBST1BfU0hFRVQsCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBzZWxmID0g
V0VCS0lUX0RPTV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3Rh
cmdldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSEVFVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1
Y3Rpb25fZ2V0X3NoZWV0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9jbGFzc19pbml0KFdlYktpdERPTVByb2Nlc3Np
bmdJbnN0cnVjdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGFyZ2V0IiwKKyAgICAgICAgICAgICJQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb246dGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjp0YXJnZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSEVFVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzaGVldCIsCisgICAgICAg
ICAgICAiUHJvY2Vzc2luZ0luc3RydWN0aW9uOnNoZWV0IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NU3R5bGVTaGVldCogUHJvY2Vzc2luZ0luc3RydWN0aW9uOnNoZWV0IiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcHJvY2Vz
c2luZ19pbnN0cnVjdGlvbl9pbml0KFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcmVx
dWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3RhcmdldChXZWJLaXRET01Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUFJPQ0VTU0lO
R19JTlNUUlVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0
aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRhcmdldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXZWJLaXRET01TdHlsZVNoZWV0KiB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25f
Z2V0X3NoZWV0KFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0eWxlU2hlZXQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5zaGVldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjMzMGEzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVByb2Nl
c3NpbmdJbnN0cnVjdGlvbl9oCisjZGVmaW5lIFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
bl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01DaGFyYWN0ZXJEYXRhLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9QUk9DRVNT
SU5HX0lOU1RSVUNUSU9OICAgICAgICAgICAgKHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVj
dGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1BST0NFU1NJTkdfSU5TVFJVQ1RJ
T04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04sIFdlYktpdERPTVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbikpCisjZGVmaW5lIFdFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiwgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUFJPQ0VTU0lOR19JTlNUUlVDVElP
TihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTikpCisj
ZGVmaW5lIFdFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfUFJPQ0VT
U0lOR19JTlNUUlVDVElPTiwgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiB7CisgICAgV2ViS2l0RE9N
Q2hhcmFjdGVyRGF0YSBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVBy
b2Nlc3NpbmdJbnN0cnVjdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01DaGFyYWN0ZXJEYXRhQ2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9wcm9j
ZXNzaW5nX2luc3RydWN0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
cHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3Rh
cmdldChXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfc2hlZXQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01TdHlsZVNoZWV0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
U3R5bGVTaGVldCoKK3dlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfc2hlZXQo
V2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBzZWxmKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbl9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vzc2luZ0lu
c3RydWN0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIy
M2VkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZh
dGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogd3JhcFByb2Nlc3NpbmdJbnN0cnVjdGlvbihXZWJDb3Jl
OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qKTsKK1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
bioga2l0KFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiopOworV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uKiBjb3JlKFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiopOwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01S
YW5nZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwMzg5YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuY3BwCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUmFuZ2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVJhbmdlUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01SYW5nZVVuc3Rh
YmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2RlZmluZSBXRUJLSVRfRE9NX1JBTkdFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1JBTkdFLCBXZWJLaXRET01SYW5n
ZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01SYW5nZVByaXZhdGUgeworICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NUmFuZ2VQcml2
YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NUmFuZ2UqIGtpdChXZWJDb3Jl
OjpSYW5nZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX1JBTkdFKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFJhbmdlKG9iaik7
Cit9CisKK1dlYkNvcmU6OlJhbmdlKiBjb3JlKFdlYktpdERPTVJhbmdlKiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmFuZ2UqPihXRUJLSVRf
RE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01SYW5n
ZSogd3JhcFJhbmdlKFdlYkNvcmU6OlJhbmdlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9SQU5HRShnX29iamVjdF9uZXcoV0VC
S0lUX0RPTV9UWVBFX1JBTkdFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVJh
bmdlLCB3ZWJraXRfZG9tX3JhbmdlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9TVEFSVF9DT05UQUlORVIsCisgICAgUFJPUF9TVEFSVF9P
RkZTRVQsCisgICAgUFJPUF9FTkRfQ09OVEFJTkVSLAorICAgIFBST1BfRU5EX09GRlNFVCwKKyAg
ICBQUk9QX0NPTExBUFNFRCwKKyAgICBQUk9QX0NPTU1PTl9BTkNFU1RPUl9DT05UQUlORVIsCisg
ICAgUFJPUF9URVhULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9yYW5nZV9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NUmFuZ2VQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9SQU5HRV9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+
fldlYktpdERPTVJhbmdlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
cmFuZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9yYW5nZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01SYW5nZSogc2VsZiA9IFdFQktJVF9ET01fUkFOR0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9TVEFSVF9DT05UQUlORVI6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9yYW5nZV9nZXRfc3RhcnRfY29udGFp
bmVyKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NUQVJU
X09GRlNFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9yYW5n
ZV9nZXRfc3RhcnRfb2Zmc2V0KHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0VORF9DT05UQUlORVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9yYW5nZV9nZXRfZW5kX2NvbnRhaW5lcihzZWxmLCBudWxscHRyKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkRfT0ZGU0VUOgorICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfb2Zmc2V0KHNlbGYsIG51
bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTExBUFNFRDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9yYW5nZV9nZXRfY29sbGFw
c2VkKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTU1P
Tl9BTkNFU1RPUl9DT05UQUlORVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV9yYW5nZV9nZXRfY29tbW9uX2FuY2VzdG9yX2NvbnRhaW5lcihzZWxmLCBudWxs
cHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3JhbmdlX2NvbnN0cnVj
dG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENv
bnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVj
dCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fcmFuZ2VfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KTsKKworICAgIFdlYktpdERPTVJhbmdlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkFOR0Vf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6UmFuZ2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsK
KyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwg
b2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fcmFuZ2VfY2xhc3NfaW5pdChXZWJLaXRET01SYW5nZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVv
ZihXZWJLaXRET01SYW5nZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9y
ID0gd2Via2l0X2RvbV9yYW5nZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV9yYW5nZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1NUQVJUX0NPTlRBSU5FUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJzdGFydC1jb250YWluZXIiLAorICAgICAgICAgICAgIlJhbmdlOnN0YXJ0LWNvbnRh
aW5lciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIFJhbmdlOnN0YXJ0
LWNvbnRhaW5lciIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NUQVJUX09G
RlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic3RhcnQtb2Zm
c2V0IiwKKyAgICAgICAgICAgICJSYW5nZTpzdGFydC1vZmZzZXQiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnbG9uZyBSYW5nZTpzdGFydC1vZmZzZXQiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9FTkRfQ09OVEFJTkVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgImVuZC1jb250YWluZXIiLAorICAgICAgICAgICAgIlJhbmdlOmVu
ZC1jb250YWluZXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBSYW5n
ZTplbmQtY29udGFpbmVyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRU5E
X09GRlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiZW5kLW9m
ZnNldCIsCisgICAgICAgICAgICAiUmFuZ2U6ZW5kLW9mZnNldCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdsb25nIFJhbmdlOmVuZC1vZmZzZXQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DT0xMQVBTRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgImNvbGxhcHNlZCIsCisgICAgICAgICAgICAiUmFuZ2U6Y29sbGFwc2VkIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gUmFuZ2U6Y29sbGFwc2VkIiwKKyAgICAg
ICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQ09NTU9OX0FOQ0VTVE9SX0NPTlRBSU5FUiwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjb21tb24tYW5jZXN0b3ItY29udGFpbmVyIiwK
KyAgICAgICAgICAgICJSYW5nZTpjb21tb24tYW5jZXN0b3ItY29udGFpbmVyIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogUmFuZ2U6Y29tbW9uLWFuY2VzdG9yLWNvbnRh
aW5lciIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RFWFQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGV4dCIsCisgICAgICAgICAgICAi
UmFuZ2U6dGV4dCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBSYW5nZTp0ZXh0IiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9yYW5nZV9pbml0KFdlYktpdERPTVJhbmdlKiBy
ZXF1ZXN0KQoreworICAgIFdlYktpdERPTVJhbmdlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
UkFOR0VfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01SYW5n
ZVByaXZhdGUoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydChXZWJLaXRE
T01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgZ2xvbmcgb2Zmc2V0LCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9k
ZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5zZXRTdGFydCgqY29udmVydGVkUmVmTm9kZSwgb2Zmc2V0LCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZChXZWJLaXRET01SYW5nZSog
c2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgZ2xvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktp
dDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBpdGVtLT5zZXRFbmQoKmNvbnZlcnRlZFJlZk5vZGUsIG9mZnNldCwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwor
dm9pZCB3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydF9iZWZvcmUoV2ViS2l0RE9NUmFuZ2UqIHNl
bGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OT0RFKHJlZk5vZGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFN0YXJ0
QmVmb3JlKCpjb252ZXJ0ZWRSZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21f
cmFuZ2Vfc2V0X3N0YXJ0X2FmdGVyKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiByZWZOb2RlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdF
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2Rl
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29y
ZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSog
Y29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRTdGFydEFmdGVyKCpjb252ZXJ0ZWRS
ZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZF9iZWZv
cmUoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHJlZk5vZGUpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0g
V2ViS2l0Ojpjb3JlKHJlZk5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGl0ZW0tPnNldEVuZEJlZm9yZSgqY29udmVydGVkUmVmTm9kZSwgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30K
Kwordm9pZCB3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmRfYWZ0ZXIoV2ViS2l0RE9NUmFuZ2UqIHNl
bGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OT0RFKHJlZk5vZGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVy
cm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldEVuZEFm
dGVyKCpjb252ZXJ0ZWRSZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fcmFu
Z2VfY29sbGFwc2UoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIGdib29sZWFuIHRvU3RhcnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIFVO
VVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+Y29sbGFwc2UodG9TdGFydCk7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9yYW5nZV9zZWxlY3Rfbm9kZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9k
ZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5H
RShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9k
ZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2VsZWN0Tm9kZSgqY29udmVydGVkUmVm
Tm9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX3JhbmdlX3NlbGVjdF9ub2RlX2Nv
bnRlbnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9k
ZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5zZWxlY3ROb2RlQ29udGVudHMoKmNvbnZlcnRlZFJlZk5vZGUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9Cit9CisKK2dzaG9ydCB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9p
bnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBndXNob3J0IGhvdywgV2ViS2l0RE9NUmFuZ2UqIHNv
dXJjZVJhbmdlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19S
QU5HRShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19S
QU5HRShzb3VyY2VSYW5nZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogY29udmVydGVkU291cmNlUmFuZ2UgPSBXZWJLaXQ6
OmNvcmUoc291cmNlUmFuZ2UpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGdzaG9ydCByZXN1bHQgPSBpdGVtLT5jb21wYXJlQm91bmRhcnlQb2ludHNGb3JCaW5kaW5n
cyhob3csICpjb252ZXJ0ZWRTb3VyY2VSYW5nZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2VfZGVsZXRlX2NvbnRlbnRzKFdlYktpdERPTVJh
bmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdF
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5kZWxldGVDb250ZW50cyhlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
fQorCitXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiB3ZWJraXRfZG9tX3JhbmdlX2V4dHJhY3Rf
Y29udGVudHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5leHRyYWN0Q29udGVudHMoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Eb2N1bWVudEZyYWdt
ZW50KiB3ZWJraXRfZG9tX3JhbmdlX2Nsb25lX2NvbnRlbnRzKFdlYktpdERPTVJhbmdlKiBzZWxm
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwor
ICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudEZy
YWdtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xvbmVDb250ZW50cyhl
YykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9pbnNlcnRfbm9kZShXZWJLaXRET01SYW5nZSogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogbmV3Tm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUobmV3Tm9kZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5ld05vZGUgPSBXZWJLaXQ6OmNvcmUobmV3Tm9kZSk7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+aW5zZXJ0Tm9k
ZSgqY29udmVydGVkTmV3Tm9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX3Jhbmdl
X3N1cnJvdW5kX2NvbnRlbnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBu
ZXdQYXJlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5ld1BhcmVu
dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZE5ld1BhcmVudCA9IFdlYktpdDo6Y29yZShuZXdQYXJlbnQpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnN1cnJvdW5kQ29udGVudHMoKmNv
bnZlcnRlZE5ld1BhcmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NUmFuZ2UqIHdlYmtpdF9k
b21fcmFuZ2VfY2xvbmVfcmFuZ2UoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBVTlVT
RURfUEFSQU0oZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmNsb25lUmFuZ2UoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9yYW5nZV90b19zdHJpbmco
V2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRvU3RyaW5nKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9kZXRhY2goV2ViS2l0RE9NUmFu
Z2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uo
c2VsZikpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+ZGV0YWNoKCk7Cit9CisKK1dlYktp
dERPTURvY3VtZW50RnJhZ21lbnQqIHdlYmtpdF9kb21fcmFuZ2VfY3JlYXRlX2NvbnRleHR1YWxf
ZnJhZ21lbnQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBodG1sLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaHRtbCwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEh0bWwgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgoaHRtbCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29udmVydGVkSHRtbCwg
ZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitnc2hvcnQgd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX25vZGUoV2ViS2l0RE9NUmFuZ2Uq
IHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9kZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2Rl
ID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdzaG9ydCByZXN1bHQgPSBpdGVtLT5jb21wYXJlTm9kZSgqY29udmVydGVkUmVm
Tm9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX3JhbmdlX2ludGVyc2VjdHNfbm9kZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9N
Tm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUkFOR0Uoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX05PREUocmVmTm9kZSksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFJlZk5vZGUgPSBX
ZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aW50ZXJzZWN0c05vZGUoKmNvbnZlcnRlZFJl
Zk5vZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ3Nob3J0IHdlYmtpdF9k
b21fcmFuZ2VfY29tcGFyZV9wb2ludChXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9k
ZSogcmVmTm9kZSwgZ2xvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19OT0RFKHJlZk5vZGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdl
YktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnc2hvcnQgcmVzdWx0ID0gaXRlbS0+Y29tcGFyZVBvaW50KCpjb252ZXJ0ZWRSZWZOb2Rl
LCBvZmZzZXQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9yYW5nZV9pc19wb2ludF9pbl9yYW5nZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2Vi
S2l0RE9NTm9kZSogcmVmTm9kZSwgZ2xvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSwgRkFMU0UpOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSog
Y29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc1BvaW50
SW5SYW5nZSgqY29udmVydGVkUmVmTm9kZSwgb2Zmc2V0LCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9leHBhbmQoV2ViS2l0RE9NUmFuZ2Uq
IHNlbGYsIGNvbnN0IGdjaGFyKiB1bml0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHVuaXQpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFVu
aXQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodW5pdCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+ZXhwYW5kKGNvbnZlcnRlZFVuaXQsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9
CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0YXJ0X2NvbnRhaW5lcihX
ZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfUkFOR0Uoc2VsZiksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAg
V2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zdGFydENvbnRh
aW5lcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK2dsb25nIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0YXJ0X29mZnNldChXZWJLaXRET01SYW5n
ZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFO
R0Uoc2VsZiksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFu
Z2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+
c3RhcnRPZmZzZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlKiB3
ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfY29udGFpbmVyKFdlYktpdERPTVJhbmdlKiBzZWxmLCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwg
MCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmVuZENvbnRhaW5lcigpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fcmFu
Z2VfZ2V0X2VuZF9vZmZzZXQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBVTlVTRURf
UEFSQU0oZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmVuZE9mZnNldCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbGxhcHNlZChXZWJL
aXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfUkFOR0Uoc2VsZiksIEZBTFNFKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmNvbGxhcHNlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dl
YktpdERPTU5vZGUqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbW1vbl9hbmNlc3Rvcl9jb250YWlu
ZXIoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOwor
ICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29tbW9u
QW5jZXN0b3JDb250YWluZXIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9yYW5nZV9nZXRfdGV4dChXZWJLaXRE
T01SYW5nZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGV4dCgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2MmJjNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NUmFuZ2UuaApAQCAtMCwwICsxLDQwMiBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYm
ICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtp
dGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2Vi
S2l0RE9NUmFuZ2VfaAorI2RlZmluZSBXZWJLaXRET01SYW5nZV9oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1JBTkdFICAgICAgICAgICAgKHdlYmtpdF9kb21fcmFuZ2Vf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRShvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUkFOR0UsIFdl
YktpdERPTVJhbmdlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUkFOR0Us
IFdlYktpdERPTVJhbmdlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUkFOR0Uob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1JBTkdFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19SQU5HRV9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUkFOR0UpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX1JBTkdFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9SQU5HRSwgV2ViS2l0RE9NUmFuZ2VDbGFz
cykpCisKKy8qKgorICogV0VCS0lUX0RPTV9SQU5HRV9TVEFSVF9UT19TVEFSVDoKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX1JBTkdFX1NUQVJUX1RPX1NUQVJUIDAKKworLyoqCisgKiBXRUJLSVRf
RE9NX1JBTkdFX1NUQVJUX1RPX0VORDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1JBTkdFX1NU
QVJUX1RPX0VORCAxCisKKy8qKgorICogV0VCS0lUX0RPTV9SQU5HRV9FTkRfVE9fRU5EOgorICov
CisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0VfRU5EX1RPX0VORCAyCisKKy8qKgorICogV0VCS0lU
X0RPTV9SQU5HRV9FTkRfVE9fU1RBUlQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9F
TkRfVE9fU1RBUlQgMworCisvKioKKyAqIFdFQktJVF9ET01fUkFOR0VfTk9ERV9CRUZPUkU6Cisg
Ki8KKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0JFRk9SRSAwCisKKy8qKgorICogV0VC
S0lUX0RPTV9SQU5HRV9OT0RFX0FGVEVSOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0Vf
Tk9ERV9BRlRFUiAxCisKKy8qKgorICogV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0JFRk9SRV9BTkRf
QUZURVI6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0JFRk9SRV9BTkRfQUZU
RVIgMgorCisvKioKKyAqIFdFQktJVF9ET01fUkFOR0VfTk9ERV9JTlNJREU6CisgKi8KKyNkZWZp
bmUgV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0lOU0lERSAzCisKK3N0cnVjdCBfV2ViS2l0RE9NUmFu
Z2UgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERPTVJhbmdlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fcmFuZ2VfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9zZXRfc3RhcnQ6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb2Zm
c2V0OiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0KFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJL
aXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFu
Z2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb2Zmc2V0OiBBICNnbG9uZwor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
cmFuZ2Vfc2V0X2VuZChXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9k
ZSwgZ2xvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9y
YW5nZV9zZXRfc3RhcnRfYmVmb3JlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBA
cmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0X2JlZm9yZShXZWJLaXRE
T01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0X2FmdGVyOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVJhbmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9y
OiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0
X3N0YXJ0X2FmdGVyKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2Rl
LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9zZXRfZW5kX2Jl
Zm9yZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktp
dERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX3JhbmdlX3NldF9lbmRfYmVmb3JlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJL
aXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9yYW5nZV9zZXRfZW5kX2FmdGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBA
cmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZF9hZnRlcihXZWJLaXRET01S
YW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfY29sbGFwc2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
UmFuZ2UKKyAqIEB0b1N0YXJ0OiBBICNnYm9vbGVhbgorICogQGVycm9yOiAjR0Vycm9yCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2VfY29sbGFwc2UoV2ViS2l0RE9N
UmFuZ2UqIHNlbGYsIGdib29sZWFuIHRvU3RhcnQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX3JhbmdlX3NlbGVjdF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJh
bmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2Vfc2VsZWN0X25vZGUoV2Vi
S2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX3NlbGVjdF9ub2RlX2NvbnRlbnRzOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
cmFuZ2Vfc2VsZWN0X25vZGVfY29udGVudHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERP
TU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Jh
bmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdl
CisgKiBAaG93OiBBICNndXNob3J0CisgKiBAc291cmNlUmFuZ2U6IEEgI1dlYktpdERPTVJhbmdl
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnc2hvcnQKKyoqLworV0VC
S0lUX0FQSSBnc2hvcnQKK3dlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9ib3VuZGFyeV9wb2ludHMo
V2ViS2l0RE9NUmFuZ2UqIHNlbGYsIGd1c2hvcnQgaG93LCBXZWJLaXRET01SYW5nZSogc291cmNl
UmFuZ2UsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2RlbGV0
ZV9jb250ZW50czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAjR0Vy
cm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2VfZGVsZXRlX2Nv
bnRlbnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9yYW5nZV9leHRyYWN0X2NvbnRlbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Eb2N1bWVudEZyYWdtZW50Kgord2Via2l0X2RvbV9yYW5nZV9leHRyYWN0X2NvbnRlbnRzKFdl
YktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9yYW5nZV9jbG9uZV9jb250ZW50czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01Eb2N1bWVudEZyYWdtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnRG
cmFnbWVudCoKK3dlYmtpdF9kb21fcmFuZ2VfY2xvbmVfY29udGVudHMoV2ViS2l0RE9NUmFuZ2Uq
IHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2luc2Vy
dF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAbmV3Tm9kZTogQSAjV2Vi
S2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21fcmFuZ2VfaW5zZXJ0X25vZGUoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktp
dERPTU5vZGUqIG5ld05vZGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3JhbmdlX3N1cnJvdW5kX2NvbnRlbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisg
KiBAbmV3UGFyZW50OiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9zdXJyb3VuZF9jb250ZW50cyhX
ZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV3UGFyZW50LCBHRXJyb3IqKiBl
cnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9jbG9uZV9yYW5nZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01SYW5nZQorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTVJhbmdlKgord2Via2l0X2RvbV9yYW5nZV9jbG9uZV9yYW5nZShXZWJLaXRET01SYW5nZSog
c2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfdG9fc3Ry
aW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9yYW5nZV90b19zdHJpbmcoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2RldGFjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01SYW5nZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fcmFuZ2VfZGV0YWNoKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9jcmVhdGVfY29udGV4dHVhbF9mcmFnbWVu
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGh0bWw6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTURvY3VtZW50RnJhZ21lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50Kgord2Via2l0X2RvbV9yYW5nZV9jcmVhdGVfY29udGV4dHVhbF9mcmFnbWVudChXZWJL
aXRET01SYW5nZSogc2VsZiwgY29uc3QgZ2NoYXIqIGh0bWwsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dzaG9ydAorKiovCitXRUJLSVRfQVBJIGdzaG9ydAor
d2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX25vZGUoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktp
dERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3JhbmdlX2ludGVyc2VjdHNfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICog
QHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21f
cmFuZ2VfaW50ZXJzZWN0c19ub2RlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiByZWZOb2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9j
b21wYXJlX3BvaW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAcmVmTm9kZTog
QSAjV2ViS2l0RE9NTm9kZQorICogQG9mZnNldDogQSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFJldHVybnM6IEEgI2dzaG9ydAorKiovCitXRUJLSVRfQVBJIGdzaG9ydAord2Vi
a2l0X2RvbV9yYW5nZV9jb21wYXJlX3BvaW50KFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRE
T01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX3JhbmdlX2lzX3BvaW50X2luX3JhbmdlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVJhbmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQG9mZnNldDogQSAj
Z2xvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fcmFuZ2VfaXNfcG9pbnRfaW5fcmFu
Z2UoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIGdsb25nIG9m
ZnNldCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0
YXJ0X2NvbnRhaW5lcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2Rl
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0
YXJ0X2NvbnRhaW5lcihXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0YXJ0X29mZnNldDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01SYW5nZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2xv
bmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9yYW5nZV9nZXRfc3RhcnRfb2Zm
c2V0KFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9yYW5nZV9nZXRfZW5kX2NvbnRhaW5lcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01S
YW5nZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtp
dF9kb21fcmFuZ2VfZ2V0X2VuZF9jb250YWluZXIoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfb2Zmc2V0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBS
ZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3Jhbmdl
X2dldF9lbmRfb2Zmc2V0KFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9yYW5nZV9nZXRfY29sbGFwc2VkOgorICogQHNlbGY6IEEgI1dl
YktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3JhbmdlX2dldF9jb2xs
YXBzZWQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3JhbmdlX2dldF9jb21tb25fYW5jZXN0b3JfY29udGFpbmVyOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Ob2RlKgord2Via2l0X2RvbV9yYW5nZV9nZXRfY29tbW9uX2FuY2VzdG9yX2NvbnRhaW5lcihX
ZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9k
b21fcmFuZ2VfZ2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9yYW5n
ZV9nZXRfdGV4dChXZWJLaXRET01SYW5nZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXZWJLaXRET01SYW5nZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01SYW5nZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iNjg5ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZVByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTVJhbmdlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVJhbmdlUHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVJh
bmdlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NUmFuZ2UqIHdyYXBSYW5nZShX
ZWJDb3JlOjpSYW5nZSopOworV2ViS2l0RE9NUmFuZ2UqIGtpdChXZWJDb3JlOjpSYW5nZSopOwor
V2ViQ29yZTo6UmFuZ2UqIGNvcmUoV2ViS2l0RE9NUmFuZ2UqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NUmFuZ2VQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NUmFuZ2VVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZVVuc3RhYmxlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxMDllYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
UmFuZ2VVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUmFuZ2VVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktp
dERPTVJhbmdlVW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
CisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9leHBhbmQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEB1bml0OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vy
cm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fcmFuZ2VfZXhwYW5kKFdlYktpdERPTVJhbmdlKiBzZWxmLCBjb25zdCBnY2hhciog
dW5pdCwgR0Vycm9yKiogZXJyb3IpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01SYW5nZVVuc3Rh
YmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2NyZWVuLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2NyZWVuLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzczYzNiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TY3JlZW4uY3BwCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
U2NyZWVuLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVNjcmVlblByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBX
RUJLSVRfRE9NX1NDUkVFTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURShvYmosIFdFQktJVF9ET01fVFlQRV9TQ1JFRU4sIFdlYktpdERPTVNjcmVlblByaXZhdGUp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TY3JlZW5Qcml2YXRlIHsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6U2NyZWVuPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01TY3JlZW5Qcml2YXRlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NU2NyZWVuKiBraXQoV2ViQ29yZTo6U2Ny
ZWVuKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fU0NSRUVOKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFNjcmVlbihvYmopOwor
fQorCitXZWJDb3JlOjpTY3JlZW4qIGNvcmUoV2ViS2l0RE9NU2NyZWVuKiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2NyZWVuKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NU2Ny
ZWVuKiB3cmFwU2NyZWVuKFdlYkNvcmU6OlNjcmVlbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fU0NSRUVOKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfU0NSRUVOLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktp
dERPTVNjcmVlbiwgd2Via2l0X2RvbV9zY3JlZW4sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX1dJRFRILAor
ICAgIFBST1BfQ09MT1JfREVQVEgsCisgICAgUFJPUF9QSVhFTF9ERVBUSCwKKyAgICBQUk9QX0FW
QUlMX0xFRlQsCisgICAgUFJPUF9BVkFJTF9UT1AsCisgICAgUFJPUF9BVkFJTF9IRUlHSFQsCisg
ICAgUFJPUF9BVkFJTF9XSURUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc2NyZWVu
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01TY3JlZW5Qcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9TQ1JFRU5fR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdl
YktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKwor
ICAgIHByaXYtPn5XZWJLaXRET01TY3JlZW5Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV9zY3JlZW5fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9zY3JlZW5fZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NU2NyZWVuKiBzZWxmID0gV0VCS0lUX0RPTV9TQ1JFRU4ob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfaGVpZ2h0
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBn
X3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9zY3JlZW5fZ2V0X3dpZHRoKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTE9SX0RFUFRIOgorICAgICAgICBn
X3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9zY3JlZW5fZ2V0X2NvbG9yX2RlcHRo
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BJWEVMX0RFUFRIOgorICAg
ICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9zY3JlZW5fZ2V0X3BpeGVs
X2RlcHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FWQUlMX0xFRlQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fc2NyZWVuX2dldF9h
dmFpbF9sZWZ0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FWQUlMX1RP
UDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9zY3JlZW5fZ2V0
X2F2YWlsX3RvcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJTF9I
RUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3NjcmVl
bl9nZXRfYXZhaWxfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0FWQUlMX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV9zY3JlZW5fZ2V0X2F2YWlsX3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBH
T2JqZWN0KiB3ZWJraXRfZG9tX3NjcmVlbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0
UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX3NjcmVlbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NU2Ny
ZWVuUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU0NSRUVOX0dFVF9QUklWQVRFKG9iamVjdCk7
CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcmVlbio+KFdF
QktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0
dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zY3JlZW5fY2xhc3NfaW5p
dChXZWJLaXRET01TY3JlZW5DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NU2NyZWVu
UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Nj
cmVlbl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rv
bV9zY3JlZW5fZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX3NjcmVlbl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEVJR0hULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAg
ICAgICAgICJTY3JlZW46aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFNj
cmVlbjpoZWlnaHQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAg
ICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAg
ICAgIlNjcmVlbjp3aWR0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBTY3JlZW46
d2lkdGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTE9SX0RFUFRILAorICAg
ICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiY29sb3ItZGVwdGgiLAorICAg
ICAgICAgICAgIlNjcmVlbjpjb2xvci1kZXB0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1
bG9uZyBTY3JlZW46Y29sb3ItZGVwdGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1BJWEVMX0RFUFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAi
cGl4ZWwtZGVwdGgiLAorICAgICAgICAgICAgIlNjcmVlbjpwaXhlbC1kZXB0aCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1bG9uZyBTY3JlZW46cGl4ZWwtZGVwdGgiLAorICAgICAgICAgICAg
MCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0FWQUlMX0xFRlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25n
KAorICAgICAgICAgICAgImF2YWlsLWxlZnQiLAorICAgICAgICAgICAgIlNjcmVlbjphdmFpbC1s
ZWZ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgU2NyZWVuOmF2YWlsLWxlZnQiLAor
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVkFJTF9UT1AsCisgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImF2YWlsLXRvcCIsCisgICAgICAgICAg
ICAiU2NyZWVuOmF2YWlsLXRvcCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFNjcmVl
bjphdmFpbC10b3AiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVkFJ
TF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJhdmFp
bC1oZWlnaHQiLAorICAgICAgICAgICAgIlNjcmVlbjphdmFpbC1oZWlnaHQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBndWxvbmcgU2NyZWVuOmF2YWlsLWhlaWdodCIsCisgICAgICAgICAgICAw
LCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQVZBSUxfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9u
ZygKKyAgICAgICAgICAgICJhdmFpbC13aWR0aCIsCisgICAgICAgICAgICAiU2NyZWVuOmF2YWls
LXdpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFNjcmVlbjphdmFpbC13aWR0
aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zY3JlZW5faW5p
dChXZWJLaXRET01TY3JlZW4qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NU2NyZWVuUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fU0NSRUVOX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NU2NyZWVuUHJpdmF0ZSgpOworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9zY3JlZW5fZ2V0X2hlaWdodChXZWJLaXRET01TY3JlZW4qIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfU0NSRUVOKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTY3JlZW4qIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmhlaWdo
dCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3NjcmVlbl9n
ZXRfd2lkdGgoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1NDUkVFTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U2NyZWVuKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT53aWR0aCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfY29sb3JfZGVw
dGgoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ND
UkVFTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U2NyZWVuKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5jb2xvckRlcHRoKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fc2NyZWVuX2dldF9waXhlbF9kZXB0
aChXZWJLaXRET01TY3JlZW4qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU0NS
RUVOKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTY3JlZW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPnBpeGVsRGVwdGgoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfbGVmdChX
ZWJLaXRET01TY3JlZW4qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU0NSRUVO
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTY3JlZW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+YXZhaWxMZWZ0KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9zY3JlZW5fZ2V0X2F2YWlsX3RvcChXZWJLaXRE
T01TY3JlZW4qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU0NSRUVOKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpTY3JlZW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+YXZhaWxUb3AoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitndWxvbmcgd2Via2l0X2RvbV9zY3JlZW5fZ2V0X2F2YWlsX2hlaWdodChXZWJLaXRET01T
Y3JlZW4qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU0NSRUVOKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpTY3JlZW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmF2YWlsSGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ3Vsb25nIHdlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF93aWR0aChXZWJLaXRET01T
Y3JlZW4qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU0NSRUVOKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpTY3JlZW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmF2YWlsV2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVNjcmVlbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TY3JlZW4uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWRjZmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01TY3JlZW4uaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01TY3JlZW5faAorI2RlZmluZSBXZWJLaXRET01TY3JlZW5f
aAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1NDUkVFTiAgICAgICAgICAgICh3ZWJraXRf
ZG9tX3NjcmVlbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NDUkVFTihvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfU0NSRUVOLCBXZWJLaXRET01TY3JlZW4pKQorI2RlZmluZSBXRUJLSVRfRE9NX1NDUkVFTl9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfU0NSRUVOLCBXZWJLaXRET01TY3JlZW5DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19TQ1JFRU4ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1NDUkVFTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU0NSRUVO
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9TQ1JFRU4pKQorI2RlZmluZSBXRUJLSVRfRE9NX1NDUkVFTl9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfU0NS
RUVOLCBXZWJLaXRET01TY3JlZW5DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NU2NyZWVuIHsK
KyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJL
aXRET01TY3JlZW5DbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9zY3JlZW5fZ2V0X3R5cGUodm9p
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9zY3JlZW5fZ2V0X2hlaWdodDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01TY3JlZW4KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3NjcmVl
bl9nZXRfaGVpZ2h0KFdlYktpdERPTVNjcmVlbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9zY3JlZW5fZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNjcmVlbgorICoKKyAq
IFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fc2NyZWVuX2dldF93aWR0aChXZWJLaXRET01TY3Jl
ZW4qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc2NyZWVuX2dldF9jb2xvcl9kZXB0aDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01TY3JlZW4KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJr
aXRfZG9tX3NjcmVlbl9nZXRfY29sb3JfZGVwdGgoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfcGl4ZWxfZGVwdGg6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NU2NyZWVuCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9zY3JlZW5f
Z2V0X3BpeGVsX2RlcHRoKFdlYktpdERPTVNjcmVlbiogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9zY3JlZW5fZ2V0X2F2YWlsX2xlZnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU2NyZWVu
CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF9sZWZ0KFdl
YktpdERPTVNjcmVlbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zY3JlZW5fZ2V0X2F2
YWlsX3RvcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TY3JlZW4KKyAqCisgKiBSZXR1cm5zOiBB
ICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9zY3JlZW5fZ2V0X2F2YWlsX3RvcChXZWJLaXRET01TY3JlZW4qIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF9oZWlnaHQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NU2NyZWVuCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9z
Y3JlZW5fZ2V0X2F2YWlsX2hlaWdodChXZWJLaXRET01TY3JlZW4qIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01TY3JlZW4KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZh
aWxfd2lkdGgoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVNj
cmVlbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNjcmVlblByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2NyZWVu
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjFmYzcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVNjcmVlblByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVNjcmVlblBy
aXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01TY3JlZW5Qcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvU2NyZWVuLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVNjcmVlbi5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVNjcmVlbiogd3JhcFNjcmVlbihXZWJDb3Jl
OjpTY3JlZW4qKTsKK1dlYktpdERPTVNjcmVlbioga2l0KFdlYkNvcmU6OlNjcmVlbiopOworV2Vi
Q29yZTo6U2NyZWVuKiBjb3JlKFdlYktpdERPTVNjcmVlbiopOworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01TY3JlZW5Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc4MzE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01TcGVlY2hTeW50aGVzaXMuY3BwCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1
bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVy
dFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X1NQRUVDSF9TWU5USEVTSVMsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlIHsKKyNpZiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorfSBXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlOworCisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIGtp
dChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTKHJldCk7
CisKKyAgICByZXR1cm4gd3JhcFNwZWVjaFN5bnRoZXNpcyhvYmopOworfQorCitXZWJDb3JlOjpT
cGVlY2hTeW50aGVzaXMqIGNvcmUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3ludGhl
c2lzKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiB3cmFwU3BlZWNoU3ludGhlc2lzKFdlYkNvcmU6OlNw
ZWVjaFN5bnRoZXNpcyogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJUyhnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVMsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01TcGVlY2hTeW50aGVz
aXMsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpcywgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUEVORElORywKKyAgICBQUk9QX1NQRUFL
SU5HLAorICAgIFBST1BfUEFVU0VELAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lT
X0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwor
I2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIHByaXYtPn5XZWJLaXRET01T
cGVlY2hTeW50aGVzaXNQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9z
cGVlY2hfc3ludGhlc2lzX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYgPSBXRUJLSVRfRE9N
X1NQRUVDSF9TWU5USEVTSVMob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewor
ICAgIGNhc2UgUFJPUF9QRU5ESU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3BlbmRpbmcoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU1BFQUtJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19nZXRfc3BlYWtpbmcoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFVU0VEOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3Bh
dXNlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9z
cGVlY2hfc3ludGhlc2lzX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShTUEVFQ0hf
U1lOVEhFU0lTKQorICAgIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKj4oV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8g
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2NsYXNzX2luaXQoV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc1ByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZmluYWxpemU7CisgICAgZ29iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3Byb3Bl
cnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1BFTkRJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgInBlbmRpbmciLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRo
ZXNpczpwZW5kaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gU3BlZWNoU3lu
dGhlc2lzOnBlbmRpbmciLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TUEVBS0lORywKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic3BlYWtpbmciLAorICAgICAgICAg
ICAgIlNwZWVjaFN5bnRoZXNpczpzcGVha2luZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdi
b29sZWFuIFNwZWVjaFN5bnRoZXNpczpzcGVha2luZyIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BB
VVNFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicGF1c2Vk
IiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVzaXM6cGF1c2VkIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2Jvb2xlYW4gU3BlZWNoU3ludGhlc2lzOnBhdXNlZCIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19pbml0KFdlYktpdERPTVNwZWVjaFN5
bnRoZXNpcyogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX0dFVF9QUklWQVRFKHJlcXVlc3Qp
OworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZSgpOworfQor
Cit2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19zcGVhayhXZWJLaXRET01TcGVlY2hT
eW50aGVzaXMqIHNlbGYsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogdXR0ZXJh
bmNlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfU1BFRUNIX1NZTlRIRVNJUyhzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHV0dGVyYW5jZSkpOworICAgIFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJD
b3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGNvbnZlcnRlZFV0dGVyYW5jZSA9IFdlYktp
dDo6Y29yZSh1dHRlcmFuY2UpOworICAgIGl0ZW0tPnNwZWFrKCpjb252ZXJ0ZWRVdHRlcmFuY2Up
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHV0dGVy
YW5jZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRo
ZXNpcyIpCisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2NhbmNlbChXZWJLaXRET01TcGVlY2hTeW50aGVz
aXMqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50
aGVzaXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2FuY2VsKCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfcGF1c2Uo
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lO
VEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJUyhzZWxmKSk7Cisg
ICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnBhdXNlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyNlbmRp
ZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfcmVzdW1lKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZikKK3sK
KyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVD
SF9TWU5USEVTSVMoc2VsZikpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpcyogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5yZXN1bWUoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNw
ZWVjaCBTeW50aGVzaXMiKQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3BlbmRpbmcoV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVMoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cGVuZGluZygpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3NwZWFr
aW5nKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnNwZWFraW5nKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19n
ZXRfcGF1c2VkKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZikKK3sKKyNpZiBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhF
U0lTKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnBhdXNlZCgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcy5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01TcGVlY2hTeW50aGVzaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40YWViNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXMuaApA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNfaAorI2RlZmluZSBXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVMgICAg
ICAgICAgICAod2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUywg
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lO
VEhFU0lTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTLCBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9T
UEVFQ0hfU1lOVEhFU0lTKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lT
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lO
VEhFU0lTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTLCBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzIHsKKyAgICBXZWJL
aXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01TcGVl
Y2hTeW50aGVzaXNDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19zcGVh
azoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXMKKyAqIEB1dHRlcmFuY2U6
IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfc3BlYWsoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxmLCBXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2UqIHV0dGVyYW5jZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX2NhbmNlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVz
aXMKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2NhbmNlbChXZWJLaXRET01TcGVlY2hTeW50aGVzaXMq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19wYXVzZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXMKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3BhdXNlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX3Jlc3VtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXMKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3Jlc3VtZShXZWJLaXRET01TcGVlY2hT
eW50aGVzaXMqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19n
ZXRfcGVuZGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXMKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2dldF9wZW5k
aW5nKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX2dldF9zcGVha2luZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01T
cGVlY2hTeW50aGVzaXMKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX2dldF9zcGVha2luZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19nZXRfcGF1c2VkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcworICoKKyAqIFJldHVybnM6IEEgI2di
b29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3BhdXNlZChXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXMqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01T
cGVlY2hTeW50aGVzaXNFdmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjI0MjY1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQu
Y3BwCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZl
bnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c0V2ZW50KiBraXQoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzRXZlbnQqIG9iaikKK3sKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX0VWRU5UKGtpdChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpFdmVudCo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzRXZl
bnQqIGNvcmUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNFdmVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dl
YktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiB3cmFwU3BlZWNoU3ludGhlc2lzRXZlbnQoV2Vi
Q29yZTo6U3BlZWNoU3ludGhlc2lzRXZlbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfRVZFTlQo
Z19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX0VWRU5ULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK0dfREVGSU5FX1RZ
UEUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc19ldmVudCwgV0VCS0lUX0RPTV9UWVBFX0VWRU5UKQorCitlbnVtIHsKKyAgICBQUk9QXzAs
CisgICAgUFJPUF9DSEFSX0lOREVYLAorICAgIFBST1BfRUxBUFNFRF9USU1FLAorICAgIFBST1Bf
TkFNRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19ldmVu
dF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNFdmVudCogc2VsZiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19FVkVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NIQVJfSU5ERVg6
CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfZXZlbnRfZ2V0X2NoYXJfaW5kZXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRUxBUFNFRF9USU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwg
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9lbGFwc2VkX3RpbWUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9u
YW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc19ldmVudF9jbGFzc19pbml0KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X3Byb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0NIQVJfSU5ERVgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9u
ZygKKyAgICAgICAgICAgICJjaGFyLWluZGV4IiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVz
aXNFdmVudDpjaGFyLWluZGV4IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFNwZWVj
aFN5bnRoZXNpc0V2ZW50OmNoYXItaW5kZXgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0VMQVBTRURfVElNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAg
ICAgImVsYXBzZWQtdGltZSIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzRXZlbnQ6ZWxh
cHNlZC10aW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Zsb2F0IFNwZWVjaFN5bnRoZXNp
c0V2ZW50OmVsYXBzZWQtdGltZSIsCisgICAgICAgICAgICAtR19NQVhGTE9BVCwgR19NQVhGTE9B
VCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
bmFtZSIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzRXZlbnQ6bmFtZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBTcGVlY2hTeW50aGVzaXNFdmVudDpuYW1lIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2luaXQoV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJl
cXVlc3QpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dl
dF9jaGFyX2luZGV4KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBzZWxmKQoreworI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVD
SF9TWU5USEVTSVNfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
c0V2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBp
dGVtLT5jaGFySW5kZXgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNo
IFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2dmbG9hdCB3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X2VsYXBzZWRfdGltZShXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNFdmVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX0VWRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnZmxvYXQgcmVzdWx0ID0gaXRlbS0+ZWxhcHNlZFRpbWUoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGdmbG9hdD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICov
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X25hbWUo
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19F
VkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzRXZlbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3Bl
ZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hM2E3ZjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVz
aXNFdmVudC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRfaAorI2RlZmluZSBXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNFdmVudF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMt
dW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9T
UEVFQ0hfU1lOVEhFU0lTX0VWRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc19ldmVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVT
SVNfRVZFTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfRVZFTlQsIFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc0V2ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX0VW
RU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX0VWRU5ULCBXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNFdmVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNf
RVZFTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfRVZFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX1NQRUVDSF9TWU5USEVTSVNfRVZFTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfRVZFTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfRVZFTlRfR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1NQ
RUVDSF9TWU5USEVTSVNfRVZFTlQsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50Q2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50IHsKKyAgICBXZWJLaXRE
T01FdmVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5
bnRoZXNpc0V2ZW50Q2xhc3MgeworICAgIFdlYktpdERPTUV2ZW50Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2
ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c19ldmVudF9nZXRfY2hhcl9pbmRleDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc19ldmVudF9nZXRfY2hhcl9pbmRleChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9l
bGFwc2VkX3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRf
Z2V0X2VsYXBzZWRfdGltZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9uYW1lOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X25hbWUoV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzRXZlbnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzRXZlbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25Qcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50UHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXgg
NjklCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVNwZWVjaFN5bnRoZXNpc0V2ZW50UHJpdmF0ZS5oCmluZGV4IDk4OTBhOTIuLjFjMzM2YTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzRXZlbnRQcml2YXRlLmgKQEAgLTE4LDE5ICsxOCwxOSBAQAogICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVu
Y3Rpb25Qcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25Qcml2
YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRQcml2YXRlX2gKIAotI2luY2x1ZGUg
IlRlc3RDYWxsYmFja0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRl
c3RDYWxsYmFja0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TcGVlY2hTeW50aGVzaXNF
dmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVu
dC5oPgogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
LVdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiB3cmFwVGVzdENhbGxiYWNrRnVuY3Rpb24o
V2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qKTsKLVdlYktpdERPTVRlc3RDYWxsYmFja0Z1
bmN0aW9uKiBraXQoV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qKTsKLVdlYkNvcmU6OlRl
c3RDYWxsYmFja0Z1bmN0aW9uKiBjb3JlKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKik7
CitXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCogd3JhcFNwZWVjaFN5bnRoZXNpc0V2ZW50
KFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc0V2ZW50Kik7CitXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNFdmVudCoga2l0KFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc0V2ZW50Kik7CitXZWJDb3JlOjpT
cGVlY2hTeW50aGVzaXNFdmVudCogY29yZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCop
OwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRI
RVNJUykgKi8KIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0
ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
UHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFja1ByaXZh
dGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlLmgKaW5kZXggMDk3MjM4
OC4uNjEzYmQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzUHJpdmF0ZS5oCkBAIC0xOCwxOSArMTgsMTkgQEAKICAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RDYWxsYmFja1By
aXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlX2gKKyNpZm5kZWYg
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1ByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdENhbGxiYWNrLmgiCi0jaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RDYWxsYmFjay5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U3BlZWNoU3ludGhlc2lzLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVNwZWVjaFN5
bnRoZXNpcy5oPgogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLVdlYktpdERPTVRlc3RDYWxsYmFjayogd3JhcFRlc3RDYWxsYmFjayhXZWJDb3JlOjpU
ZXN0Q2FsbGJhY2sqKTsKLVdlYktpdERPTVRlc3RDYWxsYmFjayoga2l0KFdlYkNvcmU6OlRlc3RD
YWxsYmFjayopOwotV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlKFdlYktpdERPTVRlc3RDYWxs
YmFjayopOworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiB3cmFwU3BlZWNoU3ludGhlc2lzKFdl
YkNvcmU6OlNwZWVjaFN5bnRoZXNpcyopOworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBraXQo
V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKik7CitXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqIGNv
cmUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAog
I2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwogCi0jZW5kaWYgLyogV2ViS2l0
RE9NVGVzdENhbGxiYWNrUHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNGU4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcApAQCAtMCwwICsxLDQ4MyBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9D
U1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJH
T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19V
VFRFUkFOQ0VfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2Jq
LCBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0UsIFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlIHsKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiBj
b3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorfSBXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlOworCisjaWYgRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UqIGtpdChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIG9iaikK
K3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIg
cmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RP
TV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBTcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2Uob2JqKTsKK30KKworV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlKiBjb3JlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Cit9CisKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogd3JhcFNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZShXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGNv
cmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRf
RE9NX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc191dHRlcmFuY2VfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0
Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfYWRkX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpF
Q1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50
TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VD
YXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3lu
dGhlc2lzIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5U
SEVTSVMpCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNf
dXR0ZXJhbmNlX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6
OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpy
ZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVy
KTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQor
eworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c191dHRlcmFuY2VfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5l
ciA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfYWRkX2V2ZW50X2xpc3Rl
bmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdXR0ZXJhbmNlX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLCB3ZWJr
aXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNU
LCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX1RFWFQsCisgICAgUFJPUF9MQU5HLAorICAgIFBST1BfVk9JQ0UsCisgICAgUFJPUF9WT0xV
TUUsCisgICAgUFJPUF9SQVRFLAorICAgIFBST1BfUElUQ0gsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRV9HRVRfUFJJVkFURShv
YmplY3QpOworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBwcml2LT5+V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc191dHRlcmFuY2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNF
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVEVY
VDoKKyAgICAgICAgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdGV4
dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0xBTkc6CisgICAgICAgIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRl
cmFuY2Vfc2V0X2xhbmcoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9WT0xVTUU6CisgICAgICAgIHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3ZvbHVtZShzZWxmLCBnX3ZhbHVlX2dldF9mbG9hdCh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkFURToKKyAgICAgICAgd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfcmF0ZShzZWxmLCBnX3ZhbHVl
X2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUElUQ0g6
CisgICAgICAgIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3BpdGNo
KHNlbGYsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2Vs
ZiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJh
bmNlX2dldF90ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBTkc6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc191dHRlcmFuY2VfZ2V0X2xhbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVk9JQ0U6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdm9pY2Uoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVk9MVU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9h
dCh2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdm9sdW1l
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JBVEU6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJh
bmNlX2dldF9yYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BJVENI
OgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3lu
dGhlc2lzX3V0dGVyYW5jZV9nZXRfcGl0Y2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IEdPYmplY3QqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfY29uc3RydWN0
b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29u
c3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0
ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAg
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAg
cHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdl
YktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3Qp
OworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIHJldHVybiBvYmplY3Q7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vf
Y2xhc3NfaW5pdChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VDbGFzcyogcmVxdWVz
dENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENs
YXNzLCBzaXplb2YoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdXR0ZXJhbmNlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2ZpbmFsaXplOworICAgIGdvYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVy
YW5jZV9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9wcm9wZXJ0eTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInRleHQiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTp0ZXh0IiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6
dGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImxhbmciLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZTpsYW5nIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBTcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2U6bGFuZyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WT0lDRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ2b2ljZSIsCisgICAgICAgICAgICAi
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOnZvaWNlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTp2
b2ljZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lD
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1ZPTFVNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgInZv
bHVtZSIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOnZvbHVtZSIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnZmxvYXQgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOnZv
bHVtZSIsCisgICAgICAgICAgICAtR19NQVhGTE9BVCwgR19NQVhGTE9BVCwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SQVRFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAgICAgICAicmF0ZSIsCisgICAgICAg
ICAgICAiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOnJhdGUiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2Zsb2F0IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTpyYXRlIiwKKyAgICAgICAgICAg
IC1HX01BWEZMT0FULCBHX01BWEZMT0FULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BJVENILAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfZmxvYXQoCisgICAgICAgICAgICAicGl0Y2giLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZTpwaXRjaCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZmxvYXQgU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlOnBpdGNoIiwKKyAgICAgICAgICAgIC1HX01BWEZMT0FULCBH
X01BWEZMT0FULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfaW5p
dChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHJlcXVlc3QpCit7CisgICAgV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
U1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3
IChwcml2KSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlKCk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF90ZXh0KFdl
YktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lT
X1VUVEVSQU5DRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc191dHRlcmFuY2Vfc2V0X3RleHQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRUZXh0KGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0
ZXJhbmNlX2dldF9sYW5nKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZikK
K3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxhbmcoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiAw
OworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCit2b2lkIHdlYmtp
dF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X2xhbmcoV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhF
U0lTX1VUVEVSQU5DRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRMYW5nKGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisjZW5kaWYg
LyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK1dlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc1ZvaWNlKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF92b2lj
ZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRI
RVNJU19VVFRFUkFOQ0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
U3BlZWNoU3ludGhlc2lzVm9pY2U+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT52
b2ljZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdXR0ZXJhbmNlX3NldF92b2ljZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UqIHNlbGYsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiB2YWx1ZSkKK3sKKyNp
ZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9T
WU5USEVTSVNfVVRURVJBTkNFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSh2YWx1ZSkpOworICAgIFdlYkNvcmU6OlNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJD
b3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUo
dmFsdWUpOworICAgIGl0ZW0tPnNldFZvaWNlKGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisjZW5kaWYgLyog
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2dmbG9hdCB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF92b2x1bWUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Zsb2F0IHJlc3VsdCA9IGl0ZW0tPnZvbHVtZSgpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Z2Zsb2F0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykg
Ki8KK30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF92
b2x1bWUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBnZmxvYXQgdmFs
dWUpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShzZWxmKSk7CisgICAgV2ViQ29yZTo6U3BlZWNo
U3ludGhlc2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldFZvbHVtZSh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlNwZWVjaCBTeW50aGVzaXMiKQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAq
LworfQorCitnZmxvYXQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRf
cmF0ZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpCit7CisjaWYgRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZ
TlRIRVNJU19VVFRFUkFOQ0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzdWx0
ID0gaXRlbS0+cmF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2gg
U3ludGhlc2lzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Zsb2F0PigwKTsKKyNlbmRpZiAv
KiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF9yYXRlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZSogc2VsZiwgZ2Zsb2F0IHZhbHVlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2Vs
ZikpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRSYXRlKHZhbHVlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisjZW5kaWYgLyogRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2dmbG9hdCB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdXR0ZXJhbmNlX2dldF9waXRjaChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnZmxvYXQgcmVzdWx0ID0gaXRlbS0+cGl0Y2goKTsKKyAgICByZXR1cm4gcmVz
dWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdmbG9hdD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9
CisKK3ZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfcGl0Y2go
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBnZmxvYXQgdmFsdWUpCit7
CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVF
Q0hfU1lOVEhFU0lTX1VUVEVSQU5DRShzZWxmKSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFBp
dGNoKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNo
IFN5bnRoZXNpcyIpCisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjdhZGUzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZS5oCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZV9oCisjZGVmaW5lIFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0UgICAgICAgICAgICAod2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQ
RUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVS
QU5DRSwgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJ
U19VVFRFUkFOQ0UsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZUNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TUEVF
Q0hfU1lOVEhFU0lTX1VUVEVSQU5DRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1BFRUNIX1NZ
TlRIRVNJU19VVFRFUkFOQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRV9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfU1BF
RUNIX1NZTlRIRVNJU19VVFRFUkFOQ0UsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Ugewor
ICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3RleHQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF90ZXh0KFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdGV4dChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9z
cGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfbGFuZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X2xhbmcoV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfdXR0ZXJhbmNlX3NldF9sYW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZQorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdXR0ZXJhbmNlX3NldF9sYW5nKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdXR0ZXJhbmNlX2dldF92b2ljZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKgord2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdm9pY2UoV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdXR0ZXJhbmNlX3NldF92b2ljZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVm9pY2UKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdm9pY2UoV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNWb2ljZSogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191
dHRlcmFuY2VfZ2V0X3ZvbHVtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfdXR0ZXJhbmNlX2dldF92b2x1bWUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJh
bmNlX3NldF92b2x1bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlCisgKiBAdmFsdWU6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJh
bmNlX3NldF92b2x1bWUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBn
ZmxvYXQgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRl
cmFuY2VfZ2V0X3JhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlCisgKgorICogUmV0dXJuczogQSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3V0dGVyYW5jZV9nZXRfcmF0ZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0
X3JhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisg
KiBAdmFsdWU6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF9y
YXRlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwgZ2Zsb2F0IHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9w
aXRjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UKKyAq
CisgKiBSZXR1cm5zOiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNl
X2dldF9waXRjaChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3BpdGNoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICogQHZhbHVl
OiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfcGl0Y2goV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBnZmxvYXQgdmFsdWUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMGQ1NWVhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmg+CisjaWYgRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiB3cmFwU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSopOworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlKiBraXQoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKik7CitXZWJD
b3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGNvcmUoV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDYxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1
bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19W
T0lDRV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFLCBXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNWb2ljZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50
aGVzaXNWb2ljZVByaXZhdGUgeworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFJl
ZlB0cjxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZT4gY29yZU9iamVjdDsKKyNlbmRpZiAv
LyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKK30gV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9p
Y2VQcml2YXRlOworCisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSoga2l0KFdlYkNvcmU6OlNw
ZWVjaFN5bnRoZXNpc1ZvaWNlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19WT0lDRShyZXQpOwor
CisgICAgcmV0dXJuIHdyYXBTcGVlY2hTeW50aGVzaXNWb2ljZShvYmopOworfQorCitXZWJDb3Jl
OjpTcGVlY2hTeW50aGVzaXNWb2ljZSogY29yZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2lj
ZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHdyYXBTcGVl
Y2hTeW50aGVzaXNWb2ljZShXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fU1BF
RUNIX1NZTlRIRVNJU19WT0lDRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9T
WU5USEVTSVNfVk9JQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRI
RVNJUykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSwgd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9WT0lDRV9VUkksCisgICAgUFJPUF9OQU1F
LAorICAgIFBST1BfTEFORywKKyAgICBQUk9QX0xPQ0FMX1NFUlZJQ0UsCisgICAgUFJPUF9ERUZB
VUxULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNl
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNWb2ljZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0Vf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Cisj
ZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgcHJpdi0+fldlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9p
Y2UqIHNlbGYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0Uob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9WT0lDRV9VUkk6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c192b2ljZV9nZXRfdm9pY2VfdXJpKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9MQU5HOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X2xhbmcoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9DQUxfU0VSVklDRToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9s
b2NhbF9zZXJ2aWNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFV
TFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc192b2ljZV9nZXRfZGVmYXVsdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgR09iamVjdCogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0
cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1BFRUNI
X1NZTlRIRVNJU19WT0lDRV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSo+KFdFQktJVF9E
T01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9jbGFzc19pbml0KFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3Ig
PSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfY29uc3RydWN0b3I7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVk9J
Q0VfVVJJLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZvaWNl
LXVyaSIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzVm9pY2U6dm9pY2UtdXJpIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOnZvaWNlLXVy
aSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzVm9pY2U6
bmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBTcGVlY2hTeW50aGVzaXNWb2lj
ZTpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJsYW5nIiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVzaXNW
b2ljZTpsYW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFNwZWVjaFN5bnRoZXNp
c1ZvaWNlOmxhbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MT0NBTF9TRVJWSUNFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJsb2NhbC1zZXJ2aWNlIiwKKyAgICAg
ICAgICAgICJTcGVlY2hTeW50aGVzaXNWb2ljZTpsb2NhbC1zZXJ2aWNlIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2Jvb2xlYW4gU3BlZWNoU3ludGhlc2lzVm9pY2U6bG9jYWwtc2VydmljZSIs
CisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0RFRkFVTFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImRlZmF1bHQiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNp
c1ZvaWNlOmRlZmF1bHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBTcGVlY2hT
eW50aGVzaXNWb2ljZTpkZWZhdWx0IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9z
cGVlY2hfc3ludGhlc2lzX3ZvaWNlX2luaXQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2Uq
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFX0dFVF9QUklWQVRFKHJlcXVl
c3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRl
KCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X3Zv
aWNlX3VyaShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZikKK3sKKyNpZiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lO
VEhFU0lTX1ZPSUNFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2lj
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT52b2ljZVVSSSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdm9pY2VfZ2V0X25hbWUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfU1BFRUNIX1NZTlRIRVNJU19WT0lDRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzVm9pY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIDA7Cisj
ZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X2xhbmcoV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVm9pY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19WT0lDRShzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGFuZygpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAg
cmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2di
b29sZWFuIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfbG9jYWxfc2Vydmlj
ZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lT
X1ZPSUNFKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2Uq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
bG9jYWxTZXJ2aWNlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBT
eW50aGVzaXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfZGVmYXVsdChXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNWb2ljZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aXNEZWZhdWx0KCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
ICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzVm9pY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xZGQ3ZTgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZS5o
CkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlX2gKKyNkZWZpbmUgV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVm9pY2VfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
CisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJs
ZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9T
WU5USEVTSVNfVk9JQ0UgICAgICAgICAgICAod2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3Zv
aWNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19WT0lD
RShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSwgV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVm9pY2UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0VfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0UsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1Zv
aWNlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19WT0lDRShv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1BF
RUNIX1NZTlRIRVNJU19WT0lDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSkpCisjZGVm
aW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19WT0lDRV9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZ
TlRIRVNJU19WT0lDRSwgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcykpCisKK3N0
cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UgeworICAgIFdlYktpdERPTU9iamVj
dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9p
Y2VfZ2V0X3ZvaWNlX3VyaToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNW
b2ljZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3Zv
aWNlX2dldF92b2ljZV91cmkoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfbmFtZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZQorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9uYW1lKFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdm9pY2VfZ2V0X2xhbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVm9pY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc192b2ljZV9nZXRfbGFuZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9sb2Nh
bF9zZXJ2aWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlCisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2lj
ZV9nZXRfbG9jYWxfc2VydmljZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9kZWZhdWx0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlCisgKgorICogUmV0
dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfZGVm
YXVsdChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjM5NDBiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGUuaApAQCAtMCwwICsx
LDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVNwZWVjaFN5
bnRoZXNpc1ZvaWNlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1NwZWVjaFN5bnRoZXNp
c1ZvaWNlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1Zv
aWNlLmg+CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJLaXQg
eworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHdyYXBTcGVlY2hTeW50aGVzaXNWb2lj
ZShXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSopOworV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVm9pY2UqIGtpdChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSopOworV2ViQ29yZTo6
U3BlZWNoU3ludGhlc2lzVm9pY2UqIGNvcmUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2Uq
KTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5U
SEVTSVMpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1OWE1NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NU3RvcmFnZS5jcHAKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01TdG9yYWdlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVN0b3JhZ2VQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9TVE9SQUdFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UsIFdlYktpdERPTVN0b3JhZ2VQ
cml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUgeworICAg
IFJlZlB0cjxXZWJDb3JlOjpTdG9yYWdlPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01TdG9yYWdl
UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVN0b3JhZ2UqIGtpdChX
ZWJDb3JlOjpTdG9yYWdlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fU1RPUkFHRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBT
dG9yYWdlKG9iaik7Cit9CisKK1dlYkNvcmU6OlN0b3JhZ2UqIGNvcmUoV2ViS2l0RE9NU3RvcmFn
ZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlN0b3JhZ2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01TdG9yYWdlKiB3cmFwU3RvcmFnZShXZWJDb3JlOjpTdG9yYWdlKiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9TVE9SQUdFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfU1RPUkFHRSwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01TdG9yYWdlLCB3ZWJraXRfZG9tX3N0b3JhZ2UsIFdF
QktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xF
TkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3RvcmFnZV9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1NUT1JBR0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5X
ZWJLaXRET01TdG9yYWdlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
c3RvcmFnZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NU3RvcmFnZSogc2VsZiA9IFdFQktJVF9ET01fU1RPUkFHRShvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fc3RvcmFnZV9nZXRfbGVuZ3RoKHNlbGYs
IG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3N0
b3JhZ2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAg
R09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zdG9yYWdlX3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29u
c3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01TdG9yYWdlUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fU1RPUkFHRV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTdG9yYWdlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
b2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHBy
aXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0b3JhZ2VfY2xhc3NfaW5pdChXZWJLaXRET01TdG9y
YWdlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVN0b3JhZ2VQcml2YXRlKSk7Cisg
ICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fc3RvcmFnZV9jb25zdHJ1
Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9zdG9yYWdlX2Zp
bmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9zdG9y
YWdlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdf
cGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIlN0
b3JhZ2U6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFN0b3JhZ2U6bGVu
Z3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0b3JhZ2Vf
aW5pdChXZWJLaXRET01TdG9yYWdlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVN0b3JhZ2VQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVE9SQUdFX0dFVF9QUklWQVRFKHJlcXVlc3QpOwor
ICAgIG5ldyAocHJpdikgV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21fc3RvcmFnZV9rZXkoV2ViS2l0RE9NU3RvcmFnZSogc2VsZiwgZ3Vsb25nIGluZGV4
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVE9SQUdFKHNl
bGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7
CisgICAgV2ViQ29yZTo6U3RvcmFnZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5rZXkoaW5kZXgsIGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3RvcmFnZV9nZXRfaXRlbShXZWJLaXRET01TdG9yYWdl
KiBzZWxmLCBjb25zdCBnY2hhcioga2V5LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19TVE9SQUdFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChrZXksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAw
KTsKKyAgICBXZWJDb3JlOjpTdG9yYWdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZEtleSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChrZXkpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEl0ZW0oY29udmVydGVkS2V5LCBlYykpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9zdG9yYWdlX3NldF9pdGVtKFdl
YktpdERPTVN0b3JhZ2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBrZXksIGNvbnN0IGdjaGFyKiBkYXRh
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUT1JBR0Uoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoa2V5KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6
OlN0b3JhZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkS2V5ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGtleSk7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkRGF0YSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRJdGVtKGNvbnZlcnRlZEtleSwg
Y29udmVydGVkRGF0YSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX3N0b3JhZ2VfcmVt
b3ZlX2l0ZW0oV2ViS2l0RE9NU3RvcmFnZSogc2VsZiwgY29uc3QgZ2NoYXIqIGtleSwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVE9SQUdFKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKGtleSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvcik7CisgICAgV2ViQ29yZTo6U3RvcmFnZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRLZXkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoa2V5
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5yZW1vdmVJ
dGVtKGNvbnZlcnRlZEtleSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX3N0b3JhZ2Vf
Y2xlYXIoV2ViS2l0RE9NU3RvcmFnZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19TVE9SQUdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpTdG9yYWdlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmNs
ZWFyKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0X2xlbmd0aChX
ZWJLaXRET01TdG9yYWdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19TVE9SQUdFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6U3RvcmFnZSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
dWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVmMTAyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01TdG9yYWdlLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU3RvcmFnZV9oCisjZGVmaW5lIFdlYktpdERPTVN0
b3JhZ2VfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UgICAgICAgICAgICAo
d2Via2l0X2RvbV9zdG9yYWdlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fU1RPUkFH
RShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfU1RPUkFHRSwgV2ViS2l0RE9NU3RvcmFnZSkpCisjZGVmaW5lIFdFQktJVF9E
T01fU1RPUkFHRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfU1RPUkFHRSwgV2ViS2l0RE9NU3RvcmFnZUNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1NUT1JBR0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1NUT1JBR0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NU
T1JBR0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX1NUT1JBR0UsIFdlYktpdERPTVN0b3JhZ2VDbGFzcykpCisKK3N0cnVj
dCBfV2ViS2l0RE9NU3RvcmFnZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NU3RvcmFnZUNsYXNzIHsKKyAgICBXZWJLaXRET01P
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX3N0b3JhZ2VfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9zdG9yYWdl
X2tleToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdG9yYWdlCisgKiBAaW5kZXg6IEEgI2d1bG9u
ZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3N0
b3JhZ2Vfa2V5KFdlYktpdERPTVN0b3JhZ2UqIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3RvcmFnZV9nZXRfaXRlbToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01TdG9yYWdlCisgKiBAa2V5OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vy
cm9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0X2l0ZW0oV2Vi
S2l0RE9NU3RvcmFnZSogc2VsZiwgY29uc3QgZ2NoYXIqIGtleSwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fc3RvcmFnZV9zZXRfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01TdG9yYWdlCisgKiBAa2V5OiBBICNnY2hhcgorICogQGRhdGE6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9zdG9yYWdlX3NldF9pdGVtKFdlYktpdERPTVN0b3JhZ2UqIHNl
bGYsIGNvbnN0IGdjaGFyKiBrZXksIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9zdG9yYWdlX3JlbW92ZV9pdGVtOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVN0b3JhZ2UKKyAqIEBrZXk6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9zdG9yYWdlX3JlbW92ZV9pdGVtKFdlYktpdERPTVN0b3JhZ2UqIHNlbGYsIGNvbnN0IGdj
aGFyKiBrZXksIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0b3JhZ2Vf
Y2xlYXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3RvcmFnZQorICogQGVycm9yOiAjR0Vycm9y
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fc3RvcmFnZV9jbGVhcihXZWJLaXRET01TdG9yYWdlKiBzZWxmLCBHRXJyb3IqKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9zdG9yYWdlX2dldF9sZW5ndGg6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NU3RvcmFnZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczog
QSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1
bG9uZword2Via2l0X2RvbV9zdG9yYWdlX2dldF9sZW5ndGgoV2ViS2l0RE9NU3RvcmFnZSogc2Vs
ZiwgR0Vycm9yKiogZXJyb3IpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NU3RvcmFnZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVN0b3JhZ2VJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZUluZm8uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwY2EwYjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVN0b3JhZ2VJbmZvLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERP
TVN0b3JhZ2VJbmZvLmggYW5kCisgICAgV2ViS2l0RE9NU3RvcmFnZUluZm8uY3BwIGFyZSBjcmVh
dGVkIGZvciBTdG9yYWdlSW5mby5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQg
c2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01TdG9yYWdlSW5mby5oIGFu
ZAorICAgIFdlYktpdERPTVN0b3JhZ2VJbmZvLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxl
IG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9y
YWdlSW5mby5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TdG9yYWdlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjkwY2EwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VJbmZvLmgK
QEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0
ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBXZWJLaXRET01TdG9yYWdlSW5mby5oIGFuZAorICAgIFdl
YktpdERPTVN0b3JhZ2VJbmZvLmNwcCBhcmUgY3JlYXRlZCBmb3IgU3RvcmFnZUluZm8uaWRsLCBh
bmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2Vu
ZXJhdGUgV2ViS2l0RE9NU3RvcmFnZUluZm8uaCBhbmQKKyAgICBXZWJLaXRET01TdG9yYWdlSW5m
by5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21w
aWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFn
ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzJiZjlkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU3RvcmFn
ZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01TdG9yYWdlUHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJDb3JlL1N0b3JhZ2UuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NU3RvcmFn
ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVN0b3JhZ2UqIHdyYXBTdG9yYWdl
KFdlYkNvcmU6OlN0b3JhZ2UqKTsKK1dlYktpdERPTVN0b3JhZ2UqIGtpdChXZWJDb3JlOjpTdG9y
YWdlKik7CitXZWJDb3JlOjpTdG9yYWdlKiBjb3JlKFdlYktpdERPTVN0b3JhZ2UqKTsKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NU3RvcmFnZVByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUXVvdGEuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUXVvdGEu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjU2MjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVN0b3JhZ2VRdW90YS5jcHAKQEAgLTAsMCArMSw2IEBACisvKgorICAg
IFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBX
ZWJLaXRET01TdG9yYWdlUXVvdGEuaCBhbmQKKyAgICBXZWJLaXRET01TdG9yYWdlUXVvdGEuY3Bw
IGFyZSBjcmVhdGVkIGZvciBTdG9yYWdlUXVvdGEuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQg
dGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NU3RvcmFn
ZVF1b3RhLmggYW5kCisgICAgV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmNwcCBhdCBldmVyeSBidWls
ZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01TdG9yYWdlUXVvdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiNTYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
U3RvcmFnZVF1b3RhLmgKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5l
cmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBXZWJLaXRET01TdG9yYWdlUXVv
dGEuaCBhbmQKKyAgICBXZWJLaXRET01TdG9yYWdlUXVvdGEuY3BwIGFyZSBjcmVhdGVkIGZvciBT
dG9yYWdlUXVvdGEuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMg
ZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmggYW5kCisgICAg
V2ViS2l0RE9NU3RvcmFnZVF1b3RhLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qg
bm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZU1lZGlh
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NU3R5bGVNZWRpYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTA1NDExZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVNZWRpYS5jcHAKQEAg
LTAsMCArMSwxNTUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHlsZU1lZGlhLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2Vi
S2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlTWVkaWFQcml2YXRlLmgi
CisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9N
RURJQV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9TVFlMRV9NRURJQSwgV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGUpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZSB7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlN0eWxlTWVkaWE+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVN0eWxlTWVkaWFQ
cml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NU3R5bGVNZWRpYSoga2l0
KFdlYkNvcmU6OlN0eWxlTWVkaWEqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmop
KQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9TVFlMRV9NRURJQShyZXQpOworCisgICAgcmV0
dXJuIHdyYXBTdHlsZU1lZGlhKG9iaik7Cit9CisKK1dlYkNvcmU6OlN0eWxlTWVkaWEqIGNvcmUo
V2ViS2l0RE9NU3R5bGVNZWRpYSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlN0eWxlTWVkaWEqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01TdHlsZU1lZGlhKiB3cmFwU3R5bGVN
ZWRpYShXZWJDb3JlOjpTdHlsZU1lZGlhKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9TVFlMRV9NRURJQShnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX1NUWUxFX01FRElBLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdl
YktpdERPTVN0eWxlTWVkaWEsIHdlYmtpdF9kb21fc3R5bGVfbWVkaWEsIFdFQktJVF9ET01fVFlQ
RV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RZUEUsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
U1RZTEVfTUVESUFfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJL
aXRET01TdHlsZU1lZGlhUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
c3R5bGVfbWVkaWFfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01TdHlsZU1lZGlhKiBzZWxmID0gV0VCS0lUX0RPTV9TVFlMRV9NRURJQShv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RZUEU6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fc3R5bGVfbWVk
aWFfZ2V0X21lZGlhX3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29u
c3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFBy
b3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV9zdHlsZV9tZWRpYV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9N
U3R5bGVNZWRpYVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NUWUxFX01FRElBX0dFVF9QUklW
QVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlN0eWxlTWVkaWEqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2Jq
ZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
c3R5bGVfbWVkaWFfY2xhc3NfaW5pdChXZWJLaXRET01TdHlsZU1lZGlhQ2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFz
cywgc2l6ZW9mKFdlYktpdERPTVN0eWxlTWVkaWFQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNz
LT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfY29uc3RydWN0b3I7CisgICAg
Z29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfZmluYWxpemU7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3N0eWxlX21lZGlh
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIlN0eWxlTWVk
aWE6dHlwZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBTdHlsZU1lZGlhOnR5cGUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2luaXQoV2ViS2l0RE9N
U3R5bGVNZWRpYSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fU1RZTEVfTUVESUFfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAg
bmV3IChwcml2KSBXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZSgpOworfQorCitnYm9vbGVhbiB3
ZWJraXRfZG9tX3N0eWxlX21lZGlhX21hdGNoX21lZGl1bShXZWJLaXRET01TdHlsZU1lZGlhKiBz
ZWxmLCBjb25zdCBnY2hhciogbWVkaWFxdWVyeSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19TVFlMRV9NRURJQShzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG1l
ZGlhcXVlcnksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpTdHlsZU1lZGlhKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lZGlhcXVlcnkgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgobWVkaWFxdWVyeSk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+bWF0Y2hNZWRpdW0oY29udmVydGVkTWVkaWFxdWVyeSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfZ2V0X21lZGlhX3R5cGUoV2ViS2l0
RE9NU3R5bGVNZWRpYSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9N
RURJQShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3R5bGVNZWRpYSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5
bGVNZWRpYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TdHlsZU1lZGlhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWNhN2IzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVNZWRpYS5oCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NU3R5bGVNZWRpYV9oCisjZGVmaW5lIFdlYktpdERPTVN0eWxlTWVkaWFfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX01FRElBICAgICAgICAgICAgKHdlYmtpdF9k
b21fc3R5bGVfbWVkaWFfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9NRURJ
QShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfU1RZTEVfTUVESUEsIFdlYktpdERPTVN0eWxlTWVkaWEpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1NUWUxFX01FRElBX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9NRURJQSwgV2ViS2l0RE9NU3R5
bGVNZWRpYUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NUWUxFX01FRElBKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9T
VFlMRV9NRURJQSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1RZTEVfTUVESUFfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NU
WUxFX01FRElBKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9NRURJQV9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfU1RZ
TEVfTUVESUEsIFdlYktpdERPTVN0eWxlTWVkaWFDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
U3R5bGVNZWRpYSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NU3R5bGVNZWRpYUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3N0
eWxlX21lZGlhX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3R5bGVfbWVk
aWFfbWF0Y2hfbWVkaXVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0eWxlTWVkaWEKKyAqIEBt
ZWRpYXF1ZXJ5OiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X3N0eWxlX21lZGlhX21hdGNoX21lZGl1bShXZWJLaXRET01TdHlsZU1lZGlhKiBzZWxmLCBjb25z
dCBnY2hhciogbWVkaWFxdWVyeSk7CisKKy8qKgorICogd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9n
ZXRfbWVkaWFfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZU1lZGlhCisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2dldF9tZWRpYV90eXBlKFdlYktp
dERPTVN0eWxlTWVkaWEqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NU3R5bGVNZWRpYV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlTWVkaWFQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlTWVk
aWFQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0YmMyNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVN0
eWxlTWVkaWFQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9TdHlsZU1lZGlhLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTVN0eWxlTWVkaWEuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01TdHls
ZU1lZGlhKiB3cmFwU3R5bGVNZWRpYShXZWJDb3JlOjpTdHlsZU1lZGlhKik7CitXZWJLaXRET01T
dHlsZU1lZGlhKiBraXQoV2ViQ29yZTo6U3R5bGVNZWRpYSopOworV2ViQ29yZTo6U3R5bGVNZWRp
YSogY29yZShXZWJLaXRET01TdHlsZU1lZGlhKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIFdlYktpdERPTVN0eWxlTWVkaWFQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjlkNmQwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxl
U2hlZXQuY3BwCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3R5bGVTaGVldC5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTU1lZGlhTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCisjZGVmaW5lIFdFQktJVF9ET01fU1RZTEVfU0hFRVRfR0VUX1BSSVZBVEUob2JqKSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQs
IFdlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
U3R5bGVTaGVldFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpTdHlsZVNoZWV0PiBjb3Jl
T2JqZWN0OworfSBXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTVN0eWxlU2hlZXQqIGtpdChXZWJDb3JlOjpTdHlsZVNoZWV0KiBvYmop
Cit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVy
IHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9E
T01fU1RZTEVfU0hFRVQocmV0KTsKKworICAgIHJldHVybiB3cmFwKG9iaik7Cit9CisKK1dlYkNv
cmU6OlN0eWxlU2hlZXQqIGNvcmUoV2ViS2l0RE9NU3R5bGVTaGVldCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlN0eWxlU2hlZXQqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01T
dHlsZVNoZWV0KiB3cmFwU3R5bGVTaGVldChXZWJDb3JlOjpTdHlsZVNoZWV0KiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9TVFlM
RV9TSEVFVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVN0eWxlU2hlZXQsIHdlYmtpdF9kb21fc3R5bGVf
c2hlZXQsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX1RZUEUsCisgICAgUFJPUF9ESVNBQkxFRCwKKyAgICBQUk9QX09XTkVSX05PREUsCisg
ICAgUFJPUF9QQVJFTlRfU1RZTEVfU0hFRVQsCisgICAgUFJPUF9IUkVGLAorICAgIFBST1BfVElU
TEUsCisgICAgUFJPUF9NRURJQSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVf
c2hlZXRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVN0eWxlU2hl
ZXRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9HRVRfUFJJVkFURShvYmpl
Y3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlKCk7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zdHlsZV9zaGVldF9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0
X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVN0eWxlU2hl
ZXQqIHNlbGYgPSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9k
b21fc3R5bGVfc2hlZXRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NU3R5bGVTaGVldCogc2Vs
ZiA9IFdFQktJVF9ET01fU1RZTEVfU0hFRVQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9jb250ZW50X3R5cGUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2Rpc2FibGVkKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09XTkVSX05PREU6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfb3du
ZXJfbm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVJFTlRfU1RZ
TEVfU0hFRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9z
dHlsZV9zaGVldF9nZXRfcGFyZW50X3N0eWxlX3NoZWV0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2hyZWYoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfVElUTEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3RpdGxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX01FRElBOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X21lZGlhKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2NvbnN0cnVjdG9yKEdUeXBl
IHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBh
cmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KworICAgIFdlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlM
RV9TSEVFVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTdHlsZVNoZWV0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2NsYXNzX2luaXQoV2ViS2l0RE9NU3R5bGVTaGVl
dENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2Nv
bnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3N0eWxl
X3NoZWV0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9zdHlsZV9zaGVldF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
InR5cGUiLAorICAgICAgICAgICAgIlN0eWxlU2hlZXQ6dHlwZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBTdHlsZVNoZWV0OnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNBQkxF
RCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGlzYWJsZWQi
LAorICAgICAgICAgICAgIlN0eWxlU2hlZXQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2Jvb2xlYW4gU3R5bGVTaGVldDpkaXNhYmxlZCIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9PV05FUl9OT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
Im93bmVyLW5vZGUiLAorICAgICAgICAgICAgIlN0eWxlU2hlZXQ6b3duZXItbm9kZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIFN0eWxlU2hlZXQ6b3duZXItbm9kZSIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBUkVOVF9TVFlMRV9TSEVFVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwYXJlbnQtc3R5bGUt
c2hlZXQiLAorICAgICAgICAgICAgIlN0eWxlU2hlZXQ6cGFyZW50LXN0eWxlLXNoZWV0IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NU3R5bGVTaGVldCogU3R5bGVTaGVldDpwYXJl
bnQtc3R5bGUtc2hlZXQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVU
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfSFJFRiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJocmVm
IiwKKyAgICAgICAgICAgICJTdHlsZVNoZWV0OmhyZWYiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnY2hhciogU3R5bGVTaGVldDpocmVmIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVElUTEUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGl0bGUiLAorICAgICAgICAg
ICAgIlN0eWxlU2hlZXQ6dGl0bGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogU3R5
bGVTaGVldDp0aXRsZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FRElBLAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm1lZGlhIiwKKyAgICAgICAgICAgICJTdHlsZVNo
ZWV0Om1lZGlhIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTWVkaWFMaXN0KiBT
dHlsZVNoZWV0Om1lZGlhIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9NRURJQV9MSVNU
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9pbml0KFdlYktpdERPTVN0eWxlU2hlZXQqIHJlcXVl
c3QpCit7CisgICAgV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X1NUWUxFX1NIRUVUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0
RE9NU3R5bGVTaGVldFByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3R5bGVfc2hl
ZXRfZ2V0X2NvbnRlbnRfdHlwZShXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpT
dHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfZGlzYWJsZWQoV2ViS2l0
RE9NU3R5bGVTaGVldCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9T
SEVFVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlN0eWxlU2hlZXQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+ZGlzYWJsZWQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfc2V0
X2Rpc2FibGVkKFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfU1RZTEVfU0hFRVQoc2VsZikpOworICAgIFdlYkNvcmU6OlN0
eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0RGlzYWJs
ZWQodmFsdWUpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dl
dF9vd25lcl9ub2RlKFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfU1RZTEVfU0hFRVQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlU2hl
ZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5vd25lck5vZGUoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01TdHls
ZVNoZWV0KiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9wYXJlbnRfc3R5bGVfc2hlZXQoV2Vi
S2l0RE9NU3R5bGVTaGVldCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlM
RV9TSEVFVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3R5bGVTaGVldCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3R5bGVTaGVldD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBhcmVudFN0eWxlU2hlZXQoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9zdHlsZV9zaGVldF9nZXRfaHJlZihXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpTdHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhyZWYoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3RpdGxlKFdlYktpdERP
TVN0eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RZTEVfU0hF
RVQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
dGl0bGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTWVkaWFMaXN0KiB3
ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9tZWRpYShXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpTdHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpNZWRpYUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5tZWRpYSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3Zjc5MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NU3R5bGVTaGVldC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Vi
a2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRET01TdHlsZVNoZWV0X2gKKyNkZWZpbmUgV2ViS2l0RE9NU3R5bGVTaGVldF9oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVUICAgICAgICAgICAg
KHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9T
VFlMRV9TSEVFVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQsIFdlYktpdERPTVN0eWxlU2hlZXQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVCwgV2Vi
S2l0RE9NU3R5bGVTaGVldENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVU
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9TVFlMRV9TSEVFVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1RZTEVfU0hFRVRf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX1NUWUxFX1NIRUVUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfU1RZTEVfU0hFRVQsIFdlYktpdERPTVN0eWxlU2hlZXRDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NU3R5bGVTaGVldCB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NU3R5bGVTaGVldENsYXNzIHsKKyAgICBXZWJLaXRE
T01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX3N0eWxlX3NoZWV0X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
c3R5bGVfc2hlZXRfZ2V0X2NvbnRlbnRfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHls
ZVNoZWV0CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2NvbnRlbnRfdHlwZShXZWJLaXRET01TdHlsZVNo
ZWV0KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9kaXNhYmxl
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0CisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9zdHlsZV9zaGVl
dF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9zdHlsZV9zaGVldF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
U3R5bGVTaGVldAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X3NldF9kaXNhYmxlZChXZWJLaXRET01TdHlsZVNo
ZWV0KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9zdHlsZV9z
aGVldF9nZXRfb3duZXJfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X293bmVy
X25vZGUoV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9z
dHlsZV9zaGVldF9nZXRfcGFyZW50X3N0eWxlX3NoZWV0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVN0eWxlU2hlZXQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TVN0eWxlU2hlZXQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01TdHlsZVNoZWV0Kgord2Via2l0
X2RvbV9zdHlsZV9zaGVldF9nZXRfcGFyZW50X3N0eWxlX3NoZWV0KFdlYktpdERPTVN0eWxlU2hl
ZXQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2hyZWY6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9ocmVm
KFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3R5bGVf
c2hlZXRfZ2V0X3RpdGxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0eWxlU2hlZXQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9z
dHlsZV9zaGVldF9nZXRfdGl0bGUoV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfbWVkaWE6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NTWVkaWFMaXN0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTWVkaWFMaXN0Kgord2Via2l0
X2RvbV9zdHlsZV9zaGVldF9nZXRfbWVkaWEoV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZik7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01TdHlsZVNoZWV0X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2NmIwZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuY3BwCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NU3R5bGVTaGVldExpc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NU3R5bGVTaGVldExpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NU3R5bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
I2RlZmluZSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJU1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVRf
TElTVCwgV2ViS2l0RE9NU3R5bGVTaGVldExpc3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NU3R5bGVTaGVldExpc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3R5
bGVTaGVldExpc3Q+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVN0eWxlU2hlZXRMaXN0KiBraXQo
V2ViQ29yZTo6U3R5bGVTaGVldExpc3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUKHJldCk7CisK
KyAgICByZXR1cm4gd3JhcFN0eWxlU2hlZXRMaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6OlN0eWxl
U2hlZXRMaXN0KiBjb3JlKFdlYktpdERPTVN0eWxlU2hlZXRMaXN0KiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3R5bGVTaGVldExpc3QqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRE
T01TdHlsZVNoZWV0TGlzdCogd3JhcFN0eWxlU2hlZXRMaXN0KFdlYkNvcmU6OlN0eWxlU2hlZXRM
aXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
U1RZTEVfU0hFRVRfTElTVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01TdHls
ZVNoZWV0TGlzdCwgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0LCBXRUJLSVRfRE9NX1RZUEVf
T0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQoreworICAgIFdlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fU1RZTEVfU0hFRVRfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisg
ICAgcHJpdi0+fldlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3Rf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NU3R5bGVTaGVldExpc3Qq
IHNlbGYgPSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVf
c2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfZ2V0X2xlbmd0aChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9zdHlsZV9z
aGVldF9saXN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQorewor
ICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc3R5bGVfc2hl
ZXRfbGlzdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NU3R5bGVTaGVl
dExpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUX0dFVF9QUklW
QVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlN0eWxlU2hlZXRMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCks
IG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3N0eWxlX3NoZWV0X2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01TdHlsZVNoZWV0TGlzdENs
YXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUpKTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9zdHlsZV9zaGVldF9s
aXN0X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9t
X3N0eWxlX3NoZWV0X2xpc3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAg
ICAgImxlbmd0aCIsCisgICAgICAgICAgICAiU3R5bGVTaGVldExpc3Q6bGVuZ3RoIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFN0eWxlU2hlZXRMaXN0Omxlbmd0aCIsCisgICAgICAg
ICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2luaXQo
V2ViS2l0RE9NU3R5bGVTaGVldExpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NU3R5bGVT
aGVldExpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUX0dFVF9Q
UklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NU3R5bGVTaGVldExpc3RQ
cml2YXRlKCk7Cit9CisKK1dlYktpdERPTVN0eWxlU2hlZXQqIHdlYmtpdF9kb21fc3R5bGVfc2hl
ZXRfbGlzdF9pdGVtKFdlYktpdERPTVN0eWxlU2hlZXRMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RZTEVfU0hFRVRfTElTVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6U3R5bGVTaGVldExpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0eWxlU2hlZXQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2dl
dF9sZW5ndGgoV2ViS2l0RE9NU3R5bGVTaGVldExpc3QqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfU1RZTEVfU0hFRVRfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3R5
bGVTaGVldExpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3Vs
dCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3R5bGVTaGVldExpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2M2NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01TdHlsZVNoZWV0TGlzdC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVm
aW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20u
aD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERP
TVN0eWxlU2hlZXRMaXN0X2gKKyNkZWZpbmUgV2ViS2l0RE9NU3R5bGVTaGVldExpc3RfaAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNUICAgICAg
ICAgICAgKHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVUX0xJU1QsIFdl
YktpdERPTVN0eWxlU2hlZXRMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9M
SVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNULCBXZWJLaXRET01TdHlsZVNoZWV0TGlzdENs
YXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUX0xJU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUWUxF
X1NIRUVUX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUX0xJU1RfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1NUWUxFX1NIRUVUX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJ
U1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVUX0xJU1QsIFdlYktpdERPTVN0eWxlU2hlZXRMaXN0Q2xh
c3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVN0eWxlU2hlZXRMaXN0IHsKKyAgICBXZWJLaXRET01P
YmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01TdHlsZVNoZWV0
TGlzdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2l0ZW06CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NU3R5bGVTaGVldExpc3QKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01TdHlsZVNoZWV0Cisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3R5bGVTaGVldCoKK3dlYmtpdF9kb21fc3R5bGVfc2hl
ZXRfbGlzdF9pdGVtKFdlYktpdERPTVN0eWxlU2hlZXRMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgp
OworCisvKioKKyAqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9nZXRfbGVuZ3RoOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVN0eWxlU2hlZXRMaXN0CisgKgorICogUmV0dXJuczogQSAjZ3Vs
b25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3Rf
Z2V0X2xlbmd0aChXZWJLaXRET01TdHlsZVNoZWV0TGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXZWJLaXRET01TdHlsZVNoZWV0TGlzdF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGRiYjkxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVN0eWxlU2hl
ZXRMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlU2hlZXRMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2Vi
S2l0RE9NU3R5bGVTaGVldExpc3QqIHdyYXBTdHlsZVNoZWV0TGlzdChXZWJDb3JlOjpTdHlsZVNo
ZWV0TGlzdCopOworV2ViS2l0RE9NU3R5bGVTaGVldExpc3QqIGtpdChXZWJDb3JlOjpTdHlsZVNo
ZWV0TGlzdCopOworV2ViQ29yZTo6U3R5bGVTaGVldExpc3QqIGNvcmUoV2ViS2l0RE9NU3R5bGVT
aGVldExpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9N
U3R5bGVTaGVldExpc3RQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lZjZiMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01TdHlsZVNoZWV0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlU2hlZXQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NU3R5bGVTaGVldC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTVN0eWxlU2hlZXQqIHdyYXBTdHlsZVNoZWV0KFdlYkNvcmU6OlN0
eWxlU2hlZXQqKTsKK1dlYktpdERPTVN0eWxlU2hlZXQqIGtpdChXZWJDb3JlOjpTdHlsZVNoZWV0
Kik7CitXZWJDb3JlOjpTdHlsZVNoZWV0KiBjb3JlKFdlYktpdERPTVN0eWxlU2hlZXQqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NU3R5bGVTaGVldFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA3Mjk2NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVGV4dC5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0Lmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01UZXh0KiBraXQoV2ViQ29yZTo6
VGV4dCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX1RFWFQoa2l0KHN0YXRpY19jYXN0
PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OlRleHQqIGNvcmUoV2ViS2l0
RE9NVGV4dCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlRleHQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01UZXh0KiB3cmFwVGV4dChXZWJDb3JlOjpUZXh0KiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVhU
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVYVCwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21fdGV4dF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlm
ICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6VGV4dCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29y
ZTo6VGV4dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHQqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV90ZXh0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OlRleHQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBp
ZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX3RleHRfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGV4dF9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
dGV4dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdERPTVRleHQsIHdlYmtpdF9kb21fdGV4dCwgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RF
Ul9EQVRBLCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdF
VCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX1dIT0xFX1RFWFQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGV4dCogc2VsZiA9IFdF
QktJVF9ET01fVEVYVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX1dIT0xFX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fdGV4dF9nZXRfd2hvbGVfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfY2xhc3NfaW5pdChXZWJLaXRET01UZXh0Q2xhc3Mq
IHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX3RleHRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dIT0xF
X1RFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAid2hvbGUt
dGV4dCIsCisgICAgICAgICAgICAiVGV4dDp3aG9sZS10ZXh0IiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2NoYXIqIFRleHQ6d2hvbGUtdGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGV4dF9pbml0KFdlYktpdERPTVRleHQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3QpOworfQorCitXZWJLaXRET01UZXh0KiB3ZWJraXRfZG9tX3RleHRfc3BsaXRfdGV4
dChXZWJLaXRET01UZXh0KiBzZWxmLCBndWxvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6VGV4dCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPnNwbGl0VGV4dChvZmZzZXQsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGV4dF9nZXRf
d2hvbGVfdGV4dChXZWJLaXRET01UZXh0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFWFQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
d2hvbGVUZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VGV4dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01UZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZDY3NDIxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dC5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERP
TV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkg
PHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERPTVRleHRfaAorI2RlZmluZSBXZWJLaXRET01UZXh0X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNo
YXJhY3RlckRhdGEuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFWFQgICAgICAgICAg
ICAod2Via2l0X2RvbV90ZXh0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfVEVYVCwgV2ViS2l0RE9NVGV4dCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVEVYVCwgV2ViS2l0RE9NVGV4dENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X1RFWFQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFWFQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFWFRfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
WFQpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFQsIFdlYktpdERPTVRl
eHRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGV4dCB7CisgICAgV2ViS2l0RE9NQ2hhcmFj
dGVyRGF0YSBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRleHRDbGFz
cyB7CisgICAgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YUNsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGV4dF9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3RleHRfc3BsaXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXh0CisgKiBAb2Zmc2V0OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGV4dAorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTVRleHQqCit3ZWJraXRfZG9tX3RleHRfc3BsaXRfdGV4dChXZWJLaXRET01UZXh0
KiBzZWxmLCBndWxvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV90ZXh0X2dldF93aG9sZV90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV90ZXh0X2dldF93aG9sZV90ZXh0KFdlYktpdERPTVRleHQqIHNlbGYpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVRleHRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWVkNDc3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFByaXZhdGUuaApA
QCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTVRleHRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGV4dFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TVRleHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXh0KiB3cmFwVGV4dChX
ZWJDb3JlOjpUZXh0Kik7CitXZWJLaXRET01UZXh0KiBraXQoV2ViQ29yZTo6VGV4dCopOworV2Vi
Q29yZTo6VGV4dCogY29yZShXZWJLaXRET01UZXh0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTVRleHRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VGV4dFRyYWNrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xMjNiNTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2su
Y3BwCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrLmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktp
dERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01UZXh0VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0dFVF9QUklWQVRFKG9iaikgR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0ssIFdl
YktpdERPTVRleHRUcmFja1ByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0
VHJhY2tQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgUmVmUHRyPFdlYkNv
cmU6OlRleHRUcmFjaz4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0sp
Cit9IFdlYktpdERPTVRleHRUcmFja1ByaXZhdGU7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01UZXh0VHJhY2sqIGtpdChXZWJDb3Jl
OjpUZXh0VHJhY2sqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9URVhUX1RSQUNLKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFRl
eHRUcmFjayhvYmopOworfQorCitXZWJDb3JlOjpUZXh0VHJhY2sqIGNvcmUoV2ViS2l0RE9NVGV4
dFRyYWNrKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGV4dFRyYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NVGV4dFRyYWNrKiB3cmFwVGV4dFRyYWNrKFdlYkNvcmU6OlRl
eHRUcmFjayogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fVEVYVF9UUkFDSyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RF
WFRfVFJBQ0ssICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6RXZlbnQqIGNv
cmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2sqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygq
Y29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRp
b24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7
CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJM
RShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGV4dF90cmFj
a19hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3Qg
Y2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkK
K3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6VGV4dFRyYWNrKiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrKj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFN
KGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fdGV4dF90cmFja19yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29y
ZTo6VGV4dFRyYWNrKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNr
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFt
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0
dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIp
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRh
cmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21fdGV4dF90cmFja19hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGV4dF90cmFja19yZW1vdmVf
ZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVRl
eHRUcmFjaywgd2Via2l0X2RvbV90ZXh0X3RyYWNrLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNULCBH
X0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9Q
X0lELAorICAgIFBST1BfTEFCRUwsCisgICAgUFJPUF9MQU5HVUFHRSwKKyAgICBQUk9QX0lOX0JB
TkRfTUVUQURBVEFfVFJBQ0tfRElTUEFUQ0hfVFlQRSwKKyAgICBQUk9QX0NVRVMsCisgICAgUFJP
UF9BQ1RJVkVfQ1VFUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19HRVRfUFJJVkFURShvYmplY3QpOworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQo
cHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIHByaXYtPn5XZWJLaXRET01UZXh0VHJhY2tQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXh0X3RyYWNrX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2sqIHNlbGYgPSBXRUJLSVRfRE9NX1RF
WFRfVFJBQ0sob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9JRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90
ZXh0X3RyYWNrX2dldF9pZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9M
QUJFTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2dldF9sYWJlbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9M
QU5HVUFHRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90
ZXh0X3RyYWNrX2dldF9sYW5ndWFnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9JTl9CQU5EX01FVEFEQVRBX1RSQUNLX0RJU1BBVENIX1RZUEU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfaW5fYmFuZF9t
ZXRhZGF0YV90cmFja19kaXNwYXRjaF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0NVRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV90ZXh0X3RyYWNrX2dldF9jdWVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0FDVElWRV9DVUVTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21fdGV4dF90cmFja19nZXRfYWN0aXZlX2N1ZXMoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGV4dF90cmFja19jb25zdHJ1Y3RvcihHVHlw
ZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQ
YXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RleHRfdHJhY2tfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19HRVRfUFJJVkFURShvYmplY3QpOworICAgIHBy
aXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2sqPihXRUJLSVRf
RE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2NsYXNzX2luaXQoV2ViS2l0RE9NVGV4dFRyYWNrQ2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmpl
Y3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRleHRUcmFja1ByaXZhdGUpKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2NvbnN0cnVjdG9yOwor
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZmluYWxp
emU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lELAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImlkIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2s6
aWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGV4dFRyYWNrOmlkIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfTEFCRUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAibGFiZWwiLAorICAgICAgICAgICAgIlRleHRUcmFjazpsYWJlbCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdjaGFyKiBUZXh0VHJhY2s6bGFiZWwiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
QU5HVUFHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsYW5n
dWFnZSIsCisgICAgICAgICAgICAiVGV4dFRyYWNrOmxhbmd1YWdlIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIFRleHRUcmFjazpsYW5ndWFnZSIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lO
X0JBTkRfTUVUQURBVEFfVFJBQ0tfRElTUEFUQ0hfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJpbi1iYW5kLW1ldGFkYXRhLXRyYWNrLWRpc3BhdGNoLXR5
cGUiLAorICAgICAgICAgICAgIlRleHRUcmFjazppbi1iYW5kLW1ldGFkYXRhLXRyYWNrLWRpc3Bh
dGNoLXR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGV4dFRyYWNrOmluLWJh
bmQtbWV0YWRhdGEtdHJhY2stZGlzcGF0Y2gtdHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NVRVMs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY3VlcyIsCisgICAg
ICAgICAgICAiVGV4dFRyYWNrOmN1ZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01UZXh0VHJhY2tDdWVMaXN0KiBUZXh0VHJhY2s6Y3VlcyIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfVEVYVF9UUkFDS19DVUVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FDVElWRV9DVUVTLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImFjdGl2ZS1jdWVzIiwKKyAgICAgICAgICAg
ICJUZXh0VHJhY2s6YWN0aXZlLWN1ZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01UZXh0VHJhY2tDdWVMaXN0KiBUZXh0VHJhY2s6YWN0aXZlLWN1ZXMiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfaW5pdChXZWJLaXRET01UZXh0VHJhY2sqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGV4
dFRyYWNrUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19HRVRfUFJJVkFURShy
ZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVRleHRUcmFja1ByaXZhdGUoKTsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfYWRkX2N1ZShXZWJLaXRET01UZXh0VHJhY2sq
IHNlbGYsIFdlYktpdERPTVRleHRUcmFja0N1ZSogY3VlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUo
Y3VlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2Vi
Q29yZTo6VGV4dFRyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6
OlRleHRUcmFja0N1ZSogY29udmVydGVkQ3VlID0gV2ViS2l0Ojpjb3JlKGN1ZSk7CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+YWRkQ3VlKGNvbnZlcnRlZEN1
ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9Q
QVJBTShjdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19U
UkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfcmVtb3ZlX2N1ZShXZWJL
aXRET01UZXh0VHJhY2sqIHNlbGYsIFdlYktpdERPTVRleHRUcmFja0N1ZSogY3VlLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVhUX1RSQUNLKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVYVF9UUkFDS19DVUUoY3VlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvcik7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZSogY29udmVydGVkQ3VlID0gV2ViS2l0Ojpjb3Jl
KGN1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+cmVt
b3ZlQ3VlKGNvbnZlcnRlZEN1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFVOVVNFRF9QQVJBTShjdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlm
IC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGV4dF90
cmFja19nZXRfaWQoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aWQoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfZ2V0X2xhYmVsKFdlYktpdERPTVRleHRUcmFjayogc2VsZikKK3sKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDSyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxhYmVsKCkp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0
dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2dldF9sYW5ndWFnZShXZWJLaXRET01UZXh0VHJhY2sqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
WFRfVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFjayogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5sYW5ndWFnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8K
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfaW5fYmFuZF9tZXRhZGF0YV90
cmFja19kaXNwYXRjaF90eXBlKFdlYktpdERPTVRleHRUcmFjayogc2VsZikKK3sKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDSyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmluQmFuZE1l
dGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCit9CisKK1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHdlYmtpdF9kb21fdGV4
dF90cmFja19nZXRfY3VlcyhXZWJLaXRET01UZXh0VHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0soc2VsZiks
IDApOworICAgIFdlYkNvcmU6OlRleHRUcmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmN1ZXMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlTGlzdCogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9hY3RpdmVfY3VlcyhXZWJLaXRET01U
ZXh0VHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFj
ayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRy
YWNrQ3VlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmFjdGl2ZUN1ZXMo
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURF
T19UUkFDSykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2suaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4
dFRyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxM2EzZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGV4dFRyYWNrX2gK
KyNkZWZpbmUgV2ViS2l0RE9NVGV4dFRyYWNrX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLICAgICAgICAgICAgKHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0sob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0ssIFdl
YktpdERPTVRleHRUcmFjaykpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfVEVYVF9UUkFDSywgV2ViS2l0RE9NVGV4dFRyYWNrQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVYVF9UUkFDSyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDSykpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVYVF9UUkFDS19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDSykpCisjZGVmaW5lIFdFQktJVF9ET01fVEVY
VF9UUkFDS19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDSywgV2ViS2l0RE9NVGV4dFRyYWNrQ2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFjayB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVu
dF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrQ2xhc3MgeworICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fdGV4dF90cmFja19nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3RleHRfdHJhY2tfYWRkX2N1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJh
Y2sKKyAqIEBjdWU6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQorICogQGVycm9yOiAjR0Vycm9y
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fdGV4dF90cmFja19hZGRfY3VlKFdlYktpdERPTVRleHRUcmFjayogc2VsZiwgV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlKiBjdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfcmVtb3ZlX2N1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJh
Y2sKKyAqIEBjdWU6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQorICogQGVycm9yOiAjR0Vycm9y
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fdGV4dF90cmFja19yZW1vdmVfY3VlKFdlYktpdERPTVRleHRUcmFjayogc2VsZiwgV2Vi
S2l0RE9NVGV4dFRyYWNrQ3VlKiBjdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3RleHRfdHJhY2tfZ2V0X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFj
aworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9pZChXZWJL
aXRET01UZXh0VHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19n
ZXRfbGFiZWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2xhYmVsKFdlYktpdERPTVRleHRUcmFj
ayogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9sYW5ndWFnZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21fdGV4dF90cmFja19nZXRfbGFuZ3VhZ2UoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2luX2JhbmRfbWV0YWRhdGFf
dHJhY2tfZGlzcGF0Y2hfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2sKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGV4dF90cmFja19nZXRfaW5fYmFuZF9tZXRh
ZGF0YV90cmFja19kaXNwYXRjaF90eXBlKFdlYktpdERPTVRleHRUcmFjayogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9jdWVzOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVRleHRUcmFjaworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0Kgord2Via2l0X2RvbV90ZXh0X3RyYWNr
X2dldF9jdWVzKFdlYktpdERPTVRleHRUcmFjayogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV90ZXh0X3RyYWNrX2dldF9hY3RpdmVfY3VlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0
VHJhY2sKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRleHRU
cmFja0N1ZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCoKK3dlYmtpdF9kb21fdGV4dF90cmFja19nZXRfYWN0
aXZlX2N1ZXMoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERP
TVRleHRUcmFja19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFja0N1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUy
ZDY4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlLmNwcApAQCAtMCwwICsx
LDQzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja0N1ZS5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVRleHRUcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tf
Q1VFLCBXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFJlZlB0cjxXZWJDb3JlOjpUZXh0VHJhY2tDdWU+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorfSBXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlOworCisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlKiBraXQoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBvYmopCit7CisgICAgaWYgKCFv
YmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVj
dENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVYVF9UUkFDS19D
VUUocmV0KTsKKworICAgIHJldHVybiB3cmFwKG9iaik7Cit9CisKK1dlYkNvcmU6OlRleHRUcmFj
a0N1ZSogY29yZShXZWJLaXRET01UZXh0VHJhY2tDdWUqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tDdWUqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01UZXh0VHJh
Y2tDdWUqIHdyYXBUZXh0VHJhY2tDdWUoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVhU
X1RSQUNLX0NVRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFLCAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQor
eworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50
ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZSogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0N1ZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsK
KyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxF
KFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X3RyYWNr
X2N1ZV9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3Vl
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlKj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlRleHRUcmFja0N1ZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVO
VVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBV
TlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU9fVFJBQ0spCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9kaXNwYXRjaF9ldmVudDsKKyAg
ICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9h
ZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21fdGV4dF90cmFja19jdWVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01UZXh0VHJhY2tDdWUsIHdlYmtpdF9kb21fdGV4
dF90cmFja19jdWUsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVFJBQ0ssCisgICAgUFJPUF9J
RCwKKyAgICBQUk9QX1NUQVJUX1RJTUUsCisgICAgUFJPUF9FTkRfVElNRSwKKyAgICBQUk9QX1BB
VVNFX09OX0VYSVQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3Vl
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2tDdWVQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9HRVRfUFJJVkFURShvYmpl
Y3QpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
Ojpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIHByaXYtPn5XZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlKCk7CisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRleHRU
cmFja0N1ZSogc2VsZiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUUob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9JRDoKKyAgICAgICAgd2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfaWQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEFSVF9USU1FOgorICAgICAgICB3
ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9zdGFydF90aW1lKHNlbGYsIGdfdmFsdWVfZ2V0
X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RU5EX1RJTUU6CisgICAgICAgIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X2VuZF90aW1l
KHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUEFVU0VfT05fRVhJVDoKKyAgICAgICAgd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2N1ZV9zZXRfcGF1c2Vfb25fZXhpdChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRleHRUcmFja0N1
ZSogc2VsZiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUUob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9UUkFDSzoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF90cmFjayhzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JRDoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfaWQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RBUlRfVElNRToKKyAgICAgICAgZ192
YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9zdGFy
dF90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VORF9USU1FOgor
ICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfZ2V0X2VuZF90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BB
VVNFX09OX0VYSVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21fdGV4dF90cmFja19jdWVfZ2V0X3BhdXNlX29uX2V4aXQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfY29uc3RydWN0b3Io
R1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3Ry
dWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0g
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXRET01UZXh0VHJhY2tD
dWVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9HRVRfUFJJVkFURShv
YmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0
VHJhY2tDdWUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0
KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcmV0dXJuIG9iamVjdDsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9jbGFzc19pbml0KFdlYktp
dERPTVRleHRUcmFja0N1ZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXh0VHJh
Y2tDdWVQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9k
b21fdGV4dF90cmFja19jdWVfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RSQUNLLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInRyYWNrIiwKKyAgICAgICAgICAgICJUZXh0
VHJhY2tDdWU6dHJhY2siLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXh0VHJh
Y2sqIFRleHRUcmFja0N1ZTp0cmFjayIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVY
VF9UUkFDSywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0lELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImlkIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2tDdWU6aWQiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIFRleHRUcmFja0N1ZTppZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVEFSVF9U
SU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgInN0YXJ0LXRp
bWUiLAorICAgICAgICAgICAgIlRleHRUcmFja0N1ZTpzdGFydC10aW1lIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdkb3VibGUgVGV4dFRyYWNrQ3VlOnN0YXJ0LXRpbWUiLAorICAgICAgICAg
ICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9FTkRfVElNRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJlbmQtdGltZSIsCisgICAgICAgICAgICAi
VGV4dFRyYWNrQ3VlOmVuZC10aW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUg
VGV4dFRyYWNrQ3VlOmVuZC10aW1lIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhE
T1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfUEFVU0VfT05fRVhJVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAicGF1c2Utb24tZXhpdCIsCisgICAgICAgICAgICAiVGV4dFRyYWNrQ3Vl
OnBhdXNlLW9uLWV4aXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gVGV4dFRy
YWNrQ3VlOnBhdXNlLW9uLWV4aXQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXh0X3RyYWNrX2N1ZV9pbml0KFdlYktpdERPTVRleHRUcmFja0N1ZSogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RS
QUNLX0NVRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
eHRUcmFja0N1ZVByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NVGV4dFRyYWNrKiB3ZWJraXRfZG9t
X3RleHRfdHJhY2tfY3VlX2dldF90cmFjayhXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRf
VFJBQ0tfQ1VFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRUcmFjaz4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRyYWNrKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAg
ICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9pZChXZWJLaXRET01UZXh0VHJhY2tDdWUq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFWFRfVFJBQ0tfQ1VFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+aWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJB
Q0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfaWQoV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1
ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0SWQoY29u
dmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRl
byBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnZG91Ymxl
IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3N0YXJ0X3RpbWUoV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRy
YWNrQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0g
aXRlbS0+c3RhcnRUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IFRyYWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19j
dWVfc2V0X3N0YXJ0X3RpbWUoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBzZWxmLCBnZG91YmxlIHZh
bHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPnNldFN0YXJ0VGltZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFj
ayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnZG91YmxlIHdlYmtp
dF9kb21fdGV4dF90cmFja19jdWVfZ2V0X2VuZF90aW1lKFdlYktpdERPTVRleHRUcmFja0N1ZSog
c2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVYVF9UUkFDS19DVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmVu
ZFRpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfZW5k
X3RpbWUoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVhUX1RSQUNLX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvcik7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNl
dEVuZFRpbWUodmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8q
IEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X3Ry
YWNrX2N1ZV9nZXRfcGF1c2Vfb25fZXhpdChXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRf
VFJBQ0tfQ1VFKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnBhdXNl
T25FeGl0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShW
SURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9w
YXVzZV9vbl9leGl0KFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
Cit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9U
UkFDS19DVUUoc2VsZikpOworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRQYXVzZU9uRXhpdCh2YWx1ZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBF
TkFCTEUoVklERU9fVFJBQ0spICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVRleHRUcmFja0N1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmMzNDhkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZS5oCkBAIC0w
LDAgKzEsMTUwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTVRleHRUcmFja0N1ZV9oCisjZGVmaW5lIFdlYktpdERPTVRleHRUcmFja0N1ZV9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUUgICAgICAgICAgICAod2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RF
WFRfVFJBQ0tfQ1VFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRSwgV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9U
UkFDS19DVUUsIFdlYktpdERPTVRleHRUcmFja0N1ZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX1RFWFRfVFJBQ0tfQ1VFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRSkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVYVF9UUkFDS19DVUVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUUsIFdlYktp
dERPTVRleHRUcmFja0N1ZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tDdWUg
eworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTVRleHRUcmFja0N1ZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVf
Z2V0X3RyYWNrOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVGV4dFRyYWNrCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRleHRUcmFjayoKK3dl
YmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3RyYWNrKFdlYktpdERPTVRleHRUcmFja0N1ZSog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfaWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9pZChXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X2lkOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX3NldF9pZChXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfc3RhcnRf
dGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAqCisgKiBSZXR1cm5z
OiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdkb3VibGUKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3N0YXJ0X3RpbWUoV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX3NldF9zdGFydF90aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQor
ICogQHZhbHVlOiBBICNnZG91YmxlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXh0X3RyYWNr
X2N1ZV9zZXRfc3RhcnRfdGltZShXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYsIGdkb3VibGUg
dmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX2dldF9lbmRfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAq
CisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X2VuZF90
aW1lKFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90
ZXh0X3RyYWNrX2N1ZV9zZXRfZW5kX3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlCisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfY3VlX3NldF9lbmRfdGltZShXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYsIGdk
b3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX2dldF9wYXVzZV9vbl9leGl0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRU
cmFja0N1ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX2dldF9wYXVzZV9vbl9leGl0KFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfcGF1c2Vfb25fZXhpdDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV90ZXh0X3RyYWNrX2N1ZV9zZXRfcGF1c2Vfb25fZXhpdChXZWJLaXRET01UZXh0VHJhY2tDdWUq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVRleHRUcmFja0N1
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0
VHJhY2tDdWVMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njg0
NGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0LmNwcApAQCAtMCww
ICsxLDE5MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja0N1ZUxpc3QuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlLmgiCisjaW5j
bHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NV
RV9MSVNUX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwg
V0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFX0xJU1QsIFdlYktpdERPTVRleHRUcmFja0N1
ZUxpc3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlz
dFByaXZhdGUgeworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBSZWZQdHI8V2ViQ29yZTo6
VGV4dFRyYWNrQ3VlTGlzdD4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJB
Q0spCit9IFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRlOworCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
TGlzdCoga2l0KFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqIG9iaikKK3sKKyAgICBpZiAoIW9i
aikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0
Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NV
RV9MSVNUKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFRleHRUcmFja0N1ZUxpc3Qob2JqKTsKK30K
KworV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdCogY29yZShXZWJLaXRET01UZXh0VHJhY2tDdWVM
aXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHdyYXBUZXh0VHJhY2tD
dWVMaXN0KFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNT
RVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJ
U1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRV9MSVNULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCitHX0RFRklORV9UWVBFKFdl
YktpdERPTVRleHRUcmFja0N1ZUxpc3QsIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdCwg
V0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
TEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2tDdWVM
aXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUVfTElTVF9HRVRfUFJJ
VkFURShvYmplY3QpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgIHByaXYtPn5XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJp
dmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlz
dF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCogc2VsZiA9IFdFQktJVF9ET01fVEVYVF9UUkFD
S19DVUVfTElTVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9k
b21fdGV4dF90cmFja19jdWVfbGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfY29uc3RydWN0
b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29u
c3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0
ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3Ry
dWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdERPTVRl
eHRUcmFja0N1ZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9M
SVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3Qp
LT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNr
X2N1ZV9saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdENsYXNzKiByZXF1
ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0
Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZSkpOworICAgIGdv
YmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3Rf
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGV4
dF90cmFja19jdWVfbGlzdF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9nZXRfcHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAg
ICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2tDdWVMaXN0Omxlbmd0aCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBUZXh0VHJhY2tDdWVMaXN0Omxlbmd0aCIsCisg
ICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9s
aXN0X2luaXQoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJL
aXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFD
S19DVUVfTElTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERP
TVRleHRUcmFja0N1ZUxpc3RQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTVRleHRUcmFja0N1ZSog
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2l0ZW0oV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
TGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRV9MSVNUKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0VHJhY2tDdWU+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRl
byBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAq
LworfQorCitXZWJLaXRET01UZXh0VHJhY2tDdWUqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVf
bGlzdF9nZXRfY3VlX2J5X2lkKFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHNlbGYsIGNvbnN0
IGdjaGFyKiBpZCkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVYVF9UUkFDS19DVUVfTElTVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoaWQsIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkSWQgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgoaWQpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0VHJhY2tDdWU+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRDdWVCeUlkKGNvbnZlcnRlZElkKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7Cisj
ZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV90
ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCog
c2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVYVF9UUkFDS19DVUVfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0g
aXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU9fVFJBQ0spICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlz
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWZmODJmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlz
dC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTVRleHRU
cmFja0N1ZUxpc3RfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VF
X0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUVfTElTVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVY
VF9UUkFDS19DVUVfTElTVCwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCkpCisjZGVmaW5lIFdF
QktJVF9ET01fVEVYVF9UUkFDS19DVUVfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUVfTElT
VCwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X1RFWFRfVFJBQ0tfQ1VFX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VFX0xJU1QpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfQ1VF
X0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJU1RfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X1RFWFRfVFJBQ0tfQ1VFX0xJU1QsIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RDbGFzcykpCisK
K3N0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCB7CisgICAgV2ViS2l0RE9NT2JqZWN0
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlz
dENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2l0ZW06Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdAorICogQGluZGV4OiBBICNndWxv
bmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRleHRUcmFj
a0N1ZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01UZXh0VHJhY2tDdWUqCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfaXRlbShXZWJL
aXRET01UZXh0VHJhY2tDdWVMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9nZXRfY3VlX2J5X2lkOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QKKyAqIEBpZDogQSAjZ2NoYXIKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UZXh0VHJhY2tDdWUq
Cit3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X2N1ZV9ieV9pZChXZWJLaXRET01U
ZXh0VHJhY2tDdWVMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVRleHRUcmFja0N1ZUxpc3QKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfY3VlX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0KiBz
ZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVM
aXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODc2NWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRlLmgKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRleHRUcmFj
a0N1ZUxpc3RQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvVGV4dFRyYWNrQ3VlTGlzdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0Lmg+CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRleHRU
cmFja0N1ZUxpc3QqIHdyYXBUZXh0VHJhY2tDdWVMaXN0KFdlYkNvcmU6OlRleHRUcmFja0N1ZUxp
c3QqKTsKK1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIGtpdChXZWJDb3JlOjpUZXh0VHJhY2tD
dWVMaXN0Kik7CitXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0KiBjb3JlKFdlYktpdERPTVRleHRU
cmFja0N1ZUxpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxF
KFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFja0N1ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MDA2M2ZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlLmgK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRUcmFja0N1ZS5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXh0VHJhY2tDdWUuaD4KKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiB3
cmFwVGV4dFRyYWNrQ3VlKFdlYkNvcmU6OlRleHRUcmFja0N1ZSopOworV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlKiBraXQoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKik7CitXZWJDb3JlOjpUZXh0VHJhY2tD
dWUqIGNvcmUoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERP
TVRleHRUcmFja0N1ZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVGV4dFRyYWNrTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDE1YzJkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrTGlzdC5j
cHAKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tMaXN0LmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfTElTVF9HRVRf
UFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01f
VFlQRV9URVhUX1RSQUNLX0xJU1QsIFdlYktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUgeworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRyYWNrTGlzdD4gY29yZU9i
amVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9IFdlYktpdERPTVRleHRUcmFj
a0xpc3RQcml2YXRlOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCoga2l0KFdlYkNvcmU6OlRleHRUcmFja0xp
c3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
Z3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4g
V0VCS0lUX0RPTV9URVhUX1RSQUNLX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwVGV4dFRy
YWNrTGlzdChvYmopOworfQorCitXZWJDb3JlOjpUZXh0VHJhY2tMaXN0KiBjb3JlKFdlYktpdERP
TVRleHRUcmFja0xpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCkt
PmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCogd3JhcFRleHRU
cmFja0xpc3QoV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVEVYVF9UUkFDS19MSVNUKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19MSVNULCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV90ZXh0X3RyYWNrX2xpc3RfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6
Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBXZWJDb3JlOjpUZXh0VHJhY2tMaXN0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGV4dFRyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBk
ZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVT
RURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RS
QUNLKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfYWRk
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OlRleHRUcmFja0xpc3QqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BB
UkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21fdGV4dF90cmFja19saXN0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJDb3JlOjpUZXh0VHJhY2tMaXN0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6VGV4dFRyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVT
RURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU9fVFJBQ0spCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQo
V2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNo
X2V2ZW50ID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZGlzcGF0Y2hfZXZlbnQ7CisgICAg
aWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2Fk
ZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01UZXh0VHJhY2tMaXN0LCB3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfbGlzdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJG
QUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0
X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RFWFRfVFJBQ0tfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHByaXYt
Pn5XZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fdGV4dF90cmFja19saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRleHRUcmFja0xpc3QqIHNlbGYgPSBXRUJL
SVRfRE9NX1RFWFRfVFJBQ0tfTElTVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFs
dWUsIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2NvbnN0
cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVj
dENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9i
amVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3Ry
dWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdERPTVRl
eHRUcmFja0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0xJU1RfR0VU
X1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGV4dFRyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmpl
Y3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICByZXR1cm4g
b2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9jbGFz
c19pbml0KFdlYktpdERPTVRleHRUcmFja0xpc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVj
dG9yID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfY29uc3RydWN0b3I7CisgICAgZ29iamVj
dENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2ZpbmFsaXplOwor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xp
c3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAgICAiVGV4
dFRyYWNrTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgVGV4dFRy
YWNrTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGV4dF90cmFja19saXN0X2luaXQoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCogcmVxdWVzdCkK
K3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
VEVYVF9UUkFDS19MSVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2Vi
S2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NVGV4dFRyYWNrKiB3
ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9pdGVtKFdlYktpdERPTVRleHRUcmFja0xpc3QqIHNl
bGYsIGd1bG9uZyBpbmRleCkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpU
ZXh0VHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpUZXh0VHJhY2s+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGlu
ZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0
dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitXZWJLaXRET01U
ZXh0VHJhY2sqIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dldF90cmFja19ieV9pZChXZWJL
aXRET01UZXh0VHJhY2tMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogaWQpCit7CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfTElTVChz
ZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaWQsIDApOworICAgIFdlYkNvcmU6
OlRleHRUcmFja0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkSWQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoaWQpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpUZXh0VHJhY2s+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRU
cmFja0J5SWQoY29udmVydGVkSWQpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0oaWQpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9
CisKK2d1bG9uZyB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERP
TVRleHRUcmFja0xpc3QqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6VGV4dFRyYWNrTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcg
cmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRy
YWNrTGlzdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uN2YxZDFkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrTGlz
dC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTVRleHRUcmFj
a0xpc3RfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfTElTVCAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1RFWFRfVFJBQ0tfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19MSVNULCBXZWJL
aXRET01UZXh0VHJhY2tMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0xJU1Rf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1RFWFRfVFJBQ0tfTElTVCwgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdENsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfTElTVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19M
SVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0xJU1RfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRf
VFJBQ0tfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19MSVNUX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLX0xJU1QsIFdlYktpdERPTVRleHRUcmFja0xpc3RDbGFzcykpCisKK3N0cnVj
dCBfV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrTGlzdENsYXNzIHsKKyAg
ICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERP
TVRleHRUcmFja0xpc3QKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UZXh0VHJhY2sKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGV4dFRyYWNrKgord2Via2l0X2RvbV90
ZXh0X3RyYWNrX2xpc3RfaXRlbShXZWJLaXRET01UZXh0VHJhY2tMaXN0KiBzZWxmLCBndWxvbmcg
aW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dldF90cmFja19i
eV9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tMaXN0CisgKiBAaWQ6IEEgI2dj
aGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UZXh0VHJh
Y2sKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
VGV4dFRyYWNrKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZ2V0X3RyYWNrX2J5X2lkKFdl
YktpdERPTVRleHRUcmFja0xpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBpZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXh0VHJhY2tMaXN0CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV90ZXh0
X3RyYWNrX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01UZXh0VHJhY2tMaXN0KiBzZWxmKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwor
I2VuZGlmIC8qIFdlYktpdERPTVRleHRUcmFja0xpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01U
ZXh0VHJhY2tMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOGU3ZjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXh0VHJhY2tMaXN0UHJp
dmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dFRyYWNrTGlzdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01UZXh0VHJhY2tMaXN0Lmg+CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTVRleHRUcmFja0xpc3QqIHdyYXBUZXh0VHJhY2tMaXN0KFdlYkNv
cmU6OlRleHRUcmFja0xpc3QqKTsKK1dlYktpdERPTVRleHRUcmFja0xpc3QqIGtpdChXZWJDb3Jl
OjpUZXh0VHJhY2tMaXN0Kik7CitXZWJDb3JlOjpUZXh0VHJhY2tMaXN0KiBjb3JlKFdlYktpdERP
TVRleHRUcmFja0xpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5B
QkxFKFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRl
eHRUcmFja1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmQ4
Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tQcml2YXRlLmgKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01UZXh0VHJhY2tQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRUcmFjay5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01UZXh0VHJhY2suaD4KKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworV2ViS2l0RE9NVGV4dFRyYWNrKiB3cmFwVGV4dFRyYWNrKFdlYkNvcmU6OlRl
eHRUcmFjayopOworV2ViS2l0RE9NVGV4dFRyYWNrKiBraXQoV2ViQ29yZTo6VGV4dFRyYWNrKik7
CitXZWJDb3JlOjpUZXh0VHJhY2sqIGNvcmUoV2ViS2l0RE9NVGV4dFRyYWNrKik7Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KKworI2Vu
ZGlmIC8qIFdlYktpdERPTVRleHRUcmFja1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01U
aW1lUmFuZ2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJhbmdlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjYxNzMxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJhbmdl
cy5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UaW1lUmFuZ2VzLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRpbWVSYW5nZXNQ
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9USU1FX1JBTkdFU19HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShvYmosIFdFQktJVF9ET01fVFlQRV9USU1FX1JBTkdFUywgV2ViS2l0RE9NVGltZVJhbmdlc1By
aXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZSB7Cisj
aWYgRU5BQkxFKFZJREVPKQorICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBjb3JlT2Jq
ZWN0OworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKK30gV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZh
dGU7CisKKyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01UaW1lUmFuZ2VzKiBraXQoV2ViQ29yZTo6VGltZVJhbmdlcyogb2JqKQoreworICAgIGlmICgh
b2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmpl
Y3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RJTUVfUkFOR0VT
KHJldCk7CisKKyAgICByZXR1cm4gd3JhcFRpbWVSYW5nZXMob2JqKTsKK30KKworV2ViQ29yZTo6
VGltZVJhbmdlcyogY29yZShXZWJLaXRET01UaW1lUmFuZ2VzKiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGltZVJhbmdlcyo+KFdFQktJVF9E
T01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRpbWVS
YW5nZXMqIHdyYXBUaW1lUmFuZ2VzKFdlYkNvcmU6OlRpbWVSYW5nZXMqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RJTUVfUkFO
R0VTKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVElNRV9SQU5HRVMsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGltZVJh
bmdlcywgd2Via2l0X2RvbV90aW1lX3JhbmdlcywgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90aW1lX3Jhbmdlc19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RJTUVfUkFOR0VT
X0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCisgICAgcHJpdi0+fldlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlKCk7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90aW1lX3Jhbmdlc19wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RpbWVfcmFuZ2Vz
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRpbWVSYW5nZXMqIHNl
bGYgPSBXRUJLSVRfRE9NX1RJTUVfUkFOR0VTKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV90aW1lX3Jhbmdlc19nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2NvbnN0cnVj
dG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENv
bnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVj
dCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGltZV9yYW5nZXNfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX1RJTUVfUkFOR0VTX0dFVF9QUklWQVRFKG9iamVjdCk7Cisg
ICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRpbWVSYW5nZXMqPihX
RUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU8pCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90aW1lX3Jhbmdlc19jbGFzc19pbml0KFdlYktpdERPTVRpbWVSYW5nZXNDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUpKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90aW1lX3Jhbmdlc19jb25zdHJ1Y3Rv
cjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90aW1lX3Jhbmdlc19m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGlt
ZV9yYW5nZXNfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAg
ICAiVGltZVJhbmdlczpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgVGlt
ZVJhbmdlczpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGltZV9yYW5nZXNfaW5pdChXZWJLaXRET01UaW1lUmFuZ2VzKiByZXF1ZXN0KQoreworICAg
IFdlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9USU1FX1JBTkdF
U19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVRpbWVSYW5n
ZXNQcml2YXRlKCk7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV90aW1lX3Jhbmdlc19zdGFydChX
ZWJLaXRET01UaW1lUmFuZ2VzKiBzZWxmLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQor
eworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19USU1FX1JBTkdF
UyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IDApOworICAgIFdlYkNvcmU6OlRpbWVSYW5nZXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2RvdWJsZSByZXN1bHQg
PSBpdGVtLT5zdGFydChpbmRleCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBV
TlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fdGltZV9yYW5nZXNfZW5k
KFdlYktpdERPTVRpbWVSYW5nZXMqIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RJTUVfUkFO
R0VTKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJv
ciwgMCk7CisgICAgV2ViQ29yZTo6VGltZVJhbmdlcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnZG91YmxlIHJlc3Vs
dCA9IGl0ZW0tPmVuZChpbmRleCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBV
TlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV90aW1lX3Jhbmdlc19nZXRf
bGVuZ3RoKFdlYktpdERPTVRpbWVSYW5nZXMqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RJTUVfUkFOR0VTKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpUaW1lUmFuZ2VzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyBy
ZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
VmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVO
QUJMRShWSURFTykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRpbWVSYW5nZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjg0ZGVk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzLmgKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UaW1lUmFu
Z2VzX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGltZVJhbmdlc19oCisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfVElNRV9SQU5HRVMgICAgICAgICAgICAod2Via2l0X2RvbV90aW1lX3Jhbmdlc19n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RJTUVfUkFOR0VTKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9USU1F
X1JBTkdFUywgV2ViS2l0RE9NVGltZVJhbmdlcykpCisjZGVmaW5lIFdFQktJVF9ET01fVElNRV9S
QU5HRVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VTLCBXZWJLaXRET01UaW1lUmFuZ2VzQ2xhc3MpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfVElNRV9SQU5HRVMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VTKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19USU1FX1JBTkdFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVElNRV9SQU5HRVMpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX1RJTUVfUkFOR0VTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9USU1FX1JBTkdFUywgV2ViS2l0
RE9NVGltZVJhbmdlc0NsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UaW1lUmFuZ2VzIHsKKyAg
ICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01UaW1lUmFuZ2VzQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGltZV9yYW5nZXNfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90aW1lX3Jhbmdlc19zdGFydDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisgKiBAaW5kZXg6IEEgI2d1bG9uZworICogQGVy
cm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3RpbWVfcmFu
Z2VzX3N0YXJ0KFdlYktpdERPTVRpbWVSYW5nZXMqIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGltZV9yYW5nZXNfZW5kOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fdGltZV9yYW5n
ZXNfZW5kKFdlYktpdERPTVRpbWVSYW5nZXMqIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGltZV9yYW5nZXNfZ2V0X2xlbmd0aDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25n
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Vi
a2l0X2RvbV90aW1lX3Jhbmdlc19nZXRfbGVuZ3RoKFdlYktpdERPTVRpbWVSYW5nZXMqIHNlbGYp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NVGltZVJhbmdlc19oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRpbWVSYW5nZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4MWIyNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVGltZVJhbmdlc1ByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9U
aW1lUmFuZ2VzLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRpbWVSYW5nZXMuaD4K
KyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGltZVJh
bmdlcyogd3JhcFRpbWVSYW5nZXMoV2ViQ29yZTo6VGltZVJhbmdlcyopOworV2ViS2l0RE9NVGlt
ZVJhbmdlcyoga2l0KFdlYkNvcmU6OlRpbWVSYW5nZXMqKTsKK1dlYkNvcmU6OlRpbWVSYW5nZXMq
IGNvcmUoV2ViS2l0RE9NVGltZVJhbmdlcyopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBFTkFCTEUoVklERU8pICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01UaW1lUmFuZ2Vz
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRvdWNoLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVG91Y2guY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzI1OWYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVRvdWNoLmNwcApAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERP
TVRvdWNoLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRvdWNoUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fVE9VQ0hf
R0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRf
RE9NX1RZUEVfVE9VQ0gsIFdlYktpdERPTVRvdWNoUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTVRvdWNoUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6VG91Y2g+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFRPVUNI
X0VWRU5UUykKK30gV2ViS2l0RE9NVG91Y2hQcml2YXRlOworCisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVRvdWNoKiBraXQoV2ViQ29y
ZTo6VG91Y2gqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9UT1VDSChyZXQpOworCisgICAgcmV0dXJuIHdyYXBUb3VjaChvYmop
OworfQorCitXZWJDb3JlOjpUb3VjaCogY29yZShXZWJLaXRET01Ub3VjaCogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRvdWNoKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVG91
Y2gqIHdyYXBUb3VjaChXZWJDb3JlOjpUb3VjaCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVE9VQ0goZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9UT1VDSCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVG91Y2gsIHdlYmtpdF9kb21fdG91Y2gs
IFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9Q
X0NMSUVOVF9YLAorICAgIFBST1BfQ0xJRU5UX1ksCisgICAgUFJPUF9TQ1JFRU5fWCwKKyAgICBQ
Uk9QX1NDUkVFTl9ZLAorICAgIFBST1BfUEFHRV9YLAorICAgIFBST1BfUEFHRV9ZLAorICAgIFBS
T1BfVEFSR0VULAorICAgIFBST1BfSURFTlRJRklFUiwKKyAgICBQUk9QX1dFQktJVF9SQURJVVNf
WCwKKyAgICBQUk9QX1dFQktJVF9SQURJVVNfWSwKKyAgICBQUk9QX1dFQktJVF9ST1RBVElPTl9B
TkdMRSwKKyAgICBQUk9QX1dFQktJVF9GT1JDRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdG91Y2hfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVRvdWNo
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVE9VQ0hfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgIHByaXYtPn5XZWJLaXRET01Ub3VjaFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX3RvdWNoX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NVG91Y2gqIHNlbGYgPSBXRUJLSVRfRE9NX1RPVUNIKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0xJRU5UX1g6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X2NsaWVudF94
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NMSUVOVF9ZOgorICAgICAg
ICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF9jbGllbnRfeShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JFRU5fWDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90b3VjaF9nZXRfc2NyZWVuX3goc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NSRUVOX1k6CisgICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3NjcmVlbl95KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBR0VfWDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90b3VjaF9nZXRfcGFnZV94KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBR0VfWToKKyAgICAgICAgZ192YWx1ZV9zZXRf
bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90b3VjaF9nZXRfcGFnZV95KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF90YXJnZXQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfSURFTlRJRklFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmco
dmFsdWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X2lkZW50aWZpZXIoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX1JBRElVU19YOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcmFkaXVzX3goc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX1JBRElVU19ZOgorICAgICAg
ICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcmFk
aXVzX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX1JPVEFU
SU9OX0FOR0xFOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgd2Via2l0X2RvbV90
b3VjaF9nZXRfd2Via2l0X3JvdGF0aW9uX2FuZ2xlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1dFQktJVF9GT1JDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFs
dWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9mb3JjZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90b3VjaF9jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3RvdWNoX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUs
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJLaXRET01Ub3VjaFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RPVUNIX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRvdWNoKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RvdWNoX2NsYXNz
X2luaXQoV2ViS2l0RE9NVG91Y2hDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVG91
Y2hQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21f
dG91Y2hfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9k
b21fdG91Y2hfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX3RvdWNoX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DTElFTlRfWCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiY2xpZW50LXgiLAorICAg
ICAgICAgICAgIlRvdWNoOmNsaWVudC14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcg
VG91Y2g6Y2xpZW50LXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9D
TElFTlRfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiY2xpZW50
LXkiLAorICAgICAgICAgICAgIlRvdWNoOmNsaWVudC15IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2xvbmcgVG91Y2g6Y2xpZW50LXkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TQ1JFRU5fWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAg
ICAic2NyZWVuLXgiLAorICAgICAgICAgICAgIlRvdWNoOnNjcmVlbi14IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgVG91Y2g6c2NyZWVuLXgiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9TQ1JFRU5fWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisg
ICAgICAgICAgICAic2NyZWVuLXkiLAorICAgICAgICAgICAgIlRvdWNoOnNjcmVlbi15IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVG91Y2g6c2NyZWVuLXkiLAorICAgICAgICAgICAg
R19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQUdFX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19s
b25nKAorICAgICAgICAgICAgInBhZ2UteCIsCisgICAgICAgICAgICAiVG91Y2g6cGFnZS14IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVG91Y2g6cGFnZS14IiwKKyAgICAgICAgICAg
IEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFHRV9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNf
bG9uZygKKyAgICAgICAgICAgICJwYWdlLXkiLAorICAgICAgICAgICAgIlRvdWNoOnBhZ2UteSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRvdWNoOnBhZ2UteSIsCisgICAgICAgICAg
ICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RBUkdFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJ0YXJnZXQiLAorICAgICAgICAgICAgIlRvdWNoOnRhcmdl
dCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUV2ZW50VGFyZ2V0KiBUb3VjaDp0
YXJnZXQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lERU5U
SUZJRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJpZGVudGlm
aWVyIiwKKyAgICAgICAgICAgICJUb3VjaDppZGVudGlmaWVyIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ3Vsb25nIFRvdWNoOmlkZW50aWZpZXIiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9O
RywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1dFQktJVF9SQURJVVNfWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAg
ICAgICAgICAid2Via2l0LXJhZGl1cy14IiwKKyAgICAgICAgICAgICJUb3VjaDp3ZWJraXQtcmFk
aXVzLXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUb3VjaDp3ZWJraXQtcmFkaXVz
LXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfUkFESVVT
X1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIndlYmtpdC1yYWRp
dXMteSIsCisgICAgICAgICAgICAiVG91Y2g6d2Via2l0LXJhZGl1cy15IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgVG91Y2g6d2Via2l0LXJhZGl1cy15IiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX1JPVEFUSU9OX0FOR0xFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAgICAgICAid2Via2l0LXJvdGF0aW9uLWFuZ2xlIiwK
KyAgICAgICAgICAgICJUb3VjaDp3ZWJraXQtcm90YXRpb24tYW5nbGUiLAorICAgICAgICAgICAg
InJlYWQtb25seSBnZmxvYXQgVG91Y2g6d2Via2l0LXJvdGF0aW9uLWFuZ2xlIiwKKyAgICAgICAg
ICAgIC1HX01BWEZMT0FULCBHX01BWEZMT0FULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0ZPUkNFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAgICAgICAid2Via2l0LWZvcmNlIiwKKyAgICAgICAg
ICAgICJUb3VjaDp3ZWJraXQtZm9yY2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZmxvYXQg
VG91Y2g6d2Via2l0LWZvcmNlIiwKKyAgICAgICAgICAgIC1HX01BWEZMT0FULCBHX01BWEZMT0FU
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90b3VjaF9pbml0KFdlYktpdERPTVRvdWNoKiByZXF1ZXN0KQorewor
ICAgIFdlYktpdERPTVRvdWNoUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVE9VQ0hfR0VUX1BS
SVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01Ub3VjaFByaXZhdGUoKTsK
K30KKworZ2xvbmcgd2Via2l0X2RvbV90b3VjaF9nZXRfY2xpZW50X3goV2ViS2l0RE9NVG91Y2gq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19UT1VDSChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Y2xpZW50WCgpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30K
KworZ2xvbmcgd2Via2l0X2RvbV90b3VjaF9nZXRfY2xpZW50X3koV2ViS2l0RE9NVG91Y2gqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19UT1VDSChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Y2xpZW50WSgpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30KKwor
Z2xvbmcgd2Via2l0X2RvbV90b3VjaF9nZXRfc2NyZWVuX3goV2ViS2l0RE9NVG91Y2gqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
T1VDSChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2NyZWVuWCgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30KKworZ2xv
bmcgd2Via2l0X2RvbV90b3VjaF9nZXRfc2NyZWVuX3koV2ViS2l0RE9NVG91Y2gqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UT1VD
SChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2NyZWVuWSgpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30KKworZ2xvbmcg
d2Via2l0X2RvbV90b3VjaF9nZXRfcGFnZV94KFdlYktpdERPTVRvdWNoKiBzZWxmKQoreworI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVE9VQ0goc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnBhZ2VYKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigw
KTsKKyNlbmRpZiAvKiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAqLworfQorCitnbG9uZyB3ZWJraXRf
ZG9tX3RvdWNoX2dldF9wYWdlX3koV2ViS2l0RE9NVG91Y2gqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UT1VDSChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xv
bmcgcmVzdWx0ID0gaXRlbS0+cGFnZVkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVG91Y2ggRXZlbnRzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2Vu
ZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMpICovCit9CisKK1dlYktpdERPTUV2ZW50VGFyZ2V0
KiB3ZWJraXRfZG9tX3RvdWNoX2dldF90YXJnZXQoV2ViS2l0RE9NVG91Y2gqIHNlbGYpCit7Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UT1VDSChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkV2ZW50VGFyZ2V0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+dGFyZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIpCisgICAgcmV0dXJuIDA7Cisj
ZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21f
dG91Y2hfZ2V0X2lkZW50aWZpZXIoV2ViS2l0RE9NVG91Y2gqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UT1VDSChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vs
b25nIHJlc3VsdCA9IGl0ZW0tPmlkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigw
KTsKKyNlbmRpZiAvKiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAqLworfQorCitnbG9uZyB3ZWJraXRf
ZG9tX3RvdWNoX2dldF93ZWJraXRfcmFkaXVzX3goV2ViS2l0RE9NVG91Y2gqIHNlbGYpCit7Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UT1VDSChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+d2Via2l0UmFkaXVzWCgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30KKworZ2xv
bmcgd2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0X3JhZGl1c195KFdlYktpdERPTVRvdWNoKiBz
ZWxmKQoreworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVE9VQ0goc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndlYmtpdFJhZGl1c1koKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMpICov
Cit9CisKK2dmbG9hdCB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcm90YXRpb25fYW5nbGUo
V2ViS2l0RE9NVG91Y2gqIHNlbGYpCit7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19UT1VDSChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Zsb2F0IHJlc3VsdCA9IGl0ZW0tPndl
YmtpdFJvdGF0aW9uQW5nbGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91
Y2ggRXZlbnRzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Zsb2F0PigwKTsKKyNlbmRpZiAv
KiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAqLworfQorCitnZmxvYXQgd2Via2l0X2RvbV90b3VjaF9n
ZXRfd2Via2l0X2ZvcmNlKFdlYktpdERPTVRvdWNoKiBzZWxmKQoreworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVE9VQ0goc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlRvdWNoKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCBy
ZXN1bHQgPSBpdGVtLT53ZWJraXRGb3JjZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZmxvYXQ+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VG91Y2guaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVG91Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lODQ5ZDczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaC5oCkBAIC0wLDAgKzEsMTg1
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRv
dWNoX2gKKyNkZWZpbmUgV2ViS2l0RE9NVG91Y2hfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVm
aW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9U
WVBFX1RPVUNIICAgICAgICAgICAgKHdlYmtpdF9kb21fdG91Y2hfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UT1VDSChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVE9VQ0gsIFdlYktpdERPTVRvdWNoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UT1VDSF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVE9VQ0gsIFdlYktpdERPTVRvdWNoQ2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVE9VQ0gob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RPVUNIKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19UT1VDSF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVE9VQ0gpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RP
VUNIX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9UT1VDSCwgV2ViS2l0RE9NVG91Y2hDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NVG91Y2ggeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTVRvdWNoQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdG91Y2hf
Z2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90b3VjaF9nZXRfY2xpZW50X3g6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZwor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0
X2RvbV90b3VjaF9nZXRfY2xpZW50X3goV2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdG91Y2hfZ2V0X2NsaWVudF95OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRv
dWNoCisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X2NsaWVudF95KFdl
YktpdERPTVRvdWNoKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF9zY3Jl
ZW5feDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEgI2ds
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3
ZWJraXRfZG9tX3RvdWNoX2dldF9zY3JlZW5feChXZWJLaXRET01Ub3VjaCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV90b3VjaF9nZXRfc2NyZWVuX3k6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV90b3VjaF9nZXRfc2NyZWVu
X3koV2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdG91Y2hfZ2V0
X3BhZ2VfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEg
I2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25n
Cit3ZWJraXRfZG9tX3RvdWNoX2dldF9wYWdlX3goV2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3BhZ2VfeToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3RvdWNoX2dldF9wYWdlX3ko
V2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3Rh
cmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRXZlbnRUYXJnZXQKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRXZlbnRUYXJnZXQqCit3ZWJraXRfZG9t
X3RvdWNoX2dldF90YXJnZXQoV2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fdG91Y2hfZ2V0X2lkZW50aWZpZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gK
KyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3RvdWNoX2dldF9pZGVudGlmaWVyKFdl
YktpdERPTVRvdWNoKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJr
aXRfcmFkaXVzX3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5z
OiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
bG9uZword2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0X3JhZGl1c194KFdlYktpdERPTVRvdWNo
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcmFkaXVzX3k6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZwor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0
X2RvbV90b3VjaF9nZXRfd2Via2l0X3JhZGl1c195KFdlYktpdERPTVRvdWNoKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcm90YXRpb25fYW5nbGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5zOiBBICNnZmxvYXQKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfZG9t
X3RvdWNoX2dldF93ZWJraXRfcm90YXRpb25fYW5nbGUoV2ViS2l0RE9NVG91Y2gqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9mb3JjZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fdG91Y2hf
Z2V0X3dlYmtpdF9mb3JjZShXZWJLaXRET01Ub3VjaCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJL
aXRET01Ub3VjaF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRvdWNoUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01U
b3VjaFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmMwZmM1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRvdWNo
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRvdWNoUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL1RvdWNoLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRvdWNoLmg+Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01U
b3VjaCogd3JhcFRvdWNoKFdlYkNvcmU6OlRvdWNoKik7CitXZWJLaXRET01Ub3VjaCoga2l0KFdl
YkNvcmU6OlRvdWNoKik7CitXZWJDb3JlOjpUb3VjaCogY29yZShXZWJLaXRET01Ub3VjaCopOwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAq
LworCisjZW5kaWYgLyogV2ViS2l0RE9NVG91Y2hQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVHJhY2tFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA3YzRiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNr
RXZlbnQuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UcmFja0V2ZW50Lmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+Cisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRyYWNrRXZlbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJLaXRET01UcmFja0V2ZW50KiBraXQoV2ViQ29yZTo6VHJhY2tFdmVu
dCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX1RSQUNLX0VWRU5UKGtpdChzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpFdmVudCo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6VHJhY2tFdmVudCog
Y29yZShXZWJLaXRET01UcmFja0V2ZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VHJhY2tFdmVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRyYWNrRXZlbnQqIHdyYXBU
cmFja0V2ZW50KFdlYkNvcmU6OlRyYWNrRXZlbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RSQUNLX0VWRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVFJBQ0tfRVZFTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU9fVFJBQ0spCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVHJhY2tFdmVudCwg
d2Via2l0X2RvbV90cmFja19ldmVudCwgV0VCS0lUX0RPTV9UWVBFX0VWRU5UKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3RyYWNrX2V2ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NVHJhY2tFdmVu
dENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3RDbGFzcyk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdHJhY2tfZXZlbnRfaW5pdChXZWJLaXRET01U
cmFja0V2ZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UcmFja0V2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY4NzMyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01UcmFja0V2ZW50LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UcmFja0V2ZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NVHJhY2tFdmVudF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUV2
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9UUkFDS19FVkVOVCAg
ICAgICAgICAgICh3ZWJraXRfZG9tX3RyYWNrX2V2ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9ET01fVFJBQ0tfRVZFTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RSQUNLX0VWRU5ULCBXZWJLaXRET01UcmFj
a0V2ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9UUkFDS19FVkVOVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVFJBQ0tf
RVZFTlQsIFdlYktpdERPTVRyYWNrRXZlbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
UkFDS19FVkVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVFJBQ0tfRVZFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RS
QUNLX0VWRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9UUkFDS19FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fVFJBQ0tf
RVZFTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX1RSQUNLX0VWRU5ULCBXZWJLaXRET01UcmFja0V2ZW50Q2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTVRyYWNrRXZlbnQgeworICAgIFdlYktpdERPTUV2ZW50IHBhcmVu
dF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVHJhY2tFdmVudENsYXNzIHsKKyAg
ICBXZWJLaXRET01FdmVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fdHJhY2tfZXZlbnRfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBX
ZWJLaXRET01UcmFja0V2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJhY2tFdmVudFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVHJhY2tFdmVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mZWU5ZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmFja0V2ZW50UHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NVHJhY2tFdmVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01U
cmFja0V2ZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RyYWNrRXZlbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVHJhY2tFdmVudC5oPgorI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UcmFja0V2ZW50KiB3cmFw
VHJhY2tFdmVudChXZWJDb3JlOjpUcmFja0V2ZW50Kik7CitXZWJLaXRET01UcmFja0V2ZW50KiBr
aXQoV2ViQ29yZTo6VHJhY2tFdmVudCopOworV2ViQ29yZTo6VHJhY2tFdmVudCogY29yZShXZWJL
aXRET01UcmFja0V2ZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVO
QUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVRyYWNrRXZlbnRQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyZWVXYWxr
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiN2I4NWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVRyZWVXYWxrZXIuY3BwCkBAIC0wLDAgKzEsMjg5IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NVHJlZVdhbGtlci5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVGaWx0ZXJQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1RSRUVfV0FM
S0VSX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VC
S0lUX0RPTV9UWVBFX1RSRUVfV0FMS0VSLCBXZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlIHsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6VHJlZVdhbGtlcj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NVHJlZVdhbGtlclBy
aXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01UcmVlV2Fsa2VyKiBraXQo
V2ViQ29yZTo6VHJlZVdhbGtlciogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RSRUVfV0FMS0VSKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcFRyZWVXYWxrZXIob2JqKTsKK30KKworV2ViQ29yZTo6VHJlZVdhbGtlciogY29yZShX
ZWJLaXRET01UcmVlV2Fsa2VyKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VHJlZVdhbGtlcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRyZWVXYWxrZXIqIHdyYXBUcmVlV2Fs
a2VyKFdlYkNvcmU6OlRyZWVXYWxrZXIqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1RSRUVfV0FMS0VSKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfVFJFRV9XQUxLRVIsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NVHJlZVdhbGtlciwgd2Via2l0X2RvbV90cmVlX3dhbGtlciwgV0VCS0lUX0RPTV9UWVBF
X09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUk9PVCwKKyAgICBQUk9Q
X1dIQVRfVE9fU0hPVywKKyAgICBQUk9QX0ZJTFRFUiwKKyAgICBQUk9QX0NVUlJFTlRfTk9ERSwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9UUkVFX1dBTEtFUl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJp
di0+fldlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV90cmVlX3dhbGtlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYgPSBXRUJLSVRfRE9NX1RSRUVf
V0FMS0VSKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBS
T1BfUk9PVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Ry
ZWVfd2Fsa2VyX2dldF9yb290KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1dIQVRfVE9fU0hPVzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9k
b21fdHJlZV93YWxrZXJfZ2V0X3doYXRfdG9fc2hvdyhzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9GSUxURVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfZmlsdGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfTk9ERToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9jdXJyZW50X25vZGUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90cmVlX3dhbGtlcl9wYXJlbnRfY2xh
c3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVj
dFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1RSRUVfV0FMS0VSX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29y
ZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRyZWVXYWxrZXIqPihXRUJLSVRfRE9NX09C
SkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpw
dXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfY2xhc3NfaW5pdChXZWJL
aXRET01UcmVlV2Fsa2VyQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRyZWVXYWxr
ZXJQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21f
dHJlZV93YWxrZXJfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9kb21fdHJlZV93YWxrZXJfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9ST09ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
InJvb3QiLAorICAgICAgICAgICAgIlRyZWVXYWxrZXI6cm9vdCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTU5vZGUqIFRyZWVXYWxrZXI6cm9vdCIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1dIQVRfVE9fU0hPVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vs
b25nKAorICAgICAgICAgICAgIndoYXQtdG8tc2hvdyIsCisgICAgICAgICAgICAiVHJlZVdhbGtl
cjp3aGF0LXRvLXNob3ciLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgVHJlZVdhbGtl
cjp3aGF0LXRvLXNob3ciLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZJTFRFUiwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJmaWx0ZXIiLAorICAg
ICAgICAgICAgIlRyZWVXYWxrZXI6ZmlsdGVyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NTm9kZUZpbHRlciogVHJlZVdhbGtlcjpmaWx0ZXIiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX05PREVfRklMVEVSLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1VSUkVOVF9OT0RFLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KAorICAgICAgICAgICAgImN1cnJlbnQtbm9kZSIsCisgICAgICAgICAgICAiVHJl
ZVdhbGtlcjpjdXJyZW50LW5vZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01O
b2RlKiBUcmVlV2Fsa2VyOmN1cnJlbnQtbm9kZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfaW5pdChXZWJLaXRET01UcmVlV2Fsa2Vy
KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9UUkVFX1dBTEtFUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYp
IFdlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtp
dF9kb21fdHJlZV93YWxrZXJfcGFyZW50X25vZGUoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBhcmVu
dE5vZGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2ZpcnN0X2NoaWxkKFdl
YktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVFJF
RV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRyZWVXYWxrZXIqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5maXJzdENoaWxkKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90
cmVlX3dhbGtlcl9sYXN0X2NoaWxkKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlRyZWVXYWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sYXN0Q2hpbGQoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3ByZXZpb3VzX3NpYmxpbmcoV2ViS2l0
RE9NVHJlZVdhbGtlciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dB
TEtFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnByZXZpb3VzU2libGluZygpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21f
dHJlZV93YWxrZXJfbmV4dF9zaWJsaW5nKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OlRyZWVXYWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5uZXh0U2libGlu
ZygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfcHJldmlvdXNfbm9kZShXZWJL
aXRET01UcmVlV2Fsa2VyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVf
V0FMS0VSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+cHJldmlvdXNOb2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90
cmVlX3dhbGtlcl9uZXh0X25vZGUoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5leHROb2RlKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NTm9kZSogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfcm9vdChXZWJLaXRET01UcmVlV2Fs
a2VyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+cm9vdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF93aGF0X3RvX3Nob3co
V2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
UkVFX1dBTEtFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VHJlZVdhbGtlciogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+d2hhdFRvU2hvdygp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGVGaWx0ZXIqIHdlYmtpdF9k
b21fdHJlZV93YWxrZXJfZ2V0X2ZpbHRlcihXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpOb2RlRmlsdGVyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zmls
dGVyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfY3VycmVudF9ub2Rl
KFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VFJFRV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRyZWVXYWxrZXIqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jdXJyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV90cmVlX3dh
bGtlcl9zZXRfY3VycmVudF9ub2RlKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYsIFdlYktpdERP
TU5vZGUqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RS
RUVfV0FMS0VSKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9E
RSh2YWx1ZSkpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6VHJlZVdh
bGtlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252
ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgaXRlbS0+c2V0Q3VycmVudE5v
ZGUoKmNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fsa2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVRyZWVXYWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
MGM1YWI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fsa2VyLmgKQEAgLTAsMCArMSwx
NjMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3Ig
Ik9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVRyZWVXYWxrZXJfaAorI2RlZmluZSBXZWJLaXRE
T01UcmVlV2Fsa2VyX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVFJF
RV9XQUxLRVIgICAgICAgICAgICAod2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1RSRUVfV0FMS0VSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUiwgV2Vi
S2l0RE9NVHJlZVdhbGtlcikpCisjZGVmaW5lIFdFQktJVF9ET01fVFJFRV9XQUxLRVJfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1RSRUVfV0FMS0VSLCBXZWJLaXRET01UcmVlV2Fsa2VyQ2xhc3MpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfVFJFRV9XQUxLRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RSRUVfV0FMS0VSKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19UUkVFX1dBTEtFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVFJFRV9XQUxLRVIpKQorI2RlZmluZSBXRUJLSVRf
RE9NX1RSRUVfV0FMS0VSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUiwgV2ViS2l0RE9NVHJlZVdhbGtl
ckNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UcmVlV2Fsa2VyIHsKKyAgICBXZWJLaXRET01P
YmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01UcmVlV2Fsa2Vy
Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9wYXJlbnRfbm9kZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9k
b21fdHJlZV93YWxrZXJfcGFyZW50X25vZGUoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9maXJzdF9jaGlsZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9k
b21fdHJlZV93YWxrZXJfZmlyc3RfY2hpbGQoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9sYXN0X2NoaWxkOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVRyZWVXYWxrZXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2Rv
bV90cmVlX3dhbGtlcl9sYXN0X2NoaWxkKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfcHJldmlvdXNfc2libGluZzoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtp
dF9kb21fdHJlZV93YWxrZXJfcHJldmlvdXNfc2libGluZyhXZWJLaXRET01UcmVlV2Fsa2VyKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfc2libGluZzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoK
K3dlYmtpdF9kb21fdHJlZV93YWxrZXJfbmV4dF9zaWJsaW5nKFdlYktpdERPTVRyZWVXYWxrZXIq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfcHJldmlvdXNfbm9kZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9k
ZSoKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfcHJldmlvdXNfbm9kZShXZWJLaXRET01UcmVlV2Fs
a2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfbm9kZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9k
ZSoKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfbmV4dF9ub2RlKFdlYktpdERPTVRyZWVXYWxrZXIq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X3Jvb3Q6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3
ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9yb290KFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X3doYXRfdG9fc2hvdzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25n
CisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF93aGF0
X3RvX3Nob3coV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV90cmVlX3dhbGtlcl9nZXRfZmlsdGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxr
ZXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVGaWx0
ZXIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlRmlsdGVyKgord2Via2l0X2RvbV90cmVl
X3dhbGtlcl9nZXRfZmlsdGVyKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X2N1cnJlbnRfbm9kZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UcmVlV2Fsa2VyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNX
ZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21f
dHJlZV93YWxrZXJfZ2V0X2N1cnJlbnRfbm9kZShXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3NldF9jdXJyZW50X25vZGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICogQHZhbHVlOiBBICNXZWJLaXRET01Ob2Rl
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV90cmVlX3dhbGtlcl9zZXRfY3VycmVudF9ub2RlKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYs
IFdlYktpdERPTU5vZGUqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01UcmVlV2Fsa2VyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJl
ZVdhbGtlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJhZDEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01U
cmVlV2Fsa2VyUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RyZWVX
YWxrZXIuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVHJlZVdhbGtlci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVRyZWVXYWxrZXIqIHdyYXBUcmVlV2Fsa2VyKFdl
YkNvcmU6OlRyZWVXYWxrZXIqKTsKK1dlYktpdERPTVRyZWVXYWxrZXIqIGtpdChXZWJDb3JlOjpU
cmVlV2Fsa2VyKik7CitXZWJDb3JlOjpUcmVlV2Fsa2VyKiBjb3JlKFdlYktpdERPTVRyZWVXYWxr
ZXIqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NVHJlZVdh
bGtlclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlF
dmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjNDUxZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudC5jcHAKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01VSUV2ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUu
aD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01VSUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01VSUV2ZW50VW5z
dGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVUlFdmVudCoga2l0KFdlYkNvcmU6
OlVJRXZlbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9VSV9FVkVOVChraXQoc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnQqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OlVJRXZlbnQq
IGNvcmUoV2ViS2l0RE9NVUlFdmVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlVJRXZlbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01VSUV2ZW50KiB3cmFwVUlFdmVudChX
ZWJDb3JlOjpVSUV2ZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV0VCS0lUX0RPTV9VSV9FVkVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX1VJX0VWRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVVJRXZlbnQs
IHdlYmtpdF9kb21fdWlfZXZlbnQsIFdFQktJVF9ET01fVFlQRV9FVkVOVCkKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorICAgIFBST1BfVklFVywKKyAgICBQUk9QX0RFVEFJTCwKKyAgICBQUk9QX0tF
WV9DT0RFLAorICAgIFBST1BfQ0hBUl9DT0RFLAorICAgIFBST1BfTEFZRVJfWCwKKyAgICBQUk9Q
X0xBWUVSX1ksCisgICAgUFJPUF9QQUdFX1gsCisgICAgUFJPUF9QQUdFX1ksCisgICAgUFJPUF9X
SElDSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVUlFdmVudCogc2VsZiA9IFdFQktJVF9ET01f
VUlfRVZFTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9WSUVXOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
dWlfZXZlbnRfZ2V0X3ZpZXcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVUQUlMOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3VpX2V2
ZW50X2dldF9kZXRhaWwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfS0VZ
X0NPREU6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdWlfZXZl
bnRfZ2V0X2tleV9jb2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NI
QVJfQ09ERToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV91aV9l
dmVudF9nZXRfY2hhcl9jb2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0xBWUVSX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdWlf
ZXZlbnRfZ2V0X2xheWVyX3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TEFZRVJfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV91aV9l
dmVudF9nZXRfbGF5ZXJfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
QUdFX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdWlfZXZl
bnRfZ2V0X3BhZ2VfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQUdF
X1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdWlfZXZlbnRf
Z2V0X3BhZ2VfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSElDSDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV91aV9ldmVudF9nZXRf
d2hpY2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV91aV9l
dmVudF9jbGFzc19pbml0KFdlYktpdERPTVVJRXZlbnRDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdWlfZXZl
bnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZJRVcsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidmlldyIsCisgICAgICAgICAgICAiVUlFdmVu
dDp2aWV3IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NV2luZG93KiBVSUV2
ZW50OnZpZXciLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERVRB
SUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImRldGFpbCIsCisg
ICAgICAgICAgICAiVUlFdmVudDpkZXRhaWwiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9u
ZyBVSUV2ZW50OmRldGFpbCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0tFWV9DT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJrZXkt
Y29kZSIsCisgICAgICAgICAgICAiVUlFdmVudDprZXktY29kZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdsb25nIFVJRXZlbnQ6a2V5LWNvZGUiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DSEFSX0NPREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgImNoYXItY29kZSIsCisgICAgICAgICAgICAiVUlFdmVudDpjaGFyLWNvZGUiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBVSUV2ZW50OmNoYXItY29kZSIsCisgICAgICAg
ICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBWUVSX1gsCisgICAgICAgIGdfcGFyYW1f
c3BlY19sb25nKAorICAgICAgICAgICAgImxheWVyLXgiLAorICAgICAgICAgICAgIlVJRXZlbnQ6
bGF5ZXIteCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFVJRXZlbnQ6bGF5ZXIteCIs
CisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBWUVSX1ksCisgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImxheWVyLXkiLAorICAgICAgICAgICAg
IlVJRXZlbnQ6bGF5ZXIteSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFVJRXZlbnQ6
bGF5ZXIteSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBR0VfWCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAicGFnZS14IiwKKyAgICAg
ICAgICAgICJVSUV2ZW50OnBhZ2UteCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFVJ
RXZlbnQ6cGFnZS14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFH
RV9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJwYWdlLXkiLAor
ICAgICAgICAgICAgIlVJRXZlbnQ6cGFnZS15IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xv
bmcgVUlFdmVudDpwYWdlLXkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9XSElDSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAid2hpY2gi
LAorICAgICAgICAgICAgIlVJRXZlbnQ6d2hpY2giLAorICAgICAgICAgICAgInJlYWQtb25seSBn
bG9uZyBVSUV2ZW50OndoaWNoIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV91aV9ldmVudF9pbml0KFdlYktpdERPTVVJRXZlbnQqIHJlcXVlc3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21fdWlfZXZl
bnRfaW5pdF91aV9ldmVudChXZWJLaXRET01VSUV2ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdHlw
ZSwgZ2Jvb2xlYW4gY2FuQnViYmxlLCBnYm9vbGVhbiBjYW5jZWxhYmxlLCBXZWJLaXRET01ET01X
aW5kb3cqIHZpZXcsIGdsb25nIGRldGFpbCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1VJX0VW
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHR5cGUpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHZpZXcpKTsKKyAgICBXZWJDb3JlOjpVSUV2
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFR5cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodHlwZSk7CisgICAgV2ViQ29yZTo6RE9NV2lu
ZG93KiBjb252ZXJ0ZWRWaWV3ID0gV2ViS2l0Ojpjb3JlKHZpZXcpOworICAgIGl0ZW0tPmluaXRV
SUV2ZW50KGNvbnZlcnRlZFR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgY29udmVydGVkVmll
dywgZGV0YWlsKTsKK30KKworV2ViS2l0RE9NRE9NV2luZG93KiB3ZWJraXRfZG9tX3VpX2V2ZW50
X2dldF92aWV3KFdlYktpdERPTVVJRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVUlfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlVJRXZlbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdpbmRvdz4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnZpZXcoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX3VpX2V2ZW50
X2dldF9kZXRhaWwoV2ViS2l0RE9NVUlFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19VSV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VUlFdmVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5kZXRhaWwoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9r
ZXlfY29kZShXZWJLaXRET01VSUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpVSUV2ZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmtleUNvZGUoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9jaGFy
X2NvZGUoV2ViS2l0RE9NVUlFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19VSV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VUlFdmVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5jaGFyQ29kZSgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2xheWVy
X3goV2ViS2l0RE9NVUlFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19V
SV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VUlFdmVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5sYXllclgoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9sYXllcl95KFdl
YktpdERPTVVJRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVUlfRVZF
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlVJRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+bGF5ZXJZKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV94KFdlYktpdERP
TVVJRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVUlfRVZFTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OlVJRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+cGFnZVgoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitnbG9uZyB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9wYWdlX3koV2ViS2l0RE9NVUlFdmVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19VSV9FVkVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6VUlFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
bG9uZyByZXN1bHQgPSBpdGVtLT5wYWdlWSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3doaWNoKFdlYktpdERPTVVJRXZlbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVUlfRVZFTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OlVJRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVz
dWx0ID0gaXRlbS0+d2hpY2goKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVVJRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmZmZTZmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnQuaApA
QCAtMCwwICsxLDEzOSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJ
VCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NVUlFdmVudF9oCisjZGVmaW5l
IFdlYktpdERPTVVJRXZlbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X1VJX0VWRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9VSV9FVkVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQsIFdlYktpdERPTVVJ
RXZlbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VJX0VWRU5UX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9VSV9FVkVOVCwg
V2ViS2l0RE9NVUlFdmVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1VJX0VWRU5UKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9VSV9FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVUlfRVZFTlRfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1VJ
X0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9VSV9FVkVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQs
IFdlYktpdERPTVVJRXZlbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVUlFdmVudCB7Cisg
ICAgV2ViS2l0RE9NRXZlbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01VSUV2ZW50Q2xhc3MgeworICAgIFdlYktpdERPTUV2ZW50Q2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV91aV9ldmVudF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3VpX2V2ZW50X2luaXRfdWlfZXZlbnQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVUlFdmVudAorICogQHR5cGU6IEEgI2djaGFyCisgKiBAY2FuQnViYmxl
OiBBICNnYm9vbGVhbgorICogQGNhbmNlbGFibGU6IEEgI2dib29sZWFuCisgKiBAdmlldzogQSAj
V2ViS2l0RE9NRE9NV2luZG93CisgKiBAZGV0YWlsOiBBICNnbG9uZworICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX3VpX2V2ZW50X2luaXRfdWlfZXZlbnQoV2ViS2l0RE9NVUlF
dmVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHR5cGUsIGdib29sZWFuIGNhbkJ1YmJsZSwgZ2Jvb2xl
YW4gY2FuY2VsYWJsZSwgV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBnbG9uZyBkZXRhaWwpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3ZpZXc6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVUlFdmVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2luZG93Kgord2Via2l0
X2RvbV91aV9ldmVudF9nZXRfdmlldyhXZWJLaXRET01VSUV2ZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9kZXRhaWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VUlFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcK
K3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2RldGFpbChXZWJLaXRET01VSUV2ZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9rZXlfY29kZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01VSUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lU
X0FQSSBnbG9uZword2Via2l0X2RvbV91aV9ldmVudF9nZXRfa2V5X2NvZGUoV2ViS2l0RE9NVUlF
dmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9nZXRfY2hhcl9jb2Rl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9jaGFyX2Nv
ZGUoV2ViS2l0RE9NVUlFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVu
dF9nZXRfbGF5ZXJfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01VSUV2ZW50CisgKgorICogUmV0
dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV91aV9ldmVu
dF9nZXRfbGF5ZXJfeChXZWJLaXRET01VSUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3VpX2V2ZW50X2dldF9sYXllcl95OgorICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRf
ZG9tX3VpX2V2ZW50X2dldF9sYXllcl95KFdlYktpdERPTVVJRXZlbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3BhZ2VfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01VSUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV94KFdlYktpdERPTVVJRXZlbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3BhZ2VfeToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01VSUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lU
X0FQSSBnbG9uZword2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV95KFdlYktpdERPTVVJRXZl
bnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NVUlFdmVudF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnRQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTllNDM2OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVVJRXZlbnRQcml2
YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVUlFdmVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9VSUV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVVJRXZlbnQuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01VSUV2ZW50KiB3cmFwVUlFdmVudChXZWJD
b3JlOjpVSUV2ZW50Kik7CitXZWJLaXRET01VSUV2ZW50KiBraXQoV2ViQ29yZTo6VUlFdmVudCop
OworV2ViQ29yZTo6VUlFdmVudCogY29yZShXZWJLaXRET01VSUV2ZW50Kik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVVJRXZlbnRQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVUlFdmVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnRVbnN0YWJsZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDE5MTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVVJRXZlbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVUlFdmVudFVuc3RhYmxl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NVUlFdmVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21fdWlf
ZXZlbnRfZ2V0X3doaWNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnbG9uZword2Via2l0X2RvbV91aV9ldmVudF9nZXRfd2hpY2goV2ViS2l0RE9NVUlFdmVu
dCogc2VsZik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVVJRXZlbnRVbnN0YWJsZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjZmYwZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyLmNwcApAQCAtMCwwICsx
LDEzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlci5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FH
RV9IQU5ETEVSX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9i
aiwgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSLCBXZWJLaXRET01Vc2VyTWVz
c2FnZUhhbmRsZXJQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVXNlck1lc3Nh
Z2VIYW5kbGVyUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyPiBjb3JlT2JqZWN0OworI2VuZGlm
IC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCit9IFdlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlclByaXZhdGU7CisKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyKiBraXQoV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVIocmV0
KTsKKworICAgIHJldHVybiB3cmFwVXNlck1lc3NhZ2VIYW5kbGVyKG9iaik7Cit9CisKK1dlYkNv
cmU6OlVzZXJNZXNzYWdlSGFuZGxlciogY29yZShXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpV
c2VyTWVzc2FnZUhhbmRsZXIqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVj
dCkgOiAwOworfQorCitXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIqIHdyYXBVc2VyTWVzc2Fn
ZUhhbmRsZXIoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyKiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0Vf
SEFORExFUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVS
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKwor
R19ERUZJTkVfVFlQRShXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIsIHdlYmtpdF9kb21fdXNl
cl9tZXNzYWdlX2hhbmRsZXIsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpm
b3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVT
U0FHRV9IQU5ETEVSUykKKyAgICBwcml2LT5+V2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJp
dmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRs
ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwg
Z3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNv
bnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMp
OworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRM
RVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0
KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9I
QU5ETEVSUykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3VzZXJfbWVzc2FnZV9oYW5kbGVyX2NsYXNzX2luaXQoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5k
bGVyQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclBy
aXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV91c2Vy
X21lc3NhZ2VfaGFuZGxlcl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXpl
ID0gd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9maW5hbGl6ZTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9pbml0KFdlYktpdERPTVVzZXJN
ZXNzYWdlSGFuZGxlciogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRs
ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUl9HRVRfUFJJ
VkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
clByaXZhdGUoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX3Bv
c3RfbWVzc2FnZShXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIqIHNlbGYsIGNvbnN0IGdjaGFy
KiBtZXNzYWdlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hB
TkRMRVJTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVVNFUl9NRVNTQUdFX0hBTkRMRVIoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwobWVzc2FnZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGl0ZW0tPnBvc3RNZXNzYWdlKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSksIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CisgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJVc2VyIE1lc3NhZ2UgSGFuZGxlcnMiKQorI2VuZGlmIC8qIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVVzZXJNZXNzYWdlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjhmNzA0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
ci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyX2gKKyNkZWZpbmUgV2ViS2l0RE9NVXNl
ck1lc3NhZ2VIYW5kbGVyX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
T2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NB
R0VfSEFORExFUiAgICAgICAgICAgICh3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVIob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSLCBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9VU0VSX01F
U1NBR0VfSEFORExFUiwgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyQ2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfVVNFUl9NRVNTQUdFX0hBTkRMRVIob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9I
QU5ETEVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19VU0VSX01FU1NBR0VfSEFORExFUl9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfVVNFUl9NRVNTQUdFX0hBTkRMRVIpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FH
RV9IQU5ETEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUiwgV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
ciB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdXNl
cl9tZXNzYWdlX2hhbmRsZXJfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV91
c2VyX21lc3NhZ2VfaGFuZGxlcl9wb3N0X21lc3NhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VXNlck1lc3NhZ2VIYW5kbGVyCisgKiBAbWVzc2FnZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX3Bvc3RfbWVzc2FnZShXZWJLaXRET01Vc2Vy
TWVzc2FnZUhhbmRsZXIqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBHRXJyb3IqKiBlcnJv
cik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlclByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGFi
YTU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlLmgK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
VXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJNZXNz
YWdlSGFuZGxlci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Vc2VyTWVzc2FnZUhh
bmRsZXIuaD4KKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlciogd3JhcFVzZXJNZXNzYWdlSGFu
ZGxlcihXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXIqKTsKK1dlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlcioga2l0KFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlciopOworV2ViQ29yZTo6VXNl
ck1lc3NhZ2VIYW5kbGVyKiBjb3JlKFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlciopOworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRM
RVJTKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kYTE3YmQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlLmNwcApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9N
X1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0VfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hB
TkRMRVJTX05BTUVTUEFDRSwgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVBy
aXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZT4gY29yZU9iamVjdDsK
KyNlbmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorfSBXZWJLaXRET01Vc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZTsKKworI2lmIEVOQUJMRShVU0VSX01FU1NB
R0VfSEFORExFUlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXJzTmFtZXNwYWNlKiBraXQoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
IChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVy
biBXRUJLSVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UocmV0KTsKKworICAg
IHJldHVybiB3cmFwVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZShvYmopOworfQorCitXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiBjb3JlKFdlYktpdERPTVVzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVXNl
ck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSogd3JhcFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2UoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSogY29yZU9iamVjdCkKK3sK
KyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVVNFUl9NRVNT
QUdFX0hBTkRMRVJTX05BTUVTUEFDRShnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1VTRVJf
TUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
VVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVVzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2UsIHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25h
bWVzcGFjZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV91c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRV9HRVRfUFJJ
VkFURShvYmplY3QpOworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2Vu
ZGlmIC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgcHJpdi0+fldlYktpdERP
TVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Vz
ZXJfbWVzc2FnZV9oYW5kbGVyc19uYW1lc3BhY2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3Vp
bnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0
cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlX3BhcmVudF9jbGFzcykt
PmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJv
cGVydGllcyk7CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBXZWJLaXRE
T01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
VVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRV9HRVRfUFJJVkFURShvYmplY3QpOworICAg
IHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Cisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9i
amVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICByZXR1
cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5k
bGVyc19uYW1lc3BhY2VfY2xhc3NfaW5pdChXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2VQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxl
cnNfbmFtZXNwYWNlX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3VzZXJf
bWVzc2FnZV9oYW5kbGVyc19uYW1lc3BhY2VfaW5pdChXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExF
UlNfTkFNRVNQQUNFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0
RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGUoKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlcnNOYW1lc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
NDdiYTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNw
YWNlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZV9oCisKKyNpZmRlZiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01DdXN0b21VbnN0YWJsZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRSAgICAgICAgICAgICh3ZWJraXRfZG9t
X3VzZXJfbWVzc2FnZV9oYW5kbGVyc19uYW1lc3BhY2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9VU0VSX01F
U1NBR0VfSEFORExFUlNfTkFNRVNQQUNFLCBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQ
QUNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFLCBXZWJLaXRET01V
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
VVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRM
RVJTX05BTUVTUEFDRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVVNFUl9NRVNTQUdFX0hBTkRM
RVJTX05BTUVTUEFDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRV9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZ
UEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRSwgV2ViS2l0RE9NVXNlck1lc3NhZ2VI
YW5kbGVyc05hbWVzcGFjZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ2xhc3Mg
eworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9nZXRf
dHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1l
c3BhY2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZS5oCnNpbWls
YXJpdHkgaW5kZXggNjAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
clByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJp
dmF0ZS5oCmluZGV4IDg3OGI2MjIuLjAyNDFlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNO
YW1lc3BhY2VQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxOSBAQAogICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlX2gKIAotI2luY2x1ZGUgIlRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVXNl
ck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oPgorI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFO
RExFUlMpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yKiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFdl
YkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciopOwotV2ViS2l0RE9NVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Ci1XZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yKik7CitXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiB3cmFwVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZShXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNw
YWNlKik7CitXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiBraXQoV2ViQ29y
ZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSopOworV2ViQ29yZTo6VXNlck1lc3NhZ2VI
YW5kbGVyc05hbWVzcGFjZSogY29yZShXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNw
YWNlKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGVfaCAqLworI2VuZGlmIC8qIEVOQUJM
RShVU0VSX01FU1NBR0VfSEFORExFUlMpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01Vc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZUVEN1
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVZUVEN1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZDk1MmY3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlLmNwcApAQCAtMCwwICsx
LDU5MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTVZUVEN1ZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9D
U1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJH
T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVlRUQ3Vl
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVlRUQ3VlKiBraXQoV2Vi
Q29yZTo6VlRUQ3VlKiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVlRUX0NVRShraXQo
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlKj4ob2JqKSkpOworfQorCitXZWJDb3Jl
OjpWVFRDdWUqIGNvcmUoV2ViS2l0RE9NVlRUQ3VlKiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VlRUQ3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
cmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVlRUQ3VlKiB3cmFwVlRU
Q3VlKFdlYkNvcmU6OlZUVEN1ZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVlRUX0NVRShnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX1ZUVF9DVUUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0sp
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3Z0dF9jdWVfZGlzcGF0Y2hfZXZlbnQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpWVFRDdWUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShW
SURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdnR0X2N1ZV9hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6VlRUQ3VlKiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VlRUQ3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFk
ZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwor
ICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdnR0X2N1
ZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6VlRUQ3VlKiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VlRUQ3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwg
ZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFN
KGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sK
KyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX3Z0dF9jdWVfZGlzcGF0Y2hf
ZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdnR0X2N1
ZV9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21fdnR0X2N1ZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5F
X1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVZUVEN1ZSwgd2Via2l0X2RvbV92dHRfY3VlLCBXRUJL
SVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUUsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRf
RE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVkVSVElDQUwsCisgICAgUFJPUF9TTkFQX1RP
X0xJTkVTLAorICAgIFBST1BfTElORSwKKyAgICBQUk9QX1BPU0lUSU9OLAorICAgIFBST1BfU0la
RSwKKyAgICBQUk9QX0FMSUdOLAorICAgIFBST1BfVEVYVCwKKyAgICBQUk9QX1JFR0lPTl9JRCwK
K307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01WVFRDdWUqIHNlbGYgPSBXRUJLSVRfRE9NX1ZU
VF9DVUUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9WRVJUSUNBTDoKKyAgICAgICAgd2Via2l0X2RvbV92dHRfY3VlX3NldF92ZXJ0aWNhbChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NOQVBfVE9fTElORVM6CisgICAgICAgIHdlYmtpdF9kb21fdnR0X2N1ZV9z
ZXRfc25hcF90b19saW5lcyhzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MSU5FOgorICAgICAgICB3ZWJraXRfZG9tX3Z0dF9j
dWVfc2V0X2xpbmUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSwgbnVsbHB0cik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QT1NJVElPTjoKKyAgICAgICAgd2Via2l0X2Rv
bV92dHRfY3VlX3NldF9wb3NpdGlvbihzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUpLCBu
dWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAgICAgIHdl
YmtpdF9kb21fdnR0X2N1ZV9zZXRfc2l6ZShzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUp
LCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAg
ICB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAg
ICAgICAgd2Via2l0X2RvbV92dHRfY3VlX3NldF90ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVHSU9OX0lEOgorICAg
ICAgICB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3JlZ2lvbl9pZChzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdnR0
X2N1ZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01WVFRDdWUqIHNl
bGYgPSBXRUJLSVRfRE9NX1ZUVF9DVUUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9WRVJUSUNBTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3VlX2dldF92ZXJ0aWNhbChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TTkFQX1RPX0xJTkVTOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3NuYXBfdG9fbGluZXMoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTElORToKKyAgICAgICAgZ192YWx1
ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X2xpbmUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9TSVRJT046CisgICAgICAgIGdfdmFsdWVf
c2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3VlX2dldF9wb3NpdGlvbihzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfc2l6ZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3VlX2dldF9hbGlnbihzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3RleHQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUkVHSU9OX0lEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3JlZ2lvbl9pZChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Z0dF9jdWVfY2xhc3NfaW5pdChXZWJLaXRE
T01WVFRDdWVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Byb3BlcnR5
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1ZFUlRJQ0FMLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgInZlcnRpY2FsIiwKKyAgICAgICAgICAgICJWVFRDdWU6dmVydGlj
YWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFZUVEN1ZTp2ZXJ0aWNhbCIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9TTkFQX1RPX0xJTkVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICJzbmFwLXRvLWxpbmVzIiwKKyAgICAgICAgICAgICJWVFRDdWU6
c25hcC10by1saW5lcyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBWVFRDdWU6
c25hcC10by1saW5lcyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MSU5FLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImxpbmUiLAorICAgICAgICAgICAgIlZUVEN1
ZTpsaW5lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgVlRUQ3VlOmxpbmUiLAor
ICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QT1NJVElPTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJwb3NpdGlvbiIsCisgICAg
ICAgICAgICAiVlRUQ3VlOnBvc2l0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3Vi
bGUgVlRUQ3VlOnBvc2l0aW9uIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VC
TEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfU0laRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAg
ICJzaXplIiwKKyAgICAgICAgICAgICJWVFRDdWU6c2l6ZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnZG91YmxlIFZUVEN1ZTpzaXplIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19N
QVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIlZUVEN1ZTphbGlnbiIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogVlRUQ3VlOmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RF
WFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGV4dCIsCisg
ICAgICAgICAgICAiVlRUQ3VlOnRleHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IFZUVEN1ZTp0ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFR0lPTl9JRCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJyZWdpb24taWQiLAorICAgICAgICAgICAg
IlZUVEN1ZTpyZWdpb24taWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFZUVEN1
ZTpyZWdpb24taWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92dHRfY3VlX2luaXQo
V2ViS2l0RE9NVlRUQ3VlKiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsK
K30KKworV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogd2Via2l0X2RvbV92dHRfY3VlX2dldF9j
dWVfYXNfaHRtbChXZWJLaXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6RG9jdW1lbnRGcmFnbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PmdldEN1ZUFzSFRNTCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV92dHRfY3Vl
X2dldF92ZXJ0aWNhbChXZWJLaXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52ZXJ0aWNhbCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2Vu
ZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3Z0dF9j
dWVfc2V0X3ZlcnRpY2FsKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpW
VFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFZlcnRpY2FsKGNvbnZlcnRlZFZhbHVl
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfc25hcF90b19s
aW5lcyhXZWJLaXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+c25hcFRvTGluZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Cisj
ZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdnR0
X2N1ZV9zZXRfc25hcF90b19saW5lcyhXZWJLaXRET01WVFRDdWUqIHNlbGYsIGdib29sZWFuIHZh
bHVlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZU
VF9DVUUoc2VsZikpOworICAgIFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRTbmFwVG9MaW5lcyh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU9fVFJBQ0spICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV92dHRfY3VlX2dldF9saW5lKFdl
YktpdERPTVZUVEN1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3Vl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+
bGluZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURF
T19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X2xpbmUoV2ViS2l0
RE9NVlRUQ3VlKiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpW
VFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0TGluZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnZG91
YmxlIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfcG9zaXRpb24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxm
KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19W
VFRfQ1VFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5wb3NpdGlvbigpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30K
Kwordm9pZCB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3Bvc2l0aW9uKFdlYktpdERPTVZUVEN1ZSog
c2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGl0ZW0tPnNldFBvc2l0aW9uKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2dkb3VibGUgd2Vi
a2l0X2RvbV92dHRfY3VlX2dldF9zaXplKFdlYktpdERPTVZUVEN1ZSogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+c2l6ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+
KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX3Z0dF9jdWVfc2V0X3NpemUoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBnZG91YmxlIHZhbHVl
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0U2l6
ZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVO
VVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxF
KFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV92dHRfY3VlX2dldF9hbGln
bihXZWJLaXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZU
VEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hbGlnbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShW
SURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X2FsaWduKFdl
YktpdERPTVZUVEN1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VF
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGl0ZW0tPnNldEFsaWduKGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3RleHQoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKQorewor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VF
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGV4dCgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJl
dHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJr
aXRfZG9tX3Z0dF9jdWVfc2V0X3RleHQoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVlRUX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRUZXh0KGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8K
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfcmVnaW9uX2lkKFdlYktpdERPTVZU
VEN1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVlRUX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnJlZ2lvbklkKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNL
KSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcmVnaW9uX2lkKFdlYktpdERP
TVZUVEN1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UmVnaW9uSWQoY29udmVydGVkVmFsdWUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5k
aWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZUVEN1
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01WVFRDdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
ZmVkZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WVFRDdWUuaApAQCAtMCwwICsxLDIzNyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01WVFRD
dWVfaAorI2RlZmluZSBXZWJLaXRET01WVFRDdWVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01UZXh0VHJhY2tDdWUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX1ZUVF9DVUUgICAgICAgICAgICAod2Via2l0X2RvbV92dHRfY3VlX2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ET01fVlRUX0NVRShvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVlRUX0NVRSwgV2ViS2l0
RE9NVlRUQ3VlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9WVFRfQ1VFX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9WVFRfQ1VF
LCBXZWJLaXRET01WVFRDdWVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19WVFRfQ1VFKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9WVFRfQ1VFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19WVFRfQ1VFX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9WVFRf
Q1VFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9WVFRfQ1VFX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9WVFRfQ1VFLCBXZWJL
aXRET01WVFRDdWVDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVlRUQ3VlIHsKKyAgICBXZWJL
aXRET01UZXh0VHJhY2tDdWUgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01WVFRDdWVDbGFzcyB7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlQ2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV92dHRfY3VlX2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfY3VlX2FzX2h0bWw6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqCit3ZWJraXRf
ZG9tX3Z0dF9jdWVfZ2V0X2N1ZV9hc19odG1sKFdlYktpdERPTVZUVEN1ZSogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV92dHRfY3VlX2dldF92ZXJ0aWNhbDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01WVFRDdWUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdnR0X2N1ZV9nZXRf
dmVydGljYWwoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0
dF9jdWVfc2V0X3ZlcnRpY2FsOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICogQHZh
bHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdnR0X2N1ZV9zZXRfdmVydGlj
YWwoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3NuYXBfdG9fbGluZXM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21fdnR0X2N1ZV9nZXRfc25hcF90b19saW5lcyhXZWJLaXRET01WVFRDdWUqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfc25hcF90b19saW5lczoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV92dHRf
Y3VlX3NldF9zbmFwX3RvX2xpbmVzKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgZ2Jvb2xlYW4gdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfbGluZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01WVFRDdWUKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fdnR0
X2N1ZV9nZXRfbGluZShXZWJLaXRET01WVFRDdWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fdnR0X2N1ZV9zZXRfbGluZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqIEB2
YWx1ZTogQSAjZ2RvdWJsZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdnR0X2N1ZV9zZXRfbGlu
ZShXZWJLaXRET01WVFRDdWUqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Bvc2l0aW9uOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV92dHRf
Y3VlX2dldF9wb3NpdGlvbihXZWJLaXRET01WVFRDdWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fdnR0X2N1ZV9zZXRfcG9zaXRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3Vl
CisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Z0dF9jdWVf
c2V0X3Bvc2l0aW9uKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfc2l6ZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9k
b21fdnR0X2N1ZV9nZXRfc2l6ZShXZWJLaXRET01WVFRDdWUqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdnR0X2N1ZV9zZXRfc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUK
KyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdnR0X2N1ZV9z
ZXRfc2l6ZShXZWJLaXRET01WVFRDdWUqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X2FsaWduOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV92dHRf
Y3VlX2dldF9hbGlnbihXZWJLaXRET01WVFRDdWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fdnR0X2N1ZV9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV92dHRfY3VlX3NldF9hbGln
bihXZWJLaXRET01WVFRDdWUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfdGV4dDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01WVFRDdWUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdnR0X2N1
ZV9nZXRfdGV4dChXZWJLaXRET01WVFRDdWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
dnR0X2N1ZV9zZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV92dHRfY3VlX3NldF90ZXh0KFdlYktpdERPTVZUVEN1ZSogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Jl
Z2lvbl9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21fdnR0X2N1ZV9nZXRfcmVnaW9uX2lkKFdlYktpdERPTVZUVEN1ZSogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX3NldF9yZWdpb25faWQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdnR0X2N1ZV9z
ZXRfcmVnaW9uX2lkKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTVZUVEN1ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZUVEN1
ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM2YmJhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZUVEN1ZVByaXZh
dGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTVZUVEN1ZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01WVFRDdWVQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvVlRUQ3VlLmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTVZUVEN1ZS5oPgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01WVFRDdWUqIHdyYXBWVFRDdWUoV2ViQ29yZTo6VlRUQ3Vl
Kik7CitXZWJLaXRET01WVFRDdWUqIGtpdChXZWJDb3JlOjpWVFRDdWUqKTsKK1dlYkNvcmU6OlZU
VEN1ZSogY29yZShXZWJLaXRET01WVFRDdWUqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NVlRU
Q3VlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5U3RhdGUuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01WYWxpZGl0eVN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
NDZjNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0eVN0YXRlLmNwcApAQCAtMCww
ICsxLDM1MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVZhbGlkaXR5U3RhdGUuaCIKKworI2luY2x1ZGUg
PFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1ZBTElE
SVRZX1NUQVRFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9i
aiwgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFLCBXZWJLaXRET01WYWxpZGl0eVN0YXRl
UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRl
IHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZT4gY29yZU9iamVjdDsKK30gV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01WYWxpZGl0eVN0YXRlKiBraXQoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogb2JqKQorewor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1ZB
TElESVRZX1NUQVRFKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFZhbGlkaXR5U3RhdGUob2JqKTsK
K30KKworV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogY29yZShXZWJLaXRET01WYWxpZGl0eVN0YXRl
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
VmFsaWRpdHlTdGF0ZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTVZhbGlkaXR5U3RhdGUqIHdyYXBWYWxpZGl0eVN0YXRlKFdlYkNv
cmU6OlZhbGlkaXR5U3RhdGUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX1ZBTElESVRZX1NUQVRFKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZSwgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVkFMVUVfTUlT
U0lORywKKyAgICBQUk9QX1RZUEVfTUlTTUFUQ0gsCisgICAgUFJPUF9QQVRURVJOX01JU01BVENI
LAorICAgIFBST1BfVE9PX0xPTkcsCisgICAgUFJPUF9SQU5HRV9VTkRFUkZMT1csCisgICAgUFJP
UF9SQU5HRV9PVkVSRkxPVywKKyAgICBQUk9QX1NURVBfTUlTTUFUQ0gsCisgICAgUFJPUF9CQURf
SU5QVVQsCisgICAgUFJPUF9DVVNUT01fRVJST1IsCisgICAgUFJPUF9WQUxJRCwKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9WQUxJRElUWV9TVEFURV9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJp
di0+fldlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYgPSBXRUJL
SVRfRE9NX1ZBTElESVRZX1NUQVRFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfVkFMVUVfTUlTU0lORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdmFsdWVfbWlzc2luZyhz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFX01JU01BVENIOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRl
X2dldF90eXBlX21pc21hdGNoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1BBVFRFUk5fTUlTTUFUQ0g6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3BhdHRlcm5fbWlzbWF0Y2goc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVE9PX0xPTkc6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3Rvb19sb25nKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JBTkdFX1VOREVSRkxPVzoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0
ZV9nZXRfcmFuZ2VfdW5kZXJmbG93KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1JBTkdFX09WRVJGTE9XOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9yYW5nZV9vdmVyZmxvdyhzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEVQX01JU01BVENIOgorICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9zdGVwX21p
c21hdGNoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JBRF9JTlBVVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9z
dGF0ZV9nZXRfYmFkX2lucHV0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NVU1RPTV9FUlJPUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfY3VzdG9tX2Vycm9yKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1ZBTElEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF92YWxpZChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVkFMSURJVFlfU1RBVEVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSo+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJu
IG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9jbGFz
c19pbml0KFdlYktpdERPTVZhbGlkaXR5U3RhdGVDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVj
dG9yID0gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9maW5hbGl6ZTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTFVFX01JU1NJTkcsCisgICAgICAg
IGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInZhbHVlLW1pc3NpbmciLAorICAg
ICAgICAgICAgIlZhbGlkaXR5U3RhdGU6dmFsdWUtbWlzc2luZyIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIFZhbGlkaXR5U3RhdGU6dmFsdWUtbWlzc2luZyIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1RZUEVfTUlTTUFUQ0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgInR5cGUtbWlzbWF0Y2giLAorICAgICAgICAgICAgIlZhbGlkaXR5U3RhdGU6
dHlwZS1taXNtYXRjaCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFZhbGlkaXR5
U3RhdGU6dHlwZS1taXNtYXRjaCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBVFRFUk5fTUlTTUFU
Q0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInBhdHRlcm4t
bWlzbWF0Y2giLAorICAgICAgICAgICAgIlZhbGlkaXR5U3RhdGU6cGF0dGVybi1taXNtYXRjaCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFZhbGlkaXR5U3RhdGU6cGF0dGVybi1t
aXNtYXRjaCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RPT19MT05HLAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ0b28tbG9uZyIsCisgICAgICAgICAgICAiVmFs
aWRpdHlTdGF0ZTp0b28tbG9uZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFZh
bGlkaXR5U3RhdGU6dG9vLWxvbmciLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SQU5HRV9VTkRFUkZM
T1csCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInJhbmdlLXVu
ZGVyZmxvdyIsCisgICAgICAgICAgICAiVmFsaWRpdHlTdGF0ZTpyYW5nZS11bmRlcmZsb3ciLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBWYWxpZGl0eVN0YXRlOnJhbmdlLXVuZGVy
ZmxvdyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JBTkdFX09WRVJGTE9XLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJyYW5nZS1vdmVyZmxvdyIsCisgICAgICAg
ICAgICAiVmFsaWRpdHlTdGF0ZTpyYW5nZS1vdmVyZmxvdyIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdib29sZWFuIFZhbGlkaXR5U3RhdGU6cmFuZ2Utb3ZlcmZsb3ciLAorICAgICAgICAgICAg
RkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TVEVQX01JU01BVENILAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJzdGVwLW1pc21hdGNoIiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0YXRlOnN0
ZXAtbWlzbWF0Y2giLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBWYWxpZGl0eVN0
YXRlOnN0ZXAtbWlzbWF0Y2giLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CQURfSU5QVVQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImJhZC1pbnB1dCIsCisgICAg
ICAgICAgICAiVmFsaWRpdHlTdGF0ZTpiYWQtaW5wdXQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnYm9vbGVhbiBWYWxpZGl0eVN0YXRlOmJhZC1pbnB1dCIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NVU1RPTV9FUlJPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAiY3VzdG9tLWVycm9yIiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0YXRlOmN1c3RvbS1lcnJv
ciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFZhbGlkaXR5U3RhdGU6Y3VzdG9t
LWVycm9yIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgInZhbGlkIiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0
YXRlOnZhbGlkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gVmFsaWRpdHlTdGF0
ZTp2YWxpZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVf
aW5pdChXZWJLaXRET01WYWxpZGl0eVN0YXRlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVZh
bGlkaXR5U3RhdGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9WQUxJRElUWV9TVEFURV9HRVRf
UFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVZhbGlkaXR5U3RhdGVQ
cml2YXRlKCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3Zh
bHVlX21pc3NpbmcoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19WQUxJRElUWV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OlZhbGlkaXR5U3RhdGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+dmFsdWVNaXNzaW5nKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdHlwZV9taXNtYXRjaChXZWJL
aXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZB
TElESVRZX1NUQVRFKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT50
eXBlTWlzbWF0Y2goKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9wYXR0ZXJuX21pc21hdGNoKFdlYktpdERPTVZhbGlkaXR5
U3RhdGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEUo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnBhdHRlcm5NaXNtYXRj
aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRp
dHlfc3RhdGVfZ2V0X3Rvb19sb25nKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnRvb0xvbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9yYW5nZV91bmRlcmZs
b3coV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19WQUxJRElUWV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZhbGlkaXR5
U3RhdGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+cmFuZ2VVbmRlcmZsb3coKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9yYW5nZV9vdmVyZmxvdyhXZWJLaXRET01W
YWxpZGl0eVN0YXRlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZBTElESVRZ
X1NUQVRFKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5yYW5nZU92
ZXJmbG93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV92
YWxpZGl0eV9zdGF0ZV9nZXRfc3RlcF9taXNtYXRjaChXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKHNlbGYpLCBG
QUxTRSk7CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zdGVwTWlzbWF0Y2goKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dl
dF9iYWRfaW5wdXQoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19WQUxJRElUWV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OlZhbGlkaXR5U3RhdGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+YmFkSW5wdXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9v
bGVhbiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9jdXN0b21fZXJyb3IoV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WQUxJRElU
WV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZhbGlkaXR5U3RhdGUqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y3VzdG9t
RXJyb3IoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3Zh
bGlkaXR5X3N0YXRlX2dldF92YWxpZChXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT52YWxpZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0eVN0YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2MTljYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZS5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVZhbGlkaXR5U3RhdGVf
aAorI2RlZmluZSBXZWJLaXRET01WYWxpZGl0eVN0YXRlX2gKKworI2lmZGVmIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9WQUxJRElUWV9TVEFURSAgICAgICAgICAgICh3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0
YXRlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVkFMSURJVFlfU1RBVEUob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX1ZBTElESVRZX1NUQVRFLCBXZWJLaXRET01WYWxpZGl0eVN0YXRlKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9WQUxJRElUWV9TVEFURV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUsIFdlYktpdERP
TVZhbGlkaXR5U3RhdGVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19WQUxJRElUWV9TVEFU
RShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfVkFMSURJVFlfU1RBVEUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1ZBTElESVRZ
X1NUQVRFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSkpCisjZGVmaW5lIFdFQktJVF9ET01fVkFMSURJ
VFlfU1RBVEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmop
LCAgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFLCBXZWJLaXRET01WYWxpZGl0eVN0YXRl
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVZhbGlkaXR5U3RhdGUgeworICAgIFdlYktpdERP
TU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVZhbGlkaXR5
U3RhdGVDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdHlwZSh2
b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF92YWx1ZV9taXNz
aW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdmFsdWVfbWlzc2luZyhX
ZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlk
aXR5X3N0YXRlX2dldF90eXBlX21pc21hdGNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZhbGlk
aXR5U3RhdGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV92YWxpZGl0eV9z
dGF0ZV9nZXRfdHlwZV9taXNtYXRjaChXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9wYXR0ZXJuX21pc21hdGNoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1cm5zOiBBICNn
Ym9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcGF0dGVybl9taXNtYXRjaChXZWJL
aXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5
X3N0YXRlX2dldF90b29fbG9uZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRl
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0
X3Rvb19sb25nKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3JhbmdlX3VuZGVyZmxvdzoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21fdmFsaWRpdHlfc3RhdGVfZ2V0X3JhbmdlX3VuZGVyZmxvdyhXZWJLaXRET01WYWxpZGl0eVN0
YXRlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9yYW5n
ZV9vdmVyZmxvdzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3JhbmdlX292
ZXJmbG93KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fdmFsaWRpdHlfc3RhdGVfZ2V0X3N0ZXBfbWlzbWF0Y2g6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3Zh
bGlkaXR5X3N0YXRlX2dldF9zdGVwX21pc21hdGNoKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X2JhZF9pbnB1dDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X2JhZF9pbnB1dChXZWJLaXRET01W
YWxpZGl0eVN0YXRlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRl
X2dldF9jdXN0b21fZXJyb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9j
dXN0b21fZXJyb3IoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdmFsaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3ZhbGlk
aXR5X3N0YXRlX2dldF92YWxpZChXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2Vu
ZGlmIC8qIFdlYktpdERPTVZhbGlkaXR5U3RhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxp
ZGl0eVN0YXRlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjhkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVZhbGlkaXR5U3RhdGVQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvVmFsaWRpdHlTdGF0ZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01W
YWxpZGl0eVN0YXRlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVmFsaWRpdHlT
dGF0ZSogd3JhcFZhbGlkaXR5U3RhdGUoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSopOworV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZSoga2l0KFdlYkNvcmU6OlZhbGlkaXR5U3RhdGUqKTsKK1dlYkNvcmU6
OlZhbGlkaXR5U3RhdGUqIGNvcmUoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlk
ZW9QbGF5YmFja1F1YWxpdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjVhOTM2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5LmNw
cApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVZpZGVv
UGxheWJhY2tRdWFsaXR5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
ZGVmaW5lIFdFQktJVF9ET01fVklERU9fUExBWUJBQ0tfUVVBTElUWV9HRVRfUFJJVkFURShvYmop
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9WSURFT19Q
TEFZQkFDS19RVUFMSVRZLCBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUgewor
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgUmVmUHRyPFdlYkNvcmU6OlZpZGVvUGxheWJh
Y2tRdWFsaXR5PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpCit9
IFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZTsKKworI2lmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01WaWRlb1BsYXliYWNr
UXVhbGl0eSoga2l0KFdlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5KiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVklERU9f
UExBWUJBQ0tfUVVBTElUWShyZXQpOworCisgICAgcmV0dXJuIHdyYXBWaWRlb1BsYXliYWNrUXVh
bGl0eShvYmopOworfQorCitXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSogY29yZShXZWJL
aXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVmlkZW9Q
bGF5YmFja1F1YWxpdHkqIHdyYXBWaWRlb1BsYXliYWNrUXVhbGl0eShXZWJDb3JlOjpWaWRlb1Bs
YXliYWNrUXVhbGl0eSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fVklERU9fUExBWUJBQ0tfUVVBTElUWShnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFksICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU09VUkNFKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVZpZGVv
UGxheWJhY2tRdWFsaXR5LCB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHksIFdFQktJ
VF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NSRUFU
SU9OX1RJTUUsCisgICAgUFJPUF9UT1RBTF9WSURFT19GUkFNRVMsCisgICAgUFJPUF9EUk9QUEVE
X1ZJREVPX0ZSQU1FUywKKyAgICBQUk9QX0NPUlJVUFRFRF9WSURFT19GUkFNRVMsCisgICAgUFJP
UF9UT1RBTF9GUkFNRV9ERUxBWSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmlkZW9f
cGxheWJhY2tfcXVhbGl0eV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9WSURFT19Q
TEFZQkFDS19RVUFMSVRZX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVj
dC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBwcml2LT5+V2Vi
S2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVh
bGl0eV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01WaWRlb1BsYXli
YWNrUXVhbGl0eSogc2VsZiA9IFdFQktJVF9ET01fVklERU9fUExBWUJBQ0tfUVVBTElUWShvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NSRUFUSU9O
X1RJTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV92aWRl
b19wbGF5YmFja19xdWFsaXR5X2dldF9jcmVhdGlvbl90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1RPVEFMX1ZJREVPX0ZSQU1FUzoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfdG90
YWxfdmlkZW9fZnJhbWVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RS
T1BQRURfVklERU9fRlJBTUVTOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF9kcm9wcGVkX3ZpZGVvX2ZyYW1lcyhz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT1JSVVBURURfVklERU9fRlJB
TUVTOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV92aWRlb19w
bGF5YmFja19xdWFsaXR5X2dldF9jb3JydXB0ZWRfdmlkZW9fZnJhbWVzKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RPVEFMX0ZSQU1FX0RFTEFZOgorICAgICAgICBnX3Zh
bHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9n
ZXRfdG90YWxfZnJhbWVfZGVsYXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFdlYktpdERPTVZpZGVvUGxh
eWJhY2tRdWFsaXR5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVklERU9fUExBWUJBQ0tfUVVB
TElUWV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSo+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92aWRl
b19wbGF5YmFja19xdWFsaXR5X2NsYXNzX2luaXQoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxp
dHlDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQ
cml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdmlk
ZW9fcGxheWJhY2tfcXVhbGl0eV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2ZpbmFsaXplOworICAgIGdv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFs
aXR5X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DUkVBVElPTl9USU1FLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImNyZWF0aW9uLXRpbWUiLAor
ICAgICAgICAgICAgIlZpZGVvUGxheWJhY2tRdWFsaXR5OmNyZWF0aW9uLXRpbWUiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnZG91YmxlIFZpZGVvUGxheWJhY2tRdWFsaXR5OmNyZWF0aW9uLXRp
bWUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RPVEFMX1ZJ
REVPX0ZSQU1FUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgInRv
dGFsLXZpZGVvLWZyYW1lcyIsCisgICAgICAgICAgICAiVmlkZW9QbGF5YmFja1F1YWxpdHk6dG90
YWwtdmlkZW8tZnJhbWVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFZpZGVvUGxh
eWJhY2tRdWFsaXR5OnRvdGFsLXZpZGVvLWZyYW1lcyIsCisgICAgICAgICAgICAwLCBHX01BWFVM
T05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfRFJPUFBFRF9WSURFT19GUkFNRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9u
ZygKKyAgICAgICAgICAgICJkcm9wcGVkLXZpZGVvLWZyYW1lcyIsCisgICAgICAgICAgICAiVmlk
ZW9QbGF5YmFja1F1YWxpdHk6ZHJvcHBlZC12aWRlby1mcmFtZXMiLAorICAgICAgICAgICAgInJl
YWQtb25seSBndWxvbmcgVmlkZW9QbGF5YmFja1F1YWxpdHk6ZHJvcHBlZC12aWRlby1mcmFtZXMi
LAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPUlJVUFRFRF9WSURFT19GUkFNRVMs
CisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJjb3JydXB0ZWQtdmlk
ZW8tZnJhbWVzIiwKKyAgICAgICAgICAgICJWaWRlb1BsYXliYWNrUXVhbGl0eTpjb3JydXB0ZWQt
dmlkZW8tZnJhbWVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFZpZGVvUGxheWJh
Y2tRdWFsaXR5OmNvcnJ1cHRlZC12aWRlby1mcmFtZXMiLAorICAgICAgICAgICAgMCwgR19NQVhV
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1RPVEFMX0ZSQU1FX0RFTEFZLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91Ymxl
KAorICAgICAgICAgICAgInRvdGFsLWZyYW1lLWRlbGF5IiwKKyAgICAgICAgICAgICJWaWRlb1Bs
YXliYWNrUXVhbGl0eTp0b3RhbC1mcmFtZS1kZWxheSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdkb3VibGUgVmlkZW9QbGF5YmFja1F1YWxpdHk6dG90YWwtZnJhbWUtZGVsYXkiLAorICAgICAg
ICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmlkZW9fcGxh
eWJhY2tfcXVhbGl0eV9pbml0KFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiByZXF1ZXN0
KQoreworICAgIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVklERU9fUExBWUJBQ0tfUVVBTElUWV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAg
ICBuZXcgKHByaXYpIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZSgpOworfQor
CitnZG91YmxlIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfY3JlYXRpb25f
dGltZShXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogc2VsZikKK3sKKyNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1BMQVlCQUNLX1FV
QUxJVFkoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+Y3JlYXRp
b25UaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFNvdXJjZSIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShN
RURJQV9TT1VSQ0UpICovCit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1
YWxpdHlfZ2V0X3RvdGFsX3ZpZGVvX2ZyYW1lcyhXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0
eSogc2VsZikKK3sKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFkoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZp
ZGVvUGxheWJhY2tRdWFsaXR5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9u
ZyByZXN1bHQgPSBpdGVtLT50b3RhbFZpZGVvRnJhbWVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIk1lZGlhIFNvdXJjZSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9u
Zz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NPVVJDRSkgKi8KK30KKworZ3Vsb25nIHdl
YmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfZHJvcHBlZF92aWRlb19mcmFtZXMo
V2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYpCit7CisjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WSURFT19QTEFZQkFDS19RVUFMSVRZ
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+ZHJvcHBlZFZpZGVv
RnJhbWVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFNvdXJjZSIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKE1F
RElBX1NPVVJDRSkgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVh
bGl0eV9nZXRfY29ycnVwdGVkX3ZpZGVvX2ZyYW1lcyhXZWJLaXRET01WaWRlb1BsYXliYWNrUXVh
bGl0eSogc2VsZikKK3sKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFkoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlZpZGVvUGxheWJhY2tRdWFsaXR5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
bG9uZyByZXN1bHQgPSBpdGVtLT5jb3JydXB0ZWRWaWRlb0ZyYW1lcygpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJNZWRpYSBTb3VyY2UiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9TT1VSQ0UpICovCit9CisKK2dk
b3VibGUgd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF90b3RhbF9mcmFtZV9k
ZWxheShXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogc2VsZikKK3sKKyNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1BMQVlCQUNLX1FV
QUxJVFkoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+dG90YWxG
cmFtZURlbGF5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFNvdXJj
ZSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJM
RShNRURJQV9TT1VSQ0UpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1
YWxpdHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zMzNiYTcxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9Q
bGF5YmFja1F1YWxpdHkuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eV9oCisjZGVm
aW5lIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5X2gKKworI2lmZGVmIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9WSURFT19QTEFZQkFDS19RVUFMSVRZICAgICAgICAgICAgKHdlYmtpdF9kb21fdmlk
ZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVP
X1BMQVlCQUNLX1FVQUxJVFkob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFksIFdlYktp
dERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9WSURFT19QTEFZ
QkFDS19RVUFMSVRZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9WSURFT19QTEFZQkFDS19RVUFMSVRZLCBXZWJLaXRET01W
aWRlb1BsYXliYWNrUXVhbGl0eUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1ZJREVPX1BM
QVlCQUNLX1FVQUxJVFkob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFkpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFlfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1BMQVlCQUNL
X1FVQUxJVFkpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFlfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFksIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFs
aXR5Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5IHsKKyAg
ICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01WaWRlb1BsYXliYWNrUXVhbGl0eUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3ZpZGVvX3Bs
YXliYWNrX3F1YWxpdHlfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV92aWRl
b19wbGF5YmFja19xdWFsaXR5X2dldF9jcmVhdGlvbl90aW1lOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVZpZGVvUGxheWJhY2tRdWFsaXR5CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRf
ZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2NyZWF0aW9uX3RpbWUoV2ViS2l0RE9NVmlk
ZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fcGxh
eWJhY2tfcXVhbGl0eV9nZXRfdG90YWxfdmlkZW9fZnJhbWVzOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVZpZGVvUGxheWJhY2tRdWFsaXR5CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2Rv
bV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF90b3RhbF92aWRlb19mcmFtZXMoV2ViS2l0RE9N
VmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9f
cGxheWJhY2tfcXVhbGl0eV9nZXRfZHJvcHBlZF92aWRlb19mcmFtZXM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJr
aXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2Ryb3BwZWRfdmlkZW9fZnJhbWVzKFdl
YktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2NvcnJ1cHRlZF92aWRlb19mcmFtZXM6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkKKyAqCisgKiBSZXR1cm5zOiBB
ICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vs
b25nCit3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2NvcnJ1cHRlZF92aWRl
b19mcmFtZXMoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfdG90YWxfZnJhbWVfZGVsYXk6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkKKyAqCisgKiBSZXR1
cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdkb3VibGUKK3dlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfdG90YWxf
ZnJhbWVfZGVsYXkoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5k
aWYgLyogV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxp
dHlQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkY2U3Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlLmgKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01W
aWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb1Bs
YXliYWNrUXVhbGl0eS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01WaWRlb1BsYXli
YWNrUXVhbGl0eS5oPgorI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHdyYXBWaWRlb1BsYXliYWNrUXVh
bGl0eShXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSopOworV2ViS2l0RE9NVmlkZW9QbGF5
YmFja1F1YWxpdHkqIGtpdChXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSopOworV2ViQ29y
ZTo6VmlkZW9QbGF5YmFja1F1YWxpdHkqIGNvcmUoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxp
dHkqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NP
VVJDRSkgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2suY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNr
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWI4ZDQ3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrLmNwcApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTVZpZGVvVHJhY2suaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0dFVF9QUklWQVRFKG9iaikg
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RS
QUNLLCBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTVZpZGVvVHJhY2tQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgUmVm
UHRyPFdlYkNvcmU6OlZpZGVvVHJhY2s+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorfSBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZTsKKworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVZpZGVvVHJhY2sq
IGtpdChXZWJDb3JlOjpWaWRlb1RyYWNrKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVklERU9fVFJBQ0socmV0KTsKKworICAg
IHJldHVybiB3cmFwVmlkZW9UcmFjayhvYmopOworfQorCitXZWJDb3JlOjpWaWRlb1RyYWNrKiBj
b3JlKFdlYktpdERPTVZpZGVvVHJhY2sqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1RyYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVmlkZW9UcmFjayogd3JhcFZp
ZGVvVHJhY2soV2ViQ29yZTo6VmlkZW9UcmFjayogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVklERU9fVFJBQ0soZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDSywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01WaWRlb1RyYWNrLCB3
ZWJraXRfZG9tX3ZpZGVvX3RyYWNrLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9JRCwKKyAgICBQUk9QX0tJTkQsCisgICAgUFJPUF9MQUJF
TCwKKyAgICBQUk9QX0xBTkdVQUdFLAorICAgIFBST1BfU0VMRUNURUQsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVklERU9f
VFJBQ0tfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwor
I2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBwcml2LT5+V2ViS2l0RE9NVmlkZW9U
cmFja1ByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3ZpZGVvX3RyYWNr
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdmlkZW9fdHJhY2tfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZiA9IFdFQktJVF9ET01fVklERU9fVFJBQ0sob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRDoK
KyAgICAgICAgd2Via2l0X2RvbV92aWRlb190cmFja19zZXRfc2VsZWN0ZWQoc2VsZiwgZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV92aWRlb190cmFja19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01WaWRlb1RyYWNrKiBzZWxmID0gV0VCS0lUX0RPTV9WSURFT19UUkFDSyhvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0lEOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9pZChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9LSU5EOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9raW5kKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9sYWJlbChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQU5HVUFHRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV92aWRlb190cmFja19nZXRfbGFuZ3Vh
Z2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURUQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0
X3NlbGVjdGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX3ZpZGVvX3RyYWNrX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdmlk
ZW9fdHJhY2tfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisgICAgV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZJREVP
X1RSQUNLX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlZpZGVvVHJhY2sqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5j
b3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92aWRlb190cmFja19j
bGFzc19pbml0KFdlYktpdERPTVZpZGVvVHJhY2tDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NVmlkZW9UcmFja1ByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9y
ID0gd2Via2l0X2RvbV92aWRlb190cmFja19jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X2RvbV92aWRlb190cmFja19maW5hbGl6ZTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfc2V0X3Byb3BlcnR5
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV92aWRlb190cmFj
a19nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSUQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaWQiLAorICAgICAgICAgICAgIlZpZGVvVHJhY2s6
aWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVmlkZW9UcmFjazppZCIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0tJTkQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAia2luZCIsCisgICAgICAgICAgICAiVmlkZW9UcmFjazpraW5kIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2NoYXIqIFZpZGVvVHJhY2s6a2luZCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xB
QkVMLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxhYmVsIiwK
KyAgICAgICAgICAgICJWaWRlb1RyYWNrOmxhYmVsIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2NoYXIqIFZpZGVvVHJhY2s6bGFiZWwiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQU5HVUFHRSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsYW5ndWFnZSIsCisgICAg
ICAgICAgICAiVmlkZW9UcmFjazpsYW5ndWFnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdj
aGFyKiBWaWRlb1RyYWNrOmxhbmd1YWdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VMRUNURUQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInNlbGVjdGVkIiwKKyAg
ICAgICAgICAgICJWaWRlb1RyYWNrOnNlbGVjdGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdib29sZWFuIFZpZGVvVHJhY2s6c2VsZWN0ZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV92aWRlb190cmFja19pbml0KFdlYktpdERPTVZpZGVvVHJhY2sqIHJlcXVlc3QpCit7
CisgICAgV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZJREVP
X1RSQUNLX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVmlk
ZW9UcmFja1ByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0
X2lkKFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpWaWRlb1RyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmlkKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV92aWRlb190
cmFja19nZXRfa2luZChXZWJLaXRET01WaWRlb1RyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WSURFT19UUkFDSyhzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5raW5kKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJu
IDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0
X2RvbV92aWRlb190cmFja19nZXRfbGFiZWwoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9f
VFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+bGFiZWwoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNr
IikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9sYW5ndWFnZShXZWJLaXRET01WaWRl
b1RyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19WSURFT19UUkFDSyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFj
ayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5sYW5ndWFnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShW
SURFT19UUkFDSykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV92aWRlb190cmFja19nZXRf
c2VsZWN0ZWQoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9fVFJBQ0soc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3
ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX3NldF9zZWxlY3RlZChXZWJLaXRET01WaWRlb1RyYWNrKiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19WSURFT19UUkFDSyhzZWxmKSk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFj
ayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTZWxlY3RlZCh2YWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikK
KyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VmlkZW9UcmFjay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNWE3Zjg1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFjay5o
CkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTVZpZGVvVHJhY2tfaAorI2RlZmluZSBXZWJLaXRET01WaWRlb1RyYWNrX2gK
KworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDSyAgICAgICAgICAgICh3ZWJr
aXRfZG9tX3ZpZGVvX3RyYWNrX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVklERU9f
VFJBQ0sob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLLCBXZWJLaXRET01WaWRlb1RyYWNrKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9WSURFT19UUkFDS19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0ssIFdlYktpdERP
TVZpZGVvVHJhY2tDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19WSURFT19UUkFDSyhvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfVklERU9fVFJBQ0spKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9WSURFT19UUkFDSykpCisjZGVmaW5lIFdFQktJVF9ET01fVklERU9fVFJBQ0tfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X1ZJREVPX1RSQUNLLCBXZWJLaXRET01WaWRlb1RyYWNrQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTVZpZGVvVHJhY2sgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTVZpZGVvVHJhY2tDbGFzcyB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rv
bV92aWRlb190cmFja19nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVv
X3RyYWNrX2dldF9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1RyYWNrCisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9pZChXZWJLaXRET01WaWRl
b1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9raW5k
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X2tpbmQoV2ViS2l0RE9NVmlkZW9UcmFjayogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV92aWRlb190cmFja19nZXRfbGFiZWw6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVmlkZW9UcmFjaworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV92aWRlb190cmFja19nZXRfbGFiZWwoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV92aWRlb190cmFja19nZXRfbGFuZ3VhZ2U6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVmlkZW9UcmFjaworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV92aWRl
b190cmFja19nZXRfbGFuZ3VhZ2UoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV92aWRlb190cmFja19nZXRfc2VsZWN0ZWQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVmlkZW9UcmFjaworICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3Zp
ZGVvX3RyYWNrX2dldF9zZWxlY3RlZChXZWJLaXRET01WaWRlb1RyYWNrKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX3NldF9zZWxlY3RlZDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01WaWRlb1RyYWNrCisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdmlkZW9fdHJh
Y2tfc2V0X3NlbGVjdGVkKFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYsIGdib29sZWFuIHZhbHVl
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQ
SSAqLworI2VuZGlmIC8qIFdlYktpdERPTVZpZGVvVHJhY2tfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01WaWRlb1RyYWNrTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tMaXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc1ZDhkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01WaWRlb1RyYWNrTGlzdC5jcHAKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01W
aWRlb1RyYWNrTGlzdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
VmlkZW9UcmFja0xpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmlkZW9UcmFja1By
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9N
X1ZJREVPX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0tfTElTVCwgV2ViS2l0RE9NVmlk
ZW9UcmFja0xpc3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmlkZW9UcmFj
a0xpc3RQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgUmVmUHRyPFdlYkNv
cmU6OlZpZGVvVHJhY2tMaXN0PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19U
UkFDSykKK30gV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlOworCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVmlkZW9UcmFja0xp
c3QqIGtpdChXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogb2JqKQoreworICAgIGlmICghb2JqKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0xJU1Qo
cmV0KTsKKworICAgIHJldHVybiB3cmFwVmlkZW9UcmFja0xpc3Qob2JqKTsKK30KKworV2ViQ29y
ZTo6VmlkZW9UcmFja0xpc3QqIGNvcmUoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHJlcXVlc3Qp
Cit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1RyYWNr
TGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTVZpZGVvVHJhY2tMaXN0KiB3cmFwVmlkZW9UcmFja0xpc3QoV2ViQ29yZTo6Vmlk
ZW9UcmFja0xpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9WSURFT19UUkFDS19MSVNULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV92aWRlb190cmFja19saXN0
X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2
ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAg
IGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6Vmlk
ZW9UcmFja0xpc3QqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1RyYWNr
TGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3Ip
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2FkZF9ldmVudF9saXN0ZW5l
cihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdD
bG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIp
OworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8v
IEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdmlk
ZW9fdHJhY2tfbGlzdF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6
VmlkZW9UcmFja0xpc3QqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWaWRlb1Ry
YWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdf
T0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShl
dmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0o
dXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0sp
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5h
ZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2xpc3RfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERShXZWJLaXRET01WaWRlb1RyYWNrTGlzdCwgd2Via2l0X2RvbV92aWRlb190
cmFja19saXN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0Uo
V0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKKyAgICBQUk9QX1NF
TEVDVEVEX0lOREVYLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92aWRlb190cmFja19s
aXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01WaWRlb1RyYWNr
TGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0xJU1RfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBwcml2LT5+V2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRl
KCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV92aWRlb190cmFja19saXN0X3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dmlkZW9fdHJhY2tfbGlzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01WaWRlb1RyYWNrTGlzdCogc2VsZiA9IFdFQktJVF9ET01fVklERU9fVFJBQ0tfTElTVChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tf
bGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NF
TEVDVEVEX0lOREVYOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X3NlbGVjdGVkX2luZGV4KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfY29uc3RydWN0
b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29u
c3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0
ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV92aWRlb190cmFja19saXN0X3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdERPTVZpZGVv
VHJhY2tMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVklERU9fVFJBQ0tfTElTVF9HRVRf
UFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpWaWRlb1RyYWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmpl
Y3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICByZXR1cm4g
b2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfY2xh
c3NfaW5pdChXZWJLaXRET01WaWRlb1RyYWNrTGlzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihX
ZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2NvbnN0cnVjdG9yOworICAgIGdv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZmluYWxp
emU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3ZpZGVvX3Ry
YWNrX2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAgICAg
ICAiVmlkZW9UcmFja0xpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25n
IFZpZGVvVHJhY2tMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
U0VMRUNURURfSU5ERVgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
InNlbGVjdGVkLWluZGV4IiwKKyAgICAgICAgICAgICJWaWRlb1RyYWNrTGlzdDpzZWxlY3RlZC1p
bmRleCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFZpZGVvVHJhY2tMaXN0OnNlbGVj
dGVkLWluZGV4IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV92aWRlb190cmFja19saXN0X2luaXQoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHJlcXVl
c3QpCit7CisgICAgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9WSURFT19UUkFDS19MSVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJp
dikgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTVZpZGVv
VHJhY2sqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9pdGVtKFdlYktpdERPTVZpZGVvVHJh
Y2tMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLX0xJU1Qoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJB
TShpbmRleCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJh
Y2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30K
KworV2ViS2l0RE9NVmlkZW9UcmFjayogd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF90
cmFja19ieV9pZChXZWJLaXRET01WaWRlb1RyYWNrTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIGlk
KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19W
SURFT19UUkFDS19MSVNUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpZCwg
MCk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkSWQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
aWQpOworICAgIFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+Z2V0VHJhY2tCeUlkKGNvbnZlcnRlZElkKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGlkKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxF
KFZJREVPX1RSQUNLKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV92aWRlb190cmFja19saXN0
X2dldF9sZW5ndGgoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLX0xJU1Qo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwor
Z2xvbmcgd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9zZWxlY3RlZF9pbmRleChXZWJL
aXRET01WaWRlb1RyYWNrTGlzdCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9fVFJBQ0tfTElTVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+c2VsZWN0ZWRJbmRleCgpOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25n
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVmlkZW9UcmFja0xpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjk3ZDAxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01WaWRlb1RyYWNrTGlzdC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RfaAorI2RlZmluZSBX
ZWJLaXRET01WaWRlb1RyYWNrTGlzdF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVu
c3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVklE
RU9fVFJBQ0tfTElTVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9WSURFT19UUkFDS19MSVNUKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9W
SURFT19UUkFDS19MSVNULCBXZWJLaXRET01WaWRlb1RyYWNrTGlzdCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fVklERU9fVFJBQ0tfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0tfTElTVCwgV2ViS2l0
RE9NVmlkZW9UcmFja0xpc3RDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19WSURFT19UUkFD
S19MSVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9WSURFT19UUkFDS19MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19W
SURFT19UUkFDS19MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDS19MSVNUKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9WSURFT19UUkFDS19MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDS19MSVNULCBXZWJLaXRE
T01WaWRlb1RyYWNrTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNrTGlz
dCB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NVmlkZW9UcmFja0xpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV92aWRlb190
cmFja19saXN0X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJh
Y2tfbGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2tMaXN0CisgKiBA
aW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NVmlkZW9UcmFjaworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01WaWRlb1RyYWNrKgord2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2l0
ZW0oV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF90cmFja19ieV9pZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01WaWRlb1RyYWNrTGlzdAorICogQGlkOiBBICNnY2hhcgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVmlkZW9UcmFjaworICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01WaWRlb1RyYWNrKgor
d2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF90cmFja19ieV9pZChXZWJLaXRET01WaWRl
b1RyYWNrTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIGlkKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRl
b1RyYWNrTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fdmlkZW9fdHJhY2tf
bGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X3NlbGVjdGVkX2luZGV4OgorICogQHNl
bGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2tMaXN0CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtp
dF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfc2VsZWN0ZWRfaW5kZXgoV2ViS2l0RE9NVmlkZW9U
cmFja0xpc3QqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9U
cmFja0xpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBl
ZjNiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlLmgKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01WaWRlb1Ry
YWNrTGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb1RyYWNrTGlzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01WaWRlb1RyYWNrTGlzdC5oPgorI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01WaWRlb1RyYWNr
TGlzdCogd3JhcFZpZGVvVHJhY2tMaXN0KFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0Kik7CitXZWJL
aXRET01WaWRlb1RyYWNrTGlzdCoga2l0KFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0Kik7CitXZWJD
b3JlOjpWaWRlb1RyYWNrTGlzdCogY29yZShXZWJLaXRET01WaWRlb1RyYWNrTGlzdCopOworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCisK
KyNlbmRpZiAvKiBXZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOTEwNWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvVmlkZW9UcmFjay5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01WaWRlb1Ry
YWNrLmg+CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTVZpZGVvVHJhY2sqIHdyYXBWaWRlb1RyYWNrKFdlYkNvcmU6OlZpZGVvVHJhY2sqKTsK
K1dlYktpdERPTVZpZGVvVHJhY2sqIGtpdChXZWJDb3JlOjpWaWRlb1RyYWNrKik7CitXZWJDb3Jl
OjpWaWRlb1RyYWNrKiBjb3JlKFdlYktpdERPTVZpZGVvVHJhY2sqKTsKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyog
V2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJBbmlt
YXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01XZWJBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjAyZjhkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYkFuaW1hdGlv
bi5jcHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XZWJBbmltYXRpb24uaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGUuaCIKKyNpbmNs
dWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT05f
R0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRf
RE9NX1RZUEVfV0VCX0FOSU1BVElPTiwgV2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGUgeworI2lmIEVOQUJM
RShXRUJfQU5JTUFUSU9OUykKKyAgICBSZWZQdHI8V2ViQ29yZTo6V2ViQW5pbWF0aW9uPiBjb3Jl
T2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKK30gV2ViS2l0RE9NV2Vi
QW5pbWF0aW9uUHJpdmF0ZTsKKworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTVdlYkFuaW1hdGlvbioga2l0KFdlYkNvcmU6OldlYkFu
aW1hdGlvbiogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT04ocmV0KTsKKworICAgIHJldHVybiB3cmFwV2Vi
QW5pbWF0aW9uKG9iaik7Cit9CisKK1dlYkNvcmU6OldlYkFuaW1hdGlvbiogY29yZShXZWJLaXRE
T01XZWJBbmltYXRpb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpXZWJBbmltYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01XZWJBbmltYXRpb24qIHdyYXBXZWJBbmlt
YXRpb24oV2ViQ29yZTo6V2ViQW5pbWF0aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9XRUJfQU5JTUFUSU9OKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfV0VCX0FOSU1BVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01XZWJBbmlt
YXRpb24sIHdlYmtpdF9kb21fd2ViX2FuaW1hdGlvbiwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRUZGRUNULAorICAgIFBST1BfVElNRUxJ
TkUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBF
TkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9O
UykKKyAgICBwcml2LT5+V2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZSgpOworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fd2ViX2FuaW1hdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NV2ViQW5pbWF0aW9uKiBzZWxm
ID0gV0VCS0lUX0RPTV9XRUJfQU5JTUFUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRUZGRUNUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF9kb21fd2ViX2FuaW1hdGlvbl9nZXRfZWZmZWN0KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RJTUVMSU5FOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fd2ViX2FuaW1hdGlvbl9nZXRfdGltZWxpbmUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fd2ViX2FuaW1h
dGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBH
T2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25f
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAg
V2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fV0VCX0FOSU1B
VElPTl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpXZWJBbmltYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5j
b3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisg
ICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJfYW5pbWF0
aW9uX2NsYXNzX2luaXQoV2ViS2l0RE9NV2ViQW5pbWF0aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6
ZW9mKFdlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdG9yID0gd2Via2l0X2RvbV93ZWJfYW5pbWF0aW9uX2NvbnN0cnVjdG9yOworICAgIGdv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZmluYWxpemU7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3dlYl9hbmltYXRp
b25fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VGRkVDVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJlZmZlY3QiLAorICAgICAgICAgICAgIldl
YkFuaW1hdGlvbjplZmZlY3QiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Bbmlt
YXRpb25FZmZlY3QqIFdlYkFuaW1hdGlvbjplZmZlY3QiLAorICAgICAgICAgICAgV0VCS0lUX0RP
TV9UWVBFX0FOSU1BVElPTl9FRkZFQ1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9USU1FTElORSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJ0aW1lbGluZSIsCisgICAgICAgICAgICAiV2ViQW5pbWF0
aW9uOnRpbWVsaW5lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQW5pbWF0aW9u
VGltZWxpbmUqIFdlYkFuaW1hdGlvbjp0aW1lbGluZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfQU5JTUFUSU9OX1RJTUVMSU5FLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJfYW5pbWF0aW9uX2luaXQo
V2ViS2l0RE9NV2ViQW5pbWF0aW9uKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVdlYkFuaW1h
dGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT05fR0VUX1BSSVZBVEUo
cmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlKCk7
Cit9CisKK1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdCogd2Via2l0X2RvbV93ZWJfYW5pbWF0aW9u
X2dldF9lZmZlY3QoV2ViS2l0RE9NV2ViQW5pbWF0aW9uKiBzZWxmKQoreworI2lmIEVOQUJMRShX
RUJfQU5JTUFUSU9OUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJfQU5JTUFUSU9OKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXZWJBbmltYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdD4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmVmZmVjdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgQW5pbWF0aW9ucyIpCisgICAg
cmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9BTklNQVRJT05TKSAqLworfQorCitXZWJL
aXRET01BbmltYXRpb25UaW1lbGluZSogd2Via2l0X2RvbV93ZWJfYW5pbWF0aW9uX2dldF90aW1l
bGluZShXZWJLaXRET01XZWJBbmltYXRpb24qIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9BTklN
QVRJT05TKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQl9BTklNQVRJT04oc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OldlYkFuaW1hdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6QW5pbWF0aW9uVGltZWxpbmU+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT50aW1lbGluZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgQW5pbWF0aW9ucyIpCisgICAgcmV0
dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9BTklNQVRJT05TKSAqLworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVdlYkFuaW1hdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJBbmltYXRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzNhZjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01XZWJBbmltYXRpb24uaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVdlYkFuaW1hdGlvbl9oCisjZGVmaW5lIFdlYktp
dERPTVdlYkFuaW1hdGlvbl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfV0VCX0FOSU1B
VElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9XRUJfQU5JTUFUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9XRUJfQU5JTUFUSU9OLCBX
ZWJLaXRET01XZWJBbmltYXRpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT05f
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1dFQl9BTklNQVRJT04sIFdlYktpdERPTVdlYkFuaW1hdGlvbkNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1dFQl9BTklNQVRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1dFQl9BTklNQVRJT04pKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1dFQl9BTklNQVRJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1dFQl9BTklNQVRJT04p
KQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1dFQl9BTklNQVRJ
T04sIFdlYktpdERPTVdlYkFuaW1hdGlvbkNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01XZWJB
bmltYXRpb24geworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTVdlYkFuaW1hdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3dl
Yl9hbmltYXRpb25fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJfYW5p
bWF0aW9uX2dldF9lZmZlY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2ViQW5pbWF0aW9uCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01BbmltYXRpb25FZmZl
Y3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
QW5pbWF0aW9uRWZmZWN0Kgord2Via2l0X2RvbV93ZWJfYW5pbWF0aW9uX2dldF9lZmZlY3QoV2Vi
S2l0RE9NV2ViQW5pbWF0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3dlYl9hbmlt
YXRpb25fZ2V0X3RpbWVsaW5lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYkFuaW1hdGlvbgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQW5pbWF0aW9uVGlt
ZWxpbmUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NQW5pbWF0aW9uVGltZWxpbmUqCit3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZ2V0X3RpbWVs
aW5lKFdlYktpdERPTVdlYkFuaW1hdGlvbiogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01X
ZWJBbmltYXRpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVdlYkFuaW1hdGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yMzgxNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJBbmltYXRpb25Qcml2
YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
V2ViQW5pbWF0aW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkFuaW1hdGlvbi5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01XZWJBbmltYXRpb24uaD4KKyNpZiBFTkFC
TEUoV0VCX0FOSU1BVElPTlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NV2ViQW5p
bWF0aW9uKiB3cmFwV2ViQW5pbWF0aW9uKFdlYkNvcmU6OldlYkFuaW1hdGlvbiopOworV2ViS2l0
RE9NV2ViQW5pbWF0aW9uKiBraXQoV2ViQ29yZTo6V2ViQW5pbWF0aW9uKik7CitXZWJDb3JlOjpX
ZWJBbmltYXRpb24qIGNvcmUoV2ViS2l0RE9NV2ViQW5pbWF0aW9uKik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShXRUJfQU5JTUFUSU9OUykgKi8KKworI2VuZGlm
IC8qIFdlYktpdERPTVdlYkFuaW1hdGlvblByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01X
ZWJLaXROYW1lZEZsb3cuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZDIzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVdlYktpdE5hbWVkRmxvdy5jcHAKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01X
ZWJLaXROYW1lZEZsb3cuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX05BTUVEX0ZMT1dfR0VU
X1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9N
X1RZUEVfV0VCS0lUX05BTUVEX0ZMT1csIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlIHsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93PiBjb3JlT2JqZWN0OworfSBXZWJLaXRE
T01XZWJLaXROYW1lZEZsb3dQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NV2ViS2l0TmFtZWRGbG93KiBraXQoV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBvYmopCit7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
V0VCS0lUX05BTUVEX0ZMT1cocmV0KTsKKworICAgIHJldHVybiB3cmFwV2ViS2l0TmFtZWRGbG93
KG9iaik7Cit9CisKK1dlYkNvcmU6OldlYktpdE5hbWVkRmxvdyogY29yZShXZWJLaXRET01XZWJL
aXROYW1lZEZsb3cqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHdyYXBXZWJL
aXROYW1lZEZsb3coV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRURf
RkxPVyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FRF9GTE9XLCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19kaXNw
YXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCog
ZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQg
PSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAg
ICBXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpXZWJLaXROYW1lZEZsb3cqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV93ZWJraXRfbmFt
ZWRfZmxvd19yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQor
eworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zs
b3dfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21fd2Via2l0X25hbWVkX2Zsb3dfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5y
ZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
V2ViS2l0TmFtZWRGbG93LCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93LCBXRUJLSVRfRE9N
X1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5U
X1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBS
T1BfMCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9PVkVSU0VULAorICAgIFBST1BfRklSU1Rf
RU1QVFlfUkVHSU9OX0lOREVYLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRf
bmFtZWRfZmxvd19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NV2Vi
S2l0TmFtZWRGbG93UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fV0VCS0lUX05BTUVEX0ZMT1df
R0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01XZWJLaXRO
YW1lZEZsb3dQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV93ZWJraXRf
bmFtZWRfZmxvd19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZiA9IFdFQktJVF9ET01fV0VC
S0lUX05BTUVEX0ZMT1cob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX09WRVJTRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFs
dWUsIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X292ZXJzZXQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklSU1RfRU1QVFlfUkVHSU9OX0lOREVYOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93
X2dldF9maXJzdF9lbXB0eV9yZWdpb25faW5kZXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIEdPYmplY3QqIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOworCisgICAgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fV0VCS0lUX05BTUVEX0ZMT1dfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93Kj4oV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1
cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93
X2NsYXNzX2luaXQoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93Q2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6
ZW9mKFdlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19jb25zdHJ1Y3RvcjsK
KyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxv
d19maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
d2Via2l0X25hbWVkX2Zsb3dfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAg
ICAgICAgICAiV2ViS2l0TmFtZWRGbG93Om5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Y2hhciogV2ViS2l0TmFtZWRGbG93Om5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PVkVSU0VULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJvdmVyc2V0IiwKKyAg
ICAgICAgICAgICJXZWJLaXROYW1lZEZsb3c6b3ZlcnNldCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdib29sZWFuIFdlYktpdE5hbWVkRmxvdzpvdmVyc2V0IiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfRklSU1RfRU1QVFlfUkVHSU9OX0lOREVYLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygK
KyAgICAgICAgICAgICJmaXJzdC1lbXB0eS1yZWdpb24taW5kZXgiLAorICAgICAgICAgICAgIldl
YktpdE5hbWVkRmxvdzpmaXJzdC1lbXB0eS1yZWdpb24taW5kZXgiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnbG9uZyBXZWJLaXROYW1lZEZsb3c6Zmlyc3QtZW1wdHktcmVnaW9uLWluZGV4IiwK
KyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRf
bmFtZWRfZmxvd19pbml0KFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9XRUJL
SVRfTkFNRURfRkxPV19HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktp
dERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdl
YmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X3JlZ2lvbnNfYnlfY29udGVudChXZWJLaXRE
T01XZWJLaXROYW1lZEZsb3cqIHNlbGYsIFdlYktpdERPTU5vZGUqIGNvbnRlbnROb2RlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQktJVF9OQU1FRF9GTE9XKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoY29udGVudE5vZGUpLCAw
KTsKKyAgICBXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkQ29udGVudE5vZGUgPSBXZWJLaXQ6OmNv
cmUoY29udGVudE5vZGUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldFJlZ2lvbnNCeUNvbnRlbnQoY29udmVydGVkQ29u
dGVudE5vZGUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dl
dF9yZWdpb25zKFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19XRUJLSVRfTkFNRURfRkxPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
V2ViS2l0TmFtZWRGbG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldFJl
Z2lvbnMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRf
Y29udGVudChXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfV0VCS0lUX05BTUVEX0ZMT1coc2VsZiksIDApOworICAgIFdlYkNvcmU6Oldl
YktpdE5hbWVkRmxvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRDb250
ZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X25hbWUoV2ViS2l0RE9N
V2ViS2l0TmFtZWRGbG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQktJ
VF9OQU1FRF9GTE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9vdmVyc2V0KFdlYktpdERPTVdlYktp
dE5hbWVkRmxvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfTkFN
RURfRkxPVyhzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5vdmVy
c2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV93ZWJraXRf
bmFtZWRfZmxvd19nZXRfZmlyc3RfZW1wdHlfcmVnaW9uX2luZGV4KFdlYktpdERPTVdlYktpdE5h
bWVkRmxvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfTkFNRURf
RkxPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmZpcnN0RW1wdHlSZWdp
b25JbmRleCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2Vi
S2l0TmFtZWRGbG93LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVkRmxvdy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjM2NDQ3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktp
dE5hbWVkRmxvdy5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd19oCisjZGVmaW5lIFdlYktp
dERPTVdlYktpdE5hbWVkRmxvd19oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3Rh
YmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfV0VCS0lU
X05BTUVEX0ZMT1cgICAgICAgICAgICAod2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9X
RUJLSVRfTkFNRURfRkxPVywgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9XRUJLSVRfTkFNRURfRkxPV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVEX0ZMT1csIFdl
YktpdERPTVdlYktpdE5hbWVkRmxvd0NsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1dFQktJ
VF9OQU1FRF9GTE9XKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRURfRkxPVykpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfV0VCS0lUX05BTUVEX0ZMT1dfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FRF9GTE9XKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9XRUJLSVRfTkFNRURfRkxPV19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVEX0ZM
T1csIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd0NsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01X
ZWJLaXROYW1lZEZsb3cgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTVdlYktpdE5hbWVkRmxvd0NsYXNzIHsKKyAgICBXZWJLaXRE
T01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X3JlZ2lvbnNfYnlfY29udGVudDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01XZWJLaXROYW1lZEZsb3cKKyAqIEBjb250ZW50Tm9kZTogQSAjV2ViS2l0
RE9NTm9kZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9k
ZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9yZWdpb25zX2J5
X2NvbnRlbnQoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBj
b250ZW50Tm9kZSk7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRf
cmVnaW9uczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XZWJLaXROYW1lZEZsb3cKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVMaXN0CisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Vi
a2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfcmVnaW9ucyhXZWJLaXRET01XZWJLaXROYW1l
ZEZsb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0
X2NvbnRlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93CisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlzdCoKK3dl
YmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X2NvbnRlbnQoV2ViS2l0RE9NV2ViS2l0TmFt
ZWRGbG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dl
dF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdE5hbWVkRmxvdworICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfbmFtZShXZWJLaXRE
T01XZWJLaXROYW1lZEZsb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2Via2l0X25h
bWVkX2Zsb3dfZ2V0X292ZXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2ViS2l0TmFtZWRG
bG93CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zs
b3dfZ2V0X292ZXJzZXQoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9maXJzdF9lbXB0eV9yZWdpb25faW5k
ZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93CisgKgorICogUmV0dXJu
czogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2xvbmcKK3dlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X2ZpcnN0X2VtcHR5X3JlZ2lv
bl9pbmRleChXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NV2ViS2l0TmFtZWRGbG93X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRG
bG93UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhMGFlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
V2ViS2l0TmFtZWRGbG93UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGVfaAorCisjaW5jbHVk
ZSA8V2ViQ29yZS9XZWJLaXROYW1lZEZsb3cuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NV2ViS2l0TmFtZWRGbG93Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NV2Vi
S2l0TmFtZWRGbG93KiB3cmFwV2ViS2l0TmFtZWRGbG93KFdlYkNvcmU6OldlYktpdE5hbWVkRmxv
dyopOworV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBraXQoV2ViQ29yZTo6V2ViS2l0TmFtZWRG
bG93Kik7CitXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGNvcmUoV2ViS2l0RE9NV2ViS2l0TmFt
ZWRGbG93Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVdl
YktpdE5hbWVkRmxvd1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3Bh
Y2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjBmYTg0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVz
cGFjZS5jcHAKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XZWJLaXROYW1lc3Bh
Y2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVXNl
ck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01X
ZWJLaXROYW1lc3BhY2VQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQQUNFX0dFVF9QUklWQVRFKG9iaikgR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FU1BB
Q0UsIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlIHsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdF
X0hBTkRMRVJTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJLaXROYW1lc3BhY2U+IGNvcmVPYmpl
Y3Q7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKK30gV2ViS2l0RE9N
V2ViS2l0TmFtZXNwYWNlUHJpdmF0ZTsKKworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExF
UlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01XZWJLaXROYW1lc3BhY2UqIGtp
dChXZWJDb3JlOjpXZWJLaXROYW1lc3BhY2UqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQQUNFKHJldCk7
CisKKyAgICByZXR1cm4gd3JhcFdlYktpdE5hbWVzcGFjZShvYmopOworfQorCitXZWJDb3JlOjpX
ZWJLaXROYW1lc3BhY2UqIGNvcmUoV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0TmFtZXNw
YWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKiB3cmFwV2ViS2l0TmFtZXNwYWNlKFdlYkNvcmU6Oldl
YktpdE5hbWVzcGFjZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fV0VCS0lUX05BTUVTUEFDRShnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX1dFQktJVF9OQU1FU1BBQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
VVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVdlYktpdE5h
bWVzcGFjZSwgd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlLCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9NRVNTQUdFX0hBTkRMRVJTLAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7Cisj
aWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICBwcml2LT5+V2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNl
UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFj
ZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKiBzZWxmID0gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQ
QUNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
TUVTU0FHRV9IQU5ETEVSUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfZ2V0X21lc3NhZ2VfaGFuZGxlcnMoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9j
b25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdP
YmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0
KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQor
ICAgIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dF
QktJVF9OQU1FU1BBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKj4oV0VCS0lUX0RPTV9PQkpF
Q1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJf
TUVTU0FHRV9IQU5ETEVSUykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfY2xhc3NfaW5pdChXZWJLaXRET01XZWJLaXROYW1l
c3BhY2VDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJp
dmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3dlYmtp
dF9uYW1lc3BhY2VfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfTUVTU0FHRV9IQU5ETEVSUywKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJtZXNzYWdlLWhhbmRsZXJzIiwKKyAgICAgICAgICAgICJX
ZWJLaXROYW1lc3BhY2U6bWVzc2FnZS1oYW5kbGVycyIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqIFdlYktpdE5hbWVzcGFjZTpt
ZXNzYWdlLWhhbmRsZXJzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NB
R0VfSEFORExFUlNfTkFNRVNQQUNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2luaXQo
V2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVdlYktp
dE5hbWVzcGFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FU1BBQ0VfR0VU
X1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01XZWJLaXROYW1lc3Bh
Y2VQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uq
IHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9nZXRfbWVzc2FnZV9oYW5kbGVycyhXZWJLaXRE
T01XZWJLaXROYW1lc3BhY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5E
TEVSUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfTkFNRVNQQUNFKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpXZWJLaXROYW1lc3BhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5tZXNzYWdlSGFuZGxlcnMoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVXNl
ciBNZXNzYWdlIEhhbmRsZXJzIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVVNF
Ul9NRVNTQUdFX0hBTkRMRVJTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVz
cGFjZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mOGRlZTVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3Bh
Y2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZV9oCisjZGVmaW5lIFdlYktpdERPTVdlYktp
dE5hbWVzcGFjZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVTUEFD
RSAgICAgICAgICAgICh3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQQUNFKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRVNQ
QUNFLCBXZWJLaXRET01XZWJLaXROYW1lc3BhY2UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJ
VF9OQU1FU1BBQ0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FU1BBQ0UsIFdlYktpdERPTVdlYktpdE5h
bWVzcGFjZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1dFQktJVF9OQU1FU1BBQ0Uob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX1dFQktJVF9OQU1FU1BBQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1dFQktJVF9OQU1F
U1BBQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FU1BBQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJ
VF9OQU1FU1BBQ0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FU1BBQ0UsIFdlYktpdERPTVdlYktpdE5h
bWVzcGFjZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01XZWJLaXROYW1lc3BhY2UgeworICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TVdlYktpdE5hbWVzcGFjZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3Bh
Y2VfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNl
X2dldF9tZXNzYWdlX2hhbmRsZXJzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdE5hbWVz
cGFjZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKgord2Via2l0
X2RvbV93ZWJraXRfbmFtZXNwYWNlX2dldF9tZXNzYWdlX2hhbmRsZXJzKFdlYktpdERPTVdlYktp
dE5hbWVzcGFjZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01XZWJLaXROYW1lc3BhY2Vf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdl
YktpdE5hbWVzcGFjZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hM2I4ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRl
LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
V2ViS2l0TmFtZXNwYWNlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dlYktpdE5hbWVz
cGFjZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01XZWJLaXROYW1lc3BhY2UuaD4K
KyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTVdlYktpdE5hbWVzcGFjZSogd3JhcFdlYktpdE5hbWVzcGFjZShXZWJDb3JlOjpX
ZWJLaXROYW1lc3BhY2UqKTsKK1dlYktpdERPTVdlYktpdE5hbWVzcGFjZSoga2l0KFdlYkNvcmU6
OldlYktpdE5hbWVzcGFjZSopOworV2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKiBjb3JlKFdlYktp
dERPTVdlYktpdE5hbWVzcGFjZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
KiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9N
V2ViS2l0TmFtZXNwYWNlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdFBvaW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NV2ViS2l0UG9pbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjg1YTU3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdFBvaW50LmNwcApA
QCAtMCwwICsxLDIwMSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVdlYktpdFBvaW50LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVdlYktpdFBvaW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fV0VC
S0lUX1BPSU5UX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9i
aiwgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9QT0lOVCwgV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2
YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlIHsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6V2ViS2l0UG9pbnQ+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVdl
YktpdFBvaW50UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVdlYktp
dFBvaW50KiBraXQoV2ViQ29yZTo6V2ViS2l0UG9pbnQqIG9iaikKK3sKKyAgICBpZiAoIW9iaikK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2Fj
aGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9XRUJLSVRfUE9JTlQocmV0
KTsKKworICAgIHJldHVybiB3cmFwV2ViS2l0UG9pbnQob2JqKTsKK30KKworV2ViQ29yZTo6V2Vi
S2l0UG9pbnQqIGNvcmUoV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpXZWJLaXRQb2ludCo+KFdFQktJVF9E
T01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVdlYktp
dFBvaW50KiB3cmFwV2ViS2l0UG9pbnQoV2ViQ29yZTo6V2ViS2l0UG9pbnQqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1dFQktJ
VF9QT0lOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9QT0lOVCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01XZWJLaXRQb2ludCwgd2Via2l0X2RvbV93ZWJr
aXRfcG9pbnQsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX1gsCisgICAgUFJPUF9ZLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93
ZWJraXRfcG9pbnRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVdl
YktpdFBvaW50UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fV0VCS0lUX1BPSU5UX0dFVF9QUklW
QVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2
YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV93ZWJraXRfcG9pbnRfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93
ZWJraXRfcG9pbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NV2ViS2l0UG9pbnQqIHNlbGYgPSBXRUJLSVRfRE9NX1dFQktJVF9QT0lOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1g6CisgICAgICAgIHdl
YmtpdF9kb21fd2Via2l0X3BvaW50X3NldF94KHNlbGYsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ZOgorICAgICAgICB3ZWJraXRfZG9t
X3dlYmtpdF9wb2ludF9zZXRfeShzZWxmLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX1dFQktJVF9QT0lOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCB3ZWJr
aXRfZG9tX3dlYmtpdF9wb2ludF9nZXRfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgd2Via2l0X2RvbV93
ZWJraXRfcG9pbnRfZ2V0X3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fd2Via2l0X3BvaW50X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRE
T01XZWJLaXRQb2ludFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dFQktJVF9QT0lOVF9HRVRf
UFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpXZWJLaXRQb2ludCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV93ZWJraXRfcG9pbnRfY2xhc3NfaW5pdChXZWJLaXRET01XZWJLaXRQb2ludENsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGUpKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfY29uc3RydWN0
b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fd2Via2l0X3BvaW50
X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV93
ZWJraXRfcG9pbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICJ4IiwKKyAg
ICAgICAgICAgICJXZWJLaXRQb2ludDp4IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdmbG9h
dCBXZWJLaXRQb2ludDp4IiwKKyAgICAgICAgICAgIC1HX01BWEZMT0FULCBHX01BWEZMT0FULCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICJ5IiwKKyAg
ICAgICAgICAgICJXZWJLaXRQb2ludDp5IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdmbG9h
dCBXZWJLaXRQb2ludDp5IiwKKyAgICAgICAgICAgIC1HX01BWEZMT0FULCBHX01BWEZMT0FULCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2luaXQoV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHJl
cXVlc3QpCit7CisgICAgV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9XRUJLSVRfUE9JTlRfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGUoKTsKK30KKworZ2Zsb2F0IHdlYmtpdF9kb21fd2Vi
a2l0X3BvaW50X2dldF94KFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1dFQktJVF9QT0lOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2Vi
S2l0UG9pbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Zsb2F0IHJlc3VsdCA9
IGl0ZW0tPngoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fd2Vi
a2l0X3BvaW50X3NldF94KFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmLCBnZmxvYXQgdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfUE9JTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OldlYktpdFBvaW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNl
dFgodmFsdWUpOworfQorCitnZmxvYXQgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3koV2Vi
S2l0RE9NV2ViS2l0UG9pbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VC
S0lUX1BPSU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXZWJLaXRQb2ludCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzdWx0ID0gaXRlbS0+eSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfc2V0X3koV2Vi
S2l0RE9NV2ViS2l0UG9pbnQqIHNlbGYsIGdmbG9hdCB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1dFQktJVF9QT0lOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6V2ViS2l0UG9pbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0WSh2YWx1ZSk7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NV2ViS2l0UG9pbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0UG9pbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2JlNzgxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01XZWJLaXRQb2ludC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NV2ViS2l0UG9pbnRfaAorI2RlZmluZSBXZWJL
aXRET01XZWJLaXRQb2ludF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX1BP
SU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fV0VCS0lUX1BPSU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfUE9JTlQsIFdlYktp
dERPTVdlYktpdFBvaW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XRUJLSVRfUE9JTlRfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1dFQktJVF9QT0lOVCwgV2ViS2l0RE9NV2ViS2l0UG9pbnRDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19XRUJLSVRfUE9JTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9QT0lOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfV0VCS0lUX1BPSU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfUE9JTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1dFQktJVF9QT0lOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX1BPSU5ULCBXZWJLaXRET01X
ZWJLaXRQb2ludENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01XZWJLaXRQb2ludCB7CisgICAg
V2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9N
V2ViS2l0UG9pbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3g6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NV2ViS2l0UG9pbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZmxvYXQK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJr
aXRfZG9tX3dlYmtpdF9wb2ludF9nZXRfeChXZWJLaXRET01XZWJLaXRQb2ludCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfc2V0X3g6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NV2ViS2l0UG9pbnQKKyAqIEB2YWx1ZTogQSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fd2Via2l0X3BvaW50
X3NldF94KFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmLCBnZmxvYXQgdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2dldF95OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVdlYktpdFBvaW50CisgKgorICogUmV0dXJuczogQSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X2RvbV93ZWJraXRfcG9p
bnRfZ2V0X3koV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fd2Via2l0X3BvaW50X3NldF95OgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdFBvaW50
CisgKiBAdmFsdWU6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9zZXRfeShXZWJLaXRET01X
ZWJLaXRQb2ludCogc2VsZiwgZ2Zsb2F0IHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVdl
YktpdFBvaW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVdlYktpdFBvaW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjM1YmVhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdFBvaW50UHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NV2ViS2l0
UG9pbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvV2ViS2l0UG9pbnQuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NV2ViS2l0UG9pbnQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitXZWJLaXRET01XZWJLaXRQb2ludCogd3JhcFdlYktpdFBvaW50KFdlYkNvcmU6OldlYktp
dFBvaW50Kik7CitXZWJLaXRET01XZWJLaXRQb2ludCoga2l0KFdlYkNvcmU6OldlYktpdFBvaW50
Kik7CitXZWJDb3JlOjpXZWJLaXRQb2ludCogY29yZShXZWJLaXRET01XZWJLaXRQb2ludCopOwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01XZWJLaXRQb2ludFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxF
dmVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5ZGU4ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudC5jcHAKQEAgLTAsMCArMSwyODEgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01XaGVlbEV2ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2luZG93UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XaGVlbEV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01X
aGVlbEV2ZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NV2hlZWxFdmVu
dCoga2l0KFdlYkNvcmU6OldoZWVsRXZlbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9XSEVFTF9FVkVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnQqPihvYmopKSk7Cit9
CisKK1dlYkNvcmU6OldoZWVsRXZlbnQqIGNvcmUoV2ViS2l0RE9NV2hlZWxFdmVudCogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OldoZWVsRXZl
bnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01XaGVlbEV2ZW50KiB3cmFwV2hlZWxFdmVudChXZWJDb3JlOjpXaGVlbEV2ZW50KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9XSEVFTF9FVkVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1dIRUVMX0VWRU5U
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVdoZWVsRXZlbnQsIHdlYmtpdF9k
b21fd2hlZWxfZXZlbnQsIFdFQktJVF9ET01fVFlQRV9NT1VTRV9FVkVOVCkKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorICAgIFBST1BfREVMVEFfWCwKKyAgICBQUk9QX0RFTFRBX1ksCisgICAgUFJP
UF9ERUxUQV9aLAorICAgIFBST1BfREVMVEFfTU9ERSwKKyAgICBQUk9QX1dIRUVMX0RFTFRBX1gs
CisgICAgUFJPUF9XSEVFTF9ERUxUQV9ZLAorICAgIFBST1BfV0hFRUxfREVMVEEsCisgICAgUFJP
UF9XRUJLSVRfRElSRUNUSU9OX0lOVkVSVEVEX0ZST01fREVWSUNFLAorfTsKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9XSEVFTF9FVkVOVChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0RFTFRBX1g6
CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVu
dF9nZXRfZGVsdGFfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUxU
QV9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fd2hlZWxf
ZXZlbnRfZ2V0X2RlbHRhX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVMVEFfWjoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX3do
ZWVsX2V2ZW50X2dldF9kZWx0YV96KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0RFTFRBX01PREU6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV9tb2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1dIRUVMX0RFTFRBX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhX3goc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0hFRUxfREVMVEFfWToKKyAgICAgICAgZ192YWx1
ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hlZWxfZGVsdGFf
eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSEVFTF9ERUxUQToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRf
d2hlZWxfZGVsdGEoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lU
X0RJUkVDVElPTl9JTlZFUlRFRF9GUk9NX0RFVklDRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2Via2l0X2RpcmVjdGlvbl9p
bnZlcnRlZF9mcm9tX2RldmljZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3doZWVsX2V2ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NV2hlZWxFdmVudENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfREVMVEFfWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJk
ZWx0YS14IiwKKyAgICAgICAgICAgICJXaGVlbEV2ZW50OmRlbHRhLXgiLAorICAgICAgICAgICAg
InJlYWQtb25seSBnZG91YmxlIFdoZWVsRXZlbnQ6ZGVsdGEteCIsCisgICAgICAgICAgICAtR19N
QVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVMVEFfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2RvdWJsZSgKKyAgICAgICAgICAgICJkZWx0YS15IiwKKyAgICAgICAgICAgICJXaGVlbEV2ZW50
OmRlbHRhLXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIFdoZWVsRXZlbnQ6ZGVs
dGEteSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVMVEFf
WiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJkZWx0YS16IiwK
KyAgICAgICAgICAgICJXaGVlbEV2ZW50OmRlbHRhLXoiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnZG91YmxlIFdoZWVsRXZlbnQ6ZGVsdGEteiIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUs
IEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfREVMVEFfTU9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25n
KAorICAgICAgICAgICAgImRlbHRhLW1vZGUiLAorICAgICAgICAgICAgIldoZWVsRXZlbnQ6ZGVs
dGEtbW9kZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBXaGVlbEV2ZW50OmRlbHRh
LW1vZGUiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dIRUVMX0RFTFRBX1gsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIndoZWVsLWRlbHRhLXgiLAor
ICAgICAgICAgICAgIldoZWVsRXZlbnQ6d2hlZWwtZGVsdGEteCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdsb25nIFdoZWVsRXZlbnQ6d2hlZWwtZGVsdGEteCIsCisgICAgICAgICAgICBHX01J
TkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1dIRUVMX0RFTFRBX1ksCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKAorICAgICAgICAgICAgIndoZWVsLWRlbHRhLXkiLAorICAgICAgICAgICAgIldoZWVs
RXZlbnQ6d2hlZWwtZGVsdGEteSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFdoZWVs
RXZlbnQ6d2hlZWwtZGVsdGEteSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1dIRUVMX0RFTFRBLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAg
ICJ3aGVlbC1kZWx0YSIsCisgICAgICAgICAgICAiV2hlZWxFdmVudDp3aGVlbC1kZWx0YSIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFdoZWVsRXZlbnQ6d2hlZWwtZGVsdGEiLAorICAg
ICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfRElSRUNUSU9OX0lOVkVS
VEVEX0ZST01fREVWSUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAg
ICAgICJ3ZWJraXQtZGlyZWN0aW9uLWludmVydGVkLWZyb20tZGV2aWNlIiwKKyAgICAgICAgICAg
ICJXaGVlbEV2ZW50OndlYmtpdC1kaXJlY3Rpb24taW52ZXJ0ZWQtZnJvbS1kZXZpY2UiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBXaGVlbEV2ZW50OndlYmtpdC1kaXJlY3Rpb24t
aW52ZXJ0ZWQtZnJvbS1kZXZpY2UiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3do
ZWVsX2V2ZW50X2luaXQoV2ViS2l0RE9NV2hlZWxFdmVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV93aGVlbF9ldmVudF9pbml0
X3doZWVsX2V2ZW50KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYsIGdsb25nIHdoZWVsRGVsdGFY
LCBnbG9uZyB3aGVlbERlbHRhWSwgV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBnbG9uZyBzY3Jl
ZW5YLCBnbG9uZyBzY3JlZW5ZLCBnbG9uZyBjbGllbnRYLCBnbG9uZyBjbGllbnRZLCBnYm9vbGVh
biBjdHJsS2V5LCBnYm9vbGVhbiBhbHRLZXksIGdib29sZWFuIHNoaWZ0S2V5LCBnYm9vbGVhbiBt
ZXRhS2V5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHZpZXcpKTsKKyAgICBX
ZWJDb3JlOjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNv
cmU6OkRPTVdpbmRvdyogY29udmVydGVkVmlldyA9IFdlYktpdDo6Y29yZSh2aWV3KTsKKyAgICBp
dGVtLT5pbml0V2hlZWxFdmVudCh3aGVlbERlbHRhWCwgd2hlZWxEZWx0YVksIGNvbnZlcnRlZFZp
ZXcsIHNjcmVlblgsIHNjcmVlblksIGNsaWVudFgsIGNsaWVudFksIGN0cmxLZXksIGFsdEtleSwg
c2hpZnRLZXksIG1ldGFLZXkpOworfQorCitnZG91YmxlIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRf
Z2V0X2RlbHRhX3goV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19XSEVFTF9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0t
PmRlbHRhWCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV93
aGVlbF9ldmVudF9nZXRfZGVsdGFfeShXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVz
dWx0ID0gaXRlbS0+ZGVsdGFZKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2RvdWJsZSB3
ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV96KFdlYktpdERPTVdoZWVsRXZlbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OldoZWVsRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2RvdWJsZSByZXN1bHQgPSBpdGVtLT5kZWx0YVooKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitndWxvbmcgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfbW9kZShXZWJLaXRET01X
aGVlbEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5kZWx0YU1vZGUoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9k
ZWx0YV94KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfV0hFRUxfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OldoZWVsRXZlbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+d2hlZWxE
ZWx0YVgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3doZWVs
X2V2ZW50X2dldF93aGVlbF9kZWx0YV95KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OldoZWVsRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVz
dWx0ID0gaXRlbS0+d2hlZWxEZWx0YVkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9u
ZyB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YShXZWJLaXRET01XaGVlbEV2
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndoZWVsRGVsdGEoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93ZWJraXRfZGly
ZWN0aW9uX2ludmVydGVkX2Zyb21fZGV2aWNlKFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdERpcmVjdGlvbkludmVydGVkRnJvbURldmljZSgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudC5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01XaGVlbEV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTEzZTkwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudC5oCkBAIC0wLDAgKzEs
MTAwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01XaGVlbEV2ZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NV2hlZWxFdmVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01Nb3VzZUV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9XSEVFTF9FVkVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9ET01fV0hFRUxfRVZFTlQob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1dIRUVMX0VWRU5U
LCBXZWJLaXRET01XaGVlbEV2ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfV0hFRUxfRVZFTlQsIFdlYktpdERPTVdoZWVsRXZlbnRDbGFzcykKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19XSEVFTF9FVkVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfV0hFRUxfRVZFTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9XSEVFTF9FVkVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fV0hFRUxfRVZFTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1dIRUVMX0VWRU5ULCBXZWJLaXRET01XaGVl
bEV2ZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVdoZWVsRXZlbnQgeworICAgIFdlYktp
dERPTU1vdXNlRXZlbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01X
aGVlbEV2ZW50Q2xhc3MgeworICAgIFdlYktpdERPTU1vdXNlRXZlbnRDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF90
eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfaW5pdF93aGVlbF9l
dmVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XaGVlbEV2ZW50CisgKiBAd2hlZWxEZWx0YVg6
IEEgI2dsb25nCisgKiBAd2hlZWxEZWx0YVk6IEEgI2dsb25nCisgKiBAdmlldzogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKiBAc2NyZWVuWDogQSAjZ2xvbmcKKyAqIEBzY3JlZW5ZOiBBICNnbG9u
ZworICogQGNsaWVudFg6IEEgI2dsb25nCisgKiBAY2xpZW50WTogQSAjZ2xvbmcKKyAqIEBjdHJs
S2V5OiBBICNnYm9vbGVhbgorICogQGFsdEtleTogQSAjZ2Jvb2xlYW4KKyAqIEBzaGlmdEtleTog
QSAjZ2Jvb2xlYW4KKyAqIEBtZXRhS2V5OiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2luaXRfd2hlZWxfZXZlbnQoV2ViS2l0RE9N
V2hlZWxFdmVudCogc2VsZiwgZ2xvbmcgd2hlZWxEZWx0YVgsIGdsb25nIHdoZWVsRGVsdGFZLCBX
ZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIGdsb25nIHNjcmVlblgsIGdsb25nIHNjcmVlblksIGds
b25nIGNsaWVudFgsIGdsb25nIGNsaWVudFksIGdib29sZWFuIGN0cmxLZXksIGdib29sZWFuIGFs
dEtleSwgZ2Jvb2xlYW4gc2hpZnRLZXksIGdib29sZWFuIG1ldGFLZXkpOworCisvKioKKyAqIHdl
YmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhX3g6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NV2hlZWxFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhX3goV2ViS2l0
RE9NV2hlZWxFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV93aGVlbF9ldmVudF9n
ZXRfd2hlZWxfZGVsdGFfeToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XaGVlbEV2ZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV93
aGVlbF9ldmVudF9nZXRfd2hlZWxfZGVsdGFfeShXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01XaGVlbEV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoq
LworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hlZWxfZGVs
dGEoV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXZWJLaXRET01XaGVlbEV2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi41M2RjMWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NV2hlZWxFdmVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01XaGVlbEV2ZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1doZWVsRXZlbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NV2hlZWxFdmVudC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTVdoZWVsRXZlbnQqIHdyYXBXaGVlbEV2ZW50KFdlYkNvcmU6Oldo
ZWVsRXZlbnQqKTsKK1dlYktpdERPTVdoZWVsRXZlbnQqIGtpdChXZWJDb3JlOjpXaGVlbEV2ZW50
Kik7CitXZWJDb3JlOjpXaGVlbEV2ZW50KiBjb3JlKFdlYktpdERPTVdoZWVsRXZlbnQqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NV2hlZWxFdmVudFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50VW5zdGFibGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hl
ZWxFdmVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgw
NjU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudFVuc3RhYmxlLmgKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NV2hlZWxFdmVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NV2hlZWxFdmVudFVu
c3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNM
UworCisvKioKKyAqIFdFQktJVF9ET01fV0hFRUxfRVZFTlRfRE9NX0RFTFRBX1BJWEVMOgorICov
CisjZGVmaW5lIFdFQktJVF9ET01fV0hFRUxfRVZFTlRfRE9NX0RFTFRBX1BJWEVMIDB4MDAKKwor
LyoqCisgKiBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0RPTV9ERUxUQV9MSU5FOgorICovCisjZGVm
aW5lIFdFQktJVF9ET01fV0hFRUxfRVZFTlRfRE9NX0RFTFRBX0xJTkUgMHgwMQorCisvKioKKyAq
IFdFQktJVF9ET01fV0hFRUxfRVZFTlRfRE9NX0RFTFRBX1BBR0U6CisgKi8KKyNkZWZpbmUgV0VC
S0lUX0RPTV9XSEVFTF9FVkVOVF9ET01fREVMVEFfUEFHRSAweDAyCisKKy8qKgorICogd2Via2l0
X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XaGVl
bEV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dl
dF9kZWx0YV94KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2hlZWxF
dmVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRf
ZGVsdGFfeShXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3doZWVsX2V2ZW50X2dldF9kZWx0YV96OgorICogQHNlbGY6IEEgI1dlYktpdERPTVdoZWVsRXZl
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2Rl
bHRhX3ooV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV93
aGVlbF9ldmVudF9nZXRfZGVsdGFfbW9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XaGVlbEV2
ZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVs
dGFfbW9kZShXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3doZWVsX2V2ZW50X2dldF93ZWJraXRfZGlyZWN0aW9uX2ludmVydGVkX2Zyb21fZGV2aWNlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVdoZWVsRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2Via2l0X2RpcmVjdGlvbl9pbnZlcnRlZF9m
cm9tX2RldmljZShXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NV2hlZWxFdmVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHBy
ZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40ZDdjOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aEV4
cHJlc3Npb24uY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhFeHBy
ZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTl9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9YUEFUSF9FWFBSRVNTSU9OLCBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRl
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZSB7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbj4gY29yZU9iamVjdDsKK30gV2ViS2l0
RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTVhQYXRoRXhwcmVzc2lvbioga2l0KFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbiogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X1hQQVRIX0VYUFJFU1NJT04ocmV0KTsKKworICAgIHJldHVybiB3cmFwWFBhdGhFeHByZXNzaW9u
KG9iaik7Cit9CisKK1dlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbiogY29yZShXZWJLaXRET01YUGF0
aEV4cHJlc3Npb24qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01YUGF0aEV4cHJlc3Npb24qIHdyYXBYUGF0
aEV4cHJlc3Npb24oV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uKiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9YUEFUSF9FWFBSRVNT
SU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVTU0lPTiwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01YUGF0aEV4cHJlc3Npb24sIHdlYmtpdF9kb21f
eHBhdGhfZXhwcmVzc2lvbiwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9Y
UEFUSF9FWFBSRVNTSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+
V2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2NvbnN0
cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVj
dENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9i
amVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0
cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTl9HRVRfUFJJVkFURShvYmplY3QpOwor
ICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpYUGF0aEV4cHJlc3Np
b24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21feHBhdGhfZXhw
cmVzc2lvbl9jbGFzc19pbml0KFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbkNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xh
c3MsIHNpemVvZihXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlKSk7CisgICAgZ29iamVj
dENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9jb25zdHJ1
Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV94cGF0aF9leHBy
ZXNzaW9uX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3hwYXRoX2V4cHJl
c3Npb25faW5pdChXZWJLaXRET01YUGF0aEV4cHJlc3Npb24qIHJlcXVlc3QpCit7CisgICAgV2Vi
S2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fWFBBVEhfRVhQ
UkVTU0lPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVhQ
YXRoRXhwcmVzc2lvblByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHdlYmtp
dF9kb21feHBhdGhfZXhwcmVzc2lvbl9ldmFsdWF0ZShXZWJLaXRET01YUGF0aEV4cHJlc3Npb24q
IHNlbGYsIFdlYktpdERPTU5vZGUqIGNvbnRleHROb2RlLCBndXNob3J0IHR5cGUsIFdlYktpdERP
TVhQYXRoUmVzdWx0KiBpblJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfWFBBVEhfRVhQUkVTU0lPTihzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKGNvbnRleHROb2RlKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQoaW5SZXN1bHQpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2Vi
Q29yZTo6WFBhdGhFeHByZXNzaW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdl
YkNvcmU6Ok5vZGUqIGNvbnZlcnRlZENvbnRleHROb2RlID0gV2ViS2l0Ojpjb3JlKGNvbnRleHRO
b2RlKTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogY29udmVydGVkSW5SZXN1bHQgPSBXZWJL
aXQ6OmNvcmUoaW5SZXN1bHQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpYUGF0aFJlc3VsdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmV2YWx1YXRlKGNvbnZlcnRlZENvbnRleHROb2RlLCB0eXBlLCBjb252ZXJ0ZWRJ
blJlc3VsdCwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Y
UGF0aEV4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDY2
YWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aEV4cHJlc3Npb24uaApAQCAtMCwwICsx
LDY3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25faAorI2RlZmluZSBX
ZWJLaXRET01YUGF0aEV4cHJlc3Npb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9YUEFUSF9FWFBSRVNTSU9OICAgICAgICAgICAgKHdlYmtpdF9kb21feHBhdGhfZXhw
cmVzc2lvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX0VYUFJFU1NJT04o
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX1hQQVRIX0VYUFJFU1NJT04sIFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbikpCisj
ZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVT
U0lPTiwgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfWFBBVEhfRVhQUkVTU0lPTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVTU0lPTikpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfWFBBVEhfRVhQUkVTU0lPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVTU0lPTikpCisj
ZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVT
U0lPTiwgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TVhQYXRoRXhwcmVzc2lvbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uQ2xhc3MgeworICAgIFdlYktp
dERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZXZhbHVhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
WFBhdGhFeHByZXNzaW9uCisgKiBAY29udGV4dE5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEB0
eXBlOiBBICNndXNob3J0CisgKiBAaW5SZXN1bHQ6IEEgI1dlYktpdERPTVhQYXRoUmVzdWx0Cisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dl
YktpdERPTVhQYXRoUmVzdWx0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NWFBhdGhSZXN1bHQq
Cit3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZXZhbHVhdGUoV2ViS2l0RE9NWFBhdGhFeHBy
ZXNzaW9uKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBjb250ZXh0Tm9kZSwgZ3VzaG9ydCB0eXBlLCBX
ZWJLaXRET01YUGF0aFJlc3VsdCogaW5SZXN1bHQsIEdFcnJvcioqIGVycm9yKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbl9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVhQYXRoRXhwcmVzc2lvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9u
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZThkYzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvblByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TVhQYXRoRXhwcmVzc2lvblByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01YUGF0aEV4cHJlc3Np
b25Qcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvWFBhdGhFeHByZXNzaW9uLmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbiogd3JhcFhQYXRoRXhwcmVzc2lvbihX
ZWJDb3JlOjpYUGF0aEV4cHJlc3Npb24qKTsKK1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbioga2l0
KFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbiopOworV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uKiBj
b3JlKFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbiopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBhdGhOU1Jlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmNwcApzaW1pbGFyaXR5IGluZGV4IDk3JQpy
ZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRo
TlNSZXNvbHZlci5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmNwcAppbmRleCBh
YzI4MjA4Li5jNGJlMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2
ZXIuY3BwCkBAIC0yMSwxMCArMjEsMTAgQEAKIAogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CiAjaW5jbHVkZSAiR09iamVjdFhQYXRoTlNSZXNvbHZlci5oIgotI2luY2x1ZGUgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg+CiAjaW5jbHVkZSAiV2ViS2l0RE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NWFBh
dGhOU1Jlc29sdmVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC0xMTcsNyArMTE3LDcgQEAg
UmVmUHRyPFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlcj4gY29yZShXZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXIqIHhQYXRoTlNSZXNvbHZlcikKICAgICBpZiAoV0VCS0lUX0RPTV9JU19OQVRJVkVfWFBB
VEhfTlNfUkVTT0xWRVIoeFBhdGhOU1Jlc29sdmVyKSkKICAgICAgICAgY29yZVJlc29sdmVyID0g
Y29yZShXRUJLSVRfRE9NX05BVElWRV9YUEFUSF9OU19SRVNPTFZFUih4UGF0aE5TUmVzb2x2ZXIp
KTsKICAgICBlbHNlCi0gICAgICAgIGNvcmVSZXNvbHZlciA9IFdlYkNvcmU6OkdPYmplY3RYUGF0
aE5TUmVzb2x2ZXI6OmNyZWF0ZSh4UGF0aE5TUmVzb2x2ZXIpOworICAgICAgICBjb3JlUmVzb2x2
ZXIgPSBXZWJLaXQ6OkdPYmplY3RYUGF0aE5TUmVzb2x2ZXI6OmNyZWF0ZSh4UGF0aE5TUmVzb2x2
ZXIpOwogICAgIHJldHVybiBjb3JlUmVzb2x2ZXI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVhQYXRoTlNSZXNvbHZlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5oCnJl
bmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NWFBhdGhOU1Jlc29sdmVyUHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBhdGhOU1Jlc29s
dmVyUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGUuaAppbmRl
eCBmZmJhNmM0Li44MmIwZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRo
TlNSZXNvbHZlclByaXZhdGUuaApAQCAtMjEsNyArMjEsNyBAQAogI2lmbmRlZiBXZWJLaXRET01Y
UGF0aE5TUmVzb2x2ZXJQcml2YXRlX2gKICNkZWZpbmUgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVy
UHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1hQYXRoTlNSZXNvbHZlci5oPgogI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01YUGF0
aE5TUmVzb2x2ZXIuaD4KIAogI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTkFUSVZFX1hQQVRIX05T
X1JFU09MVkVSICAgICAgICAgICAgKHdlYmtpdF9kb21fbmF0aXZlX3hwYXRoX25zX3Jlc29sdmVy
X2dldF90eXBlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoUmVzdWx0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBh
dGhSZXN1bHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOWYwYWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoUmVzdWx0LmNwcApAQCAtMCwwICsxLDMzOSBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdERPTVhQYXRoUmVzdWx0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NWFBhdGhSZXN1bHRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfUkVTVUxULCBXZWJL
aXRET01YUGF0aFJlc3VsdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01YUGF0
aFJlc3VsdFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpYUGF0aFJlc3VsdD4gY29yZU9i
amVjdDsKK30gV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NWFBhdGhSZXN1bHQqIGtpdChXZWJDb3JlOjpYUGF0aFJlc3VsdCogb2Jq
KQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRl
ciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRf
RE9NX1hQQVRIX1JFU1VMVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBYUGF0aFJlc3VsdChvYmop
OworfQorCitXZWJDb3JlOjpYUGF0aFJlc3VsdCogY29yZShXZWJLaXRET01YUGF0aFJlc3VsdCog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlhQ
YXRoUmVzdWx0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHdyYXBYUGF0aFJlc3VsdChXZWJDb3JlOjpYUGF0
aFJlc3VsdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
WFBBVEhfUkVTVUxULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVhQYXRoUmVz
dWx0LCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUkVTVUxUX1RZUEUsCisgICAgUFJPUF9OVU1C
RVJfVkFMVUUsCisgICAgUFJPUF9TVFJJTkdfVkFMVUUsCisgICAgUFJPUF9CT09MRUFOX1ZBTFVF
LAorICAgIFBST1BfU0lOR0xFX05PREVfVkFMVUUsCisgICAgUFJPUF9JTlZBTElEX0lURVJBVE9S
X1NUQVRFLAorICAgIFBST1BfU05BUFNIT1RfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV94cGF0aF9yZXN1bHRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fWFBBVEhfUkVTVUxU
X0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3Jn
ZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NWFBhdGhS
ZXN1bHRQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV94cGF0aF9yZXN1
bHRfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYgPSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1JFU1VMVF9UWVBF
OgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3Vs
dF9nZXRfcmVzdWx0X3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TlVNQkVSX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9k
b21feHBhdGhfcmVzdWx0X2dldF9udW1iZXJfdmFsdWUoc2VsZiwgbnVsbHB0cikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RSSU5HX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc3RyaW5nX3ZhbHVl
KHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JPT0xFQU5f
VkFMVUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21feHBh
dGhfcmVzdWx0X2dldF9ib29sZWFuX3ZhbHVlKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NJTkdMRV9OT0RFX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9zaW5nbGVfbm9kZV92
YWx1ZShzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTlZB
TElEX0lURVJBVE9SX1NUQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfaW52YWxpZF9pdGVyYXRvcl9zdGF0ZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TTkFQU0hPVF9MRU5HVEg6CisgICAgICAg
IGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc25h
cHNob3RfbGVuZ3RoKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2Vi
S2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6WFBhdGhSZXN1bHQqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21feHBhdGhfcmVzdWx0X2NsYXNzX2luaXQoV2ViS2l0RE9NWFBhdGhSZXN1bHRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
Z29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlKSk7CisgICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2NvbnN0
cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3hwYXRoX3Jl
c3VsdF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21feHBhdGhfcmVzdWx0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVNVTFRf
VFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAgICAgICAicmVzdWx0LXR5
cGUiLAorICAgICAgICAgICAgIlhQYXRoUmVzdWx0OnJlc3VsdC10eXBlIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ3VzaG9ydCBYUGF0aFJlc3VsdDpyZXN1bHQtdHlwZSIsCisgICAgICAgICAg
ICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9OVU1CRVJfVkFMVUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19k
b3VibGUoCisgICAgICAgICAgICAibnVtYmVyLXZhbHVlIiwKKyAgICAgICAgICAgICJYUGF0aFJl
c3VsdDpudW1iZXItdmFsdWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIFhQYXRo
UmVzdWx0Om51bWJlci12YWx1ZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9V
QkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfU1RSSU5HX1ZBTFVFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInN0cmluZy12YWx1ZSIsCisgICAgICAgICAgICAiWFBhdGhSZXN1bHQ6c3RyaW5n
LXZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFhQYXRoUmVzdWx0OnN0cmlu
Zy12YWx1ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JPT0xFQU5fVkFMVUUsCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImJvb2xlYW4tdmFsdWUiLAorICAgICAgICAg
ICAgIlhQYXRoUmVzdWx0OmJvb2xlYW4tdmFsdWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Ym9vbGVhbiBYUGF0aFJlc3VsdDpib29sZWFuLXZhbHVlIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
U0lOR0xFX05PREVfVkFMVUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAic2luZ2xlLW5vZGUtdmFsdWUiLAorICAgICAgICAgICAgIlhQYXRoUmVzdWx0OnNpbmds
ZS1ub2RlLXZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogWFBh
dGhSZXN1bHQ6c2luZ2xlLW5vZGUtdmFsdWUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9JTlZBTElEX0lURVJBVE9SX1NUQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICJpbnZhbGlkLWl0ZXJhdG9yLXN0YXRlIiwKKyAgICAgICAgICAg
ICJYUGF0aFJlc3VsdDppbnZhbGlkLWl0ZXJhdG9yLXN0YXRlIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2Jvb2xlYW4gWFBhdGhSZXN1bHQ6aW52YWxpZC1pdGVyYXRvci1zdGF0ZSIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NOQVBTSE9UX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vs
b25nKAorICAgICAgICAgICAgInNuYXBzaG90LWxlbmd0aCIsCisgICAgICAgICAgICAiWFBhdGhS
ZXN1bHQ6c25hcHNob3QtbGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFhQ
YXRoUmVzdWx0OnNuYXBzaG90LWxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfaW5pdChXZWJLaXRET01YUGF0aFJlc3VsdCogcmVx
dWVzdCkKK3sKKyAgICBXZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1hQQVRIX1JFU1VMVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdl
YktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZSgpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRf
ZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VM
VChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IDApOworICAgIFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlcmF0ZU5leHQoZWMp
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9zbmFwc2hvdF9pdGVtKFdl
YktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChzZWxmKSwgMCk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6
OlhQYXRoUmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c25hcHNob3RJdGVtKGluZGV4LCBlYykpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1c2hvcnQg
d2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3Jlc3VsdF90eXBlKFdlYktpdERPTVhQYXRoUmVz
dWx0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVtLT5yZXN1bHRUeXBlKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfbnVtYmVy
X3ZhbHVlKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQoc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpYUGF0
aFJlc3VsdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPm51bWJlclZhbHVlKGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21feHBhdGhf
cmVzdWx0X2dldF9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwor
ICAgIFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0cmluZ1ZhbHVlKGVjKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2Jvb2xlYW5fdmFs
dWUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
WFBhdGhSZXN1bHQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Ym9vbGVhblZh
bHVlKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9kZSogd2Vi
a2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3NpbmdsZV9ub2RlX3ZhbHVlKFdlYktpdERPTVhQYXRo
UmVzdWx0KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19YUEFUSF9SRVNVTFQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNp
bmdsZU5vZGVWYWx1ZShlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9p
bnZhbGlkX2l0ZXJhdG9yX3N0YXRlKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChzZWxmKSwgRkFMU0UpOworICAgIFdl
YkNvcmU6OlhQYXRoUmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmludmFsaWRJdGVyYXRvclN0YXRlKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9zbmFwc2hvdF9s
ZW5ndGgoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChzZWxmKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlhQYXRo
UmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5zbmFwc2hvdExlbmd0aChl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhS
ZXN1bHQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mN2E1YWFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5oCkBA
IC0wLDAgKzEsMTkzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01YUGF0aFJlc3VsdF9oCisjZGVm
aW5lIFdlYktpdERPTVhQYXRoUmVzdWx0X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfWFBBVEhfUkVTVUxUICAgICAgICAgICAgKHdlYmtpdF9kb21feHBhdGhfcmVzdWx0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9Y
UEFUSF9SRVNVTFQsIFdlYktpdERPTVhQYXRoUmVzdWx0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9Y
UEFUSF9SRVNVTFRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX1hQQVRIX1JFU1VMVCwgV2ViS2l0RE9NWFBhdGhSZXN1bHRD
bGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1hQQVRIX1JF
U1VMVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxUX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9YUEFUSF9S
RVNVTFQpKQorI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfWFBBVEhf
UkVTVUxULCBXZWJLaXRET01YUGF0aFJlc3VsdENsYXNzKSkKKworLyoqCisgKiBXRUJLSVRfRE9N
X1hQQVRIX1JFU1VMVF9BTllfVFlQRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JF
U1VMVF9BTllfVFlQRSAwCisKKy8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfTlVNQkVS
X1RZUEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfTlVNQkVSX1RZUEUg
MQorCisvKioKKyAqIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX1NUUklOR19UWVBFOgorICovCisj
ZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX1NUUklOR19UWVBFIDIKKworLyoqCisgKiBX
RUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9CT09MRUFOX1RZUEU6CisgKi8KKyNkZWZpbmUgV0VCS0lU
X0RPTV9YUEFUSF9SRVNVTFRfQk9PTEVBTl9UWVBFIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX1hQ
QVRIX1JFU1VMVF9VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fWFBBVEhfUkVTVUxUX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgNAorCisv
KioKKyAqIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBF
OgorICovCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX09SREVSRURfTk9ERV9JVEVS
QVRPUl9UWVBFIDUKKworLyoqCisgKiBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9VTk9SREVSRURf
Tk9ERV9TTkFQU0hPVF9UWVBFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxU
X1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgNgorCisvKioKKyAqIFdFQktJVF9ET01fWFBB
VEhfUkVTVUxUX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFOgorICovCisjZGVmaW5lIFdFQktJ
VF9ET01fWFBBVEhfUkVTVUxUX09SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFIDcKKworLyoqCisg
KiBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9BTllfVU5PUkRFUkVEX05PREVfVFlQRToKKyAqLwor
I2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9BTllfVU5PUkRFUkVEX05PREVfVFlQRSA4
CisKKy8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfRklSU1RfT1JERVJFRF9OT0RFX1RZ
UEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfRklSU1RfT1JERVJFRF9O
T0RFX1RZUEUgOQorCitzdHJ1Y3QgX1dlYktpdERPTVhQYXRoUmVzdWx0IHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01YUGF0aFJl
c3VsdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pdGVyYXRlX25leHQo
V2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9zbmFwc2hvdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVhQYXRoUmVzdWx0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICogQGVycm9yOiAjR0Vycm9y
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21feHBhdGhfcmVzdWx0X3NuYXBz
aG90X2l0ZW0oV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9yZXN1bHRf
dHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorICoKKyAqIFJldHVybnM6
IEEgI2d1c2hvcnQKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX3hwYXRoX3Jl
c3VsdF9nZXRfcmVzdWx0X3R5cGUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9udW1iZXJfdmFsdWU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVy
bnM6IEEgI2dkb3VibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3hwYXRo
X3Jlc3VsdF9nZXRfbnVtYmVyX3ZhbHVlKFdlYktpdERPTVhQYXRoUmVzdWx0KiBzZWxmLCBHRXJy
b3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3N0cmlu
Z192YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NWFBhdGhS
ZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3hwYXRo
X3Jlc3VsdF9nZXRfYm9vbGVhbl92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJl
c3VsdAorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2Jvb2xl
YW5fdmFsdWUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc2luZ2xlX25vZGVfdmFsdWU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc2luZ2xl
X25vZGVfdmFsdWUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfaW52YWxpZF9pdGVyYXRvcl9z
dGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21feHBhdGhf
cmVzdWx0X2dldF9pbnZhbGlkX2l0ZXJhdG9yX3N0YXRlKFdlYktpdERPTVhQYXRoUmVzdWx0KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc25hcHNob3RfbGVu
Z3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVhQYXRoUmVzdWx0CisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dl
YmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9zbmFwc2hvdF9sZW5ndGgoV2ViS2l0RE9NWFBhdGhS
ZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdlYktpdERPTVhQYXRoUmVzdWx0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmM0M2VkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoUmVz
dWx0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvWFBhdGhSZXN1
bHQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NWFBhdGhSZXN1bHQuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01YUGF0aFJlc3VsdCogd3JhcFhQYXRoUmVzdWx0KFdl
YkNvcmU6OlhQYXRoUmVzdWx0Kik7CitXZWJLaXRET01YUGF0aFJlc3VsdCoga2l0KFdlYkNvcmU6
OlhQYXRoUmVzdWx0Kik7CitXZWJDb3JlOjpYUGF0aFJlc3VsdCogY29yZShXZWJLaXRET01YUGF0
aFJlc3VsdCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01Y
UGF0aFJlc3VsdFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9kb2NzL3dlYmtpdGRvbWd0ay00LjAtc2Vj
dGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9kb2NzL3dlYmtpdGRvbWd0ay00LjAtc2VjdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDczNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL2RvY3Mvd2Via2l0
ZG9tZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTAsMCArMSwzMDE5IEBACis8U0VDVElPTj4KKzxG
SUxFPldlYktpdERPTUN1c3RvbTwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01DdXN0b208L1RJVExF
PgorCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfaXNfZWRpdGVkCit3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9pc19lZGl0ZWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd193
ZWJraXRfbWVzc2FnZV9oYW5kbGVyc19wb3N0X21lc3NhZ2UKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRET01FdmVudFRhcmdldDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01F
dmVudFRhcmdldDwvVElUTEU+CisKK3dlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2
ZW50Cit3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIKK3dlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0ZW5lcgord2Via2l0X2RvbV9ldmVudF90
YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZQord2Via2l0X2RvbV9ldmVudF90
YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZQorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UKK1dFQktJVF9ET01fVFlQRV9FVkVO
VF9UQVJHRVQKK1dFQktJVF9ET01fRVZFTlRfVEFSR0VUCitXRUJLSVRfRE9NX0lTX0VWRU5UX1RB
UkdFVAorV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVRfQ0xBU1MKK1dFQktJVF9ET01fRVZFTlRfVEFS
R0VUX0dFVF9JRkFDRQorCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9ldmVudF90
YXJnZXRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01O
b2RlRmlsdGVyPC9GSUxFPgorPFRJVExFPldlYktpdERPTU5vZGVGaWx0ZXI8L1RJVExFPgorCitX
RUJLSVRfRE9NX05PREVfRklMVEVSX0FDQ0VQVAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9SRUpF
Q1QKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19BTEwKK1dFQktJVF9ET01fTk9ERV9GSUxU
RVJfU0hPV19BVFRSSUJVVEUKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19DREFUQV9TRUNU
SU9OCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfQ09NTUVOVAorV0VCS0lUX0RPTV9OT0RF
X0ZJTFRFUl9TSE9XX0RPQ1VNRU5UCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRE9DVU1F
TlRfRlJBR01FTlQKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19ET0NVTUVOVF9UWVBFCitX
RUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRUxFTUVOVAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRF
Ul9TSE9XX0VOVElUWQorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0VOVElUWV9SRUZFUkVO
Q0UKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19OT1RBVElPTgorV0VCS0lUX0RPTV9OT0RF
X0ZJTFRFUl9TSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04KK1dFQktJVF9ET01fTk9ERV9GSUxU
RVJfU0hPV19URVhUCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NLSVAKK3dlYmtpdF9kb21fbm9k
ZV9maWx0ZXJfYWNjZXB0X25vZGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01O
b2RlRmlsdGVySWZhY2UKK1dFQktJVF9ET01fVFlQRV9OT0RFX0ZJTFRFUgorV0VCS0lUX0RPTV9O
T0RFX0ZJTFRFUgorV0VCS0lUX0RPTV9JU19OT0RFX0ZJTFRFUgorV0VCS0lUX0RPTV9OT0RFX0ZJ
TFRFUl9DTEFTUworV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9HRVRfSUZBQ0UKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fbm9kZV9maWx0ZXJfZ2V0X3R5cGUKKzwvU0VDVElPTj4K
KworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01PYmplY3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0
RE9NT2JqZWN0PC9USVRMRT4KK1dlYktpdERPTU9iamVjdAorCisKKworPFNVQlNFQ1RJT04gU3Rh
bmRhcmQ+CitXZWJLaXRET01PYmplY3RDbGFzcworV0VCS0lUX0RPTV9UWVBFX09CSkVDVAorV0VC
S0lUX0RPTV9PQkpFQ1QKK1dFQktJVF9ET01fSVNfT0JKRUNUCitXRUJLSVRfRE9NX09CSkVDVF9D
TEFTUworV0VCS0lUX0RPTV9JU19PQkpFQ1RfQ0xBU1MKK1dFQktJVF9ET01fT0JKRUNUX0dFVF9D
TEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0RE9NT2JqZWN0UHJpdmF0ZQord2Vi
a2l0X2RvbV9vYmplY3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5X
ZWJLaXRET01YUGF0aE5TUmVzb2x2ZXI8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NWFBhdGhOU1Jl
c29sdmVyPC9USVRMRT4KKword2Via2l0X2RvbV94cGF0aF9uc19yZXNvbHZlcl9sb29rdXBfbmFt
ZXNwYWNlX3VyaQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTVhQYXRoTlNSZXNv
bHZlcklmYWNlCitXRUJLSVRfRE9NX1RZUEVfWFBBVEhfTlNfUkVTT0xWRVIKK1dFQktJVF9ET01f
WFBBVEhfTlNfUkVTT0xWRVIKK1dFQktJVF9ET01fSVNfWFBBVEhfTlNfUkVTT0xWRVIKK1dFQktJ
VF9ET01fWFBBVEhfTlNfUkVTT0xWRVJfQ0xBU1MKK1dFQktJVF9ET01fWFBBVEhfTlNfUkVTT0xW
RVJfR0VUX0lGQUNFCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX3hwYXRoX25z
X3Jlc29sdmVyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0
RE9NQ1NTUnVsZTwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01DU1NSdWxlPC9USVRMRT4KK1dlYktp
dERPTUNTU1J1bGUKKworV0VCS0lUX0RPTV9DU1NfUlVMRV9VTktOT1dOX1JVTEUKK1dFQktJVF9E
T01fQ1NTX1JVTEVfU1RZTEVfUlVMRQorV0VCS0lUX0RPTV9DU1NfUlVMRV9DSEFSU0VUX1JVTEUK
K1dFQktJVF9ET01fQ1NTX1JVTEVfSU1QT1JUX1JVTEUKK1dFQktJVF9ET01fQ1NTX1JVTEVfTUVE
SUFfUlVMRQorV0VCS0lUX0RPTV9DU1NfUlVMRV9GT05UX0ZBQ0VfUlVMRQorV0VCS0lUX0RPTV9D
U1NfUlVMRV9QQUdFX1JVTEUKK3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3J1bGVfdHlwZQord2Vi
a2l0X2RvbV9jc3NfcnVsZV9nZXRfY3NzX3RleHQKK3dlYmtpdF9kb21fY3NzX3J1bGVfc2V0X2Nz
c190ZXh0Cit3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wYXJlbnRfc3R5bGVfc2hlZXQKK3dlYmtp
dF9kb21fY3NzX3J1bGVfZ2V0X3BhcmVudF9ydWxlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
V2ViS2l0RE9NQ1NTUnVsZUNsYXNzCitXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUKK1dFQktJVF9E
T01fQ1NTX1JVTEUKK1dFQktJVF9ET01fSVNfQ1NTX1JVTEUKK1dFQktJVF9ET01fQ1NTX1JVTEVf
Q0xBU1MKK1dFQktJVF9ET01fSVNfQ1NTX1JVTEVfQ0xBU1MKK1dFQktJVF9ET01fQ1NTX1JVTEVf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2Nzc19ydWxlX2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NQ1NTUnVsZUxp
c3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NQ1NTUnVsZUxpc3Q8L1RJVExFPgorV2ViS2l0RE9N
Q1NTUnVsZUxpc3QKKword2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2l0ZW0KK3dlYmtpdF9kb21f
Y3NzX3J1bGVfbGlzdF9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RE9NQ1NTUnVsZUxpc3RDbGFzcworV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QKK1dFQktJ
VF9ET01fQ1NTX1JVTEVfTElTVAorV0VCS0lUX0RPTV9JU19DU1NfUlVMRV9MSVNUCitXRUJLSVRf
RE9NX0NTU19SVUxFX0xJU1RfQ0xBU1MKK1dFQktJVF9ET01fSVNfQ1NTX1JVTEVfTElTVF9DTEFT
UworV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjwvRklMRT4KKzxUSVRM
RT5XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uPC9USVRMRT4KK1dlYktpdERPTUNTU1N0eWxl
RGVjbGFyYXRpb24KKword2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3Bl
cnR5X3ZhbHVlCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9yZW1vdmVfcHJvcGVy
dHkKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9wcmlvcml0
eQord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X3Byb3BlcnR5Cit3ZWJraXRf
ZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9pdGVtCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNs
YXJhdGlvbl9nZXRfcHJvcGVydHlfc2hvcnRoYW5kCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNs
YXJhdGlvbl9pc19wcm9wZXJ0eV9pbXBsaWNpdAord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFy
YXRpb25fZ2V0X2Nzc190ZXh0Cit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9zZXRf
Y3NzX3RleHQKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9sZW5ndGgKK3dl
YmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wYXJlbnRfcnVsZQorCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25DbGFzcworV0VCS0lU
X0RPTV9UWVBFX0NTU19TVFlMRV9ERUNMQVJBVElPTgorV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVD
TEFSQVRJT04KK1dFQktJVF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OCitXRUJLSVRfRE9N
X0NTU19TVFlMRV9ERUNMQVJBVElPTl9DTEFTUworV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVD
TEFSQVRJT05fQ0xBU1MKK1dFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OX0dFVF9DTEFT
UworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRp
b25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01DU1NT
dHlsZVNoZWV0PC9GSUxFPgorPFRJVExFPldlYktpdERPTUNTU1N0eWxlU2hlZXQ8L1RJVExFPgor
V2ViS2l0RE9NQ1NTU3R5bGVTaGVldAorCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9pbnNl
cnRfcnVsZQord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZGVsZXRlX3J1bGUKK3dlYmtpdF9k
b21fY3NzX3N0eWxlX3NoZWV0X2FkZF9ydWxlCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9y
ZW1vdmVfcnVsZQord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X293bmVyX3J1bGUKK3dl
YmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9jc3NfcnVsZXMKK3dlYmtpdF9kb21fY3NzX3N0
eWxlX3NoZWV0X2dldF9ydWxlcworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUNT
U1N0eWxlU2hlZXRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9TSEVFVAorV0VCS0lU
X0RPTV9DU1NfU1RZTEVfU0hFRVQKK1dFQktJVF9ET01fSVNfQ1NTX1NUWUxFX1NIRUVUCitXRUJL
SVRfRE9NX0NTU19TVFlMRV9TSEVFVF9DTEFTUworV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfU0hF
RVRfQ0xBU1MKK1dFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01DU1NWYWx1ZTwvRklMRT4KKzxUSVRM
RT5XZWJLaXRET01DU1NWYWx1ZTwvVElUTEU+CitXZWJLaXRET01DU1NWYWx1ZQorCitXRUJLSVRf
RE9NX0NTU19WQUxVRV9DU1NfSU5IRVJJVAorV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX1BSSU1J
VElWRV9WQUxVRQorV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX1ZBTFVFX0xJU1QKK1dFQktJVF9E
T01fQ1NTX1ZBTFVFX0NTU19DVVNUT00KK3dlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9jc3NfdGV4
dAord2Via2l0X2RvbV9jc3NfdmFsdWVfc2V0X2Nzc190ZXh0Cit3ZWJraXRfZG9tX2Nzc192YWx1
ZV9nZXRfY3NzX3ZhbHVlX3R5cGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01D
U1NWYWx1ZUNsYXNzCitXRUJLSVRfRE9NX1RZUEVfQ1NTX1ZBTFVFCitXRUJLSVRfRE9NX0NTU19W
QUxVRQorV0VCS0lUX0RPTV9JU19DU1NfVkFMVUUKK1dFQktJVF9ET01fQ1NTX1ZBTFVFX0NMQVNT
CitXRUJLSVRfRE9NX0lTX0NTU19WQUxVRV9DTEFTUworV0VCS0lUX0RPTV9DU1NfVkFMVUVfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTU1lZGlhTGlzdDwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01NZWRpYUxpc3Q8L1RJVExFPgorV2ViS2l0RE9NTWVkaWFM
aXN0CisKK3dlYmtpdF9kb21fbWVkaWFfbGlzdF9pdGVtCit3ZWJraXRfZG9tX21lZGlhX2xpc3Rf
ZGVsZXRlX21lZGl1bQord2Via2l0X2RvbV9tZWRpYV9saXN0X2FwcGVuZF9tZWRpdW0KK3dlYmtp
dF9kb21fbWVkaWFfbGlzdF9nZXRfbWVkaWFfdGV4dAord2Via2l0X2RvbV9tZWRpYV9saXN0X3Nl
dF9tZWRpYV90ZXh0Cit3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X2xlbmd0aAorCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdERPTU1lZGlhTGlzdENsYXNzCitXRUJLSVRfRE9NX1RZUEVf
TUVESUFfTElTVAorV0VCS0lUX0RPTV9NRURJQV9MSVNUCitXRUJLSVRfRE9NX0lTX01FRElBX0xJ
U1QKK1dFQktJVF9ET01fTUVESUFfTElTVF9DTEFTUworV0VCS0lUX0RPTV9JU19NRURJQV9MSVNU
X0NMQVNTCitXRUJLSVRfRE9NX01FRElBX0xJU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+Cit3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRET01TdHlsZVNoZWV0PC9GSUxFPgorPFRJVExFPldlYktpdERP
TVN0eWxlU2hlZXQ8L1RJVExFPgorV2ViS2l0RE9NU3R5bGVTaGVldAorCit3ZWJraXRfZG9tX3N0
eWxlX3NoZWV0X2dldF9jb250ZW50X3R5cGUKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2Rp
c2FibGVkCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X3NldF9kaXNhYmxlZAord2Via2l0X2RvbV9z
dHlsZV9zaGVldF9nZXRfb3duZXJfbm9kZQord2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfcGFy
ZW50X3N0eWxlX3NoZWV0Cit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9ocmVmCit3ZWJraXRf
ZG9tX3N0eWxlX3NoZWV0X2dldF90aXRsZQord2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfbWVk
aWEKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01TdHlsZVNoZWV0Q2xhc3MKK1dF
QktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVAorV0VCS0lUX0RPTV9TVFlMRV9TSEVFVAorV0VCS0lU
X0RPTV9JU19TVFlMRV9TSEVFVAorV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9DTEFTUworV0VCS0lU
X0RPTV9JU19TVFlMRV9TSEVFVF9DTEFTUworV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9HRVRfQ0xB
U1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3R5
cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01TdHlsZVNoZWV0TGlz
dDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01TdHlsZVNoZWV0TGlzdDwvVElUTEU+CitXZWJLaXRE
T01TdHlsZVNoZWV0TGlzdAorCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfaXRlbQord2Vi
a2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2dldF9sZW5ndGgKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXZWJLaXRET01TdHlsZVNoZWV0TGlzdENsYXNzCitXRUJLSVRfRE9NX1RZUEVfU1RZTEVf
U0hFRVRfTElTVAorV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUCitXRUJLSVRfRE9NX0lTX1NU
WUxFX1NIRUVUX0xJU1QKK1dFQktJVF9ET01fU1RZTEVfU0hFRVRfTElTVF9DTEFTUworV0VCS0lU
X0RPTV9JU19TVFlMRV9TSEVFVF9MSVNUX0NMQVNTCitXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJ
U1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX3N0eWxlX3No
ZWV0X2xpc3RfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRE
T01BdHRyPC9GSUxFPgorPFRJVExFPldlYktpdERPTUF0dHI8L1RJVExFPgorV2ViS2l0RE9NQXR0
cgorCit3ZWJraXRfZG9tX2F0dHJfZ2V0X25hbWUKK3dlYmtpdF9kb21fYXR0cl9nZXRfc3BlY2lm
aWVkCit3ZWJraXRfZG9tX2F0dHJfZ2V0X3ZhbHVlCit3ZWJraXRfZG9tX2F0dHJfc2V0X3ZhbHVl
Cit3ZWJraXRfZG9tX2F0dHJfZ2V0X293bmVyX2VsZW1lbnQKK3dlYmtpdF9kb21fYXR0cl9nZXRf
bmFtZXNwYWNlX3VyaQord2Via2l0X2RvbV9hdHRyX2dldF9wcmVmaXgKK3dlYmtpdF9kb21fYXR0
cl9nZXRfbG9jYWxfbmFtZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUF0dHJD
bGFzcworV0VCS0lUX0RPTV9UWVBFX0FUVFIKK1dFQktJVF9ET01fQVRUUgorV0VCS0lUX0RPTV9J
U19BVFRSCitXRUJLSVRfRE9NX0FUVFJfQ0xBU1MKK1dFQktJVF9ET01fSVNfQVRUUl9DTEFTUwor
V0VCS0lUX0RPTV9BVFRSX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9hdHRyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0
RE9NQ0RBVEFTZWN0aW9uPC9GSUxFPgorPFRJVExFPldlYktpdERPTUNEQVRBU2VjdGlvbjwvVElU
TEU+CitXZWJLaXRET01DREFUQVNlY3Rpb24KKworCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
V2ViS2l0RE9NQ0RBVEFTZWN0aW9uQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9DREFUQV9TRUNUSU9O
CitXRUJLSVRfRE9NX0NEQVRBX1NFQ1RJT04KK1dFQktJVF9ET01fSVNfQ0RBVEFfU0VDVElPTgor
V0VCS0lUX0RPTV9DREFUQV9TRUNUSU9OX0NMQVNTCitXRUJLSVRfRE9NX0lTX0NEQVRBX1NFQ1RJ
T05fQ0xBU1MKK1dFQktJVF9ET01fQ0RBVEFfU0VDVElPTl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fY2RhdGFfc2VjdGlvbl9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUNoYXJhY3RlckRhdGE8L0ZJTEU+Cis8VElU
TEU+V2ViS2l0RE9NQ2hhcmFjdGVyRGF0YTwvVElUTEU+CitXZWJLaXRET01DaGFyYWN0ZXJEYXRh
CisKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc3Vic3RyaW5nX2RhdGEKK3dlYmtpdF9kb21f
Y2hhcmFjdGVyX2RhdGFfYXBwZW5kX2RhdGEKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfaW5z
ZXJ0X2RhdGEKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZGVsZXRlX2RhdGEKK3dlYmtpdF9k
b21fY2hhcmFjdGVyX2RhdGFfcmVwbGFjZV9kYXRhCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRh
X2dldF9kYXRhCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3NldF9kYXRhCit3ZWJraXRfZG9t
X2NoYXJhY3Rlcl9kYXRhX2dldF9sZW5ndGgKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJL
aXRET01DaGFyYWN0ZXJEYXRhQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9DSEFSQUNURVJfREFUQQor
V0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQQorV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQQor
V0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQV9DTEFTUworV0VCS0lUX0RPTV9JU19DSEFSQUNURVJf
REFUQV9DTEFTUworV0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQV9HRVRfQ0xBU1MKKworPFNVQlNF
Q1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01Db21tZW50PC9GSUxFPgorPFRJVExF
PldlYktpdERPTUNvbW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NQ29tbWVudAorCisKKworPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01Db21tZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9D
T01NRU5UCitXRUJLSVRfRE9NX0NPTU1FTlQKK1dFQktJVF9ET01fSVNfQ09NTUVOVAorV0VCS0lU
X0RPTV9DT01NRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0NPTU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fQ09NTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
Y29tbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TURPTUltcGxlbWVudGF0aW9uPC9GSUxFPgorPFRJVExFPldlYktpdERPTURPTUltcGxlbWVudGF0
aW9uPC9USVRMRT4KK1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uCisKK3dlYmtpdF9kb21fZG9t
X2ltcGxlbWVudGF0aW9uX2hhc19mZWF0dXJlCit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlv
bl9jcmVhdGVfZG9jdW1lbnRfdHlwZQord2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3Jl
YXRlX2RvY3VtZW50Cit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfY3NzX3N0
eWxlX3NoZWV0Cit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfaHRtbF9kb2N1
bWVudAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTURPTUltcGxlbWVudGF0aW9u
Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04KK1dFQktJVF9ET01fRE9N
X0lNUExFTUVOVEFUSU9OCitXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1FTlRBVElPTgorV0VCS0lU
X0RPTV9ET01fSU1QTEVNRU5UQVRJT05fQ0xBU1MKK1dFQktJVF9ET01fSVNfRE9NX0lNUExFTUVO
VEFUSU9OX0NMQVNTCitXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTl9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2dldF90
eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NRG9jdW1lbnQ8L0ZJ
TEU+Cis8VElUTEU+V2ViS2l0RE9NRG9jdW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NRG9jdW1lbnQK
Kword2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudAord2Via2l0X2RvbV9kb2N1bWVu
dF9jcmVhdGVfZG9jdW1lbnRfZnJhZ21lbnQKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3Rl
eHRfbm9kZQord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY29tbWVudAord2Via2l0X2RvbV9k
b2N1bWVudF9jcmVhdGVfY2RhdGFfc2VjdGlvbgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVf
cHJvY2Vzc2luZ19pbnN0cnVjdGlvbgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0cmli
dXRlCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9hc19odG1s
X2NvbGxlY3Rpb24KK3dlYmtpdF9kb21fZG9jdW1lbnRfaW1wb3J0X25vZGUKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnRfbnMKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0
dHJpYnV0ZV9ucword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVf
bnNfYXNfaHRtbF9jb2xsZWN0aW9uCit3ZWJraXRfZG9tX2RvY3VtZW50X2Fkb3B0X25vZGUKK3dl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2V2ZW50Cit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9yYW5nZQord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfbm9kZV9pdGVyYXRvcgord2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfdHJlZV93YWxrZXIKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X292ZXJyaWRlX3N0eWxlCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9leHByZXNzaW9uCit3
ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9uc19yZXNvbHZlcgord2Via2l0X2RvbV9kb2N1bWVu
dF9ldmFsdWF0ZQord2Via2l0X2RvbV9kb2N1bWVudF9leGVjX2NvbW1hbmQKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9lbmFibGVkCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5
X2NvbW1hbmRfaW5kZXRlcm0KK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9zdGF0
ZQord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX3N1cHBvcnRlZAord2Via2l0X2Rv
bV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX3ZhbHVlCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9l
bGVtZW50c19ieV9uYW1lCit3ZWJraXRfZG9tX2RvY3VtZW50X2VsZW1lbnRfZnJvbV9wb2ludAor
d2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY3NzX3N0eWxlX2RlY2xhcmF0aW9uCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lX2FzX2h0bWxfY29sbGVjdGlv
bgord2Via2l0X2RvbV9kb2N1bWVudF9oYXNfZm9jdXMKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2VsZW1lbnRfYnlfaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfc2VsZWN0b3IKK3dlYmtp
dF9kb21fZG9jdW1lbnRfcXVlcnlfc2VsZWN0b3JfYWxsCit3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9kb2N0eXBlCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbXBsZW1lbnRhdGlvbgord2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfZWxlbWVudAord2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfaW5wdXRfZW5jb2RpbmcKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF9lbmNvZGluZwor
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfeG1sX3ZlcnNpb24KK3dlYmtpdF9kb21fZG9jdW1lbnRf
c2V0X3htbF92ZXJzaW9uCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxfc3RhbmRhbG9uZQor
d2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3N0YW5kYWxvbmUKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2RvY3VtZW50X3VyaQord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfZG9jdW1lbnRfdXJp
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3N0eWxlX3NoZWV0cword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUKK3dlYmtp
dF9kb21fZG9jdW1lbnRfc2V0X3RpdGxlCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZXNpZ25f
bW9kZQord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfZGVzaWduX21vZGUKK3dlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X3JlZmVycmVyCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb21haW4KK3dlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3VybAord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29va2llCit3
ZWJraXRfZG9tX2RvY3VtZW50X3NldF9jb29raWUKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Jv
ZHkKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2JvZHkKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2hlYWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ltYWdlcword2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfYXBwbGV0cword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2Zvcm1zCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hbmNob3JzCit3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9lbWJlZHMKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3BsdWdp
bnMKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3NjcmlwdHMKK3dlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2xhc3RfbW9kaWZpZWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoYXJzZXQKK3dlYmtp
dF9kb21fZG9jdW1lbnRfc2V0X2NoYXJzZXQKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3JlYWR5
X3N0YXRlCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGFyYWN0ZXJfc2V0Cit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9wcmVmZXJyZWRfc3R5bGVzaGVldF9zZXQKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3NlbGVjdGVkX3N0eWxlc2hlZXRfc2V0Cit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9z
ZWxlY3RlZF9zdHlsZXNoZWV0X3NldAord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYWN0aXZlX2Vs
ZW1lbnQKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NvbXBhdF9tb2RlCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lCit3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50c19ieV90YWdfbmFtZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNf
YnlfdGFnX25hbWVfbnMKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VudGl0eV9yZWZlcmVu
Y2UKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfY2hhcnNldAorCis8U1VCU0VDVElP
TiBTdGFuZGFyZD4KK1dlYktpdERPTURvY3VtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9ET0NV
TUVOVAorV0VCS0lUX0RPTV9ET0NVTUVOVAorV0VCS0lUX0RPTV9JU19ET0NVTUVOVAorV0VCS0lU
X0RPTV9ET0NVTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9ET0NVTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJL
aXRET01Eb2N1bWVudEZyYWdtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTURvY3VtZW50RnJh
Z21lbnQ8L1RJVExFPgorV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorCisKKworPFNVQlNFQ1RJ
T04gU3RhbmRhcmQ+CitXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50Q2xhc3MKK1dFQktJVF9ET01f
VFlQRV9ET0NVTUVOVF9GUkFHTUVOVAorV0VCS0lUX0RPTV9ET0NVTUVOVF9GUkFHTUVOVAorV0VC
S0lUX0RPTV9JU19ET0NVTUVOVF9GUkFHTUVOVAorV0VCS0lUX0RPTV9ET0NVTUVOVF9GUkFHTUVO
VF9DTEFTUworV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9GUkFHTUVOVF9DTEFTUworV0VCS0lUX0RP
TV9ET0NVTUVOVF9GUkFHTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dl
YmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRET01Eb2N1bWVudFR5cGU8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
RG9jdW1lbnRUeXBlPC9USVRMRT4KK1dlYktpdERPTURvY3VtZW50VHlwZQorCit3ZWJraXRfZG9t
X2RvY3VtZW50X3R5cGVfZ2V0X25hbWUKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfZW50
aXRpZXMKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfbm90YXRpb25zCit3ZWJraXRfZG9t
X2RvY3VtZW50X3R5cGVfZ2V0X2ludGVybmFsX3N1YnNldAord2Via2l0X2RvbV9kb2N1bWVudF90
eXBlX2dldF9wdWJsaWNfaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfc3lzdGVtX2lk
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NRG9jdW1lbnRUeXBlQ2xhc3MKK1dF
QktJVF9ET01fVFlQRV9ET0NVTUVOVF9UWVBFCitXRUJLSVRfRE9NX0RPQ1VNRU5UX1RZUEUKK1dF
QktJVF9ET01fSVNfRE9DVU1FTlRfVFlQRQorV0VCS0lUX0RPTV9ET0NVTUVOVF9UWVBFX0NMQVNT
CitXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RZUEVfQ0xBU1MKK1dFQktJVF9ET01fRE9DVU1FTlRf
VFlQRV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fZG9jdW1l
bnRfdHlwZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NRWxlbWVudDwvVElUTEU+CitXZWJLaXRE
T01FbGVtZW50CisKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlCit3ZWJraXRfZG9t
X2VsZW1lbnRfc2V0X2F0dHJpYnV0ZQord2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1
dGUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGUKK3dlYmtpdF9kb21fZWxl
bWVudF9zZXRfYXR0cmlidXRlX25vZGUKK3dlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmli
dXRlX25vZGUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfYXNf
aHRtbF9jb2xsZWN0aW9uCit3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZXMKK3dlYmtp
dF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25zCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0
dHJpYnV0ZV9ucword2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbnMKK3dlYmtp
dF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfbnNfYXNfaHRtbF9jb2xsZWN0
aW9uCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlX25zCit3ZWJraXRfZG9t
X2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlX25zCit3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0
dHJpYnV0ZQord2Via2l0X2RvbV9lbGVtZW50X2hhc19hdHRyaWJ1dGVfbnMKK3dlYmtpdF9kb21f
ZWxlbWVudF9mb2N1cword2Via2l0X2RvbV9lbGVtZW50X2JsdXIKK3dlYmtpdF9kb21fZWxlbWVu
dF9zY3JvbGxfaW50b192aWV3Cit3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2ludG9fdmlld19p
Zl9uZWVkZWQKK3dlYmtpdF9kb21fZWxlbWVudF9zY3JvbGxfYnlfbGluZXMKK3dlYmtpdF9kb21f
ZWxlbWVudF9zY3JvbGxfYnlfcGFnZXMKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNf
YnlfY2xhc3NfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24KK3dlYmtpdF9kb21fZWxlbWVudF9xdWVy
eV9zZWxlY3Rvcgord2Via2l0X2RvbV9lbGVtZW50X3F1ZXJ5X3NlbGVjdG9yX2FsbAord2Via2l0
X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1
dGVzCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3N0eWxlCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X25h
bWVzcGFjZV91cmkKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJlZml4Cit3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X2xvY2FsX25hbWUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2xlZnQK
K3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3RvcAord2Via2l0X2RvbV9lbGVtZW50X2dl
dF9vZmZzZXRfd2lkdGgKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2hlaWdodAord2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfbGVmdAord2Via2l0X2RvbV9lbGVtZW50X2dldF9j
bGllbnRfdG9wCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF93aWR0aAord2Via2l0X2Rv
bV9lbGVtZW50X2dldF9jbGllbnRfaGVpZ2h0Cit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9s
bF9sZWZ0Cit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF9sZWZ0Cit3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X3Njcm9sbF90b3AKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfc2Nyb2xsX3RvcAor
d2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfd2lkdGgKK3dlYmtpdF9kb21fZWxlbWVudF9n
ZXRfc2Nyb2xsX2hlaWdodAord2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfcGFyZW50Cit3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2lubmVyX2h0bWwKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRf
aW5uZXJfaHRtbAord2Via2l0X2RvbV9lbGVtZW50X2dldF9vdXRlcl9odG1sCit3ZWJraXRfZG9t
X2VsZW1lbnRfc2V0X291dGVyX2h0bWwKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xhc3NfbmFt
ZQord2Via2l0X2RvbV9lbGVtZW50X3NldF9jbGFzc19uYW1lCit3ZWJraXRfZG9tX2VsZW1lbnRf
Z2V0X3ByZXZpb3VzX2VsZW1lbnRfc2libGluZword2Via2l0X2RvbV9lbGVtZW50X2dldF9uZXh0
X2VsZW1lbnRfc2libGluZword2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZHJlbgord2Via2l0
X2RvbV9lbGVtZW50X2dldF9maXJzdF9lbGVtZW50X2NoaWxkCit3ZWJraXRfZG9tX2VsZW1lbnRf
Z2V0X2xhc3RfZWxlbWVudF9jaGlsZAord2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZF9lbGVt
ZW50X2NvdW50Cit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lCit3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zCit3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXZWJLaXRET01FbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9FTEVNRU5UCitXRUJL
SVRfRE9NX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfRUxFTUVOVAorV0VCS0lUX0RPTV9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fRUxFTUVOVF9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fZWxlbWVudF9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUV2ZW50PC9GSUxF
PgorPFRJVExFPldlYktpdERPTUV2ZW50PC9USVRMRT4KK1dlYktpdERPTUV2ZW50CisKK1dFQktJ
VF9ET01fRVZFTlRfTk9ORQorV0VCS0lUX0RPTV9FVkVOVF9DQVBUVVJJTkdfUEhBU0UKK1dFQktJ
VF9ET01fRVZFTlRfQVRfVEFSR0VUCitXRUJLSVRfRE9NX0VWRU5UX0JVQkJMSU5HX1BIQVNFCitX
RUJLSVRfRE9NX0VWRU5UX01PVVNFRE9XTgorV0VCS0lUX0RPTV9FVkVOVF9NT1VTRVVQCitXRUJL
SVRfRE9NX0VWRU5UX01PVVNFT1ZFUgorV0VCS0lUX0RPTV9FVkVOVF9NT1VTRU9VVAorV0VCS0lU
X0RPTV9FVkVOVF9NT1VTRU1PVkUKK1dFQktJVF9ET01fRVZFTlRfTU9VU0VEUkFHCitXRUJLSVRf
RE9NX0VWRU5UX0NMSUNLCitXRUJLSVRfRE9NX0VWRU5UX0RCTENMSUNLCitXRUJLSVRfRE9NX0VW
RU5UX0tFWURPV04KK1dFQktJVF9ET01fRVZFTlRfS0VZVVAKK1dFQktJVF9ET01fRVZFTlRfS0VZ
UFJFU1MKK1dFQktJVF9ET01fRVZFTlRfRFJBR0RST1AKK1dFQktJVF9ET01fRVZFTlRfRk9DVVMK
K1dFQktJVF9ET01fRVZFTlRfQkxVUgorV0VCS0lUX0RPTV9FVkVOVF9TRUxFQ1QKK1dFQktJVF9E
T01fRVZFTlRfQ0hBTkdFCit3ZWJraXRfZG9tX2V2ZW50X3N0b3BfcHJvcGFnYXRpb24KK3dlYmtp
dF9kb21fZXZlbnRfcHJldmVudF9kZWZhdWx0Cit3ZWJraXRfZG9tX2V2ZW50X2luaXRfZXZlbnQK
K3dlYmtpdF9kb21fZXZlbnRfZ2V0X2V2ZW50X3R5cGUKK3dlYmtpdF9kb21fZXZlbnRfZ2V0X3Rh
cmdldAord2Via2l0X2RvbV9ldmVudF9nZXRfY3VycmVudF90YXJnZXQKK3dlYmtpdF9kb21fZXZl
bnRfZ2V0X2V2ZW50X3BoYXNlCit3ZWJraXRfZG9tX2V2ZW50X2dldF9idWJibGVzCit3ZWJraXRf
ZG9tX2V2ZW50X2dldF9jYW5jZWxhYmxlCit3ZWJraXRfZG9tX2V2ZW50X2dldF90aW1lX3N0YW1w
Cit3ZWJraXRfZG9tX2V2ZW50X2dldF9zcmNfZWxlbWVudAord2Via2l0X2RvbV9ldmVudF9nZXRf
cmV0dXJuX3ZhbHVlCit3ZWJraXRfZG9tX2V2ZW50X3NldF9yZXR1cm5fdmFsdWUKK3dlYmtpdF9k
b21fZXZlbnRfZ2V0X2NhbmNlbF9idWJibGUKK3dlYmtpdF9kb21fZXZlbnRfc2V0X2NhbmNlbF9i
dWJibGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01FdmVudENsYXNzCitXRUJL
SVRfRE9NX1RZUEVfRVZFTlQKK1dFQktJVF9ET01fRVZFTlQKK1dFQktJVF9ET01fSVNfRVZFTlQK
K1dFQktJVF9ET01fRVZFTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfRVZFTlRfQ0xBU1MKK1dFQktJ
VF9ET01fRVZFTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9t
X2V2ZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9N
S2V5Ym9hcmRFdmVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01LZXlib2FyZEV2ZW50PC9USVRM
RT4KK1dlYktpdERPTUtleWJvYXJkRXZlbnQKKworV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9L
RVlfTE9DQVRJT05fU1RBTkRBUkQKK1dFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FU
SU9OX0xFRlQKK1dFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FUSU9OX1JJR0hUCitX
RUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElPTl9OVU1QQUQKK3dlYmtpdF9kb21f
a2V5Ym9hcmRfZXZlbnRfZ2V0X21vZGlmaWVyX3N0YXRlCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2
ZW50X2luaXRfa2V5Ym9hcmRfZXZlbnQKK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2tl
eV9pZGVudGlmaWVyCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9rZXlfbG9jYXRpb24K
K3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2N0cmxfa2V5Cit3ZWJraXRfZG9tX2tleWJv
YXJkX2V2ZW50X2dldF9zaGlmdF9rZXkKK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2Fs
dF9rZXkKK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X21ldGFfa2V5Cit3ZWJraXRfZG9t
X2tleWJvYXJkX2V2ZW50X2dldF9hbHRfZ3JhcGhfa2V5CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorV2ViS2l0RE9NS2V5Ym9hcmRFdmVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfS0VZQk9BUkRf
RVZFTlQKK1dFQktJVF9ET01fS0VZQk9BUkRfRVZFTlQKK1dFQktJVF9ET01fSVNfS0VZQk9BUkRf
RVZFTlQKK1dFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfS0VZ
Qk9BUkRfRVZFTlRfQ0xBU1MKK1dFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfR0VUX0NMQVNTCisK
KzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NTW91c2VFdmVudDwvRklM
RT4KKzxUSVRMRT5XZWJLaXRET01Nb3VzZUV2ZW50PC9USVRMRT4KK1dlYktpdERPTU1vdXNlRXZl
bnQKKword2Via2l0X2RvbV9tb3VzZV9ldmVudF9pbml0X21vdXNlX2V2ZW50Cit3ZWJraXRfZG9t
X21vdXNlX2V2ZW50X2dldF9zY3JlZW5feAord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2Ny
ZWVuX3kKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2NsaWVudF94Cit3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9jbGllbnRfeQord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY3RybF9r
ZXkKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NoaWZ0X2tleQord2Via2l0X2RvbV9tb3Vz
ZV9ldmVudF9nZXRfYWx0X2tleQord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbWV0YV9rZXkK
K3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2J1dHRvbgord2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfcmVsYXRlZF90YXJnZXQKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X29mZnNldF94
Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeQord2Via2l0X2RvbV9tb3VzZV9l
dmVudF9nZXRfeAord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfeQord2Via2l0X2RvbV9tb3Vz
ZV9ldmVudF9nZXRfZnJvbV9lbGVtZW50Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF90b19l
bGVtZW50CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NTW91c2VFdmVudENsYXNz
CitXRUJLSVRfRE9NX1RZUEVfTU9VU0VfRVZFTlQKK1dFQktJVF9ET01fTU9VU0VfRVZFTlQKK1dF
QktJVF9ET01fSVNfTU9VU0VfRVZFTlQKK1dFQktJVF9ET01fTU9VU0VfRVZFTlRfQ0xBU1MKK1dF
QktJVF9ET01fSVNfTU9VU0VfRVZFTlRfQ0xBU1MKK1dFQktJVF9ET01fTU9VU0VfRVZFTlRfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NTmFtZWROb2Rl
TWFwPC9GSUxFPgorPFRJVExFPldlYktpdERPTU5hbWVkTm9kZU1hcDwvVElUTEU+CitXZWJLaXRE
T01OYW1lZE5vZGVNYXAKKword2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbmFtZWRfaXRl
bQord2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbQord2Via2l0X2RvbV9u
YW1lZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbQord2Via2l0X2RvbV9uYW1lZF9ub2RlX21h
cF9pdGVtCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9uYW1lZF9pdGVtX25zCit3ZWJr
aXRfZG9tX25hbWVkX25vZGVfbWFwX3NldF9uYW1lZF9pdGVtX25zCit3ZWJraXRfZG9tX25hbWVk
X25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtX25zCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFw
X2dldF9sZW5ndGgKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01OYW1lZE5vZGVN
YXBDbGFzcworV0VCS0lUX0RPTV9UWVBFX05BTUVEX05PREVfTUFQCitXRUJLSVRfRE9NX05BTUVE
X05PREVfTUFQCitXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQCitXRUJLSVRfRE9NX05BTUVE
X05PREVfTUFQX0NMQVNTCitXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQX0NMQVNTCitXRUJL
SVRfRE9NX05BTUVEX05PREVfTUFQX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgor
d2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTU5vZGU8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NTm9kZTwvVElU
TEU+CitXZWJLaXRET01Ob2RlCisKK1dFQktJVF9ET01fTk9ERV9FTEVNRU5UX05PREUKK1dFQktJ
VF9ET01fTk9ERV9BVFRSSUJVVEVfTk9ERQorV0VCS0lUX0RPTV9OT0RFX1RFWFRfTk9ERQorV0VC
S0lUX0RPTV9OT0RFX0NEQVRBX1NFQ1RJT05fTk9ERQorV0VCS0lUX0RPTV9OT0RFX0VOVElUWV9S
RUZFUkVOQ0VfTk9ERQorV0VCS0lUX0RPTV9OT0RFX0VOVElUWV9OT0RFCitXRUJLSVRfRE9NX05P
REVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFCitXRUJLSVRfRE9NX05PREVfQ09NTUVOVF9O
T0RFCitXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfTk9ERQorV0VCS0lUX0RPTV9OT0RFX0RPQ1VN
RU5UX1RZUEVfTk9ERQorV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX0ZSQUdNRU5UX05PREUKK1dF
QktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQKK1dFQktJVF9ET01f
Tk9ERV9ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcKK1dFQktJVF9ET01fTk9ERV9ET0NVTUVO
VF9QT1NJVElPTl9GT0xMT1dJTkcKK1dFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9D
T05UQUlOUworV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWQor
V0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklD
Cit3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZQord2Via2l0X2RvbV9ub2RlX3JlcGxhY2Vf
Y2hpbGQKK3dlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hpbGQKK3dlYmtpdF9kb21fbm9kZV9hcHBl
bmRfY2hpbGQKK3dlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMKK3dlYmtpdF9kb21fbm9k
ZV9jbG9uZV9ub2RlX3dpdGhfZXJyb3IKK3dlYmtpdF9kb21fbm9kZV9ub3JtYWxpemUKK3dlYmtp
dF9kb21fbm9kZV9pc19zdXBwb3J0ZWQKK3dlYmtpdF9kb21fbm9kZV9pc19zYW1lX25vZGUKK3dl
YmtpdF9kb21fbm9kZV9pc19lcXVhbF9ub2RlCit3ZWJraXRfZG9tX25vZGVfbG9va3VwX3ByZWZp
eAord2Via2l0X2RvbV9ub2RlX2xvb2t1cF9uYW1lc3BhY2VfdXJpCit3ZWJraXRfZG9tX25vZGVf
aXNfZGVmYXVsdF9uYW1lc3BhY2UKK3dlYmtpdF9kb21fbm9kZV9jb21wYXJlX2RvY3VtZW50X3Bv
c2l0aW9uCit3ZWJraXRfZG9tX25vZGVfY29udGFpbnMKK3dlYmtpdF9kb21fbm9kZV9nZXRfbm9k
ZV9uYW1lCit3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfdmFsdWUKK3dlYmtpdF9kb21fbm9kZV9z
ZXRfbm9kZV92YWx1ZQord2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX3R5cGUKK3dlYmtpdF9kb21f
bm9kZV9nZXRfcGFyZW50X25vZGUKK3dlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMKK3dl
YmtpdF9kb21fbm9kZV9nZXRfZmlyc3RfY2hpbGQKK3dlYmtpdF9kb21fbm9kZV9nZXRfbGFzdF9j
aGlsZAord2Via2l0X2RvbV9ub2RlX2dldF9wcmV2aW91c19zaWJsaW5nCit3ZWJraXRfZG9tX25v
ZGVfZ2V0X25leHRfc2libGluZword2Via2l0X2RvbV9ub2RlX2dldF9vd25lcl9kb2N1bWVudAor
d2Via2l0X2RvbV9ub2RlX2dldF9iYXNlX3VyaQord2Via2l0X2RvbV9ub2RlX2dldF90ZXh0X2Nv
bnRlbnQKK3dlYmtpdF9kb21fbm9kZV9zZXRfdGV4dF9jb250ZW50Cit3ZWJraXRfZG9tX25vZGVf
Z2V0X3BhcmVudF9lbGVtZW50Cit3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZQord2Via2l0X2Rv
bV9ub2RlX2dldF9uYW1lc3BhY2VfdXJpCit3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZWZpeAord2Vi
a2l0X2RvbV9ub2RlX3NldF9wcmVmaXgKK3dlYmtpdF9kb21fbm9kZV9nZXRfbG9jYWxfbmFtZQor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTU5vZGVDbGFzcworV0VCS0lUX0RPTV9U
WVBFX05PREUKK1dFQktJVF9ET01fTk9ERQorV0VCS0lUX0RPTV9JU19OT0RFCitXRUJLSVRfRE9N
X05PREVfQ0xBU1MKK1dFQktJVF9ET01fSVNfTk9ERV9DTEFTUworV0VCS0lUX0RPTV9OT0RFX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9ub2RlX2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NTm9kZUl0ZXJhdG9yPC9G
SUxFPgorPFRJVExFPldlYktpdERPTU5vZGVJdGVyYXRvcjwvVElUTEU+CitXZWJLaXRET01Ob2Rl
SXRlcmF0b3IKKword2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX25leHRfbm9kZQord2Via2l0X2Rv
bV9ub2RlX2l0ZXJhdG9yX3ByZXZpb3VzX25vZGUKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9k
ZXRhY2gKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcm9vdAord2Via2l0X2RvbV9ub2Rl
X2l0ZXJhdG9yX2dldF93aGF0X3RvX3Nob3cKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRf
ZmlsdGVyCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3JlZmVyZW5jZV9ub2RlCit3ZWJr
aXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3BvaW50ZXJfYmVmb3JlX3JlZmVyZW5jZV9ub2RlCit3
ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X2V4cGFuZF9lbnRpdHlfcmVmZXJlbmNlcworCis8
U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTU5vZGVJdGVyYXRvckNsYXNzCitXRUJLSVRf
RE9NX1RZUEVfTk9ERV9JVEVSQVRPUgorV0VCS0lUX0RPTV9OT0RFX0lURVJBVE9SCitXRUJLSVRf
RE9NX0lTX05PREVfSVRFUkFUT1IKK1dFQktJVF9ET01fTk9ERV9JVEVSQVRPUl9DTEFTUworV0VC
S0lUX0RPTV9JU19OT0RFX0lURVJBVE9SX0NMQVNTCitXRUJLSVRfRE9NX05PREVfSVRFUkFUT1Jf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX25vZGVfaXRlcmF0
b3JfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01Ob2Rl
TGlzdDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01Ob2RlTGlzdDwvVElUTEU+CitXZWJLaXRET01O
b2RlTGlzdAorCit3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtCit3ZWJraXRfZG9tX25vZGVfbGlz
dF9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NTm9kZUxpc3RD
bGFzcworV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVAorV0VCS0lUX0RPTV9OT0RFX0xJU1QKK1dF
QktJVF9ET01fSVNfTk9ERV9MSVNUCitXRUJLSVRfRE9NX05PREVfTElTVF9DTEFTUworV0VCS0lU
X0RPTV9JU19OT0RFX0xJU1RfQ0xBU1MKK1dFQktJVF9ET01fTk9ERV9MSVNUX0dFVF9DTEFTUwor
Cis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X3R5cGUKKzwv
U0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b248L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uPC9USVRMRT4K
K1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbgorCit3ZWJraXRfZG9tX3Byb2Nlc3Npbmdf
aW5zdHJ1Y3Rpb25fZ2V0X3RhcmdldAord2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9u
X2dldF9zaGVldAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbkNsYXNzCitXRUJLSVRfRE9NX1RZUEVfUFJPQ0VTU0lOR19JTlNUUlVDVElPTgor
V0VCS0lUX0RPTV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OCitXRUJLSVRfRE9NX0lTX1BST0NFU1NJ
TkdfSU5TVFJVQ1RJT04KK1dFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9DTEFTUwor
V0VCS0lUX0RPTV9JU19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX0NMQVNTCitXRUJLSVRfRE9NX1BS
T0NFU1NJTkdfSU5TVFJVQ1RJT05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01SYW5nZTwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01S
YW5nZTwvVElUTEU+CitXZWJLaXRET01SYW5nZQorCitXRUJLSVRfRE9NX1JBTkdFX1NUQVJUX1RP
X1NUQVJUCitXRUJLSVRfRE9NX1JBTkdFX1NUQVJUX1RPX0VORAorV0VCS0lUX0RPTV9SQU5HRV9F
TkRfVE9fRU5ECitXRUJLSVRfRE9NX1JBTkdFX0VORF9UT19TVEFSVAorV0VCS0lUX0RPTV9SQU5H
RV9OT0RFX0JFRk9SRQorV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0FGVEVSCitXRUJLSVRfRE9NX1JB
TkdFX05PREVfQkVGT1JFX0FORF9BRlRFUgorV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0lOU0lERQor
d2Via2l0X2RvbV9yYW5nZV9zZXRfc3RhcnQKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZAord2Vi
a2l0X2RvbV9yYW5nZV9zZXRfc3RhcnRfYmVmb3JlCit3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFy
dF9hZnRlcgord2Via2l0X2RvbV9yYW5nZV9zZXRfZW5kX2JlZm9yZQord2Via2l0X2RvbV9yYW5n
ZV9zZXRfZW5kX2FmdGVyCit3ZWJraXRfZG9tX3JhbmdlX2NvbGxhcHNlCit3ZWJraXRfZG9tX3Jh
bmdlX3NlbGVjdF9ub2RlCit3ZWJraXRfZG9tX3JhbmdlX3NlbGVjdF9ub2RlX2NvbnRlbnRzCit3
ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzCit3ZWJraXRfZG9tX3Jhbmdl
X2RlbGV0ZV9jb250ZW50cword2Via2l0X2RvbV9yYW5nZV9leHRyYWN0X2NvbnRlbnRzCit3ZWJr
aXRfZG9tX3JhbmdlX2Nsb25lX2NvbnRlbnRzCit3ZWJraXRfZG9tX3JhbmdlX2luc2VydF9ub2Rl
Cit3ZWJraXRfZG9tX3JhbmdlX3N1cnJvdW5kX2NvbnRlbnRzCit3ZWJraXRfZG9tX3JhbmdlX2Ns
b25lX3JhbmdlCit3ZWJraXRfZG9tX3JhbmdlX3RvX3N0cmluZword2Via2l0X2RvbV9yYW5nZV9k
ZXRhY2gKK3dlYmtpdF9kb21fcmFuZ2VfY3JlYXRlX2NvbnRleHR1YWxfZnJhZ21lbnQKK3dlYmtp
dF9kb21fcmFuZ2VfY29tcGFyZV9ub2RlCit3ZWJraXRfZG9tX3JhbmdlX2ludGVyc2VjdHNfbm9k
ZQord2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX3BvaW50Cit3ZWJraXRfZG9tX3JhbmdlX2lzX3Bv
aW50X2luX3JhbmdlCit3ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9jb250YWluZXIKK3dlYmtp
dF9kb21fcmFuZ2VfZ2V0X3N0YXJ0X29mZnNldAord2Via2l0X2RvbV9yYW5nZV9nZXRfZW5kX2Nv
bnRhaW5lcgord2Via2l0X2RvbV9yYW5nZV9nZXRfZW5kX29mZnNldAord2Via2l0X2RvbV9yYW5n
ZV9nZXRfY29sbGFwc2VkCit3ZWJraXRfZG9tX3JhbmdlX2dldF9jb21tb25fYW5jZXN0b3JfY29u
dGFpbmVyCit3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorV2ViS2l0RE9NUmFuZ2VDbGFzcworV0VCS0lUX0RPTV9UWVBFX1JBTkdFCitXRUJLSVRfRE9N
X1JBTkdFCitXRUJLSVRfRE9NX0lTX1JBTkdFCitXRUJLSVRfRE9NX1JBTkdFX0NMQVNTCitXRUJL
SVRfRE9NX0lTX1JBTkdFX0NMQVNTCitXRUJLSVRfRE9NX1JBTkdFX0dFVF9DTEFTUworCis8U1VC
U0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9yYW5nZV9nZXRfdHlwZQorPC9TRUNUSU9OPgor
Cis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVRleHQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
VGV4dDwvVElUTEU+CitXZWJLaXRET01UZXh0CisKK3dlYmtpdF9kb21fdGV4dF9zcGxpdF90ZXh0
Cit3ZWJraXRfZG9tX3RleHRfZ2V0X3dob2xlX3RleHQKK3dlYmtpdF9kb21fdGV4dF9yZXBsYWNl
X3dob2xlX3RleHQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01UZXh0Q2xhc3MK
K1dFQktJVF9ET01fVFlQRV9URVhUCitXRUJLSVRfRE9NX1RFWFQKK1dFQktJVF9ET01fSVNfVEVY
VAorV0VCS0lUX0RPTV9URVhUX0NMQVNTCitXRUJLSVRfRE9NX0lTX1RFWFRfQ0xBU1MKK1dFQktJ
VF9ET01fVEVYVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
dGV4dF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVRy
ZWVXYWxrZXI8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NVHJlZVdhbGtlcjwvVElUTEU+CitXZWJL
aXRET01UcmVlV2Fsa2VyCisKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfcGFyZW50X25vZGUKK3dl
YmtpdF9kb21fdHJlZV93YWxrZXJfZmlyc3RfY2hpbGQKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJf
bGFzdF9jaGlsZAord2Via2l0X2RvbV90cmVlX3dhbGtlcl9wcmV2aW91c19zaWJsaW5nCit3ZWJr
aXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfc2libGluZword2Via2l0X2RvbV90cmVlX3dhbGtlcl9w
cmV2aW91c19ub2RlCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfbm9kZQord2Via2l0X2Rv
bV90cmVlX3dhbGtlcl9nZXRfcm9vdAord2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfd2hhdF90
b19zaG93Cit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9maWx0ZXIKK3dlYmtpdF9kb21fdHJl
ZV93YWxrZXJfZ2V0X2N1cnJlbnRfbm9kZQord2Via2l0X2RvbV90cmVlX3dhbGtlcl9zZXRfY3Vy
cmVudF9ub2RlCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9leHBhbmRfZW50aXR5X3JlZmVy
ZW5jZXMKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01UcmVlV2Fsa2VyQ2xhc3MK
K1dFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUgorV0VCS0lUX0RPTV9UUkVFX1dBTEtFUgorV0VC
S0lUX0RPTV9JU19UUkVFX1dBTEtFUgorV0VCS0lUX0RPTV9UUkVFX1dBTEtFUl9DTEFTUworV0VC
S0lUX0RPTV9JU19UUkVFX1dBTEtFUl9DTEFTUworV0VCS0lUX0RPTV9UUkVFX1dBTEtFUl9HRVRf
Q0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0
X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01VSUV2ZW50PC9G
SUxFPgorPFRJVExFPldlYktpdERPTVVJRXZlbnQ8L1RJVExFPgorV2ViS2l0RE9NVUlFdmVudAor
Cit3ZWJraXRfZG9tX3VpX2V2ZW50X2luaXRfdWlfZXZlbnQKK3dlYmtpdF9kb21fdWlfZXZlbnRf
Z2V0X3ZpZXcKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2RldGFpbAord2Via2l0X2RvbV91aV9l
dmVudF9nZXRfa2V5X2NvZGUKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2NoYXJfY29kZQord2Vi
a2l0X2RvbV91aV9ldmVudF9nZXRfbGF5ZXJfeAord2Via2l0X2RvbV91aV9ldmVudF9nZXRfbGF5
ZXJfeQord2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV94Cit3ZWJraXRfZG9tX3VpX2V2ZW50
X2dldF9wYWdlX3kKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01VSUV2ZW50Q2xh
c3MKK1dFQktJVF9ET01fVFlQRV9VSV9FVkVOVAorV0VCS0lUX0RPTV9VSV9FVkVOVAorV0VCS0lU
X0RPTV9JU19VSV9FVkVOVAorV0VCS0lUX0RPTV9VSV9FVkVOVF9DTEFTUworV0VCS0lUX0RPTV9J
U19VSV9FVkVOVF9DTEFTUworV0VCS0lUX0RPTV9VSV9FVkVOVF9HRVRfQ0xBU1MKKworPFNVQlNF
Q1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4K
KworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01XaGVlbEV2ZW50PC9GSUxFPgorPFRJVExFPldl
YktpdERPTVdoZWVsRXZlbnQ8L1RJVExFPgorV2ViS2l0RE9NV2hlZWxFdmVudAorCit3ZWJraXRf
ZG9tX3doZWVsX2V2ZW50X2luaXRfd2hlZWxfZXZlbnQKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRf
Z2V0X3doZWVsX2RlbHRhX3gKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRh
X3kKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhCisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RE9NV2hlZWxFdmVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfV0hF
RUxfRVZFTlQKK1dFQktJVF9ET01fV0hFRUxfRVZFTlQKK1dFQktJVF9ET01fSVNfV0hFRUxfRVZF
TlQKK1dFQktJVF9ET01fV0hFRUxfRVZFTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfV0hFRUxfRVZF
TlRfQ0xBU1MKK1dFQktJVF9ET01fV0hFRUxfRVZFTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9O
IFByaXZhdGU+Cit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisK
KzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NQmxvYjwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01C
bG9iPC9USVRMRT4KK1dlYktpdERPTUJsb2IKKword2Via2l0X2RvbV9ibG9iX2dldF9zaXplCisK
KzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NQmxvYkNsYXNzCitXRUJLSVRfRE9NX1RZ
UEVfQkxPQgorV0VCS0lUX0RPTV9CTE9CCitXRUJLSVRfRE9NX0lTX0JMT0IKK1dFQktJVF9ET01f
QkxPQl9DTEFTUworV0VCS0lUX0RPTV9JU19CTE9CX0NMQVNTCitXRUJLSVRfRE9NX0JMT0JfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2Jsb2JfZ2V0X3R5cGUK
KzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01GaWxlPC9GSUxFPgorPFRJ
VExFPldlYktpdERPTUZpbGU8L1RJVExFPgorV2ViS2l0RE9NRmlsZQorCit3ZWJraXRfZG9tX2Zp
bGVfZ2V0X25hbWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01GaWxlQ2xhc3MK
K1dFQktJVF9ET01fVFlQRV9GSUxFCitXRUJLSVRfRE9NX0ZJTEUKK1dFQktJVF9ET01fSVNfRklM
RQorV0VCS0lUX0RPTV9GSUxFX0NMQVNTCitXRUJLSVRfRE9NX0lTX0ZJTEVfQ0xBU1MKK1dFQktJ
VF9ET01fRklMRV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
ZmlsZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUZp
bGVMaXN0PC9GSUxFPgorPFRJVExFPldlYktpdERPTUZpbGVMaXN0PC9USVRMRT4KK1dlYktpdERP
TUZpbGVMaXN0CisKK3dlYmtpdF9kb21fZmlsZV9saXN0X2l0ZW0KK3dlYmtpdF9kb21fZmlsZV9s
aXN0X2dldF9sZW5ndGgKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01GaWxlTGlz
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfRklMRV9MSVNUCitXRUJLSVRfRE9NX0ZJTEVfTElTVAor
V0VCS0lUX0RPTV9JU19GSUxFX0xJU1QKK1dFQktJVF9ET01fRklMRV9MSVNUX0NMQVNTCitXRUJL
SVRfRE9NX0lTX0ZJTEVfTElTVF9DTEFTUworV0VCS0lUX0RPTV9GSUxFX0xJU1RfR0VUX0NMQVNT
CisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2ZpbGVfbGlzdF9nZXRfdHlwZQor
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxBbmNob3JFbGVtZW50PC9USVRMRT4KK1dlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9n
ZXRfY2hhcnNldAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9jaGFyc2V0Cit3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2Nvb3Jkcword2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X3NldF9jb29yZHMKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfaHJlZmxhbmcKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZmxh
bmcKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9o
dG1sX2FuY2hvcl9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfZ2V0X3JlbAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9yZWwKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmV2Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X3Jldgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9zaGFw
ZQord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9zaGFwZQord2Via2l0X2RvbV9o
dG1sX2FuY2hvcl9lbGVtZW50X2dldF90YXJnZXQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9zZXRfdGFyZ2V0Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3R5cGVf
YXR0cgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90eXBlX2F0dHIKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdGV4dAord2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X2dldF9ocmVmCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hy
ZWYKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcHJvdG9jb2wKK3dlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcHJvdG9jb2wKK3dlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfaG9zdAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9o
b3N0Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hvc3RuYW1lCit3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hvc3RuYW1lCit3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfZ2V0X3BvcnQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
cG9ydAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wYXRobmFtZQord2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wYXRobmFtZQord2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF9zZWFyY2gKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9z
ZXRfc2VhcmNoCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hhc2gKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaGFzaAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1M
X0FOQ0hPUl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQU5DSE9SX0VMRU1FTlQKK1dFQktJVF9E
T01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSFRNTF9BTkNIT1JfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50PC9GSUxFPgorPFRJVExF
PldlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxBcHBsZXRF
bGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtp
dF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9nZXRfYWx0Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2Fs
dAord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hcmNoaXZlCit3ZWJraXRfZG9t
X2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FyY2hpdmUKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRf
ZWxlbWVudF9nZXRfY29kZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2Rl
Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2NvZGVfYmFzZQord2Via2l0X2Rv
bV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlX2Jhc2UKK3dlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9nZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X2hlaWdodAord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9oc3BhY2UKK3dlYmtp
dF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfaHNwYWNlCit3ZWJraXRfZG9tX2h0bWxfYXBw
bGV0X2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRf
bmFtZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9vYmplY3QKK3dlYmtpdF9k
b21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfb2JqZWN0Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0
X2VsZW1lbnRfZ2V0X3ZzcGFjZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF92
c3BhY2UKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9k
b21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfd2lkdGgKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
CitXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9B
UFBMRVRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0FQUExFVF9FTEVNRU5UCitXRUJLSVRfRE9N
X0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxFTUVOVF9D
TEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9N
X0hUTUxfQVBQTEVUX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAor
Cit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9hbHQKK3dlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfc2V0X2FsdAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfY29v
cmRzCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9jb29yZHMKK3dlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfZ2V0X25vX2hyZWYKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfc2V0X25vX2hyZWYKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3NoYXBlCit3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9zaGFwZQord2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9nZXRfdGFyZ2V0Cit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF90
YXJnZXQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hyZWYKK3dlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hyZWYKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
Z2V0X3Byb3RvY29sCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ob3N0Cit3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ob3N0bmFtZQord2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9nZXRfcG9ydAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGF0
aG5hbWUKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3NlYXJjaAord2Via2l0X2Rv
bV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaGFzaAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdERPTUhUTUxBcmVhRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUkVBX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9B
UkVBX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSVNfSFRNTF9BUkVBX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1F
TlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0
RE9NSFRNTEJSRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQlJFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxCUkVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2JyX2VsZW1l
bnRfZ2V0X2NsZWFyCit3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9zZXRfY2xlYXIKKworPFNV
QlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MQlJFbGVtZW50Q2xhc3MKK1dFQktJVF9E
T01fVFlQRV9IVE1MX0JSX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CUl9FTEVNRU5UCitXRUJL
SVRfRE9NX0lTX0hUTUxfQlJfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0JSX0VMRU1FTlRfQ0xB
U1MKK1dFQktJVF9ET01fSVNfSFRNTF9CUl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxf
QlJfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
aHRtbF9icl9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+
V2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxCYXNl
RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQKKword2Via2l0X2RvbV9o
dG1sX2Jhc2VfZWxlbWVudF9nZXRfaHJlZgord2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9z
ZXRfaHJlZgord2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfdGFyZ2V0Cit3ZWJraXRf
ZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF90YXJnZXQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
CitXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfQkFT
RV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQkFTRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hU
TUxfQkFTRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQkFTRV9FTEVNRU5UX0NMQVNTCitXRUJL
SVRfRE9NX0lTX0hUTUxfQkFTRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfQkFTRV9F
TEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1s
X2Jhc2VfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldl
YktpdERPTUhUTUxCb2R5RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQm9keUVs
ZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50CisKK3dlYmtpdF9kb21faHRt
bF9ib2R5X2VsZW1lbnRfZ2V0X2FfbGluaword2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9z
ZXRfYV9saW5rCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9iYWNrZ3JvdW5kCit3
ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9iYWNrZ3JvdW5kCit3ZWJraXRfZG9tX2h0
bWxfYm9keV9lbGVtZW50X2dldF9iZ19jb2xvcgord2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVu
dF9zZXRfYmdfY29sb3IKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2xpbmsKK3dl
YmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2xpbmsKK3dlYmtpdF9kb21faHRtbF9ib2R5
X2VsZW1lbnRfZ2V0X3RleHQKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X3RleHQK
K3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X3ZfbGluaword2Via2l0X2RvbV9odG1s
X2JvZHlfZWxlbWVudF9zZXRfdl9saW5rCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RE9NSFRNTEJvZHlFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0JPRFlfRUxFTUVO
VAorV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlf
RUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9J
U19IVE1MX0JPRFlfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVF9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9ib2R5X2Vs
ZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVu
dDwvVElUTEU+CitXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxf
YnV0dG9uX2VsZW1lbnRfZ2V0X2F1dG9mb2N1cword2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X3NldF9hdXRvZm9jdXMKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZGlz
YWJsZWQKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZGlzYWJsZWQKK3dlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybQord2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X2dldF9idXR0b25fdHlwZQord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X3NldF9idXR0b25fdHlwZQord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9uYW1l
Cit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21faHRt
bF9idXR0b25fZWxlbWVudF9nZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9zZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfd2lsbF92YWxp
ZGF0ZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0JVVFRPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfQlVUVE9OX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVAorV0VC
S0lUX0RPTV9IVE1MX0JVVFRPTl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQlVU
VE9OX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9CVVRUT05fRUxFTUVOVF9HRVRfQ0xB
U1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxD
YW52YXNFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxDYW52YXNFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9jYW52
YXNfZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRf
d2lkdGgKK3dlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfaGVpZ2h0Cit3ZWJraXRf
ZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X2hlaWdodAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1M
X0NBTlZBU19FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlQKK1dFQktJVF9E
T01fSVNfSFRNTF9DQU5WQVNfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0NBTlZBU19FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQ0FOVkFTX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSFRNTF9DQU5WQVNfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxDb2xsZWN0aW9uPC9GSUxFPgorPFRJVExFPldl
YktpdERPTUhUTUxDb2xsZWN0aW9uPC9USVRMRT4KK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisK
K3dlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2l0ZW0KK3dlYmtpdF9kb21faHRtbF9jb2xsZWN0
aW9uX25hbWVkX2l0ZW0KK3dlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MQ29sbGVjdGlvbkNsYXNzCitXRUJL
SVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OCitXRUJLSVRfRE9NX0hUTUxfQ09MTEVDVElPTgor
V0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04KK1dFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9O
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTl9DTEFTUworV0VCS0lUX0RPTV9I
VE1MX0NPTExFQ1RJT05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRf
ZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxG
SUxFPldlYktpdERPTUhUTUxETGlzdEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRN
TERMaXN0RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRExpc3RFbGVtZW50CisKK3dlYmtp
dF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdAord2Via2l0X2RvbV9odG1sX2Rf
bGlzdF9lbGVtZW50X3NldF9jb21wYWN0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RE9NSFRNTERMaXN0RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9EX0xJU1RfRUxF
TUVOVAorV0VCS0lUX0RPTV9IVE1MX0RfTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxf
RF9MSVNUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9EX0xJU1RfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9JU19IVE1MX0RfTElTVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRF9M
SVNUX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9t
X2h0bWxfZF9saXN0X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRE
T01IVE1MRGlyZWN0b3J5RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxl
bWVudAorCit3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X2NvbXBhY3QKK3dl
YmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9zZXRfY29tcGFjdAorCis8U1VCU0VDVElP
TiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Q2xhc3MKK1dFQktJVF9E
T01fVFlQRV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRElSRUNUT1JZ
X0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVAorV0VCS0lUX0RP
TV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfRElSRUNU
T1JZX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9ESVJFQ1RPUllfRUxFTUVOVF9HRVRf
Q0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9kaXJlY3Rvcnlf
ZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUhUTUxEaXZFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxEaXZFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxEaXZFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9kaXZfZWxl
bWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9zZXRfYWxpZ24KKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRGl2RWxlbWVudENsYXNzCitXRUJL
SVRfRE9NX1RZUEVfSFRNTF9ESVZfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0RJVl9FTEVNRU5U
CitXRUJLSVRfRE9NX0lTX0hUTUxfRElWX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9ESVZfRUxF
TUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0RJVl9FTEVNRU5UX0NMQVNTCitXRUJLSVRf
RE9NX0hUTUxfRElWX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRET01IVE1MRG9jdW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
SFRNTERvY3VtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxEb2N1bWVudAorCit3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfY2xvc2UKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jbGVhcgord2Vi
a2l0X2RvbV9odG1sX2RvY3VtZW50X2NhcHR1cmVfZXZlbnRzCit3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfcmVsZWFzZV9ldmVudHMKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfd2lkdGgK
K3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfZ2V0X2Rpcgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9kaXIKK3dlYmtpdF9k
b21faHRtbF9kb2N1bWVudF9nZXRfYmdfY29sb3IKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9z
ZXRfYmdfY29sb3IKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZmdfY29sb3IKK3dlYmtp
dF9kb21faHRtbF9kb2N1bWVudF9zZXRfZmdfY29sb3IKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVu
dF9nZXRfYWxpbmtfY29sb3IKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfYWxpbmtfY29s
b3IKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfbGlua19jb2xvcgord2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X3NldF9saW5rX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0
X3ZsaW5rX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X3ZsaW5rX2NvbG9yCit3
ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2Rlc2lnbl9tb2RlCit3ZWJraXRfZG9tX2h0bWxf
ZG9jdW1lbnRfZ2V0X2Rlc2lnbl9tb2RlCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2Nv
bXBhdF9tb2RlCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3NjcmlwdHMKK3dlYmtpdF9k
b21faHRtbF9kb2N1bWVudF9nZXRfZW1iZWRzCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0
X3BsdWdpbnMKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRG9jdW1lbnRD
bGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfRE9DVU1FTlQKK1dFQktJVF9ET01fSFRNTF9ET0NV
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UCitXRUJLSVRfRE9NX0hUTUxfRE9DVU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVF9DTEFTUworV0VCS0lUX0RPTV9I
VE1MX0RPQ1VNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2Rv
bV9odG1sX2RvY3VtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+
V2ViS2l0RE9NSFRNTEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEVsZW1lbnQ8
L1RJVExFPgorV2ViS2l0RE9NSFRNTEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
Y2xpY2sKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90aXRsZQord2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfc2V0X3RpdGxlCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfbGFuZword2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2xhbmcKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dl
dF9kaXIKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9kaXIKK3dlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF90YWJfaW5kZXgKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90YWJfaW5k
ZXgKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9hY2Nlc3Nfa2V5Cit3ZWJraXRfZG9tX2h0
bWxfZWxlbWVudF9zZXRfYWNjZXNzX2tleQord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lu
bmVyX3RleHQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9pbm5lcl90ZXh0Cit3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9nZXRfb3V0ZXJfdGV4dAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
c2V0X291dGVyX3RleHQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9jb250ZW50X2VkaXRh
YmxlCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfY29udGVudF9lZGl0YWJsZQord2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lzX2NvbnRlbnRfZWRpdGFibGUKK3dlYmtpdF9kb21faHRt
bF9lbGVtZW50X3NldF9pbm5lcl9odG1sCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfb3V0
ZXJfaHRtbAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX2h0bWwKK3dlYmtpdF9k
b21faHRtbF9lbGVtZW50X3NldF9vdXRlcl9odG1sCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9n
ZXRfY2hpbGRyZW4KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRWxlbWVu
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRUxF
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1M
X0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0
bWxfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEVtYmVkRWxl
bWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50CisKK3dlYmtpdF9kb21faHRt
bF9lbWJlZF9lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
c2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfaGVpZ2h0Cit3ZWJr
aXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfZW1i
ZWRfZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X25h
bWUKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9zcmMKK3dlYmtpdF9kb21faHRt
bF9lbWJlZF9lbGVtZW50X3NldF9zcmMKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dl
dF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF90eXBlX2F0dHIK
K3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1s
X2VtYmVkX2VsZW1lbnRfc2V0X3dpZHRoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RE9NSFRNTEVtYmVkRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTUJFRF9FTEVN
RU5UCitXRUJLSVRfRE9NX0hUTUxfRU1CRURfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0VN
QkVEX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9FTUJFRF9FTEVNRU5UX0NMQVNTCitXRUJLSVRf
RE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0VNQkVEX0VM
RU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldl
YktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEZp
ZWxkU2V0RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50CisKK3dl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZm9ybQorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRklFTERfU0VUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9GSUVMRF9TRVRfRUxF
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfRklFTERfU0VUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9GSUVMRF9TRVRf
RUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UX0dFVF9DTEFT
UworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVt
ZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRN
TEZvbnRFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxGb250RWxlbWVudDwvVElU
TEU+CitXZWJLaXRET01IVE1MRm9udEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2ZvbnRfZWxl
bWVudF9nZXRfY29sb3IKK3dlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X2NvbG9yCit3
ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9mYWNlCit3ZWJraXRfZG9tX2h0bWxfZm9u
dF9lbGVtZW50X3NldF9mYWNlCit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9zaXpl
Cit3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9zaXplCisKKzxTVUJTRUNUSU9OIFN0
YW5kYXJkPgorV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9I
VE1MX0ZPTlRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxFTUVOVAorV0VCS0lUX0RP
TV9JU19IVE1MX0ZPTlRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9JU19IVE1MX0ZPTlRfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1M
X0ZPTlRfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9k
b21faHRtbF9mb250X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfZm9ybV9lbGVtZW50X3N1Ym1pdAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVu
dF9yZXNldAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYWNjZXB0X2NoYXJzZXQK
K3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2FjY2VwdF9jaGFyc2V0Cit3ZWJraXRf
ZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hY3Rpb24KK3dlYmtpdF9kb21faHRtbF9mb3JtX2Vs
ZW1lbnRfc2V0X2FjdGlvbgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jdHlw
ZQord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jdHlwZQord2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jb2RpbmcKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1l
bnRfc2V0X2VuY29kaW5nCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9tZXRob2QK
K3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X21ldGhvZAord2Via2l0X2RvbV9odG1s
X2Zvcm1fZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRf
bmFtZQord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfdGFyZ2V0Cit3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X3NldF90YXJnZXQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1l
bnRfZ2V0X2VsZW1lbnRzCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9sZW5ndGgK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRDbGFzcwor
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRk9STV9F
TEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
Rk9STV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UX0NMQVNT
CitXRUJLSVRfRE9NX0hUTUxfRk9STV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQ
cml2YXRlPgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQ8L0ZJTEU+Cis8
VElUTEU+V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRnJh
bWVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9mcmFtZV9ib3Jk
ZXIKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9mcmFtZV9ib3JkZXIKK3dlYmtp
dF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2MKK3dlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50X3NldF9sb25nX2Rlc2MKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X2dldF9tYXJnaW5faGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFy
Z2luX2hlaWdodAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0
aAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl93aWR0aAord2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbm9fcmVz
aXplCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbm9fcmVzaXplCit3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xsaW5nCit3ZWJraXRfZG9tX2h0bWxfZnJh
bWVfZWxlbWVudF9zZXRfc2Nyb2xsaW5nCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9n
ZXRfc3JjCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfc3JjCit3ZWJraXRfZG9t
X2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudAord2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfd2luZG93Cit3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9oZWln
aHQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50Q2xh
c3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9G
UkFNRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVAorV0VCS0lUX0RP
TV9IVE1MX0ZSQU1FX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVN
RU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxl
bWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50PC9USVRMRT4K
K1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2ZyYW1lX3Nl
dF9lbGVtZW50X2dldF9jb2xzCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0
X2NvbHMKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfcm93cword2Via2l0
X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9yb3dzCisKKzxTVUJTRUNUSU9OIFN0YW5k
YXJkPgorV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVf
SFRNTF9GUkFNRV9TRVRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5U
CitXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9G
UkFNRV9TRVRfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX1NFVF9FTEVN
RU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlRfR0VUX0NMQVNTCisK
KzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRf
Z2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MSFJF
bGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxIUkVsZW1lbnQ8L1RJVExFPgorV2Vi
S2l0RE9NSFRNTEhSRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfYWxp
Z24KK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9hbGlnbgord2Via2l0X2RvbV9odG1s
X2hyX2VsZW1lbnRfZ2V0X25vX3NoYWRlCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRf
bm9fc2hhZGUKK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF9zaXplCit3ZWJraXRfZG9t
X2h0bWxfaHJfZWxlbWVudF9zZXRfc2l6ZQord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0
X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfd2lkdGgKKworPFNVQlNFQ1RJ
T04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MSFJFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQ
RV9IVE1MX0hSX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9IUl9FTEVNRU5UCitXRUJLSVRfRE9N
X0lTX0hUTUxfSFJfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlRfQ0xBU1MKK1dF
QktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfSFJfRUxF
TUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9o
cl9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0
RE9NSFRNTEhlYWRFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxIZWFkRWxlbWVu
dDwvVElUTEU+CitXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2hl
YWRfZWxlbWVudF9nZXRfcHJvZmlsZQord2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9zZXRf
cHJvZmlsZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxIZWFkRWxlbWVu
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQKK1dFQktJVF9ET01fSFRN
TF9IRUFEX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQKK1dFQktJVF9E
T01fSFRNTF9IRUFEX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9IRUFEX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dldF90eXBlCis8
L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50
PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudDwvVElUTEU+CitXZWJL
aXRET01IVE1MSGVhZGluZ0VsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVu
dF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfc2V0X2FsaWduCisK
KzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50Q2xhc3MK
K1dFQktJVF9ET01fVFlQRV9IVE1MX0hFQURJTkdfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0hF
QURJTkdfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0hFQURJTkdfRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX0hFQURJTkdfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0hFQURJ
TkdfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0hFQURJTkdfRUxFTUVOVF9HRVRfQ0xB
U1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1l
bnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1M
SHRtbEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50PC9USVRM
RT4KK1dlYktpdERPTUhUTUxIdG1sRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVt
ZW50X2dldF92ZXJzaW9uCit3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3NldF92ZXJzaW9u
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Q2xhc3MK
K1dFQktJVF9ET01fVFlQRV9IVE1MX0hUTUxfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0hUTUxf
RUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0hUTUxfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1M
X0hUTUxfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0hUTUxfRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9IVE1MX0hUTUxfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04g
UHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElP
Tj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudDwvRklMRT4K
KzxUSVRMRT5XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1M
SUZyYW1lRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2FsaWdu
Cit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2FsaWduCit3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcgord2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9mcmFtZV9ib3JkZXIKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVu
dF9nZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2hlaWdodAor
d2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2MKK3dlYmtpdF9kb21f
aHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19kZXNjCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1l
X2VsZW1lbnRfZ2V0X21hcmdpbl9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVu
dF9zZXRfbWFyZ2luX2hlaWdodAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9t
YXJnaW5fd2lkdGgKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX3dp
ZHRoCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21f
aHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVt
ZW50X2dldF9zY3JvbGxpbmcKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc2Ny
b2xsaW5nCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NyYword2Via2l0X2Rv
bV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmMKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfd2lkdGgK
K3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudAord2Vi
a2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdworCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Q2xhc3MKK1dFQktJVF9E
T01fVFlQRV9IVE1MX0lGUkFNRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1F
TlQKK1dFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0lG
UkFNRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlRfQ0xB
U1MKK1dFQktJVF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfdHlwZQorPC9T
RUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQ8L0ZJ
TEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01I
VE1MSW1hZ2VFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYW1l
Cit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbmFtZQord2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9z
ZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbHQKK3dlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbHQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X2dldF9ib3JkZXIKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9ib3JkZXIK
K3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9oZWlnaHQKK3dlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X3NldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X2dldF9oc3BhY2UKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9oc3BhY2UKK3dl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9pc19tYXAKK3dlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF9pc19tYXAKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF9sb25nX2Rlc2MKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9sb25nX2Rlc2MK
K3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9zcmMKK3dlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF9zcmMKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF91
c2VfbWFwCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfdXNlX21hcAord2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3ZzcGFjZQord2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfc2V0X3ZzcGFjZQord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3dp
ZHRoCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfd2lkdGgKK3dlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X2dldF9jb21wbGV0ZQord2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X2xvd3NyYword2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2xvd3Ny
Yword2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVyYWxfaGVpZ2h0Cit3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmF0dXJhbF93aWR0aAord2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3gKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF95CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudENs
YXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTUFHRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
SU1BR0VfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQKK1dFQktJVF9E
T01fSFRNTF9JTUFHRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxF
TUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0lNQUdFX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxT
VUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfdHlw
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudDwvVElUTEU+CitXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
bGVjdAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FjY2VwdAord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FjY2VwdAord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2FsdAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsdAord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9mb2N1cword2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2F1dG9mb2N1cword2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2RlZmF1bHRfY2hlY2tlZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X2NoZWNrZWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9jaGVja2VkCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9kaXNhYmxlZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
Z2V0X2Zvcm0KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9maWxlcword2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2ZpbGVzCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaGVp
Z2h0Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5kZXRlcm1pbmF0ZQord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2luZGV0ZXJtaW5hdGUKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9tYXhfbGVuZ3RoCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfbWF4X2xlbmd0aAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X211bHRpcGxlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbXVsdGlwbGUKK3dl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3Jl
YWRfb25seQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3NpemUKK3dlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9zaXplCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfc3JjCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc3JjCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5wdXRfdHlwZQord2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2lucHV0X3R5cGUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9kZWZhdWx0X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
ZGVmYXVsdF92YWx1ZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVlCit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZQor
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9zZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF91c2VfbWFwCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfdXNlX21hcAord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NhcHR1cmVfdHlwZQord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NhcHR1cmUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0lOUFVU
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9JTlBVVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hU
TUxfSU5QVVRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1FTlRfQ0xBU1MKK1dF
QktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfSU5Q
VVRfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NSFRNTExJRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MTElF
bGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxMSUVsZW1lbnQKKword2Via2l0X2RvbV9odG1s
X2xpX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfc2V0
X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3ZhbHVlCit3ZWJraXRf
ZG9tX2h0bWxfbGlfZWxlbWVudF9zZXRfdmFsdWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitX
ZWJLaXRET01IVE1MTElFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0xJX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9MSV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfTElfRUxF
TUVOVAorV0VCS0lUX0RPTV9IVE1MX0xJX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRN
TF9MSV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfTElfRUxFTUVOVF9HRVRfQ0xBU1MK
KworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF90
eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTExhYmVsRWxl
bWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50PC9USVRMRT4KK1dl
YktpdERPTUhUTUxMYWJlbEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRf
Z2V0X2Zvcm0KK3dlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dldF9odG1sX2Zvcgord2Vi
a2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfc2V0X2h0bWxfZm9yCisKKzxTVUJTRUNUSU9OIFN0
YW5kYXJkPgorV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVf
SFRNTF9MQUJFTF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVOVAorV0VCS0lU
X0RPTV9JU19IVE1MX0xBQkVMX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9MQUJFTF9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfTEFCRUxfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RP
TV9IVE1MX0xBQkVMX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VD
VElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50PC9GSUxFPgorPFRJVExFPldl
YktpdERPTUhUTUxMZWdlbmRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxMZWdlbmRFbGVt
ZW50CisKK3dlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfZm9ybQord2Via2l0X2Rv
bV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2xlZ2VuZF9l
bGVtZW50X3NldF9hbGlnbgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxM
ZWdlbmRFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVNRU5UCitX
RUJLSVRfRE9NX0hUTUxfTEVHRU5EX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9MRUdFTkRf
RUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9N
X0lTX0hUTUxfTEVHRU5EX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxF
TUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9s
ZWdlbmRfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldl
YktpdERPTUhUTUxMaW5rRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisKK3dlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfZ2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X3NldF9kaXNhYmxlZAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfY2hhcnNldAor
d2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfY2hhcnNldAord2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9nZXRfaHJlZgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRf
aHJlZgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfaHJlZmxhbmcKK3dlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2hyZWZsYW5nCit3ZWJraXRfZG9tX2h0bWxfbGlua19l
bGVtZW50X2dldF9tZWRpYQord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfbWVkaWEK
K3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3JlbAord2Via2l0X2RvbV9odG1sX2xp
bmtfZWxlbWVudF9zZXRfcmVsCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZXYK
K3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3Jldgord2Via2l0X2RvbV9odG1sX2xp
bmtfZWxlbWVudF9nZXRfdGFyZ2V0Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF90
YXJnZXQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cgord2Via2l0
X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X2dldF9zaGVldAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhU
TUxMaW5rRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSU5LX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9MSU5LX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9MSU5LX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRN
TF9MSU5LX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9MSU5LX0VMRU1FTlRfR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTE1h
cEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQ8L1RJVExFPgor
V2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dl
dF9hcmVhcword2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9t
X2h0bWxfbWFwX2VsZW1lbnRfc2V0X25hbWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJL
aXRET01IVE1MTWFwRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVBfRUxFTUVO
VAorV0VCS0lUX0RPTV9IVE1MX01BUF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfTUFQX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9NQVBfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19I
VE1MX01BUF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlRfR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRf
Z2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfbWFy
cXVlZV9lbGVtZW50X3N0YXJ0Cit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3N0b3AK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRDbGFz
cworV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUFSUVVFRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
TUFSUVVFRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UCitXRUJL
SVRfRE9NX0hUTUxfTUFSUVVFRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfTUFS
UVVFRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfTUFSUVVFRV9FTEVNRU5UX0dFVF9D
TEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxl
bWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhU
TUxNZW51RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MTWVudUVsZW1lbnQ8L1RJ
VExFPgorV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9tZW51X2Vs
ZW1lbnRfZ2V0X2NvbXBhY3QKK3dlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfc2V0X2NvbXBh
Y3QKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MTWVudUVsZW1lbnRDbGFz
cworV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVOVV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTUVO
VV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfTUVOVV9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfTUVOVV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfTUVOVV9FTEVNRU5UX0NM
QVNTCitXRUJLSVRfRE9NX0hUTUxfTUVOVV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNU
SU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxNZXRhRWxlbWVudDwvRklMRT4K
KzxUSVRMRT5XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2NvbnRlbnQKK3dl
YmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X2NvbnRlbnQKK3dlYmtpdF9kb21faHRtbF9t
ZXRhX2VsZW1lbnRfZ2V0X2h0dHBfZXF1aXYKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRf
c2V0X2h0dHBfZXF1aXYKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X25hbWUKK3dl
YmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9tZXRh
X2VsZW1lbnRfZ2V0X3NjaGVtZQord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfc2No
ZW1lCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50Q2xh
c3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX01FVEFfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX01F
VEFfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX01FVEFfRUxFTUVOVAorV0VCS0lUX0RPTV9I
VE1MX01FVEFfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX01FVEFfRUxFTUVOVF9D
TEFTUworV0VCS0lUX0RPTV9IVE1MX01FVEFfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MTW9kRWxlbWVudDwvRklMRT4K
KzxUSVRMRT5XZWJLaXRET01IVE1MTW9kRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MTW9k
RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2NpdGUKK3dlYmtpdF9k
b21faHRtbF9tb2RfZWxlbWVudF9zZXRfY2l0ZQord2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50
X2dldF9kYXRlX3RpbWUKK3dlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfZGF0ZV90aW1l
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRDbGFzcwor
V0VCS0lUX0RPTV9UWVBFX0hUTUxfTU9EX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9NT0RfRUxF
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX01PRF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTU9E
X0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9NT0RfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX01PRF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRl
Pgord2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudDwvRklMRT4KKzxUSVRMRT5X
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxPTGlzdEVsZW1l
bnQKKword2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9jb21wYWN0Cit3ZWJraXRf
ZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3QKK3dlYmtpdF9kb21faHRtbF9vX2xp
c3RfZWxlbWVudF9nZXRfc3RhcnQKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRf
c3RhcnQKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfdHlwZV9hdHRyCit3ZWJr
aXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cgorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBF
X0hUTUxfT19MSVNUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9PX0xJU1RfRUxFTUVOVAorV0VC
S0lUX0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9PX0xJU1RfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX09fTElTVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+
CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQ8L0ZJTEU+Cis8
VElUTEU+V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9mb3JtCit3
ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGUKK3dlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9zZXRfY29kZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF9hbGlnbgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9hbGlnbgord2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9hcmNoaXZlCit3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfc2V0X2FyY2hpdmUKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9n
ZXRfYm9yZGVyCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2JvcmRlcgord2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlX2Jhc2UKK3dlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9zZXRfY29kZV9iYXNlCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfZ2V0X2NvZGVfdHlwZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9j
b2RlX3R5cGUKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZGF0YQord2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9kYXRhCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfZ2V0X2RlY2xhcmUKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRf
ZGVjbGFyZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9oZWlnaHQKK3dlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfZ2V0X2hzcGFjZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3Nl
dF9oc3BhY2UKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfbmFtZQord2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfZ2V0X3N0YW5kYnkKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRf
c3RhbmRieQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF90eXBlX2F0dHIKK3dl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3VzZV9tYXAKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9zZXRfdXNlX21hcAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92c3Bh
Y2UKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdnNwYWNlCit3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfc2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvbnRl
bnRfZG9jdW1lbnQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9PQkpFQ1RfRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX09CSkVDVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9PQkpFQ1RfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19I
VE1MX09CSkVDVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfT0JKRUNUX0VMRU1FTlRf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRE
T01IVE1MT3B0R3JvdXBFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxPcHRHcm91
cEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxf
b3B0X2dyb3VwX2VsZW1lbnRfc2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3Vw
X2VsZW1lbnRfZ2V0X2xhYmVsCit3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0
X2xhYmVsCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxl
bWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX09QVF9HUk9VUF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfT1BUX0dST1VQ
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9JU19IVE1MX09QVF9HUk9VUF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfT1BU
X0dST1VQX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRf
ZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVu
dAorCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2Rpc2FibGVkCit3ZWJraXRf
ZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfb3B0
aW9uX2VsZW1lbnRfZ2V0X2Zvcm0KK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRf
bGFiZWwKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfbGFiZWwKK3dlYmtpdF9k
b21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZGVmYXVsdF9zZWxlY3RlZAord2Via2l0X2RvbV9o
dG1sX29wdGlvbl9lbGVtZW50X3NldF9kZWZhdWx0X3NlbGVjdGVkCit3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uX2VsZW1lbnRfZ2V0X3NlbGVjdGVkCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1l
bnRfc2V0X3NlbGVjdGVkCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3ZhbHVl
Cit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X3ZhbHVlCit3ZWJraXRfZG9tX2h0
bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3RleHQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVu
dF9nZXRfaW5kZXgKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MT3B0aW9u
RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05fRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX09QVElPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9PUFRJT05fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19I
VE1MX09QVElPTl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfT1BUSU9OX0VMRU1FTlRf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb248L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uPC9USVRMRT4KK1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbgorCit3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX25hbWVkX2l0ZW0KK3dlYmtpdF9kb21f
aHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X3NlbGVjdGVkX2luZGV4Cit3ZWJraXRfZG9tX2h0
bWxfb3B0aW9uc19jb2xsZWN0aW9uX3NldF9zZWxlY3RlZF9pbmRleAord2Via2l0X2RvbV9odG1s
X29wdGlvbnNfY29sbGVjdGlvbl9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
V2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1M
X09QVElPTlNfQ09MTEVDVElPTgorV0VCS0lUX0RPTV9IVE1MX09QVElPTlNfQ09MTEVDVElPTgor
V0VCS0lUX0RPTV9JU19IVE1MX09QVElPTlNfQ09MTEVDVElPTgorV0VCS0lUX0RPTV9IVE1MX09Q
VElPTlNfQ09MTEVDVElPTl9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTlNfQ09MTEVD
VElPTl9DTEFTUworV0VCS0lUX0RPTV9IVE1MX09QVElPTlNfQ09MTEVDVElPTl9HRVRfQ0xBU1MK
KworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rp
b25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1M
UGFyYWdyYXBoRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxl
bWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudAorCit3ZWJraXRfZG9t
X2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfcGFyYWdy
YXBoX2VsZW1lbnRfc2V0X2FsaWduCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9N
SFRNTFBhcmFncmFwaEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQUdSQVBI
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVAorV0VCS0lUX0RPTV9J
U19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfUEFSQUdSQVBIX0VMRU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQ
cml2YXRlPgord2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudDwvRklM
RT4KKzxUSVRMRT5XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhU
TUxQYXJhbUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X25hbWUK
K3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxf
cGFyYW1fZWxlbWVudF9nZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVu
dF9zZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfdmFsdWUK
K3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF92YWx1ZQord2Via2l0X2RvbV9odG1s
X3BhcmFtX2VsZW1lbnRfZ2V0X3ZhbHVlX3R5cGUKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVt
ZW50X3NldF92YWx1ZV90eXBlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRN
TFBhcmFtRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9QQVJBTV9FTEVNRU5UCitX
RUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lT
X0hUTUxfUEFSQU1fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1FTlRf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfcGFyYW1f
ZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUhUTUxQcmVFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxQcmVFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxQcmVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9wcmVfZWxl
bWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9zZXRfd2lkdGgKK3dl
YmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9nZXRfd3JhcAord2Via2l0X2RvbV9odG1sX3ByZV9l
bGVtZW50X3NldF93cmFwCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFBy
ZUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfUFJFX0VMRU1FTlQKK1dFQktJVF9E
T01fSFRNTF9QUkVfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX1BSRV9FTEVNRU5UCitXRUJL
SVRfRE9NX0hUTUxfUFJFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9QUkVfRUxF
TUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1BSRV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VC
U0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF90eXBlCis8
L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudDwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50PC9USVRMRT4KK1dlYktpdERP
TUhUTUxRdW90ZUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfZ2V0X2Np
dGUKK3dlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X3NldF9jaXRlCisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9RVU9URV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfUVVPVEVfRUxFTUVOVAorV0VC
S0lUX0RPTV9JU19IVE1MX1FVT1RFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9RVU9URV9FTEVN
RU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfUVVPVEVfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9IVE1MX1FVT1RFX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+
Cit3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50PC9GSUxFPgorPFRJVExF
PldlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfdGV4dAord2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF90ZXh0Cit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0
X2VsZW1lbnRfZ2V0X2h0bWxfZm9yCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0
X2h0bWxfZm9yCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2V2ZW50Cit3ZWJr
aXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2V2ZW50Cit3ZWJraXRfZG9tX2h0bWxfc2Ny
aXB0X2VsZW1lbnRfZ2V0X2NoYXJzZXQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9n
ZXRfZGVmZXIKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfZGVmZXIKK3dlYmtp
dF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfc3JjCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0
X2VsZW1lbnRfc2V0X3NyYword2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90eXBl
X2F0dHIKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdHlwZV9hdHRyCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRDbGFzcworV0VC
S0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9TQ1JJUFRf
RUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfU0NSSVBUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVO
VF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1NDUklQVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VC
U0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQ8L1RJVExFPgorV2Vi
S2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2l0ZW0KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9uYW1lZF9pdGVtCit3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfYWRkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfcmVtb3ZlCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2F1dG9mb2N1cwor
d2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9hdXRvZm9jdXMKK3dlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9zZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRf
Zm9ybQord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9tdWx0aXBsZQord2Via2l0
X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9tdWx0aXBsZQord2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0
X25hbWUKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2l6ZQord2Via2l0X2Rv
bV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9zaXplCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X3NlbGVjdF90eXBlCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0
X29wdGlvbnMKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbGVuZ3RoCit3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2xlbmd0aAord2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X2dldF9zZWxlY3RlZF9pbmRleAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X3NldF9zZWxlY3RlZF9pbmRleAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF92YWx1ZQord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF92YWx1ZQord2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlCisKKzxTVUJTRUNU
SU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRDbGFzcworV0VCS0lUX0RP
TV9UWVBFX0hUTUxfU0VMRUNUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVO
VAorV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfU0VM
RUNUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9IVE1MX1NFTEVDVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudDwvRklM
RT4KKzxUSVRMRT5XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhU
TUxTdHlsZUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X2Rpc2Fi
bGVkCit3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfZGlzYWJsZWQKK3dlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9tZWRpYQord2Via2l0X2RvbV9odG1sX3N0eWxlX2Vs
ZW1lbnRfc2V0X21lZGlhCit3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfdHlwZV9h
dHRyCit3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfdHlwZV9hdHRyCit3ZWJraXRf
ZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfc2hlZXQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
CitXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1NU
WUxFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lT
X0hUTUxfU1RZTEVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1NUWUxFX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxf
U1RZTEVfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgor
PEZJTEU+V2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2Vi
S2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9n
ZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfc2V0X2FsaWdu
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UCitXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfQ0FQVElPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UX0NMQVNTCitX
RUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxUYWJsZUNl
bGxFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NlbGxfaW5kZXgKK3dlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X3NldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYXhpcwor
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYXhpcword2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYmdfY29sb3IKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfc2V0X2JnX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9l
bGVtZW50X2dldF9jaAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY2gK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NoX29mZgord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY2hfb2ZmCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X2dldF9jb2xfc3Bhbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfY29sX3NwYW4KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
Z2V0X3Jvd19zcGFuCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9yb3df
c3Bhbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfaGVhZGVycword2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfaGVhZGVycword2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3NldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1l
bnRfZ2V0X25vX3dyYXAKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X25v
X3dyYXAKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3ZfYWxpZ24KK3dl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3ZfYWxpZ24KK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3NldF93aWR0aAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfYWJicgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYWJicgor
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfc2NvcGUKK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3Njb3BlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hU
TUxfVEFCTEVfQ0VMTF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5U
CitXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
VEFCTEVfQ0VMTF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9F
TEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UX0dFVF9DTEFT
UworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxl
bWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhU
TUxUYWJsZUNvbEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50CisKK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9j
b2xfZWxlbWVudF9zZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9n
ZXRfY2gKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2gKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfY2hfb2ZmCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY29sX2VsZW1lbnRfc2V0X2NoX29mZgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVt
ZW50X2dldF9zcGFuCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3NwYW4K
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfdl9hbGlnbgord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF92X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY29sX2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfc2V0X3dpZHRoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFRhYmxl
Q29sRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfQ09MX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVF9DTEFTUwor
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hU
TUxfVEFCTEVfQ09MX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MVGFibGVFbGVtZW50PC9GSUxFPgorPFRJVExF
PldlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudAorCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfdF9oZWFkCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfdF9oZWFkCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9jcmVhdGVfdF9mb290Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVu
dF9kZWxldGVfdF9mb290Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfY2Fw
dGlvbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX2NhcHRpb24KK3dlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2luc2VydF9yb3cKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X2RlbGV0ZV9yb3cKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9j
YXB0aW9uCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2FwdGlvbgord2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3RfaGVhZAord2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfc2V0X3RfaGVhZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Rf
Zm9vdAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3RfZm9vdAord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X2dldF90X2JvZGllcword2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2FsaWdu
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfYWxpZ24KK3dlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF9iZ19jb2xvcgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfc2V0X2JnX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfYm9yZGVy
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfYm9yZGVyCit3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9nZXRfY2VsbF9wYWRkaW5nCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9zZXRfY2VsbF9wYWRkaW5nCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9n
ZXRfY2VsbF9zcGFjaW5nCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2VsbF9z
cGFjaW5nCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcnVsZXMKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X3NldF9ydWxlcword2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X3N1bW1hcnkKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9zdW1t
YXJ5Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9lbGVtZW50X3NldF93aWR0aAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdERPTUhUTUxUYWJsZUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVf
RUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9UQUJM
RV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklM
RT5XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAor
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfaW5zZXJ0X2NlbGwKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9kZWxldGVfY2VsbAord2Via2l0X2RvbV9odG1sX3Rh
YmxlX3Jvd19lbGVtZW50X2dldF9yb3dfaW5kZXgKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3df
ZWxlbWVudF9nZXRfc2VjdGlvbl9yb3dfaW5kZXgKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3df
ZWxlbWVudF9nZXRfY2VsbHMKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRf
YWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfYWxpZ24KK3dlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfYmdfY29sb3IKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9yb3dfZWxlbWVudF9zZXRfYmdfY29sb3IKK3dlYmtpdF9kb21faHRtbF90YWJsZV9y
b3dfZWxlbWVudF9nZXRfY2gKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRf
Y2gKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2hfb2ZmCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2NoX29mZgord2Via2l0X2RvbV9odG1sX3Rh
YmxlX3Jvd19lbGVtZW50X2dldF92X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2Vs
ZW1lbnRfc2V0X3ZfYWxpZ24KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1M
VGFibGVSb3dFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1JPV19FTEVN
RU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9ST1dfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UX0NM
QVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSFRNTF9UQUJMRV9ST1dfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0
ZT4KK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PC9G
SUxFPgorPFRJVExFPldlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PC9USVRMRT4KK1dl
YktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF90YWJsZV9z
ZWN0aW9uX2VsZW1lbnRfaW5zZXJ0X3Jvdword2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25f
ZWxlbWVudF9kZWxldGVfcm93Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50
X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfYWxp
Z24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2NoCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9jaAord2Via2l0X2RvbV9odG1sX3Rh
YmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfY2hfb2ZmCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2Vj
dGlvbl9lbGVtZW50X3NldF9jaF9vZmYKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2Vs
ZW1lbnRfZ2V0X3ZfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
c2V0X3ZfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3Jv
d3MKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxl
bWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9U
QUJMRV9TRUNUSU9OX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X3NlbGVjdAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NldF9zZWxlY3Rpb25fcmFuZ2UKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfYXV0b2ZvY3VzCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9m
b2N1cword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kaXNhYmxlZAord2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kaXNhYmxlZAord2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9mb3JtCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRf
bmFtZQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yZWFkX29ubHkKK3dl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcmVhZF9vbmx5Cit3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Jvd3MKK3dlYmtpdF9kb21faHRtbF90ZXh0X2Fy
ZWFfZWxlbWVudF9zZXRfcm93cword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dl
dF9jb2xzCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2NvbHMKK3dlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXJlYV90eXBlCit3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9zZXRfZGVmYXVsdF92YWx1ZQord2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X2dldF92YWx1ZQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NldF92YWx1ZQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF93aWxsX3Zh
bGlkYXRlCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9z
dGFydAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fc3Rh
cnQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX2VuZAor
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZW5kCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudENsYXNzCitX
RUJLSVRfRE9NX1RZUEVfSFRNTF9URVhUX0FSRUFfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RF
WFRfQVJFQV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9URVhUX0FSRUFfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1M
X1RFWFRfQVJFQV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1F
TlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfdGV4
dF9hcmVhX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5X
ZWJLaXRET01IVE1MVGl0bGVFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxUaXRs
ZUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudAorCit3ZWJraXRfZG9t
X2h0bWxfdGl0bGVfZWxlbWVudF9nZXRfdGV4dAord2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1l
bnRfc2V0X3RleHQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MVGl0bGVF
bGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1RJVExFX0VMRU1FTlQKK1dFQktJVF9E
T01fSFRNTF9USVRMRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX1RJVExFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9U
SVRMRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVF9HRVRfQ0xB
U1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50
X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFVM
aXN0RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50PC9USVRM
RT4KK1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3VfbGlzdF9l
bGVtZW50X2dldF9jb21wYWN0Cit3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X2Nv
bXBhY3QKK3dlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfdHlwZV9hdHRyCit3ZWJr
aXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cgorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBF
X0hUTUxfVV9MSVNUX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9VX0xJU1RfRUxFTUVOVAorV0VC
S0lUX0RPTV9JU19IVE1MX1VfTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVV9MSVNUX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9VX0xJU1RfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX1VfTElTVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+
CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NRE9NV2luZG93PC9GSUxFPgorPFRJVExFPldl
YktpdERPTURPTVdpbmRvdzwvVElUTEU+CitXZWJLaXRET01ET01XaW5kb3cKKworCisKKzxTVUJT
RUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NRE9NV2luZG93Q2xhc3MKK1dFQktJVF9ET01fVFlQ
RV9ET01fV0lORE9XCitXRUJLSVRfRE9NX0RPTV9XSU5ET1cKK1dFQktJVF9ET01fSVNfRE9NX1dJ
TkRPVworV0VCS0lUX0RPTV9ET01fV0lORE9XX0NMQVNTCitXRUJLSVRfRE9NX0lTX0RPTV9XSU5E
T1dfQ0xBU1MKK1dFQktJVF9ET01fRE9NX1dJTkRPV19HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04g
UHJpdmF0ZT4KK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVhQYXRoRXhwcmVzc2lvbjwvRklMRT4KKzxUSVRMRT5X
ZWJLaXRET01YUGF0aEV4cHJlc3Npb248L1RJVExFPgorV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9u
CisKK3dlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9ldmFsdWF0ZQorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbkNsYXNzCitXRUJLSVRfRE9NX1RZUEVf
WFBBVEhfRVhQUkVTU0lPTgorV0VCS0lUX0RPTV9YUEFUSF9FWFBSRVNTSU9OCitXRUJLSVRfRE9N
X0lTX1hQQVRIX0VYUFJFU1NJT04KK1dFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTl9DTEFTUwor
V0VCS0lUX0RPTV9JU19YUEFUSF9FWFBSRVNTSU9OX0NMQVNTCitXRUJLSVRfRE9NX1hQQVRIX0VY
UFJFU1NJT05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX3hw
YXRoX2V4cHJlc3Npb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5X
ZWJLaXRET01YUGF0aFJlc3VsdDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01YUGF0aFJlc3VsdDwv
VElUTEU+CitXZWJLaXRET01YUGF0aFJlc3VsdAorCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9B
TllfVFlQRQorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfTlVNQkVSX1RZUEUKK1dFQktJVF9ET01f
WFBBVEhfUkVTVUxUX1NUUklOR19UWVBFCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9CT09MRUFO
X1RZUEUKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUX1VOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZ
UEUKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUX09SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFCitX
RUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFCitXRUJL
SVRfRE9NX1hQQVRIX1JFU1VMVF9PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRQorV0VCS0lUX0RP
TV9YUEFUSF9SRVNVTFRfQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUKK1dFQktJVF9ET01fWFBBVEhf
UkVTVUxUX0ZJUlNUX09SREVSRURfTk9ERV9UWVBFCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9p
dGVyYXRlX25leHQKK3dlYmtpdF9kb21feHBhdGhfcmVzdWx0X3NuYXBzaG90X2l0ZW0KK3dlYmtp
dF9kb21feHBhdGhfcmVzdWx0X2dldF9yZXN1bHRfdHlwZQord2Via2l0X2RvbV94cGF0aF9yZXN1
bHRfZ2V0X251bWJlcl92YWx1ZQord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3N0cmluZ192
YWx1ZQord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2Jvb2xlYW5fdmFsdWUKK3dlYmtpdF9k
b21feHBhdGhfcmVzdWx0X2dldF9zaW5nbGVfbm9kZV92YWx1ZQord2Via2l0X2RvbV94cGF0aF9y
ZXN1bHRfZ2V0X2ludmFsaWRfaXRlcmF0b3Jfc3RhdGUKK3dlYmtpdF9kb21feHBhdGhfcmVzdWx0
X2dldF9zbmFwc2hvdF9sZW5ndGgKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01Y
UGF0aFJlc3VsdENsYXNzCitXRUJLSVRfRE9NX1RZUEVfWFBBVEhfUkVTVUxUCitXRUJLSVRfRE9N
X1hQQVRIX1JFU1VMVAorV0VCS0lUX0RPTV9JU19YUEFUSF9SRVNVTFQKK1dFQktJVF9ET01fWFBB
VEhfUkVTVUxUX0NMQVNTCitXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVF9DTEFTUworV0VCS0lU
X0RPTV9YUEFUSF9SRVNVTFRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJr
aXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxG
SUxFPldlYktpdERPTUVudGl0eVJlZmVyZW5jZTwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01FbnRp
dHlSZWZlcmVuY2U8L1RJVExFPgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dFQktJVF9ET01f
VFlQRV9FTlRJVFlfUkVGRVJFTkNFCitXRUJLSVRfRE9NX0VOVElUWV9SRUZFUkVOQ0UKK1dFQktJ
VF9ET01fSVNfRU5USVRZX1JFRkVSRU5DRQorV0VCS0lUX0RPTV9FTlRJVFlfUkVGRVJFTkNFX0NM
QVNTCitXRUJLSVRfRE9NX0lTX0VOVElUWV9SRUZFUkVOQ0VfQ0xBU1MKK1dFQktJVF9ET01fRU5U
SVRZX1JFRkVSRU5DRV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9k
b21fZW50aXR5X3JlZmVyZW5jZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxG
SUxFPldlYktpdERPTUhUTUxCYXNlRm9udEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
SFRNTEJhc2VGb250RWxlbWVudDwvVElUTEU+Cit3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2Vs
ZW1lbnRfZ2V0X2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfZ2V0X2Zh
Y2UKK3dlYmtpdF9kb21faHRtbF9iYXNlX2ZvbnRfZWxlbWVudF9nZXRfc2l6ZQord2Via2l0X2Rv
bV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X3NldF9jb2xvcgord2Via2l0X2RvbV9odG1sX2Jhc2Vf
Zm9udF9lbGVtZW50X3NldF9mYWNlCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRf
c2V0X3NpemUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXRUJLSVRfRE9NX1RZUEVfSFRNTF9C
QVNFX0ZPTlRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0JBU0VfRk9OVF9FTEVNRU5UCitXRUJL
SVRfRE9NX0lTX0hUTUxfQkFTRV9GT05UX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CQVNFX0ZP
TlRfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0JBU0VfRk9OVF9FTEVNRU5UX0NM
QVNTCitXRUJLSVRfRE9NX0hUTUxfQkFTRV9GT05UX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfZ2V0X3R5
cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT53ZWJraXRkb21kZWZpbmVzPC9GSUxF
PgorPFRJVExFPldlYktpdERPTURlZmluZXM8L1RJVExFPgorPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K1dFQktJVF9BUEkKK1dFQktJVF9ERVBSRUNBVEVECitXRUJLSVRfREVQUkVDQVRFRF9GT1IKKzwv
U0VDVElPTj4KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9kb2NzL3dlYmtpdGRvbWd0ay1kb2NzLnNnbWwgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL2RvY3Mvd2Via2l0
ZG9tZ3RrLWRvY3Muc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWEy
NWJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9kb2NzL3dlYmtpdGRvbWd0ay1kb2NzLnNnbWwKQEAgLTAsMCAr
MSwxMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICIt
Ly9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisgICAgICAgICAgICAgICAiaHR0
cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFsK
KzwhRU5USVRZIHZlcnNpb24gU1lTVEVNICJ2ZXJzaW9uLnhtbCI+CitdPgorPGJvb2sgaWQ9Imlu
ZGV4IiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSI+CisgIDxib29r
aW5mbz4KKyAgICA8dGl0bGU+V2ViS2l0RE9NR1RLKyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4K
KyAgICA8cmVsZWFzZWluZm8+Zm9yIFdlYktpdERPTUdUSysgJnZlcnNpb247PC9yZWxlYXNlaW5m
bz4KKyAgPC9ib29raW5mbz4KKworICA8Y2hhcHRlcj4KKyAgICA8dGl0bGU+Q2xhc3MgT3ZlcnZp
ZXc8L3RpdGxlPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01DdXN0b20ueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUV2ZW50VGFyZ2V0LnhtbCIv
PgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01Ob2RlRmlsdGVyLnhtbCIvPgor
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01PYmplY3QueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ1NTUnVsZS54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ1NTUnVsZUxpc3QueG1sIi8+CisgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24ueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUNTU1N0eWxlU2hlZXQueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUNTU1ZhbHVlLnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01NZWRpYUxpc3QueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTVN0eWxlU2hlZXQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRET01BdHRyLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01DREFUQVNlY3Rpb24ueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdERPTUNoYXJhY3RlckRhdGEueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdERPTUNvbW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TURPTUltcGxlbWVudGF0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRET01Eb2N1bWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RE9NRG9jdW1lbnRUeXBlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRE
T01FbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01FdmVu
dC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NS2V5Ym9hcmRFdmVu
dC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NTW91c2VFdmVudC54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NTmFtZWROb2RlTWFwLnht
bCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01Ob2RlLnhtbCIvPgorICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01Ob2RlSXRlcmF0b3IueG1sIi8+CisgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTU5vZGVMaXN0LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ueG1sIi8+Cisg
ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVJhbmdlLnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01UZXh0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRET01UcmVlV2Fsa2VyLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRET01VSUV2ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01XaGVlbEV2ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRET01CbG9iLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01GaWxl
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01GaWxlTGlzdC54bWwi
Lz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQu
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxCUkVs
ZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxCYXNl
RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEJv
ZHlFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1M
QnV0dG9uRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dERPTUhUTUxDb2xsZWN0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRET01IVE1MRExpc3RFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdERPTUhUTUxEb2N1bWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0RE9NSFRNTEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxGb250RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50LnhtbCIvPgorICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50LnhtbCIvPgor
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MSFJFbGVtZW50LnhtbCIvPgor
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEltYWdl
RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRN
TExJRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRN
TExhYmVsRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9N
SFRNTExlZ2VuZEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dERPTUhUTUxMaW5rRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0RE9NSFRNTE1hcEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdERPTUhUTUxNb2RFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQueG1sIi8+Cisg
ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVs
ZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxQYXJh
bUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxQ
cmVFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1M
UXVvdGVFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01I
VE1MU2NyaXB0RWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdERPTUhUTUxTdHlsZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC54bWwiLz4KKyAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC54bWwiLz4KKyAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudC54bWwiLz4K
KyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudC54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TUhUTUxUaXRsZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dERPTUhUTUxVTGlzdEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdERPTURPTVdpbmRvdy54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RE9NWFBhdGhFeHByZXNzaW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRET01YUGF0aFJlc3VsdC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RE9NRW50aXR5UmVmZXJlbmNlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRET01IVE1MQmFzZUZvbnRFbGVtZW50LnhtbCIvPgorICA8L2NoYXB0ZXI+CisKKyAgPGluZGV4
IGlkPSJpbmRleC1hbGwiPgorICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CisgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC1mdWxsLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNs
dWRlPgorICA8L2luZGV4PgorICA8aW5kZXggaWQ9ImFwaS1pbmRleC1kZXByZWNhdGVkIiByb2xl
PSJkZXByZWNhdGVkIj4KKyAgICA8dGl0bGU+SW5kZXggb2YgZGVwcmVjYXRlZCBzeW1ib2xzPC90
aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LWRlcHJlY2F0ZWQueG1s
Ij48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CisgIDwvaW5kZXg+CisKKyAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL2Fubm90YXRpb24tZ2xvc3NhcnkueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hp
OmluY2x1ZGU+Cis8L2Jvb2s+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb20uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjg5Y2E1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJr
aXRkb20uaApAQCAtMCwwICsxLDEyNyBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwuICBETyBOT1QgTU9ESUZZIQorICAgCisg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgd2Vi
a2l0ZG9tX2gKKyNkZWZpbmUgd2Via2l0ZG9tX2gKKworI2RlZmluZSBfX1dFQktJVERPTV9IX0lO
U0lERV9fCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQXR0ci5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01CbG9iLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUNEQVRBU2VjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NSdWxlLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNTU1J1bGVMaXN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24uaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NQ1NTU3R5bGVTaGVldC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01DU1NWYWx1ZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DaGFyYWN0ZXJE
YXRhLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNvbW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NQ3VzdG9tLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTURPTUltcGxlbWVudGF0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURP
TVdpbmRvdy5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01EZXByZWNhdGVkLmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURvY3VtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NRG9jdW1lbnRUeXBlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUVsZW1l
bnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRXZlbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NRXZlbnRUYXJnZXQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NRmlsZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01GaWxlTGlzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MQmFzZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEJvZHlF
bGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uLmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTERvY3VtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
SFJFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxIZWFkRWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MTElFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxMYWJl
bEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1l
bnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNYXBFbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTE1ldGFFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxNb2RFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPTGlzdEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MUXVvdGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxT
Y3JpcHRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxTZWxlY3RF
bGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUhUTUxVTGlzdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NS2V5
Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01NZWRpYUxpc3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01OYW1lZE5vZGVNYXAuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NTm9kZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlRmlsdGVyLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGVJdGVyYXRvci5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlTGlzdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVJhbmdlLmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVN0eWxlU2hlZXQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NVGV4dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UcmVlV2Fsa2VyLmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVVJRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NV2hlZWxFdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Y
UGF0aEV4cHJlc3Npb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NWFBhdGhOU1Jl
c29sdmVyLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVhQYXRoUmVzdWx0Lmg+CisK
KyN1bmRlZiBfX1dFQktJVERPTV9IX0lOU0lERV9fCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC93ZWJraXRkb20uc3ltYm9scyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tLnN5
bWJvbHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3Qvd2Via2l0ZG9tLnN5bWJvbHMKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tLnN5bWJvbHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vd2Via2l0ZG9tYXV0b2NsZWFudXBzLXVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWF1dG9jbGVh
bnVwcy11bnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Mzlk
OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWF1dG9jbGVhbnVwcy11bnN0YWJsZS5oCkBAIC0w
LDAgKzEsMTA1IEBACisvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdvYmplY3Qt
Z2VuZXJhdGUtaGVhZGVycy5wbC4gIERPIE5PVCBNT0RJRlkhCisgICAKKyAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiB3ZWJraXRkb21hdXRvY2xl
YW51cHNfaAorI2RlZmluZSB3ZWJraXRkb21hdXRvY2xlYW51cHNfaAorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKworI2lmZGVmIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DCisjaWZu
ZGVmIF9fR0lfU0NBTk5FUl9fCisKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01BbmltYXRhYmxlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01BbmltYXRpb25FZmZlY3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lLCBnX29i
amVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01BdWRp
b1RyYWNrLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01BdWRpb1RyYWNrTGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQmFyUHJvcCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURPTUFwcGxp
Y2F0aW9uQ2FjaGUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdERPTURPTUNTU05hbWVzcGFjZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NTWltZVR5cGUsIGdfb2JqZWN0X3VucmVm
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURPTU1pbWVUeXBlQXJy
YXksIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURPTVBsdWdpbiwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXksIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURP
TVNlbGVjdGlvbiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRP
UFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NU3RyaW5nTWFwLCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01Ub2tlbkxpc3QsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURP
TVdpbmRvd1NwZWVjaFN5bnRoZXNpcywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRGF0YUN1ZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRGF0YWJhc2UsIGdfb2JqZWN0X3VucmVm
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURvY3VtZW50QW5pbWF0
aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01Eb2N1bWVudFRpbWVsaW5lLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01HYW1lcGFkLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01HYW1lcGFkTGlzdCwgZ19vYmplY3RfdW5y
ZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NR2VvbG9jYXRpb24s
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TUhUTUxBdWRpb0VsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQs
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhpc3RvcnksIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUtleWZyYW1lRWZm
ZWN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01Mb2NhdGlvbiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01NZWRpYURldmljZXMsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU1lZGlhRXJyb3Is
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TU1lZGlhUXVlcnlMaXN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU1lc3NhZ2VQ
b3J0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01OYXZpZ2F0b3IsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcywgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NUGVyZm9ybWFuY2UsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVBlcmZv
cm1hbmNlRW50cnksIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVNj
cmVlbiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCwgZ19vYmplY3RfdW5y
ZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3RvcmFnZSwgZ19vYmplY3RfdW5y
ZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3RvcmFnZUluZm8s
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TVN0b3JhZ2VRdW90YSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NU3R5bGVNZWRpYSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRP
UFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVGV4dFRyYWNrLCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01UZXh0VHJhY2tDdWUsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVRleHRU
cmFja0N1ZUxpc3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdERPTVRleHRUcmFja0xpc3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVRpbWVSYW5nZXMsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVRvdWNoLCBnX29iamVjdF91
bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01UcmFja0V2ZW50
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01Vc2VyTWVzc2FnZUhhbmRsZXIsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9D
TEVBTlVQX0ZVTkMgKFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVZUVEN1
ZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHksIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVZpZGVvVHJhY2ssIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVZpZGVv
VHJhY2tMaXN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01XZWJBbmltYXRpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BU
Ul9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVdlYktpdE5hbWVkRmxvdywgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNl
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01XZWJLaXRQb2ludCwgZ19vYmplY3RfdW5yZWYpCisKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS93ZWJraXRkb21hdXRvY2xlYW51cHMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tYXV0b2NsZWFudXBzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkYzYwMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vd2Via2l0ZG9tYXV0b2NsZWFudXBzLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ29iamVjdC1nZW5lcmF0ZS1oZWFkZXJzLnBsLiAgRE8g
Tk9UIE1PRElGWSEKKyAgIAorICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIHdlYmtpdGRvbWF1dG9jbGVhbnVwc19oCisjZGVmaW5lIHdlYmtpdGRv
bWF1dG9jbGVhbnVwc19oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaWZkZWYgR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMKKyNpZm5kZWYgX19HSV9TQ0FOTkVSX18KKworR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUF0dHIsIGdfb2JqZWN0X3VucmVm
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUJsb2IsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUNEQVRBU2Vj
dGlvbiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NQ1NTUnVsZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NQ1NTUnVsZUxpc3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24sIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUNTU1N0eWxl
U2hlZXQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdERPTUNTU1ZhbHVlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01DaGFyYWN0ZXJEYXRhLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01Db21tZW50LCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlv
biwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NRE9NV2luZG93LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01Eb2N1bWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCwgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRG9jdW1lbnRUeXBlLCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01F
bGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01FdmVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NRXZlbnRUYXJnZXQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUZpbGUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUZpbGVMaXN0LCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NSFRNTEFwcGxldEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BU
Ul9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCwgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEJSRWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTEJhc2VFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50LCBnX29i
amVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1M
Q2FudmFzRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxEaXJl
Y3RvcnlFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01IVE1MRGl2RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTERvY3VtZW50LCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MRWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTEVtYmVkRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50LCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhU
TUxIUkVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MSHRt
bEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LCBnX29iamVjdF91
bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01IVE1MTElFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVu
dCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NSFRNTExpbmtFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xF
QU5VUF9GVU5DIChXZWJLaXRET01IVE1MTWFwRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01I
VE1MTWVudUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxPTGlz
dEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MT3B0
aW9uRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTFBhcmFtRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxT
Y3JpcHRFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50LCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVt
ZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01IVE1MVGFibGVFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50LCBnX29iamVjdF91bnJl
ZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MVGFibGVTZWN0
aW9uRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFVM
aXN0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRP
UFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTWVkaWFMaXN0LCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01Nb3VzZUV2ZW50LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01OYW1lZE5v
ZGVNYXAsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdERPTU5vZGUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdERPTU5vZGVGaWx0ZXIsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BU
Ul9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU5vZGVJdGVyYXRvciwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTm9kZUxpc3QsIGdfb2JqZWN0
X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU9iamVjdCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
UHJvY2Vzc2luZ0luc3RydWN0aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01SYW5nZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3R5bGVTaGVldCwgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3R5bGVTaGVldExpc3Qs
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TVRleHQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdERPTVRyZWVXYWxrZXIsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTVVJRXZlbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVdoZWVsRXZlbnQsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbiwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
WFBhdGhOU1Jlc29sdmVyLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01YUGF0aFJlc3VsdCwgZ19vYmplY3RfdW5yZWYpCisKKyNlbmRpZgor
I2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtp
dGRvbWRlZmluZXMtdW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42ZmZmYTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmgKQEAg
LTAsMCArMSwyNTEgQEAKKy8qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ29iamVj
dC1nZW5lcmF0ZS1oZWFkZXJzLnBsLiAgRE8gTk9UIE1PRElGWSEKKyAgIAorICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHdlYmtpdGRvbWRlZmlu
ZXNfdW5zdGFibGVfaAorI2RlZmluZSB3ZWJraXRkb21kZWZpbmVzX3Vuc3RhYmxlX2gKKworI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUFuaW1hdGFibGUg
V2ViS2l0RE9NQW5pbWF0YWJsZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01BbmltYXRhYmxl
Q2xhc3MgV2ViS2l0RE9NQW5pbWF0YWJsZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NQW5pbWF0aW9uRWZmZWN0IFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01BbmltYXRpb25FZmZlY3RDbGFzcyBXZWJLaXRET01BbmltYXRpb25FZmZl
Y3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lIFdl
YktpdERPTUFuaW1hdGlvblRpbWVsaW5lOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUFuaW1h
dGlvblRpbWVsaW5lQ2xhc3MgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUF1ZGlvVHJhY2sgV2ViS2l0RE9NQXVkaW9UcmFjazsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01BdWRpb1RyYWNrQ2xhc3MgV2ViS2l0RE9NQXVkaW9UcmFj
a0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QgV2ViS2l0
RE9NQXVkaW9UcmFja0xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFja0xp
c3RDbGFzcyBXZWJLaXRET01BdWRpb1RyYWNrTGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NQmFyUHJvcCBXZWJLaXRET01CYXJQcm9wOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUJhclByb3BDbGFzcyBXZWJLaXRET01CYXJQcm9wQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlciBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcjsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlckNsYXNzIFdlYktpdERPTUJhdHRlcnlN
YW5hZ2VyQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNh
Y2hlIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NRE9NQXBwbGljYXRpb25DYWNoZUNsYXNzIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTUNTU05hbWVzcGFjZSBXZWJLaXRE
T01ET01DU1NOYW1lc3BhY2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NQ1NTTmFtZXNw
YWNlQ2xhc3MgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01ET01NaW1lVHlwZSBXZWJLaXRET01ET01NaW1lVHlwZTsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01ET01NaW1lVHlwZUNsYXNzIFdlYktpdERPTURPTU1pbWVUeXBlQ2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5IFdlYktpdERPTURP
TU1pbWVUeXBlQXJyYXk7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJh
eUNsYXNzIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24gV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29s
bGVjdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9u
Q2xhc3MgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbkNsYXNzOworCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NRE9NUGx1Z2luIFdlYktpdERPTURPTVBsdWdpbjsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01ET01QbHVnaW5DbGFzcyBXZWJLaXRET01ET01QbHVnaW5DbGFzczsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbkFycmF5IFdlYktpdERPTURPTVBsdWdp
bkFycmF5OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbkFycmF5Q2xhc3MgV2Vi
S2l0RE9NRE9NUGx1Z2luQXJyYXlDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURP
TVNlbGVjdGlvbiBXZWJLaXRET01ET01TZWxlY3Rpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NRE9NU2VsZWN0aW9uQ2xhc3MgV2ViS2l0RE9NRE9NU2VsZWN0aW9uQ2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01ET01TdHJpbmdMaXN0IFdlYktpdERPTURPTVN0cmluZ0xpc3Q7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NU3RyaW5nTGlzdENsYXNzIFdlYktpdERPTURP
TVN0cmluZ0xpc3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVN0cmluZ01h
cCBXZWJLaXRET01ET01TdHJpbmdNYXA7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NU3Ry
aW5nTWFwQ2xhc3MgV2ViS2l0RE9NRE9NU3RyaW5nTWFwQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01ET01Ub2tlbkxpc3QgV2ViS2l0RE9NRE9NVG9rZW5MaXN0OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTURPTVRva2VuTGlzdENsYXNzIFdlYktpdERPTURPTVRva2VuTGlzdENs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lz
IFdlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXNDbGFzcyBXZWJLaXRET01ET01XaW5kb3dTcGVl
Y2hTeW50aGVzaXNDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURhdGFDdWUgV2Vi
S2l0RE9NRGF0YUN1ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01EYXRhQ3VlQ2xhc3MgV2Vi
S2l0RE9NRGF0YUN1ZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRGF0YWJhc2Ug
V2ViS2l0RE9NRGF0YWJhc2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRGF0YWJhc2VDbGFz
cyBXZWJLaXRET01EYXRhYmFzZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRG9j
dW1lbnRBbmltYXRpb24gV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb247Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb25DbGFzcyBXZWJLaXRET01Eb2N1bWVudEFuaW1h
dGlvbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSBX
ZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURvY3Vt
ZW50VGltZWxpbmVDbGFzcyBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lQ2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01HYW1lcGFkIFdlYktpdERPTUdhbWVwYWQ7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NR2FtZXBhZENsYXNzIFdlYktpdERPTUdhbWVwYWRDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUdhbWVwYWRMaXN0IFdlYktpdERPTUdhbWVwYWRMaXN0Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUdhbWVwYWRMaXN0Q2xhc3MgV2ViS2l0RE9NR2FtZXBh
ZExpc3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUdlb2xvY2F0aW9uIFdlYktp
dERPTUdlb2xvY2F0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUdlb2xvY2F0aW9uQ2xh
c3MgV2ViS2l0RE9NR2VvbG9jYXRpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxBdWRpb0VsZW1lbnQgV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEF1ZGlvRWxl
bWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50
IFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01I
VE1MRGV0YWlsc0VsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50IFdlYktpdERPTUhU
TUxLZXlnZW5FbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxLZXlnZW5FbGVt
ZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudDsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3MgV2ViS2l0RE9N
SFRNTE1lZGlhRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFZp
ZGVvRWxlbWVudCBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUhUTUxWaWRlb0VsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50Q2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IaXN0b3J5IFdlYktpdERPTUhpc3Rvcnk7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSGlzdG9yeUNsYXNzIFdlYktpdERPTUhpc3RvcnlD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUtleWZyYW1lRWZmZWN0IFdlYktpdERP
TUtleWZyYW1lRWZmZWN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUtleWZyYW1lRWZmZWN0
Q2xhc3MgV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUxvY2F0aW9uIFdlYktpdERPTUxvY2F0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUxvY2F0aW9uQ2xhc3MgV2ViS2l0RE9NTG9jYXRpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTU1lZGlhQ29udHJvbGxlciBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXI7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyQ2xhc3MgV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYURldmlj
ZXMgV2ViS2l0RE9NTWVkaWFEZXZpY2VzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlh
RGV2aWNlc0NsYXNzIFdlYktpdERPTU1lZGlhRGV2aWNlc0NsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NTWVkaWFFcnJvciBXZWJLaXRET01NZWRpYUVycm9yOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTU1lZGlhRXJyb3JDbGFzcyBXZWJLaXRET01NZWRpYUVycm9yQ2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCBXZWJLaXRET01NZWRpYVF1
ZXJ5TGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdENsYXNzIFdl
YktpdERPTU1lZGlhUXVlcnlMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01N
ZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRl
ZENvbnN0cmFpbnRzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0
ZWRDb25zdHJhaW50c0NsYXNzIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50
c0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVzc2FnZVBvcnQgV2ViS2l0RE9N
TWVzc2FnZVBvcnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVzc2FnZVBvcnRDbGFzcyBX
ZWJLaXRET01NZXNzYWdlUG9ydENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTmF2
aWdhdG9yIFdlYktpdERPTU5hdmlnYXRvcjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01OYXZp
Z2F0b3JDbGFzcyBXZWJLaXRET01OYXZpZ2F0b3JDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcyBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmlj
ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzQ2xhc3Mg
V2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01QZXJmb3JtYW5jZSBXZWJLaXRET01QZXJmb3JtYW5jZTsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01QZXJmb3JtYW5jZUNsYXNzIFdlYktpdERPTVBlcmZvcm1hbmNlQ2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5IFdlYktpdERPTVBlcmZv
cm1hbmNlRW50cnk7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeUNs
YXNzIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRp
b247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uQ2xhc3Mg
V2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZzsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ0NsYXNzIFdlYktpdERPTVBl
cmZvcm1hbmNlVGltaW5nQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TY3JlZW4g
V2ViS2l0RE9NU2NyZWVuOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNjcmVlbkNsYXNzIFdl
YktpdERPTVNjcmVlbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNDbGFzcyBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNDbGFzczsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50IFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc0V2ZW50Q2xhc3MgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSBXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2U7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVXR0ZXJhbmNlQ2xhc3MgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSBX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01T
cGVlY2hTeW50aGVzaXNWb2ljZUNsYXNzIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlQ2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdG9yYWdlIFdlYktpdERPTVN0b3JhZ2U7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3RvcmFnZUNsYXNzIFdlYktpdERPTVN0b3JhZ2VD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0b3JhZ2VJbmZvIFdlYktpdERPTVN0
b3JhZ2VJbmZvOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0b3JhZ2VJbmZvQ2xhc3MgV2Vi
S2l0RE9NU3RvcmFnZUluZm9DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0b3Jh
Z2VRdW90YSBXZWJLaXRET01TdG9yYWdlUXVvdGE7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
U3RvcmFnZVF1b3RhQ2xhc3MgV2ViS2l0RE9NU3RvcmFnZVF1b3RhQ2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01TdHlsZU1lZGlhIFdlYktpdERPTVN0eWxlTWVkaWE7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NU3R5bGVNZWRpYUNsYXNzIFdlYktpdERPTVN0eWxlTWVkaWFDbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFjayBXZWJLaXRET01UZXh0VHJh
Y2s7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrQ2xhc3MgV2ViS2l0RE9NVGV4
dFRyYWNrQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tDdWUgV2Vi
S2l0RE9NVGV4dFRyYWNrQ3VlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0N1
ZUNsYXNzIFdlYktpdERPTVRleHRUcmFja0N1ZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3RDbGFzcyBXZWJLaXRET01UZXh0VHJh
Y2tDdWVMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tMaXN0
IFdlYktpdERPTVRleHRUcmFja0xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4dFRy
YWNrTGlzdENsYXNzIFdlYktpdERPTVRleHRUcmFja0xpc3RDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTVRpbWVSYW5nZXMgV2ViS2l0RE9NVGltZVJhbmdlczsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01UaW1lUmFuZ2VzQ2xhc3MgV2ViS2l0RE9NVGltZVJhbmdlc0NsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVG91Y2ggV2ViS2l0RE9NVG91Y2g7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVG91Y2hDbGFzcyBXZWJLaXRET01Ub3VjaENsYXNzOworCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NVHJhY2tFdmVudCBXZWJLaXRET01UcmFja0V2ZW50OwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRyYWNrRXZlbnRDbGFzcyBXZWJLaXRET01UcmFja0V2ZW50
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIgV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVVzZXJN
ZXNzYWdlSGFuZGxlckNsYXNzIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlckNsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSBXZWJL
aXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDbGFzcyBXZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXJzTmFtZXNwYWNlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01WVFRD
dWUgV2ViS2l0RE9NVlRUQ3VlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZUVEN1ZUNsYXNz
IFdlYktpdERPTVZUVEN1ZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZSBXZWJLaXRET01WYWxpZGl0eVN0YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVZhbGlkaXR5U3RhdGVDbGFzcyBXZWJLaXRET01WYWxpZGl0eVN0YXRlQ2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSBXZWJLaXRET01WaWRlb1Bs
YXliYWNrUXVhbGl0eTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVh
bGl0eUNsYXNzIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5Q2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNrIFdlYktpdERPTVZpZGVvVHJhY2s7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVmlkZW9UcmFja0NsYXNzIFdlYktpdERPTVZpZGVvVHJhY2tDbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZpZGVvVHJhY2tMaXN0IFdlYktpdERPTVZp
ZGVvVHJhY2tMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZpZGVvVHJhY2tMaXN0Q2xh
c3MgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTVdlYkFuaW1hdGlvbiBXZWJLaXRET01XZWJBbmltYXRpb247Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NV2ViQW5pbWF0aW9uQ2xhc3MgV2ViS2l0RE9NV2ViQW5pbWF0aW9uQ2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cgV2ViS2l0RE9NV2ViS2l0
TmFtZWRGbG93OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdE5hbWVkRmxvd0NsYXNz
IFdlYktpdERPTVdlYktpdE5hbWVkRmxvd0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NV2ViS2l0TmFtZXNwYWNlIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZTsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01XZWJLaXROYW1lc3BhY2VDbGFzcyBXZWJLaXRET01XZWJLaXROYW1lc3Bh
Y2VDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdFBvaW50IFdlYktpdERP
TVdlYktpdFBvaW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdFBvaW50Q2xhc3Mg
V2ViS2l0RE9NV2ViS2l0UG9pbnRDbGFzczsKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21hdXRvY2xlYW51cHMtdW5zdGFibGUuaD4KKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21kZWZpbmVzLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtp
dGRvbWRlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDgyYjY1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21kZWZpbmVzLmgKQEAgLTAsMCArMSwzMzQgQEAKKy8q
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ29iamVjdC1nZW5lcmF0ZS1oZWFkZXJz
LnBsLiAgRE8gTk9UIE1PRElGWSEKKyAgIAorICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIHdlYmtpdGRvbWRlZmluZXNfaAorI2RlZmluZSB3ZWJr
aXRkb21kZWZpbmVzX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lmZGVmIEdfT1NfV0lOMzIK
KyAgICAjaWZkZWYgQlVJTERJTkdfV0VCS0lUCisgICAgICAgICNkZWZpbmUgV0VCS0lUX0FQSSBf
X2RlY2xzcGVjKGRsbGV4cG9ydCkKKyAgICAjZWxzZQorICAgICAgICAjZGVmaW5lIFdFQktJVF9B
UEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisgICAgI2VuZGlmCisjZWxzZQorICAgICNkZWZpbmUg
V0VCS0lUX0FQSSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorI2VuZGlm
CisKKyNkZWZpbmUgV0VCS0lUX0RFUFJFQ0FURUQgV0VCS0lUX0FQSSBHX0RFUFJFQ0FURUQKKyNk
ZWZpbmUgV0VCS0lUX0RFUFJFQ0FURURfRk9SKGYpIFdFQktJVF9BUEkgR19ERVBSRUNBVEVEX0ZP
UihmKQorCisjaWZuZGVmIFdFQktJVF9BUEkKKyAgICAjZGVmaW5lIFdFQktJVF9BUEkKKyNlbmRp
ZgordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUF0dHIgV2ViS2l0RE9NQXR0cjsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01BdHRyQ2xhc3MgV2ViS2l0RE9NQXR0ckNsYXNzOworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NQmxvYiBXZWJLaXRET01CbG9iOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUJsb2JDbGFzcyBXZWJLaXRET01CbG9iQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01DREFUQVNlY3Rpb24gV2ViS2l0RE9NQ0RBVEFTZWN0aW9uOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUNEQVRBU2VjdGlvbkNsYXNzIFdlYktpdERPTUNEQVRBU2VjdGlvbkNsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ1NTUnVsZSBXZWJLaXRET01DU1NSdWxlOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1J1bGVDbGFzcyBXZWJLaXRET01DU1NSdWxlQ2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NSdWxlTGlzdCBXZWJLaXRET01DU1NS
dWxlTGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NSdWxlTGlzdENsYXNzIFdlYktp
dERPTUNTU1J1bGVMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NTdHls
ZURlY2xhcmF0aW9uIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb247Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkNsYXNzIFdlYktpdERPTUNTU1N0eWxlRGVj
bGFyYXRpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxlU2hlZXQg
V2ViS2l0RE9NQ1NTU3R5bGVTaGVldDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NTdHls
ZVNoZWV0Q2xhc3MgV2ViS2l0RE9NQ1NTU3R5bGVTaGVldENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NQ1NTVmFsdWUgV2ViS2l0RE9NQ1NTVmFsdWU7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NQ1NTVmFsdWVDbGFzcyBXZWJLaXRET01DU1NWYWx1ZUNsYXNzOworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSBXZWJLaXRET01DaGFyYWN0ZXJEYXRhOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNoYXJhY3RlckRhdGFDbGFzcyBXZWJLaXRET01DaGFy
YWN0ZXJEYXRhQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Db21tZW50IFdlYktp
dERPTUNvbW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ29tbWVudENsYXNzIFdlYktp
dERPTUNvbW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTUltcGxlbWVu
dGF0aW9uIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTURPTUltcGxlbWVudGF0aW9uQ2xhc3MgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25DbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVdpbmRvdyBXZWJLaXRET01ET01XaW5k
b3c7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NV2luZG93Q2xhc3MgV2ViS2l0RE9NRE9N
V2luZG93Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudCBXZWJLaXRE
T01Eb2N1bWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudENsYXNzIFdlYktp
dERPTURvY3VtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50IFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NRG9jdW1lbnRGcmFnbWVudENsYXNzIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURvY3VtZW50VHlwZSBXZWJLaXRET01Eb2N1bWVu
dFR5cGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnRUeXBlQ2xhc3MgV2ViS2l0
RE9NRG9jdW1lbnRUeXBlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01FbGVtZW50
IFdlYktpdERPTUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRWxlbWVudENsYXNz
IFdlYktpdERPTUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50
IFdlYktpdERPTUV2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50Q2xhc3MgV2Vi
S2l0RE9NRXZlbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50VGFyZ2V0
IFdlYktpdERPTUV2ZW50VGFyZ2V0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UgV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZTsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUZpbGUgV2ViS2l0RE9NRmlsZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01GaWxl
Q2xhc3MgV2ViS2l0RE9NRmlsZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRmls
ZUxpc3QgV2ViS2l0RE9NRmlsZUxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRmlsZUxp
c3RDbGFzcyBXZWJLaXRET01GaWxlTGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEFwcGxldEVs
ZW1lbnQgV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NSFRNTEFwcGxldEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudENsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50IFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnRD
bGFzcyBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUhUTUxCUkVsZW1lbnQgV2ViS2l0RE9NSFRNTEJSRWxlbWVudDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01IVE1MQlJFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEJSRWxlbWVudENs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50IFdlYktpdERP
TUhUTUxCYXNlRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQmFzZUVsZW1l
bnRDbGFzcyBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxCb2R5RWxlbWVudCBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEJv
ZHlFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQnV0dG9uRWxl
bWVudCBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50Q2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCBXZWJLaXRET01I
VE1MQ2FudmFzRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQ2FudmFzRWxl
bWVudENsYXNzIFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01IVE1MQ29sbGVjdGlvbiBXZWJLaXRET01IVE1MQ29sbGVjdGlvbjsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQ29sbGVjdGlvbkNsYXNzIFdlYktpdERPTUhUTUxD
b2xsZWN0aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRExpc3RFbGVt
ZW50IFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
SFRNTERMaXN0RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnRDbGFzczsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50IFdlYktpdERPTUhU
TUxEaXJlY3RvcnlFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxEaXJlY3Rv
cnlFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxEaXZFbGVtZW50IFdlYktpdERPTUhUTUxEaXZFbGVt
ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxEaXZFbGVtZW50Q2xhc3MgV2ViS2l0
RE9NSFRNTERpdkVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxE
b2N1bWVudCBXZWJLaXRET01IVE1MRG9jdW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
SFRNTERvY3VtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTERvY3VtZW50Q2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MRWxlbWVudCBXZWJLaXRET01IVE1MRWxlbWVudDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxFbGVtZW50
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50IFdlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEVtYmVk
RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQgV2ViS2l0RE9NSFRNTEZpZWxkU2V0
RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50Q2xh
c3MgV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50IFdlYktpdERPTUhUTUxGb250RWxlbWVudDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRm9udEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRm9u
dEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50IFdlYktpdERPTUhUTUxGcmFtZUVs
ZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudENsYXNzIFdl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxGcmFtZVNldEVsZW1lbnQgV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRN
TEZyYW1lU2V0RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEhS
RWxlbWVudCBXZWJLaXRET01IVE1MSFJFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxIUkVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MSFJFbGVtZW50Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQgV2ViS2l0RE9NSFRNTEhlYWRFbGVt
ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxIZWFkRWxlbWVudENsYXNzIFdlYktp
dERPTUhUTUxIZWFkRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TEhlYWRpbmdFbGVtZW50IFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MSGVhZGlu
Z0VsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxIdG1sRWxlbWVu
dCBXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TEh0bWxFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCBXZWJLaXRET01IVE1MSUZyYW1l
RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudENsYXNz
IFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50IFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQgV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudENsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTExJRWxlbWVudCBXZWJLaXRET01IVE1MTElFbGVt
ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxMSUVsZW1lbnRDbGFzcyBXZWJLaXRE
T01IVE1MTElFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTGFi
ZWxFbGVtZW50IFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NSFRNTExhYmVsRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnRDbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50IFdlYktpdERP
TUhUTUxMZWdlbmRFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxMZWdlbmRF
bGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUhUTUxMaW5rRWxlbWVudCBXZWJLaXRET01IVE1MTGlua0VsZW1lbnQ7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50Q2xhc3MgV2ViS2l0RE9N
SFRNTExpbmtFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTWFw
RWxlbWVudCBXZWJLaXRET01IVE1MTWFwRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01IVE1MTWFwRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxNYXBFbGVtZW50Q2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQgV2ViS2l0RE9NSFRNTE1h
cnF1ZWVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVu
dENsYXNzIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50IFdlYktpdERPTUhUTUxNZW51RWxlbWVudDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTWVudUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1M
TWVudUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZXRhRWxl
bWVudCBXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
SFRNTE1ldGFFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50Q2xhc3M7CisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTW9kRWxlbWVudCBXZWJLaXRET01IVE1MTW9kRWxl
bWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTW9kRWxlbWVudENsYXNzIFdlYktp
dERPTUhUTUxNb2RFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1M
T0xpc3RFbGVtZW50IFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50IFdlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPYmpl
Y3RFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRDbGFzczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQgV2ViS2l0RE9NSFRNTE9wdEdy
b3VwRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50
Q2xhc3MgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQgV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQ7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRDbGFzcyBXZWJLaXRE
T01IVE1MT3B0aW9uRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TE9wdGlvbnNDb2xsZWN0aW9uIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbjsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DbGFzcyBXZWJLaXRET01I
VE1MT3B0aW9uc0NvbGxlY3Rpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhU
TUxQYXJhZ3JhcGhFbGVtZW50IFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRN
TFBhcmFncmFwaEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxQ
YXJhbUVsZW1lbnQgV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01IVE1MUGFyYW1FbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudENs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQgV2ViS2l0RE9N
SFRNTFByZUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRD
bGFzcyBXZWJLaXRET01IVE1MUHJlRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NSFRNTFF1b3RlRWxlbWVudCBXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MUXVv
dGVFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudCBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Q2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCBXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudENsYXNzIFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50IFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQ7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudENsYXNzIFdlYktpdERP
TUhUTUxTdHlsZUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxU
YWJsZUNhcHRpb25FbGVtZW50IFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50OwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Q2xhc3MgV2ViS2l0
RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUhUTUxUYWJsZUNlbGxFbGVtZW50IFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Q2xhc3MgV2ViS2l0
RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQgV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRN
TFRhYmxlQ29sRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudCBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUhUTUxUYWJsZUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50Q2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50IFdlYktp
dERPTUhUTUxUYWJsZVJvd0VsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRDbGFzczsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IFdlYktpdERP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQgV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudENsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCBXZWJLaXRET01IVE1M
VGl0bGVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRD
bGFzcyBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01IVE1MVUxpc3RFbGVtZW50IFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUtleWJvYXJkRXZl
bnQgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01LZXli
b2FyZEV2ZW50Q2xhc3MgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudENsYXNzOworCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NTWVkaWFMaXN0IFdlYktpdERPTU1lZGlhTGlzdDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01NZWRpYUxpc3RDbGFzcyBXZWJLaXRET01NZWRpYUxpc3RDbGFzczsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1vdXNlRXZlbnQgV2ViS2l0RE9NTW91c2VFdmVudDsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Nb3VzZUV2ZW50Q2xhc3MgV2ViS2l0RE9NTW91c2VF
dmVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTmFtZWROb2RlTWFwIFdlYktp
dERPTU5hbWVkTm9kZU1hcDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01OYW1lZE5vZGVNYXBD
bGFzcyBXZWJLaXRET01OYW1lZE5vZGVNYXBDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTU5vZGUgV2ViS2l0RE9NTm9kZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ob2RlQ2xh
c3MgV2ViS2l0RE9NTm9kZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZUZp
bHRlciBXZWJLaXRET01Ob2RlRmlsdGVyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5vZGVG
aWx0ZXJJZmFjZSBXZWJLaXRET01Ob2RlRmlsdGVySWZhY2U7CisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01Ob2RlSXRlcmF0b3IgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTU5vZGVJdGVyYXRvckNsYXNzIFdlYktpdERPTU5vZGVJdGVyYXRvckNsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZUxpc3QgV2ViS2l0RE9NTm9kZUxpc3Q7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZUxpc3RDbGFzcyBXZWJLaXRET01Ob2RlTGlz
dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NT2JqZWN0IFdlYktpdERPTU9iamVj
dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01PYmplY3RDbGFzcyBXZWJLaXRET01PYmplY3RD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiBX
ZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
UHJvY2Vzc2luZ0luc3RydWN0aW9uQ2xhc3MgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9u
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01SYW5nZSBXZWJLaXRET01SYW5nZTsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01SYW5nZUNsYXNzIFdlYktpdERPTVJhbmdlQ2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdHlsZVNoZWV0IFdlYktpdERPTVN0eWxlU2hl
ZXQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3R5bGVTaGVldENsYXNzIFdlYktpdERPTVN0
eWxlU2hlZXRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxlU2hlZXRMaXN0
IFdlYktpdERPTVN0eWxlU2hlZXRMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxl
U2hlZXRMaXN0Q2xhc3MgV2ViS2l0RE9NU3R5bGVTaGVldExpc3RDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTVRleHQgV2ViS2l0RE9NVGV4dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01UZXh0Q2xhc3MgV2ViS2l0RE9NVGV4dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NVHJlZVdhbGtlciBXZWJLaXRET01UcmVlV2Fsa2VyOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVRyZWVXYWxrZXJDbGFzcyBXZWJLaXRET01UcmVlV2Fsa2VyQ2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01VSUV2ZW50IFdlYktpdERPTVVJRXZlbnQ7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NVUlFdmVudENsYXNzIFdlYktpdERPTVVJRXZlbnRDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdoZWVsRXZlbnQgV2ViS2l0RE9NV2hlZWxFdmVudDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01XaGVlbEV2ZW50Q2xhc3MgV2ViS2l0RE9NV2hlZWxFdmVu
dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uIFdlYktp
dERPTVhQYXRoRXhwcmVzc2lvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01YUGF0aEV4cHJl
c3Npb25DbGFzcyBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25DbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTVhQYXRoTlNSZXNvbHZlciBXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXI7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVySWZhY2UgV2ViS2l0RE9NWFBh
dGhOU1Jlc29sdmVySWZhY2U7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01YUGF0aFJlc3Vs
dCBXZWJLaXRET01YUGF0aFJlc3VsdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01YUGF0aFJl
c3VsdENsYXNzIFdlYktpdERPTVhQYXRoUmVzdWx0Q2xhc3M7CisKKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tYXV0b2NsZWFudXBzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpp
bmRleCAyMTEwMmJiLi5hY2JhNWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAtNDI1LDEwICs0
MjUsOCBAQCBpZiAoQVBQTEUpCiAgICAgc2V0KEVOQUJMRV9HVEtET0MgT0ZGKQogZW5kaWYgKCkK
IAotc2V0KERFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVIgJHtERVJJVkVE
X1NPVVJDRVNfRElSfS93ZWJraXRkb20pCiBzZXQoREVSSVZFRF9TT1VSQ0VTX1dFQktJVEdUS19E
SVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS93ZWJraXRndGspCiBzZXQoREVSSVZFRF9TT1VSQ0VT
X1dFQktJVEdUS19BUElfRElSICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVEdUS19ESVJ9L3dlYmtp
dCkKLXNldChERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSICR7REVSSVZF
RF9TT1VSQ0VTX0RJUn0vd2Via2l0ZG9tKQogc2V0KERFUklWRURfU09VUkNFU19XRUJLSVQyR1RL
X0RJUiAke0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdDJndGspCiBzZXQoREVSSVZFRF9TT1VS
Q0VTX1dFQktJVDJHVEtfQVBJX0RJUiAke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0v
d2Via2l0MikKIHNldChGT1JXQVJESU5HX0hFQURFUlNfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJ
Un0vRm9yd2FyZGluZ0hlYWRlcnMpCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0ZXIuY2ZnIGIvVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyLmNmZwppbmRleCA4Y2JiOTY2Li40
ODhkODI5IDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQu
b3JnLWNvbmZpZy9tYXN0ZXIuY2ZnCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5jZmcKQEAgLTYzMywzNyArNjMzLDYgQEAgY2xhc3Mg
UnVuR3RrQVBJVGVzdHMoc2hlbGwuVGVzdCk6CiAKICAgICAgICAgcmV0dXJuIFtzZWxmLm5hbWVd
CiAKLWNsYXNzIFJ1bkd0a1dlYktpdEdPYmplY3RET01CaW5kaW5nc0FQSUJyZWFrVGVzdHMoc2hl
bGwuVGVzdCk6Ci0gICAgbmFtZSA9ICJXZWJLaXQgR09iamVjdCBET00gYmluZGluZ3MgQVBJIGJy
ZWFrIHRlc3RzIgotICAgIGRlc2NyaXB0aW9uID0gWyJXZWJLaXQgR09iamVjdCBET00gYmluZGlu
Z3MgQVBJIGJyZWFrIHRlc3RzIHJ1bm5pbmciXQotICAgIGRlc2NyaXB0aW9uRG9uZSA9IFsiV2Vi
S2l0IEdPYmplY3QgRE9NIGJpbmRpbmdzIEFQSSBicmVhayB0ZXN0cyJdCi0gICAgY29tbWFuZCA9
IFsiLi9Ub29scy9ndGsvY2hlY2stZm9yLXdlYmtpdGRvbS1hcGktYnJlYWtzIl0KLQotICAgIGRl
ZiBjb21tYW5kQ29tcGxldGUoc2VsZiwgY21kKToKLSAgICAgICAgc2hlbGwuVGVzdC5jb21tYW5k
Q29tcGxldGUoc2VsZiwgY21kKQotCi0gICAgICAgIGxvZ1RleHQgPSBjbWQubG9nc1snc3RkaW8n
XS5nZXRUZXh0KCkKLQotICAgICAgICBzZWxmLm1pc3NpbmdBUEkgPSBib29sKHJlLmZpbmRhbGwo
Ik1pc3NpbmcgQVBJIiwgbG9nVGV4dCkpCi0gICAgICAgIHNlbGYubmV3QVBJID0gYm9vbChyZS5m
aW5kYWxsKCJOZXcgQVBJIiwgbG9nVGV4dCkpCi0KLSAgICAgICAgbGluZSA9ICIiCi0gICAgICAg
IGlmIHNlbGYubmV3QVBJOgotICAgICAgICAgICAgbGluZSArPSAiRm91bmQgbmV3IEFQSS4iCi0g
ICAgICAgIGlmIHNlbGYubWlzc2luZ0FQSToKLSAgICAgICAgICAgIGxpbmUgKz0gIkZvdW5kIG1p
c3NpbmcgQVBJLiIKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIHNlbGYuc3RhdHVzTGlu
ZSA9IFsgbGluZSBdCi0KLSAgICBkZWYgZXZhbHVhdGVDb21tYW5kKHNlbGYsIGNtZCk6Ci0gICAg
ICAgIGlmIHNlbGYubWlzc2luZ0FQSToKLSAgICAgICAgICAgIHJldHVybiBGQUlMVVJFCi0gICAg
ICAgIGlmIHNlbGYubmV3QVBJOgotICAgICAgICAgICAgcmV0dXJuIFdBUk5JTkdTCi0gICAgICAg
IGlmIGNtZC5yYyAhPSAwOgotICAgICAgICAgICAgcmV0dXJuIEZBSUxVUkUKLSAgICAgICAgcmV0
dXJuIFNVQ0NFU1MKLQogY2xhc3MgUnVuV2ViS2l0MVRlc3RzKFJ1bldlYktpdFRlc3RzKToKICAg
ICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgIHNlbGYuc2V0Q29tbWFuZChzZWxmLmNvbW1hbmQg
KyBbIi0tZHVtcC1yZW5kZXItdHJlZSJdKQpAQCAtODYzLDcgKzgzMiw2IEBAIGNsYXNzIFRlc3RG
YWN0b3J5KEZhY3RvcnkpOgogICAgICAgICAgICAgc2VsZi5hZGRTdGVwKFJ1bkVmbEFQSVRlc3Rz
KCkpCiAgICAgICAgIGlmIHBsYXRmb3JtID09ICJndGsiOgogICAgICAgICAgICAgc2VsZi5hZGRT
dGVwKFJ1bkd0a0FQSVRlc3RzKCkpCi0gICAgICAgICAgICBzZWxmLmFkZFN0ZXAoUnVuR3RrV2Vi
S2l0R09iamVjdERPTUJpbmRpbmdzQVBJQnJlYWtUZXN0cygpKQogCiBjbGFzcyBCdWlsZEFuZFRl
c3RGYWN0b3J5KFRlc3RGYWN0b3J5KToKICAgICBkZWYgZ2V0UHJvZHVjdChzZWxmKToKZGlmZiAt
LWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21h
c3RlcmNmZ191bml0dGVzdC5weSBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtp
dC5vcmctY29uZmlnL21hc3RlcmNmZ191bml0dGVzdC5weQppbmRleCAyYWYzNjAxLi4yZThhZTU5
IDEwMDc1NQotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNv
bmZpZy9tYXN0ZXJjZmdfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyY2ZnX3VuaXR0ZXN0LnB5CkBAIC00MTUsMTMg
KzQxNSwxMyBAQCBleHBlY3RlZF9idWlsZF9zdGVwcyA9IHsKICAgICAnSlNDT25seSBMaW51eCBB
Uk12NyBUcmFkaXRpb25hbCBSZWxlYXNlJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3dhaXQtZm9y
LXN2bi1zZXJ2ZXInLCAnc3ZuJywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVs
ZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywgJ2NvbXBpbGUtd2Via2l0JywgJ2pzY29yZS10ZXN0J10s
CiAgICAgJ0pTQ09ubHkgTGludXggQUFyY2g2NCBSZWxlYXNlJyA6IFsnY29uZmlndXJlIGJ1aWxk
JywgJ3dhaXQtZm9yLXN2bi1zZXJ2ZXInLCAnc3ZuJywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJl
Y3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywgJ2NvbXBpbGUtd2Via2l0JywgJ2pz
Y29yZS10ZXN0J10sCiAKLSAgICAnR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlJyA6IFsnY29uZmln
dXJlIGJ1aWxkJywgJ3N2bicsICdraWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1
aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdj
b21waWxlLXdlYmtpdCcsICdqc2NvcmUtdGVzdCcsICd3ZWJraXRweS10ZXN0JywgJ3dlYmtpdHBl
cmwtdGVzdCcsICdiaW5kaW5ncy1nZW5lcmF0aW9uLXRlc3RzJywgJ2J1aWx0aW5zLWdlbmVyYXRp
b24tdGVzdHMnLCAnQVBJIHRlc3RzJywgJ1dlYktpdCBHT2JqZWN0IERPTSBiaW5kaW5ncyBBUEkg
YnJlYWsgdGVzdHMnXSwKKyAgICAnR1RLIExpbnV4IDMyLWJpdCBSZWxlYXNlJyA6IFsnY29uZmln
dXJlIGJ1aWxkJywgJ3N2bicsICdraWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1
aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdj
b21waWxlLXdlYmtpdCcsICdqc2NvcmUtdGVzdCcsICd3ZWJraXRweS10ZXN0JywgJ3dlYmtpdHBl
cmwtdGVzdCcsICdiaW5kaW5ncy1nZW5lcmF0aW9uLXRlc3RzJywgJ2J1aWx0aW5zLWdlbmVyYXRp
b24tdGVzdHMnLCAnQVBJIHRlc3RzJ10sCiAgICAgJ0dUSyBMaW51eCA2NC1iaXQgRGVidWcgKEJ1
aWxkKScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJvY2Vzc2VzJywg
J2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVz
JywgJ2poYnVpbGQnLCAnY29tcGlsZS13ZWJraXQnLCAnYXJjaGl2ZS1idWlsdC1wcm9kdWN0Jywg
J3VwbG9hZCcsICd0cmlnZ2VyJ10sCi0gICAgJ0dUSyBMaW51eCA2NC1iaXQgRGVidWcgKFRlc3Rz
KScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJvY2Vzc2VzJywgJ2Rl
bGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywg
J2poYnVpbGQnLCAnZG93bmxvYWQtYnVpbHQtcHJvZHVjdCcsICdleHRyYWN0LWJ1aWx0LXByb2R1
Y3QnLCAnanNjb3JlLXRlc3QnLCAnbGF5b3V0LXRlc3QnLCAnd2Via2l0cHktdGVzdCcsICd3ZWJr
aXRwZXJsLXRlc3QnLCAnYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cycsICdidWlsdGlucy1nZW5l
cmF0aW9uLXRlc3RzJywgJ2FyY2hpdmUtdGVzdC1yZXN1bHRzJywgJ3VwbG9hZCcsICdNYXN0ZXJT
aGVsbENvbW1hbmQnLCAnQVBJIHRlc3RzJywgJ1dlYktpdCBHT2JqZWN0IERPTSBiaW5kaW5ncyBB
UEkgYnJlYWsgdGVzdHMnXSwKKyAgICAnR1RLIExpbnV4IDY0LWJpdCBEZWJ1ZyAoVGVzdHMpJyA6
IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2bicsICdraWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRl
IFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnamhi
dWlsZCcsICdkb3dubG9hZC1idWlsdC1wcm9kdWN0JywgJ2V4dHJhY3QtYnVpbHQtcHJvZHVjdCcs
ICdqc2NvcmUtdGVzdCcsICdsYXlvdXQtdGVzdCcsICd3ZWJraXRweS10ZXN0JywgJ3dlYmtpdHBl
cmwtdGVzdCcsICdiaW5kaW5ncy1nZW5lcmF0aW9uLXRlc3RzJywgJ2J1aWx0aW5zLWdlbmVyYXRp
b24tdGVzdHMnLCAnYXJjaGl2ZS10ZXN0LXJlc3VsdHMnLCAndXBsb2FkJywgJ01hc3RlclNoZWxs
Q29tbWFuZCcsICdBUEkgdGVzdHMnXSwKICAgICAnR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIChC
dWlsZCknIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tpbGwgb2xkIHByb2Nlc3Nlcycs
ICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBzdGFsZSBidWlsZCBmaWxl
cycsICdqaGJ1aWxkJywgJ2NvbXBpbGUtd2Via2l0JywgJ2FyY2hpdmUtYnVpbHQtcHJvZHVjdCcs
ICd1cGxvYWQnLCAndHJpZ2dlciddLAogICAgICdHVEsgTGludXggNjQtYml0IFJlbGVhc2UgKFBl
cmYpJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2bicsICdraWxsIG9sZCBwcm9jZXNzZXMnLCAn
ZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMn
LCAnamhidWlsZCcsICdkb3dubG9hZC1idWlsdC1wcm9kdWN0JywgJ2V4dHJhY3QtYnVpbHQtcHJv
ZHVjdCcsICdwZXJmLXRlc3QnLCAnYmVuY2htYXJrLXRlc3QnXSwKLSAgICAnR1RLIExpbnV4IDY0
LWJpdCBSZWxlYXNlIChUZXN0cyknIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tpbGwg
b2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBz
dGFsZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2Rvd25sb2FkLWJ1aWx0LXByb2R1Y3QnLCAn
ZXh0cmFjdC1idWlsdC1wcm9kdWN0JywgJ2pzY29yZS10ZXN0JywgJ2xheW91dC10ZXN0JywgJ3dl
YmtpdHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0JywgJ2JpbmRpbmdzLWdlbmVyYXRpb24tdGVz
dHMnLCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycsICdhcmNoaXZlLXRlc3QtcmVzdWx0cycs
ICd1cGxvYWQnLCAnTWFzdGVyU2hlbGxDb21tYW5kJywgJ0FQSSB0ZXN0cycsICdXZWJLaXQgR09i
amVjdCBET00gYmluZGluZ3MgQVBJIGJyZWFrIHRlc3RzJ10sCi0gICAgJ0dUSyBMaW51eCBBUk0g
UmVsZWFzZScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJvY2Vzc2Vz
JywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZp
bGVzJywgJ2poYnVpbGQnLCAnY29tcGlsZS13ZWJraXQnLCAnanNjb3JlLXRlc3QnLCAnd2Via2l0
cHktdGVzdCcsICd3ZWJraXRwZXJsLXRlc3QnLCAnYmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cycs
ICdidWlsdGlucy1nZW5lcmF0aW9uLXRlc3RzJywgJ0FQSSB0ZXN0cycsICdXZWJLaXQgR09iamVj
dCBET00gYmluZGluZ3MgQVBJIGJyZWFrIHRlc3RzJ10sCisgICAgJ0dUSyBMaW51eCA2NC1iaXQg
UmVsZWFzZSAoVGVzdHMpJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2bicsICdraWxsIG9sZCBw
cm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUg
YnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdkb3dubG9hZC1idWlsdC1wcm9kdWN0JywgJ2V4dHJh
Y3QtYnVpbHQtcHJvZHVjdCcsICdqc2NvcmUtdGVzdCcsICdsYXlvdXQtdGVzdCcsICd3ZWJraXRw
eS10ZXN0JywgJ3dlYmtpdHBlcmwtdGVzdCcsICdiaW5kaW5ncy1nZW5lcmF0aW9uLXRlc3RzJywg
J2J1aWx0aW5zLWdlbmVyYXRpb24tdGVzdHMnLCAnYXJjaGl2ZS10ZXN0LXJlc3VsdHMnLCAndXBs
b2FkJywgJ01hc3RlclNoZWxsQ29tbWFuZCcsICdBUEkgdGVzdHMnXSwKKyAgICAnR1RLIExpbnV4
IEFSTSBSZWxlYXNlJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2bicsICdraWxsIG9sZCBwcm9j
ZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVp
bGQgZmlsZXMnLCAnamhidWlsZCcsICdjb21waWxlLXdlYmtpdCcsICdqc2NvcmUtdGVzdCcsICd3
ZWJraXRweS10ZXN0JywgJ3dlYmtpdHBlcmwtdGVzdCcsICdiaW5kaW5ncy1nZW5lcmF0aW9uLXRl
c3RzJywgJ2J1aWx0aW5zLWdlbmVyYXRpb24tdGVzdHMnLCAnQVBJIHRlc3RzJ10sCiAKICAgICAn
V2luQ2Fpcm8gNjQtQml0IFJlbGVhc2UnIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tp
bGwgb2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0
ZSBzdGFsZSBidWlsZCBmaWxlcycsICdjb21waWxlLXdlYmtpdCddLAogfQpAQCAtNDU0LDUxICs0
NTQsNiBAQCBjbGFzcyBCdWlsZFN0ZXBzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAg
ICAgICBzZWxmLmFzc2VydFRydWUoYnVpbGRlciBpbiBidWlsZGVycywgIkJ1aWxkZXIgJXMgZG9l
c24ndCBleGlzdCwgYnV0IGhhcyB1bm5lY2Vzc2FyeSBleHBlY3RlZCByZXN1bHRzIiAlIGJ1aWxk
ZXIpCiAKIAotY2xhc3MgUnVuR3RrV2ViS2l0R09iamVjdERPTUJpbmRpbmdzQVBJQnJlYWtUZXN0
c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBhc3NlcnRSZXN1bHRzKHNlbGYsIGV4
cGVjdGVkX21pc3NpbmcsIGV4cGVjdGVkX25ldywgc3RkaW8pOgotICAgICAgICBleHBlY3RlZF90
ZXh0ID0gIiIKLSAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9IFNVQ0NFU1MKLSAgICAgICAgaWYg
ZXhwZWN0ZWRfbmV3OgotICAgICAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9IFdBUk5JTkdTCi0g
ICAgICAgIGlmIGV4cGVjdGVkX21pc3Npbmc6Ci0gICAgICAgICAgICBleHBlY3RlZF9yZXN1bHRz
ID0gRkFJTFVSRQotCi0gICAgICAgIGNtZCA9IFN0dWJSZW1vdGVDb21tYW5kKDAsIHN0ZGlvKQot
ICAgICAgICBzdGVwID0gUnVuR3RrV2ViS2l0R09iamVjdERPTUJpbmRpbmdzQVBJQnJlYWtUZXN0
cygpCi0gICAgICAgIHN0ZXAuY29tbWFuZENvbXBsZXRlKGNtZCkKLQotICAgICAgICBhY3R1YWxf
cmVzdWx0cyA9IHN0ZXAuZXZhbHVhdGVDb21tYW5kKGNtZCkKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChleHBlY3RlZF9yZXN1bHRzLCBhY3R1YWxfcmVzdWx0cykKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChleHBlY3RlZF9taXNzaW5nLCBzdGVwLm1pc3NpbmdBUEkpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbmV3LCBzdGVwLm5ld0FQSSkKLQotICAgIGRlZiB0ZXN0X21p
c3NpbmdfYW5kX25ld19hcGkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmVzdWx0cyhleHBl
Y3RlZF9taXNzaW5nPVRydWUsIGV4cGVjdGVkX25ldz1UcnVlLCBzdGRpbz0iIiJNaXNzaW5nIEFQ
SSAoQVBJIGJyZWFrISkgZGV0ZWN0ZWQgaW4gR09iamVjdCBET00gYmluZGluZ3MKLSAgICBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2Via2l0ZGlyZWN0b3J5KFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqKQotICAgIGdjaGFyKiB3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfY3VlX2dldF90ZXh0KFdlYktpdERPTVRleHRUcmFja0N1ZSopCi0KLU5ldyBBUEkgZGV0ZWN0
ZWQgaW4gR09iamVjdCBET00gYmluZGluZ3MKLSAgICB2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9jYXB0dXJlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqLCBnYm9vbGVh
bikKLSAgICBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVy
ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KikKLSAgICB2b2lkIHdlYmtpdF9kb21fdGV4dF90
cmFja19hZGRfY3VlKFdlYktpdERPTVRleHRUcmFjayosIFdlYktpdERPTVRleHRUcmFja0N1ZSos
IEdFcnJvcioqKQotICAgIGdjaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9vcmlnaW4oV2Vi
S2l0RE9NRG9jdW1lbnQqKSIiIikKLQotICAgIGRlZiB0ZXN0X21pc3NpbmdfYXBpKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydFJlc3VsdHMoZXhwZWN0ZWRfbWlzc2luZz1UcnVlLCBleHBlY3Rl
ZF9uZXc9RmFsc2UsIHN0ZGlvPSIiIk1pc3NpbmcgQVBJIChBUEkgYnJlYWshKSBkZXRlY3RlZCBp
biBHT2JqZWN0IERPTSBiaW5kaW5ncwotICAgIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF93ZWJraXRkaXJlY3RvcnkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCop
Ci0gICAgZ2NoYXIqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3RleHQoV2ViS2l0RE9N
VGV4dFRyYWNrQ3VlKikiIiIpCi0KLSAgICBkZWYgdGVzdF9uZXdfYXBpKHNlbGYpOgotICAgICAg
ICBzZWxmLmFzc2VydFJlc3VsdHMoZXhwZWN0ZWRfbWlzc2luZz1GYWxzZSwgZXhwZWN0ZWRfbmV3
PVRydWUsIHN0ZGlvPSIiIk5ldyBBUEkgZGV0ZWN0ZWQgaW4gR09iamVjdCBET00gYmluZGluZ3MK
LSAgICB2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9jYXB0dXJlKFdlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQqLCBnYm9vbGVhbikKLSAgICBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVyZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KikKLSAgICB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19hZGRfY3VlKFdlYktpdERPTVRleHRU
cmFjayosIFdlYktpdERPTVRleHRUcmFja0N1ZSosIEdFcnJvcioqKQotICAgIGdjaGFyKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9vcmlnaW4oV2ViS2l0RE9NRG9jdW1lbnQqKSIiIikKLQotICAg
IGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmVzdWx0cyhleHBl
Y3RlZF9taXNzaW5nPUZhbHNlLCBleHBlY3RlZF9uZXc9RmFsc2UsIHN0ZGlvPSIiKQotCi0KIGNs
YXNzIFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRl
ZiBhc3NlcnRSZXN1bHRzKHNlbGYsIHJjLCBleHBlY3RlZF90ZXh0KToKICAgICAgICAgY21kID0g
U3R1YlJlbW90ZUNvbW1hbmQocmMsIGV4cGVjdGVkX3RleHQpCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTBkNTE3MS4uNTViNGQ2NSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0
IEBACisyMDE2LTA4LTMxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBNb3ZlIEdPYmplY3QgRE9NIGJpbmRpbmdzIHRvIFdlYktpdDIg
bGF5ZXIgYW5kIHN0b3AgYXV0byBnZW5lcmF0aW5nIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTQzOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBzY3JpcHRzIHJlbGF0ZWQgdG8gdGhl
IEdPYmplY3QgRE9NIGJpbmRpbmdzIGF1dG8tZ2VuZXJhdGlvbi4KKworICAgICAgICAqIEJ1aWxk
U2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5jZmc6CisgICAgICAg
IChSdW5HdGtBUElUZXN0cy5nZXRUZXh0Mik6CisgICAgICAgIChUZXN0RmFjdG9yeS5fX2luaXRf
Xyk6CisgICAgICAgIChSdW5XZWJLaXQxVGVzdHMpOiBEZWxldGVkLgorICAgICAgICAoUnVuV2Vi
S2l0MVRlc3RzLnN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bldlYktpdDFMZWFrVGVzdHMp
OiBEZWxldGVkLgorICAgICAgICAoUnVuV2ViS2l0MUxlYWtUZXN0cy5zdGFydCk6IERlbGV0ZWQu
CisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJmVGVzdHMpOiBEZWxldGVkLgorICAgICAgICAoUnVu
QW5kVXBsb2FkUGVyZlRlc3RzLnN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKEJ1aWxkQW5kUmVt
b3RlSlNDVGVzdHNGYWN0b3J5Ll9faW5pdF9fKTogRGVsZXRlZC4KKyAgICAgICAgKiBCdWlsZFNs
YXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0ZXJjZmdfdW5pdHRlc3QucHk6
CisgICAgICAgIChCdWlsZFN0ZXBzVGVzdC50ZXN0X3VubmVjZXNzYXJ5X2V4cGVjdGVkX3Jlc3Vs
dHMpOgorICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdCk6IERlbGV0ZWQuCisgICAg
ICAgIChSdW5BbmRVcGxvYWRQZXJmVGVzdHNUZXN0LmFzc2VydFJlc3VsdHMpOiBEZWxldGVkLgor
ICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdC50ZXN0X3N1Y2Nlc3MpOiBEZWxldGVk
LgorICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdC50ZXN0X3Rlc3RzX2ZhaWxlZCk6
IERlbGV0ZWQuCisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJmVGVzdHNUZXN0LnRlc3RfYnVpbGRf
YmFkX2J1aWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3Qu
dGVzdF9idWlsZF9iYWRfc291cmNlX2pzb24pOiBEZWxldGVkLgorICAgICAgICAoUnVuQW5kVXBs
b2FkUGVyZlRlc3RzVGVzdC50ZXN0X2J1aWxkX2JhZF9tYXJnZSk6IERlbGV0ZWQuCisgICAgICAg
IChSdW5BbmRVcGxvYWRQZXJmVGVzdHNUZXN0LnRlc3RfYnVpbGRfYmFkX2ZhaWxlZF91cGxvYWRp
bmcpOiBEZWxldGVkLgorICAgICAgICAoUnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdC50ZXN0X2J1
aWxkX2JhZF9wcmVwYXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJm
VGVzdHNUZXN0LnRlc3RfYnVpbGRib3RfdGltZW91dCk6IERlbGV0ZWQuCisgICAgICAgIChSdW5C
ZW5jaG1hcmtUZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkJlbmNobWFya1Rlc3QuYXNzZXJ0
UmVzdWx0cyk6IERlbGV0ZWQuCisgICAgICAgIChSdW5CZW5jaG1hcmtUZXN0LnRlc3Rfc3VjY2Vz
cyk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHM6CisgICAg
ICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6
CisgICAgICAgICogZ3RrL2NoZWNrLWZvci13ZWJraXRkb20tYXBpLWJyZWFrczogUmVtb3ZlZC4K
KyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3RrZG9jOgorICAgICAgICAqIGd0ay93ZWJraXRkb20u
cHk6IFJlbW92ZWQuCisKIDIwMTYtMDgtMzEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdLMiBHYW1lcGFkIHByb3ZpZGVyIG9uIGlPUy4KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvcnVuLWJpbmRpbmdzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tYmlu
ZGluZ3MtdGVzdHMKaW5kZXggZmMyMGFmZS4uZmRlOTA1MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy9ydW4tYmluZGluZ3MtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3Mt
dGVzdHMKQEAgLTQyLDEwICs0Miw3IEBAIGRlZiBtYWluKGFyZ3YpOgogICAgIHJlc2V0X3Jlc3Vs
dHMgPSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2CiAgICAgdmVyYm9zZSA9IG5vdCAiLS1uby12
ZXJib3NlIiBpbiBhcmd2CiAKLSAgICBnZW5lcmF0b3JzID0gWwotICAgICAgICAnSlMnLAotICAg
ICAgICAnR09iamVjdCcKLSAgICBdCisgICAgZ2VuZXJhdG9ycyA9IFsgJ0pTJyBdCiAKICAgICBm
cm9tIHdlYmtpdHB5LmJpbmRpbmdzLm1haW4gaW1wb3J0IEJpbmRpbmdzVGVzdHMKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDA5YmE0MDcuLjliN2JkMTIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTE0NSwyNSArMTQ1LDYg
QEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgb3MucGF0aC5qb2luKCdUb29scycs
ICdUZXN0V2ViS2l0QVBJJyldLAogICAgICBbIi1yZWFkYWJpbGl0eS9uYW1pbmciXSksCiAKLSAg
ICAoWyMgVGhlIEdUSysgQVBJcyB1c2UgR1RLKyBuYW1pbmcgc3R5bGUsIHdoaWNoIGluY2x1ZGVz
Ci0gICAgICAjIGxvd2VyLWNhc2VkLCB1bmRlcnNjb3JlLXNlcGFyYXRlZCB2YWx1ZXMsIHdoaXRl
c3BhY2UgYmVmb3JlCi0gICAgICAjIHBhcmVucyBmb3IgZnVuY3Rpb24gY2FsbHMsIGFuZCBhbHdh
eXMgaGF2aW5nIHZhcmlhYmxlIG5hbWVzLgotICAgICAgIyBBbHNvLCBHVEsrIGFsbG93cyB0aGUg
dXNlIG9mIE5VTEwuCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2Jp
bmRpbmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NQ3VzdG9tLmgnKSwKLSAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnZ29iamVjdCcsICdXZWJLaXRE
T01EZXByZWNhdGVkLmgnKSwKLSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUn
LCAnYmluZGluZ3MnLCAnZ29iamVjdCcsICdXZWJLaXRET01FdmVudFRhcmdldC5oJyksCi0gICAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3Qn
LCAnV2ViS2l0RE9NTm9kZUZpbHRlci5oJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NWFBhdGhOU1Jlc29s
dmVyLmgnKSwKLSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdndGsnLCAn
d2Via2l0JyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ0R1bXBSZW5kZXJUcmVlJywg
J2d0aycpXSwKLSAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nIiwKLSAgICAgICItcmVhZGFiaWxp
dHkvcGFyYW1ldGVyX25hbWUiLAotICAgICAgIi1yZWFkYWJpbGl0eS9udWxsIiwKLSAgICAgICIt
cmVhZGFiaWxpdHkvZW51bV9jYXNpbmciLAotICAgICAgIi13aGl0ZXNwYWNlL2RlY2xhcmF0aW9u
IiwKLSAgICAgICItd2hpdGVzcGFjZS9pbmRlbnQiLAotICAgICAgIi13aGl0ZXNwYWNlL3BhcmVu
cyJdKSwKLQogICAgIChbIyBUaGUgR1RLKyBBUEkgdXNlIHVwcGVyIGNhc2UsIHVuZGVyc2NvcmUg
c2VwYXJhdGVkLCB3b3JkcyBpbgogICAgICAgIyBjZXJ0YWluIHR5cGVzIG9mIGVudW1zIChlLmcu
IHNpZ25hbHMsIHByb3BlcnRpZXMpLgogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2Vi
S2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycpLApAQCAtMjI0LDExICsyMDUsNiBAQCBf
UEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICAiLXdoaXRlc3BhY2UvZGVjbGFyYXRpb24i
XSksCiAgICAgKFsjIFRoZXNlIGZpbGVzIGRlZmluZSBHT2JqZWN0cywgd2hpY2ggaW1wbGllcyBz
b21lIGRlZmluaXRpb25zIG9mCiAgICAgICAjIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGNvbnRh
aW5pbmcgdW5kZXJzY29yZXMuCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3Jl
JywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NQ3VzdG9tLmNwcCcpLAotICAgICAg
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0Jywg
J1dlYktpdERPTURlcHJlY2F0ZWQuY3BwJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NRXZlbnRUYXJnZXQu
Y3BwJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdz
JywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NTm9kZUZpbHRlci5jcHAnKSwKLSAgICAgIG9zLnBhdGgu
am9pbignU291cmNlJywgJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnZ29iamVjdCcsICdXZWJLaXRE
T01YUGF0aE5TUmVzb2x2ZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdX
ZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdWaWRlb1NpbmtH
U3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywg
J3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3Bs
YXRmb3JtJywgJ2F1ZGlvJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJl
YW1lci5jcHAnKSwKQEAgLTMyNiw2ICszMDIsOSBAQCBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5J
TkcgPSBbCiAgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycpICsgb3MucGF0aC5zZXApICsgcidX
ZWJLaXQoPyEuKlByaXZhdGVcLmgpLipcLmgkJyksCiAgICAgcmUuY29tcGlsZShyZS5lc2NhcGUo
b3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0luamVjdGVk
QnVuZGxlJywgJ0FQSScsICdndGsnKSArIG9zLnBhdGguc2VwKSArIHInV2ViS2l0KD8hLipQcml2
YXRlXC5oKS4qXC5oJCcpLAogCisgICAgIyBHT2JqZWN0IERPTSBiaW5kaW5ncyBjb3BpZWQgZnJv
bSBnZW5lcmF0ZWQgY29kZSB1c2luZyBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgorICAgIG9zLnBh
dGguam9pbignU291cmNlJywgJ1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRs
ZScsICdBUEknLCAnZ3RrJywgJ0RPTScpLAorCiAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V2ViS2l0MicsICdVSVByb2Nlc3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgnKSwKICAgICBv
cy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRC
dW5kbGUnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyldCiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL2d0ay9jaGVjay1mb3Itd2Via2l0ZG9tLWFwaS1icmVha3MgYi9Ub29scy9n
dGsvY2hlY2stZm9yLXdlYmtpdGRvbS1hcGktYnJlYWtzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCBiMjM1NGYxLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2d0ay9jaGVjay1mb3Itd2Via2l0
ZG9tLWFwaS1icmVha3MKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jIS91c3IvYmlu
L2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IElnYWxpYSBTLkwuCi0jIENv
cHlyaWdodCAoQykgMjAxMyBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0j
Ci0jIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
Ci1pbXBvcnQgY29tbW9uCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB3ZWJraXRkb20K
LQotRVhQRUNURURfQVBJX1BBVEggPSBjb21tb24udG9wX2xldmVsX3BhdGgoJ1NvdXJjZScsICdX
ZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnLCAnd2Via2l0ZG9tLnN5bWJvbHMnKQotCi1k
ZWYgcmVhZF9idWlsdF9hcGkoKToKLSAgICBhcGlzID0gc2V0KCkKLSAgICBmb3IgZmlsZV9wYXRo
IGluIHdlYmtpdGRvbS5nZXRfYWxsX3dlYmtpdGRvbV9zeW1ib2xfZmlsZXMoKToKLSAgICAgICAg
d2l0aCBvcGVuKGZpbGVfcGF0aCkgYXMgZmlsZV9oYW5kbGU6Ci0gICAgICAgICAgICBhcGlzLnVw
ZGF0ZShzZXQoZmlsZV9oYW5kbGUucmVhZGxpbmVzKCkpKQotICAgIHJldHVybiBhcGlzCi0KLWRl
ZiByZWFkX2V4cGVjdGVkX2FwaSgpOgotICAgIHdpdGggb3BlbihFWFBFQ1RFRF9BUElfUEFUSCkg
YXMgZmlsZV9oYW5kbGU6Ci0gICAgICAgIHJldHVybiBzZXQoW3N5bWJvbC5zdHJpcCgnXG4nKS5z
cGxpdCgnQCcsIDEpWzBdICsgJ1xuJyBmb3Igc3ltYm9sIGluIGZpbGVfaGFuZGxlLnJlYWRsaW5l
cygpXSkKLQotZGVmIGNoZWNrX2FwaShleHBlY3RlZF9hcGksIGJ1aWx0X2FwaSk6Ci0gICAgbWlz
c2luZ19hcGkgPSBleHBlY3RlZF9hcGkuZGlmZmVyZW5jZShidWlsdF9hcGkpCi0gICAgbmV3X2Fw
aSA9IGJ1aWx0X2FwaS5kaWZmZXJlbmNlKGV4cGVjdGVkX2FwaSkKLQotICAgIGlmIG1pc3Npbmdf
YXBpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJNaXNzaW5nIEFQSSAoQVBJIGJyZWFrISkg
ZGV0ZWN0ZWQgaW4gR09iamVjdCBET00gYmluZGluZ3NcbiIpCi0gICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoIiAgICAlc1xuIiAlICIgICAgIi5qb2luKG1pc3NpbmdfYXBpKSkKLSAgICAgICAgc3lz
LnN0ZGVyci5mbHVzaCgpCi0KLSAgICBpZiBuZXdfYXBpOgotICAgICAgICBzeXMuc3Rkb3V0Lndy
aXRlKCJOZXcgQVBJIGRldGVjdGVkIGluIEdPYmplY3QgRE9NIGJpbmRpbmdzXG4iKQotICAgICAg
ICBzeXMuc3Rkb3V0LndyaXRlKCIgICAgJXNcbiIgJSAiICAgICIuam9pbihuZXdfYXBpKSkKLQot
ICAgIGlmIG1pc3NpbmdfYXBpOgotICAgICAgICAjIFRoaXMgdGVzdCBjYW4gZ2l2ZSBmYWxzZSBw
b3NpdGl2ZXMgYmVjYXVzZSB0aGUgR09iamVjdAotICAgICAgICAjIERPTSBiaW5kaW5ncyBBUEkg
dmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsYXRpb24gb3B0aW9ucy4KLSAgICAgICAgIyBT
byB0aGlzIHNob3VsZG4ndCBiZSBtYWRlIGZhdGFsIHVudGlsIHdlIGZpZ3VyZSBvdXQgYSB3YXkg
dG8gaGFuZGxlIGl0LgotICAgICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIxNDgxCi0gICAgICAgIHJldHVybiAwCi0KLSAgICBpZiBuZXdfYXBpOgot
ICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJBUEkgY29tcGF0aWJsZSBjaGFuZ2VzIGZvdW5kIGlu
IEdPYmplY3QgRE9NIGJpbmRpbmdzLlxuIikKLQotICAgIHJldHVybiAwCi0KLWlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6Ci0gICAgc3lzLmV4aXQoY2hlY2tfYXBpKHJlYWRfZXhwZWN0ZWRfYXBp
KCksIHJlYWRfYnVpbHRfYXBpKCkpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0
a2RvYyBiL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKaW5kZXggNzA0NGQyYS4uMmFiZDk1YiAx
MDA3NTUKLS0tIGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYworKysgYi9Ub29scy9ndGsvZ2Vu
ZXJhdGUtZ3RrZG9jCkBAIC0yNiw3ICsyNiw2IEBAIGltcG9ydCBndGtkb2MKIGltcG9ydCBsb2dn
aW5nCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwotaW1wb3J0IHdlYmtpdGRvbQogCiBzeXMu
c3Rkb3V0ID0gY29kZWNzLmdldHdyaXRlcigidXRmLTgiKShzeXMuc3Rkb3V0KQogc3lzLnN0ZGVy
ciA9IGNvZGVjcy5nZXR3cml0ZXIoInV0Zi04Iikoc3lzLnN0ZGVycikKQEAgLTE5Nyw3ICsxOTYs
NiBAQCBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGlmIG5vdCB3ZWJraXRkb21fZ2Vu
ZXJhdG9yOgogICAgICAgICBwcmludCgiZ3RrZG9jLXdlYmtpdGRvbS5jZmcgZG9lcyBub3QgZXhp
c3QhIFNraXBwaW5nIHRoYXQgZG9jdW1lbnRhdGlvbiIpCiAgICAgICAgIHN5cy5leGl0KDEpCi0g
ICAgd2Via2l0ZG9tLndyaXRlX2RvY19maWxlcyh3ZWJraXRkb21fZ2VuZXJhdG9yLm1vZHVsZV9u
YW1lKQogICAgIHNhd193YXJuaW5ncyA9IGdlbmVyYXRlX2RvY3VtZW50YXRpb24od2Via2l0ZG9t
X2dlbmVyYXRvcikKICAgICBpZiBzYXdfd2FybmluZ3M6CiAgICAgICAgIHN5cy5leGl0KHNhd193
YXJuaW5ncykKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay93ZWJraXRkb20ucHkgYi9Ub29scy9ndGsv
d2Via2l0ZG9tLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxNGZkOWIxLi4wMDAw
MDAwCi0tLSBhL1Rvb2xzL2d0ay93ZWJraXRkb20ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkg
KzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMyBJZ2Fs
aWEgUy5MLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0j
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0jIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEw
LTEzMDEgIFVTQQotCi1pbXBvcnQgY29tbW9uCi1pbXBvcnQgZXJybm8KLWltcG9ydCBvcwotaW1w
b3J0IHJlCi1pbXBvcnQgc3lzCi0KLWZyb20gQ29uZmlnUGFyc2VyIGltcG9ydCBTYWZlQ29uZmln
UGFyc2VyCi0KLQotY2xhc3MgV2ViS2l0RE9NRG9jR2VuZXJhdG9yKG9iamVjdCk6Ci0KLSAgICBE
RUxFVEVEX0NMQVNTRVMgPSBbIldlYktpdERPTUVudGl0eVJlZmVyZW5jZSIsICJXZWJLaXRET01I
VE1MQmFzZUZvbnRFbGVtZW50Il0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeW1ib2xfZmls
ZXMsIGZpbGVfaGFuZGxlKToKLSAgICAgICAgc2VsZi5fc3ltYm9sX2ZpbGVzID0gc3ltYm9sX2Zp
bGVzCi0gICAgICAgIHNlbGYuX2ZpbGVfaGFuZGxlID0gZmlsZV9oYW5kbGUKLQotICAgIGRlZiB3
cml0ZV9oZWFkZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiB3cml0ZV9zZWN0aW9u
KHNlbGYsIHN5bWJvbF9maWxlKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgot
Ci0gICAgZGVmIHdyaXRlX2RlbGV0ZWRfY2xhc3NlcyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIHdyaXRlX2Zvb3RlcihzZWxmKToKLSAgICAgICAg
cGFzcwotCi0gICAgZGVmIHdyaXRlKHNlbGYsIHN0cmluZyk6Ci0gICAgICAgIHNlbGYuX2ZpbGVf
aGFuZGxlLndyaXRlKHN0cmluZykKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgaXNfZGVw
cmVjYXRlZF9zeW1ib2xfZmlsZShmaWxlX3BhdGgpOgotICAgICAgICByZXR1cm4gJ1dlYktpdERP
TURlcHJlY2F0ZWQnIGluIGZpbGVfcGF0aAotCi0gICAgZGVmIGdlbmVyYXRlKHNlbGYpOgotICAg
ICAgICBzZWxmLndyaXRlX2hlYWRlcigpCi0gICAgICAgIGZvciBzeW1ib2xfZmlsZSBpbiBzZWxm
Ll9zeW1ib2xfZmlsZXM6Ci0gICAgICAgICAgICBpZiBXZWJLaXRET01Eb2NHZW5lcmF0b3IuaXNf
ZGVwcmVjYXRlZF9zeW1ib2xfZmlsZShzeW1ib2xfZmlsZSk6Ci0gICAgICAgICAgICAgICAgY29u
dGludWUKLSAgICAgICAgICAgIHNlbGYud3JpdGVfc2VjdGlvbihzeW1ib2xfZmlsZSkKLSAgICAg
ICAgc2VsZi53cml0ZV9kZWxldGVkX2NsYXNzZXMoKQotICAgICAgICBzZWxmLndyaXRlX2Zvb3Rl
cigpCi0KLQotY2xhc3MgV2ViS2l0RE9NRG9jR2VuZXJhdG9yU0dNTChXZWJLaXRET01Eb2NHZW5l
cmF0b3IpOgotICAgIGRlZiB3cml0ZV9oZWFkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYud3JpdGUo
JycnPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lT
Ly9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKLSAgICAgICAgICAgICAgICJodHRwOi8vd3d3
Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgWwotPCFFTlRJ
VFkgdmVyc2lvbiBTWVNURU0gInZlcnNpb24ueG1sIj4KLV0+Ci08Ym9vayBpZD0iaW5kZXgiIHht
bG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIj4KLSAgPGJvb2tpbmZvPgot
ICAgIDx0aXRsZT5XZWJLaXRET01HVEsrIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotICAgIDxy
ZWxlYXNlaW5mbz5mb3IgV2ViS2l0RE9NR1RLKyAmdmVyc2lvbjs8L3JlbGVhc2VpbmZvPgotICA8
L2Jvb2tpbmZvPgotCi0gIDxjaGFwdGVyPgotICAgIDx0aXRsZT5DbGFzcyBPdmVydmlldzwvdGl0
bGU+Ci0nJycpCi0KLSAgICBkZWYgd3JpdGVfc2VjdGlvbihzZWxmLCBzeW1ib2xfZmlsZSk6Ci0g
ICAgICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzeW1ib2xfZmlsZSkKLSAgICAgICAg
c2VsZi53cml0ZSgnICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC8lcyIvPlxuJyAlIGJhc2VuYW1l
LnJlcGxhY2UoIi5zeW1ib2xzIiwgIi54bWwiKSkKLQotICAgIGRlZiB3cml0ZV9kZWxldGVkX2Ns
YXNzZXMoc2VsZik6Ci0gICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuREVMRVRFRF9DTEFT
U0VTOgotICAgICAgICAgICAgc2VsZi53cml0ZSgnICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC8l
cy54bWwiLz5cbicgJSBjbGFzc19uYW1lKQotCi0gICAgZGVmIHdyaXRlX2Zvb3RlcihzZWxmKToK
LSAgICAgICAgc2VsZi53cml0ZSgnJycgIDwvY2hhcHRlcj4KLQotICA8aW5kZXggaWQ9ImluZGV4
LWFsbCI+Ci0gICAgPHRpdGxlPkluZGV4PC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvYXBpLWluZGV4LWZ1bGwueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwv
aW5kZXg+Ci0gIDxpbmRleCBpZD0iYXBpLWluZGV4LWRlcHJlY2F0ZWQiIHJvbGU9ImRlcHJlY2F0
ZWQiPgotICAgIDx0aXRsZT5JbmRleCBvZiBkZXByZWNhdGVkIHN5bWJvbHM8L3RpdGxlPgotICAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9hcGktaW5kZXgtZGVwcmVjYXRlZC54bWwiPjx4aTpmYWxs
YmFjayAvPjwveGk6aW5jbHVkZT4KLSAgPC9pbmRleD4KLQotICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvYW5ub3RhdGlvbi1nbG9zc2FyeS54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4K
LTwvYm9vaz4KLScnJykKLQotCi1jbGFzcyBXZWJLaXRET01Eb2NHZW5lcmF0b3JTZWN0aW9ucyhX
ZWJLaXRET01Eb2NHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeW1ib2xfZmls
ZXMsIGZpbGVfaGFuZGxlKToKLSAgICAgICAgc3VwZXIoV2ViS2l0RE9NRG9jR2VuZXJhdG9yU2Vj
dGlvbnMsIHNlbGYpLl9faW5pdF9fKHN5bWJvbF9maWxlcywgZmlsZV9oYW5kbGUpCi0KLSAgICAg
ICAgc2VsZi5fZmlyc3RfZGVjYW1lbGl6ZV9yZSA9IHJlLmNvbXBpbGUoJyguKShbQS1aXVthLXpd
KyknKQotICAgICAgICBzZWxmLl9zZWNvbmRfZGVjYW1lbGl6ZV9yZSA9IHJlLmNvbXBpbGUoJyhb
YS16MC05XSkoW0EtWl0pJykKLSAgICAgICAgc2VsZi5fZG9tX2NsYXNzX3JlID0gcmUuY29tcGls
ZSgnKF5XZWJLaXRET00pKC4rKSQnKQotICAgICAgICBzZWxmLl9mdW5jdGlvbl9yZSA9IHJlLmNv
bXBpbGUoJ14uKyAoLispXCgoLispXCkkJykKLSAgICAgICAgc2VsZi5fY29uc3RhbnRfcmUgPSBy
ZS5jb21waWxlKCdeW0EtWl9dKyQnKQotCi0gICAgICAgIHNlbGYuZGVwcmVjYXRlZF9zeW1ib2xz
ID0ge30KLSAgICAgICAgZm9yIHN5bWJvbF9maWxlIGluIHN5bWJvbF9maWxlczoKLSAgICAgICAg
ICAgIGlmIFdlYktpdERPTURvY0dlbmVyYXRvci5pc19kZXByZWNhdGVkX3N5bWJvbF9maWxlKHN5
bWJvbF9maWxlKToKLSAgICAgICAgICAgICAgICBzZWxmLl9kZXByZWNhdGVkX3N5bWJvbHMgPSBz
ZWxmLl9maW5kX2RlcHJlY2F0ZWRfc3ltYm9scyhzeW1ib2xfZmlsZSkKLQotICAgIGRlZiBfZG9t
X2NsYXNzKHNlbGYsIGNsYXNzX25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fZG9tX2NsYXNz
X3JlLnN1YihyJ1wyJywgY2xhc3NfbmFtZSkKLQotICAgIGRlZiBfZG9tX2NsYXNzX2RlY2FtZWxp
emUoc2VsZiwgY2xhc3NfbmFtZSk6Ci0gICAgICAgIHMxID0gc2VsZi5fZmlyc3RfZGVjYW1lbGl6
ZV9yZS5zdWIocidcMV9cMicsIHNlbGYuX2RvbV9jbGFzcyhjbGFzc19uYW1lKSkKLSAgICAgICAg
cmV0dmFsID0gc2VsZi5fc2Vjb25kX2RlY2FtZWxpemVfcmUuc3ViKHInXDFfXDInLCBzMSkKLQot
ICAgICAgICAjIEZpeCBzb21lIGV4Y2VwdGlvbnMuCi0gICAgICAgIHJldHZhbCA9IHJldHZhbC5y
ZXBsYWNlKCdXZWJfS2l0JywgJ1dlYktpdCcpCi0gICAgICAgIHJldHZhbCA9IHJldHZhbC5yZXBs
YWNlKCdYX1BhdGgnLCAnWFBhdGgnKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgn
SFRNTElfRnJhbWUnLCAnSFRNTF9JRnJhbWUnKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVw
bGFjZSgnSFRNTEJSJywgJ0hUTUxfQlInKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFj
ZSgnSFRNTEhSJywgJ0hUTUxfSFInKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgn
SFRNTExJJywgJ0hUTUxfTEknKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgnSFRN
TEQnLCAnSFRNTF9EJykKLSAgICAgICAgcmV0dmFsID0gcmV0dmFsLnJlcGxhY2UoJ0hUTUxPJywg
J0hUTUxfTycpCi0gICAgICAgIHJldHZhbCA9IHJldHZhbC5yZXBsYWNlKCdIVE1MVScsICdIVE1M
X1UnKQotCi0gICAgICAgIHJldHVybiByZXR2YWwKLQotICAgIGRlZiBfZGVsZXRlZF9jbGFzcyhz
ZWxmLCBmdW5jdGlvbik6Ci0gICAgICAgIGZvciBkZWxldGVkX2NsYXNzIGluIHNlbGYuREVMRVRF
RF9DTEFTU0VTOgotICAgICAgICAgICAgZGVjYW1lbGl6ZWQgPSAnd2Via2l0X2RvbV8lcycgJSBz
ZWxmLl9kb21fY2xhc3NfZGVjYW1lbGl6ZShkZWxldGVkX2NsYXNzKS5sb3dlcigpCi0gICAgICAg
ICAgICBpZiBmdW5jdGlvbi5zdGFydHN3aXRoKGRlY2FtZWxpemVkKToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZXRlZF9jbGFzcwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9m
aW5kX2RlcHJlY2F0ZWRfc3ltYm9scyhzZWxmLCBzeW1ib2xfZmlsZSk6Ci0gICAgICAgIHJldHZh
bCA9IHt9Ci0gICAgICAgIGYgPSBvcGVuKHN5bWJvbF9maWxlLCAncicpCi0gICAgICAgIGZvciBs
aW5lIGluIGYucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICBtYXRjaCA9IHNlbGYuX2Z1bmN0aW9u
X3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgbWF0Y2g6Ci0gICAgICAgICAgICAg
ICAgY29udGludWUKLQotICAgICAgICAgICAgZnVuY3Rpb24gPSBtYXRjaC5ncm91cCgxKQotICAg
ICAgICAgICAgYXJncyA9IG1hdGNoLmdyb3VwKDIpLnNwbGl0KCcsICcpCi0gICAgICAgICAgICBj
bGFzc19uYW1lID0gYXJnc1swXS5zdHJpcCgnKicpCi0gICAgICAgICAgICByZXR2YWwuc2V0ZGVm
YXVsdChjbGFzc19uYW1lLCBbXSkuYXBwZW5kKGZ1bmN0aW9uKQotICAgICAgICBmLmNsb3NlKCkK
LQotICAgICAgICByZXR1cm4gcmV0dmFsCi0KLSAgICBkZWYgX3N5bWJvbF9saXN0KHNlbGYsIHN5
bWJvbF9maWxlKToKLSAgICAgICAgcmV0dmFsID0gW10KLSAgICAgICAgZiA9IG9wZW4oc3ltYm9s
X2ZpbGUsICdyJykKLSAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKLSAgICAgICAg
ICAgIG1hdGNoID0gc2VsZi5fY29uc3RhbnRfcmUubWF0Y2gobGluZSkKLSAgICAgICAgICAgIGlm
IG1hdGNoOgotICAgICAgICAgICAgICAgIHJldHZhbC5hcHBlbmQobGluZS5zdHJpcCgnXG4nKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBtYXRjaCA9IHNlbGYuX2Z1
bmN0aW9uX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgbWF0Y2ggb3IgbWF0Y2gu
Z3JvdXAoMSkuZW5kc3dpdGgoJ2dldF90eXBlJyk6Ci0gICAgICAgICAgICAgICAgY29udGludWUK
LSAgICAgICAgICAgIHJldHZhbC5hcHBlbmQobWF0Y2guZ3JvdXAoMSkpCi0KLSAgICAgICAgcmV0
dXJuIHJldHZhbAotCi0gICAgZGVmIHdyaXRlX3NlY3Rpb24oc2VsZiwgc3ltYm9sX2ZpbGUpOgot
ICAgICAgICBjbGFzc19uYW1lID0gb3MucGF0aC5iYXNlbmFtZShzeW1ib2xfZmlsZSkucmVwbGFj
ZSgiLnN5bWJvbHMiLCAiIikKLSAgICAgICAgaXNfY3VzdG9tID0gY2xhc3NfbmFtZSA9PSAnV2Vi
S2l0RE9NQ3VzdG9tJwotICAgICAgICBpc19pbnRlcmZhY2UgPSBjbGFzc19uYW1lIGluIFsnV2Vi
S2l0RE9NRXZlbnRUYXJnZXQnLCAnV2ViS2l0RE9NTm9kZUZpbHRlcicsICdXZWJLaXRET01YUGF0
aE5TUmVzb2x2ZXInXQotICAgICAgICBpc19vYmplY3QgPSBjbGFzc19uYW1lID09ICdXZWJLaXRE
T01PYmplY3QnCi0gICAgICAgIHNlbGYud3JpdGUoJzxTRUNUSU9OPlxuJykKLSAgICAgICAgc2Vs
Zi53cml0ZSgnPEZJTEU+JXM8L0ZJTEU+XG48VElUTEU+JXM8L1RJVExFPlxuJyAlIChjbGFzc19u
YW1lLCBjbGFzc19uYW1lKSkKLSAgICAgICAgaWYgbm90IGlzX2N1c3RvbToKLSAgICAgICAgICAg
IHNlbGYud3JpdGUoJyVzXG4nICUgY2xhc3NfbmFtZSkKLSAgICAgICAgc2VsZi53cml0ZSgnXG4n
KQotICAgICAgICBzZWxmLndyaXRlKCdcbicuam9pbihzZWxmLl9zeW1ib2xfbGlzdChzeW1ib2xf
ZmlsZSkpICsgJ1xuJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVwcmVjYXRlZF9mdW5j
dGlvbnMgPSBzZWxmLl9kZXByZWNhdGVkX3N5bWJvbHNbY2xhc3NfbmFtZV0KLSAgICAgICAgICAg
IHNlbGYud3JpdGUoJ1xuJy5qb2luKGRlcHJlY2F0ZWRfZnVuY3Rpb25zKSArICdcbicpCi0gICAg
ICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgaWYgbm90IGlz
X2N1c3RvbToKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1xuPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
XG4nKQotICAgICAgICAgICAgaWYgaXNfaW50ZXJmYWNlOgotICAgICAgICAgICAgICAgIHNlbGYu
d3JpdGUoJyVzSWZhY2VcbicgJSBjbGFzc19uYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICBzZWxmLndyaXRlKCclc0NsYXNzXG4nICUgY2xhc3NfbmFtZSkKLSAgICAgICAg
ICAgIGRvbV9jbGFzcyA9IHNlbGYuX2RvbV9jbGFzc19kZWNhbWVsaXplKGNsYXNzX25hbWUpLnVw
cGVyKCkKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1dFQktJVF9ET01fVFlQRV8lc1xuJyAlIGRv
bV9jbGFzcykKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1dFQktJVF9ET01fJXNcbicgJSBkb21f
Y2xhc3MpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NX0lTXyVzXG4nICUgZG9t
X2NsYXNzKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV8lc19DTEFTU1xuJyAl
IGRvbV9jbGFzcykKLSAgICAgICAgICAgIGlmIGlzX2ludGVyZmFjZToKLSAgICAgICAgICAgICAg
ICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NXyVzX0dFVF9JRkFDRVxuJyAlIGRvbV9jbGFzcykKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV9J
U18lc19DTEFTU1xuJyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdX
RUJLSVRfRE9NXyVzX0dFVF9DTEFTU1xuJyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgIHNlbGYu
d3JpdGUoJ1xuPFNVQlNFQ1RJT04gUHJpdmF0ZT5cbicpCi0gICAgICAgICAgICBpZiBpc19vYmpl
Y3Q6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnJXNQcml2YXRlXG4nICUgY2xhc3NfbmFt
ZSkKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ3dlYmtpdF9kb21fJXNfZ2V0X3R5cGVcbicgJSBk
b21fY2xhc3MubG93ZXIoKSkKLSAgICAgICAgc2VsZi53cml0ZSgnPC9TRUNUSU9OPlxuXG4nKQot
Ci0gICAgZGVmIHdyaXRlX2RlbGV0ZWRfY2xhc3NlcyhzZWxmKToKLSAgICAgICAgZm9yIGNsYXNz
X25hbWUgaW4gc2VsZi5ERUxFVEVEX0NMQVNTRVM6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCc8
U0VDVElPTj5cbicpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCc8RklMRT4lczwvRklMRT5cbjxU
SVRMRT4lczwvVElUTEU+XG4nICUgKGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQotICAgICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJ1xuJy5qb2luKFtuYW1lIGZvciBu
YW1lIGluIHNlbGYuX2RlcHJlY2F0ZWRfc3ltYm9sc1tjbGFzc19uYW1lXSBpZiBub3QgbmFtZS5l
bmRzd2l0aCgnZ2V0X3R5cGUnKV0pICsgJ1xuJykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJv
cjoKLSAgICAgICAgICAgICAgICAjIEEgZGVsZXRlZCBjbGFzcyB3aXRoIG5vIHB1YmxpYyBtZXRo
b2RzIGRvZXNuJ3QgaGF2ZSBkZXByZWNhdGVkIHN5bWJvbHMuCi0gICAgICAgICAgICAgICAgcGFz
cwotICAgICAgICAgICAgc2VsZi53cml0ZSgnXG48U1VCU0VDVElPTiBTdGFuZGFyZD5cbicpCi0g
ICAgICAgICAgICBkb21fY2xhc3MgPSBzZWxmLl9kb21fY2xhc3NfZGVjYW1lbGl6ZShjbGFzc19u
YW1lKS51cHBlcigpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NX1RZUEVfJXNc
bicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NXyVzXG4n
ICUgZG9tX2NsYXNzKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV9JU18lc1xu
JyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1dFQktJVF9ET01fJXNfQ0xB
U1NcbicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NX0lT
XyVzX0NMQVNTXG4nICUgZG9tX2NsYXNzKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lU
X0RPTV8lc19HRVRfQ0xBU1NcbicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICBzZWxmLndyaXRl
KCdcbjxTVUJTRUNUSU9OIFByaXZhdGU+XG4nKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnd2Vi
a2l0X2RvbV8lc19nZXRfdHlwZVxuJyAlIHNlbGYuX2RvbV9jbGFzc19kZWNhbWVsaXplKGNsYXNz
X25hbWUpLmxvd2VyKCkpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCc8L1NFQ1RJT04+XG5cbicp
Ci0KLSAgICBkZWYgd3JpdGVfZm9vdGVyKHNlbGYpOgotICAgICAgICBzZWxmLndyaXRlKCc8U0VD
VElPTj5cbicpCi0gICAgICAgIHNlbGYud3JpdGUoJzxGSUxFPndlYmtpdGRvbWRlZmluZXM8L0ZJ
TEU+XG48VElUTEU+V2ViS2l0RE9NRGVmaW5lczwvVElUTEU+XG4nKQotICAgICAgICBzZWxmLndy
aXRlKCc8U1VCU0VDVElPTiBQcml2YXRlPlxuJykKLSAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lU
X0FQSVxuV0VCS0lUX0RFUFJFQ0FURURcbldFQktJVF9ERVBSRUNBVEVEX0ZPUlxuJykKLSAgICAg
ICAgc2VsZi53cml0ZSgnPC9TRUNUSU9OPlxuXG4nKQotCi0KLWRlZiB3cml0ZV9kb2NfZmlsZXMo
bW9kdWxlX25hbWUpOgotICAgIGRvY19kaXIgPSBjb21tb24uYnVpbGRfcGF0aCgnRGVyaXZlZFNv
dXJjZXMnLCAnd2Via2l0ZG9tJywgJ2RvY3MnKQotCi0gICAgdHJ5OgotICAgICAgICBvcy5ta2Rp
cihkb2NfZGlyKQotICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICBpZiBlLmVycm5vICE9
IGVycm5vLkVFWElTVCBvciBub3Qgb3MucGF0aC5pc2Rpcihkb2NfZGlyKToKLSAgICAgICAgICAg
IHN5cy5zdGRlcnIud3JpdGUoIkNvdWxkIG5vdCBjcmVhdGUgZG9jIGRpciBhdCAlczogJXNcbiIg
JSAoZG9jX2Rpciwgc3RyKGUpKSkKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICB3aXRo
IG9wZW4ob3MucGF0aC5qb2luKGRvY19kaXIsICclcy1zZWN0aW9ucy50eHQnICUgbW9kdWxlX25h
bWUpLCAndycpIGFzIHNlY3Rpb25zX2ZpbGU6Ci0gICAgICAgIGdlbmVyYXRvciA9IFdlYktpdERP
TURvY0dlbmVyYXRvclNlY3Rpb25zKGdldF9hbGxfd2Via2l0ZG9tX3N5bWJvbF9maWxlcygpLCBz
ZWN0aW9uc19maWxlKQotICAgICAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKQotICAgIHdpdGggb3Bl
bihvcy5wYXRoLmpvaW4oZG9jX2RpciwgJ3dlYmtpdGRvbWd0ay1kb2NzLnNnbWwnKSwgJ3cnKSBh
cyBzZ21sX2ZpbGU6Ci0gICAgICAgIGdlbmVyYXRvciA9IFdlYktpdERPTURvY0dlbmVyYXRvclNH
TUwoZ2V0X2FsbF93ZWJraXRkb21fc3ltYm9sX2ZpbGVzKCksIHNnbWxfZmlsZSkKLSAgICAgICAg
Z2VuZXJhdG9yLmdlbmVyYXRlKCkKLQotCi1kZWYgaGVhZGVyX25hbWVfbGlzdF9mcm9tX2d0a2Rv
Y19jb25maWdfZmlsZSgpOgotICAgIGNvbmZpZ19maWxlID0gY29tbW9uLmJ1aWxkX3BhdGgoJ2d0
a2RvYy13ZWJraXRkb20uY2ZnJykKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoY29uZmlnX2Zp
bGUpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDb3VsZCBub3QgZmluZCBjb25maWcgZmls
ZSBhdCAlc1xuIiAlIGNvbmZpZ19maWxlKQotICAgICAgICByZXR1cm4gc3lzLmV4aXQoMSkKLQot
ICAgIGNvbmZpZyA9IFNhZmVDb25maWdQYXJzZXIoKQotICAgIGNvbmZpZy5yZWFkKGNvbmZpZ19m
aWxlKQotICAgIG1vZHVsZV9uYW1lID0gY29uZmlnLnNlY3Rpb25zKClbMF0KLSAgICByZXR1cm4g
W29zLnBhdGguYmFzZW5hbWUoZikgZm9yIGYgaW4gc3RyKGNvbmZpZy5nZXQobW9kdWxlX25hbWUs
ICdoZWFkZXJzJykpLnJlcGxhY2UoJzsnLCAnICcpLnNwbGl0KCldCi0KLQotZGVmIGdldF9hbGxf
d2Via2l0ZG9tX3N5bWJvbF9maWxlcygpOgotICAgIHN0YXRpY19zeW1ib2xfZmlsZXNfcGF0aCA9
IGNvbW1vbi50b3BfbGV2ZWxfcGF0aCgnU291cmNlJywgJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAn
Z29iamVjdCcpCi0gICAgZ2VuZXJhdGVkX3N5bWJvbF9maWxlc19wYXRoID0gY29tbW9uLmJ1aWxk
X3BhdGgoJ0Rlcml2ZWRTb3VyY2VzJywgJ3dlYmtpdGRvbScpCi0KLSAgICBzeW1ib2xfZmlsZXMg
PSBbXQotICAgIGZvciBoZWFkZXJfbmFtZSBpbiBoZWFkZXJfbmFtZV9saXN0X2Zyb21fZ3RrZG9j
X2NvbmZpZ19maWxlKCk6Ci0gICAgICAgICMgd2Via2l0ZG9tZGVmaW5lcy5oIGRvZXNuJ3QgaGF2
ZSBhIGNvcnJlc3BvbmRpbmcgc3ltYm9scyBmaWxlIGFuZCB3ZWJraXRkb20uc3ltYm9scyBpcyBh
Ci0gICAgICAgICMgZmlsZSBjb250YWluaW5nIHRoZSBleHBlY3RlZCBzeW1ib2xzIHJlc3VsdHMu
Ci0gICAgICAgIGlmIGhlYWRlcl9uYW1lIGluICgid2Via2l0ZG9tLmgiLCAid2Via2l0ZG9tZGVm
aW5lcy5oIik6Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIHN5bWJvbF9maWxlID0g
aGVhZGVyX25hbWUucmVwbGFjZSgiLmgiLCAiLnN5bWJvbHMiKQotICAgICAgICBwYXRoID0gb3Mu
cGF0aC5qb2luKHN0YXRpY19zeW1ib2xfZmlsZXNfcGF0aCwgc3ltYm9sX2ZpbGUpCi0gICAgICAg
IGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICAgICAgc3ltYm9sX2ZpbGVzLmFwcGVu
ZChwYXRoKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9p
bihnZW5lcmF0ZWRfc3ltYm9sX2ZpbGVzX3BhdGgsIHN5bWJvbF9maWxlKQotICAgICAgICBpZiBv
cy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAgIHN5bWJvbF9maWxlcy5hcHBlbmQocGF0
aCkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICByZXR1cm4gc3ltYm9sX2ZpbGVzCg==
</data>
<flag name="review"
          id="310962"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287602</attachid>
            <date>2016-08-31 23:27:27 -0700</date>
            <delta_ts>2016-08-31 23:27:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wkdom-freeze.diff</filename>
            <type>text/plain</type>
            <size>4265914</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzOWE3NzViLi5hYTc0ZWEx
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUgQEAK
IDIwMTYtMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CisgICAgICAgIFtHVEtdIE1vdmUgR09iamVjdCBET00gYmluZGluZ3MgdG8gV2ViS2l0MiBsYXll
ciBhbmQgc3RvcCBhdXRvIGdlbmVyYXRpbmcgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNDM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWlj
aGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgKiBTb3VyY2UvUGxhdGZvcm1HVEsuY21ha2U6Cisg
ICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2U6CisKKzIwMTYtMDgtMzEgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFVucmV2
aWV3ZWQuIEJ1bXAgR1RLKyB2ZXJzaW9ucyBudW1iZXJzLgogCiAgICAgICAgICogU291cmNlL2Nt
YWtlL09wdGlvbnNHVEsuY21ha2U6CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYWY0ZDJlMy4uOGIzZDRkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9QbGF0Zm9ybUdU
Sy5jbWFrZQpAQCAtNiw3ICs2LDYgQEAgaWYgKEVOQUJMRV9JTlRST1NQRUNUSU9OKQogZW5kaWYg
KCkKIAogbGlzdChBUFBFTkQgRG9jdW1lbnRhdGlvbkRlcGVuZGVuY2llcwotICAgIEdPYmplY3RE
T01CaW5kaW5ncwogICAgIFdlYktpdDIKICAgICAiJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIgogICAg
ICIke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay0ke1dFQktJVEdUS19BUElfVkVSU0lPTn0tc2VjdGlvbnMudHh0IgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDAxYTM1ZTYuLmY0YjhiYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAor
MjAxNi0wOC0zMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS10gTW92ZSBHT2JqZWN0IERPTSBiaW5kaW5ncyB0byBXZWJLaXQyIGxheWVy
IGFuZCBzdG9wIGF1dG8gZ2VuZXJhdGluZyB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0MzgKKworICAgICAgICBSZXZpZXdlZCBieSBNaWNo
YWVsIENhdGFuemFyby4KKworICAgICAgICBSZW1vdmUgdGhlIHNjcmlwdHMgdG8gZ2VuZXJhdGUg
R09iamVjdCBET00gYmluZGluZ3MgYW5kIHRoZSB0ZXN0cy4gQWxzbyByZW1vdmUgYWxsIEdPYmpl
Y3QgaWZkZWZzIGZyb20gdGhlIGlkbCBmaWxlcy4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNt
YWtlOgorICAgICAgICAqIGJpbmRpbmdzL2dvYmplY3Q6IFJlbW92ZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTaGVldC5pZGw6CisgICAgICAgICogY3NzL1JHQkNvbG9yLmlkbDoKKyAgICAgICAg
KiBkb20vRE9NQ29yZUV4Y2VwdGlvbi5pZGw6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0
aW9uLmlkbDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudFR5cGUuaWRsOgorICAgICAgICAqIGRvbS9FbGVtZW50LmlkbDoKKyAgICAgICAgKiBkb20v
RXZlbnQuaWRsOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5pZGw6CisgICAgICAgICogZG9t
L0tleWJvYXJkRXZlbnQuaWRsOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaWRsOgorICAg
ICAgICAqIGRvbS9NZXNzYWdlUG9ydC5pZGw6CisgICAgICAgICogZG9tL01vdXNlRXZlbnQuaWRs
OgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaWRsOgorICAgICAgICAqIGRvbS9Ob2RlLmlk
bDoKKyAgICAgICAgKiBkb20vUmFuZ2UuaWRsOgorICAgICAgICAqIGRvbS9TbG90YWJsZS5pZGw6
CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaWRsOgorICAgICAgICAqIGZpbGVhcGkvRmlsZUV4
Y2VwdGlvbi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGw6CisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MQ29s
bGVjdGlvbi5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaWRsOgorICAgICAgICAq
IGh0bWwvSFRNTEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5p
ZGw6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MSUZyYW1lRWxlbWVu
dC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbDoKKyAgICAg
ICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJs
ZUNlbGxFbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRs
OgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGw6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0ltYWdlRGF0YS5pZGw6Cisg
ICAgICAgICogaHRtbC9VUkxVdGlscy5pZGw6CisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJh
Y2suaWRsOgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmlkbDoKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogc3ZnL1NWR0RvY3VtZW50LmlkbDoKKyAgICAgICAg
KiBzdmcvU1ZHRWxlbWVudC5pZGw6CisgICAgICAgICogc3ZnL1NWR0V4Y2VwdGlvbi5pZGw6Cisg
ICAgICAgICogd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGw6CisgICAgICAg
ICogd29ya2Vycy9Xb3JrZXIuaWRsOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2Nv
cGUuaWRsOgorICAgICAgICAqIHhtbC9YUGF0aEV4Y2VwdGlvbi5pZGw6CisKIDIwMTYtMDgtMzEg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10g
QWRkIGluaXRpYXRvciBwYXJhbWV0ZXIgdG8gbW9kdWxlIHBpcGVsaW5lCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc2Vzc2lvbi9IVE1MTWVkaWFFbGVtZW50TWVkaWFT
ZXNzaW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL0hUTUxNZWRp
YUVsZW1lbnRNZWRpYVNlc3Npb24uaWRsCmluZGV4IGVhNWQ4YmUuLjkzNTdhYmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9uL0hUTUxNZWRpYUVsZW1lbnRN
ZWRpYVNlc3Npb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzZXNzaW9u
L0hUTUxNZWRpYUVsZW1lbnRNZWRpYVNlc3Npb24uaWRsCkBAIC0yOCw3ICsyOCw1IEBACiBdIHBh
cnRpYWwgaW50ZXJmYWNlIEhUTUxNZWRpYUVsZW1lbnQgewogICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcga2luZDsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9H
T0JKRUNUKQogICAgIGF0dHJpYnV0ZSBNZWRpYVNlc3Npb24/IHNlc3Npb247Ci0jZW5kaWYKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0hUTUxNZWRp
YUVsZW1lbnRNZWRpYVN0cmVhbS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL0hUTUxNZWRpYUVsZW1lbnRNZWRpYVN0cmVhbS5pZGwKaW5kZXggM2FjZjRkNi4uM2EyOWVj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9IVE1MTWVk
aWFFbGVtZW50TWVkaWFTdHJlYW0uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vSFRNTE1lZGlhRWxlbWVudE1lZGlhU3RyZWFtLmlkbApAQCAtMjcsNyArMjcsNSBA
QAogICAgIENvbmRpdGlvbmFsPVZJREVPJk1FRElBX1NUUkVBTSwKIF0gcGFydGlhbCBpbnRlcmZh
Y2UgSFRNTE1lZGlhRWxlbWVudAogewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAm
JiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtTZXR0ZXJDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBhdHRyaWJ1dGUgTWVkaWFTdHJlYW0/IHNyY09iamVjdDsKLSNlbmRpZgogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZTMyM2RiYS4uZjIxZmMwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UKQEAgLTM3OSw0MDEgKzM3OSwxMyBAQCBpbmNsdWRlX2RpcmVjdG9yaWVz
KAogICAgICR7V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfQogICAgICIke1dFQkNPUkVfRElS
fS9iaW5kaW5ncy9nb2JqZWN0LyIKICAgICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKLSAgICAi
JHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfSIKICkKIAogaW5jbHVk
ZV9kaXJlY3RvcmllcyhTWVNURU0KICAgICAke1dlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNU
T1JJRVN9CiApCiAKLWxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5nc19TT1VSQ0VTCi0gICAg
YmluZGluZ3MvZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcAotICAgIGJpbmRpbmdzL2dv
YmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwCi0gICAgYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZl
bnRMaXN0ZW5lci5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcAotICAgIGJpbmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5j
cHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5jcHAKLSAgICBiaW5kaW5n
cy9nb2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuY3BwCi0gICAgYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01FdmVudFRhcmdldC5jcHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUhU
TUxQcml2YXRlLmNwcAotICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5j
cHAKLSAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU9iamVjdC5jcHAKLSAgICBiaW5kaW5n
cy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuY3BwCi0gICAgYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01YUGF0aE5TUmVzb2x2ZXIuY3BwCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9E
T01fQklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMuaAotICAgICR7REVSSVZFRF9T
T1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0ZG9tYXV0b2NsZWFudXBzLXVu
c3RhYmxlLmgKLSAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9
L3dlYmtpdGRvbWRlZmluZXMuaAotICAgICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJ
TkRJTkdTX0RJUn0vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oCi0gICAgJHtERVJJVkVEX1NP
VVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb20uaAotKQotCi1saXN0KEFQ
UEVORCBHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfSURMX0ZJTEVTCi0gICAgY3NzL0NTU1J1bGUu
aWRsCi0gICAgY3NzL0NTU1J1bGVMaXN0LmlkbAotICAgIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9u
LmlkbAotICAgIGNzcy9DU1NTdHlsZVNoZWV0LmlkbAotICAgIGNzcy9DU1NWYWx1ZS5pZGwKLSAg
ICBjc3MvTWVkaWFMaXN0LmlkbAotICAgIGNzcy9TdHlsZVNoZWV0LmlkbAotICAgIGNzcy9TdHls
ZVNoZWV0TGlzdC5pZGwKLQotICAgIGRvbS9BdHRyLmlkbAotICAgIGRvbS9DREFUQVNlY3Rpb24u
aWRsCi0gICAgZG9tL0NoYXJhY3RlckRhdGEuaWRsCi0gICAgZG9tL0NvbW1lbnQuaWRsCi0gICAg
ZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbAotICAgIGRvbS9Eb2N1bWVudC5pZGwKLSAgICBkb20v
RG9jdW1lbnRGcmFnbWVudC5pZGwKLSAgICBkb20vRG9jdW1lbnRUeXBlLmlkbAotICAgIGRvbS9F
bGVtZW50LmlkbAotICAgIGRvbS9FdmVudC5pZGwKLSAgICBkb20vS2V5Ym9hcmRFdmVudC5pZGwK
LSAgICBkb20vTW91c2VFdmVudC5pZGwKLSAgICBkb20vTmFtZWROb2RlTWFwLmlkbAotICAgIGRv
bS9Ob2RlLmlkbAotICAgIGRvbS9Ob2RlSXRlcmF0b3IuaWRsCi0gICAgZG9tL05vZGVMaXN0Lmlk
bAotICAgIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsCi0gICAgZG9tL1JhbmdlLmlkbAot
ICAgIGRvbS9UZXh0LmlkbAotICAgIGRvbS9UcmVlV2Fsa2VyLmlkbAotICAgIGRvbS9VSUV2ZW50
LmlkbAotICAgIGRvbS9XaGVlbEV2ZW50LmlkbAotCi0gICAgZmlsZWFwaS9CbG9iLmlkbAotICAg
IGZpbGVhcGkvRmlsZS5pZGwKLSAgICBmaWxlYXBpL0ZpbGVMaXN0LmlkbAotCi0gICAgaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAotICAg
IGh0bWwvSFRNTEFyZWFFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEJSRWxlbWVudC5pZGwKLSAg
ICBodG1sL0hUTUxCYXNlRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxCb2R5RWxlbWVudC5pZGwK
LSAgICBodG1sL0hUTUxCdXR0b25FbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaWRsCi0gICAgaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKLSAgICBodG1sL0hUTUxETGlzdEVs
ZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5pZGwKLSAgICBodG1sL0hU
TUxEaXZFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTERvY3VtZW50LmlkbAotICAgIGh0bWwvSFRN
TEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAotICAgIGh0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxGb250RWxlbWVudC5pZGwKLSAgICBo
dG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxGcmFtZUVsZW1lbnQuaWRsCi0g
ICAgaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEhSRWxlbWVudC5p
ZGwKLSAgICBodG1sL0hUTUxIZWFkRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxIZWFkaW5nRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxIdG1sRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxJRnJh
bWVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTEltYWdlRWxlbWVudC5pZGwKLSAgICBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTElFbGVtZW50LmlkbAotICAgIGh0bWwv
SFRNTExhYmVsRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmlkbAotICAg
IGh0bWwvSFRNTExpbmtFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTE1hcEVsZW1lbnQuaWRsCi0g
ICAgaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTWVudUVsZW1lbnQu
aWRsCi0gICAgaHRtbC9IVE1MTWV0YUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTW9kRWxlbWVu
dC5pZGwKLSAgICBodG1sL0hUTUxPTGlzdEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaWRsCi0gICAgaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwK
LSAgICBodG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFBhcmFtRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxQcmVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFF1b3Rl
RWxlbWVudC5pZGwKLSAgICBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmlkbAotICAgIGh0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MU3R5bGVFbGVtZW50LmlkbAotICAgIGh0
bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MVGFibGVDZWxsRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1M
VGFibGVFbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5pZGwKLSAgICBo
dG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmlkbAotICAgIGh0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5pZGwKLSAgICBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MVUxp
c3RFbGVtZW50LmlkbAotCi0gICAgcGFnZS9ET01XaW5kb3cuaWRsCi0KLSAgICB4bWwvWFBhdGhF
eHByZXNzaW9uLmlkbAotICAgIHhtbC9YUGF0aFJlc3VsdC5pZGwKLSkKLQotbGlzdChBUFBFTkQg
R09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgTW9kdWxlcy9iYXR0ZXJ5
L0JhdHRlcnlNYW5hZ2VyLmlkbAotCi0gICAgTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQvR2Ft
ZXBhZC5pZGwKLSAgICBNb2R1bGVzL2dhbWVwYWQvZGVwcmVjYXRlZC9HYW1lcGFkTGlzdC5pZGwK
LQotICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaWRsCi0KLSAgICBNb2R1bGVz
L21lZGlhc291cmNlL1ZpZGVvUGxheWJhY2tRdWFsaXR5LmlkbAotCi0gICAgTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYURldmljZXMuaWRsCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9OYXZpZ2F0
b3JNZWRpYURldmljZXMuaWRsCi0gICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrU3Vw
cG9ydGVkQ29uc3RyYWludHMuaWRsCi0KLSAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VJbmZvLmlk
bAotICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZVF1b3RhLmlkbAotCi0gICAgTW9kdWxlcy9zcGVl
Y2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmlkbAotICAgIE1vZHVsZXMvc3BlZWNoL1NwZWVj
aFN5bnRoZXNpcy5pZGwKLSAgICBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNFdmVudC5p
ZGwKLSAgICBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaWRsCi0gICAg
TW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2UuaWRsCi0KLSAgICBNb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlLmlkbAotCi0gICAgY3NzL0RPTUNTU05hbWVzcGFjZS5pZGwKLSAg
ICBjc3MvTWVkaWFRdWVyeUxpc3QuaWRsCi0gICAgY3NzL1N0eWxlTWVkaWEuaWRsCi0KLSAgICBk
b20vRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5pZGwKLSAgICBkb20vRE9NU3RyaW5nTGlzdC5pZGwK
LSAgICBkb20vRE9NU3RyaW5nTWFwLmlkbAotICAgIGRvbS9NZXNzYWdlUG9ydC5pZGwKLSAgICBk
b20vVG91Y2guaWRsCi0gICAgZG9tL1dlYktpdE5hbWVkRmxvdy5pZGwKLQotICAgIGh0bWwvRE9N
VG9rZW5MaXN0LmlkbAotICAgIGh0bWwvSFRNTERldGFpbHNFbGVtZW50LmlkbAotICAgIGh0bWwv
SFRNTEtleWdlbkVsZW1lbnQuaWRsCi0gICAgaHRtbC9IVE1MTWVkaWFFbGVtZW50LmlkbAotICAg
IGh0bWwvTWVkaWFDb250cm9sbGVyLmlkbAotICAgIGh0bWwvTWVkaWFFcnJvci5pZGwKLSAgICBo
dG1sL1RpbWVSYW5nZXMuaWRsCi0gICAgaHRtbC9WYWxpZGl0eVN0YXRlLmlkbAotCi0gICAgbG9h
ZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuaWRsCi0KLSAgICBwYWdlL0JhclByb3Au
aWRsCi0gICAgcGFnZS9ET01TZWxlY3Rpb24uaWRsCi0gICAgcGFnZS9IaXN0b3J5LmlkbAotICAg
IHBhZ2UvTG9jYXRpb24uaWRsCi0gICAgcGFnZS9OYXZpZ2F0b3IuaWRsCi0gICAgcGFnZS9QZXJm
b3JtYW5jZS5pZGwKLSAgICBwYWdlL1BlcmZvcm1hbmNlRW50cnkuaWRsCi0gICAgcGFnZS9QZXJm
b3JtYW5jZU5hdmlnYXRpb24uaWRsCi0gICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5pZGwKLSAg
ICBwYWdlL1NjcmVlbi5pZGwKLSAgICBwYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5pZGwKLSAgICBw
YWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCi0gICAgcGFnZS9XZWJLaXROYW1l
c3BhY2UuaWRsCi0gICAgcGFnZS9XZWJLaXRQb2ludC5pZGwKLQotICAgIHBsdWdpbnMvRE9NTWlt
ZVR5cGUuaWRsCi0gICAgcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmlkbAotICAgIHBsdWdpbnMv
RE9NUGx1Z2luLmlkbAotICAgIHBsdWdpbnMvRE9NUGx1Z2luQXJyYXkuaWRsCi0KLSAgICBzdG9y
YWdlL1N0b3JhZ2UuaWRsCi0pCi0KLWlmIChFTkFCTEVfV0VCX0FOSU1BVElPTlMpCi0gICAgbGlz
dChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgICAgIGFu
aW1hdGlvbi9BbmltYXRhYmxlLmlkbAotICAgICAgICBhbmltYXRpb24vQW5pbWF0aW9uRWZmZWN0
LmlkbAotICAgICAgICBhbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCi0gICAgICAgIGFu
aW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbi5pZGwKLSAgICAgICAgYW5pbWF0aW9uL0RvY3VtZW50
VGltZWxpbmUuaWRsCi0gICAgICAgIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5pZGwKLSAgICAg
ICAgYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5pZGwKLSAgICApCi1lbmRpZiAoKQotCi1pZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERP
TUJpbmRpbmdzVW5zdGFibGVfSURMX0ZJTEVTCi0gICAgICAgIGh0bWwvSFRNTEF1ZGlvRWxlbWVu
dC5pZGwKLSAgICAgICAgaHRtbC9IVE1MVmlkZW9FbGVtZW50LmlkbAotCi0gICAgICAgIGh0bWwv
dHJhY2svQXVkaW9UcmFjay5pZGwKLSAgICAgICAgaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5p
ZGwKLSAgICAgICAgaHRtbC90cmFjay9EYXRhQ3VlLmlkbAotICAgICAgICBodG1sL3RyYWNrL1Rl
eHRUcmFjay5pZGwKLSAgICAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaWRsCi0gICAgICAg
IGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5pZGwKLSAgICAgICAgaHRtbC90cmFjay9UZXh0
VHJhY2tMaXN0LmlkbAotICAgICAgICBodG1sL3RyYWNrL1RyYWNrRXZlbnQuaWRsCi0gICAgICAg
IGh0bWwvdHJhY2svVlRUQ3VlLmlkbAotICAgICAgICBodG1sL3RyYWNrL1ZpZGVvVHJhY2suaWRs
Ci0gICAgICAgIGh0bWwvdHJhY2svVmlkZW9UcmFja0xpc3QuaWRsCi0gICAgKQotZW5kaWYgKCkK
LQotaWYgKEVOQUJMRV9RVU9UQSkKLSAgICBsaXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NV
bnN0YWJsZV9JRExfRklMRVMKLSAgICAgICAgTW9kdWxlcy9xdW90YS9ET01XaW5kb3dRdW90YS5p
ZGwKLSAgICAgICAgTW9kdWxlcy9xdW90YS9OYXZpZ2F0b3JTdG9yYWdlUXVvdGEuaWRsCi0gICAg
ICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZUVycm9yQ2FsbGJhY2suaWRsCi0gICAgICAgIE1vZHVs
ZXMvcXVvdGEvU3RvcmFnZUluZm8uaWRsCi0gICAgICAgIE1vZHVsZXMvcXVvdGEvU3RvcmFnZVF1
b3RhLmlkbAotICAgICAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VRdW90YUNhbGxiYWNrLmlkbAot
ICAgICAgICBNb2R1bGVzL3F1b3RhL1N0b3JhZ2VVc2FnZUNhbGxiYWNrLmlkbAotICAgICAgICBN
b2R1bGVzL3F1b3RhL1dvcmtlck5hdmlnYXRvclN0b3JhZ2VRdW90YS5pZGwKLSAgICApCi1lbmRp
ZiAoKQotCi1zZXQoR09iamVjdERPTUJpbmRpbmdzX1NUQVRJQ19DTEFTU19MSVNUIEN1c3RvbSBE
ZXByZWNhdGVkIEV2ZW50VGFyZ2V0IE5vZGVGaWx0ZXIgT2JqZWN0IFhQYXRoTlNSZXNvbHZlcikK
LQotc2V0KEdPYmplY3RET01CaW5kaW5nc1N0YWJsZV9DTEFTU19MSVNUICR7R09iamVjdERPTUJp
bmRpbmdzX1NUQVRJQ19DTEFTU19MSVNUfSkKLXNldChHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVf
SU5TVEFMTEVEX0hFQURFUlMKLSAgICAgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklO
RElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMuaAotICAgICAke0RFUklWRURfU09VUkNF
U19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMuaAotICAgICAke0RF
UklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbS5oCi0gICAg
ICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgKLSAgICAg
JHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01EZXByZWNhdGVkLmgKLSAg
ICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5o
Ci0gICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRl
ci5oCi0gICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0
LmgKLSAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0aE5T
UmVzb2x2ZXIuaAotKQotCi1zZXQoR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVfSU5TVEFMTEVE
X0hFQURFUlMKLSAgICAgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElS
fS93ZWJraXRkb21hdXRvY2xlYW51cHMtdW5zdGFibGUuaAotICAgICAke0RFUklWRURfU09VUkNF
U19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaAot
ICAgICAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbVVuc3Rh
YmxlLmgKLSkKLQotZm9yZWFjaCAoZmlsZSAke0dPYmplY3RET01CaW5kaW5nc1N0YWJsZV9JRExf
RklMRVN9KQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoY2xhc3NuYW1lICR7ZmlsZX0gTkFN
RV9XRSkKLSAgICBsaXN0KEFQUEVORCBHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfQ0xBU1NfTElT
VCAke2NsYXNzbmFtZX0pCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzU3RhYmxl
X0lOU1RBTExFRF9IRUFERVJTICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdT
X0RJUn0vV2ViS2l0RE9NJHtjbGFzc25hbWV9LmgpCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERP
TUJpbmRpbmdzVW5zdGFibGVfSU5TVEFMTEVEX0hFQURFUlMgJHtERVJJVkVEX1NPVVJDRVNfR09C
SkVDVF9ET01fQklORElOR1NfRElSfS9XZWJLaXRET00ke2NsYXNzbmFtZX1VbnN0YWJsZS5oKQot
ZW5kZm9yZWFjaCAoKQotCi1mb3JlYWNoIChmaWxlICR7R09iamVjdERPTUJpbmRpbmdzVW5zdGFi
bGVfSURMX0ZJTEVTfSkKLSAgICBnZXRfZmlsZW5hbWVfY29tcG9uZW50KGNsYXNzbmFtZSAke2Zp
bGV9IE5BTUVfV0UpCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRpbmdzVW5zdGFibGVf
Q0xBU1NfTElTVCAke2NsYXNzbmFtZX0pCi0gICAgbGlzdChBUFBFTkQgR09iamVjdERPTUJpbmRp
bmdzVW5zdGFibGVfSU5TVEFMTEVEX0hFQURFUlMgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9E
T01fQklORElOR1NfRElSfS9XZWJLaXRET00ke2NsYXNzbmFtZX0uaCkKLWVuZGZvcmVhY2ggKCkK
LQotc2V0KEdPQkpFQ1RfRE9NX0JJTkRJTkdTX0ZFQVRVUkVTX0RFRklORVMgIkxBTkdVQUdFX0dP
QkpFQ1Q9MSAke0ZFQVRVUkVfREVGSU5FU19XSVRIX1NQQUNFX1NFUEFSQVRPUn0iKQotc3RyaW5n
KFJFUExBQ0UgIkVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFPTEiICIiIEdPQkpFQ1RfRE9NX0JJTkRJ
TkdTX0ZFQVRVUkVTX0RFRklORVMgJHtHT0JKRUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJ
TkVTfSkKLXN0cmluZyhSRVBMQUNFIFJFR0VYICJFTkFCTEVfU1ZHW0EtWl9dKz0xIiAiIiBHT0JK
RUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJTkVTICR7R09CSkVDVF9ET01fQklORElOR1Nf
RkVBVFVSRVNfREVGSU5FU30pCi0KLWZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtERVJJVkVEX1NPVVJD
RVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfSkKLQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAg
IE9VVFBVVCAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtp
dGRvbWRlZmluZXMuaAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0
cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtHT2JqZWN0
RE9NQmluZGluZ3NTdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJD
T1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwgZGVm
aW5lcyA+ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0
ZG9tZGVmaW5lcy5oCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb21kZWZpbmVzLXVu
c3RhYmxlLmgKLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvZ29i
amVjdC1nZW5lcmF0ZS1oZWFkZXJzLnBsCi0gICAgQ09NTUFORCBlY2hvICR7R09iamVjdERPTUJp
bmRpbmdzVW5zdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwgZGVmaW5l
cy11bnN0YWJsZSA+ICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oCi0pCi0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAg
ICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElSfS93ZWJr
aXRkb20uaAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2Jq
ZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtHT2JqZWN0RE9NQmlu
ZGluZ3NTdGFibGVfQ0xBU1NfTElTVH0gfCAke1BFUkxfRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJ
Un0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwgZ2RvbSA+ICR7
REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdTX0RJUn0vd2Via2l0ZG9tLmgKLSkK
LQotYWRkX2N1c3RvbV9jb21tYW5kKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19HT0JK
RUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5oCi0gICAgREVQRU5E
UyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVy
cy5wbAotICAgIENPTU1BTkQgZWNobyAke0dPYmplY3RET01CaW5kaW5nc1N0YWJsZV9DTEFTU19M
SVNUfSB8ICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRz
L2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbCBhdXRvY2xlYW51cHMgPiAke0RFUklWRURfU09V
UkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5oCi0p
Ci0KLWFkZF9jdXN0b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfR09C
SkVDVF9ET01fQklORElOR1NfRElSfS93ZWJraXRkb21hdXRvY2xlYW51cHMtdW5zdGFibGUuaAot
ICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nb2JqZWN0LWdlbmVy
YXRlLWhlYWRlcnMucGwKLSAgICBDT01NQU5EIGVjaG8gJHtHT2JqZWN0RE9NQmluZGluZ3NVbnN0
YWJsZV9DTEFTU19MSVNUfSB8ICR7UEVSTF9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9iaW5k
aW5ncy9zY3JpcHRzL2dvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbCBhdXRvY2xlYW51cHMgPiAk
e0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbWF1dG9j
bGVhbnVwcy11bnN0YWJsZS5oCi0pCi0KLSMgU29tZSBvZiB0aGUgc3RhdGljIGhlYWRlcnMgYXJl
IGluY2x1ZGVkIGJ5IGdlbmVyYXRlZCBwdWJsaWMgaGVhZGVycyB3aXRoIGluY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01Gb28uaD4uCi0jIFdlIG5lZWQgdGhvc2UgaGVhZGVycyBpbiB0aGUgZGVy
aXZlZCBzb3VyY2VzIHRvIGJlIGluIHdlYmtpdGRvbSBkaXJlY3RvcnkuCi1zZXQoR09iamVjdERP
TUJpbmRpbmdzX1NUQVRJQ19IRUFERVJfTkFNRVMgJHtHT2JqZWN0RE9NQmluZGluZ3NfU1RBVElD
X0NMQVNTX0xJU1R9IEN1c3RvbVVuc3RhYmxlKQotZm9yZWFjaCAoY2xhc3NuYW1lICR7R09iamVj
dERPTUJpbmRpbmdzX1NUQVRJQ19IRUFERVJfTkFNRVN9KQotICAgIGFkZF9jdXN0b21fY29tbWFu
ZCgKLSAgICAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJTkRJTkdT
X0RJUn0vV2ViS2l0RE9NJHtjbGFzc25hbWV9LmgKLSAgICAgICAgREVQRU5EUyAke1dFQkNPUkVf
RElSfS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTSR7Y2xhc3NuYW1lfS5oCi0gICAgICAgIENP
TU1BTkQgbG4gLW4gLXMgLWYgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T00ke2NsYXNzbmFtZX0uaCAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19E
SVJ9Ci0gICAgKQotICAgIGxpc3QoQVBQRU5EIEdPYmplY3RET01CaW5kaW5nc19TVEFUSUNfR0VO
RVJBVEVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElOR1NfRElS
fS9XZWJLaXRET00ke2NsYXNzbmFtZX0uaCkKLWVuZGZvcmVhY2ggKCkKLQotYWRkX2N1c3RvbV90
YXJnZXQoZmFrZS1nZW5lcmF0ZWQtd2Via2l0ZG9tLWhlYWRlcnMKLSAgICBERVBFTkRTICR7R09i
amVjdERPTUJpbmRpbmdzX1NUQVRJQ19HRU5FUkFURURfU09VUkNFU30KLSkKLQotc2V0KEdPYmpl
Y3RET01CaW5kaW5nc19JRExfRklMRVMgJHtHT2JqZWN0RE9NQmluZGluZ3NTdGFibGVfSURMX0ZJ
TEVTfSAke0dPYmplY3RET01CaW5kaW5nc1Vuc3RhYmxlX0lETF9GSUxFU30pCi1zZXQoQURESVRJ
T05BTF9CSU5ESU5HU19ERVBFTkRFTkNJRVMKLSAgICAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9n
b2JqZWN0L3dlYmtpdGRvbS5zeW1ib2xzCi0gICAgJHtXSU5ET1dfQ09OU1RSVUNUT1JTX0ZJTEV9
Ci0gICAgJHtXT1JLRVJHTE9CQUxTQ09QRV9DT05TVFJVQ1RPUlNfRklMRX0KLSAgICAke0RFRElD
QVRFRFdPUktFUkdMT0JBTFNDT1BFX0NPTlNUUlVDVE9SU19GSUxFfQotKQotR0VORVJBVEVfQklO
RElOR1MoR09iamVjdERPTUJpbmRpbmdzX1NPVVJDRVMKLSAgICAiJHtHT2JqZWN0RE9NQmluZGlu
Z3NfSURMX0ZJTEVTfSIKLSAgICAiJHtXRUJDT1JFX0RJUn0iCi0gICAgIiR7SURMX0lOQ0xVREVT
fSIKLSAgICAiJHtHT0JKRUNUX0RPTV9CSU5ESU5HU19GRUFUVVJFU19ERUZJTkVTfSIKLSAgICAk
e0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9Ci0gICAgV2ViS2l0RE9N
IEdPYmplY3QgY3BwCi0gICAgJHtJRExfQVRUUklCVVRFU19GSUxFfQotICAgICR7U1VQUExFTUVO
VEFMX0RFUEVOREVOQ1lfRklMRX0KLSAgICAke0FERElUSU9OQUxfQklORElOR1NfREVQRU5ERU5D
SUVTfSkKLQogYWRkX2RlZmluaXRpb25zKC1EQlVJTERJTkdfV0VCS0lUKQotYWRkX2RlZmluaXRp
b25zKC1EV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJKQotCi1hZGRfbGlicmFyeShHT2JqZWN0
RE9NQmluZGluZ3MgU1RBVElDICR7R09iamVjdERPTUJpbmRpbmdzX1NPVVJDRVN9KQotCi1XRUJL
SVRfU0VUX0VYVFJBX0NPTVBJTEVSX0ZMQUdTKEdPYmplY3RET01CaW5kaW5ncykKLQotYWRkX2Rl
cGVuZGVuY2llcyhHT2JqZWN0RE9NQmluZGluZ3MKLSAgICBXZWJDb3JlCi0gICAgZmFrZS1nZW5l
cmF0ZWQtd2Via2l0ZG9tLWhlYWRlcnMKLSkKLQotZmlsZShXUklURSAke0NNQUtFX0JJTkFSWV9E
SVJ9L2d0a2RvYy13ZWJraXRkb20uY2ZnCi0gICAgIlt3ZWJraXRkb21ndGstJHtXRUJLSVRHVEtf
QVBJX1ZFUlNJT059XVxuIgotICAgICJwa2djb25maWdfZmlsZT0ke1dlYktpdDJfUEtHQ09ORklH
X0ZJTEV9XG4iCi0gICAgIm5hbWVzcGFjZT13ZWJraXRfZG9tXG4iCi0gICAgImNmbGFncz0tSSR7
Q01BS0VfU09VUkNFX0RJUn0vU291cmNlXG4iCi0gICAgIiAgICAgICAtSSR7V0VCQ09SRV9ESVJ9
L2JpbmRpbmdzXG4iCi0gICAgIiAgICAgICAtSSR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2dvYmpl
Y3RcbiIKLSAgICAiICAgICAgIC1JJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01fQklORElO
R1NfRElSfVxuIgotICAgICJkb2NfZGlyPSR7REVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9NX0JJ
TkRJTkdTX0RJUn0vZG9jc1xuIgotICAgICJzb3VyY2VfZGlycz0ke0RFUklWRURfU09VUkNFU19H
T0JKRUNUX0RPTV9CSU5ESU5HU19ESVJ9XG4iCi0gICAgIiAgICAgICAgICAgICR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL2dvYmplY3RcbiIKLSAgICAiaGVhZGVycz0ke0dPYmplY3RET01CaW5kaW5n
c1N0YWJsZV9JTlNUQUxMRURfSEVBREVSU31cbiIKLSAgICAibWFpbl9zZ21sX2ZpbGU9d2Via2l0
ZG9tZ3RrLWRvY3Muc2dtbFxuIgotKQotCi1pbnN0YWxsKEZJTEVTICR7R09iamVjdERPTUJpbmRp
bmdzU3RhYmxlX0lOU1RBTExFRF9IRUFERVJTfQotICAgICAgICBERVNUSU5BVElPTiAiJHtXRUJL
SVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJraXRkb20iCi0pCi0KLSMgTWFrZSB1bnN0YWJs
ZSBoZWFkZXIgb3B0aW9uYWwgaWYgdGhleSBkb24ndCBleGlzdAotaW5zdGFsbChGSUxFUyAke0dP
YmplY3RET01CaW5kaW5nc1Vuc3RhYmxlX0lOU1RBTExFRF9IRUFERVJTfQotICAgICAgICBERVNU
SU5BVElPTiAiJHtXRUJLSVRHVEtfSEVBREVSX0lOU1RBTExfRElSfS93ZWJraXRkb20iCi0gICAg
ICAgIE9QVElPTkFMCi0pCi0KLSMgU29tZSBpbnN0YWxsZWQgaGVhZGVycyBhcmUgbm90IG9uIHRo
ZSBsaXN0IG9mIGhlYWRlcnMgdXNlZCBmb3IgZ2lyIGdlbmVyYXRpb24uCi1zZXQoR09iamVjdERP
TUJpbmRpbmdzX0dJUl9IRUFERVJTICR7R09iamVjdERPTUJpbmRpbmdzU3RhYmxlX0lOU1RBTExF
RF9IRUFERVJTfSkKLWxpc3QoUkVNT1ZFX0lURU0gR09iamVjdERPTUJpbmRpbmdzX0dJUl9IRUFE
RVJTCi0gICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuaAotICAgICBi
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuaAotICAgICBiaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTU9iamVjdC5oCi0gICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBh
dGhOU1Jlc29sdmVyLmgKLSkKLQotIyBQcm9wYWdhdGUgdGhpcyB2YXJpYWJsZSB0byB0aGUgcGFy
ZW50IHNjb3BlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIG90aGVyIHBhcnRzIG9mIHRoZSBi
dWlsZC4KLXNldChHT2JqZWN0RE9NQmluZGluZ3NfR0lSX0hFQURFUlMgJHtHT2JqZWN0RE9NQmlu
ZGluZ3NfR0lSX0hFQURFUlN9IFBBUkVOVF9TQ09QRSkKIAogaWYgKEVOQUJMRV9TTU9PVEhfU0NS
T0xMSU5HKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9uLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbi5pZGwKaW5kZXggZGRlMTQ0Yy4uNjlkNmJi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9u
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb24uaWRs
CkBAIC0yOSw4ICsyOSw2IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX0FOSU1BVElPTlMKIF0g
cGFydGlhbCBpbnRlcmZhY2UgRG9jdW1lbnQgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JK
RUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKSAvLyBXb3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIEdP
YmplY3QgYmluZGluZyBnZW5lcmF0b3IuCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50
VGltZWxpbmUgdGltZWxpbmU7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRp
b25zKCk7Ci0jZW5kaWYKLX07IAorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiZmRmYTNlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSwzICsw
LDAgQEAKLWdib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9pc19lZGl0
ZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9pc19lZGl0ZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCopCi1n
Ym9vbGVhbiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X21lc3NhZ2VfaGFuZGxlcnNfcG9z
dF9tZXNzYWdlKFdlYktpdERPTURPTVdpbmRvdyosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIq
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01E
ZXByZWNhdGVkLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTURlcHJlY2F0ZWQuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI1
Y2RhZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTURlcHJlY2F0ZWQuc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLXZv
aWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwoV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKQotZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF9vdXRlcl9odG1sKFdlYktpdERPTUhUTUxFbGVtZW50KikKLWdjaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfaHRtbChXZWJLaXRET01IVE1MRWxlbWVudCop
Ci12b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9vdXRlcl9odG1sKFdlYktpdERPTUhU
TUxFbGVtZW50KiwgY29uc3QgZ2NoYXIqLCBHRXJyb3IqKikKLVdlYktpdERPTUhUTUxDb2xsZWN0
aW9uKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfY2hpbGRyZW4oV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqKQotV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRzX2J5X2NsYXNzX25hbWUoV2ViS2l0RE9NRG9jdW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJL
aXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25h
bWUoV2ViS2l0RE9NRG9jdW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCog
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfbnMoV2ViS2l0RE9N
RG9jdW1lbnQqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKikKLVdlYktpdERPTU5vZGVMaXN0
KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKFdlYktpdERPTUVs
ZW1lbnQqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9ucyhXZWJLaXRET01FbGVtZW50KiwgY29uc3Qg
Z2NoYXIqLCBjb25zdCBnY2hhciopCi1XZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lKFdlYktpdERPTUVsZW1lbnQqLCBjb25zdCBn
Y2hhciopCi1HVHlwZSB3ZWJraXRfZG9tX2VudGl0eV9yZWZlcmVuY2VfZ2V0X3R5cGUodm9pZCkK
LWdib29sZWFuIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X2V4cGFuZF9lbnRpdHlfcmVmZXJl
bmNlcyhXZWJLaXRET01UcmVlV2Fsa2VyKikKLVdlYktpdERPTUVudGl0eVJlZmVyZW5jZSogd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZShXZWJLaXRET01Eb2N1bWVu
dCosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX25vZGVfaXRl
cmF0b3JfZ2V0X2V4cGFuZF9lbnRpdHlfcmVmZXJlbmNlcyhXZWJLaXRET01Ob2RlSXRlcmF0b3Iq
KQotR1R5cGUgd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X2dldF90eXBlKHZvaWQp
Ci1nY2hhciogd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X2dldF9jb2xvcihXZWJL
aXRET01IVE1MQmFzZUZvbnRFbGVtZW50KikKLWdjaGFyKiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9m
b250X2VsZW1lbnRfZ2V0X2ZhY2UoV2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudCopCi1nbG9u
ZyB3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRN
TEJhc2VGb250RWxlbWVudCopCi12b2lkIHdlYmtpdF9kb21faHRtbF9iYXNlX2ZvbnRfZWxlbWVu
dF9zZXRfY29sb3IoV2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudCosIGNvbnN0IGdjaGFyKikK
LXZvaWQgd2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVtZW50X3NldF9mYWNlKFdlYktpdERP
TUhUTUxCYXNlRm9udEVsZW1lbnQqLCBjb25zdCBnY2hhciopCi12b2lkIHdlYmtpdF9kb21faHRt
bF9iYXNlX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZShXZWJLaXRET01IVE1MQmFzZUZvbnRFbGVtZW50
KiwgZ2xvbmcpCi1XZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZShXZWJL
aXRET01Ob2RlKiwgZ2Jvb2xlYW4pCi1nY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVm
YXVsdF9jaGFyc2V0KFdlYktpdERPTURvY3VtZW50KikKLVdlYktpdERPTVRleHQqIHdlYmtpdF9k
b21fdGV4dF9yZXBsYWNlX3dob2xlX3RleHQoV2ViS2l0RE9NVGV4dCosIGNvbnN0IGdjaGFyKiwg
R0Vycm9yKiopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2Fw
dHVyZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KikKLXZvaWQgd2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50X3NldF9kZXNpZ25fbW9kZShXZWJLaXRET01IVE1MRG9jdW1lbnQqLCBjb25zdCBnY2hh
ciopCi1nY2hhciogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9kZXNpZ25fbW9kZShXZWJL
aXRET01IVE1MRG9jdW1lbnQqKQotZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRf
Y29tcGF0X21vZGUoV2ViS2l0RE9NSFRNTERvY3VtZW50KikKLVdlYktpdERPTUhUTUxDb2xsZWN0
aW9uKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3NjcmlwdHMoV2ViS2l0RE9NSFRNTERv
Y3VtZW50KikKLVdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1l
bnRfZ2V0X2VtYmVkcyhXZWJLaXRET01IVE1MRG9jdW1lbnQqKQotV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24qIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfcGx1Z2lucyhXZWJLaXRET01IVE1M
RG9jdW1lbnQqKQotZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9nZXRfbmFtZXNwYWNlX3VyaShXZWJL
aXRET01Ob2RlKikKLWdjaGFyKiB3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZWZpeChXZWJLaXRET01O
b2RlKikKLXZvaWQgd2Via2l0X2RvbV9ub2RlX3NldF9wcmVmaXgoV2ViS2l0RE9NTm9kZSosIGNv
bnN0IGdjaGFyKiwgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV9ub2RlX2dldF9sb2NhbF9u
YW1lKFdlYktpdERPTU5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3YzU3NTU4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuc3ltYm9scworKysgL2Rldi9udWxs
CkBAIC0xLDYgKzAsMCBAQAotR1R5cGUgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZ2V0X3R5cGUo
dm9pZCkKLXZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqLCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqKQotZ2Jvb2xl
YW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqLCBHQ2FsbGJhY2ssIGdib29sZWFuLCBncG9p
bnRlcikKLWdib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNoYXIqLCBHQ2FsbGJhY2ssIGdib29s
ZWFuKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVy
X3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNoYXIqLCBHQ2xvc3Vy
ZSosIGdib29sZWFuKQotZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyX3dpdGhfY2xvc3VyZShXZWJLaXRET01FdmVudFRhcmdldCosIGNvbnN0IGNo
YXIqLCBHQ2xvc3VyZSosIGdib29sZWFuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9scwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkZDNmNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9scworKysgL2Rldi9u
dWxsCkBAIC0xLDE4ICswLDAgQEAKLUdUeXBlIHdlYmtpdF9kb21fbm9kZV9maWx0ZXJfZ2V0X3R5
cGUodm9pZCkKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfQUNDRVBUCi1XRUJLSVRfRE9NX05PREVf
RklMVEVSX1JFSkVDVAotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FMTAotV0VCS0lUX0RP
TV9OT0RFX0ZJTFRFUl9TSE9XX0FUVFJJQlVURQotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9X
X0NEQVRBX1NFQ1RJT04KLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19DT01NRU5UCi1XRUJL
SVRfRE9NX05PREVfRklMVEVSX1NIT1dfRE9DVU1FTlQKLVdFQktJVF9ET01fTk9ERV9GSUxURVJf
U0hPV19ET0NVTUVOVF9GUkFHTUVOVAotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0RPQ1VN
RU5UX1RZUEUKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19FTEVNRU5UCi1XRUJLSVRfRE9N
X05PREVfRklMVEVSX1NIT1dfRU5USVRZCi1XRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRU5U
SVRZX1JFRkVSRU5DRQotV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX05PVEFUSU9OCi1XRUJL
SVRfRE9NX05PREVfRklMVEVSX1NIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTgotV0VCS0lUX0RP
TV9OT0RFX0ZJTFRFUl9TSE9XX1RFWFQKLVdFQktJVF9ET01fTk9ERV9GSUxURVJfU0tJUAotZ3No
b3J0IHdlYmtpdF9kb21fbm9kZV9maWx0ZXJfYWNjZXB0X25vZGUoV2ViS2l0RE9NTm9kZUZpbHRl
ciosIFdlYktpdERPTU5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01PYmplY3Quc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJmNDZkMjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01PYmplY3Quc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAK
LUdUeXBlIHdlYmtpdF9kb21fb2JqZWN0X2dldF90eXBlKHZvaWQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5zeW1i
b2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXIuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYzNTBjZi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVhQYXRo
TlNSZXNvbHZlci5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1HVHlwZSB3
ZWJraXRfZG9tX3hwYXRoX25zX3Jlc29sdmVyX2dldF90eXBlKHZvaWQpCi1nY2hhciogd2Via2l0
X2RvbV94cGF0aF9uc19yZXNvbHZlcl9sb29rdXBfbmFtZXNwYWNlX3VyaShXZWJLaXRET01YUGF0
aE5TUmVzb2x2ZXIqLCBjb25zdCBnY2hhciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTJmNTg0OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyAvZGV2L251bGwKQEAgLTEs
MjAzNSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExl
aWdodG9uIDxsa2NsQGxrY2wubmV0PgotIyBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8g
PHNvdG9AZnJlZWRlc2t0b3Aub3JnPgotIyBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KLSMgQ29weXJpZ2h0IChDKSAyMDA5IEFkYW0gRGluZ2xlIDxhZGFtQHlv
cmJhLm9yZz4KLSMgQ29weXJpZ2h0IChDKSAyMDA5IEppbSBOZWxzb24gPGppbUB5b3JiYS5vcmc+
Ci0jIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgotIwotIyBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0jIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0jIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgotCi1wYWNrYWdlIENvZGVHZW5lcmF0b3JHT2JqZWN0OwotCi11c2UgY29u
c3RhbnQgRmlsZU5hbWVQcmVmaXggPT4gIldlYktpdERPTSI7Ci11c2UgRmlsZTo6QmFzZW5hbWU7
Ci11c2UgRmluZEJpbjsKLQotIyBHbG9iYWwgVmFyaWFibGVzCi1teSAlaW1wbEluY2x1ZGVzID0g
KCk7Ci1teSAlaGRySW5jbHVkZXMgPSAoKTsKLQotbXkgQHN0YWJsZVN5bWJvbHMgPSAoKTsKLQot
bXkgJGRlZmluZVR5cGVNYWNybyA9ICJHX0RFRklORV9UWVBFIjsKLW15ICRkZWZpbmVUeXBlSW50
ZXJmYWNlSW1wbGVtZW50YXRpb24gPSAiKSI7Ci1teSBAdHh0RXZlbnRMaXN0ZW5lcnMgPSAoKTsK
LW15IEB0eHRJbnN0YWxsUHJvcHMgPSAoKTsKLW15IEB0eHRTZXRQcm9wcyA9ICgpOwotbXkgQHR4
dEdldFByb3BzID0gKCk7Ci0KLW15ICRjbGFzc05hbWUgPSAiIjsKLQotIyBGSVhNRTogdGhpcyBz
aG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGZ1bmN0aW9uIHRoYXQgcmVjdXJzZXMgdXAgdGhlIHRy
ZWUKLSMgdG8gZmluZCB0aGUgYWN0dWFsIGJhc2UgdHlwZS4KLW15ICViYXNlVHlwZUhhc2ggPSAo
Ik9iamVjdCIgPT4gMSwgIk5vZGUiID0+IDEsICJOb2RlTGlzdCIgPT4gMSwgIk5hbWVkTm9kZU1h
cCIgPT4gMSwgIkRPTUltcGxlbWVudGF0aW9uIiA9PiAxLAotICAgICAgICAgICAgICAgICAgICAi
RXZlbnQiID0+IDEsICJDU1NSdWxlIiA9PiAxLCAiQ1NTVmFsdWUiID0+IDEsICJTdHlsZVNoZWV0
IiA9PiAxLCAiTWVkaWFMaXN0IiA9PiAxLAotICAgICAgICAgICAgICAgICAgICAiQ291bnRlciIg
PT4gMSwgIlJlY3QiID0+IDEsICJSR0JDb2xvciIgPT4gMSwgIlhQYXRoRXhwcmVzc2lvbiIgPT4g
MSwgIlhQYXRoUmVzdWx0IiA9PiAxLAotICAgICAgICAgICAgICAgICAgICAiTm9kZUl0ZXJhdG9y
IiA9PiAxLCAiVHJlZVdhbGtlciIgPT4gMSwgIkJsb2IiID0+IDEsICJET01Ub2tlbkxpc3QiID0+
IDEsCi0gICAgICAgICAgICAgICAgICAgICJIVE1MQ29sbGVjdGlvbiIgPT4gMSwgIlRleHRUcmFj
a0N1ZSIgPT4gMSwgIkFuaW1hdGlvblRpbWVsaW5lIiA9PiAxLCAiQW5pbWF0aW9uRWZmZWN0IiA9
PiAxKTsKLQotIyBPbmx5IG9iamVjdHMgZGVyaXZlZCBmcm9tIE5vZGUgYXJlIHJlbGVhc2VkIGJ5
IHRoZSBET00gb2JqZWN0IGNhY2hlIGFuZCBjYW4gYmUKLSMgdHJhbnNmZXIgbm9uZS4gSWRlYWxs
eSB3ZSBjb3VsZCB1c2UgR2V0QmFzZUNsYXNzIHdpdGggdGhlIHBhcmVudCB0eXBlIHRvIGNoZWNr
Ci0jIHdoZXRoZXIgaXQncyBOb2RlLCBidXQgdW5mb3J0dW5hdGVseSB3ZSBvbmx5IGhhdmUgdGhl
IG5hbWUgb2YgdGhlIHJldHVybiB0eXBlLAotIyBhbmQgd2UgY2FuJ3Qga25vdyBpdHMgcGFyZW50
IGJhc2UgY2xhc3MuIFNpbmNlIHRoZXJlIGFyZSBmZXdlciBjbGFzc2VzIGluIHRoZQotIyBBUEkg
dGhhdCBhcmUgbm90IGRlcml2ZWQgZnJvbSBOb2RlLCB3ZSB3aWxsIGxpc3QgdGhlbSBoZXJlIHRv
IGRlY2lkZSB0aGUKLSMgdHJhbnNmZXIgdHlwZS4KLW15ICV0cmFuc2ZlckZ1bGxUeXBlSGFzaCA9
ICgiQXVkaW9UcmFjayIgPT4gMSwgIkF1ZGlvVHJhY2tMaXN0IiA9PiAxLCAiQmFyUHJvcCIgPT4g
MSwgIkJhdHRlcnlNYW5hZ2VyIiA9PiAxLAotICAgICJDU1NSdWxlTGlzdCIgPT4gMSwgIkNTU1N0
eWxlRGVjbGFyYXRpb24iID0+IDEsICJDU1NTdHlsZVNoZWV0IiA9PiAxLCAiRG9jdW1lbnRUaW1l
bGluZSIgPT4gMSwKLSAgICAiRE9NQXBwbGljYXRpb25DYWNoZSIgPT4gMSwgIkRPTU1pbWVUeXBl
IiA9PiAxLCAiRE9NTWltZVR5cGVBcnJheSIgPT4gMSwgIkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24i
ID0+IDEsCi0gICAgIkRPTVBsdWdpbiIgPT4gMSwgIkRPTVBsdWdpbkFycmF5IiA9PiAxLAotICAg
ICJET01TZWxlY3Rpb24iID0+IDEsICJET01TZXR0YWJsZVRva2VuTGlzdCIgPT4gMSwgIkRPTVN0
cmluZ0xpc3QiID0+IDEsCi0gICAgIkRPTVdpbmRvdyIgPT4gMSwgIkRPTVdpbmRvd0NTUyIgPT4g
MSwgIkV2ZW50VGFyZ2V0IiA9PiAxLAotICAgICJGaWxlIiA9PiAxLCAiRmlsZUxpc3QiID0+IDEs
ICJHYW1lcGFkIiA9PiAxLCAiR2FtZXBhZExpc3QiID0+IDEsCi0gICAgIkdlb2xvY2F0aW9uIiA9
PiAxLCAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uIiA9PiAxLCAiSGlzdG9yeSIgPT4gMSwKLSAgICAi
S2V5Ym9hcmRFdmVudCIgPT4gMSwgIktleWZyYW1lRWZmZWN0IiA9PiAxLCAiTWVkaWFFcnJvciIg
PT4gMSwgIk1lZGlhQ29udHJvbGxlciIgPT4gMSwKLSAgICAiTW91c2VFdmVudCIgPT4gMSwgIk1l
ZGlhUXVlcnlMaXN0IiA9PiAxLCAiTmF2aWdhdG9yIiA9PiAxLCAiTm9kZUZpbHRlciIgPT4gMSwK
LSAgICAiUGVyZm9ybWFuY2UiID0+IDEsICJQZXJmb3JtYW5jZUVudHJ5IiA9PiAxLCAiUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uIiA9PiAxLCAiUGVyZm9ybWFuY2VUaW1pbmciID0+IDEsCi0gICAgIlJh
bmdlIiA9PiAxLCAiU2NyZWVuIiA9PiAxLCAiU3BlZWNoU3ludGhlc2lzIiA9PiAxLCAiU3BlZWNo
U3ludGhlc2lzVm9pY2UiID0+IDEsCi0gICAgIlN0b3JhZ2UiID0+IDEsICJTdHlsZU1lZGlhIiA9
PiAxLCAiVGV4dFRyYWNrIiA9PiAxLCAiVGV4dFRyYWNrQ3VlTGlzdCIgPT4gMSwKLSAgICAiVGlt
ZVJhbmdlcyIgPT4gMSwgIlRvdWNoIiA9PiAxLCAiVUlFdmVudCIgPT4gMSwgIlVzZXJNZXNzYWdl
SGFuZGxlciIgPT4gMSwgIlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UiID0+IDEsCi0gICAg
IlZhbGlkaXR5U3RhdGUiID0+IDEsICJWaWRlb1RyYWNrIiA9PiAxLCAiV2ViS2l0TmFtZWRGbG93
IiA9PiAxLAotICAgICJXZWJLaXROYW1lc3BhY2UiID0+IDEsICJXZWJLaXRQb2ludCIgPT4gMSwg
IldoZWVsRXZlbnQiID0+IDEsICJYUGF0aE5TUmVzb2x2ZXIiID0+IDEpOwotCi0jIExpc3Qgb2Yg
ZnVuY3Rpb24gcGFyYW1ldGVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIE5VTEwKLW15ICRjYW5C
ZU51bGxQYXJhbXMgPSB7Ci0gICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0
ZV9ucycgPT4gWyduYW1lc3BhY2VVUkknXSwKLSAgICAnd2Via2l0X2RvbV9kb2N1bWVudF9jcmVh
dGVfZWxlbWVudF9ucycgPT4gWyduYW1lc3BhY2VVUkknXSwKLSAgICAnd2Via2l0X2RvbV9kb2N1
bWVudF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZScgPT4gWyduYW1lJ10sCi0gICAgJ3dlYmtpdF9k
b21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3InID0+IFsnZmlsdGVyJ10sCi0gICAgJ3dl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVfd2Fsa2VyJyA9PiBbJ2ZpbHRlciddLAotICAg
ICd3ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlJyA9PiBbJ2luUmVzdWx0JywgJ3Jlc29sdmVy
J10sCi0gICAgJ3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X292ZXJyaWRlX3N0eWxlJyA9PiBbJ3Bz
ZXVkb0VsZW1lbnQnXSwKLSAgICAnd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRl
X2RvY3VtZW50JyA9PiBbJ25hbWVzcGFjZVVSSScsICdkb2N0eXBlJ10sCi0gICAgJ3dlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfY29tcHV0ZWRfc3R5bGUnID0+IFsncHNldWRvRWxlbWVudCddLAot
ICAgICd3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ucycgPT4gWyduYW1lc3BhY2VV
UkknXSwKLSAgICAnd2Via2l0X2RvbV9ub2RlX2luc2VydF9iZWZvcmUnID0+IFsncmVmQ2hpbGQn
XSwKLX07Ci0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldyB7Ci0gICAgbXkgJG9iamVj
dCA9IHNoaWZ0OwotICAgIG15ICRyZWZlcmVuY2UgPSB7IH07Ci0KLSAgICAkY29kZUdlbmVyYXRv
ciA9IHNoaWZ0OwotCi0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci19Ci0KLW15ICRs
aWNlbmNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci1FT0YKLQotc3ViIFNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlIHsKLSAgICBteSAkaW50ZXJm
YWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJGludGVyZmFjZSBlcSAiRXZlbnRUYXJnZXQiOwot
fQotCi1zdWIgR2V0UGFyZW50Q2xhc3NOYW1lIHsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7
Ci0gICAgbXkgJHBhcmVudCA9ICRpbnRlcmZhY2UtPnBhcmVudDsKLQotICAgIHJldHVybiAiV2Vi
S2l0RE9NT2JqZWN0IiB1bmxlc3MgJHBhcmVudCBhbmQgIVNob3VsZEJlRXhwb3NlZEFzSW50ZXJm
YWNlKCRwYXJlbnQpOwotICAgIHJldHVybiAiV2ViS2l0RE9NIiAuICRwYXJlbnQ7Ci19Ci0KLXN1
YiBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1lIHsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0g
ICAgbXkgJHBhcmVudCA9ICRpbnRlcmZhY2UtPnBhcmVudDsKLQotICAgIHJldHVybiAiT2JqZWN0
IiB1bmxlc3MgJHBhcmVudCBhbmQgIVNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlKCRwYXJlbnQp
OwotICAgIHJldHVybiAkcGFyZW50OwotfQotCi1zdWIgSXNCYXNlVHlwZQotewotICAgIG15ICR0
eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gMSBpZiAkYmFzZVR5cGVIYXNoeyR0eXBlfTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotc3ViIEdldEJhc2VDbGFzcwotewotICAgICRwYXJlbnQgPSBzaGlm
dDsKLSAgICAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJHBhcmVudCBpZiAkcGFy
ZW50IGVxICJPYmplY3QiIG9yIElzQmFzZVR5cGUoJHBhcmVudCk7Ci0gICAgcmV0dXJuICJPYmpl
Y3QiIGlmIFNob3VsZEJlRXhwb3NlZEFzSW50ZXJmYWNlKCRwYXJlbnQpOwotICAgIHJldHVybiAi
RXZlbnQiIGlmICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAi
RXZlbnQiKTsKLSAgICByZXR1cm4gIkNTU1ZhbHVlIiBpZiAkcGFyZW50IGVxICJTVkdDb2xvciIg
b3IgJHBhcmVudCBlcSAiQ1NTVmFsdWVMaXN0IjsKLSAgICByZXR1cm4gIk5vZGUiOwotfQotCi0K
LSMgRnJvbSBTdHJpbmc6OkNhbWVsQ2FzZSAwLjAxCi1zdWIgY2FtZWxpemUKLXsKLSAgICAgICAg
bXkgJHMgPSBzaGlmdDsKLSAgICAgICAgam9pbignJywgbWFweyB1Y2ZpcnN0ICRfIH0gc3BsaXQo
Lyg/PD1bQS1aYS16XSlfKD89W0EtWmEtel0pfFxiLywgJHMpKTsKLX0KLQotc3ViIGRlY2FtZWxp
emUKLXsKLSAgICAgICAgbXkgJHMgPSBzaGlmdDsKLSAgICAgICAgJHMgPX4gc3soW15hLXpBLVpd
PykoW0EtWl0qKShbQS1aXSkoW2Etel0/KX17Ci0gICAgICAgICAgICAgICAgbXkgJGZjID0gcG9z
KCRzKT09MDsKLSAgICAgICAgICAgICAgICBteSAoJHAwLCRwMSwkcDIsJHAzKSA9ICgkMSxsYyQy
LGxjJDMsJDQpOwotICAgICAgICAgICAgICAgIG15ICR0ID0gJHAwIHx8ICRmYyA/ICRwMCA6ICdf
JzsKLSAgICAgICAgICAgICAgICAkdCAuPSAkcDMgPyAkcDEgPyAiJHtwMX1fJHAyJHAzIiA6ICIk
cDIkcDMiIDogIiRwMSRwMiI7Ci0gICAgICAgICAgICAgICAgJHQ7Ci0gICAgICAgIH1nZTsKLQot
ICAgICAgICAjIFNvbWUgc3RyaW5ncyBhcmUgbm90IGNvcnJlY3RseSBkZWNhbWVsaXplZCwgYXBw
bHkgZml4IHVwcwotICAgICAgICBmb3IgKCRzKSB7Ci0gICAgICAgICAgICBzL2RvbWNzcy9kb21f
Y3NzLzsKLSAgICAgICAgICAgIHMvZG9taHRtbC9kb21faHRtbC87Ci0gICAgICAgICAgICBzL2Rv
bWRvbS9kb21fZG9tLzsKLSAgICAgICAgICAgIHMvZG9tY2RhdGEvZG9tX2NkYXRhLzsKLSAgICAg
ICAgICAgIHMvZG9tdWkvZG9tX3VpLzsKLSAgICAgICAgICAgIHMveF9wYXRoL3hwYXRoLzsKLSAg
ICAgICAgICAgIHMvd2ViX2tpdC93ZWJraXQvOwotICAgICAgICAgICAgcy9odG1saV9mcmFtZS9o
dG1sX2lmcmFtZS87Ci0gICAgICAgICAgICBzL2h0bWxici9odG1sX2JyLzsKLSAgICAgICAgICAg
IHMvaHRtbGxpL2h0bWxfbGkvOwotICAgICAgICAgICAgcy9odG1saHIvaHRtbF9oci87Ci0gICAg
ICAgICAgICBzL2h0bWxkL2h0bWxfZC87Ci0gICAgICAgICAgICBzL2h0bWxvL2h0bWxfby87Ci0g
ICAgICAgICAgICBzL2h0bWx1L2h0bWxfdS87Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICRz
OwotfQotCi1zdWIgSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsIHsKLSAgICBteSBAY29uZGl0aW9u
YWwgPSBzcGxpdCgnXycsIHNoaWZ0KTsKLSAgICBteSBAdXBwZXJDYXNlRXhjZXB0aW9ucyA9ICgi
U1FMIiwgIkFQSSIpOwotICAgIG15IEBodW1hblJlYWRhYmxlOwotCi0gICAgZm9yICRwYXJ0IChA
Y29uZGl0aW9uYWwpIHsKLSAgICAgICAgaWYgKCFncmVwIHskXyBlcSAkcGFydH0gQHVwcGVyQ2Fz
ZUV4Y2VwdGlvbnMpIHsKLSAgICAgICAgICAgICRwYXJ0ID0gY2FtZWxpemUobGMoJHBhcnQpKTsK
LSAgICAgICAgfQotICAgICAgICBwdXNoKEBodW1hblJlYWRhYmxlLCAkcGFydCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGpvaW4oJyAnLCBAaHVtYW5SZWFkYWJsZSk7Ci19Ci0KLXN1YiBHZXRQYXJl
bnRHT2JqVHlwZSB7Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRwYXJlbnQg
PSAkaW50ZXJmYWNlLT5wYXJlbnQ7Ci0KLSAgICByZXR1cm4gIldFQktJVF9ET01fVFlQRV9PQkpF
Q1QiIHVubGVzcyAkcGFyZW50IGFuZCAhU2hvdWxkQmVFeHBvc2VkQXNJbnRlcmZhY2UoJHBhcmVu
dCk7Ci0gICAgcmV0dXJuICJXRUJLSVRfRE9NX1RZUEVfIiAuIHVjKGRlY2FtZWxpemUoKCRwYXJl
bnQpKSk7Ci19Ci0KLXN1YiBHZXRDbGFzc05hbWUgewotICAgIG15ICRuYW1lID0gc2hpZnQ7Ci0K
LSAgICByZXR1cm4gIldlYktpdERPTSRuYW1lIjsKLX0KLQotc3ViIFNraXBBdHRyaWJ1dGUgewot
ICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKLQotICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifQotICAgICAgICB8fCAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifSkgewotICAg
ICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBteSAkcHJvcFR5cGUgPSAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGU7Ci0gICAgaWYgKCRwcm9wVHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMSBpZiAkYXR0cmlidXRlLT5p
c1N0YXRpYzsKLSAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlw
ZSgkcHJvcFR5cGUpOwotICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNl
T3JGcm96ZW5BcnJheVR5cGUoJHByb3BUeXBlKTsKLQotICAgIGlmICgkY29kZUdlbmVyYXRvci0+
SXNFbnVtVHlwZSgkcHJvcFR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAg
ICMgVGhpcyBpcyBmb3IgRE9NV2luZG93LmlkbCBsb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICBpZiAo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICJsb2NhdGlvbiIpIHsKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgfQotCi0gICAgIyBUaGlzIGlzIGZvciBIVE1MSW5wdXQuaWRsIHZhbHVlQXNE
YXRlCi0gICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSBlcSAidmFsdWVBc0RhdGUi
KSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgICMgVGhpcyBpcyBmb3IgRE9NV2lu
ZG93LmlkbCBDcnlwdG8gYXR0cmlidXRlCi0gICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZSBlcSAiQ3J5cHRvIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gMSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50SGFuZGxlciI7Ci0K
LSAgICByZXR1cm4gMSBpZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIlN5bWJvbCI7
Ci0KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAjIFNraXAgaW5k
ZXhlZCBkYXRhYmFzZSBhdHRyaWJ1dGVzIGZvciBub3csIHRoZXkgYXJlbid0IHlldCBzdXBwb3J0
ZWQgZm9yIHRoZSBHT2JqZWN0IGdlbmVyYXRvci4KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5uYW1lID1+IC9eKD86d2Via2l0KT9bSWldbmRleGVkREIvIG9yICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+bmFtZSA9fiAvXig/OndlYmtpdCk/SURCLykgewotICAgICAgICByZXR1cm4gMTsK
LSAgICB9Ci0KLSAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSlNCdWlsdGluIn0pIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLXN1YiBTa2lwRnVuY3Rpb24gewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsK
LSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAgICBteSAkcGFyZW50Tm9kZSA9IHNoaWZ0Owot
ICAgIG15ICRkZWNhbWVsaXplID0gc2hpZnQ7Ci0gICAgbXkgJHByZWZpeCA9IHNoaWZ0OwotCi0g
ICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICJ3ZWJraXRfZG9tXyIgLiAkZGVjYW1lbGl6ZSAuICJfIiAu
ICRwcmVmaXggLiBkZWNhbWVsaXplKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLSAgICBt
eSAkZnVuY3Rpb25SZXR1cm5UeXBlID0gJHByZWZpeCBlcSAic2V0XyIgPyAidm9pZCIgOiAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+dHlwZTsKLSAgICBteSAkaXNDdXN0b21GdW5jdGlvbiA9ICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn07Ci0gICAgbXkg
JGNhbGxXaXRoID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
YWxsV2l0aCJ9OwotICAgIG15ICRpc1Vuc3VwcG9ydGVkQ2FsbFdpdGggPSAkY29kZUdlbmVyYXRv
ci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJTY3JpcHRBcmd1bWVudHMi
KSB8fCAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgs
ICJDYWxsU3RhY2siKSB8fCAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlu
cygkY2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpIHx8ICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0
dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIpOwotCi0gICAgIyBTdGF0
aWMgbWV0aG9kcyBhcmUgdW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMSBpZiAkZnVuY3Rpb24tPmlz
U3RhdGljOwotCi0gICAgaWYgKCgkaXNDdXN0b21GdW5jdGlvbiB8fCAkaXNVbnN1cHBvcnRlZENh
bGxXaXRoKSAmJgotICAgICAgICAkZnVuY3Rpb25OYW1lIG5lICJ3ZWJraXRfZG9tX25vZGVfcmVw
bGFjZV9jaGlsZCIgJiYKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSBuZSAid2Via2l0X2RvbV9ub2Rl
X2luc2VydF9iZWZvcmUiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUgIndlYmtpdF9kb21f
bm9kZV9yZW1vdmVfY2hpbGQiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUgIndlYmtpdF9k
b21fbm9kZV9hcHBlbmRfY2hpbGQiICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUgIndlYmtp
dF9kb21faHRtbF9jb2xsZWN0aW9uX2l0ZW0iICYmCi0gICAgICAgICRmdW5jdGlvbk5hbWUgbmUg
IndlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX25hbWVkX2l0ZW0iKSB7Ci0gICAgICAgIHJldHVy
biAxOwotICAgIH0KLQotICAgICMgU2tpcCBmdW5jdGlvbnMgdGhhdCBoYXZlIGNhbGxiYWNrIHBh
cmFtZXRlcnMsIGJlY2F1c2UgdGhpcyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IGtub3cKLSAgICAj
IGhvdyB0byBhdXRvLWdlbmVyYXRlIGNhbGxiYWNrcy4gIFNraXAgZnVuY3Rpb25zIHRoYXQgaGF2
ZSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIgb3IKLSAgICAjIHNlcXVlbmNlPFQ+IHBhcmFtZXRl
cnMsIGJlY2F1c2UgdGhpcyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0IGtub3cgaG93IHRvIGF1dG8t
Z2VuZXJhdGUKLSAgICAjIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgb3Igc2VxdWVuY2U8VD4uIFNr
aXAgRXZlbnRMaXN0ZW5lcnMgYmVjYXVzZSB0aGV5IGFyZSBoYW5kbGVkIGVsc2V3aGVyZS4KLSAg
ICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Ci0gICAgICAg
IHJldHVybiAxIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0Z1bmN0aW9uT25seUNhbGxiYWNrSW50ZXJm
YWNlKCRwYXJhbS0+dHlwZSk7Ci0gICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNsYW1wIn07Ci0gICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+dHlwZSBl
cSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciI7Ci0gICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+
dHlwZSBlcSAiRXZlbnRMaXN0ZW5lciI7Ci0gICAgICAgIHJldHVybiAxIGlmICRjb2RlR2VuZXJh
dG9yLT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHBhcmFtLT50eXBlKTsKLSAgICB9Ci0K
LSAgICAjIFRoaXMgaXMgZm9yIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmlkbCBhZGQoRmlsZSkgbWV0
aG9kCi0gICAgaWYgKCRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZGF0YV90cmFuc2Zlcl9p
dGVtX2xpc3RfYWRkIiAmJiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gPT0gMSkgewotICAgICAg
ICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAjIFNraXAgQ29uc29sZTo6cHJvZmlsZSgpIGFuZCBD
b25zb2xlOjpwcm9maWxlRW5kKCkgYXMgdGhleSdyZSBub3QgY29ycmVjdGx5IGdlbmVyYXRlZCBm
b3IgdGhlIG1vbWVudC4KLSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9jb25z
b2xlX3Byb2ZpbGUiIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fY29uc29sZV9wcm9m
aWxlX2VuZCIpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSkgewot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWUgZXEgInNldCIgYW5kICRwYXJlbnROb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlw
ZWRBcnJheSJ9KSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkb2JqZWN0
IGVxICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9
Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgImdldFNWR0RvY3VtZW50
IikgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWUgZXEgImdldENTU0NhbnZhc0NvbnRleHQiKSB7Ci0gICAgICAgIHJldHVybiAx
OwotICAgIH0KLQotICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAic2V0UmFu
Z2VUZXh0IiAmJiBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30gPT0gMSkgewotICAgICAgICByZXR1
cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgInRp
bWVFbmQiKSB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCRmdW5jdGlvblJldHVyblR5cGUpKSB7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+bmFtZSBlcSAic3VwcG9ydHMiICYmIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSA9PSAxKSB7
Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHJldHVybiAxIGlmICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT50eXBlIGVxICJQcm9taXNlIjsKLQotICAgIHJldHVybiAxIGlmICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT50eXBlIGVxICJTeW1ib2wiOwotCi0gICAgcmV0dXJuIDEgaWYgJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPnR5cGUgZXEgIkRhdGUiOwotCi0gICAgcmV0dXJuIDEgaWYgJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW4ifTsKLQotICAg
IHJldHVybiAxIGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
UHJpdmF0ZUlkZW50aWZpZXIifSBhbmQgbm90ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiUHVibGljSWRlbnRpZmllciJ9OwotICAgIHJldHVybiAwOwotfQotCi0j
IE5hbWUgdHlwZSB1c2VkIGluIHRoZSBnX3ZhbHVlX3tzZXQsZ2V0fV8qIGZ1bmN0aW9ucwotc3Vi
IEdldEdWYWx1ZVR5cGVOYW1lIHsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotCi0gICAgbXkgJXR5
cGVzID0gKCJET01TdHJpbmciLCAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgIlVTVlN0cmlu
ZyIsICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAiRE9NVGltZVN0YW1wIiwgInVpbnQiLAot
ICAgICAgICAgICAgICAgICAiZmxvYXQiLCAiZmxvYXQiLAotICAgICAgICAgICAgICAgICAidW5y
ZXN0cmljdGVkIGZsb2F0IiwgImZsb2F0IiwKLSAgICAgICAgICAgICAgICAgImRvdWJsZSIsICJk
b3VibGUiLAotICAgICAgICAgICAgICAgICAidW5yZXN0cmljdGVkIGRvdWJsZSIsICJkb3VibGUi
LAotICAgICAgICAgICAgICAgICAiYm9vbGVhbiIsICJib29sZWFuIiwKLSAgICAgICAgICAgICAg
ICAgImNoYXIiLCAiY2hhciIsCi0gICAgICAgICAgICAgICAgICJsb25nIiwgImxvbmciLAotICAg
ICAgICAgICAgICAgICAibG9uZyBsb25nIiwgImludDY0IiwKLSAgICAgICAgICAgICAgICAgImJ5
dGUiLCAiaW50OCIsCi0gICAgICAgICAgICAgICAgICJvY3RldCIsICJ1aW50OCIsCi0gICAgICAg
ICAgICAgICAgICJzaG9ydCIsICJpbnQiLAotICAgICAgICAgICAgICAgICAidWNoYXIiLCAidWNo
YXIiLAotICAgICAgICAgICAgICAgICAidW5zaWduZWQiLCAidWludCIsCi0gICAgICAgICAgICAg
ICAgICJpbnQiLCAiaW50IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGludCIsICJ1aW50
IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIsICJ1aW50NjQiLCAKLSAg
ICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmciLCAidWxvbmciLAotICAgICAgICAgICAgICAg
ICAidW5zaWduZWQgc2hvcnQiLCAidWludCIpOwotCi0gICAgcmV0dXJuICR0eXBlc3skdHlwZX0g
PyAkdHlwZXN7JHR5cGV9IDogIm9iamVjdCI7Ci19Ci0KLSMgTmFtZSB0eXBlIHVzZWQgaW4gQyBk
ZWNsYXJhdGlvbnMKLXN1YiBHZXRHbGliVHlwZU5hbWUgewotICAgIG15ICR0eXBlID0gc2hpZnQ7
Ci0gICAgbXkgJG5hbWUgPSBHZXRDbGFzc05hbWUoJHR5cGUpOwotCi0gICAgbXkgJXR5cGVzID0g
KCJET01TdHJpbmciLCAiZ2NoYXIqIiwKLSAgICAgICAgICAgICAgICAgIlVTVlN0cmluZyIsICJn
Y2hhcioiLAotICAgICAgICAgICAgICAgICAiRE9NVGltZVN0YW1wIiwgImd1aW50MzIiLAotICAg
ICAgICAgICAgICAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiwgImdjaGFyKiIsCi0gICAgICAg
ICAgICAgICAgICJmbG9hdCIsICJnZmxvYXQiLAotICAgICAgICAgICAgICAgICAidW5yZXN0cmlj
dGVkIGZsb2F0IiwgImdmbG9hdCIsCi0gICAgICAgICAgICAgICAgICJkb3VibGUiLCAiZ2RvdWJs
ZSIsCi0gICAgICAgICAgICAgICAgICJ1bnJlc3RyaWN0ZWQgZG91YmxlIiwgImdkb3VibGUiLAot
ICAgICAgICAgICAgICAgICAiYm9vbGVhbiIsICJnYm9vbGVhbiIsCi0gICAgICAgICAgICAgICAg
ICJjaGFyIiwgImdjaGFyIiwKLSAgICAgICAgICAgICAgICAgImxvbmciLCAiZ2xvbmciLAotICAg
ICAgICAgICAgICAgICAibG9uZyBsb25nIiwgImdpbnQ2NCIsCi0gICAgICAgICAgICAgICAgICJi
eXRlIiwgImdpbnQ4IiwKLSAgICAgICAgICAgICAgICAgIm9jdGV0IiwgImd1aW50OCIsCi0gICAg
ICAgICAgICAgICAgICJzaG9ydCIsICJnc2hvcnQiLAotICAgICAgICAgICAgICAgICAidWNoYXIi
LCAiZ3VjaGFyIiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIiwgImd1aW50IiwKLSAgICAg
ICAgICAgICAgICAgImludCIsICJnaW50IiwKLSAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGlu
dCIsICJndWludCIsCi0gICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBsb25nIiwgImd1bG9uZyIs
Ci0gICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBsb25nIGxvbmciLCAiZ3VpbnQ2NCIsCi0gICAg
ICAgICAgICAgICAgICJ1bnNpZ25lZCBzaG9ydCIsICJndXNob3J0IiwKLSAgICAgICAgICAgICAg
ICAgInZvaWQiLCAidm9pZCIpOwotCi0gICAgcmV0dXJuICR0eXBlc3skdHlwZX0gPyAkdHlwZXN7
JHR5cGV9IDogIiRuYW1lKiI7Ci19Ci0KLXN1YiBJc0dET01DbGFzc1R5cGUgewotICAgIG15ICR0
eXBlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gMCBpZiAkY29kZUdlbmVyYXRvci0+SXNOb25Qb2lu
dGVyVHlwZSgkdHlwZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkgfHwg
JHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSI7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN1
YiBJc1Byb3BlcnR5UmVhZGFibGUgewotICAgIG15ICRwcm9wZXJ0eSA9IHNoaWZ0OwotICAgIHJl
dHVybiAhU2tpcEF0dHJpYnV0ZSgkcHJvcGVydHkpOwotfQotCi1zdWIgSXNQcm9wZXJ0eVdyaXRl
YWJsZSB7Ci0gICAgbXkgJHByb3BlcnR5ID0gc2hpZnQ7Ci0KLSAgICBpZiAoIUlzUHJvcGVydHlS
ZWFkYWJsZSgkcHJvcGVydHkpKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlm
ICgkcHJvcGVydHktPmlzUmVhZE9ubHkpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgbXkgJGd0eXBlID0gR2V0R1ZhbHVlVHlwZU5hbWUoJHByb3BlcnR5LT5zaWduYXR1cmUtPnR5
cGUpOwotICAgIG15ICRoYXNHdHlwZVNpZ25hdHVyZSA9ICRndHlwZSBlcSAiYm9vbGVhbiIgfHwg
JGd0eXBlIGVxICJmbG9hdCIgfHwgJGd0eXBlIGVxICJkb3VibGUiIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJGd0eXBlIGVxICJpbnQ2NCIgfHwgJGd0eXBlIGVxICJ1aW50NjQiIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGd0eXBlIGVxICJsb25nIiB8fCAkZ3R5cGUg
ZXEgInVsb25nIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRndHlwZSBlcSAiaW50
IiB8fCAkZ3R5cGUgZXEgInVpbnQiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGd0
eXBlIGVxICJzaG9ydCIgfHwgJGd0eXBlIGVxICJ1c2hvcnQiIHx8Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJGd0eXBlIGVxICJpbnQ4IiB8fCAkZ3R5cGUgZXEgInVpbnQ4IiB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICRndHlwZSBlcSAiY2hhciIgfHwgJGd0eXBlIGVxICJ1
Y2hhciIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3R5cGUgZXEgInN0cmluZyI7
Ci0gICAgaWYgKCEkaGFzR3R5cGVTaWduYXR1cmUpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgIyBGSVhNRTogV2UgYXJlIG5vdCBnZW5lcmF0aW5nIHNldHRlcnMgZm9yICdSZXBs
YWNlYWJsZScgYXR0cmlidXRlcyBub3csIGJ1dCB3ZSBzaG91bGQgc29tZWhvdy4KLSAgICBpZiAo
JHByb3BlcnR5LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9
KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmICgkcHJvcGVydHktPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9KSB7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAwIGlmICRwcm9wZXJ0eS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSB8fCAkcHJvcGVydHktPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlNldHRlckNhbGxXaXRoIn07Ci0KLSAgICByZXR1cm4gMTsK
LX0KLQotc3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxXYXJuaW5nCi17Ci0gICAgbXkgJG5vZGUgPSBz
aGlmdDsKLSAgICBteSAkaW5kZW50U2l6ZSA9IHNoaWZ0OwotICAgIGlmICghJGluZGVudFNpemUp
IHsKLSAgICAgICAgJGluZGVudFNpemUgPSA0OwotICAgIH0KLQotICAgIG15ICRjb25kaXRpb25h
bCA9ICRub2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKLSAgICBteSBA
d2FybjsKLQotICAgIGlmICgkY29uZGl0aW9uYWwpIHsKLSAgICAgICAgaWYgKCRjb25kaXRpb25h
bCA9fiAvJi8pIHsKLSAgICAgICAgICAgIG15IEBzcGxpdENvbmRpdGlvbmFscyA9IHNwbGl0KC8m
LywgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgICAgIGZvcmVhY2ggJGNvbmRpdGlvbiAoQHNwbGl0
Q29uZGl0aW9uYWxzKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAd2FybiwgIiNpZiAhRU5BQkxF
KCRjb25kaXRpb24pXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEB3YXJuLCAnICcgeCAkaW5k
ZW50U2l6ZSAuICJXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKFwiIiAuIEh1bWFuUmVh
ZGFibGVDb25kaXRpb25hbCgkY29uZGl0aW9uKSAuICJcIilcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQHdhcm4sICIjZW5kaWZcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2lm
ICgkY29uZGl0aW9uYWwgPX4gL1x8LykgewotICAgICAgICAgICAgZm9yZWFjaCAkY29uZGl0aW9u
IChzcGxpdCgvXHwvLCAkY29uZGl0aW9uYWwpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAd2Fy
biwgJyAnIHggJGluZGVudFNpemUgLiAiV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVChc
IiIgLiBIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwoJGNvbmRpdGlvbikgLiAiXCIpXG4iKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQHdhcm4sICcg
JyB4ICRpbmRlbnRTaXplIC4gIldFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoXCIiIC4g
SHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRjb25kaXRpb25hbCkgLiAiXCIpXG4iKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBAd2FybjsKLX0KLQotc3ViIEdlbmVyYXRlUHJvcGVy
dHkgewotICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKLSAgICBteSAkaW50ZXJmYWNlTmFtZSA9
IHNoaWZ0OwotICAgIG15IEB3cml0ZWFibGVQcm9wZXJ0aWVzID0gQHtzaGlmdCBAX307Ci0gICAg
bXkgJHBhcmVudE5vZGUgPSBzaGlmdDsKLQotICAgIG15ICRoYXNHZXR0ZXJFeGNlcHRpb24gPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZXR0ZXJSYWlzZXNF
eGNlcHRpb24ifTsKLSAgICBteSAkaGFzU2V0dGVyRXhjZXB0aW9uID0gJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU2V0dGVyUmFpc2VzRXhjZXB0aW9uIn07Ci0K
LSAgICBteSAkZGVjYW1lbGl6ZUludGVyZmFjZU5hbWUgPSBkZWNhbWVsaXplKCRpbnRlcmZhY2VO
YW1lKTsKLSAgICBteSAkcHJvcE5hbWUgPSBkZWNhbWVsaXplKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+bmFtZSk7Ci0gICAgbXkgJHByb3BGdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvblNpZ25hdHVy
ZU5hbWUoJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgIG15ICRwcm9wTmFtZUNhcHMg
PSB1YygkcHJvcE5hbWUpOwotICAgIG15ICR7cHJvcEVudW19ID0gIlBST1BfJHtwcm9wTmFtZUNh
cHN9IjsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgJHtwcm9wRW51bX0sXG4iKTsK
LQotICAgIG15ICRwcm9wVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKLSAgICBt
eSAke3Byb3BHVHlwZX0gPSBkZWNhbWVsaXplKCRwcm9wVHlwZSk7Ci0gICAgbXkgJHt1Y1Byb3BH
VHlwZX0gPSB1YygkcHJvcEdUeXBlKTsKLQotICAgIG15ICRndHlwZSA9IEdldEdWYWx1ZVR5cGVO
YW1lKCRwcm9wVHlwZSk7Ci0gICAgbXkgJGdwYXJhbWZsYWcgPSAiV0VCS0lUX1BBUkFNX1JFQURB
QkxFIjsKLSAgICBteSAkd3JpdGVhYmxlID0gSXNQcm9wZXJ0eVdyaXRlYWJsZSgkYXR0cmlidXRl
KTsKLQotICAgIG15ICRtdXRhYmxlU3RyaW5nID0gInJlYWQtb25seSI7Ci0gICAgbXkgJGhhc0N1
c3RvbVNldHRlciA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbVNldHRlciJ9OwotICAgIGlmICgkd3JpdGVhYmxlICYmICRoYXNDdXN0b21TZXR0ZXIp
IHsKLSAgICAgICAgJG11dGFibGVTdHJpbmcgPSAicmVhZC1vbmx5IChkdWUgdG8gY3VzdG9tIGZ1
bmN0aW9ucyBuZWVkZWQgaW4gd2Via2l0ZG9tKSI7Ci0gICAgfSBlbHNpZiAoJHdyaXRlYWJsZSkg
ewotICAgICAgICAkZ3BhcmFtZmxhZyA9ICJXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIjsKLSAgICAg
ICAgJG11dGFibGVTdHJpbmcgPSAicmVhZC13cml0ZSI7Ci0gICAgfQotCi0gICAgbXkgJGdldHRl
ckZ1bmN0aW9uTmFtZSA9IEdldEVmZmVjdGl2ZUZ1bmN0aW9uTmFtZSgid2Via2l0X2RvbV8ke2Rl
Y2FtZWxpemVJbnRlcmZhY2VOYW1lfV9nZXRfIiAuICRwcm9wRnVuY3Rpb25OYW1lKTsKLSAgICBp
ZiAoRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbigkZ2V0dGVyRnVuY3Rpb25OYW1lKSkg
ewotICAgICAgICAkZ2V0dGVyRnVuY3Rpb25OYW1lID0gJGdldHRlckZ1bmN0aW9uTmFtZSAuICJf
d2l0aF9lcnJvciI7Ci0gICAgfQotICAgIG15IEBnZXR0ZXJBcmd1bWVudHMgPSAoKTsKLSAgICBw
dXNoKEBnZXR0ZXJBcmd1bWVudHMsICJzZWxmIik7Ci0gICAgcHVzaChAZ2V0dGVyQXJndW1lbnRz
LCAibnVsbHB0ciIpIGlmICRoYXNHZXR0ZXJFeGNlcHRpb24gfHwgRnVuY3Rpb25Vc2VkVG9SYWlz
ZUV4Y2VwdGlvbigkZ2V0dGVyRnVuY3Rpb25OYW1lKTsKLQotICAgIGlmIChncmVwIHskXyBlcSAk
YXR0cmlidXRlfSBAd3JpdGVhYmxlUHJvcGVydGllcykgewotICAgICAgICBteSAkc2V0dGVyRnVu
Y3Rpb25OYW1lID0gR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1lKCJ3ZWJraXRfZG9tXyR7ZGVjYW1l
bGl6ZUludGVyZmFjZU5hbWV9X3NldF8iIC4gJHByb3BGdW5jdGlvbk5hbWUpOwotICAgICAgICBp
ZiAoRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbigkc2V0dGVyRnVuY3Rpb25OYW1lKSkg
ewotICAgICAgICAgICAgJHNldHRlckZ1bmN0aW9uTmFtZSA9ICRzZXR0ZXJGdW5jdGlvbk5hbWUg
LiAiX3dpdGhfZXJyb3IiOwotICAgICAgICB9Ci0gICAgICAgIG15IEBzZXR0ZXJBcmd1bWVudHMg
PSAoKTsKLSAgICAgICAgcHVzaChAc2V0dGVyQXJndW1lbnRzLCAic2VsZiwgZ192YWx1ZV9nZXRf
JGd0eXBlKHZhbHVlKSIpOwotICAgICAgICBwdXNoKEBzZXR0ZXJBcmd1bWVudHMsICJudWxscHRy
IikgaWYgJGhhc1NldHRlckV4Y2VwdGlvbiB8fCBGdW5jdGlvblVzZWRUb1JhaXNlRXhjZXB0aW9u
KCRzZXR0ZXJGdW5jdGlvbk5hbWUpOwotCi0gICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAiICAg
IGNhc2UgJHtwcm9wRW51bX06XG4iKTsKLSAgICAgICAgcHVzaChAdHh0U2V0UHJvcHMsICIgICAg
ICAgICIgLiAkc2V0dGVyRnVuY3Rpb25OYW1lIC4gIigiIC4gam9pbigiLCAiLCBAc2V0dGVyQXJn
dW1lbnRzKSAuICIpO1xuIik7Ci0gICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAiICAgICAgICBi
cmVhaztcbiIpOwotICAgIH0KLQotICAgIHB1c2goQHR4dEdldFByb3BzLCAiICAgIGNhc2UgJHtw
cm9wRW51bX06XG4iKTsKLQotICAgIG15ICRwb3N0Q29udmVydEZ1bmN0aW9uID0gIiI7Ci0gICAg
aWYgKCRndHlwZSBlcSAic3RyaW5nIikgewotICAgICAgICBwdXNoKEB0eHRHZXRQcm9wcywgIiAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgIiAuICRnZXR0ZXJGdW5jdGlvbk5hbWUg
LiAiKCIgLiBqb2luKCIsICIsIEBnZXR0ZXJBcmd1bWVudHMpIC4gIikpO1xuIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgcHVzaChAdHh0R2V0UHJvcHMsICIgICAgICAgIGdfdmFsdWVfc2V0XyRn
dHlwZSh2YWx1ZSwgIiAuICRnZXR0ZXJGdW5jdGlvbk5hbWUgLiAiKCIgLiBqb2luKCIsICIsIEBn
ZXR0ZXJBcmd1bWVudHMpIC4gIikpO1xuIik7Ci0gICAgfQotCi0gICAgcHVzaChAdHh0R2V0UHJv
cHMsICIgICAgICAgIGJyZWFrO1xuIik7Ci0KLSAgICBteSAlcGFyYW1ldGVyU3BlY09wdGlvbnMg
PSAoImludCIgPT4gICAgIFsgIkdfTUlOSU5UIiwgIkdfTUFYSU5UIiwgIjAiIF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQ4IiA9PiAgICBbICJHX01JTklOVDgiLCAiR19N
QVhJTlQ4IiwgIjAiIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib29sZWFu
IiA9PiBbICJGQUxTRSIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
IiA9PiAgIFsgIi1HX01BWEZMT0FUIiwgIkdfTUFYRkxPQVQiLCAiMCIgXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRvdWJsZSIgPT4gIFsgIi1HX01BWERPVUJMRSIsICJHX01B
WERPVUJMRSIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidWludDY0
IiA9PiAgWyAiMCIsICJHX01BWFVJTlQ2NCIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAibG9uZyIgPT4gICAgWyAiR19NSU5MT05HIiwgIkdfTUFYTE9ORyIsICIwIiBd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50NjQiID0+ICAgWyAiR19NSU5J
TlQ2NCIsICJHX01BWElOVDY0IiwgIjAiIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ1bG9uZyIgPT4gICBbICIwIiwgIkdfTUFYVUxPTkciLCAiMCIgXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInVpbnQiID0+ICAgIFsgIjAiLCAiR19NQVhVSU5UIiwgIjAi
IF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1aW50OCIgPT4gICBbICIwIiwg
IkdfTUFYVUlOVDgiLCAiMCIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVz
aG9ydCIgPT4gIFsgIjAiLCAiR19NQVhVSU5UMTYiLCAiMCIgXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInVjaGFyIiA9PiAgIFsgIkdfTUlOSU5UOCIsICJHX01BWElOVDgiLCAi
MCIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXIiID0+ICAgIFsgIjAi
LCAiR19NQVhVSU5UOCIsICIwIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
c3RyaW5nIiA9PiAgWyAnIiInLCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
b2JqZWN0IiA9PiAgWyAiV0VCS0lUX0RPTV9UWVBFXyR7dWNQcm9wR1R5cGV9IiBdKTsKLQotICAg
IG15ICRleHRyYVBhcmFtZXRlcnMgPSBqb2luKCIsICIsIEB7JHBhcmFtZXRlclNwZWNPcHRpb25z
eyRndHlwZX19KTsKLSAgICBteSAkZ2xpYlR5cGVOYW1lID0gR2V0R2xpYlR5cGVOYW1lKCRwcm9w
VHlwZSk7Ci0gICAgJHByb3BOYW1lID1+IHMvXy8tL2c7Ci0gICAgbXkgJHR4dEluc3RhbGxQcm9w
ID0gPDwgIkVPRiI7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAg
ICAgZ29iamVjdENsYXNzLAotICAgICAgICAkcHJvcEVudW0sCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y18kZ3R5cGUoCi0gICAgICAgICAgICAiJHByb3BOYW1lIiwKLSAgICAgICAgICAgICIkaW50ZXJm
YWNlTmFtZTokcHJvcE5hbWUiLAotICAgICAgICAgICAgIiRtdXRhYmxlU3RyaW5nICRnbGliVHlw
ZU5hbWUgJGludGVyZmFjZU5hbWU6JHByb3BOYW1lIiwKLSAgICAgICAgICAgICRleHRyYVBhcmFt
ZXRlcnMsCi0gICAgICAgICAgICAkZ3BhcmFtZmxhZykpOwotCi1FT0YKLSAgICBwdXNoKEB0eHRJ
bnN0YWxsUHJvcHMsICR0eHRJbnN0YWxsUHJvcCk7Ci19Ci0KLXN1YiBHZW5lcmF0ZVByb3BlcnRp
ZXMgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSkgPSBAXzsK
LQotICAgIG15ICRkZWNhbWVsaXplID0gZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSk7Ci0gICAg
bXkgJGNsc0NhcHMgPSB1YygkZGVjYW1lbGl6ZSk7Ci0gICAgbXkgJGxvd2VyQ2FzZUlmYWNlTmFt
ZSA9ICJ3ZWJraXRfZG9tXyRkZWNhbWVsaXplIjsKLSAgICBteSAkcGFyZW50SW1wbENsYXNzTmFt
ZSA9IEdldFBhcmVudEltcGxDbGFzc05hbWUoJGludGVyZmFjZSk7Ci0KLSAgICBteSAkY29uZGl0
aW9uR3VhcmRTdGFydCA9ICIiOwotICAgIG15ICRjb25kaXRpb25HdWFyZEVuZCA9ICIiOwotICAg
IG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgIGlmICgkY29uZGl0aW9uYWxTdHJpbmcpIHsKLSAg
ICAgICAgJGNvbmRpdGlvbkd1YXJkU3RhcnQgPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9IjsK
LSAgICAgICAgJGNvbmRpdGlvbkd1YXJkRW5kID0gIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3Ry
aW5nfSI7Ci0gICAgfQotCi0gICAgIyBQcm9wZXJ0aWVzCi0gICAgbXkgJGltcGxDb250ZW50ID0g
IiI7Ci0gICAgbXkgQHJlYWRhYmxlUHJvcGVydGllcyA9IGdyZXAgeyBJc1Byb3BlcnR5UmVhZGFi
bGUoJF8pIH0gQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfTsKLSAgICBteSBAd3JpdGVhYmxlUHJv
cGVydGllcyA9IGdyZXAgeyBJc1Byb3BlcnR5V3JpdGVhYmxlKCRfKSB9IEB7JGludGVyZmFjZS0+
YXR0cmlidXRlc307Ci0gICAgbXkgJG51bVByb3BlcnRpZXMgPSBzY2FsYXIgQHJlYWRhYmxlUHJv
cGVydGllczsKLQotICAgICMgUHJvcGVydGllcwotICAgIGlmICgkbnVtUHJvcGVydGllcyA+IDAp
IHsKLSAgICAgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1lbnVtIHsKLSAgICBQUk9QXzAs
Ci1FT0YKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwotCi0g
ICAgICAgIHB1c2goQHR4dEdldFByb3BzLCAic3RhdGljIHZvaWQgJHtsb3dlckNhc2VJZmFjZU5h
bWV9X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKVxuIik7Ci0gICAgICAgIHB1c2goQHR4dEdldFBy
b3BzLCAie1xuIik7Ci0gICAgICAgIHB1c2goQHR4dEdldFByb3BzLCAiICAgICR7Y2xhc3NOYW1l
fSogc2VsZiA9IFdFQktJVF9ET01fJHtjbHNDYXBzfShvYmplY3QpO1xuIik7Ci0gICAgICAgIHB1
c2goQHR4dEdldFByb3BzLCAiXG4iKTsKLSAgICAgICAgcHVzaChAdHh0R2V0UHJvcHMsICIgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7XG4iKTsKLQotICAgICAgICBpZiAoc2NhbGFyIEB3cml0ZWFi
bGVQcm9wZXJ0aWVzID4gMCkgewotICAgICAgICAgICAgcHVzaChAdHh0U2V0UHJvcHMsICJzdGF0
aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAie1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEB0eHRTZXRQcm9wcywgIiAgICAke2NsYXNzTmFtZX0qIHNlbGYgPSBXRUJLSVRf
RE9NXyR7Y2xzQ2Fwc30ob2JqZWN0KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAdHh0U2V0UHJv
cHMsICJcbiIpOwotICAgICAgICAgICAgcHVzaChAdHh0U2V0UHJvcHMsICIgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7XG4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvcmVhY2ggbXkgJGF0dHJp
YnV0ZSAoQHJlYWRhYmxlUHJvcGVydGllcykgewotICAgICAgICAgICAgR2VuZXJhdGVQcm9wZXJ0
eSgkYXR0cmlidXRlLCAkaW50ZXJmYWNlTmFtZSwgXEB3cml0ZWFibGVQcm9wZXJ0aWVzLCAkaW50
ZXJmYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIn07
XG5cbiIpOwotCi0gICAgICAgICR0eHRHZXRQcm9wID0gPDwgIkVPRiI7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVy
dHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci1FT0YKLSAgICAgICAgcHVz
aChAdHh0R2V0UHJvcHMsICR0eHRHZXRQcm9wKTsKLQotICAgICAgICBpZiAoc2NhbGFyIEB3cml0
ZWFibGVQcm9wZXJ0aWVzID4gMCkgewotICAgICAgICAgICAgJHR4dFNldFByb3BzID0gPDwgIkVP
RiI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci1FT0YKLSAgICAgICAgICAgIHB1c2goQHR4dFNldFByb3BzLCAkdHh0U2V0UHJvcHMpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgIyBEbyBub3QgaW5zZXJ0IGV4dHJhIHNwYWNlcyB3aGVuIGlu
dGVycG9sYXRpbmcgYXJyYXkgdmFyaWFibGVzCi0gICAgJCIgPSAiIjsKLQotICAgIGlmICgkcGFy
ZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICAkaW1wbENvbnRlbnQgPSA8
PCAiRU9GIjsKLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgJHtjbGFzc05hbWV9UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fJHtjbHNDYXBzfV9HRVRfUFJJVkFURShvYmplY3QpOwotJGNvbmRpdGlvbkd1YXJkU3RhcnQK
LSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSk7Ci0kY29uZGl0aW9uR3VhcmRFbmQKLSAgICBwcml2LT5+JHtjbGFzc05hbWV9UHJpdmF0ZSgp
OwotICAgIEdfT0JKRUNUX0NMQVNTKCR7bG93ZXJDYXNlSWZhY2VOYW1lfV9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1FT0YKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0
aWVzLCAkaW1wbENvbnRlbnQpOwotICAgIH0KLQotICAgIGlmICgkbnVtUHJvcGVydGllcyA+IDAp
IHsKLSAgICAgICAgaWYgKHNjYWxhciBAd3JpdGVhYmxlUHJvcGVydGllcyA+IDApIHsKLSAgICAg
ICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQHR4dFNldFByb3BzKTsKLSAgICAgICAgICAg
IHB1c2goQGNCb2R5UHJvcGVydGllcywgIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCBAdHh0R2V0UHJvcHMpOwotICAgICAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICJcbiIpOwotICAgIH0KLQotICAgICMgQWRkIGEgY29uc3RydWN0b3IgaW1wbGVtZW50
YXRpb24gb25seSBmb3IgZGlyZWN0IHN1YmNsYXNzZXMgb2YgT2JqZWN0IHRvIG1ha2Ugc3VyZQot
ICAgICMgdGhhdCB0aGUgV2ViQ29yZSB3cmFwcGVkIG9iamVjdCBpcyBhZGRlZCBvbmx5IG9uY2Ug
dG8gdGhlIERPTSBjYWNoZS4gVGhlIERPTSBnYXJiYWdlCi0gICAgIyBjb2xsZWN0b3Igd29ya3Mg
YmVjYXVzZSBOb2RlIGlzIGEgZGlyZWN0IHN1YmNsYXNzIG9mIE9iamVjdCBhbmQgdGhlIHZlcnNp
b24gb2YKLSAgICAjIERPTU9iamVjdENhY2hlOjpwdXQoKSB0aGF0IHJlY2VpdmVzIGEgTm9kZSAo
d2hpY2ggaXMgdGhlIG9uZSBzZXR0aW5nIHRoZSBmcmFtZSkgaXMKLSAgICAjIGFsd2F5cyBjYWxs
ZWQgZm9yIERPTSBvYmplY3RzIGRlcml2ZWQgZnJvbSBOb2RlLgotICAgIGlmICgkcGFyZW50SW1w
bENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9G
IjsKLXN0YXRpYyBHT2JqZWN0KiAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1MoJHtsb3dlckNhc2VJZmFjZU5hbWV9X3BhcmVudF9jbGFzcyktPmNvbnN0cnVj
dG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7
Ci0kY29uZGl0aW9uR3VhcmRTdGFydAotICAgICR7Y2xhc3NOYW1lfVByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NXyR7Y2xzQ2Fwc31fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSo+KFdFQktJVF9E
T01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotJGNvbmRpdGlvbkd1YXJk
RW5kCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotRU9GCi0gICAgICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgJGltcGxDb250ZW50KTsKLSAgICB9Ci0KLSAgICAkaW1wbENvbnRlbnQgPSA8PCAi
RU9GIjsKLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9jbGFzc19pbml0KCR7Y2xh
c3NOYW1lfUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci1FT0YKLSAgICBwdXNoKEBjQm9keVByb3Bl
cnRpZXMsICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJHBhcmVudEltcGxDbGFzc05hbWUgZXEg
Ik9iamVjdCIgfHwgJG51bVByb3BlcnRpZXMgPiAwKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgIiAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7XG4iKTsKLQotICAgICAgICBpZiAoJHBhcmVudEltcGxDbGFzc05hbWUg
ZXEgIk9iamVjdCIpIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoJHtjbGFzc05hbWV9
UHJpdmF0ZSkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9ICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9jb25zdHJ1
Y3RvcjtcbiIpOwotICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZmluYWxpemU7XG4iKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkbnVtUHJvcGVydGllcyA+IDApIHsKLSAgICAgICAg
ICAgIGlmIChzY2FsYXIgQHdyaXRlYWJsZVByb3BlcnRpZXMgPiAwKSB7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5
ID0gJHtsb3dlckNhc2VJZmFjZU5hbWV9X3NldF9wcm9wZXJ0eTtcbiIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gJHtsb3dlckNhc2VJZmFjZU5hbWV9X2dldF9wcm9wZXJ0eTtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiXG4iKTsKLSAgICAgICAgICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgQHR4dEluc3RhbGxQcm9wcyk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3RDbGFzcyk7XG4iKTsKLSAgICB9Ci0gICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7
Ci19Ci0KLXN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9pbml0KCR7Y2xhc3NOYW1l
fSogcmVxdWVzdCkKLXsKLUVPRgotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgJGltcGxDb250
ZW50KTsKLQotICAgIGlmICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAg
ICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKLSAgICAke2NsYXNzTmFtZX1Qcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV8ke2Nsc0NhcHN9X0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAgIG5l
dyAocHJpdikgJHtjbGFzc05hbWV9UHJpdmF0ZSgpOwotRU9GCi0gICAgICAgIHB1c2goQGNCb2R5
UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpO1xuIik7Ci0gICAgfQot
ICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwotfQotCi1FT0YKLSAgICBwdXNoKEBjQm9keVBy
b3BlcnRpZXMsICRpbXBsQ29udGVudCk7Ci19Ci0KLXN1YiBHZW5lcmF0ZUNvbnN0YW50cyB7Ci0g
ICAgbXkgKCRpbnRlcmZhY2UsICRwcmVmaXgpID0gQF87Ci0KLSAgICBteSAkaXNTdGFibGVDbGFz
cyA9IHNjYWxhcihAc3RhYmxlU3ltYm9scyk7Ci0KLSAgICBpZiAoQHskaW50ZXJmYWNlLT5jb25z
dGFudHN9KSB7Ci0gICAgICAgIG15IEBjb25zdGFudHMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0YW50
c307Ci0gICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50IChAY29uc3RhbnRzKSB7Ci0gICAgICAg
ICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25k
aXRpb25hbFN0cmluZygkY29uc3RhbnQpOwotICAgICAgICAgICAgbXkgJGNvbnN0YW50TmFtZSA9
ICRwcmVmaXggLiAkY29uc3RhbnQtPm5hbWU7Ci0gICAgICAgICAgICBteSAkY29uc3RhbnRWYWx1
ZSA9ICRjb25zdGFudC0+dmFsdWU7Ci0gICAgICAgICAgICBteSAkc3RhYmxlU3ltYm9sID0gZ3Jl
cCB7JF8gPX4gL15cUSRjb25zdGFudE5hbWUvfSBAc3RhYmxlU3ltYm9sczsKLSAgICAgICAgICAg
IG15ICRzdGFibGVTeW1ib2xWZXJzaW9uOwotICAgICAgICAgICAgaWYgKCRzdGFibGVTeW1ib2wp
IHsKLSAgICAgICAgICAgICAgICAoJGR1bW15LCAkc3RhYmxlU3ltYm9sVmVyc2lvbikgPSBzcGxp
dCgnQCcsICRzdGFibGVTeW1ib2wsIDIpOwotICAgICAgICAgICAgICAgIHB1c2goQHN5bWJvbHMs
ICIkY29uc3RhbnROYW1lXG4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbXkgQGNv
bnN0YW50SGVhZGVyID0gKCk7Ci0gICAgICAgICAgICBwdXNoKEBjb25zdGFudEhlYWRlciwgIiNp
ZiAke2NvbmRpdGlvbmFsU3RyaW5nfSIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAg
ICAgIHB1c2goQGNvbnN0YW50SGVhZGVyLCAiLyoqIik7Ci0gICAgICAgICAgICBwdXNoKEBjb25z
dGFudEhlYWRlciwgIiAqICR7Y29uc3RhbnROYW1lfToiKTsKLSAgICAgICAgICAgIGlmICgkc3Rh
YmxlU3ltYm9sVmVyc2lvbikgewotICAgICAgICAgICAgICAgIHB1c2goQGNvbnN0YW50SGVhZGVy
LCAiICogU2luY2U6ICR7c3RhYmxlU3ltYm9sVmVyc2lvbn0iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHB1c2goQGNvbnN0YW50SGVhZGVyLCAiICovIik7Ci0gICAgICAgICAgICBwdXNo
KEBjb25zdGFudEhlYWRlciwgIiNkZWZpbmUgJGNvbnN0YW50TmFtZSAkY29uc3RhbnRWYWx1ZSIp
OwotICAgICAgICAgICAgcHVzaChAY29uc3RhbnRIZWFkZXIsICIjZW5kaWYgLyogJHtjb25kaXRp
b25hbFN0cmluZ30gKi8iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgICAgICAgICBwdXNo
KEBjb25zdGFudEhlYWRlciwgIlxuIik7Ci0KLSAgICAgICAgICAgIGlmICgkc3RhYmxlU3ltYm9s
IG9yICEkaXNTdGFibGVDbGFzcykgewotICAgICAgICAgICAgICAgIHB1c2goQGhCb2R5LCBqb2lu
KCJcbiIsIEBjb25zdGFudEhlYWRlcikpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBoQm9keVVuc3RhYmxlLCBqb2luKCJcbiIsIEBjb25zdGFudEhlYWRlcikp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdWIgR2VuZXJhdGVIZWFk
ZXIgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJHBhcmVudENsYXNzTmFtZSwg
JGludGVyZmFjZSkgPSBAXzsKLQotICAgIG15ICRpbXBsQ29udGVudCA9ICIiOwotCi0gICAgIyBB
ZGQgdGhlIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCi0gICAgQGhQcmVmaXggPSBzcGxpdCgiXHIi
LCAkbGljZW5jZVRlbXBsYXRlKTsKLSAgICBwdXNoKEBoUHJlZml4LCAiXG4iKTsKLQotICAgIG15
ICRpc1N0YWJsZUNsYXNzID0gc2NhbGFyKEBzdGFibGVTeW1ib2xzKTsKLQotICAgIGlmICgkaXNT
dGFibGVDbGFzcykgewotICAgICAgICAjIEZvcmNlIHNpbmdsZSBoZWFkZXIgaW5jbHVkZS4KLSAg
ICAgICAgbXkgJGhlYWRlckNoZWNrID0gPDwgIkVPRiI7Ci0jaWYgIWRlZmluZWQoX19XRUJLSVRE
T01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQotI2Vycm9yICJPbmx5
IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCi0jZW5k
aWYKLQotRU9GCi0gICAgICAgIHB1c2goQGhQcmVmaXgsICRoZWFkZXJDaGVjayk7Ci0gICAgfQot
Ci0gICAgIyBIZWFkZXIgZ3VhcmQKLSAgICBteSAkZ3VhcmQgPSAkY2xhc3NOYW1lIC4gIl9oIjsK
LQotICAgIEBoUHJlZml4R3VhcmQgPSA8PCAiRU9GIjsKLSNpZm5kZWYgJGd1YXJkCi0jZGVmaW5l
ICRndWFyZAotCi1FT0YKLSAgICBpZiAoISRpc1N0YWJsZUNsYXNzKSB7Ci0gICAgICAgIHB1c2go
QGhQcmVmaXhHdWFyZCwgIiNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUElcblxuIik7
Ci0gICAgfQotCi0gICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1HX0JFR0lOX0RFQ0xTCi0K
LUVPRgotCi0gICAgcHVzaChAaEJvZHlQcmUsICRpbXBsQ29udGVudCk7Ci0KLSAgICBteSAkZGVj
YW1lbGl6ZSA9IGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpOwotICAgIG15ICRjbHNDYXBzID0g
dWMoJGRlY2FtZWxpemUpOwotICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUgPSAid2Via2l0X2Rv
bV8kZGVjYW1lbGl6ZSI7Ci0KLSAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKLSNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFXyR7Y2xzQ2Fwc30gICAgICAgICAgICAoJHtsb3dlckNhc2VJZmFjZU5h
bWV9X2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fJHtjbHNDYXBzfShvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
JHtjbHNDYXBzfSwgJHtjbGFzc05hbWV9KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV8ke2Nsc0NhcHN9
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1DbGFzcykKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU18ke2Nsc0NhcHN9KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9KSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9JU18ke2Nsc0NhcHN9X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV8k
e2Nsc0NhcHN9X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1DbGFzcykpCi0KLUVP
RgotCi0gICAgcHVzaChAaEJvZHksICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJGlzU3RhYmxl
Q2xhc3MpIHsKLSAgICAgICAgcHVzaChAc3ltYm9scywgIkdUeXBlICR7bG93ZXJDYXNlSWZhY2VO
YW1lfV9nZXRfdHlwZSh2b2lkKVxuIik7Ci0gICAgfQotCi0gICAgR2VuZXJhdGVDb25zdGFudHMo
JGludGVyZmFjZSwgIldFQktJVF9ET01fJHtjbHNDYXBzfV8iKTsKLQotICAgICRpbXBsQ29udGVu
dCA9IDw8ICJFT0YiOwotc3RydWN0IF8ke2NsYXNzTmFtZX0gewotICAgICR7cGFyZW50Q2xhc3NO
YW1lfSBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1zdHJ1Y3QgXyR7Y2xhc3NOYW1lfUNsYXNzIHsK
LSAgICAke3BhcmVudENsYXNzTmFtZX1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1FT0YKLQot
ICAgIHB1c2goQGhCb2R5LCAkaW1wbENvbnRlbnQpOwotCi0gICAgcHVzaChAaEJvZHksICJXRUJL
SVRfQVBJIEdUeXBlXG4ke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZ2V0X3R5cGUodm9pZCk7XG4iKTsK
LSAgICBwdXNoKEBoQm9keSwgIlxuIik7Ci19Ci0KLXN1YiBHZXRHUmV0dXJuTWFjcm8gewotICAg
IG15ICgkcGFyYW1OYW1lLCAkcGFyYW1JRExUeXBlLCAkcmV0dXJuVHlwZSwgJGZ1bmN0aW9uTmFt
ZSkgPSBAXzsKLQotICAgIG15ICRjb25kaXRpb247Ci0gICAgaWYgKCRwYXJhbUlETFR5cGUgZXEg
IkdFcnJvciIpIHsKLSAgICAgICAgJGNvbmRpdGlvbiA9ICIhJHBhcmFtTmFtZSB8fCAhKiRwYXJh
bU5hbWUiOwotICAgIH0gZWxzaWYgKElzR0RPTUNsYXNzVHlwZSgkcGFyYW1JRExUeXBlKSkgewot
ICAgICAgICBteSAkcGFyYW1UeXBlQ2FwcyA9IHVjKGRlY2FtZWxpemUoJHBhcmFtSURMVHlwZSkp
OwotICAgICAgICAkY29uZGl0aW9uID0gIldFQktJVF9ET01fSVNfJHtwYXJhbVR5cGVDYXBzfSgk
cGFyYW1OYW1lKSI7Ci0gICAgICAgIGlmIChQYXJhbUNhbkJlTnVsbCgkZnVuY3Rpb25OYW1lLCAk
cGFyYW1OYW1lKSkgewotICAgICAgICAgICAgJGNvbmRpdGlvbiA9ICIhJHBhcmFtTmFtZSB8fCAk
Y29uZGl0aW9uIjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChQYXJhbUNh
bkJlTnVsbCgkZnVuY3Rpb25OYW1lLCAkcGFyYW1OYW1lKSkgewotICAgICAgICAgICAgcmV0dXJu
ICIiOwotICAgICAgICB9Ci0gICAgICAgICRjb25kaXRpb24gPSAiJHBhcmFtTmFtZSI7Ci0gICAg
fQotCi0gICAgbXkgJG1hY3JvOwotICAgIGlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKLSAg
ICAgICAgJGRlZmF1bHRSZXR1cm4gPSAkcmV0dXJuVHlwZSBlcSAiZ2Jvb2xlYW4iID8gIkZBTFNF
IiA6IDA7Ci0gICAgICAgICRtYWNybyA9ICIgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoJGNvbmRp
dGlvbiwgJGRlZmF1bHRSZXR1cm4pO1xuIjsKLSAgICB9IGVsc2UgewotICAgICAgICAkbWFjcm8g
PSAiICAgIGdfcmV0dXJuX2lmX2ZhaWwoJGNvbmRpdGlvbik7XG4iOwotICAgIH0KLQotICAgIHJl
dHVybiAkbWFjcm87Ci19Ci0KLXN1YiBQYXJhbUNhbkJlTnVsbCB7Ci0gICAgbXkoJGZ1bmN0aW9u
TmFtZSwgJHBhcmFtTmFtZSkgPSBAXzsKLQotICAgIGlmIChkZWZpbmVkKCRmdW5jdGlvbk5hbWUp
KSB7Ci0gICAgICAgIHJldHVybiBzY2FsYXIoZ3JlcCB7JF8gZXEgJHBhcmFtTmFtZX0gQHskY2Fu
QmVOdWxsUGFyYW1zLT57JGZ1bmN0aW9uTmFtZX19KTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN1YiBHZXRGdW5jdGlvblNpZ25hdHVyZU5hbWUgewotICAgIG15ICgkaW50ZXJmYWNlTmFt
ZSwgJGZ1bmN0aW9uKSA9IEBfOwotCi0gICAgbXkgJHNpZ25hdHVyZU5hbWUgPSBkZWNhbWVsaXpl
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKLQotICAgIHJldHVybiAkc2lnbmF0dXJlTmFt
ZSBpZiAkc2lnbmF0dXJlTmFtZSBuZSAidHlwZSI7Ci0KLSAgICAjIEZvciBIVE1MIHR5cGUgYXR0
cmlidXRlIHVzZSB0eXBlX2F0dHIuCi0gICAgIyBFeGFtcGxlOiB3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X2dldF90eXBlX2F0dHIoKQotICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9
ICRjb2RlR2VuZXJhdG9yLT5Db250ZW50QXR0cmlidXRlTmFtZShcJWltcGxJbmNsdWRlcywgJGlu
dGVyZmFjZU5hbWUsICRmdW5jdGlvbik7Ci0gICAgaWYgKCRjb250ZW50QXR0cmlidXRlTmFtZSkg
ewotICAgICAgICByZXR1cm4gInR5cGVfYXR0ciIgaWYgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lIGVx
ICJXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyIjsKLSAgICB9Ci0KLSAgICAjIEZvciBtZXRo
b2RzIHJldHVybmluZyBhIE1JTUUgdHlwZSB1c2UgY29udGVudF90eXBlLgotICAgICMgRXhhbXBs
ZXM6IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2NvbnRlbnRfdHlwZSgpLCB3ZWJraXRfZG9t
X2RvbV9taW1lX3R5cGVfZ2V0X2NvbnRlbnRfdHlwZSgpCi0gICAgaWYgKCRpbnRlcmZhY2VOYW1l
IGVxICJTdHlsZVNoZWV0IiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NTWltZVR5cGUiKSB7Ci0g
ICAgICAgIHJldHVybiAiY29udGVudF90eXBlIjsKLSAgICB9Ci0KLSAgICAjIEZvciBIVE1MRmll
bGRTZXQgdXNlIGZpZWxkX3NldF90eXBlLgotICAgICMgRXhhbXBsZTogd2Via2l0X2RvbV9odG1s
X2ZpZWxkX3NldF9lbGVtZW50X2dldF9maWVsZF9zZXRfdHlwZSgpCi0gICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJIVE1MRmllbGRTZXQiKSB7Ci0gICAgICAgIHJldHVybiAiZmllbGRfc2V0X3R5
cGUiOwotICAgIH0KLQotICAgICMgRm9yIGFueSBvdGhlciBjYXNlcyB1c2UgdGhlIGxhc3Qgd29y
ZCBvZiB0aGUgaW50ZXJmYWNlIG5hbWUuCi0gICAgIyBFeGFtcGxlczogd2Via2l0X2RvbV9ibG9i
X2dldF9ibG9iX3R5cGUoKSwgd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfdHlwZSgpCi0gICAg
bXkgQG5hbWVUb2tlbnMgPSBzcGxpdCgnXycsIGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpKTsK
LSAgICBteSAkbmFtZSA9ICRuYW1lVG9rZW5zWy0xXTsKLQotICAgICMgSWYgdGhlIGxhc3Qgd29y
ZCBpcyBlbGVtZW50IGFuZCB0aGVyZSBhcmUgbW9yZSB3b3JkcywgdXNlIHRoZSBwcmV2aW91cyBv
bmUuCi0gICAgIyBFeGFtcGxlOiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2J1
dHRvbl90eXBlKCkKLSAgICBpZiAoc2NhbGFyKEBuYW1lVG9rZW5zKSA+IDEgJiYgJG5hbWUgZXEg
ImVsZW1lbnQiKSB7Ci0gICAgICAgICRuYW1lID0gJG5hbWVUb2tlbnNbLTJdOwotICAgIH0KLQot
ICAgIHJldHVybiAiJHtuYW1lfV90eXBlIjsKLX0KLQotc3ViIEdldFRyYW5zZmVyVHlwZUZvclJl
dHVyblR5cGUgewotICAgIG15ICRyZXR1cm5UeXBlID0gc2hpZnQ7Ci0KLSAgICAjIE5vZGUgaXMg
YWx3YXlzIHRyYW5zZmVyIG5vbmUuCi0gICAgcmV0dXJuICJub25lIiBpZiAkcmV0dXJuVHlwZSBl
cSAiTm9kZSI7Ci0KLSAgICAjIEFueSBiYXNlIGNsYXNzIGJ1dCBOb2RlIGlzIHRyYW5zZmVyIGZ1
bGwuCi0gICAgcmV0dXJuICJmdWxsIiBpZiBJc0Jhc2VUeXBlKCRyZXR1cm5UeXBlKTsKLQotICAg
ICMgQW55IG90aGVyIGNsYXNzIG5vdCBkZXJpdmVkIGZyb20gTm9kZSBpcyB0cmFuc2ZlciBmdWxs
LgotICAgIHJldHVybiAiZnVsbCIgaWYgJHRyYW5zZmVyRnVsbFR5cGVIYXNoeyRyZXR1cm5UeXBl
fTsKLSAgICByZXR1cm4gIm5vbmUiOwotfQotCi1zdWIgR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1l
IHsKLSAgICBteSAkZnVuY3Rpb25OYW1lID0gc2hpZnQ7Ci0KLSAgICAjIFJlbmFtZSB3ZWJraXRf
ZG9tX1tkb2N1bWVudHxlbGVtZW50XV9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUqIGFuZCB3ZWJr
aXRfZG9tX1tkb2N1bWVudHxlbGVtZW50XV9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZQotICAg
ICMgZnVuY3Rpb25zIHNpbmNlIHRoZXkgd2VyZSBjaGFuZ2VkIHRvIHJldHVybiBhIFdlYktpdERP
TUhUTUxDb2xsZWN0aW9uIGluc3RlYWQgb2YgYSBXZWJLaXRET01Ob2RlTGlzdCBpbgotICAgICMg
cjE4ODgwOSBhbmQgcjE4ODczNS4gVGhlIG9sZCBtZXRob2RzIGFyZSBub3cgbWFudWFsbHkgYWRk
ZWQgYXMgZGVwcmVjYXRlZC4KLSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5h
bWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zIgot
ICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVt
ZW50c19ieV9jbGFzc19uYW1lIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lIgotICAgICAgICB8fCAkZnVuY3Rp
b25OYW1lIGVxICJ3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25z
IgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2Vs
ZW1lbnRzX2J5X2NsYXNzX25hbWUiKSB7Ci0gICAgICAgIHJldHVybiAkZnVuY3Rpb25OYW1lIC4g
Il9hc19odG1sX2NvbGxlY3Rpb24iOwotICAgIH0KLQotICAgICMgUmVuYW1lIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlIGFzIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X2dldF9jYXB0dXJlX3R5cGUgc2luY2UKLSAgICAjIGl0IGNoYW5nZWQgdGhlIHJldHVy
biB2YWx1ZSBpbiByMjA0MzEyLgotICAgIGlmICgkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVyZSIpIHsKLSAgICAgICAgcmV0dXJuICRmdW5j
dGlvbk5hbWUgLiAiX3R5cGUiOwotICAgIH0KLQotICAgIHJldHVybiAkZnVuY3Rpb25OYW1lOwot
fQotCi1zdWIgRnVuY3Rpb25Vc2VkVG9SYWlzZUV4Y2VwdGlvbiB7Ci0gICAgbXkgJGZ1bmN0aW9u
TmFtZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21f
YXR0cl9zZXRfdmFsdWUiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21f
Y2hhcmFjdGVyX2RhdGFfYXBwZW5kX2RhdGEiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEg
IndlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc2V0X2RhdGEiCi0gICAgICAgIHx8ICRmdW5jdGlv
bk5hbWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3IiCi0gICAg
ICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVf
d2Fsa2VyIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX25vZGVfaXRl
cmF0b3JfbmV4dF9ub2RlIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9t
X25vZGVfaXRlcmF0b3JfcHJldmlvdXNfbm9kZSIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFtZSBl
cSAid2Via2l0X2RvbV9yYW5nZV9jbG9uZV9yYW5nZSIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFt
ZSBlcSAid2Via2l0X2RvbV9yYW5nZV9jb2xsYXBzZSIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFt
ZSBlcSAid2Via2l0X2RvbV9yYW5nZV9kZXRhY2giCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUg
ZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbW1vbl9hbmNlc3Rvcl9jb250YWluZXIiCi0gICAg
ICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0X2VuZF9jb250YWlu
ZXIiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0
YXJ0X2NvbnRhaW5lciIKLSAgICAgICAgfHwgJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9y
YW5nZV9nZXRfY29sbGFwc2VkIgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRf
ZG9tX3JhbmdlX2dldF9lbmRfb2Zmc2V0IgotICAgICAgICB8fCAkZnVuY3Rpb25OYW1lIGVxICJ3
ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9vZmZzZXQiCi0gICAgICAgIHx8ICRmdW5jdGlvbk5h
bWUgZXEgIndlYmtpdF9kb21fcmFuZ2VfdG9fc3RyaW5nIgotICAgICAgICB8fCAkZnVuY3Rpb25O
YW1lIGVxICJ3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3NldF9jdXJyZW50X25vZGUiOwotfQotCi1z
dWIgRnVuY3Rpb25Vc2VkVG9Ob3RSYWlzZUV4Y2VwdGlvbiB7Ci0gICAgbXkgJGZ1bmN0aW9uTmFt
ZSA9IHNoaWZ0OwotCi0gICAgcmV0dXJuICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fbm9k
ZV9jbG9uZV9ub2RlIjsKLX0KLQotc3ViIEdlbmVyYXRlRnVuY3Rpb24gewotICAgIG15ICgkb2Jq
ZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAkcHJlZml4LCAkcGFyZW50Tm9kZSkgPSBA
XzsKLQotICAgIG15ICRkZWNhbWVsaXplID0gZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSk7Ci0K
LSAgICBpZiAoU2tpcEZ1bmN0aW9uKCRvYmplY3QsICRmdW5jdGlvbiwgJHBhcmVudE5vZGUsICRk
ZWNhbWVsaXplLCAkcHJlZml4KSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbXkg
JGZ1bmN0aW9uU2lnVHlwZSA9ICRwcmVmaXggZXEgInNldF8iID8gInZvaWQiIDogJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGU7Ci0gICAgbXkgJGZ1bmN0aW9uU2lnTmFtZSA9IEdldEZ1bmN0aW9u
U2lnbmF0dXJlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uKTsKLSAgICBteSAkZnVuY3Rp
b25OYW1lID0gR2V0RWZmZWN0aXZlRnVuY3Rpb25OYW1lKCJ3ZWJraXRfZG9tXyIgLiAkZGVjYW1l
bGl6ZSAuICJfIiAuICRwcmVmaXggLiAkZnVuY3Rpb25TaWdOYW1lKTsKLSAgICBteSAkcmV0dXJu
VHlwZSA9IEdldEdsaWJUeXBlTmFtZSgkZnVuY3Rpb25TaWdUeXBlKTsKLSAgICBteSAkcmV0dXJu
VmFsdWVJc0dET01UeXBlID0gSXNHRE9NQ2xhc3NUeXBlKCRmdW5jdGlvblNpZ1R5cGUpOwotICAg
IG15ICRyYWlzZXNFeGNlcHRpb24gPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlJhaXNlc0V4Y2VwdGlvbiJ9OwotCi0gICAgIyBJZiBhIG1ldGhvZCB1c2VkIHRv
IHJhaXNlIGFuIGV4Y2VwdGlvbiwgYnV0IHdhcyBjaGFuZ2VkIHRvIG5vdCByYWlzZSBpdCBhbnlt
b3JlLCB0aGUKLSAgICAjIEFQSSBjaGFuZ2VzIGJlY2F1c2Ugd2UgdXNlIGEgZXhwbGljaXQgR0Vy
cm9yIHBhcmFtZXRlciB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbnMuCi0gICAgIyBJbiB0aGlzIGNh
c2UsIGl0J3MgYmV0dGVyIHRvIGtlZXAgdGhlIEdFcnJvciBwYXJhbWV0ZXIgZXZlbiBpZiBpdCdz
IHVudXNlZCB0byBrZWVwCi0gICAgIyB0aGUgQVBJIGNvbXBhdGliaWxpdHkuCi0gICAgbXkgJHVz
ZWRUb1JhaXNlRXhjZXB0aW9uID0gRnVuY3Rpb25Vc2VkVG9SYWlzZUV4Y2VwdGlvbigkZnVuY3Rp
b25OYW1lKTsKLQotICAgICMgSWYgYSBtZXRob2QgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBi
dXQgd2FzIGNoYW5nZWQgdG8gcmFpc2UgZXhjZXB0aW9ucywgdGhlIEFQSQotICAgICMgY2hhbmdl
cyBiZWNhdXNlIHdlIHVzZSBhIGV4cGxpY2l0IEdFcnJvciBwYXJhbWV0ZXIgdG8gaGFuZGxlIHRo
ZSBleGNlcHRpb25zLgotICAgICMgSW4gdGhpcyBjYXNlLCB3ZSBhZGQgX3dpdGhfZXJyb3Igc3Vm
Zml4IGFuZCB0aGUgcHJldmlvdXMgdmVyc2lvbiBzaW1wbHkgaWdub3JlcyB0aGUgZXJyb3IuCi0g
ICAgaWYgKEZ1bmN0aW9uVXNlZFRvTm90UmFpc2VFeGNlcHRpb24oJGZ1bmN0aW9uTmFtZSkpIHsK
LSAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbk5hbWUgLiAiX3dpdGhfZXJyb3IiOwot
ICAgIH0KLQotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsKLSAgICBteSAkcGFy
ZW50Q29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZygkcGFyZW50Tm9kZSk7Ci0gICAgbXkgQGNvbmRpdGlvbmFsV2FybiA9IEdlbmVyYXRl
Q29uZGl0aW9uYWxXYXJuaW5nKCRmdW5jdGlvbi0+c2lnbmF0dXJlKTsKLSAgICBteSBAcGFyZW50
Q29uZGl0aW9uYWxXYXJuID0gR2VuZXJhdGVDb25kaXRpb25hbFdhcm5pbmcoJHBhcmVudE5vZGUp
OwotCi0gICAgbXkgJGZ1bmN0aW9uU2lnID0gIiR7Y2xhc3NOYW1lfSogc2VsZiI7Ci0gICAgbXkg
JHN5bWJvbFNpZyA9ICIke2NsYXNzTmFtZX0qIjsKLQotICAgIG15ICRoYXNWYXJpYWRpYyA9IDA7
Ci0gICAgbXkgQGNhbGxJbXBsUGFyYW1zOwotICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5j
dGlvbi0+cGFyYW1ldGVyc30pIHsKLSAgICAgICAgbXkgJHBhcmFtSURMVHlwZSA9ICRwYXJhbS0+
dHlwZTsKLSAgICAgICAgbXkgJHNlcXVlbmNlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTZXF1
ZW5jZUlubmVyVHlwZSgkcGFyYW1JRExUeXBlKTsKLSAgICAgICAgJHBhcmFtSURMVHlwZSA9ICRz
ZXF1ZW5jZVR5cGUgaWYgJHNlcXVlbmNlVHlwZSBuZSAiIjsKLSAgICAgICAgbXkgJHBhcmFtVHlw
ZSA9IEdldEdsaWJUeXBlTmFtZSgkcGFyYW1JRExUeXBlKTsKLSAgICAgICAgbXkgJGNvbnN0ID0g
JHBhcmFtVHlwZSBlcSAiZ2NoYXIqIiA/ICJjb25zdCAiIDogIiI7Ci0gICAgICAgIG15ICRwYXJh
bU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0KLSAgICAgICAgaWYgKCRwYXJhbS0+aXNWYXJpYWRpYykg
ewotICAgICAgICAgICAgJGhhc1ZhcmlhZGljID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICRmdW5jdGlvblNpZyAuPSAiLCAke2NvbnN0fSRwYXJhbVR5cGUgJHBhcmFtTmFtZSI7
Ci0gICAgICAgICAgICAkc3ltYm9sU2lnIC49ICIsICR7Y29uc3R9JHBhcmFtVHlwZSI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBteSAkcGFyYW1Jc0dET01UeXBlID0gSXNHRE9NQ2xhc3NUeXBlKCRw
YXJhbUlETFR5cGUpOwotICAgICAgICBpZiAoJHBhcmFtSXNHRE9NVHlwZSkgewotICAgICAgICAg
ICAgaWYgKCRwYXJhbUlETFR5cGUgbmUgImFueSIpIHsKLSAgICAgICAgICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJXZWJLaXRET00ke3BhcmFtSURMVHlwZX1Qcml2YXRlLmgifSA9IDE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCRwYXJhbUlzR0RPTVR5cGUgfHwgJGNvZGVH
ZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkcGFyYW1JRExUeXBlKSB8fCAkcGFyYW0tPmlzVmFyaWFk
aWMpIHsKLSAgICAgICAgICAgICRwYXJhbU5hbWUgPSAiY29udmVydGVkIiAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRwYXJhbU5hbWUpOwotICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICIq
JHBhcmFtTmFtZSIgaWYgJGNvZGVHZW5lcmF0b3ItPlNob3VsZFBhc3NXcmFwcGVyQnlSZWZlcmVu
Y2UoJHBhcmFtLCAkcGFyZW50Tm9kZSk7Ci0gICAgICAgICAgICAkcGFyYW1OYW1lID0gIldURk1v
dmUoJHBhcmFtTmFtZSkiIGlmICRwYXJhbS0+aXNWYXJpYWRpYzsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoJHBhcmFtSURMVHlwZSBlcSAiTm9kZUZpbHRlciIgfHwgJHBhcmFtSURMVHlwZSBlcSAi
WFBhdGhOU1Jlc29sdmVyIikgewotICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICJXVEY6OmdldFB0
cigiIC4gJHBhcmFtTmFtZSAuICIpIjsKLSAgICAgICAgfQotICAgICAgICBpZiAoJHBhcmFtSURM
VHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewotICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgifSA9IDE7Ci0gICAgICAgICAgICAkcGFyYW1O
YW1lID0gIldlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCgiIC4gJHBhcmFtTmFtZSAuICIpKSI7Ci0gICAgICAgIH0KLSAgICAgICAgcHVz
aChAY2FsbEltcGxQYXJhbXMsICRwYXJhbU5hbWUpOwotICAgIH0KLQotICAgIGlmICgkcmV0dXJu
VHlwZSBuZSAidm9pZCIgJiYgJHJldHVyblZhbHVlSXNHRE9NVHlwZSAmJiAkZnVuY3Rpb25TaWdU
eXBlIG5lICJhbnkiKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IldlYktpdERPTSR7ZnVuY3Rp
b25TaWdUeXBlfVByaXZhdGUuaCJ9ID0gMTsKLSAgICB9Ci0KLSAgICAkZnVuY3Rpb25TaWcgLj0g
IiwgR0Vycm9yKiogZXJyb3IiIGlmICRyYWlzZXNFeGNlcHRpb24gfHwgJHVzZWRUb1JhaXNlRXhj
ZXB0aW9uOwotICAgICRzeW1ib2xTaWcgLj0gIiwgR0Vycm9yKioiIGlmICRyYWlzZXNFeGNlcHRp
b24gfHwgJHVzZWRUb1JhaXNlRXhjZXB0aW9uOwotCi0gICAgaWYgKCRoYXNWYXJpYWRpYykgewot
ICAgICAgICBteSAkcGFyYW0gPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc31bLTFdOwotICAgICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHBhcmFtLT50eXBlKSkgewot
ICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFtZTsKLSAgICAgICAgICAgICRm
dW5jdGlvblNpZyAuPSAiLCBndWludCBuXyRwYXJhbU5hbWUiOwotICAgICAgICAgICAgJHN5bWJv
bFNpZyAuPSAiLCBndWludCI7Ci0gICAgICAgIH0KLSAgICAgICAgJGZ1bmN0aW9uU2lnIC49ICIs
IC4uLiI7Ci0gICAgICAgICRzeW1ib2xTaWcgLj0gIiwgLi4uIjsKLSAgICB9Ci0KLSAgICBteSAk
c3ltYm9sID0gIiRyZXR1cm5UeXBlICRmdW5jdGlvbk5hbWUoJHN5bWJvbFNpZykiOwotICAgIG15
ICRpc1N0YWJsZUNsYXNzID0gc2NhbGFyKEBzdGFibGVTeW1ib2xzKTsKLSAgICBteSAoJHN0YWJs
ZVN5bWJvbCkgPSBncmVwIHskXyA9fiAvXlxRJHN5bWJvbC99IEBzdGFibGVTeW1ib2xzOwotICAg
IG15ICRzdGFibGVTeW1ib2xWZXJzaW9uOwotICAgIGlmICgkc3RhYmxlU3ltYm9sIGFuZCAkaXNT
dGFibGVDbGFzcykgewotICAgICAgICAoJGR1bW15LCAkc3RhYmxlU3ltYm9sVmVyc2lvbikgPSBz
cGxpdCgnQCcsICRzdGFibGVTeW1ib2wsIDIpOwotICAgICAgICBwdXNoKEBzeW1ib2xzLCAiJHN5
bWJvbFxuIik7Ci0gICAgfQotCi0gICAgbXkgQGZ1bmN0aW9uSGVhZGVyID0gKCk7Ci0gICAgIyBJ
bnNlcnQgaW50cm9zcGVjdGlvbiBhbm5vdGF0aW9ucwotICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVy
LCAiLyoqIik7Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiAke2Z1bmN0aW9uTmFtZX06
Iik7Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiBcQHNlbGY6IEEgIyR7Y2xhc3NOYW1l
fSIpOwotCi0gICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkg
ewotICAgICAgICBpZiAoJHBhcmFtLT5pc1ZhcmlhZGljKSB7Ci0gICAgICAgICAgICBsYXN0Owot
ICAgICAgICB9Ci0gICAgICAgIG15ICRwYXJhbUlETFR5cGUgPSAkcGFyYW0tPnR5cGU7Ci0gICAg
ICAgIG15ICRzZXF1ZW5jZVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U2VxdWVuY2VJbm5lclR5
cGUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgICRwYXJhbUlETFR5cGUgPSAkc2VxdWVuY2VUeXBl
IGlmICRzZXF1ZW5jZVR5cGUgbmUgIiI7Ci0gICAgICAgIG15ICRwYXJhbVR5cGUgPSBHZXRHbGli
VHlwZU5hbWUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgICMgJHBhcmFtVHlwZSBjYW4gaGF2ZSBh
IHRyYWlsaW5nICogaW4gc29tZSBjYXNlcwotICAgICAgICAkcGFyYW1UeXBlID1+IHMvXCokLy87
Ci0gICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgIG15ICRwYXJh
bUFubm90YXRpb25zID0gIiI7Ci0gICAgICAgIGlmIChQYXJhbUNhbkJlTnVsbCgkZnVuY3Rpb25O
YW1lLCAkcGFyYW1OYW1lKSkgewotICAgICAgICAgICAgJHBhcmFtQW5ub3RhdGlvbnMgPSAiIChh
bGxvdy1ub25lKToiOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAi
ICogXEAke3BhcmFtTmFtZX06JHtwYXJhbUFubm90YXRpb25zfSBBICMke3BhcmFtVHlwZX0iKTsK
LSAgICB9Ci0gICAgcHVzaChAZnVuY3Rpb25IZWFkZXIsICIgKiBcQGVycm9yOiAjR0Vycm9yIikg
aWYgJHJhaXNlc0V4Y2VwdGlvbiB8fCAkdXNlZFRvUmFpc2VFeGNlcHRpb247Ci0gICAgaWYgKCRo
YXNWYXJpYWRpYykgewotICAgICAgICBteSAkcGFyYW0gPSBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c31bLTFdOwotICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwotICAgICAgICBt
eSAkcGFyYW1UeXBlID0gR2V0R2xpYlR5cGVOYW1lKCRwYXJhbS0+dHlwZSk7Ci0gICAgICAgICRw
YXJhbVR5cGUgPX4gcy9cKiQvLzsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBv
aW50ZXJUeXBlKCRwYXJhbS0+dHlwZSkpIHsKLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uSGVh
ZGVyLCAiICogXEBuXyR7cGFyYW1OYW1lfTogbnVtYmVyIG9mICR7cGFyYW1OYW1lfSB0aGF0IHdp
bGwgYmUgcGFzc2VkIik7Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbkhlYWRlciwgIiAqIFxA
Li4uOiBsaXN0IG9mICMke3BhcmFtVHlwZX0iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiICogXEAuLi46IGxpc3Qgb2YgIyR7cGFyYW1UeXBl
fSBlbmRlZCBieSAlTlVMTC4iKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdXNoKEBmdW5jdGlv
bkhlYWRlciwgIiAqIik7Ci0gICAgbXkgJHJldHVyblR5cGVOYW1lID0gJHJldHVyblR5cGU7Ci0g
ICAgbXkgJGhhc1JldHVyblRhZyA9IDA7Ci0gICAgJHJldHVyblR5cGVOYW1lID1+IHMvXCokLy87
Ci0gICAgaWYgKCRyZXR1cm5WYWx1ZUlzR0RPTVR5cGUpIHsKLSAgICAgICAgbXkgJHRyYW5zZmVy
VHlwZSA9IEdldFRyYW5zZmVyVHlwZUZvclJldHVyblR5cGUoJGZ1bmN0aW9uU2lnVHlwZSk7Ci0g
ICAgICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiICogUmV0dXJuczogKHRyYW5zZmVyICR0cmFu
c2ZlclR5cGUpOiBBICMke3JldHVyblR5cGVOYW1lfSIpOwotICAgICAgICAkaGFzUmV0dXJuVGFn
ID0gMTsKLSAgICB9IGVsc2lmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKLSAgICAgICAgcHVz
aChAZnVuY3Rpb25IZWFkZXIsICIgKiBSZXR1cm5zOiBBICMke3JldHVyblR5cGVOYW1lfSIpOwot
ICAgICAgICAkaGFzUmV0dXJuVGFnID0gMTsKLSAgICB9Ci0gICAgaWYgKCEkc3RhYmxlU3ltYm9s
KSB7Ci0gICAgICAgIGlmICgkaGFzUmV0dXJuVGFnKSB7Ci0gICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbkhlYWRlciwgIiAqIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZnVuY3Rpb25IZWFk
ZXIsICIgKiBTdGFiaWxpdHk6IFVuc3RhYmxlIik7Ci0gICAgfSBlbHNpZiAoJHN0YWJsZVN5bWJv
bFZlcnNpb24pIHsKLSAgICAgICAgaWYgKCRoYXNSZXR1cm5UYWcpIHsKLSAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uSGVhZGVyLCAiICoiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5j
dGlvbkhlYWRlciwgIiAqIFNpbmNlOiAke3N0YWJsZVN5bWJvbFZlcnNpb259Iik7Ci0gICAgfQot
ICAgIHB1c2goQGZ1bmN0aW9uSGVhZGVyLCAiKiovIik7Ci0KLSAgICBwdXNoKEBmdW5jdGlvbkhl
YWRlciwgIldFQktJVF9BUEkgJHJldHVyblR5cGVcbiRmdW5jdGlvbk5hbWUoJGZ1bmN0aW9uU2ln
KTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbkhlYWRlciwgIlxuIik7Ci0gICAgaWYgKCRzdGFibGVT
eW1ib2wgb3IgISRpc1N0YWJsZUNsYXNzKSB7Ci0gICAgICAgIHB1c2goQGhCb2R5LCBqb2luKCJc
biIsIEBmdW5jdGlvbkhlYWRlcikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQGhCb2R5
VW5zdGFibGUsIGpvaW4oIlxuIiwgQGZ1bmN0aW9uSGVhZGVyKSk7Ci0gICAgfQotCi0gICAgcHVz
aChAY0JvZHksICIkcmV0dXJuVHlwZSAkZnVuY3Rpb25OYW1lKCRmdW5jdGlvblNpZylcbntcbiIp
OwotICAgIHB1c2goQGNCb2R5LCAiI2lmICR7cGFyZW50Q29uZGl0aW9uYWxTdHJpbmd9XG4iKSBp
ZiAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChAY0JvZHksICIjaWYgJHtjb25k
aXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLQotICAgIHB1c2goQGNC
b2R5LCAiICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTtcbiIpOwotCi0g
ICAgIyBnX3JldHVybiBtYWNyb3MgdG8gY2hlY2sgcGFyYW1ldGVycyBvZiBwdWJsaWMgbWV0aG9k
cy4KLSAgICAkZ1JldHVybk1hY3JvID0gR2V0R1JldHVybk1hY3JvKCJzZWxmIiwgJGludGVyZmFj
ZU5hbWUsICRyZXR1cm5UeXBlKTsKLSAgICBwdXNoKEBjQm9keSwgJGdSZXR1cm5NYWNybyk7Ci0K
LSAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7Ci0gICAg
ICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgIG15ICRwYXJhbUlETFR5
cGUgPSAkcGFyYW0tPnR5cGU7Ci0gICAgICAgIG15ICRwYXJhbVR5cGVJc1BvaW50ZXIgPSAhJGNv
ZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHBhcmFtSURMVHlwZSk7Ci0gICAgICAgIGlm
ICgkcGFyYW1UeXBlSXNQb2ludGVyICYmICEkcGFyYW0tPmlzVmFyaWFkaWMpIHsKLSAgICAgICAg
ICAgICRnUmV0dXJuTWFjcm8gPSBHZXRHUmV0dXJuTWFjcm8oJHBhcmFtTmFtZSwgJHBhcmFtSURM
VHlwZSwgJHJldHVyblR5cGUsICRmdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgcHVzaChAY0Jv
ZHksICRnUmV0dXJuTWFjcm8pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCRyYWlzZXNF
eGNlcHRpb24pIHsKLSAgICAgICAgJGdSZXR1cm5NYWNybyA9IEdldEdSZXR1cm5NYWNybygiZXJy
b3IiLCAiR0Vycm9yIiwgJHJldHVyblR5cGUpOwotICAgICAgICBwdXNoKEBjQm9keSwgJGdSZXR1
cm5NYWNybyk7Ci0gICAgfSBlbHNpZiAoJHVzZWRUb1JhaXNlRXhjZXB0aW9uKSB7Ci0gICAgICAg
IHB1c2goQGNCb2R5LCAiICAgIFVOVVNFRF9QQVJBTShlcnJvcik7XG4iKTsKLSAgICB9Ci0KLSAg
ICAjIFRoZSBXZWJLaXQ6OmNvcmUgaW1wbGVtZW50YXRpb25zIGNoZWNrIGZvciBudWxsIGFscmVh
ZHk7IG5vIG5lZWQgdG8gZHVwbGljYXRlIGVmZm9ydC4KLSAgICBwdXNoKEBjQm9keSwgIiAgICBX
ZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpO1xuIik7
Ci0KLSAgICAkcmV0dXJuUGFyYW1OYW1lID0gIiI7Ci0gICAgbXkgJGN1cnJlbnRQYXJhbWV0ZXJJ
bmRleCA9IDA7Ci0gICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
fSkgewotICAgICAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBlOwotICAgICAgICBt
eSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwotICAgICAgICBteSAkcGFyYW1UeXBlID0gR2V0
R2xpYlR5cGVOYW1lKCRwYXJhbUlETFR5cGUpOwotICAgICAgICBteSAkcGFyYW1Jc0dET01UeXBl
ID0gSXNHRE9NQ2xhc3NUeXBlKCRwYXJhbUlETFR5cGUpOwotICAgICAgICBteSAkcGFyYW1UeXBl
SXNQb2ludGVyID0gISRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCRwYXJhbUlETFR5
cGUpOwotICAgICAgICBteSAkY29udmVydGVkUGFyYW1OYW1lID0gImNvbnZlcnRlZCIgLiAkY29k
ZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkcGFyYW1OYW1lKTsKLQotICAgICAgICBteSAkcGFyYW1D
b3JlVHlwZSA9ICRwYXJhbVR5cGU7Ci0gICAgICAgIG15ICRwYXJhbUNvbnZlcnNpb25GdW5jdGlv
biA9ICIiOwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkcGFyYW1J
RExUeXBlKSkgewotICAgICAgICAgICAgJHBhcmFtQ29yZVR5cGUgPSAiV1RGOjpTdHJpbmciOwot
ICAgICAgICAgICAgJHBhcmFtQ29udmVyc2lvbkZ1bmN0aW9uID0gIldURjo6U3RyaW5nOjpmcm9t
VVRGOCI7Ci0gICAgICAgIH0gZWxzaWYgKCRwYXJhbUlETFR5cGUgZXEgIk5vZGVGaWx0ZXIiIHx8
ICRwYXJhbUlETFR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKLSAgICAgICAgICAgICRwYXJh
bUNvcmVUeXBlID0gIlJlZlB0cjxXZWJDb3JlOjokcGFyYW1JRExUeXBlPiI7Ci0gICAgICAgICAg
ICAkcGFyYW1Db252ZXJzaW9uRnVuY3Rpb24gPSAiV2ViS2l0Ojpjb3JlIgotICAgICAgICB9IGVs
c2lmICgkcGFyYW1Jc0dET01UeXBlKSB7Ci0gICAgICAgICAgICAkcGFyYW1Db3JlVHlwZSA9ICJX
ZWJDb3JlOjoke3BhcmFtSURMVHlwZX0qIjsKLSAgICAgICAgICAgICRwYXJhbUNvbnZlcnNpb25G
dW5jdGlvbiA9ICJXZWJLaXQ6OmNvcmUiCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoJHBhcmFt
LT5pc1ZhcmlhZGljKSB7Ci0gICAgICAgICAgICBteSAkcHJldmlvdXNQYXJhbU5hbWU7Ci0gICAg
ICAgICAgICBpZiAoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICRwcmV2aW91
c1BhcmFtTmFtZSA9ICJlcnJvciI7Ci0gICAgICAgICAgICB9IGVsc2lmICgkY3VycmVudFBhcmFt
ZXRlckluZGV4ID09IDApIHsKLSAgICAgICAgICAgICAgICAkcHJldmlvdXNQYXJhbU5hbWUgPSAi
c2VsZiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRwcmV2aW91c1Bh
cmFtTmFtZSA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfVskY3VycmVudFBhcmFtZXRlckluZGV4
IC0gMV0tPm5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAg
ICB2YV9saXN0IHZhcmlhZGljUGFyYW1ldGVyTGlzdDtcbiIpOwotICAgICAgICAgICAgcHVzaChA
Y0JvZHksICIgICAgVmVjdG9yPCRwYXJhbUNvcmVUeXBlPiAkY29udmVydGVkUGFyYW1OYW1lO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICB2YV9zdGFydCh2YXJpYWRpY1BhcmFt
ZXRlckxpc3QsICRwcmV2aW91c1BhcmFtTmFtZSk7XG4iKTsKLSAgICAgICAgICAgIGlmICgkcGFy
YW1UeXBlSXNQb2ludGVyKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgd2hp
bGUgKCRwYXJhbVR5cGUgdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9hcmcodmFyaWFkaWNQYXJhbWV0
ZXJMaXN0LCAkcGFyYW1UeXBlKSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGNCb2R5LCAi
ICAgICAgICAke2NvbnZlcnRlZFBhcmFtTmFtZX0uYXBwZW5kKCR7cGFyYW1Db252ZXJzaW9uRnVu
Y3Rpb259KHZhcmlhZGljUGFyYW1ldGVyKSk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgJHtjb252ZXJ0ZWRQYXJhbU5hbWV9LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobl8kcGFyYW1OYW1lKTtcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQGNCb2R5LCAiICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuXyRwYXJhbU5hbWU7
ICsraSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgICAgICR7Y29u
dmVydGVkUGFyYW1OYW1lfS51bmNoZWNrZWRBcHBlbmQodmFfYXJnKHZhcmlhZGljUGFyYW1ldGVy
TGlzdCwgJHBhcmFtVHlwZSkpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNo
KEBjQm9keSwgIiAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTtcbiIpOwotICAgICAg
ICB9IGVsc2lmICgkcGFyYW1Db3JlVHlwZSBuZSAkcGFyYW1UeXBlKSB7Ci0gICAgICAgICAgICBw
dXNoKEBjQm9keSwgIiAgICAkcGFyYW1Db3JlVHlwZSAkY29udmVydGVkUGFyYW1OYW1lID0gJHtw
YXJhbUNvbnZlcnNpb25GdW5jdGlvbn0oJHBhcmFtTmFtZSk7XG4iKTsKLSAgICAgICAgfQotICAg
ICAgICAkcmV0dXJuUGFyYW1OYW1lID0gJGNvbnZlcnRlZFBhcmFtTmFtZSBpZiAkcGFyYW0tPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21SZXR1cm4ifTsKLSAgICAgICAgJGN1cnJlbnRQYXJh
bWV0ZXJJbmRleCsrOwotICAgIH0KLQotICAgIG15ICRhc3NpZ24gPSAiIjsKLSAgICBteSAkYXNz
aWduUHJlID0gIiI7Ci0gICAgbXkgJGFzc2lnblBvc3QgPSAiIjsKLQotICAgICMgV2UgbmVlZCB0
byBzcGVjaWFsLWNhc2UgdGhlc2UgTm9kZSBtZXRob2RzIGJlY2F1c2UgdGhlaXIgQysrCi0gICAg
IyBzaWduYXR1cmUgaXMgZGlmZmVyZW50IGZyb20gd2hhdCB3ZSdkIGV4cGVjdCBnaXZlbiB0aGVp
ciBJREwKLSAgICAjIGRlc2NyaXB0aW9uOyBzZWUgTm9kZS5oLgotICAgIG15ICRmdW5jdGlvbkhh
c0N1c3RvbVJldHVybiA9ICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fbm9kZV9hcHBlbmRf
Y2hpbGQiIHx8Ci0gICAgICAgICRmdW5jdGlvbk5hbWUgZXEgIndlYmtpdF9kb21fbm9kZV9pbnNl
cnRfYmVmb3JlIiB8fAotICAgICAgICAkZnVuY3Rpb25OYW1lIGVxICJ3ZWJraXRfZG9tX25vZGVf
cmVwbGFjZV9jaGlsZCIgfHwKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSBlcSAid2Via2l0X2RvbV9u
b2RlX3JlbW92ZV9jaGlsZCI7Ci0gICAgICAgICAKLSAgICBpZiAoJHJldHVyblR5cGUgbmUgInZv
aWQiICYmICEkZnVuY3Rpb25IYXNDdXN0b21SZXR1cm4pIHsKLSAgICAgICAgaWYgKCRyZXR1cm5W
YWx1ZUlzR0RPTVR5cGUpIHsKLSAgICAgICAgICAgICRhc3NpZ24gPSAiUmVmUHRyPFdlYkNvcmU6
OiR7ZnVuY3Rpb25TaWdUeXBlfT4gZ29iamVjdFJlc3VsdCA9ICI7Ci0gICAgICAgICAgICAkYXNz
aWduUHJlID0gIldURjo6Z2V0UHRyKCI7Ci0gICAgICAgICAgICAkYXNzaWduUG9zdCA9ICIpIjsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRhc3NpZ24gPSAiJHtyZXR1cm5UeXBlfSBy
ZXN1bHQgPSAiOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5pc051bGxh
YmxlKSB7Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogUmV0dXJuaW5nIDAgaXMgcHJvYmFibHkg
bm90IHJpZ2h0IGZvciBhbGwgbnVsbGFibGUgYXR0cmlidXRlIHZhbHVlcy4KLSAgICAgICAgICAg
ICAgICAjIFdlIG1heSB3YW50IHRvIGhhbmRsZSB0aGlzIHRoZSB3YXkgd2UgZG8gaW4gdGhlIE9i
amVjdGl2ZS1DIGJpbmRpbmdzOiBub3QKLSAgICAgICAgICAgICAgICAjIGhhbmRsZSBpdCBhdCBh
bGwsIGFuZCBub3QgZXhwb3NlIGFueSBudWxsYWJsZXMuCi0gICAgICAgICAgICAgICAgJGFzc2ln
blBvc3QgPSAiLnZhbHVlT3IoMCkiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCRmdW5jdGlvblNpZ1R5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKLSAg
ICAgICAgICAgICRhc3NpZ25QcmUgPSAiY29udmVydFRvVVRGOFN0cmluZygiOwotICAgICAgICAg
ICAgJGFzc2lnblBvc3QgPSAiLT50b1N0cmluZygpKSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOwotICAgICAgICBwdXNoKEBjYWxsSW1wbFBh
cmFtcywgImVjIik7Ci0gICAgfQotCi0gICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1l
ID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRl
ZEFzIn0gfHwgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0KLSAgICBpZiAoJGZ1bmN0aW9u
SGFzQ3VzdG9tUmV0dXJuKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIGJvb2wgb2sgPSBp
dGVtLT4ke2Z1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAY2FsbElt
cGxQYXJhbXMpIC4gIik7XG4iKTsKLSAgICAgICAgbXkgJGN1c3RvbU5vZGVBcHBlbmRDaGlsZCA9
IDw8ICJFT0YiOwotICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIFdlYktpdDo6a2l0KCRyZXR1
cm5QYXJhbU5hbWUpOwotRU9GCi0gICAgICAgIHB1c2goQGNCb2R5LCAkY3VzdG9tTm9kZUFwcGVu
ZENoaWxkKTsKLSAgICAKLSAgICAgICAgaWYoJHJhaXNlc0V4Y2VwdGlvbikgewotICAgICAgICAg
ICAgbXkgJGV4Y2VwdGlvbkhhbmRsaW5nID0gPDwgIkVPRiI7Ci0KLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7Ci1FT0YKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAkZXhjZXB0aW9uSGFu
ZGxpbmcpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiAwO1xu
Iik7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAifVxuXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGZ1bmN0aW9uU2lnVHlwZSkp
IHsKLSAgICAgICAgbXkgJGdldHRlckNvbnRlbnRIZWFkOwotICAgICAgICBpZiAoJHByZWZpeCkg
ewotICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5l
cmF0b3ItPkdldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAk
ZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCBAY2FsbEltcGxQYXJhbXMp
OwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0gICAgICAgICAgICAgICAgbXkgJGltcGxlbWVudGVk
QnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVu
dGVkQnkifTsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9
LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCAiaXRlbSIpOwot
ICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiV2ViQ29yZTo6JHtpbXBsZW1lbnRlZEJ5
fTo6JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgJGZ1bmN0aW9uTmFtZSA9ICJpdGVtLT4ke2Z1bmN0aW9uTmFtZX0iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIiR7YXNzaWdufWNvbnZlcnRUb1VU
RjhTdHJpbmcoJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikp
O1xuIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG15IEBhcmd1bWVudHMgPSBAY2Fs
bEltcGxQYXJhbXM7Ci0gICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKLSAgICAgICAgICAgICAgICBteSAk
aW1wbGVtZW50ZWRCeSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW1wbGVtZW50ZWRCeSJ9OwotICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7aW1w
bGVtZW50ZWRCeX0uaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMs
ICJpdGVtIik7Ci0gICAgICAgICAgICAgICAgJGdldHRlckNvbnRlbnRIZWFkID0gIiR7YXNzaWdu
fWNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6JHtpbXBsZW1lbnRlZEJ5fTo6JHtmdW5jdGlv
bkltcGxlbWVudGF0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSk7XG4i
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAkZ2V0dGVyQ29udGVudEhl
YWQgPSAiJHthc3NpZ259Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT4ke2Z1bmN0aW9uSW1wbGVt
ZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpKTtcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIgICAgJHtnZXR0ZXJD
b250ZW50SGVhZH0iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBteSAkY29udGVudEhlYWQ7Ci0g
ICAgICAgIGlmICgkcHJlZml4IGVxICJnZXRfIikgewotICAgICAgICAgICAgbXkgKCRmdW5jdGlv
bk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4cHJlc3Npb24oXCVp
bXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVz
aChAYXJndW1lbnRzLCBAY2FsbEltcGxQYXJhbXMpOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0g
ICAgICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifTsKLSAgICAgICAgICAgICAgICAk
aW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAg
dW5zaGlmdChAYXJndW1lbnRzLCAiKml0ZW0iKTsKLSAgICAgICAgICAgICAgICAkZnVuY3Rpb25O
YW1lID0gIldlYkNvcmU6OiR7aW1wbGVtZW50ZWRCeX06OiR7ZnVuY3Rpb25OYW1lfSI7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaXRlbS0+
JHtmdW5jdGlvbk5hbWV9IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRjb250ZW50SGVh
ZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX0ke2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwg
QGFyZ3VtZW50cykgLiAiKSR7YXNzaWduUG9zdH07XG4iOwotICAgICAgICB9IGVsc2lmICgkcHJl
Zml4IGVxICJzZXRfIikgewotICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVu
dHMpID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRp
bnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24pOwotICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCBA
Y2FsbEltcGxQYXJhbXMpOwotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7Ci0gICAgICAgICAgICAgICAg
bXkgJGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkltcGxlbWVudGVkQnkifTsKLSAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIk
e2ltcGxlbWVudGVkQnl9LmgifSA9IDE7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1l
bnRzLCAiKml0ZW0iKTsKLSAgICAgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gIldlYkNvcmU6
OiR7aW1wbGVtZW50ZWRCeX06OiR7ZnVuY3Rpb25OYW1lfSI7Ci0gICAgICAgICAgICAgICAgJGNv
bnRlbnRIZWFkID0gIiR7YXNzaWdufSR7YXNzaWduUHJlfSR7ZnVuY3Rpb25OYW1lfSgiIC4gam9p
bigiLCAiLCBAYXJndW1lbnRzKSAuICIpJHthc3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaXRlbS0+JHtmdW5jdGlv
bk5hbWV9IjsKLSAgICAgICAgICAgICAgICAkY29udGVudEhlYWQgPSAiJHthc3NpZ259JHthc3Np
Z25QcmV9JHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikke2Fz
c2lnblBvc3R9O1xuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG15IEBhcmd1bWVudHMgPSBAY2FsbEltcGxQYXJhbXM7Ci0gICAgICAgICAgICBpZiAoJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0p
IHsKLSAgICAgICAgICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9OwotICAgICAgICAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IiR7aW1wbGVtZW50ZWRCeX0uaCJ9ID0gMTsKLSAgICAgICAgICAg
ICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsICIqaXRlbSIpOwotICAgICAgICAgICAgICAgICRjb250
ZW50SGVhZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX1XZWJDb3JlOjoke2ltcGxlbWVudGVkQnl9
Ojoke2Z1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRz
KSAuICIpJHthc3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICRjb250ZW50SGVhZCA9ICIke2Fzc2lnbn0ke2Fzc2lnblByZX1pdGVtLT4ke2Z1bmN0
aW9uSW1wbGVtZW50YXRpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpJHth
c3NpZ25Qb3N0fTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChA
Y0JvZHksICIgICAgJHtjb250ZW50SGVhZH0iKTsKLSAgICAgICAgCi0gICAgICAgIGlmKCRyYWlz
ZXNFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIG15ICRleGNlcHRpb25IYW5kbGluZyA9IDw8ICJF
T0YiOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OwotICAgIH0KLUVPRgotICAgICAgICAgICAgcHVzaChAY0JvZHksICRleGNlcHRpb25IYW5kbGlu
Zyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiICYm
ICEkZnVuY3Rpb25IYXNDdXN0b21SZXR1cm4pIHsKLSAgICAgICAgaWYgKCRmdW5jdGlvblNpZ1R5
cGUgbmUgImFueSIpIHsKLSAgICAgICAgICAgIGlmICgkcmV0dXJuVmFsdWVJc0dET01UeXBlKSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVy
biAwOyAvLyBUT0RPOiByZXR1cm4gY2FudmFzIG9iamVjdFxuIik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoJGNvbmRpdGlvbmFsU3RyaW5nKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5LCAi
I2Vsc2VcbiIpOwotCi0gICAgICAgIHB1c2goQGNCb2R5LCAiICAgIFVOVVNFRF9QQVJBTShzZWxm
KTtcbiIpOwotICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9KSB7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBVTlVTRURfUEFSQU0oIiAuICRw
YXJhbS0+bmFtZSAuICIpO1xuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247Ci0KLSAgICAg
ICAgcHVzaChAY0JvZHksIEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxX
YXJuKTsKLSAgICAgICAgaWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lkIikgewotICAgICAgICAgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCRmdW5jdGlvblNpZ1R5cGUpKSB7
Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7
cmV0dXJuVHlwZX0+KDApO1xuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiAwO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIjZW5kaWYgLyogJHtjb25kaXRpb25hbFN0cmlu
Z30gKi9cbiIpOwotICAgIH0KLQotICAgIGlmICgkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmcpIHsK
LSAgICAgICAgcHVzaChAY0JvZHksICIjZWxzZVxuIik7Ci0KLSAgICAgICAgcHVzaChAY0JvZHks
ICIgICAgVU5VU0VEX1BBUkFNKHNlbGYpO1xuIik7Ci0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAi
ICAgIFVOVVNFRF9QQVJBTSgiIC4gJHBhcmFtLT5uYW1lIC4gIik7XG4iKTsKLSAgICAgICAgfQot
ICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBVTlVTRURfUEFSQU0oZXJyb3IpO1xuIikgaWYgJHJh
aXNlc0V4Y2VwdGlvbjsKLQotICAgICAgICBwdXNoKEBjQm9keSwgQHBhcmVudENvbmRpdGlvbmFs
V2FybikgaWYgc2NhbGFyKEBwYXJlbnRDb25kaXRpb25hbFdhcm4pOwotICAgICAgICBpZiAoJHJl
dHVyblR5cGUgbmUgInZvaWQiKSB7Ci0gICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklz
Tm9uUG9pbnRlclR5cGUoJGZ1bmN0aW9uU2lnVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBwdXNo
KEBjQm9keSwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtyZXR1cm5UeXBlfT4oMCk7XG4iKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAg
cmV0dXJuIDA7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwdXNoKEBj
Qm9keSwgIiNlbmRpZiAvKiAke3BhcmVudENvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIik7Ci0gICAg
fQotCi0gICAgcHVzaChAY0JvZHksICJ9XG5cbiIpOwotfQotCi1zdWIgQ2xhc3NIYXNGdW5jdGlv
biB7Ci0gICAgbXkgKCRjbGFzcywgJG5hbWUpID0gQF87Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5j
dGlvbiAoQHskY2xhc3MtPmZ1bmN0aW9uc30pIHsKLSAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lIGVxICRuYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdWIgR2VuZXJhdGVGdW5jdGlvbnMgewot
ICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSkgPSBAXzsKLQotICAg
IGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pIHsKLSAgICAg
ICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAi
IiwgJGludGVyZmFjZSk7Ci0gICAgfQotCi0gICAgVE9QOgotICAgIGZvcmVhY2ggbXkgJGF0dHJp
YnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgewotICAgICAgICBpZiAoU2tpcEF0dHJp
YnV0ZSgkYXR0cmlidXRlKSkgewotICAgICAgICAgICAgbmV4dCBUT1A7Ci0gICAgICAgIH0KLQot
ICAgICAgICBteSAkYXR0ck5hbWVVcHBlciA9ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7Ci0gICAgICAgIG15ICRnZXRuYW1lID0gImdldCR7
YXR0ck5hbWVVcHBlcn0iOwotICAgICAgICBteSAkc2V0bmFtZSA9ICJzZXQke2F0dHJOYW1lVXBw
ZXJ9IjsKLSAgICAgICAgaWYgKENsYXNzSGFzRnVuY3Rpb24oJGludGVyZmFjZSwgJGdldG5hbWUp
IHx8IENsYXNzSGFzRnVuY3Rpb24oJGludGVyZmFjZSwgJHNldG5hbWUpKSB7Ci0gICAgICAgICAg
ICAjIFZlcnkgb2NjYXNpb25hbGx5IGFuIElETCBmaWxlIGRlZmluZXMgZ2V0dGVyL3NldHRlciBm
dW5jdGlvbnMgZm9yIG9uZSBvZiBpdHMKLSAgICAgICAgICAgICMgYXR0cmlidXRlczsgaW4gdGhp
cyBjYXNlIHdlIGRvbid0IG5lZWQgdG8gYXV0b2dlbmVyYXRlIHRoZSBnZXR0ZXIvc2V0dGVyLgot
ICAgICAgICAgICAgbmV4dCBUT1A7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICMgR2Vu
ZXJhdGUgYW4gYXR0cmlidXRlIGdldHRlci4gIEZvciBhbiBhdHRyaWJ1dGUgImZvbyIsIHRoaXMg
aXMgYSBmdW5jdGlvbiBuYW1lZAotICAgICAgICAjICJnZXRfZm9vIiB3aGljaCBjYWxscyBhIERP
TSBjbGFzcyBtZXRob2QgbmFtZWQgZm9vKCkuCi0gICAgICAgIG15ICRmdW5jdGlvbiA9IG5ldyBk
b21GdW5jdGlvbigpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzKHsleyRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzfX0pOwotICAg
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2V0
dGVyUmFpc2VzRXhjZXB0aW9uIn0pIHsKLSAgICAgICAgICAgICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uIn0gPSAiVkFMVUVfSVNfTUlT
U0lORyI7Ci0gICAgICAgIH0KLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50
ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAiZ2V0XyIsICRpbnRlcmZhY2UpOwotCi0gICAgICAgICMg
RklYTUU6IFdlIGFyZSBub3QgZ2VuZXJhdGluZyBzZXR0ZXJzIGZvciAnUmVwbGFjZWFibGUnCi0g
ICAgICAgICMgYXR0cmlidXRlcyBub3csIGJ1dCB3ZSBzaG91bGQgc29tZWhvdy4KLSAgICAgICAg
bXkgJGN1c3RvbSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbVNldHRlciJ9OwotICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+aXNSZWFkT25seSB8fCAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9
Ci0gICAgICAgICAgICB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDYWxsV2l0aCJ9Ci0gICAgICAgICAgICB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJTZXR0ZXJDYWxsV2l0aCJ9IHx8ICRjdXN0b20pIHsKLSAgICAg
ICAgICAgIG5leHQgVE9QOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAjIEdlbmVyYXRl
IGFuIGF0dHJpYnV0ZSBzZXR0ZXIuICBGb3IgYW4gYXR0cmlidXRlLCAiZm9vIiwgdGhpcyBpcyBh
IGZ1bmN0aW9uIG5hbWVkCi0gICAgICAgICMgInNldF9mb28iIHdoaWNoIGNhbGxzIGEgRE9NIGNs
YXNzIG1ldGhvZCBuYW1lZCBzZXRGb28oKS4KLSAgICAgICAgJGZ1bmN0aW9uID0gbmV3IGRvbUZ1
bmN0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZShuZXcgZG9t
U2lnbmF0dXJlKCkpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPm5hbWUpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlw
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwotICAgICAgICAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKHsleyRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzfX0pOwotICAgICAgICAKLSAgICAgICAgbXkgJHBhcmFtID0gbmV3IGRvbVNp
Z25hdHVyZSgpOwotICAgICAgICAkcGFyYW0tPm5hbWUoInZhbHVlIik7Ci0gICAgICAgICRwYXJh
bS0+dHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOwotICAgICAgICAkcGFyYW0tPmlz
TnVsbGFibGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5pc051bGxhYmxlKTsKLSAgICAgICAgbXkg
JWF0dHJpYnV0ZXMgPSAoKTsKLSAgICAgICAgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMoXCVh
dHRyaWJ1dGVzKTsKLSAgICAgICAgbXkgJGFycmF5UmVmID0gJGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
OwotICAgICAgICBwdXNoKEAkYXJyYXlSZWYsICRwYXJhbSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiU2V0dGVyUmFp
c2VzRXhjZXB0aW9uIn0pIHsKLSAgICAgICAgICAgICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmFpc2VzRXhjZXB0aW9uIn0gPSAiVkFMVUVfSVNfTUlTU0lORyI7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWxldGUgJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSYWlzZXNFeGNlcHRpb24ifTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFt
ZSwgJGZ1bmN0aW9uLCAic2V0XyIsICRpbnRlcmZhY2UpOwotICAgIH0KLX0KLQotc3ViIEltcGxl
bWVudHNJbnRlcmZhY2UgewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkaW1w
bGVtZW50SW50ZXJmYWNlID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gJGNvZGVHZW5lcmF0b3ItPklu
aGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRpbXBsZW1lbnRJbnRlcmZhY2UpOwotfQotCi1z
dWIgR2VuZXJhdGVDRmlsZSB7Ci0gICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2VOYW1lLCAkcGFy
ZW50Q2xhc3NOYW1lLCAkcGFyZW50R09ialR5cGUsICRpbnRlcmZhY2UpID0gQF87Ci0KLSAgICBp
ZiAoSW1wbGVtZW50c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAiRXZlbnRUYXJnZXQiKSkgewotICAg
ICAgICAkb2JqZWN0LT5HZW5lcmF0ZUV2ZW50VGFyZ2V0SWZhY2UoJGludGVyZmFjZSk7Ci0gICAg
fQotCi0gICAgbXkgJGltcGxDb250ZW50ID0gIiI7Ci0KLSAgICBteSAkZGVjYW1lbGl6ZSA9IGRl
Y2FtZWxpemUoJGludGVyZmFjZU5hbWUpOwotICAgIG15ICRjbHNDYXBzID0gdWMoJGRlY2FtZWxp
emUpOwotICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUgPSAid2Via2l0X2RvbV8kZGVjYW1lbGl6
ZSI7Ci0gICAgbXkgJHBhcmVudEltcGxDbGFzc05hbWUgPSBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1l
KCRpbnRlcmZhY2UpOwotICAgIG15ICRiYXNlQ2xhc3NOYW1lID0gR2V0QmFzZUNsYXNzKCRwYXJl
bnRJbXBsQ2xhc3NOYW1lLCAkaW50ZXJmYWNlKTsKLQotICAgICMgQWRkIGEgcHJpdmF0ZSBzdHJ1
Y3Qgb25seSBmb3IgZGlyZWN0IHN1YmNsYXNzZXMgb2YgT2JqZWN0IHNvIHRoYXQgd2UgY2FuIHVz
ZSBSZWZQdHIKLSAgICAjIGZvciB0aGUgV2ViQ29yZSB3cmFwcGVkIG9iamVjdCBhbmQgbWFrZSBz
dXJlIHdlIG9ubHkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRlciBvbmNlLgotICAgIGlm
ICgkcGFyZW50SW1wbENsYXNzTmFtZSBlcSAiT2JqZWN0IikgewotICAgICAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygk
aW50ZXJmYWNlKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIjZGVmaW5lIFdFQktJVF9E
T01fJHtjbHNDYXBzfV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFU
RShvYmosIFdFQktJVF9ET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1Qcml2YXRlKVxu
XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICJ0eXBlZGVmIHN0cnVjdCBfJHtjbGFz
c05hbWV9UHJpdmF0ZSB7XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIjaWYgJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAgcHVz
aChAY1N0cnVjdFByaXYsICIgICAgUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IGNv
cmVPYmplY3Q7XG4iKTsKLSAgICAgICAgcHVzaChAY1N0cnVjdFByaXYsICIjZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICAgICAgcHVz
aChAY1N0cnVjdFByaXYsICJ9ICR7Y2xhc3NOYW1lfVByaXZhdGU7XG5cbiIpOwotICAgIH0KLQot
ICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwotJHtkZWZpbmVUeXBlTWFjcm99KCR7Y2xhc3NO
YW1lfSwgJHtsb3dlckNhc2VJZmFjZU5hbWV9LCAke3BhcmVudEdPYmpUeXBlfSR7ZGVmaW5lVHlw
ZUludGVyZmFjZUltcGxlbWVudGF0aW9ufQotCi1FT0YKLSAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICRpbXBsQ29udGVudCk7Ci0KLSAgICBpZiAoJHBhcmVudEltcGxDbGFzc05hbWUgZXEgIk9i
amVjdCIpIHsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiJHtjbGFzc05hbWV9KiBraXQoV2Vi
Q29yZTo6JGludGVyZmFjZU5hbWUqIG9iailcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYs
ICJ7XG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgIGlmICghb2JqKVxuIik7Ci0g
ICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICAgICAgcmV0dXJuIDA7XG5cbiIpOwotICAgICAg
ICBwdXNoKEBjQm9keVByaXYsICIgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSlcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgICAgIHJldHVy
biBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ocmV0KTtcblxuIik7Ci0gICAgICAgIGlmIChJc1BvbHlt
b3JwaGljKCRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICAgICAgcHVzaChAY0JvZHlQcml2LCAi
ICAgIHJldHVybiB3cmFwKG9iaik7XG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHB1c2goQGNCb2R5UHJpdiwgIiAgICByZXR1cm4gd3JhcCR7aW50ZXJmYWNlTmFtZX0ob2JqKTtc
biIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIn1cblxuIik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiJHtjbGFzc05hbWV9KiBraXQoV2Vi
Q29yZTo6JGludGVyZmFjZU5hbWUqIG9iailcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByaXYs
ICJ7XG4iKTsKLSAgICAgICAgaWYgKCFJc1BvbHltb3JwaGljKCRiYXNlQ2xhc3NOYW1lKSkgewot
ICAgICAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgIGlmICghb2JqKVxuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgICAgIHJldHVybiAwO1xuXG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2Fj
aGU6OmdldChvYmopKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBjQm9keVByaXYsICIgICAgICAg
IHJldHVybiBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ocmV0KTtcblxuIik7Ci0gICAgICAgICAgICBw
dXNoKEBjQm9keVByaXYsICIgICAgcmV0dXJuIHdyYXAke2ludGVyZmFjZU5hbWV9KG9iaik7XG4i
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICBy
ZXR1cm4gV0VCS0lUX0RPTV8ke2Nsc0NhcHN9KGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjokYmFz
ZUNsYXNzTmFtZSo+KG9iaikpKTtcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2goQGNCb2R5
UHJpdiwgIn1cblxuIik7Ci0gICAgfQotCi0gICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci1X
ZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlKCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkKLXsK
LSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFt
ZX0qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi0k
e2NsYXNzTmFtZX0qIHdyYXAke2ludGVyZmFjZU5hbWV9KFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFt
ZX0qIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBX
RUJLSVRfRE9NXyR7Y2xzQ2Fwc30oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV8ke2Nsc0Nh
cHN9LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLUVPRgotICAg
IHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKLQotICAgICRvYmplY3QtPkdlbmVyYXRl
UHJvcGVydGllcygkaW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSk7Ci0gICAgJG9iamVjdC0+R2Vu
ZXJhdGVGdW5jdGlvbnMoJGludGVyZmFjZU5hbWUsICRpbnRlcmZhY2UpOwotfQotCi1zdWIgR2Vu
ZXJhdGVFbmRIZWFkZXIgewotICAgIG15ICgkb2JqZWN0KSA9IEBfOwotCi0gICAgbXkgJGlzU3Rh
YmxlQ2xhc3MgPSBzY2FsYXIoQHN0YWJsZVN5bWJvbHMpOwotICAgIGlmICghJGlzU3RhYmxlQ2xh
c3MpIHsKLSAgICAgICAgcHVzaChAaFByZWZpeEd1YXJkRW5kLCAiI2VuZGlmIC8qIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSSAqL1xuIik7Ci0gICAgfQotCi0gICAgI0hlYWRlciBndWFyZAot
ICAgIG15ICRndWFyZCA9ICRjbGFzc05hbWUgLiAiX2giOwotCi0gICAgcHVzaChAaEJvZHksICJH
X0VORF9ERUNMU1xuXG4iKTsKLSAgICBwdXNoKEBoUHJlZml4R3VhcmRFbmQsICIjZW5kaWYgLyog
JGd1YXJkICovXG4iKTsKLX0KLQotc3ViIElzUG9seW1vcnBoaWMgewotICAgIG15ICR0eXBlID0g
c2hpZnQ7Ci0KLSAgICByZXR1cm4gc2NhbGFyKGdyZXAgeyRfIGVxICR0eXBlfSBxdyhCbG9iIEV2
ZW50IEhUTUxDb2xsZWN0aW9uIE5vZGUgU3R5bGVTaGVldCBUZXh0VHJhY2tDdWUpKTsKLX0KLQot
c3ViIEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSB7Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0Owot
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLQotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGlu
dGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZGVjYW1lbGl6ZSA9IGRlY2FtZWxpemUoJGludGVyZmFj
ZU5hbWUpOwotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5l
cmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgIG15IEBjb25kaXRpb25hbFdh
cm4gPSBHZW5lcmF0ZUNvbmRpdGlvbmFsV2FybmluZygkaW50ZXJmYWNlKTsKLQotICAgICRpbXBs
SW5jbHVkZXN7IkdPYmplY3RFdmVudExpc3RlbmVyLmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRl
c3siV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJXZWJL
aXRET01FdmVudFByaXZhdGUuaCJ9ID0gMTsKLQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywg
InN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJy
b3IqKiBlcnJvcilcbntcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNpZiAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBpZiAoIWNv
cmVFdmVudClcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICAgICAgcmV0dXJu
IGZhbHNlO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFdlYkNvcmU6OiR7
aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVy
ZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7XG5cbiIp
OwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwg
ZWMpO1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIGlmIChlYykge1xuICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpO1xu
Iik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKFwiV0VCS0lUX0RPTVwiKSwgZGVzY3JpcHRp
b24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7XG4gICAgfVxuIik7Ci0gICAgcHVzaChAY0JvZHlQ
cm9wZXJ0aWVzLCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKLSAgICBpZiAoJGNvbmRpdGlvbmFs
U3RyaW5nKSB7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbHNlXG4iKTsKLSAg
ICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpO1xu
Iik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0oZXZl
bnQpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFS
QU0oZXJyb3IpO1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgQGNvbmRpdGlv
bmFsV2FybikgaWYgc2NhbGFyKEBjb25kaXRpb25hbFdhcm4pOwotICAgICAgICBwdXNoKEBjQm9k
eVByb3BlcnRpZXMsICIgICAgcmV0dXJuIGZhbHNlO1xuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxT
dHJpbmd9XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAifVxuXG4iKTsK
LQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgInN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
XyR7ZGVjYW1lbGl6ZX1fYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpXG57XG4iKTsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIjaWYgJHtj
b25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTtcbiIpOwotICAgIHB1c2goQGNCb2R5UHJvcGVydGll
cywgIiAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTtcbiIpOwotICAgIGlmICgkY29uZGl0aW9uYWxTdHJpbmcpIHsKLSAgICAgICAg
cHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2Vsc2VcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVBy
b3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7XG4iKTsKLSAgICAgICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpO1xuIik7Ci0gICAg
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7XG4i
KTsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTSh1c2VD
YXB0dXJlKTtcbiIpOwotICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsIEBjb25kaXRpb25h
bFdhcm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxXYXJuKTsKLSAgICAgICAgcHVzaChAY0JvZHlQ
cm9wZXJ0aWVzLCAiICAgIHJldHVybiBmYWxzZTtcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3Ry
aW5nfVxuIik7Ci0gICAgfQotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIn1cblxuIik7Ci0K
LSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV8k
e2RlY2FtZWxpemV9X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKVxue1xuIik7Ci0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2lmICR7
Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAiICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7XG4iKTsKLSAgICBwdXNoKEBjQm9keVByb3BlcnRp
ZXMsICIgICAgcmV0dXJuIFdlYkNvcmU6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7XG4iKTsKLSAgICBpZiAoJGNvbmRpdGlvbmFsU3RyaW5nKSB7Ci0gICAg
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbHNlXG4iKTsKLSAgICAgICAgcHVzaChAY0Jv
ZHlQcm9wZXJ0aWVzLCAiICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpO1xuIik7Ci0gICAgICAgIHB1
c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTtcbiIpOwot
ICAgICAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICIgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIp
O1xuIik7Ci0gICAgICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBVTlVTRURfUEFSQU0o
dXNlQ2FwdHVyZSk7XG4iKTsKLSAgICAgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCBAY29uZGl0
aW9uYWxXYXJuKSBpZiBzY2FsYXIoQGNvbmRpdGlvbmFsV2Fybik7Ci0gICAgICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgIiAgICByZXR1cm4gZmFsc2U7XG4jZW5kaWYgLy8gJHtjb25kaXRpb25h
bFN0cmluZ31cbiIpOwotICAgIH0KLSAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJ9XG5cbiIp
OwotCi0gICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAic3RhdGljIHZvaWQgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSlcbntcbiIp
OwotICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQg
PSB3ZWJraXRfZG9tXyR7ZGVjYW1lbGl6ZX1fZGlzcGF0Y2hfZXZlbnQ7XG4iKTsKLSAgICBwdXNo
KEBjQm9keVByb3BlcnRpZXMsICIgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21fJHtkZWNhbWVsaXplfV9hZGRfZXZlbnRfbGlzdGVuZXI7XG4iKTsKLSAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICIgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21fJHtkZWNhbWVsaXplfV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7XG59XG5cbiIpOwotCi0g
ICAgJGRlZmluZVR5cGVNYWNybyA9ICJHX0RFRklORV9UWVBFX1dJVEhfQ09ERSI7Ci0gICAgJGRl
ZmluZVR5cGVJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbiA9ICIsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkiOwotfQotCi1zdWIgR2VuZXJhdGUgewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNl
KSA9IEBfOwotCi0gICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVudENsYXNzTmFtZSgk
aW50ZXJmYWNlKTsKLSAgICBteSAkcGFyZW50R09ialR5cGUgPSBHZXRQYXJlbnRHT2JqVHlwZSgk
aW50ZXJmYWNlKTsKLSAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0g
ICAgbXkgJHBhcmVudEltcGxDbGFzc05hbWUgPSBHZXRQYXJlbnRJbXBsQ2xhc3NOYW1lKCRpbnRl
cmZhY2UpOwotICAgIG15ICRiYXNlQ2xhc3NOYW1lID0gR2V0QmFzZUNsYXNzKCRwYXJlbnRJbXBs
Q2xhc3NOYW1lLCAkaW50ZXJmYWNlKTsKLQotICAgICMgQWRkIHRoZSBkZWZhdWx0IGltcGwgaGVh
ZGVyIHRlbXBsYXRlCi0gICAgQGNQcmVmaXggPSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRl
KTsKLSAgICBwdXNoKEBjUHJlZml4LCAiXG4iKTsKLQotICAgICRpbXBsSW5jbHVkZXN7IkRPTU9i
amVjdENhY2hlLmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRlc3siV2ViS2l0RE9NUHJpdmF0ZS5o
In0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7ImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5o
In0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfVByaXZhdGUuaCJ9ID0gMTsK
LSAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVudC5oIn0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7
IkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIn0gPSAxOwotICAgICRpbXBsSW5jbHVkZXN7IkV4Y2Vw
dGlvbkNvZGUuaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaCJ9ID0gMTsKLSAgICAkaW1wbEluY2x1ZGVzeyJDU1NJbXBvcnRSdWxlLmgifSA9IDE7
Ci0gICAgaWYgKCRwYXJlbnRJbXBsQ2xhc3NOYW1lIG5lICJPYmplY3QiIGFuZCBJc1BvbHltb3Jw
aGljKCRiYXNlQ2xhc3NOYW1lKSkgewotICAgICAgICAkaW1wbEluY2x1ZGVzeyJXZWJLaXRET00k
e2Jhc2VDbGFzc05hbWV9UHJpdmF0ZS5oIn0gPSAxOwotICAgIH0KLQotICAgICRoZHJJbmNsdWRl
c3sid2Via2l0ZG9tLyR7cGFyZW50Q2xhc3NOYW1lfS5oIn0gPSAxOwotCi0gICAgJG9iamVjdC0+
R2VuZXJhdGVIZWFkZXIoJGludGVyZmFjZU5hbWUsICRwYXJlbnRDbGFzc05hbWUsICRpbnRlcmZh
Y2UpOwotICAgICRvYmplY3QtPkdlbmVyYXRlQ0ZpbGUoJGludGVyZmFjZU5hbWUsICRwYXJlbnRD
bGFzc05hbWUsICRwYXJlbnRHT2JqVHlwZSwgJGludGVyZmFjZSk7Ci0gICAgJG9iamVjdC0+R2Vu
ZXJhdGVFbmRIZWFkZXIoKTsKLX0KLQotc3ViIEhhc1Vuc3RhYmxlQ3VzdG9tQVBJIHsKLSAgICBt
eSAkZG9tQ2xhc3NOYW1lID0gc2hpZnQ7Ci0KLSAgICByZXR1cm4gc2NhbGFyKGdyZXAgeyRfIGVx
ICRkb21DbGFzc05hbWV9IHF3KFdlYktpdERPTURPTVdpbmRvdyBXZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXJzTmFtZXNwYWNlIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCkpOwotfQotCi1zdWIg
V3JpdGVEYXRhIHsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OwotICAgIG15ICRvdXRwdXREaXIgPSBzaGlmdDsKLSAgICBta2RpciAkb3V0cHV0RGly
OwotCi0gICAgbXkgJGlzU3RhYmxlQ2xhc3MgPSBzY2FsYXIoQHN0YWJsZVN5bWJvbHMpOwotCi0g
ICAgIyBXcml0ZSBhIHByaXZhdGUgaGVhZGVyLgotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGlu
dGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZmlsZW5hbWUgPSAiJG91dHB1dERpci8iIC4gJGNsYXNz
TmFtZSAuICJQcml2YXRlLmgiOwotICAgIG15ICRndWFyZCA9ICIke2NsYXNzTmFtZX1Qcml2YXRl
X2giOwotCi0gICAgIyBBZGQgdGhlIGd1YXJkIGlmIHRoZSAnQ29uZGl0aW9uYWwnIGV4dGVuZGVk
IGF0dHJpYnV0ZSBleGlzdHMKLSAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVy
YXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKLQotICAgIG9wZW4o
UFJJVkhFQURFUiwgIj4kZmlsZW5hbWUiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkZmls
ZW5hbWUgZm9yIHdyaXRpbmciOwotCi0gICAgcHJpbnQgUFJJVkhFQURFUiBzcGxpdCgiXHIiLCAk
bGljZW5jZVRlbXBsYXRlKTsKLSAgICBwcmludCBQUklWSEVBREVSICJcbiI7Ci0KLSAgICBteSAk
dGV4dCA9IDw8ICJFT0YiOwotI2lmbmRlZiAkZ3VhcmQKLSNkZWZpbmUgJGd1YXJkCi0KLSNpbmNs
dWRlICIke2ludGVyZmFjZU5hbWV9LmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tLyR7Y2xhc3NOYW1l
fS5oPgotRU9GCi0KLSAgICBwcmludCBQUklWSEVBREVSICR0ZXh0OwotICAgIHByaW50IFBSSVZI
RUFERVIgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
Ci0gICAgcHJpbnQgUFJJVkhFQURFUiAiXG4iOwotICAgICR0ZXh0ID0gPDwgIkVPRiI7Ci1uYW1l
c3BhY2UgV2ViS2l0IHsKLSR7Y2xhc3NOYW1lfSogd3JhcCR7aW50ZXJmYWNlTmFtZX0oV2ViQ29y
ZTo6JHtpbnRlcmZhY2VOYW1lfSopOwotJHtjbGFzc05hbWV9KiBraXQoV2ViQ29yZTo6JHtpbnRl
cmZhY2VOYW1lfSopOwotV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZSgke2NsYXNzTmFt
ZX0qKTsKLUVPRgotCi0gICAgcHJpbnQgUFJJVkhFQURFUiAkdGV4dDsKLQotICAgICR0ZXh0ID0g
PDwgIkVPRiI7Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotRU9GCi0KLSAgICBwcmludCBQUklW
SEVBREVSICR0ZXh0OwotICAgIHByaW50IFBSSVZIRUFERVIgIiNlbmRpZiAvKiAke2NvbmRpdGlv
bmFsU3RyaW5nfSAqL1xuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICBwcmludCBQUklW
SEVBREVSICIjZW5kaWYgLyogJHtndWFyZH0gKi9cbiI7Ci0KLSAgICBjbG9zZShQUklWSEVBREVS
KTsKLQotICAgIG15ICRiYXNlbmFtZSA9IEZpbGVOYW1lUHJlZml4IC4gJGludGVyZmFjZU5hbWU7
Ci0gICAgJGJhc2VuYW1lID1+IHMvXy8vZzsKLQotICAgICMgV3JpdGUgcHVibGljIGhlYWRlci4K
LSAgICBteSAkZnVsbEhlYWRlckZpbGVuYW1lID0gIiRvdXRwdXREaXIvIiAuICRiYXNlbmFtZSAu
ICIuaCI7Ci0gICAgbXkgJGluc3RhbGxlZEhlYWRlckZpbGVuYW1lID0gIiR7YmFzZW5hbWV9Lmgi
OwotICAgIG9wZW4oSEVBREVSLCAiPiRmdWxsSGVhZGVyRmlsZW5hbWUiKSBvciBkaWUgIkNvdWxk
bid0IG9wZW4gZmlsZSAkZnVsbEhlYWRlckZpbGVuYW1lIjsKLQotICAgIHByaW50IEhFQURFUiBA
aFByZWZpeDsKLSAgICBwcmludCBIRUFERVIgQGhQcmVmaXhHdWFyZDsKLSAgICBwcmludCBIRUFE
RVIgIiNpbmNsdWRlIDxnbGliLW9iamVjdC5oPlxuIjsKLSAgICBwcmludCBIRUFERVIgbWFwIHsg
IiNpbmNsdWRlIDwkXz5cbiIgfSBzb3J0IGtleXMoJWhkckluY2x1ZGVzKTsKLSAgICBpZiAoJGlz
U3RhYmxlQ2xhc3MpIHsKLSAgICAgICAgcHJpbnQgSEVBREVSICIjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD5cblxuIjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoSGFz
VW5zdGFibGVDdXN0b21BUEkoJGNsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgIHByaW50IEhFQURF
UiAiI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DdXN0b21VbnN0YWJsZS5oPlxuIjsKLSAg
ICAgICAgfQotICAgICAgICBwcmludCBIRUFERVIgIiNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPlxuXG4iOwotICAgIH0KLSAgICBwcmludCBIRUFERVIgQGhC
b2R5UHJlOwotICAgIHByaW50IEhFQURFUiBAaEJvZHk7Ci0gICAgcHJpbnQgSEVBREVSIEBoUHJl
Zml4R3VhcmRFbmQ7Ci0KLSAgICBjbG9zZShIRUFERVIpOwotCi0gICAgIyBXcml0ZSB0aGUgdW5z
dGFibGUgaGVhZGVyIGlmIG5lZWRlZC4KLSAgICBpZiAoJGlzU3RhYmxlQ2xhc3MgYW5kIHNjYWxh
cihAaEJvZHlVbnN0YWJsZSkpIHsKLSAgICAgICAgbXkgJGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVu
YW1lID0gIiRvdXRwdXREaXIvIiAuICRjbGFzc05hbWUgLiAiVW5zdGFibGUuaCI7Ci0gICAgICAg
IG9wZW4oVU5TVEFCTEUsICI+JGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVuYW1lIikgb3IgZGllICJD
b3VsZG4ndCBvcGVuIGZpbGUgJGZ1bGxVbnN0YWJsZUhlYWRlckZpbGVuYW1lIjsKLQotICAgICAg
ICBwcmludCBVTlNUQUJMRSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKLSAgICAgICAg
cHJpbnQgVU5TVEFCTEUgIlxuIjsKLQotICAgICAgICAkZ3VhcmQgPSAiJHtjbGFzc05hbWV9VW5z
dGFibGVfaCI7Ci0gICAgICAgICR0ZXh0ID0gPDwgIkVPRiI7Ci0jaWZuZGVmICRndWFyZAotI2Rl
ZmluZSAkZ3VhcmQKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi1FT0YK
LSAgICAgICAgcHJpbnQgVU5TVEFCTEUgJHRleHQ7Ci0gICAgICAgIGlmIChIYXNVbnN0YWJsZUN1
c3RvbUFQSSgkY2xhc3NOYW1lKSkgewotICAgICAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUuaD5cbiI7Ci0gICAgICAgIH0K
LSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVm
aW5lcy11bnN0YWJsZS5oPlxuXG4iOwotCi0gICAgICAgIHByaW50IFVOU1RBQkxFICIjaWYgJHtj
b25kaXRpb25hbFN0cmluZ31cblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgICAgIHBy
aW50IFVOU1RBQkxFICJHX0JFR0lOX0RFQ0xTXG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSAi
XG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSBAaEJvZHlVbnN0YWJsZTsKLSAgICAgICAgcHJp
bnQgVU5TVEFCTEUgIlxuIjsKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIkdfRU5EX0RFQ0xTXG4i
OwotICAgICAgICBwcmludCBVTlNUQUJMRSAiXG4iOwotICAgICAgICBwcmludCBVTlNUQUJMRSAi
I2VuZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG5cbiIgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwotICAgICAgICBwcmludCBVTlNUQUJMRSAiI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqL1xuIjsKLSAgICAgICAgcHJpbnQgVU5TVEFCTEUgIiNlbmRpZiAvKiAke2d1
YXJkfSAqL1xuIjsKLQotICAgICAgICBjbG9zZShVTlNUQUJMRSk7Ci0gICAgfQotCi0gICAgIyBX
cml0ZSB0aGUgaW1wbGVtZW50YXRpb24gc291cmNlcwotICAgIG15ICRpbXBsRmlsZU5hbWUgPSAi
JG91dHB1dERpci8iIC4gJGJhc2VuYW1lIC4gIi5jcHAiOwotICAgIG9wZW4oSU1QTCwgIj4kaW1w
bEZpbGVOYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGltcGxGaWxlTmFtZSI7Ci0K
LSAgICBwcmludCBJTVBMIEBjUHJlZml4OwotICAgIHByaW50IElNUEwgIiNpbmNsdWRlIFwiY29u
ZmlnLmhcIlxuIjsKLSAgICBwcmludCBJTVBMICIjaW5jbHVkZSBcIiRpbnN0YWxsZWRIZWFkZXJG
aWxlbmFtZVwiXG5cbiI7Ci0KLSAgICAjIFJlbW92ZSB0aGUgaW1wbGVtZW50YXRpb24gaGVhZGVy
IGZyb20gdGhlIGxpc3Qgb2YgaW5jbHVkZWQgZmlsZXMuCi0gICAgJWluY2x1ZGVzQ29weSA9ICVp
bXBsSW5jbHVkZXM7Ci0gICAgcHJpbnQgSU1QTCBtYXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0g
c29ydCBrZXlzKCVpbmNsdWRlc0NvcHkpOwotICAgIGlmICgkaXNTdGFibGVDbGFzcyBhbmQgc2Nh
bGFyKEBoQm9keVVuc3RhYmxlKSkgewotICAgICAgICBwcmludCBJTVBMICIjaW5jbHVkZSBcIiR7
Y2xhc3NOYW1lfVVuc3RhYmxlLmhcIlxuIjsKLSAgICB9Ci0KLSAgICBwcmludCBJTVBMICIjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPlxuIjsKLSAgICBwcmludCBJTVBMICIjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPlxuXG4iOwotICAgIHByaW50IElNUEwgQGNTdHJ1Y3RQcml2OwotICAgIHByaW50IElN
UEwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsK
LQotICAgIHByaW50IElNUEwgIm5hbWVzcGFjZSBXZWJLaXQge1xuXG4iOwotICAgIHByaW50IElN
UEwgQGNCb2R5UHJpdjsKLSAgICBwcmludCBJTVBMICJ9IC8vIG5hbWVzcGFjZSBXZWJLaXRcblxu
IjsKLSAgICBwcmludCBJTVBMICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cblxuIiBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0KLSAgICBwcmludCBJTVBMIEBjQm9keVByb3BlcnRpZXM7
Ci0gICAgcHJpbnQgSU1QTCBAY0JvZHk7Ci0KLSAgICBjbG9zZShJTVBMKTsKLQotICAgICMgV3Jp
dGUgYSBzeW1ib2xzIGZpbGUuCi0gICAgaWYgKCRpc1N0YWJsZUNsYXNzKSB7Ci0gICAgICAgIG15
ICRzeW1ib2xzRmlsZU5hbWUgPSAiJG91dHB1dERpci8iIC4gJGJhc2VuYW1lIC4gIi5zeW1ib2xz
IjsKLSAgICAgICAgb3BlbihTWU0sICI+JHN5bWJvbHNGaWxlTmFtZSIpIG9yIGRpZSAiQ291bGRu
J3Qgb3BlbiBmaWxlICRzeW1ib2xzRmlsZU5hbWUiOwotICAgICAgICBwcmludCBTWU0gQHN5bWJv
bHM7Ci0gICAgICAgIGNsb3NlKFNZTSk7Ci0gICAgfQotCi0gICAgJWltcGxJbmNsdWRlcyA9ICgp
OwotICAgICVoZHJJbmNsdWRlcyA9ICgpOwotICAgIEBoUHJlZml4ID0gKCk7Ci0gICAgQGhCb2R5
ID0gKCk7Ci0gICAgQGhCb2R5VW5zdGFibGUgPSAoKTsKLQotICAgIEBjUHJlZml4ID0gKCk7Ci0g
ICAgQGNCb2R5ID0gKCk7Ci0gICAgQGNCb2R5UHJpdiA9ICgpOwotICAgIEBjQm9keVByb3BlcnRp
ZXMgPSAoKTsKLSAgICBAY1N0cnVjdFByaXYgPSAoKTsKLQotICAgIEBzeW1ib2xzID0gKCk7Ci0g
ICAgQHN0YWJsZVN5bWJvbHMgPSAoKTsKLX0KLQotc3ViIElzSW50ZXJmYWNlU3ltYm9sIHsKLSAg
ICBteSAoJGxpbmUsICRsb3dlckNhc2VJZmFjZU5hbWUpID0gQF87Ci0KLSAgICAjIEZ1bmN0aW9u
LgotICAgIHJldHVybiAxIGlmICRsaW5lID1+IC9eW2EtekEtWjAtOVwqXStccyR7bG93ZXJDYXNl
SWZhY2VOYW1lfV8uKyQvOwotCi0gICAgIyBDb25zdGFudC4KLSAgICBteSAkcHJlZml4ID0gdWMo
JGxvd2VyQ2FzZUlmYWNlTmFtZSk7Ci0gICAgcmV0dXJuIDEgaWYgJGxpbmUgPX4gL14ke3ByZWZp
eH1fW0EtWl9dKyQvOwotICAgIHJldHVybiAwOwotfQotCi1zdWIgUmVhZFN0YWJsZVN5bWJvbHMg
ewotICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7Ci0KLSAgICBAc3RhYmxlU3ltYm9scyA9
ICgpOwotCi0gICAgbXkgJGJpbmRpbmdzRGlyID0gZGlybmFtZSgkRmluZEJpbjo6QmluKTsKLSAg
ICBteSAkZmlsZU5hbWUgPSAiJGJpbmRpbmdzRGlyL2dvYmplY3Qvd2Via2l0ZG9tLnN5bWJvbHMi
OwotICAgIG9wZW4gRklMRSwgIjwiLCAkZmlsZU5hbWUgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAk
ZmlsZU5hbWUiOwotICAgIG15IEBsaW5lcyA9IDxGSUxFPjsKLSAgICBjbG9zZSBGSUxFOwotCi0g
ICAgbXkgJGRlY2FtZWxpemUgPSBkZWNhbWVsaXplKCRpbnRlcmZhY2VOYW1lKTsKLSAgICBteSAk
bG93ZXJDYXNlSWZhY2VOYW1lID0gIndlYmtpdF9kb21fJGRlY2FtZWxpemUiOwotCi0gICAgZm9y
ZWFjaCAkbGluZSAoQGxpbmVzKSB7Ci0gICAgICAgICRsaW5lID1+IHMvXG4kLy87Ci0KLSAgICAg
ICAgbXkgKCRzeW1ib2wpID0gc3BsaXQoJ0AnLCAkbGluZSwgMik7Ci0KLSAgICAgICAgaWYgKCRz
eW1ib2wgZXEgIkdUeXBlICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9nZXRfdHlwZSh2b2lkKSIpIHsK
LSAgICAgICAgICAgIHB1c2goQHN0YWJsZVN5bWJvbHMsICRsaW5lKTsKLSAgICAgICAgICAgIG5l
eHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NhbGFyKEBzdGFibGVTeW1ib2xzKSBhbmQg
SXNJbnRlcmZhY2VTeW1ib2woJHN5bWJvbCwgJGxvd2VyQ2FzZUlmYWNlTmFtZSkgYW5kICRzeW1i
b2wgIX4gL15HVHlwZS8pIHsKLSAgICAgICAgICAgIHB1c2goQHN0YWJsZVN5bWJvbHMsICRsaW5l
KTsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NhbGFyKEBz
dGFibGVTeW1ib2xzKSBhbmQgJHN5bWJvbCAhfiAvXkdUeXBlLykgewotICAgICAgICAgICAgd2Fy
biAiU3ltYm9sICVsaW5lIGZvdW5kLCBidXQgYSBnZXRfdHlwZSB3YXMgZXhwZWN0ZWQiOwotICAg
ICAgICB9Ci0KLSAgICAgICAgbGFzdCBpZiBzY2FsYXIoQHN0YWJsZVN5bWJvbHMpOwotICAgIH0K
LX0KLQotc3ViIEdlbmVyYXRlSW50ZXJmYWNlIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFj
ZSwgJGRlZmluZXMpID0gQF87Ci0KLSAgICAjIFNldCB1cCBzb21lIGdsb2JhbCB2YXJpYWJsZXMK
LSAgICAkY2xhc3NOYW1lID0gR2V0Q2xhc3NOYW1lKCRpbnRlcmZhY2UtPm5hbWUpOwotCi0gICAg
UmVhZFN0YWJsZVN5bWJvbHMoJGludGVyZmFjZS0+bmFtZSk7Ci0KLSAgICAkb2JqZWN0LT5HZW5l
cmF0ZSgkaW50ZXJmYWNlKTsKLX0KLQotMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L0dPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L0dPYmplY3RUZXN0
U3VwcGxlbWVudGFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxOGNlNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9HT2JqZWN0VGVzdFN1cHBsZW1lbnRhbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAg
QEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2Ny
aXB0cyB0aGF0IEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmggYW5kCi0gICAgR09iamVjdFRlc3RT
dXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5k
IHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVy
YXRlIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmggYW5kCi0gICAgR09iamVjdFRlc3RTdXBwbGVt
ZW50YWwuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8g
Y29tcGlsZS4KLSovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9HT2JqZWN0VGVzdFN1cHBsZW1lbnRhbC5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvR09iamVjdFRlc3RTdXBwbGVtZW50YWwuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxOGNlNS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9HT2JqZWN0VGVzdFN1cHBs
ZW1lbnRhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vKgotICAgIFRoaXMgZmls
ZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBHT2JqZWN0VGVz
dFN1cHBsZW1lbnRhbC5oIGFuZAotICAgIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNwcCBhcmUg
Y3JlYXRlZCBmb3IgVGVzdFN1cHBsZW1lbnRhbC5pZGwsIGFuZCB0aHVzCi0gICAgcHJldmVudCB0
aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBHT2JqZWN0VGVzdFN1cHBs
ZW1lbnRhbC5oIGFuZAotICAgIEdPYmplY3RUZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBi
dWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NRmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUzOTJkOTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTUZsb2F0NjRBcnJheS5oIgotCi0jaW5jbHVk
ZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgot
I2luY2x1ZGUgIldlYktpdERPTUZsb2F0MzJBcnJheVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NSW50MzJBcnJh
eVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgotI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiBraXQoV2ViQ29y
ZTo6RmxvYXQ2NEFycmF5KiBvYmopCi17Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fRkxPQVQ2NEFS
UkFZKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOwotfQotCi1XZWJDb3Jl
OjpGbG9hdDY0QXJyYXkqIGNvcmUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiByZXF1ZXN0KQotewot
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RmxvYXQ2NEFycmF5Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKLX0KLQotV2ViS2l0
RE9NRmxvYXQ2NEFycmF5KiB3cmFwRmxvYXQ2NEFycmF5KFdlYkNvcmU6OkZsb2F0NjRBcnJheSog
Y29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJ
VF9ET01fRkxPQVQ2NEFSUkFZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRkxPQVQ2NEFS
UkFZLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTUZsb2F0NjRBcnJheSwgd2Via2l0
X2RvbV9mbG9hdDY0YXJyYXksIFdFQktJVF9ET01fVFlQRV9BUlJBWV9CVUZGRVJfVklFVykKLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfY2xhc3NfaW5pdChXZWJLaXRET01G
bG9hdDY0QXJyYXlDbGFzcyogcmVxdWVzdENsYXNzKQotewotfQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2Zsb2F0NjRhcnJheV9pbml0KFdlYktpdERPTUZsb2F0NjRBcnJheSogcmVxdWVzdCkK
LXsKLX0KLQotV2ViS2l0RE9NSW50MzJBcnJheSoKLXdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2Zv
byhXZWJLaXRET01GbG9hdDY0QXJyYXkqIHNlbGYsIFdlYktpdERPTUZsb2F0MzJBcnJheSogYXJy
YXkpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRkxPQVQ2NEFSUkFZKHNlbGYpLCAwKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJBUlJBWShhcnJh
eSksIDApOwotICAgIFdlYkNvcmU6OkZsb2F0NjRBcnJheSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkqIGNvbnZlcnRlZEFycmF5ID0gV2ViS2l0
Ojpjb3JlKGFycmF5KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW50MzJBcnJheT4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvbyhjb252ZXJ0ZWRBcnJheSkpOwotICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2
NEFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01GbG9hdDY0QXJyYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdm
MGQwNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICsw
LDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmICFkZWZpbmVkKF9fV0VCS0lURE9N
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKLSNlcnJvciAiT25seSA8
d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgotI2VuZGlm
Ci0KLSNpZm5kZWYgV2ViS2l0RE9NRmxvYXQ2NEFycmF5X2gKLSNkZWZpbmUgV2ViS2l0RE9NRmxv
YXQ2NEFycmF5X2gKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUFycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfRkxPQVQ2NEFSUkFZICAgICAgICAgICAgKHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2dldF90
eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9GTE9BVDY0
QVJSQVksIFdlYktpdERPTUZsb2F0NjRBcnJheSkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2
NEFSUkFZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9GTE9BVDY0QVJSQVksIFdlYktpdERPTUZsb2F0NjRBcnJheUNsYXNz
KQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX0ZMT0FUNjRBUlJBWShvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRkxPQVQ2NEFSUkFZ
KSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19GTE9BVDY0QVJSQVlfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0ZMT0FUNjRBUlJB
WSkpCi0jZGVmaW5lIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9GTE9BVDY0QVJS
QVksIFdlYktpdERPTUZsb2F0NjRBcnJheUNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01GbG9h
dDY0QXJyYXkgewotICAgIFdlYktpdERPTUFycmF5QnVmZmVyVmlldyBwYXJlbnRfaW5zdGFuY2U7
Ci19OwotCi1zdHJ1Y3QgX1dlYktpdERPTUZsb2F0NjRBcnJheUNsYXNzIHsKLSAgICBXZWJLaXRE
T01BcnJheUJ1ZmZlclZpZXdDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdU
eXBlCi13ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9nZXRfdHlwZSAodm9pZCk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfZm9vOgotICogQHNlbGY6IEEgI1dlYktpdERPTUZsb2F0
NjRBcnJheQotICogQGFycmF5OiBBICNXZWJLaXRET01GbG9hdDMyQXJyYXkKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6Ci0gKgotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTUludDMy
QXJyYXkqCi13ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9mb28oV2ViS2l0RE9NRmxvYXQ2NEFycmF5
KiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkqIGFycmF5KTsKLQotR19FTkRfREVDTFMKLQot
I2VuZGlmIC8qIFdlYktpdERPTUZsb2F0NjRBcnJheV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJy
YXlQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGNlZWMyOTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IFdlYktpdERPTUZsb2F0NjRBcnJheVByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01GbG9hdDY0
QXJyYXlQcml2YXRlX2gKLQotI2luY2x1ZGUgIkZsb2F0NjRBcnJheS5oIgotI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01GbG9hdDY0QXJyYXkuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1X
ZWJLaXRET01GbG9hdDY0QXJyYXkqIHdyYXBGbG9hdDY0QXJyYXkoV2ViQ29yZTo6RmxvYXQ2NEFy
cmF5Kik7Ci1XZWJLaXRET01GbG9hdDY0QXJyYXkqIGtpdChXZWJDb3JlOjpGbG9hdDY0QXJyYXkq
KTsKLVdlYkNvcmU6OkZsb2F0NjRBcnJheSogY29yZShXZWJLaXRET01GbG9hdDY0QXJyYXkqKTsK
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NRmxvYXQ2NEFycmF5
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01JbnRlcmZhY2VOYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVyZmFjZU5hbWUuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGIwZjUxLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVy
ZmFjZU5hbWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01JbnRlcmZhY2VOYW1lLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIK
LSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01J
bnRlcmZhY2VOYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNp
bmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fSU5U
RVJGQUNFX05BTUVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNFX05BTUUsIFdlYktpdERPTUludGVyZmFjZU5h
bWVQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSW50ZXJmYWNlTmFtZVByaXZh
dGUgewotICAgIFJlZlB0cjxXZWJDb3JlOjpJbnRlcmZhY2VOYW1lPiBjb3JlT2JqZWN0OwotfSBX
ZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdl
YktpdERPTUludGVyZmFjZU5hbWUqIGtpdChXZWJDb3JlOjpJbnRlcmZhY2VOYW1lKiBvYmopCi17
Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
SU5URVJGQUNFX05BTUUocmV0KTsKLQotICAgIHJldHVybiB3cmFwSW50ZXJmYWNlTmFtZShvYmop
OwotfQotCi1XZWJDb3JlOjpJbnRlcmZhY2VOYW1lKiBjb3JlKFdlYktpdERPTUludGVyZmFjZU5h
bWUqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpJbnRlcmZhY2VOYW1lKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKLX0KLQotV2ViS2l0RE9NSW50ZXJmYWNlTmFtZSogd3JhcEludGVyZmFjZU5hbWUoV2Vi
Q29yZTo6SW50ZXJmYWNlTmFtZSogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVj
dCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fSU5URVJGQUNFX05BTUUoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShX
ZWJLaXRET01JbnRlcmZhY2VOYW1lLCB3ZWJraXRfZG9tX2ludGVyZmFjZV9uYW1lLCBXRUJLSVRf
RE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2ludGVyZmFjZV9uYW1l
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01JbnRlcmZhY2VOYW1l
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fSU5URVJGQUNFX05BTUVfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZSgp
OwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21faW50ZXJmYWNlX25hbWVfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21f
aW50ZXJmYWNlX25hbWVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Ci17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9pbnRl
cmZhY2VfbmFtZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NSW50ZXJm
YWNlTmFtZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0lOVEVSRkFDRV9OQU1FX0dFVF9QUklW
QVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkludGVyZmFjZU5hbWUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsK
LSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwg
b2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21faW50ZXJmYWNlX25hbWVfY2xhc3NfaW5pdChXZWJLaXRET01JbnRlcmZhY2VOYW1lQ2xhc3Mq
IHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdv
YmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUludGVyZmFjZU5hbWVQcml2YXRlKSk7Ci0gICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21faW50ZXJmYWNlX25hbWVfY29u
c3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21faW50ZXJm
YWNlX25hbWVfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21faW50ZXJmYWNl
X25hbWVfaW5pdChXZWJLaXRET01JbnRlcmZhY2VOYW1lKiByZXF1ZXN0KQotewotICAgIFdlYktp
dERPTUludGVyZmFjZU5hbWVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9JTlRFUkZBQ0VfTkFN
RV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTUludGVyZmFj
ZU5hbWVQcml2YXRlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Zjg4
NjMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjUgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuaCIKLQot
I2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RBY3RpdmVET01PYmpl
Y3RQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9BQ1RJVkVf
RE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUpCi0KLXR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSB7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3Q+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmpl
Y3QqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAo
Z3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4g
V0VCS0lUX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNUKHJldCk7Ci0KLSAgICByZXR1cm4gd3Jh
cFRlc3RBY3RpdmVET01PYmplY3Qob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9i
amVjdCogY29yZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQotewotICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVj
dCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdl
YktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdlYkNv
cmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVP
YmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0FDVElWRV9ET01fT0JKRUNULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QsIHdlYmtpdF9k
b21fdGVzdF9hY3RpdmVfZG9tX29iamVjdCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotZW51
bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfRVhDSVRJTkdfQVRUUiwKLX07Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9maW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsK
LQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSgp
OwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0g
ICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9B
Q1RJVkVfRE9NX09CSkVDVChvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0g
ICAgY2FzZSBQUk9QX0VYQ0lUSU5HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVz
dF9hY3RpdmVfZG9tX29iamVjdF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQUNU
SVZFX0RPTV9PQkpFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCo+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVj
dDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2Ns
YXNzX2luaXQoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzKiByZXF1ZXN0Q2xhc3Mp
Ci17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSkpOwotICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfY29u
c3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfcHJvcGVydHk7Ci0KLSAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgIFBST1BfRVhDSVRJTkdfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
Ci0gICAgICAgICAgICAiZXhjaXRpbmctYXR0ciIsCi0gICAgICAgICAgICAiVGVzdEFjdGl2ZURP
TU9iamVjdDpleGNpdGluZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVGVz
dEFjdGl2ZURPTU9iamVjdDpleGNpdGluZy1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywg
R19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2luaXQoV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0
QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9N
X09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
c3RBY3RpdmVET01PYmplY3RQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3QqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5leHRDaGlsZCkKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OT0RFKG5leHRDaGlsZCkpOwotICAgIFdlYkNvcmU6OlRlc3RBY3Rp
dmVET01PYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6Tm9k
ZSogY29udmVydGVkTmV4dENoaWxkID0gV2ViS2l0Ojpjb3JlKG5leHRDaGlsZCk7Ci0gICAgaXRl
bS0+ZXhjaXRpbmdGdW5jdGlvbigqY29udmVydGVkTmV4dENoaWxkKTsKLX0KLQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKFdlYktpdERPTVRlc3RB
Y3RpdmVET01PYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChzZWxmKSk7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChtZXNzYWdlKTsKLSAgICBXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lc3NhZ2Ug
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSk7Ci0gICAgaXRlbS0+cG9zdE1lc3NhZ2Uo
Y29udmVydGVkTWVzc2FnZSk7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9t
X29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBz
ZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qo
c2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+ZXhjaXRpbmdBdHRyKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEFjdGl2ZURPTU9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDQ2
N2E2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdF9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3RfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3Qu
aD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1H
X0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9P
QkpFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2dldF90
eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9BQ1RJVkVfRE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCkp
Ci0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9BQ1RJVkVfRE9NX09CSkVDVCwgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzKQot
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
QUNUSVZFX0RPTV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfQUNUSVZFX0RP
TV9PQkpFQ1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQUNUSVZFX0RPTV9PQkpF
Q1QsIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdCB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdENsYXNzIHsK
LSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJ
IEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X3R5cGUodm9pZCk7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5nX2Z1
bmN0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QKLSAqIEBu
ZXh0Q2hpbGQ6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4
Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIFdlYktp
dERPTU5vZGUqIG5leHRDaGlsZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X3Bvc3RfbWVzc2FnZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0QWN0aXZl
RE9NT2JqZWN0Ci0gKiBAbWVzc2FnZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2Jq
ZWN0X3Bvc3RfbWVzc2FnZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBzZWxmLCBjb25z
dCBnY2hhciogbWVzc2FnZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21f
b2JqZWN0X2dldF9leGNpdGluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RBY3Rp
dmVET01PYmplY3QKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X2dldF9leGNpdGluZ19hdHRyKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3Qq
IHNlbGYpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0LnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0LnN5
bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmN2FjMWEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEFjdGl2ZURPTU9iamVjdC5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBA
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlv
bihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiwgV2ViS2l0RE9NTm9kZSopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9wb3N0X21lc3NhZ2UoV2ViS2l0RE9NVGVz
dEFjdGl2ZURPTU9iamVjdCosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2ViMzhkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFj
ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRl
c3RDYWxsYmFjay5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUuaCIKLSNpbmNs
dWRlICJXZWJLaXRET01GbG9hdDMyQXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaCIKLSNp
bmNsdWRlICJXZWJLaXRET01UZXN0Tm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0Nv
bnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDS19HRVRfUFJJ
VkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQ
RV9URVNUX0NBTExCQUNLLCBXZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlKQotCi10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCi0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDYWxsYmFjaz4gY29yZU9iamVj
dDsKLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLX0gV2ViS2l0RE9NVGVzdENh
bGxiYWNrUHJpdmF0ZTsKLQotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBraXQoV2ViQ29yZTo6VGVzdENh
bGxiYWNrKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0
dXJuIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDSyhyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0
Q2FsbGJhY2sob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlKFdlYktpdERP
TVRlc3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlRlc3RDYWxsYmFjayo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RDYWxsYmFjayogd3JhcFRlc3RDYWxs
YmFjayhXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNv
cmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0soZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLLCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENh
bGxiYWNrLCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2ssIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qp
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVTVF9DQUxMQkFDS19HRVRfUFJJVkFURShvYmplY3QpOwotI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
LSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0
cnVjdFByb3BlcnRpZXMpOwotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYktp
dERPTVRlc3RDYWxsYmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tf
R0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGVzdENhbGxiYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9i
amVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCksIG9iamVjdCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAg
cmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNr
X2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsK
LSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NvbnN0cnVjdG9yOwotICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZmluYWxpemU7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19pbml0KFdlYktpdERPTVRl
c3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0dFVF9QUklWQVRFKHJlcXVlc3QpOwot
ICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZSgpOwotfQotCi1nYm9v
bGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbShXZWJL
aXRET01UZXN0Q2FsbGJhY2sqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDSyhzZWxmKSwgRkFMU0UpOwot
ICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhOb1BhcmFtKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193
aXRoX2FycmF5X3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NRmxv
YXQzMkFycmF5KiBhcnJheVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiksIEZBTFNFKTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJBUlJBWShhcnJheVBh
cmFtKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkqIGNvbnZlcnRlZEFycmF5UGFy
YW0gPSBXZWJLaXQ6OmNvcmUoYXJyYXlQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+Y2FsbGJhY2tXaXRoQXJyYXlQYXJhbSgqY29udmVydGVkQXJyYXlQYXJhbSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9Q
QVJBTShhcnJheVBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJT
cGVlY2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOwot
I2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9vbGVhbiB3ZWJr
aXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9wYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIGNvbnN0IGdjaGFyKiBzcnpQYXJh
bSwgY29uc3QgZ2NoYXIqIHN0ckFyZykKLXsKLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLKHNlbGYpLCBGQUxTRSk7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3J6UGFyYW0sIEZBTFNFKTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzdHJBcmcsIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJn
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0g
aXRlbS0+Y2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNyelBhcmFt
KSksIGNvbnZlcnRlZFN0ckFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzcnpQYXJhbSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHN0ckFyZyk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3Bl
ZWNoIFN5bnRoZXNpcyIpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNl
bmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2xvbmcgd2Via2l0X2Rv
bV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0
RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKQotewotI2lmIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJB
Q0soc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJBcmcp
OwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBl
KGNvbnZlcnRlZFN0ckFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICov
Ci19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0
cmluZ19saXN0KFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5n
TGlzdCogbGlzdFBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiksIEZBTFNFKTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElTVChsaXN0UGFyYW0p
LCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGNvbnZlcnRlZExpc3RQYXJhbSA9
IFdlYktpdDo6Y29yZShsaXN0UGFyYW0pOwotICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNh
bGxiYWNrV2l0aFN0cmluZ0xpc3QoKmNvbnZlcnRlZExpc3RQYXJhbSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShs
aXN0UGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBT
eW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYg
LyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW4oV2ViS2l0RE9NVGVzdENhbGxiYWNr
KiBzZWxmLCBnYm9vbGVhbiBib29sUGFyYW0pCi17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDSyhzZWxmKSwgRkFMU0Up
OwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhCb29sZWFuKGJvb2xQYXJh
bSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFVOVVNFRF9QQVJBTShib29sUGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9v
bGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdi
b29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja19yZXF1aXJlc190aGlzX3Rv
X3Bhc3MoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBnbG9uZyBsb25nUGFyYW0sIFdlYktp
dERPTVRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0soc2VsZiksIEZBTFNF
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9ERSh0ZXN0
Tm9kZVBhcmFtKSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogY29udmVydGVkVGVzdE5v
ZGVQYXJhbSA9IFdlYktpdDo6Y29yZSh0ZXN0Tm9kZVBhcmFtKTsKLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5jYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhsb25nUGFyYW0sICpjb252ZXJ0
ZWRUZXN0Tm9kZVBhcmFtKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKGxvbmdQYXJhbSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRlc3ROb2RlUGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7
Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZlOTM5ZGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJL
aXRET01UZXN0Q2FsbGJhY2tfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q2FsbGJhY2tfaAotCi0j
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0K
LSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0FMTEJBQ0sgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9D
QUxMQkFDSyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDSywgV2ViS2l0RE9NVGVzdENhbGxiYWNrKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNL
LCBXZWJLaXRET01UZXN0Q2FsbGJhY2tDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X0NBTExCQUNLKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX0NBTExCQUNLX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0NBTExCQUNLX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLLCBXZWJLaXRET01UZXN0Q2FsbGJh
Y2tDbGFzcykpCi0KLS8qKgotICogV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0NPTlNUQU5UMToK
LSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfQ09OU1RBTlQxIDEKLQotLyoq
Ci0gKiBXRUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0tfQ09OU1RBTlQyOgotICovCi0jZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9DQUxMQkFDS19DT05TVEFOVDIgMgotCi1zdHJ1Y3QgX1dlYktpdERPTVRl
c3RDYWxsYmFjayB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MgewotICAgIFdlYktpdERPTU9iamVj
dENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
Y2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0Q2FsbGJhY2sKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2Nh
bGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9fcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9hcnJh
eV9wYXJhbToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2sKLSAqIEBhcnJheVBh
cmFtOiBBICNXZWJLaXRET01GbG9hdDMyQXJyYXkKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVh
bgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgot
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfYXJyYXlfcGFyYW0oV2ViS2l0
RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkqIGFycmF5UGFyYW0p
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX3BhcmFtOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxs
YmFjawotICogQHNyelBhcmFtOiBBICNnY2hhcgotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqCi0g
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dp
dGhfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBz
ZWxmLCBjb25zdCBnY2hhciogc3J6UGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJBcmcpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVy
bl90eXBlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFjawotICogQHN0ckFyZzog
QSAjZ2NoYXIKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Nh
bGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBz
ZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2Fs
bGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0Q2FsbGJhY2sKLSAqIEBsaXN0UGFyYW06IEEgI1dlYktpdERPTURPTVN0cmluZ0xpc3QKLSAq
Ci0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNr
X3dpdGhfc3RyaW5nX2xpc3QoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01E
T01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19jYWxsYmFja193aXRoX2Jvb2xlYW46Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENh
bGxiYWNrCi0gKiBAYm9vbFBhcmFtOiBBICNnYm9vbGVhbgotICoKLSAqIFJldHVybnM6IEEgI2di
b29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29s
ZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ib29sZWFuKFdlYktp
dERPTVRlc3RDYWxsYmFjayogc2VsZiwgZ2Jvb2xlYW4gYm9vbFBhcmFtKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfcmVxdWlyZXNfdGhpc190b19wYXNzOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RDYWxsYmFjawotICogQGxvbmdQYXJhbTogQSAjZ2xv
bmcKLSAqIEB0ZXN0Tm9kZVBhcmFtOiBBICNXZWJLaXRET01UZXN0Tm9kZQotICoKLSAqIFJldHVy
bnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfcmVxdWlyZXNf
dGhpc190b19wYXNzKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgZ2xvbmcgbG9uZ1BhcmFt
LCBXZWJLaXRET01UZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNl
bmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRE
T01UZXN0Q2FsbGJhY2tfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLnN5bWJvbHMgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2Fs
bGJhY2suc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwZmE5NS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2FsbGJhY2suc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBA
QAotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfbm9fcGFy
YW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKikKLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19jYWxsYmFja193aXRoX2FycmF5X3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayosIFdl
YktpdERPTUZsb2F0MzJBcnJheSopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Y2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9wYXJhbShXZWJLaXRET01UZXN0
Q2FsbGJhY2sqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBjb25zdCBnY2hhciop
Ci1nbG9uZyB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub25fYm9vbF9y
ZXR1cm5fdHlwZShXZWJLaXRET01UZXN0Q2FsbGJhY2sqLCBjb25zdCBnY2hhciopCi1nYm9vbGVh
biB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJL
aXRET01UZXN0Q2FsbGJhY2sqLCBXZWJLaXRET01ET01TdHJpbmdMaXN0KikKLWdib29sZWFuIHdl
YmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW4oV2ViS2l0RE9NVGVz
dENhbGxiYWNrKiwgZ2Jvb2xlYW4pCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Y2FsbGJhY2tfcmVxdWlyZXNfdGhpc190b19wYXNzKFdlYktpdERPTVRlc3RDYWxsYmFjayosIGds
b25nLCBXZWJLaXRET01UZXN0Tm9kZSopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGU0NWU1MjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlv
bi5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENh
Y2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
Ci0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0j
aW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01GbG9hdDMyQXJyYXlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgIldlYktpdERPTVRlc3ROb2RlUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29u
dmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9O
X0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT04sIFdlYktpdERPTVRlc3RDYWxsYmFja0Z1
bmN0aW9uUHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RDYWxsYmFja0Z1
bmN0aW9uUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uPiBjb3JlT2JqZWN0OwotI2VuZGlmIC8vIEVO
QUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotfSBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvblBy
aXZhdGU7Ci0KLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLVdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBraXQoV2ViQ29yZTo6VGVzdENh
bGxiYWNrRnVuY3Rpb24qIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OKHJldCk7Ci0KLSAg
ICByZXR1cm4gd3JhcFRlc3RDYWxsYmFja0Z1bmN0aW9uKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRl
c3RDYWxsYmFja0Z1bmN0aW9uKiBjb3JlKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBy
ZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dENhbGxiYWNrRnVuY3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVj
dCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogd3JhcFRlc3RDYWxs
YmFja0Z1bmN0aW9uKFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uKiBjb3JlT2JqZWN0KQot
ewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0NB
TExCQUNLX0ZVTkNUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFD
S19GVU5DVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uLCB3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLXN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25Qcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OX0dFVF9QUklWQVRFKG9i
amVjdCk7Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotI2VuZGlmIC8vIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5j
dGlvblByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2tfZnVuY3Rpb25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGlj
IEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jb25zdHJ1Y3RvcihH
VHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1
Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLSAgICBXZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ0FM
TEJBQ0tfRlVOQ1RJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qPihXRUJLSVRfRE9N
X09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
OjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2xhc3NfaW5pdChXZWJLaXRET01UZXN0
Q2FsbGJhY2tGdW5jdGlvbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q2Fs
bGJhY2tGdW5jdGlvblByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0g
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NvbnN0cnVjdG9yOwotICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fZmlu
YWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlv
bl9pbml0KFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiByZXF1ZXN0KQotewotICAgIFdl
YktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVT
VF9DQUxMQkFDS19GVU5DVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYp
IFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uUHJpdmF0ZSgpOwotfQotCi1nYm9vbGVhbiB3
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9ub19wYXJhbShX
ZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZikKLXsKLSNpZiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLX0ZVTkNU
SU9OKHNlbGYpLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2Fs
bGJhY2tXaXRoTm9QYXJhbSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVl
Y2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOwotI2Vu
ZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9vbGVhbiB3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9hcnJheV9wYXJhbShXZWJL
aXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRmxvYXQzMkFycmF5KiBh
cnJheVBhcmFtKQotewotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0tfRlVOQ1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZMT0FUMzJBUlJBWShhcnJheVBhcmFt
KSwgRkFMU0UpOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFja0Z1bmN0aW9uKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkZsb2F0MzJBcnJheSogY29udmVydGVkQXJy
YXlQYXJhbSA9IFdlYktpdDo6Y29yZShhcnJheVBhcmFtKTsKLSAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT5jYWxsYmFja1dpdGhBcnJheVBhcmFtKCpjb252ZXJ0ZWRBcnJheVBhcmFtKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5V
U0VEX1BBUkFNKGFycmF5UGFyYW0pOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlNwZWVjaCBTeW50aGVzaXMiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4o
MCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFu
IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX3NlcmlhbGl6
ZWRfc2NyaXB0X3ZhbHVlX3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxm
LCBjb25zdCBnY2hhciogc3J6UGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJBcmcpCi17Ci0jaWYgRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxM
QkFDS19GVU5DVElPTihzZWxmKSwgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNy
elBhcmFtLCBGQUxTRSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCBGQUxTRSk7
Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHN0ckFyZyk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tXaXRo
U2VyaWFsaXplZFNjcmlwdFZhbHVlUGFyYW0oV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNyelBhcmFtKSksIGNvbnZlcnRlZFN0ckFy
Zyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFVOVVNFRF9QQVJBTShzcnpQYXJhbSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7Ci0g
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1
bmN0aW9uX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENh
bGxiYWNrRnVuY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcpCi17Ci0jaWYgRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFD
S19GVU5DVElPTihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCAw
KTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2tGdW5jdGlvbiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJBcmcgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5jYWxsYmFja1dpdGhO
b25Cb29sUmV0dXJuVHlwZShjb252ZXJ0ZWRTdHJBcmcpOwotICAgIHJldHVybiByZXN1bHQ7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0oc3RyQXJnKTsK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8qIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKSAqLwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
ZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2tG
dW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKQotewotI2lm
IEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
Q0FMTEJBQ0tfRlVOQ1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTElTVChsaXN0UGFyYW0pLCBGQUxTRSk7Ci0gICAg
V2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogY29udmVydGVkTGlzdFBhcmFtID0gV2ViS2l0
Ojpjb3JlKGxpc3RQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tX
aXRoU3RyaW5nTGlzdCgqY29udmVydGVkTGlzdFBhcmFtKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKGxpc3RQYXJh
bSk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNp
cyIpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKLSNlbmRpZiAvKiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KLX0KLQotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2Nh
bGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfYm9vbGVhbihXZWJLaXRET01UZXN0Q2FsbGJh
Y2tGdW5jdGlvbiogc2VsZiwgZ2Jvb2xlYW4gYm9vbFBhcmFtKQotewotI2lmIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfQ0FMTEJBQ0tfRlVO
Q1RJT04oc2VsZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2tGdW5jdGlvbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5j
YWxsYmFja1dpdGhCb29sZWFuKGJvb2xQYXJhbSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShib29sUGFyYW0pOwot
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpICovCi19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19mdW5jdGlvbl9jYWxsYmFja19yZXF1aXJlc190aGlzX3RvX3Bhc3MoV2ViS2l0RE9NVGVzdENh
bGxiYWNrRnVuY3Rpb24qIHNlbGYsIGdsb25nIGxvbmdQYXJhbSwgV2ViS2l0RE9NVGVzdE5vZGUq
IHRlc3ROb2RlUGFyYW0pCi17Ci0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9DQUxMQkFDS19GVU5DVElPTihzZWxmKSwgRkFMU0UpOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT0RFKHRlc3ROb2Rl
UGFyYW0pLCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6VGVzdE5vZGUqIGNvbnZlcnRlZFRl
c3ROb2RlUGFyYW0gPSBXZWJLaXQ6OmNvcmUodGVzdE5vZGVQYXJhbSk7Ci0gICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MobG9uZ1BhcmFtLCAqY29u
dmVydGVkVGVzdE5vZGVQYXJhbSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTShsb25nUGFyYW0pOwotICAgIFVOVVNF
RF9QQVJBTSh0ZXN0Tm9kZVBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJTcGVlY2ggU3ludGhlc2lzIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+
KDApOwotI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwotfQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2FsbGJhY2tGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5YTc4MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5j
dGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25faAot
I2RlZmluZSBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbl9oCi0KLSNpZmRlZiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDS19GVU5DVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0NBTExCQUNLX0ZVTkNUSU9OKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OLCBX
ZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9D
QUxMQkFDS19GVU5DVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9DQUxMQkFDS19GVU5DVElPTiwgV2ViS2l0
RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25DbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X0NBTExCQUNLX0ZVTkNUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OKSkKLSNkZWZp
bmUgV0VCS0lUX0RPTV9JU19URVNUX0NBTExCQUNLX0ZVTkNUSU9OX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NBTExC
QUNLX0ZVTkNUSU9OKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLX0ZVTkNUSU9O
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9URVNUX0NBTExCQUNLX0ZVTkNUSU9OLCBXZWJLaXRET01UZXN0Q2FsbGJhY2tG
dW5jdGlvbkNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiB7
Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2Vi
S2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25DbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xh
c3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0
X2NhbGxiYWNrX2Z1bmN0aW9uX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vX3BhcmFtOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uCi0gKgotICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2Jvb2xl
YW4KLXdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vX3Bh
cmFtKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9hcnJheV9wYXJhbToK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgotICogQGFycmF5UGFy
YW06IEEgI1dlYktpdERPTUZsb2F0MzJBcnJheQotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFu
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9hcnJheV9wYXJh
bShXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0RE9NRmxvYXQzMkFy
cmF5KiBhcnJheVBhcmFtKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVu
Y3Rpb25fY2FsbGJhY2tfd2l0aF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9wYXJhbToKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgotICogQHNyelBhcmFtOiBBICNn
Y2hhcgotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24qIHNlbGYsIGNv
bnN0IGdjaGFyKiBzcnpQYXJhbSwgY29uc3QgZ2NoYXIqIHN0ckFyZyk7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0
dXJuX3R5cGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24KLSAq
IEBzdHJBcmc6IEEgI2djaGFyCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9j
YWxsYmFja19mdW5jdGlvbl9jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKFdlYktp
dERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnKTsKLQot
LyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9z
dHJpbmdfbGlzdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbgot
ICogQGxpc3RQYXJhbTogQSAjV2ViS2l0RE9NRE9NU3RyaW5nTGlzdAotICoKLSAqIFJldHVybnM6
IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0
aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwgV2ViS2l0
RE9NRE9NU3RyaW5nTGlzdCogbGlzdFBhcmFtKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
Y2FsbGJhY2tfZnVuY3Rpb25fY2FsbGJhY2tfd2l0aF9ib29sZWFuOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uCi0gKiBAYm9vbFBhcmFtOiBBICNnYm9vbGVhbgot
ICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZnVuY3Rp
b25fY2FsbGJhY2tfd2l0aF9ib29sZWFuKFdlYktpdERPTVRlc3RDYWxsYmFja0Z1bmN0aW9uKiBz
ZWxmLCBnYm9vbGVhbiBib29sUGFyYW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19mdW5jdGlvbl9jYWxsYmFja19yZXF1aXJlc190aGlzX3RvX3Bhc3M6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24KLSAqIEBsb25nUGFyYW06IEEgI2dsb25n
Ci0gKiBAdGVzdE5vZGVQYXJhbTogQSAjV2ViS2l0RE9NVGVzdE5vZGUKLSAqCi0gKiBSZXR1cm5z
OiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Z1bmN0aW9uX2NhbGxiYWNrX3Jl
cXVpcmVzX3RoaXNfdG9fcGFzcyhXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbiogc2VsZiwg
Z2xvbmcgbG9uZ1BhcmFtLCBXZWJLaXRET01UZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSk7Ci0KLUdf
RU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNl
bmRpZiAvKiBXZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvbl9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM4YWQwZC4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0j
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSB7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gY29yZU9i
amVjdDsKLX0gV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0
aW5Db25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1
Y3Rvciogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVy
biBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKHJldCk7
Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcihvYmop
OwotfQotCi1XZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmUo
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKiByZXF1ZXN0KQotewot
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiB3cmFwVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RDbGFz
c1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29y
ZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxU
SU5fQ09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJ
VEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9j
bGFzc193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3IsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qp
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0aW5fY29u
c3RydWN0b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RF
U1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7
Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jbGFz
c193aXRoX2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pz
X2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3Bl
cnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09O
U1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1
cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9q
c19idWlsdGluX2NvbnN0cnVjdG9yX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25z
dHJ1Y3Rvcl9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9maW5hbGl6ZTsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NsYXNzX3dpdGhfanNfYnVpbHRpbl9jb25z
dHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
cmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERP
TVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUoKTsKLX0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4NmRkYS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLSNkZWZp
bmUgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLQotI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
LSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RP
UiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2xhc3Nfd2l0aF9qc19idWlsdGluX2NvbnN0
cnVjdG9yX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9DTEFTU19XSVRIX0pT
X0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SLCBXZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ip
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVD
VE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpCi0jZGVmaW5lIFdF
QktJVF9ET01fSVNfVEVTVF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKSkKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX0NMQVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DTEFTU19XSVRIX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQotI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfQ0xBU1NfV0lUSF9KU19CVUlMVElOX0NPTlNUUlVDVE9SX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NM
QVNTX1dJVEhfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RDbGFzc1dp
dGhKU0J1aWx0aW5Db25zdHJ1Y3RvciB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yQ2xhc3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07
Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9jbGFzc193aXRoX2pzX2J1aWx0
aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAv
KiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0
Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFj
OWJiNmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmgiCi0KLSNpbmNsdWRl
ICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUu
aCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZS5oIgotI2luY2x1
ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NV
U1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1RfR0VUX1BSSVZBVEUob2Jq
KSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9D
VVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNULCBXZWJLaXRET01UZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcml2YXRlKQotCi10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdD4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdEN1c3RvbUNv
bnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLVdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVj
dCoga2l0KFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVj
dCogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVD
VChyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3Qob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3Rvcldp
dGhOb0ludGVyZmFjZU9iamVjdCogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0K
LVdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCogd3Jh
cFRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdChXZWJDb3JlOjpUZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0g
ICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9N
X0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVD
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QsIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0
b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dpdGhfbm9faW50
ZXJmYWNlX29iamVjdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9DVVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JK
RUNUX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpm
b3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSgpOwotICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0b3Jfd2l0aF9ub19p
bnRlcmZhY2Vfb2JqZWN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0
YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dpdGhfbm9f
aW50ZXJmYWNlX29iamVjdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGll
cykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rl
c3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dpdGhfbm9faW50ZXJmYWNlX29iamVjdF9wYXJlbnRfY2xh
c3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVj
dFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DVVNUT01fQ09O
U1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0g
ICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCkt
PmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1Y3Rvcl93aXRoX25vX2ludGVyZmFj
ZV9vYmplY3RfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9J
bnRlcmZhY2VPYmplY3RDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0UHJpdmF0ZSkpOwotICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX2NvbnN0cnVjdG9yX3dp
dGhfbm9faW50ZXJmYWNlX29iamVjdF9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1Y3Rvcl93aXRoX25vX2ludGVy
ZmFjZV9vYmplY3RfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9j
dXN0b21fY29uc3RydWN0b3Jfd2l0aF9ub19pbnRlcmZhY2Vfb2JqZWN0X2luaXQoV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KiByZXF1ZXN0KQotewot
ICAgIFdlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9f
SU5URVJGQUNFX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdl
YktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGUo
KTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjNGNhMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICsw
LDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9N
VGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0X2gKLSNkZWZpbmUgV2Vi
S2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0X2gKLQotI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0j
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lO
VEVSRkFDRV9PQkpFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9jb25zdHJ1
Y3Rvcl93aXRoX25vX2ludGVyZmFjZV9vYmplY3RfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1Qob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVCwg
V2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFD
RV9PQkpFQ1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJG
QUNFX09CSkVDVCwgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0Q2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9DVVNUT01fQ09OU1RSVUNU
T1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9DT05TVFJVQ1RP
Ul9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1Rf
Q1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVDVF9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9D
VVNUT01fQ09OU1RSVUNUT1JfV0lUSF9OT19JTlRFUkZBQ0VfT0JKRUNUKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0NVU1RPTV9DT05TVFJVQ1RPUl9XSVRIX05PX0lOVEVSRkFDRV9PQkpFQ1Rf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfQ1VTVE9NX0NPTlNUUlVDVE9SX1dJVEhfTk9fSU5URVJGQUNFX09CSkVD
VCwgV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q2xh
c3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVy
ZmFjZU9iamVjdCB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2Jq
ZWN0Q2xhc3MgewotICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0K
LVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9jdXN0b21fY29uc3RydWN0b3Jfd2l0
aF9ub19pbnRlcmZhY2Vfb2JqZWN0X2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0j
ZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0
RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlZDQ3MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tQ29u
c3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzMyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdl
YktpdERPTVRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByaXZhdGVf
aAotI2RlZmluZSBXZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VP
YmplY3RQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdC5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0Q3VzdG9t
Q29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci1XZWJLaXRET01UZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIHdy
YXBUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QoV2ViQ29yZTo6VGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Kik7Ci1XZWJLaXRET01UZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqIGtpdChXZWJDb3JlOjpUZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqKTsKLVdlYkNvcmU6OlRlc3RD
dXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdCogY29yZShXZWJLaXRET01UZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QqKTsKLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5v
SW50ZXJmYWNlT2JqZWN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGEzOWE0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUg
IkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
LSNpbmNsdWRlICJXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmgiCi0jaW5j
bHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1Rf
Q1VTVE9NX05BTUVEX0dFVFRFUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIsIFdl
YktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiBjb3JlT2JqZWN0OwotfSBXZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBraXQoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdw
b2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdF
QktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKHJldCk7Ci0KLSAgICByZXR1cm4gd3Jh
cFRlc3RDdXN0b21OYW1lZEdldHRlcihvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqIGNvcmUoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiByZXF1ZXN0KQot
ewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEN1c3RvbU5h
bWVkR2V0dGVyKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
LX0KLQotV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB3cmFwVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogY29yZU9iamVjdCkKLXsKLSAg
ICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9DVVNUT01f
TkFNRURfR0VUVEVSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9DVVNUT01fTkFN
RURfR0VUVEVSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RDdXN0b21O
YW1lZEdldHRlciwgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXIsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFt
ZWRfZ2V0dGVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9O
QU1FRF9HRVRURVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJL
aXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9jdXN0b21f
bmFtZWRfZ2V0dGVyX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQot
ewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9j
dXN0b21fbmFtZWRfZ2V0dGVyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0NV
U1RPTV9OQU1FRF9HRVRURVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oV0VCS0lU
X0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RD
YWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4g
b2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dl
dHRlcl9jbGFzc19pbml0KFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlckNsYXNzKiByZXF1
ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0
Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKSk7Ci0g
ICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFt
ZWRfZ2V0dGVyX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9maW5hbGl6ZTsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfaW5pdChXZWJLaXRET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VU
VEVSX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZSgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0
b21fbmFtZWRfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0
cik7Ci0gICAgV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPmFub3RoZXJGdW5jdGlvbihjb252ZXJ0ZWRTdHIpOwot
fQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODU2YzEwLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDdXN0b21OYW1lZEdldHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoK
LSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
Ci0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAot
Ci0jaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xT
Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUiAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9nZXRfdHlwZSgpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DVVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9DVVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDbGFz
cykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUikpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9D
VVNUT01fTkFNRURfR0VUVEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIpKQotI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9D
VVNUT01fTkFNRURfR0VUVEVSLCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDbGFzcykp
Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyIHsKLSAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1l
ZF9nZXR0ZXJfZ2V0X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2N1c3Rv
bV9uYW1lZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9jdXN0b21f
bmFtZWRfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RD
dXN0b21OYW1lZEdldHRlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuc3lt
Ym9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZWMzYWQxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5zeW1ib2xz
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9t
X25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdl
dHRlciosIGNvbnN0IGdjaGFyKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYy
ZTYyYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxOTYgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmgi
Ci0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVj
dC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RS
VUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3JQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3Ry
dWN0b3I+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9y
KiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIG9iaikKLXsKLSAgICBpZiAoIW9i
aikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0
Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NP
TlNUUlVDVE9SKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKG9i
aik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0RXZlbnRDb25z
dHJ1Y3Rvciogd3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1
cm4gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2Nv
bnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAs
Ci0gICAgUFJPUF9BVFRSMSwKLSAgICBQUk9QX0FUVFIyLAotICAgIFBST1BfQVRUUjMsCi19Owot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9HRVRfUFJJVkFU
RShvYmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RFdmVudENvbnN0cnVj
dG9yUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9j
b25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYgPSBXRUJL
SVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1Iob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9BVFRSMToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSMjoKLSAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9y
X2dldF9hdHRyMihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSMzoK
LSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V2ZW50
X2NvbnN0cnVjdG9yX2dldF9hdHRyMyhzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09i
amVjdCogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBl
IHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBh
cmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFBy
b3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVj
dCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RFdmVu
dENvbnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0g
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9i
amVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0RXZlbnRDb25z
dHJ1Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3RvclByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmluYWxpemU7Ci0g
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29u
c3RydWN0b3JfZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FUVFIxLAotICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImF0dHIxIiwKLSAgICAgICAgICAg
ICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMSIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IGdj
aGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMSIsCi0gICAgICAgICAgICAiIiwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FUVFIy
LAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImF0dHIyIiwKLSAg
ICAgICAgICAgICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMiIsCi0gICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMiIsCi0gICAgICAgICAgICAi
IiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQ
Uk9QX0FUVFIzLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImF0
dHIzIiwKLSAgICAgICAgICAgICJUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMyIsCi0gICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0RXZlbnRDb25zdHJ1Y3RvcjphdHRyMyIsCi0gICAg
ICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RF
dmVudENvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05T
VFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZSgpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0
X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ciogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VWRU5UX0NPTlNUUlVD
VE9SKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyMSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJLaXRET01UZXN0RXZl
bnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VW
RU5UX0NPTlNUUlVDVE9SKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1
Y3RvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMyhXZWJL
aXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSNpZiBFTkFCTEUoU1BFQ0lBTF9F
VkVOVCkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0VWRU5UX0NPTlNUUlVDVE9SKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hdHRyMygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlY2lhbCBF
dmVudCIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKFNQRUNJQUxfRVZFTlQpICov
Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGEyMGQ0Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JfaAotCi0j
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0K
LSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IgICAgICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF90eXBlKCkpCi0jZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9D
T05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IpKQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRfQ09OU1RS
VUNUT1IsIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xhc3MpCi0jZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJV
Q1RPUikpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUl9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVO
VF9DT05TVFJVQ1RPUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9DT05TVFJVQ1RPUiwgV2ViS2l0RE9N
VGVzdEV2ZW50Q29uc3RydWN0b3JDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3IgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19Owot
Ci1zdHJ1Y3QgX1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yQ2xhc3MgewotICAgIFdlYktp
dERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdl
YmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yCi0gKgotICogUmV0dXJuczogQSAjZ2No
YXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxKFdlYktpdERPTVRlc3RF
dmVudENvbnN0cnVjdG9yKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRf
Y29uc3RydWN0b3JfZ2V0X2F0dHIyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29u
c3RydWN0b3JfZ2V0X2F0dHIyKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIzOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yCi0gKgotICogUmV0dXJu
czogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIzKFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBzZWxmKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLnN5
bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMmI3MTdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLnN5bWJvbHMK
KysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXZl
bnRfY29uc3RydWN0b3JfZ2V0X2F0dHIxKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKikK
LWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZ2V0X2F0dHIyKFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0RXZlbnRUYXJnZXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWVhNzIx
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIg
KzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudFRhcmdldC5oIgotCi0jaW5jbHVkZSAi
Q1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIK
LSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01F
dmVudFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgotI2luY2x1
ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUuaCIKLSNpbmNsdWRl
ICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVO
VF9UQVJHRVRfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2Jq
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9UQVJHRVQsIFdlYktpdERPTVRlc3RFdmVudFRh
cmdldFByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQ
cml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0PiBjb3JlT2JqZWN0
OwotfSBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFy
Z2V0KiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVQocmV0KTsKLQotICAgIHJldHVybiB3cmFwVGVz
dEV2ZW50VGFyZ2V0KG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShX
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0RXZlbnRUYXJn
ZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBjb3JlT2Jq
ZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9U
RVNUX0VWRU5UX1RBUkdFVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVZFTlRf
VEFSR0VULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2V2ZW50
X3RhcmdldF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJL
aXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkV2ZW50
KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOwotICAgIGlmICghY29yZUV2ZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2
ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwotICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X2V2ZW50
X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKLXsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21fdGVzdF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0gICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkdP
YmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJ
ZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV90
ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVudDsKLSAgICBpZmFjZS0+YWRkX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXI7
Ci0gICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ldmVu
dF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOwotfQotCi1HX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQsIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJn
ZXQsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRf
RE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVRfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsK
LQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlKCk7Ci0gICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsK
LSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZXZl
bnRfdGFyZ2V0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0RXZl
bnRUYXJnZXRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVF9HRVRf
UFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0RXZlbnRU
YXJnZXRDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJp
dmF0ZSkpOwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rf
ZXZlbnRfdGFyZ2V0X2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
KiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUX0dFVF9QUklWQVRFKHJlcXVlc3QpOwotICAg
IG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZSgpOwotfQotCi1XZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0KiBzZWxmLCBndWxvbmcgaW5kZXgpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9FVkVOVF9UQVJHRVQoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RFdmVu
dFRhcmdldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKLSAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RFdmVudFRhcmdldC5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LnN5bWJvbHMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYjQ3MzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
LnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1XZWJLaXRET01Ob2RlKiB3ZWJr
aXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0Kiwg
Z3Vsb25nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhNTlkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0
aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdEV4Y2VwdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlLmgiCi0jaW5jbHVk
ZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVhD
RVBUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfRVhDRVBUSU9OLCBXZWJLaXRET01UZXN0RXhjZXB0aW9uUHJp
dmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlIHsK
LSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEV4Y2VwdGlvbj4gY29yZU9iamVjdDsKLX0gV2ViS2l0
RE9NVGVzdEV4Y2VwdGlvblByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJLaXRE
T01UZXN0RXhjZXB0aW9uKiBraXQoV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiogb2JqKQotewotICAg
IGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBE
T01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1Rf
RVhDRVBUSU9OKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RFeGNlcHRpb24ob2JqKTsKLX0K
LQotV2ViQ29yZTo6VGVzdEV4Y2VwdGlvbiogY29yZShXZWJLaXRET01UZXN0RXhjZXB0aW9uKiBy
ZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dEV4Y2VwdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Ci19Ci0KLVdlYktpdERPTVRlc3RFeGNlcHRpb24qIHdyYXBUZXN0RXhjZXB0aW9uKFdlYkNvcmU6
OlRlc3RFeGNlcHRpb24qIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwot
ICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfVEVTVF9FWENFUFRJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0
RE9NVGVzdEV4Y2VwdGlvbiwgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbiwgV0VCS0lUX0RPTV9U
WVBFX09CSkVDVCkKLQotZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfTkFNRSwKLX07Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25fZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9URVNUX0VYQ0VQVElPTl9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAg
cHJpdi0+fldlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RFeGNlcHRpb24qIHNlbGYgPSBX
RUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKLSAgICBjYXNlIFBST1BfTkFNRToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9nZXRfbmFtZShzZWxmKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0RXhjZXB0aW9uUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9FWENFUFRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEV4Y2VwdGlvbio+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJu
IG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9jbGFz
c19pbml0KFdlYktpdERPTVRlc3RFeGNlcHRpb25DbGFzcyogcmVxdWVzdENsYXNzKQotewotICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NVGVzdEV4Y2VwdGlvblByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVj
dG9yID0gd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9maW5hbGl6ZTsKLSAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25f
Z2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAg
ICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05BTUUsCi0gICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCi0gICAgICAgICAgICAibmFtZSIsCi0gICAgICAgICAgICAiVGVzdEV4Y2Vw
dGlvbjpuYW1lIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RFeGNlcHRpb246
bmFtZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25faW5pdChX
ZWJLaXRET01UZXN0RXhjZXB0aW9uKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RFeGNl
cHRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0VYQ0VQVElPTl9HRVRfUFJJVkFU
RShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRl
KCk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZXhjZXB0aW9uX2dldF9uYW1lKFdlYktp
dERPTVRlc3RFeGNlcHRpb24qIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9FWENFUFRJT04oc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RFeGNlcHRpb24qIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+bmFtZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0RXhjZXB0aW9uLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDA4ODg5NTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbi5zeW1ib2xz
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9leGNl
cHRpb25fZ2V0X25hbWUoV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbiopCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMWZhMDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVs
ZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5o
IgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFURShv
YmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRSwgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQ
cml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGU+
IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
KiBraXQoV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIG9iaikKLXsKLSAgICBpZiAo
IW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0dFTkVS
QVRFX0lTX1JFQUNIQUJMRShyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZShvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogY29y
ZShXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogcmVxdWVzdCkKLXsKLSAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKLX0KLQotV2Vi
S2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUqIHdyYXBUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZShXZWJDb3JlOjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSogY29yZU9iamVjdCkKLXsKLSAgICBB
U1NFUlQoY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9HRU5FUkFURV9J
U19SRUFDSEFCTEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX0dFTkVSQVRFX0lT
X1JFQUNIQUJMRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSwgd2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZSwgV0VC
S0lUX0RPTV9UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2dlbmVy
YXRlX2lzX3JlYWNoYWJsZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0
RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAg
cHJpdi0+fldlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZSgpOwotICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9nZW5lcmF0ZV9pc19yZWFjaGFibGVfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9k
b21fdGVzdF9nZW5lcmF0ZV9pc19yZWFjaGFibGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3Vp
bnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0
cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9wYXJlbnRfY2xhc3MpLT5jb25z
dHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRp
ZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFURShvYmpl
Y3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2dlbmVyYXRlX2lzX3JlYWNoYWJsZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0ZSkpOwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0
b3IgPSB3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNfcmVhY2hhYmxlX2NvbnN0cnVjdG9yOwot
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVfaXNf
cmVhY2hhYmxlX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2Vu
ZXJhdGVfaXNfcmVhY2hhYmxlX2luaXQoV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUq
IHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfUFJJVkFU
RShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJpdmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0
OThkYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZV9oCi0jZGVmaW5lIFdlYktpdERPTVRl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlX2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNU
X0dFTkVSQVRFX0lTX1JFQUNIQUJMRSAgICAgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZ2VuZXJh
dGVfaXNfcmVhY2hhYmxlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HRU5F
UkFURV9JU19SRUFDSEFCTEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFLCBX
ZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9HRU5FUkFURV9JU19SRUFDSEFCTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hB
QkxFLCBXZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNsYXNzKQotI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0dFTkVSQVRF
X0lTX1JFQUNIQUJMRSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9HRU5FUkFURV9JU19S
RUFDSEFCTEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfR0VORVJBVEVfSVNfUkVBQ0hBQkxFKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0dFTkVSQVRFX0lTX1JFQUNIQUJMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9HRU5FUkFU
RV9JU19SRUFDSEFCTEUsIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ2xhc3MpKQot
Ci1zdHJ1Y3QgX1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIHsKLSAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZUNsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3RfZ2VuZXJhdGVf
aXNfcmVhY2hhYmxlX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUu
c3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVh
Y2hhYmxlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVQcml2YXRlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNGQ1Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdlbmVyYXRlSXNS
ZWFjaGFibGVQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hh
YmxlUHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oIgotI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiB3cmFw
VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUoV2ViQ29yZTo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUq
KTsKLVdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBraXQoV2ViQ29yZTo6VGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUqKTsKLVdlYkNvcmU6OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKiBj
b3JlKFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKik7Ci19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJpdmF0
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTFjNDA4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RH
bG9iYWxPYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAgQEAKLS8qCi0gKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
ZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0LmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgi
Ci0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZh
dGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCwgV2Vi
S2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RHbG9i
YWxPYmplY3Q+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCoga2l0
KFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1QocmV0
KTsKLQotICAgIHJldHVybiB3cmFwVGVzdEdsb2JhbE9iamVjdChvYmopOwotfQotCi1XZWJDb3Jl
OjpUZXN0R2xvYmFsT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHJlcXVl
c3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0R2xv
YmFsT2JqZWN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
LX0KLQotV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogd3JhcFRlc3RHbG9iYWxPYmplY3QoV2Vi
Q29yZTo6VGVzdEdsb2JhbE9iamVjdCogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9i
amVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9HTE9CQUxfT0JKRUNULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RF
RklORV9UWVBFKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QsIHdlYmtpdF9kb21fdGVzdF9nbG9i
YWxfb2JqZWN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAs
Ci0gICAgUFJPUF9SRUdVTEFSX0FUVFJJQlVURSwKLSAgICBQUk9QX1BVQkxJQ19BTkRfUFJJVkFU
RV9BVFRSSUJVVEUsCi0gICAgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09ORElUSU9OQUxfQVRU
UklCVVRFLAotICAgIFBST1BfRU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURSwKLX07Ci0KLXN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7
Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUoKTsKLSAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2xv
YmFsX29iamVjdF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1Qo
b2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9SRUdV
TEFSX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0
X3JlZ3VsYXJfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFVCTElDX0FORF9QUklWQVRFX0FUVFJJQlVURToK
LSAgICAgICAgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19hbmRfcHJp
dmF0ZV9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09ORElUSU9OQUxfQVRU
UklCVVRFOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfcHVibGlj
X2FuZF9wcml2YXRlX2NvbmRpdGlvbmFsX2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VOQUJMRURfQVRfUlVO
VElNRV9BVFRSSUJVVEU6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3Nl
dF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEds
b2JhbE9iamVjdCogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUKG9iamVjdCk7
Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfUkVHVUxBUl9BVFRS
SUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X2dldF9yZWd1bGFyX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQVRUUklCVVRFOgotICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVj
dF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9QVUJMSUNfQU5EX1BSSVZBVEVfQ09ORElUSU9OQUxfQVRUUklCVVRF
OgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfZ2xv
YmFsX29iamVjdF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2NvbmRpdGlvbmFsX2F0dHJpYnV0ZShz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTkFCTEVEX0FUX1JVTlRJTUVf
QVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShzZWxm
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGll
c0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0g
ICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTVRlc3RHbG9i
YWxPYmplY3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0dMT0JBTF9PQkpFQ1RfR0VU
X1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdEdsb2JhbE9iamVjdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVP
YmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0
LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0R2xv
YmFsT2JqZWN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RHbG9iYWxPYmpl
Y3RQcml2YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21f
dGVzdF9nbG9iYWxfb2JqZWN0X2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9maW5hbGl6ZTsKLSAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9w
cm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X2dldF9wcm9wZXJ0eTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUdVTEFS
X0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJy
ZWd1bGFyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdEdsb2JhbE9iamVjdDpyZWd1bGFy
LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEdsb2JhbE9i
amVjdDpyZWd1bGFyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9QVUJMSUNfQU5EX1BS
SVZBVEVfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAg
ICAgInB1YmxpYy1hbmQtcHJpdmF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RHbG9i
YWxPYmplY3Q6cHVibGljLWFuZC1wcml2YXRlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogVGVzdEdsb2JhbE9iamVjdDpwdWJsaWMtYW5kLXByaXZhdGUtYXR0cmli
dXRlIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29i
amVjdENsYXNzLAotICAgICAgICBQUk9QX1BVQkxJQ19BTkRfUFJJVkFURV9DT05ESVRJT05BTF9B
VFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAicHVi
bGljLWFuZC1wcml2YXRlLWNvbmRpdGlvbmFsLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVz
dEdsb2JhbE9iamVjdDpwdWJsaWMtYW5kLXByaXZhdGUtY29uZGl0aW9uYWwtYXR0cmlidXRlIiwK
LSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0R2xvYmFsT2JqZWN0OnB1YmxpYy1h
bmQtcHJpdmF0ZS1jb25kaXRpb25hbC1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIiIsCi0gICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfRU5B
QkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
LSAgICAgICAgICAgICJlbmFibGVkLWF0LXJ1bnRpbWUtYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJUZXN0R2xvYmFsT2JqZWN0OmVuYWJsZWQtYXQtcnVudGltZS1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RHbG9iYWxPYmplY3Q6ZW5hYmxlZC1hdC1ydW50
aW1lLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFs
X29iamVjdF9pbml0KFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHJlcXVlc3QpCi17Ci0gICAg
V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1Rf
R0xPQkFMX09CSkVDVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktp
dERPTVRlc3RHbG9iYWxPYmplY3RQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVj
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh0ZXN0UGFy
YW0pOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGVzdFBhcmFtID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHRlc3RQYXJhbSk7Ci0gICAgaXRlbS0+cmVndWxhck9wZXJhdGlvbihjb252ZXJ0
ZWRUZXN0UGFyYW0pOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2Vu
YWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSkKLXsKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNUKHNlbGYpKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHRlc3RQYXJhbSk7Ci0gICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXN0
UGFyYW0gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodGVzdFBhcmFtKTsKLSAgICBpdGVtLT5lbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uKGNvbnZlcnRlZFRlc3RQYXJhbSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFtKTsKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVO
QUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9v
YmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbihXZWJLaXRET01UZXN0R2xvYmFsT2Jq
ZWN0KiBzZWxmLCBnbG9uZyB0ZXN0UGFyYW0pCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7Ci0gICAgV2Vi
Q29yZTo6VGVzdEdsb2JhbE9iamVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBp
dGVtLT5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKHRlc3RQYXJhbSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFtKTsKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVO
QUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFs
X29iamVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
cmVndWxhckF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9yZWd1bGFyX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldFJlZ3VsYXJBdHRyaWJ1dGUoY29udmVy
dGVkVmFsdWUpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0
X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qoc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RHbG9iYWxPYmplY3QqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
cHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVf
YXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9i
amVjdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0UHVi
bGljQW5kUHJpdmF0ZUF0dHJpYnV0ZShjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJr
aXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcHVibGljX2FuZF9wcml2YXRlX2NvbmRpdGlv
bmFsX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmKQotewotI2lmIEVO
QUJMRShURVNUX0ZFQVRVUkUpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxf
T0JKRUNUKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0dXJlIikKLSAgICByZXR1cm4gMDsK
LSNlbmRpZiAvKiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0
cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKLXsKLSNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9HTE9CQUxfT0JKRUNUKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKLSAgICBpdGVtLT5zZXRQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUo
Y29udmVydGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJU
ZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLWdj
aGFyKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1l
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmKQotewotI2lmIEVOQUJM
RShURVNUX0ZFQVRVUkUpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JK
RUNUKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0R2xvYmFsT2JqZWN0KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlRlc3QgRmVhdHVyZSIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5B
QkxFKFRFU1RfRkVBVFVSRSkgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29i
amVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0R2xvYmFs
T2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVB
VFVSRSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfR0xPQkFMX09CSkVDVChzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVj
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0RW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZShjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlRlc3QgRmVhdHVyZSIpCi0jZW5kaWYgLyogRU5BQkxFKFRFU1Rf
RkVBVFVSRSkgKi8KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdsb2JhbE9i
amVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI2Yzc1Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RHbG9iYWxPYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RHbG9iYWxP
YmplY3RfaAotI2RlZmluZSBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0X2gKLQotI2lmZGVmIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QgICAgICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNU
X0dMT0JBTF9PQkpFQ1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfR0xPQkFMX09CSkVDVCwgV2ViS2l0RE9NVGVz
dEdsb2JhbE9iamVjdCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9HTE9CQUxfT0JKRUNUX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QsIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RDbGFz
cykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0dMT0JBTF9PQkpFQ1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
R0xPQkFMX09CSkVDVCkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9HTE9CQUxfT0JKRUNU
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9URVNUX0dMT0JBTF9PQkpFQ1QpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfR0xP
QkFMX09CSkVDVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9HTE9CQUxfT0JKRUNULCBXZWJLaXRET01UZXN0R2xv
YmFsT2JqZWN0Q2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3Qgewot
ICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3RHbG9iYWxPYmplY3RDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfZ2V0X3R5cGUodm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2dsb2Jh
bF9vYmplY3RfcmVndWxhcl9vcGVyYXRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEds
b2JhbE9iamVjdAotICogQHRlc3RQYXJhbTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmpl
Y3RfcmVndWxhcl9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiwgY29u
c3QgZ2NoYXIqIHRlc3RQYXJhbSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9v
YmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0Ci0gKiBAdGVzdFBhcmFtOiBBICNnY2hhcgotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfZ2xv
YmFsX29iamVjdF9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktpdERPTVRlc3RHbG9i
YWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0ZXN0UGFyYW0pOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb246Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICogQHRlc3RQYXJhbTogQSAj
Z2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlv
bihXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBnbG9uZyB0ZXN0UGFyYW0pOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9yZWd1bGFyX2F0dHJpYnV0
ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0gKgotICogUmV0dXJu
czogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9nZXRfcmVndWxhcl9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X2dsb2JhbF9vYmplY3Rfc2V0X3JlZ3VsYXJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RHbG9iYWxP
YmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGU6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICoKLSAqIFJldHVybnM6IEEgI2dj
aGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgot
d2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3RfZ2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRy
aWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9hdHRyaWJ1dGU6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdAotICogQHZhbHVlOiBBICNn
Y2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVjdF9zZXRfcHVibGljX2FuZF9wcml2YXRlX2F0dHJp
YnV0ZShXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9nbG9iYWxfb2JqZWN0X2dldF9wdWJsaWNfYW5k
X3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RHbG9iYWxPYmplY3QKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9nbG9i
YWxfb2JqZWN0X2dldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0cmlidXRlKFdl
YktpdERPTVRlc3RHbG9iYWxPYmplY3QqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9nbG9iYWxfb2JqZWN0X3NldF9wdWJsaWNfYW5kX3ByaXZhdGVfY29uZGl0aW9uYWxfYXR0cmli
dXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RHbG9iYWxPYmplY3QKLSAqIEB2YWx1ZTog
QSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X2dsb2JhbF9vYmplY3Rfc2V0X3B1YmxpY19hbmRfcHJpdmF0ZV9j
b25kaXRpb25hbF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFsX29iamVj
dF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0R2xvYmFsT2JqZWN0Ci0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rf
Z2xvYmFsX29iamVjdF9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0KiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZ2xvYmFs
X29iamVjdF9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Ci0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9n
bG9iYWxfb2JqZWN0X3NldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlKFdlYktpdERPTVRl
c3RHbG9iYWxPYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xT
Ci0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBX
ZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbXBsZW1lbnRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RJbXBsZW1lbnRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhZTU1
MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0SW1wbGVtZW50cy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ICsw
LDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQg
c2NyaXB0cyB0aGF0IFdlYktpdERPTVRlc3RJbXBsZW1lbnRzLmggYW5kCi0gICAgV2ViS2l0RE9N
VGVzdEltcGxlbWVudHMuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0SW1wbGVtZW50cy5pZGwsIGFu
ZCB0aHVzCi0gICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5l
cmF0ZSBXZWJLaXRET01UZXN0SW1wbGVtZW50cy5oIGFuZAotICAgIFdlYktpdERPTVRlc3RJbXBs
ZW1lbnRzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRv
IGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbXBsZW1lbnRzLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYWU1NTAuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdElt
cGxlbWVudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZp
bGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9N
VGVzdEltcGxlbWVudHMuaCBhbmQKLSAgICBXZWJLaXRET01UZXN0SW1wbGVtZW50cy5jcHAgYXJl
IGNyZWF0ZWQgZm9yIFRlc3RJbXBsZW1lbnRzLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRo
ZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RJbXBs
ZW1lbnRzLmggYW5kCi0gICAgV2ViS2l0RE9NVGVzdEltcGxlbWVudHMuY3BwIGF0IGV2ZXJ5IGJ1
aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KLSovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiNjMxN2UxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0SW50ZXJmYWNlLmgi
Ci0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCi0jaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0j
aW5jbHVkZSAiV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJL
aXRET01UZXN0T2JqUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0
cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFDRV9HRVRfUFJJVkFURShvYmopIEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX0lOVEVS
RkFDRSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZSB7Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0SW50ZXJmYWNlPiBj
b3JlT2JqZWN0OwotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKLX0gV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGU7Ci0KLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1X
ZWJLaXRET01UZXN0SW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqKQot
ewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X1RFU1RfSU5URVJGQUNFKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RJbnRlcmZhY2Uob2Jq
KTsKLX0KLQotV2ViQ29yZTo6VGVzdEludGVyZmFjZSogY29yZShXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6VGVzdEludGVyZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHdyYXBUZXN0SW50ZXJmYWNlKFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRFUkZBQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KLUdfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSwgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZSwgV0VCS0lUX0RP
TV9UWVBFX09CSkVDVCkKLQotZW51bSB7Ci0gICAgUFJPUF8wLAotICAgIFBST1BfSU1QTEVNRU5U
U19TVFIxLAotICAgIFBST1BfSU1QTEVNRU5UU19TVFIyLAotICAgIFBST1BfSU1QTEVNRU5UU19O
T0RFLAotICAgIFBST1BfU1VQUExFTUVOVEFMX1NUUjEsCi0gICAgUFJPUF9TVVBQTEVNRU5UQUxf
U1RSMiwKLSAgICBQUk9QX1NVUFBMRU1FTlRBTF9OT0RFLAotfTsKLQotc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
V2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRl
KCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfaW50ZXJmYWNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktp
dERPTVRlc3RJbnRlcmZhY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iamVj
dCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5U
U19TVFIyOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9pbXBsZW1lbnRz
X3N0cjIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUFJPUF9TVVBQTEVNRU5UQUxfU1RSMjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50
ZXJmYWNlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RJbnRl
cmZhY2UqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iamVjdCk7Ci0KLSAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5UU19TVFIxOgotICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNl
X2dldF9pbXBsZW1lbnRzX3N0cjEoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfSU1QTEVNRU5UU19TVFIyOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoc2VsZikpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU1QTEVNRU5UU19OT0RFOgotICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxl
bWVudHNfbm9kZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVVBQTEVN
RU5UQUxfU1RSMToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEoc2VsZikpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfU1VQUExFTUVOVEFMX1NUUjI6Ci0gICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1l
bnRhbF9zdHIyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NVUFBMRU1F
TlRBTF9OT0RFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
dGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0g
ICAgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1Rf
SU5URVJGQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RJbnRl
cmZhY2VDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZh
dGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3Byb3BlcnR5OwotICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfcHJv
cGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBn
b2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfSU1QTEVNRU5UU19TVFIxLAotICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgImltcGxlbWVudHMtc3RyMSIsCi0gICAgICAg
ICAgICAiVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLXN0cjEiLAotICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLXN0cjEiLAotICAgICAgICAgICAg
IiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAg
UFJPUF9JTVBMRU1FTlRTX1NUUjIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAiaW1wbGVtZW50cy1zdHIyIiwKLSAgICAgICAgICAgICJUZXN0SW50ZXJmYWNlOmlt
cGxlbWVudHMtc3RyMiIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEludGVy
ZmFjZTppbXBsZW1lbnRzLXN0cjIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfSU1QTEVNRU5UU19OT0RF
LAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAgICAgICAgImltcGxlbWVudHMt
bm9kZSIsCi0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTppbXBsZW1lbnRzLW5vZGUiLAotICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBUZXN0SW50ZXJmYWNlOmltcGxlbWVu
dHMtbm9kZSIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NVUFBMRU1FTlRB
TF9TVFIxLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInN1cHBs
ZW1lbnRhbC1zdHIxIiwKLSAgICAgICAgICAgICJUZXN0SW50ZXJmYWNlOnN1cHBsZW1lbnRhbC1z
dHIxIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RJbnRlcmZhY2U6c3VwcGxl
bWVudGFsLXN0cjEiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAg
ICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVVBQTEVNRU5UQUxfU1RSMiwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdXBwbGVtZW50YWwtc3RyMiIs
Ci0gICAgICAgICAgICAiVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtc3RyMiIsCi0gICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtc3RyMiIs
Ci0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
LQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RD
bGFzcywKLSAgICAgICAgUFJPUF9TVVBQTEVNRU5UQUxfTk9ERSwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKLSAgICAgICAgICAgICJzdXBwbGVtZW50YWwtbm9kZSIsCi0gICAgICAgICAg
ICAiVGVzdEludGVyZmFjZTpzdXBwbGVtZW50YWwtbm9kZSIsCi0gICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTU5vZGUqIFRlc3RJbnRlcmZhY2U6c3VwcGxlbWVudGFsLW5vZGUiLAotICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNl
X2luaXQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAgICBXZWJLaXRET01U
ZXN0SW50ZXJmYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9JTlRFUkZBQ0VfR0VU
X1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0SW50ZXJmYWNl
UHJpdmF0ZSgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50
c19tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotI2lmIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZB
Q0Uoc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+aW1wbGVtZW50c01ldGhvZDEoKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjIyIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yMyIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZh
Y2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywg
R0Vycm9yKiogZXJyb3IpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQotI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpLCAwKTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzdHJBcmcsIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkoob2JqQXJnKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2Uq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3Ry
QXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0Ojpjb3JlKG9iakFyZyk7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbXBsZW1lbnRzTWV0aG9kMihjb252ZXJ0ZWRT
dHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwot
ICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFVOVVNFRF9QQVJBTShvYmpBcmcpOwotICAg
IFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMjIiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjIzIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYp
OwotICAgIFVOVVNFRF9QQVJBTShzdHJBcmcpOwotICAgIFVOVVNFRF9QQVJBTShvYmpBcmcpOwot
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDEoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikK
LXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxNZXRob2QxKCppdGVtKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNl
bGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZiwg
Y29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqQXJnLCBHRXJyb3IqKiBl
cnJvcikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0j
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJy
b3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJBcmcgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0
ZWRPYmpBcmcgPSBXZWJLaXQ6OmNvcmUob2JqQXJnKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhv
ZDIoKml0ZW0sIGNvbnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZywgZWMpKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7Ci0gICAgVU5VU0VE
X1BBUkFNKG9iakFyZyk7Ci0gICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHN0ckFyZyk7Ci0gICAgVU5V
U0VEX1BBUkFNKG9iakFyZyk7Ci0gICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLWdjaGFy
KiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjEoV2ViS2l0RE9N
VGVzdEludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwot
ICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aW1wbGVtZW50c1N0
cjEoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYp
OwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikKLSAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0gICAgcmV0
dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLWdjaGFyKiB3ZWJr
aXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoV2ViS2l0RE9NVGVzdElu
dGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCi0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aW1wbGVtZW50c1N0cjIoKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikKLSAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpICov
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZhY2Uq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0SW1wbGVtZW50
c1N0cjIoY29udmVydGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24yMiIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMjMiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKSAqLwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
Ci19Ci0KLVdlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxl
bWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lO
VEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmltcGxlbWVudHNOb2RlKCkpOwotICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNl
bGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0gICAg
cmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19ub2RlKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHZhbHVlKQotewotI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8
IEVOQUJMRShDb25kaXRpb24yMykKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNF
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERSh2YWx1ZSkp
OwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUp
OwotICAgIGl0ZW0tPnNldEltcGxlbWVudHNOb2RlKCpjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIyIikKLSAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yMyIpCi0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpICovCi0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9p
bnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNl
bGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0
SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0cjEoaXRlbSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIi
KQotICAgIHJldHVybiAwOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKSAqLwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpdGVtKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRf
c3VwcGxlbWVudGFsX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfSU5URVJGQUNFKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBw
bGVtZW50YWxTdHIyKCppdGVtLCBjb252ZXJ0ZWRWYWx1ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KLX0KLQotV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikK
LXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RJbnRl
cmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxOb2RlKCppdGVtKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQotICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKLSAgICByZXR1cm4gMDsKLSNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIkNvbmRpdGlvbjIiKQotICAgIHJldHVybiAwOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBz
ZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRShzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUodmFsdWUpKTsKLSAgICBXZWJD
b3JlOjpUZXN0SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6Ok5vZGUqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBXZWJD
b3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxOb2RlKCppdGVtLCAqY29udmVy
dGVkVmFsdWUpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIi
KQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAq
LwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTE2NmY3Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMzMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBXZWJLaXRET01UZXN0SW50ZXJmYWNlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEludGVy
ZmFjZV9oCi0KLSNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgot
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRFUkZBQ0UgICAgICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfSU5URVJGQUNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX0lOVEVSRkFDRSwgV2ViS2l0RE9N
VGVzdEludGVyZmFjZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JTlRFUkZBQ0VfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfSU5URVJGQUNFLCBXZWJLaXRET01UZXN0SW50ZXJmYWNlQ2xhc3MpCi0jZGVmaW5l
IFdFQktJVF9ET01fSVNfVEVTVF9JTlRFUkZBQ0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSU5URVJGQUNFKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0lOVEVSRkFDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JTlRFUkZBQ0Up
KQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0lOVEVS
RkFDRSwgV2ViS2l0RE9NVGVzdEludGVyZmFjZUNsYXNzKSkKLQotI2lmIEVOQUJMRShDb25kaXRp
b24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFX0lNUExFTUVOVFNDT05TVEFOVDE6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNU
X0lOVEVSRkFDRV9JTVBMRU1FTlRTQ09OU1RBTlQxIDEKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0
aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLQotI2lmIEVOQUJMRShDb25kaXRpb24y
MikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfSU5URVJG
QUNFX0lNUExFTUVOVFNDT05TVEFOVDI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lO
VEVSRkFDRV9JTVBMRU1FTlRTQ09OU1RBTlQyIDIKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykgKi8KLQotI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNF
X1NVUFBMRU1FTlRBTENPTlNUQU5UMToKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfSU5U
RVJGQUNFX1NVUFBMRU1FTlRBTENPTlNUQU5UMSAxCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikKLS8qKgotICogV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFD
RV9TVVBQTEVNRU5UQUxDT05TVEFOVDI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0lO
VEVSRkFDRV9TVVBQTEVNRU5UQUxDT05TVEFOVDIgMgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RJ
bnRlcmZhY2UgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3RJbnRlcmZhY2VDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX2ltcGxlbWVudHNfbWV0aG9kMToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
SW50ZXJmYWNlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QxKFdlYktpdERP
TVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfaW1wbGVtZW50c19tZXRob2QyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZh
Y2UKLSAqIEBzdHJBcmc6IEEgI2djaGFyCi0gKiBAb2JqQXJnOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfaW1wbGVt
ZW50c19tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBz
dHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDE6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBs
ZW1lbnRhbF9tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDI6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBv
YmpBcmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0
X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMihXZWJLaXRET01UZXN0SW50
ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpB
cmcsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNl
X2dldF9pbXBsZW1lbnRzX3N0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFj
ZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfaW1w
bGVtZW50c19zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxlbWVudHNfc3RyMjoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0SW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9t
X3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0cjIoV2ViS2l0RE9NVGVzdEludGVyZmFj
ZSogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVt
ZW50c19zdHIyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UKLSAqIEB2YWx1
ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
dm9pZAotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfaW1wbGVtZW50c19zdHIyKFdlYktp
dERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfaW1wbGVtZW50c19ub2RlOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X2lt
cGxlbWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9pbXBsZW1lbnRzX25vZGU6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICogQHZhbHVlOiBBICNXZWJLaXRET01Ob2RlCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2Vfc2V0X2ltcGxlbWVudHNfbm9kZShXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2Vs
Zik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFs
X3N0cjI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEludGVyZmFjZQotICoKLSAqIFJldHVy
bnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIo
V2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdEludGVyZmFjZQotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3Nl
dF9zdXBwbGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1
cHBsZW1lbnRhbF9ub2RlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UKLSAq
Ci0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKLXdlYmtp
dF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0
X3N1cHBsZW1lbnRhbF9ub2RlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RJbnRlcmZhY2UK
LSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NTm9kZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBw
bGVtZW50YWxfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiB2YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0SW50ZXJmYWNlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RJbnRlcmZhY2Uuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2Uuc3ltYm9scwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmZjBlOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLnN5
bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi12b2lkIHdlYmtpdF9kb21fdGVz
dF9pbnRlcmZhY2VfaW1wbGVtZW50c19tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQot
V2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9pbXBsZW1lbnRzX21l
dGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIGNvbnN0IGdjaGFyKiwgV2ViS2l0RE9NVGVz
dE9iaiosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2ltcGxlbWVu
dHNfbWV0aG9kNChXZWJLaXRET01UZXN0SW50ZXJmYWNlKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKikK
LVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFs
X21ldGhvZDIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIGNvbnN0IGdjaGFyKiwgV2ViS2l0RE9N
VGVzdE9iaiosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBs
ZW1lbnRhbF9tZXRob2Q0KFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9pbnRlcmZhY2VfZ2V0X2ltcGxlbWVudHNfc3RyMShXZWJLaXRET01UZXN0SW50ZXJm
YWNlKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9pbXBsZW1lbnRzX3N0
cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2Vfc2V0X2ltcGxlbWVudHNfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiwgY29uc3QgZ2No
YXIqKQotV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfaW1wbGVt
ZW50c19ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX3NldF9pbXBsZW1lbnRzX25vZGUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSosIFdl
YktpdERPTU5vZGUqKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBs
ZW1lbnRhbF9zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqKQotZ2NoYXIqIHdlYmtpdF9kb21f
dGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZh
Y2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxfc3Ry
MihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiwgY29uc3QgZ2NoYXIqKQotV2ViS2l0RE9NTm9kZSog
d2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUoV2ViS2l0RE9N
VGVzdEludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1cHBs
ZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqLCBXZWJLaXRET01Ob2RlKikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RJdGVyYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SXRlcmFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0MjRiMjQ0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJdGVyYWJsZS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RJdGVyYWJsZS5o
IgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgotI2luY2x1ZGUg
IldlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZl
cnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JVEVSQUJMRV9HRVRfUFJJVkFU
RShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9U
RVNUX0lURVJBQkxFLCBXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlKQotCi10eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OlRlc3RJdGVyYWJsZT4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdEl0ZXJhYmxlUHJpdmF0
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RJdGVyYWJsZSoga2l0KFdl
YkNvcmU6OlRlc3RJdGVyYWJsZSogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
Ci0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSVRFUkFCTEUocmV0KTsKLQotICAgIHJl
dHVybiB3cmFwVGVzdEl0ZXJhYmxlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RJdGVyYWJsZSog
Y29yZShXZWJLaXRET01UZXN0SXRlcmFibGUqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVl
c3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SXRlcmFibGUqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0SXRlcmFibGUq
IHdyYXBUZXN0SXRlcmFibGUoV2ViQ29yZTo6VGVzdEl0ZXJhYmxlKiBjb3JlT2JqZWN0KQotewot
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX0lURVJB
QkxFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9JVEVSQUJMRSwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SXRlcmFibGUsIHdlYmtpdF9kb21fdGVzdF9p
dGVyYWJsZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2l0ZXJhYmxlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRE
T01UZXN0SXRlcmFibGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX0lURVJBQkxFX0dF
VF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQo
cHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdEl0ZXJh
YmxlUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pdGVyYWJs
ZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVjdCog
d2Via2l0X2RvbV90ZXN0X2l0ZXJhYmxlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fdGVzdF9pdGVyYWJsZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0
RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9JVEVSQUJMRV9H
RVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXN0SXRlcmFibGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9pdGVyYWJsZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RJdGVyYWJsZUNs
YXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlKSk7Ci0g
ICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF9pdGVyYWJsZV9j
b25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0
X2l0ZXJhYmxlX2ZpbmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaXRl
cmFibGVfaW5pdChXZWJLaXRET01UZXN0SXRlcmFibGUqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0
RE9NVGVzdEl0ZXJhYmxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9JVEVSQUJMRV9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RJdGVyYWJs
ZVByaXZhdGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQwNzRmNTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oIgot
I2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9KU19CVUlMVElOX0NPTlNU
UlVDVE9SLCBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZSB7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4gY29yZU9iamVjdDsK
LX0gV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcioga2l0KFdlYkNv
cmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogb2JqKQotewotICAgIGlmICghb2JqKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6
Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9DT05T
VFJVQ1RPUihyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0SlNCdWlsdGluQ29uc3RydWN0b3Io
b2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBjb3JlKFdlYktp
dERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERP
TVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogd3JhcFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcihX
ZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNT
RVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9D
T05TVFJVQ1RPUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SlNCdWls
dGluQ29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9U
RVNUX0FUVFJJQlVURSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc19idWls
dGluX2NvbnN0cnVjdG9yX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRE
T01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNU
X0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAg
IHByaXYtPn5XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKCk7Ci0gICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBzZWxmID0gV0VC
S0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqZWN0KTsKLQotICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9URVNUX0FUVFJJQlVURToKLSAgICAgICAg
d2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Rlc3RfYXR0cmlidXRl
KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
c2VsZiA9IFdFQktJVF9ET01fVEVTVF9KU19CVUlMVElOX0NPTlNUUlVDVE9SKG9iamVjdCk7Ci0K
LSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfVEVTVF9BVFRSSUJVVEU6
Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9qc19i
dWlsdGluX2NvbnN0cnVjdG9yX2dldF90ZXN0X2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09i
amVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5f
Y29uc3RydWN0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTVRlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfSlNfQlVJ
TFRJTl9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVy
biBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2Nv
bnN0cnVjdG9yX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xh
c3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
aXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0
X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfY29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2ZpbmFsaXpl
OwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2pzX2J1
aWx0aW5fY29uc3RydWN0b3Jfc2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3Byb3Bl
cnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29i
amVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAgICJ0ZXN0LWF0dHJpYnV0ZSIsCi0gICAgICAgICAg
ICAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOnRlc3QtYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdib29sZWFuIFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjp0ZXN0LWF0dHJp
YnV0ZSIsCi0gICAgICAgICAgICBGQUxTRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKLQotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfanNfYnVpbHRpbl9j
b25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogcmVxdWVz
dCkKLXsKLSAgICBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUocmVx
dWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQ
cml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0
b3JfdGVzdF9mdW5jdGlvbihXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT50ZXN0RnVuY3Rpb24oKTsKLX0KLQotZ2Jvb2xlYW4g
d2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3Rlc3RfYXR0cmlidXRl
KFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2VsZiksIEZBTFNFKTsK
LSAgICBXZWJDb3JlOjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dGVzdEF0dHJpYnV0ZSgpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5f
Y29uc3RydWN0b3Jfc2V0X3Rlc3RfYXR0cmlidXRlKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvciogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19U
RVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Ioc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5z
ZXRUZXN0QXR0cmlidXRlKHZhbHVlKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWQ1MGM4Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaAor
KysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLSNkZWZp
bmUgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yX2gKLQotI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtp
dGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3JfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1Iob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJ
TFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1JfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9KU19CVUlMVElOX0NPTlNUUlVD
VE9SKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9URVNUX0pTX0JVSUxUSU5fQ09OU1RSVUNUT1IpKQotI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9KU19CVUlMVElO
X0NPTlNUUlVDVE9SKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0pTX0JVSUxUSU5fQ09OU1RS
VUNUT1JfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfSlNfQlVJTFRJTl9DT05TVFJVQ1RPUiwgV2ViS2l0RE9NVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
LX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ2xhc3Mgewot
ICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkg
R1R5cGUKLXdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90eXBlKHZv
aWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3Rl
c3RfZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3Rlc3RfZnVuY3Rpb24oV2ViS2l0
RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3RfanNfYnVpbHRpbl9jb25zdHJ1Y3Rvcl9nZXRfdGVzdF9hdHRyaWJ1dGU6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yCi0gKgotICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX2dldF90ZXN0
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9qc19idWlsdGluX2NvbnN0cnVjdG9yX3NldF90ZXN0X2F0
dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IK
LSAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X2pzX2J1aWx0aW5fY29uc3RydWN0b3Jf
c2V0X3Rlc3RfYXR0cmlidXRlKFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZDAzOWRhYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2
YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclBy
aXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRl
X2gKLQotI2luY2x1ZGUgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1XZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHdyYXBUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7Ci1X
ZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IqKTsKLVdlYkNvcmU6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29y
ZShXZWJLaXRET01UZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqKTsKLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZDRi
MDQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5oIgotCi0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIldlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oIgot
I2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVJfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9M
SVNUX0xJU1RFTkVSLCBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUp
Ci0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
aXZhdGUgewotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4g
Y29yZU9iamVjdDsKLX0gV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqIGtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogb2JqKQotewot
ICAgIGlmICghb2JqKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RF
U1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUihyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihvYmopOwotfQotCi1XZWJDb3JlOjpUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciogY29yZShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciog
cmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKLX0KLQotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIq
IHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciogY29yZU9iamVjdCkKLXsKLSAgICBBU1NFUlQoY29yZU9iamVjdCk7Ci0gICAg
cmV0dXJuIFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LCB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lciwgV0VCS0lUX0RPTV9U
WVBFX09CSkVDVCkKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xp
c3RfbGlzdGVuZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9N
RURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0KLSAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7Ci0KLSAg
ICBwcml2LT5+V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlKCk7Ci0g
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVu
ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIEdPYmplY3Qq
IHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2NvbnN0cnVjdG9yKEdU
eXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVj
dFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX3Bh
cmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
Y29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAgICBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9M
SVNURU5FUl9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcio+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVj
dDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlz
dGVuZXJfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNsYXNz
KiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
aXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0
X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfY29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2Zp
bmFsaXplOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlz
dF9saXN0ZW5lcl9pbml0KFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiByZXF1
ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSX0dFVF9QUklW
QVRFKHJlcXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcml2YXRlKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3N2M3ZjRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyX2gKLSNk
ZWZpbmUgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaAotCi0jaWZkZWYgV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiAgICAgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9nZXRfdHlwZSgpKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUihvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLCBXZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNU
X0xJU1RFTkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIsIFdlYktp
dERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX01FRElBX1FVRVJZ
X0xJU1RfTElTVEVORVIpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfTUVESUFfUVVFUllf
TElTVF9MSVNURU5FUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVJfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiwgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Ci19OwotCi1z
dHJ1Y3QgX1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2xhc3MgewotICAgIFdl
YktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUK
LXdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2dldF90eXBlKHZvaWQp
OwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuc3ltYm9scyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRl
MjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUyZTk3MjYxNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
clByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCi0j
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIqIHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciopOwotV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGtp
dChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciopOwotV2ViQ29yZTo6VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2IyYTM2My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNs
dWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlLmgiCi0j
aW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RF
U1RfTkFNRURfQ09OU1RSVUNUT1JfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
VGVzdE5hbWVkQ29uc3RydWN0b3I+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIG9iaikK
LXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIg
cmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RP
TV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3ROYW1l
ZENvbnN0cnVjdG9yKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBj
b3JlKFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIHJldHVy
biByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3Rvciogd3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6
OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciwgd2Via2l0X2Rv
bV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9HRVRfUFJJVkFURShvYmpl
Y3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJp
dmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1
Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yKEdUeXBlIHR5
cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFt
KiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3Bl
cnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7
Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROYW1lZENv
bnN0cnVjdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVj
dCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfbmFtZWRfY29uc3RydWN0b3JfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1
Y3RvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
clByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90
ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmluYWxpemU7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktp
dERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05T
VFJVQ1RPUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
c3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25z
dHJ1Y3Rvci5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iuc3ltYm9scwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5vZGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTU5NzQwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3ROb2RlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
LSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdE5vZGUuaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
IgotI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCi0jaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRE
T01UZXN0Tm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdE5vZGUqIGtpdChXZWJDb3JlOjpU
ZXN0Tm9kZSogb2JqKQotewotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfTk9ERShraXQoc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKLX0KLQotV2ViQ29yZTo6VGVzdE5vZGUq
IGNvcmUoV2ViS2l0RE9NVGVzdE5vZGUqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3ROb2RlKiB3cmFwVGVzdE5v
ZGUoV2ViQ29yZTo6VGVzdE5vZGUqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfTk9ERShnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX1RFU1RfTk9ERSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21fdGVzdF9ub2RlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQs
IFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6
RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Ci0gICAgaWYgKCFjb3JlRXZl
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROb2RlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7Ci0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmlu
ZGluZ3MoKmNvcmVFdmVudCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwotICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRl
c2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfYWRkX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0gICAgV2Vi
Q29yZTo6VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9k
ZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJldHVybiBX
ZWJDb3JlOjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0
YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vZGVfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCi17Ci0gICAgV2ViQ29yZTo6
VGVzdE5vZGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Tm9kZSo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwotICAgIHJldHVybiBXZWJDb3Jl
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJn
ZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9k
b21fdGVzdF9ub2RlX2Rpc3BhdGNoX2V2ZW50OwotICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9hZGRfZXZlbnRfbGlzdGVuZXI7Ci0gICAgaWZhY2Ut
PnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ub2RlX3JlbW92ZV9ldmVu
dF9saXN0ZW5lcjsKLX0KLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVGVzdE5v
ZGUsIHdlYmtpdF9kb21fdGVzdF9ub2RlLCBXRUJLSVRfRE9NX1RZUEVfTk9ERSwgR19JTVBMRU1F
TlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQpKQotCi1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9OQU1FLAot
fTsKLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCi17Ci0gICAgV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYgPSBXRUJLSVRfRE9N
X1RFU1RfTk9ERShvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2Fz
ZSBQUk9QX05BTUU6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub2RlX3NldF9uYW1lKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X25vZGVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2Vi
S2l0RE9NVGVzdE5vZGUqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfTk9ERShvYmplY3QpOwotCi0g
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9QX05BTUU6Ci0gICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9ub2RlX2dldF9uYW1lKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ub2RlX2Ns
YXNzX2luaXQoV2ViS2l0RE9NVGVzdE5vZGVDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
LSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9ub2RlX3Nl
dF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
dGVzdF9ub2RlX2dldF9wcm9wZXJ0eTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OQU1FLAotICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgIm5hbWUiLAotICAgICAgICAgICAg
IlRlc3ROb2RlOm5hbWUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb2Rl
Om5hbWUiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X25vZGVfaW5pdChXZWJL
aXRET01UZXN0Tm9kZSogcmVxdWVzdCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Ci19
Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShXZWJLaXRET01UZXN0Tm9k
ZSogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PREUoc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3ROb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9kZV9zZXRfbmFtZShX
ZWJLaXRET01UZXN0Tm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9OT0RFKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7Ci0gICAgaXRlbS0+c2V0TmFtZShjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3ROb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0Tm9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYThjZWQ2
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3ROb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0v
KgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3ROb2Rl
X2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE5vZGVfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01Ob2RlLmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVNUX05PREUgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X25vZGVfZ2V0X3R5cGUoKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX05PREUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9ERSwgV2ViS2l0
RE9NVGVzdE5vZGUpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfTk9ERV9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9OT0RFLCBXZWJLaXRET01UZXN0Tm9kZUNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RF
U1RfTk9ERShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9OT0RFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX05P
REVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfTk9ERSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT0RFX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01f
VFlQRV9URVNUX05PREUsIFdlYktpdERPTVRlc3ROb2RlQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3ROb2RlIHsKLSAgICBXZWJLaXRET01Ob2RlIHBhcmVudF9pbnN0YW5jZTsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdE5vZGVDbGFzcyB7Ci0gICAgV2ViS2l0RE9NTm9kZUNsYXNz
IHBhcmVudF9jbGFzczsKLX07Ci0KLVdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9kb21fdGVzdF9u
b2RlX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ub2RlX2dldF9u
YW1lOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICogUmV0dXJuczogQSAj
Z2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIq
Ci13ZWJraXRfZG9tX3Rlc3Rfbm9kZV9nZXRfbmFtZShXZWJLaXRET01UZXN0Tm9kZSogc2VsZik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0X25hbWU6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE5vZGUKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X25vZGVfc2V0
X25hbWUoV2ViS2l0RE9NVGVzdE5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLUdf
RU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNl
bmRpZiAvKiBXZWJLaXRET01UZXN0Tm9kZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZS5zeW1ib2xz
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5vZGUuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4u
MDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjJkMDcwLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCww
IEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuaCIKLQotI2luY2x1ZGUg
IkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
IgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VU
RjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklTVElDX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfTk9OREVURVJNSU5JU1RJQywgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNQcml2
YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNQcml2
YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWM+IGNvcmVPYmpl
Y3Q7Ci19IFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBraXQoV2ViQ29yZTo6
VGVzdE5vbmRldGVybWluaXN0aWMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmop
KQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUMocmV0KTsK
LQotICAgIHJldHVybiB3cmFwVGVzdE5vbmRldGVybWluaXN0aWMob2JqKTsKLX0KLQotV2ViQ29y
ZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGNvcmUoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiB3cmFwVGVz
dE5vbmRldGVybWluaXN0aWMoV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGNvcmVPYmpl
Y3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RF
U1RfTk9OREVURVJNSU5JU1RJQyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9O
REVURVJNSU5JU1RJQywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYywgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWMsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX05PTkRFVEVS
TUlOSVNUSUNfUkVBRE9OTFlfQVRUUiwKLSAgICBQUk9QX05PTkRFVEVSTUlOSVNUSUNfV1JJVEVB
QkxFX0FUVFIsCi0gICAgUFJPUF9OT05ERVRFUk1JTklTVElDX0VYQ0VQVElPTl9BVFRSLAotICAg
IFBST1BfTk9OREVURVJNSU5JU1RJQ19HRVRURVJfRVhDRVBUSU9OX0FUVFIsCi0gICAgUFJPUF9O
T05ERVRFUk1JTklTVElDX1NFVFRFUl9FWENFUFRJT05fQVRUUiwKLX07Ci0KLXN0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKLXsKLSAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1RFU1RfTk9OREVURVJNSU5JU1RJQ19HRVRfUFJJVkFURShvYmplY3QpOwotCi0g
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSgpOwot
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewot
ICAgIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmID0gV0VCS0lUX0RPTV9URVNU
X05PTkRFVEVSTUlOSVNUSUMob2JqZWN0KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewot
ICAgIGNhc2UgUFJPUF9OT05ERVRFUk1JTklTVElDX1dSSVRFQUJMRV9BVFRSOgotICAgICAgICB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0
ZWFibGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfRVhDRVBUSU9OX0FUVFI6Ci0gICAg
ICAgIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGlj
X2V4Y2VwdGlvbl9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19HRVRURVJfRVhDRVBUSU9O
X0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25k
ZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25fYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNU
SUNfU0VUVEVSX0VYQ0VQVElPTl9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0
ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHIoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiA9
IFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklTVElDKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19SRUFET05MWV9B
VFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfbm9u
ZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19yZWFkb25seV9hdHRyKHNlbGYpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfV1JJVEVBQkxF
X0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3dyaXRlYWJsZV9hdHRyKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNUSUNfRVhD
RVBUSU9OX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9h
dHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PTkRFVEVSTUlOSVNU
SUNfR0VUVEVSX0VYQ0VQVElPTl9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3Rp
Y19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoc2VsZiwgbnVsbHB0cikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfTk9OREVURVJNSU5JU1RJQ19TRVRURVJfRVhDRVBUSU9OX0FUVFI6Ci0g
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9ub25kZXRl
cm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihzZWxm
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X25vbmRl
dGVybWluaXN0aWNfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17
Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X25v
bmRldGVybWluaXN0aWNfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTVRl
c3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9OT05ERVRF
Uk1JTklTVElDX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKj4oV0VCS0lUX0RPTV9PQkpF
Q1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0Owot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19jbGFzc19p
bml0KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsK
LSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZSkpOwotICAgIGdvYmplY3RDbGFz
cy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19jb25zdHJ1
Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X25vbmRl
dGVybWluaXN0aWNfZmluYWxpemU7Ci0gICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfcHJvcGVydHk7Ci0gICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19n
ZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAg
ICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfTk9OREVURVJNSU5JU1RJQ19SRUFET05M
WV9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJub25kZXRl
cm1pbmlzdGljLXJlYWRvbmx5LWF0dHIiLAotICAgICAgICAgICAgIlRlc3ROb25kZXRlcm1pbmlz
dGljOm5vbmRldGVybWluaXN0aWMtcmVhZG9ubHktYXR0ciIsCi0gICAgICAgICAgICAicmVhZC1v
bmx5IGdsb25nIFRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtcmVhZG9ubHkt
YXR0ciIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05PTkRFVEVSTUlO
SVNUSUNfV1JJVEVBQkxFX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAibm9uZGV0ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0gICAgICAgICAgICAi
VGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0g
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE5vbmRldGVybWluaXN0aWM6bm9uZGV0
ZXJtaW5pc3RpYy13cml0ZWFibGUtYXR0ciIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OT05ERVRFUk1J
TklTVElDX0VYQ0VQVElPTl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAg
ICAgICAgICAgIm5vbmRldGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAotICAgICAgICAgICAg
IlRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAot
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRl
dGVybWluaXN0aWMtZXhjZXB0aW9uLWF0dHIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfTk9OREVURVJN
SU5JU1RJQ19HRVRURVJfRVhDRVBUSU9OX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCi0gICAgICAgICAgICAibm9uZGV0ZXJtaW5pc3RpYy1nZXR0ZXItZXhjZXB0aW9uLWF0dHIi
LAotICAgICAgICAgICAgIlRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWluaXN0aWMtZ2V0
dGVyLWV4Y2VwdGlvbi1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0
Tm9uZGV0ZXJtaW5pc3RpYzpub25kZXRlcm1pbmlzdGljLWdldHRlci1leGNlcHRpb24tYXR0ciIs
Ci0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
LQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RD
bGFzcywKLSAgICAgICAgUFJPUF9OT05ERVRFUk1JTklTVElDX1NFVFRFUl9FWENFUFRJT05fQVRU
UiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJub25kZXRlcm1p
bmlzdGljLXNldHRlci1leGNlcHRpb24tYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE5vbmRldGVy
bWluaXN0aWM6bm9uZGV0ZXJtaW5pc3RpYy1zZXR0ZXItZXhjZXB0aW9uLWF0dHIiLAotICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3ROb25kZXRlcm1pbmlzdGljOm5vbmRldGVybWlu
aXN0aWMtc2V0dGVyLWV4Y2VwdGlvbi1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2luaXQoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX05PTkRFVEVSTUlOSVNUSUNfR0VUX1BSSVZBVEUocmVx
dWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZh
dGUoKTsKLX0KLQotZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfbm9u
ZGV0ZXJtaW5pc3RpY196ZXJvX2FyZ19mdW5jdGlvbihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlO
SVNUSUMoc2VsZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5u
b25kZXRlcm1pbmlzdGljWmVyb0FyZ0Z1bmN0aW9uKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWlu
aXN0aWNfcmVhZG9ubHlfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm5vbmRldGVybWluaXN0aWNSZWFk
b25seUF0dHIoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nY2hhciogd2Via2l0X2RvbV90
ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHIo
V2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9OT05ERVRFUk1JTklTVElDKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ub25kZXRlcm1pbmlzdGljV3Jp
dGVhYmxlQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX3dyaXRlYWJsZV9hdHRy
KFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZikpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1p
bmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRO
b25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFy
KiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19l
eGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9y
KiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT05ERVRFUk1JTklT
VElDKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJv
ciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bm9uZGV0ZXJtaW5pc3RpY0V4
Y2VwdGlvbkF0dHIoZWMpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9h
dHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRl
cm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5z
ZXROb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdj
aGFyKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3Rp
Y19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNl
bGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9O
REVURVJNSU5JU1RJQyhzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5vbmRldGVy
bWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5p
c3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
Tk9OREVURVJNSU5JU1RJQyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE5vbmRldGVybWluaXN0aWMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOwotICAgIGl0ZW0tPnNldE5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRl
cm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJL
aXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RO
b25kZXRlcm1pbmlzdGljKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5vbmRldGVybWluaXN0aWNTZXR0ZXJF
eGNlcHRpb25BdHRyKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWluaXN0aWNfc2V0dGVyX2V4Y2Vw
dGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9O
T05ERVRFUk1JTklTVElDKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKLSAgICBXZWJDb3JlOjpUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0Tm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWY4MjMxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRl
cm1pbmlzdGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIgKzAsMCBAQAotLyoKLSAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y19oCi0jZGVmaW5lIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljX2gKLQotI2lmZGVmIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9URVNUX05PTkRFVEVSTUlOSVNUSUMgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9URVNUX05PTkRFVEVSTUlOSVNUSUMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9OREVURVJNSU5JU1RJQywg
V2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1Rf
Tk9OREVURVJNSU5JU1RJQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT05ERVRFUk1JTklTVElDLCBXZWJLaXRE
T01UZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1Rf
Tk9OREVURVJNSU5JU1RJQyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT05ERVRFUk1JTklTVElDKSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV9JU19URVNUX05PTkRFVEVSTUlOSVNUSUNfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9OREVURVJN
SU5JU1RJQykpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9OT05ERVRFUk1JTklTVElDX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01f
VFlQRV9URVNUX05PTkRFVEVSTUlOSVNUSUMsIFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
Q2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljIHsKLSAgICBX
ZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpY0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0
ZXJtaW5pc3RpY19nZXRfdHlwZSh2b2lkKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfbm9u
ZGV0ZXJtaW5pc3RpY19ub25kZXRlcm1pbmlzdGljX3plcm9fYXJnX2Z1bmN0aW9uOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCi0gKgotICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2Jv
b2xlYW4KLXdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRldGVybWluaXN0aWNf
emVyb19hcmdfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1p
bmlzdGljX3JlYWRvbmx5X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVy
bWluaXN0aWMKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWlu
aXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfcmVhZG9ubHlfYXR0cihXZWJLaXRET01UZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X25vbmRldGVy
bWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hh
cgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3dyaXRl
YWJsZV9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193
cml0ZWFibGVfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
YwotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9u
ZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yyogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
bm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICogQGVycm9yOiAjR0Vy
cm9yCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3Rp
Y19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGljX2V4Y2VwdGlvbl9hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljCi0gKiBAdmFsdWU6
IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX3NldF9ub25kZXRlcm1pbmlzdGlj
X2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljKiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlz
dGljX2dldF9ub25kZXRlcm1pbmlzdGljX2dldHRlcl9leGNlcHRpb25fYXR0cjoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICogQGVycm9yOiAjR0Vycm9yCi0g
KgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRf
bm9uZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRl
dGVybWluaXN0aWMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19nZXR0ZXJfZXhjZXB0
aW9uX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAq
IEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVy
bWluaXN0aWNfZ2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlz
dGljKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9ub25kZXRlcm1pbmlzdGljX2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25f
YXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYwotICoKLSAq
IFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRl
dGVybWluaXN0aWNfc2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1p
bmlzdGljKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3Rp
Y19zZXRfbm9uZGV0ZXJtaW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAq
IEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJt
aW5pc3RpY19zZXR0ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0
aWMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOwotCi1HX0VORF9E
RUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYg
LyogV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRl
dGVybWluaXN0aWMuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljLnN5bWJvbHMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjk0ZTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5vbmRldGVybWlu
aXN0aWMuc3ltYm9scworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWdib29sZWFuIHdl
YmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGljX25vbmRldGVybWluaXN0aWNfemVyb19hcmdf
ZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQotZ2xvbmcgd2Via2l0X2Rv
bV90ZXN0X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfcmVhZG9ubHlfYXR0
cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0
X25vbmRldGVybWluaXN0aWNfZ2V0X25vbmRldGVybWluaXN0aWNfd3JpdGVhYmxlX2F0dHIoV2Vi
S2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0
ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY193cml0ZWFibGVfYXR0cihXZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rl
c3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0cihX
ZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIEdFcnJvcioqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19zZXRfbm9uZGV0ZXJtaW5pc3RpY19leGNlcHRpb25fYXR0
cihXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3
ZWJraXRfZG9tX3Rlc3Rfbm9uZGV0ZXJtaW5pc3RpY19nZXRfbm9uZGV0ZXJtaW5pc3RpY19nZXR0
ZXJfZXhjZXB0aW9uX2F0dHIoV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMqLCBHRXJyb3Iq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X25vbmRldGVybWluaXN0aWNfc2V0X25vbmRldGVybWlu
aXN0aWNfZ2V0dGVyX2V4Y2VwdGlvbl9hdHRyKFdlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGlj
KiwgY29uc3QgZ2NoYXIqKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGlj
X2dldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpYyopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9ub25kZXRlcm1pbmlzdGlj
X3NldF9ub25kZXRlcm1pbmlzdGljX3NldHRlcl9leGNlcHRpb25fYXR0cihXZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpYyosIGNvbnN0IGdjaGFyKiwgR0Vycm9yKiopCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25kZXRlcm1pbmlzdGljUHJpdmF0ZS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2ViZTYxLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROb25k
ZXRlcm1pbmlzdGljUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoK
LSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
Ci0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRET01UZXN0Tm9uZGV0
ZXJtaW5pc3RpY1ByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y1ByaXZhdGVfaAotCi0jaW5jbHVkZSAiVGVzdE5vbmRldGVybWluaXN0aWMuaCIKLSNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdE5vbmRldGVybWluaXN0aWMuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Tm9uZGV0ZXJtaW5pc3RpYyogd3JhcFRlc3ROb25kZXRl
cm1pbmlzdGljKFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKik7Ci1XZWJLaXRET01UZXN0
Tm9uZGV0ZXJtaW5pc3RpYyoga2l0KFdlYkNvcmU6OlRlc3ROb25kZXRlcm1pbmlzdGljKik7Ci1X
ZWJDb3JlOjpUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY29yZShXZWJLaXRET01UZXN0Tm9uZGV0ZXJt
aW5pc3RpYyopOwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvKiBXZWJLaXRET01U
ZXN0Tm9uZGV0ZXJtaW5pc3RpY1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2N2U4ZC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0T2JqLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMTEgKzAsMCBAQAotLyoKLSAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YktpdERPTVRlc3RPYmouaCIKLQotI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgot
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTURp
Y3Rpb25hcnlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9pbnRQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdERpY3Rpb25hcnlQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdEVudW1UeXBlUHJpdmF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3ROb2RlUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVRlc3RPYmpQcml2YXRlLmgiCi0jaW5jbHVkZSAiV2Vi
S2l0RE9NWFBhdGhOU1Jlc29sdmVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVy
dFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShvYmop
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX09C
SiwgV2ViS2l0RE9NVGVzdE9ialByaXZhdGUpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRET01U
ZXN0T2JqUHJpdmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGNvcmVPYmplY3Q7
Ci19IFdlYktpdERPTVRlc3RPYmpQcml2YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2Vi
S2l0RE9NVGVzdE9iaioga2l0KFdlYkNvcmU6OlRlc3RPYmoqIG9iaikKLXsKLSAgICBpZiAoIW9i
aikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0
Q2FjaGU6OmdldChvYmopKQotICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09CSihyZXQp
OwotCi0gICAgcmV0dXJuIHdyYXBUZXN0T2JqKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RPYmoq
IGNvcmUoV2ViS2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPYmoqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3cmFwVGVzdE9iaihX
ZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsK
LSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9U
WVBFX1RFU1RfT0JKLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RPYmos
IHdlYmtpdF9kb21fdGVzdF9vYmosIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewot
ICAgIFBST1BfMCwKLSAgICBQUk9QX1JFQURfT05MWV9MT05HX0FUVFIsCi0gICAgUFJPUF9SRUFE
X09OTFlfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKLSAg
ICBQUk9QX0JZVEVfQVRUUiwKLSAgICBQUk9QX09DVEVUX0FUVFIsCi0gICAgUFJPUF9TSE9SVF9B
VFRSLAotICAgIFBST1BfQ0xBTVBFRF9TSE9SVF9BVFRSLAotICAgIFBST1BfRU5GT1JDRV9SQU5H
RV9TSE9SVF9BVFRSLAotICAgIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUiwKLSAgICBQUk9QX0xP
TkdfQVRUUiwKLSAgICBQUk9QX0xPTkdfTE9OR19BVFRSLAotICAgIFBST1BfVU5TSUdORURfTE9O
R19MT05HX0FUVFIsCi0gICAgUFJPUF9TVFJJTkdfQVRUUiwKLSAgICBQUk9QX1RFU1RfT0JKX0FU
VFIsCi0gICAgUFJPUF9URVNUX05VTExBQkxFX09CSl9BVFRSLAotICAgIFBST1BfTEVOSUVOVF9U
RVNUX09CSl9BVFRSLAotICAgIFBST1BfVU5GT1JHRUFCTEVfQVRUUiwKLSAgICBQUk9QX1NUUklO
R19BVFRSX1RSRUFUSU5HX05VTExfQVNfRU1QVFlfU1RSSU5HLAotICAgIFBST1BfWE1MX09CSl9B
VFRSLAotICAgIFBST1BfQ1JFQVRFLAotICAgIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSLAot
ICAgIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfVU5T
SUdORURfSU5URUdSQUxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFIsCi0g
ICAgUFJPUF9SRUZMRUNURURfVVJMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FU
VFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9S
RUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01f
VVJMX0FUVFIsCi0gICAgUFJPUF9FTkFCTEVEX0FUX1JVTlRJTUVfQVRUUklCVVRFLAotICAgIFBS
T1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVS
X0VYQ0VQVElPTl9XSVRIX01FU1NBR0UsCi0gICAgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQ
VElPTiwKLSAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OX1dJVEhfTUVTU0FHRSwK
LSAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX1NU
UklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX1NU
QVRFX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfQ0FMTF9XSVRIX0FORF9TRVRURVJfQ0FMTF9X
SVRIX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FU
VFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCi0g
ICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRSSUJVVEVfUkFJU0VTLAot
ICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9B
VFRSSUJVVEUsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NS
SVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJ
T05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhfU1BBQ0VTX0FUVFJJQlVURSwKLSAgICBQ
Uk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEUsCi0gICAg
UFJPUF9DT05ESVRJT05BTF9BVFRSMSwKLSAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIyLAotICAg
IFBST1BfQ09ORElUSU9OQUxfQVRUUjMsCi0gICAgUFJPUF9BTllfQVRUUklCVVRFLAotICAgIFBS
T1BfQ09OVEVOVF9ET0NVTUVOVCwKLSAgICBQUk9QX01VVEFCTEVfUE9JTlQsCi0gICAgUFJPUF9J
TU1VVEFCTEVfUE9JTlQsCi0gICAgUFJPUF9TVFJBV0JFUlJZLAotICAgIFBST1BfREVTQ1JJUFRJ
T04sCi0gICAgUFJPUF9JRCwKLSAgICBQUk9QX0hBU0gsCi0gICAgUFJPUF9SRVBMQUNFQUJMRV9B
VFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9ET1VCTEVfQVRUUklCVVRFLAotICAgIFBST1Bf
TlVMTEFCTEVfTE9OR19BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9CT09MRUFOX0FUVFJJ
QlVURSwKLSAgICBQUk9QX05VTExBQkxFX1NUUklOR19BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxM
QUJMRV9MT05HX1NFVFRBQkxFX0FUVFJJQlVURSwKLSAgICBQUk9QX05VTExBQkxFX1NUUklOR19T
RVRUQUJMRV9BVFRSSUJVVEUsCi0gICAgUFJPUF9OVUxMQUJMRV9TVFJJTkdfVkFMVUUsCi0gICAg
UFJPUF9BVFRSSUJVVEUsCi0gICAgUFJPUF9QVVRfRk9SV0FSRFNfQVRUUklCVVRFLAotICAgIFBS
T1BfUFVUX0ZPUldBUkRTX05VTExBQkxFX0FUVFJJQlVURSwKLSAgICBQUk9QX1NUUklOR0lGSUVS
X0FUVFJJQlVURSwKLX07Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RPYmpQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAg
cHJpdi0+fldlYktpdERPTVRlc3RPYmpQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQotewotICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfT0JK
KG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfQllU
RV9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9ieXRlX2F0dHIoc2VsZiwg
Z192YWx1ZV9nZXRfaW50OCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
T0NURVRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfb2N0ZXRfYXR0cihz
ZWxmLCBnX3ZhbHVlX2dldF91aW50OCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFBST1BfU0hPUlRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRf
YXR0cihzZWxmLCBnX3ZhbHVlX2dldF9pbnQodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0NMQU1QRURfU0hPUlRfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfY2xhbXBlZF9zaG9ydF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRU5GT1JDRV9SQU5HRV9TSE9SVF9BVFRSOgot
ICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHIo
c2VsZiwgZ192YWx1ZV9nZXRfaW50KHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF91bnNpZ25lZF9zaG9ydF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfQVRUUjoKLSAgICAgICAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfbG9uZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgotICAgICAgICB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9p
bnQ2NCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVU5TSUdORURfTE9O
R19MT05HX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xv
bmdfbG9uZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1ZSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3N0cmluZ19hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfVFJFQVRJTkdfTlVMTF9B
U19FTVBUWV9TVFJJTkc6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19h
dHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1JFQVRFOgotICAgICAg
ICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklO
R19BVFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5n
X2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoKLSAgICAgICAgd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRf
bG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VO
U0lHTkVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Jl
ZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZh
bHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9B
VFRSOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9h
dHRyKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX3VybF9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRS
OgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFI6Ci0gICAgICAgIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihzZWxmLCBnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZM
RUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RP
TV9VUkxfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1
c3RvbV91cmxfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VOQUJMRURfQVRfUlVOVElNRV9BVFRSSUJVVEU6Ci0gICAg
ICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2VsZiwgZ192YWx1ZV9nZXRf
bG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dF
VFRFUl9FWENFUFRJT05fV0lUSF9NRVNTQUdFOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2Uoc2VsZiwgZ192YWx1
ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9X
SVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0
dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJf
RVhDRVBUSU9OX1dJVEhfTUVTU0FHRToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
YXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKHNlbGYsIGdfdmFsdWVfZ2V0
X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRS
X1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lU
SF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJp
bmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSwgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05ESVRJT05B
TF9BVFRSMToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0
cjEoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjI6Ci0gICAgICAgIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2NvbmRpdGlvbmFsX2F0dHIyKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIzOgotICAgICAgICB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyhzZWxmLCBnX3ZhbHVlX2dl
dF9sb25nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJBV0JFUlJZ
OgotICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJhd2JlcnJ5KHNlbGYsIGdfdmFs
dWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lEOgot
ICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChzZWxmLCBnX3ZhbHVlX2dldF9sb25n
KHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVUxMQUJMRV9MT05HX1NF
VFRBQkxFX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFi
bGVfbG9uZ19zZXR0YWJsZV9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfU1RSSU5HX1NFVFRBQkxF
X0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVfc3Ry
aW5nX3NldHRhYmxlX2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxFX1NUUklOR19WQUxVRToKLSAg
ICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVfc3RyaW5nX3ZhbHVlKHNlbGYs
IGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X1NUUklOR0lGSUVSX0FUVFJJQlVURToKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c3RyaW5naWZpZXJfYXR0cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRET01UZXN0T2JqKiBzZWxmID0gV0VCS0lUX0RP
TV9URVNUX09CSihvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2Fz
ZSBQUk9QX1JFQURfT05MWV9MT05HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHIoc2VsZikpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSOgotICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWFkX29ubHlfc3RyaW5nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfUkVBRF9PTkxZX1RFU1RfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoc2Vs
ZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQllURV9BVFRSOgotICAgICAgICBn
X3ZhbHVlX3NldF9pbnQ4KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9ieXRlX2F0dHIo
c2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfT0NURVRfQVRUUjoKLSAgICAg
ICAgZ192YWx1ZV9zZXRfdWludDgodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X29jdGV0
X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoK
LSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
aG9ydF9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMQU1QRURf
U0hPUlRfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9jbGFtcGVkX3Nob3J0X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfRU5GT1JDRV9SQU5HRV9TSE9SVF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Nl
dF9pbnQodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2VuZm9yY2VfcmFuZ2Vfc2hvcnRf
YXR0cihzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9TSE9S
VF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0xPTkdfQVRUUjoKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHIoc2VsZikpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5z
aWduZWRfbG9uZ19sb25nX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfU1RSSU5HX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX1RFU1RfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpfYXR0cihzZWxmKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9URVNUX05VTExBQkxFX09CSl9BVFRSOgotICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Rlc3Rf
bnVsbGFibGVfb2JqX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
TEVOSUVOVF9URVNUX09CSl9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0cihzZWxmKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VTkZPUkdFQUJMRV9BVFRSOgotICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bmZvcmdl
YWJsZV9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19B
VFRSX1RSRUFUSU5HX05VTExfQVNfRU1QVFlfU1RSSU5HOgotICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGlu
Z19udWxsX2FzX2VtcHR5X3N0cmluZyhzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9YTUxfT0JKX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX0NSRUFURToKLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKLSAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmlu
Z19hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9J
TlRFR1JBTF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihzZWxmKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUjoKLSAg
ICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Jl
ZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFu
X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VS
TF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgotICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0
dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RP
TV9JTlRFR1JBTF9BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoc2VsZikpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9CT09MRUFOX0FU
VFI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFI6Ci0gICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3Rl
ZF9jdXN0b21fdXJsX2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
RU5BQkxFRF9BVF9SVU5USU1FX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJp
YnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfR0VU
VEVSX0VYQ0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2VsZiwgbnVsbHB0cikp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJ
T05fV0lUSF9NRVNTQUdFOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2Uo
c2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9F
WENFUFRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OX1dJVEhfTUVTU0FH
RToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElP
TjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIG51bGxwdHIpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VY
Q0VQVElPTjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToK
LSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX1dJVEhfQ0FMTF9XSVRIX0FORF9TRVRURVJfQ0FMTF9XSVRIX0FUVFJJQlVURToK
LSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9jYWxsX3dpdGhfYW5kX3NldHRlcl9jYWxsX3dpdGhfYXR0cmlidXRlKHNlbGYpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhU
X0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUoc2Vs
ZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRU
UklCVVRFX1JBSVNFUzoKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKHNlbGYs
IG51bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VY
RUNVVElPTl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVM6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9u
X2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhzZWxmLCBudWxscHRyKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBU
X1NUQVRFX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2Ny
aXB0X3N0YXRlX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJP
UF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVU
RV9SQUlTRVM6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0
ZV9hdHRyaWJ1dGVfcmFpc2VzKHNlbGYsIG51bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVf
V0lUSF9TUEFDRVNfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGVfd2l0aF9zcGFjZXNfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19B
VFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfYXJndW1lbnRzX2FuZF9jYWxsX3N0YWNrX2F0dHJpYnV0
ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRS
MToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfY29uZGl0aW9uYWxfYXR0cjEoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBS
T1BfQ09ORElUSU9OQUxfQVRUUjI6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIyKHNlbGYpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIzOgotICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRy
MyhzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BTllfQVRUUklCVVRFOgot
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2FueV9hdHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09O
VEVOVF9ET0NVTUVOVDoKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KHNlbGYpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX01VVEFCTEVfUE9JTlQ6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbXV0YWJsZV9wb2ludChzZWxmKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTU1VVEFCTEVfUE9JTlQ6Ci0gICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW1tdXRhYmxl
X3BvaW50KHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUkFXQkVSUlk6
Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3N0cmF3YmVycnkoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVTQ1JJ
UFRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2Rlc2NyaXB0aW9uKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9Q
X0lEOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9pZChzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9IQVNIOgotICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9o
YXNoKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFUExBQ0VBQkxFX0FU
VFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBQUk9QX05VTExBQkxFX0RPVUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVf
c2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfZG91Ymxl
X2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVUxMQUJM
RV9MT05HX0FUVFJJQlVURToKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfbG9uZ19hdHRyaWJ1dGUoc2VsZikpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfQk9PTEVBTl9BVFRSSUJVVEU6Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251
bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBQUk9QX05VTExBQkxFX1NUUklOR19BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19hdHRy
aWJ1dGUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfTE9O
R19TRVRUQUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKHNl
bGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTExBQkxFX1NUUklOR19TRVRU
QUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19zZXR0YWJsZV9hdHRyaWJ1dGUoc2Vs
ZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVMTEFCTEVfU1RSSU5HX1ZBTFVF
OgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoc2VsZiwgbnVsbHB0cikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFBST1BfQVRUUklCVVRFOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyaWJ1dGUoc2VsZikpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfUFVUX0ZPUldBUkRTX0FUVFJJQlVURToKLSAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2Fy
ZHNfYXR0cmlidXRlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BVVF9G
T1JXQVJEU19OVUxMQUJMRV9BVFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJp
YnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJJTkdJRklFUl9B
VFRSSUJVVEU6Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3N0cmluZ2lmaWVyX2F0dHJpYnV0ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RvcihHVHlwZSB0
eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJh
bSogY29uc3RydWN0UHJvcGVydGllcykKLXsKLSAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5
cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7Ci0KLSAg
ICBXZWJLaXRET01UZXN0T2JqUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PQkpfR0VU
X1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdE9iaio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwot
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBv
YmplY3QpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9jbGFzc19pbml0KFdlYktpdERPTVRlc3RPYmpDbGFzcyogcmVxdWVzdENsYXNz
KQotewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVx
dWVzdENsYXNzKTsKLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBz
aXplb2YoV2ViS2l0RE9NVGVzdE9ialByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X29ial9maW5hbGl6ZTsKLSAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5Owot
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAg
ICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVBRF9PTkxZX0xPTkdfQVRUUiwKLSAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAgICAgICAicmVhZC1vbmx5LWxvbmctYXR0ciIs
Ci0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktbG9uZy1hdHRyIiwKLSAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgVGVzdE9iajpyZWFkLW9ubHktbG9uZy1hdHRyIiwKLSAgICAgICAg
ICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAg
ICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJlYWQtb25seS1zdHJpbmct
YXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktc3RyaW5nLWF0dHIiLAotICAg
ICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdE9iajpyZWFkLW9ubHktc3RyaW5nLWF0dHIi
LAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
LQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RD
bGFzcywKLSAgICAgICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKLSAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJyZWFkLW9ubHktdGVzdC1vYmotYXR0ciIs
Ci0gICAgICAgICAgICAiVGVzdE9iajpyZWFkLW9ubHktdGVzdC1vYmotYXR0ciIsCi0gICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRlc3RPYmoqIFRlc3RPYmo6cmVhZC1vbmx5LXRlc3Qt
b2JqLWF0dHIiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfQllURV9B
VFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfaW50OCgKLSAgICAgICAgICAgICJieXRlLWF0dHIi
LAotICAgICAgICAgICAgIlRlc3RPYmo6Ynl0ZS1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdpbnQ4IFRlc3RPYmo6Ynl0ZS1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOSU5UOCwgR19N
QVhJTlQ4LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAot
ICAgICAgICBQUk9QX09DVEVUX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY191aW50OCgKLSAg
ICAgICAgICAgICJvY3RldC1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm9jdGV0LWF0dHIi
LAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3VpbnQ4IFRlc3RPYmo6b2N0ZXQtYXR0ciIsCi0g
ICAgICAgICAgICAwLCBHX01BWFVJTlQ4LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAg
ICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NIT1JUX0FUVFIsCi0gICAgICAgIGdfcGFy
YW1fc3BlY19pbnQoCi0gICAgICAgICAgICAic2hvcnQtYXR0ciIsCi0gICAgICAgICAgICAiVGVz
dE9iajpzaG9ydC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdzaG9ydCBUZXN0T2Jq
OnNob3J0LWF0dHIiLAotICAgICAgICAgICAgR19NSU5JTlQsIEdfTUFYSU5ULCAwLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NMQU1Q
RURfU0hPUlRfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKLSAgICAgICAgICAgICJj
bGFtcGVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6Y2xhbXBlZC1zaG9ydC1h
dHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdzaG9ydCBUZXN0T2JqOmNsYW1wZWQtc2hv
cnQtYXR0ciIsCi0gICAgICAgICAgICBHX01JTklOVCwgR19NQVhJTlQsIDAsCi0gICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfRU5GT1JDRV9S
QU5HRV9TSE9SVF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAotICAgICAgICAgICAg
ImVuZm9yY2UtcmFuZ2Utc2hvcnQtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajplbmZvcmNl
LXJhbmdlLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Nob3J0IFRlc3RP
Ymo6ZW5mb3JjZS1yYW5nZS1zaG9ydC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOSU5ULCBHX01B
WElOVCwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAg
ICAgICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfdWlu
dCgKLSAgICAgICAgICAgICJ1bnNpZ25lZC1zaG9ydC1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0
T2JqOnVuc2lnbmVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3VzaG9y
dCBUZXN0T2JqOnVuc2lnbmVkLXNob3J0LWF0dHIiLAotICAgICAgICAgICAgMCwgR19NQVhVSU5U
LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0xPTkdfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAgICAg
ICAibG9uZy1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOmxvbmctYXR0ciIsCi0gICAgICAg
ICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmxvbmctYXR0ciIsCi0gICAgICAgICAgICBH
X01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdv
YmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX2ludDY0KAotICAgICAgICAgICAgImxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAg
ICJUZXN0T2JqOmxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdpbnQ2
NCBUZXN0T2JqOmxvbmctbG9uZy1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOSU5UNjQsIEdfTUFY
SU5UNjQsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0g
ICAgICAgIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y191aW50NjQoCi0gICAgICAgICAgICAidW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6dW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ3VpbnQ2NCBUZXN0T2JqOnVuc2lnbmVkLWxvbmctbG9uZy1hdHRyIiwKLSAgICAg
ICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1NUUklOR19BVFRSLAotICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICJU
ZXN0T2JqOnN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0
T2JqOnN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
LSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfT0JKX0FUVFIsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAidGVzdC1vYmotYXR0ciIsCi0g
ICAgICAgICAgICAiVGVzdE9iajp0ZXN0LW9iai1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp0ZXN0LW9iai1hdHRyIiwKLSAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1RFU1RfTlVMTEFCTEVfT0JKX0FUVFIsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAidGVzdC1udWxsYWJsZS1vYmot
YXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajp0ZXN0LW51bGxhYmxlLW9iai1hdHRyIiwKLSAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp0ZXN0LW51bGxh
YmxlLW9iai1hdHRyIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0xF
TklFTlRfVEVTVF9PQkpfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAg
ICAgICAgICJsZW5pZW50LXRlc3Qtb2JqLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6bGVu
aWVudC10ZXN0LW9iai1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVz
dE9iaiogVGVzdE9iajpsZW5pZW50LXRlc3Qtb2JqLWF0dHIiLAotICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0
Q2xhc3MsCi0gICAgICAgIFBST1BfVU5GT1JHRUFCTEVfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKLSAgICAgICAgICAgICJ1bmZvcmdlYWJsZS1hdHRyIiwKLSAgICAgICAgICAg
ICJUZXN0T2JqOnVuZm9yZ2VhYmxlLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hh
ciogVGVzdE9iajp1bmZvcmdlYWJsZS1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfU1RSSU5HX0FU
VFJfVFJFQVRJTkdfTlVMTF9BU19FTVBUWV9TVFJJTkcsCi0gICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCi0gICAgICAgICAgICAic3RyaW5nLWF0dHItdHJlYXRpbmctbnVsbC1hcy1lbXB0eS1z
dHJpbmciLAotICAgICAgICAgICAgIlRlc3RPYmo6c3RyaW5nLWF0dHItdHJlYXRpbmctbnVsbC1h
cy1lbXB0eS1zdHJpbmciLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6
c3RyaW5nLWF0dHItdHJlYXRpbmctbnVsbC1hcy1lbXB0eS1zdHJpbmciLAotICAgICAgICAgICAg
IiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfWE1MX09CSl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAg
ICAgICAgInhtbC1vYmotYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajp4bWwtb2JqLWF0dHIi
LAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOnhtbC1v
YmotYXR0ciIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PQkosCi0gICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9DUkVBVEUs
Ci0gICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAotICAgICAgICAgICAgImNyZWF0ZSIsCi0g
ICAgICAgICAgICAiVGVzdE9iajpjcmVhdGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jv
b2xlYW4gVGVzdE9iajpjcmVhdGUiLAotICAgICAgICAgICAgRkFMU0UsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfUkVGTEVDVEVEX1NU
UklOR19BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJl
ZmxlY3RlZC1zdHJpbmctYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQtc3Ry
aW5nLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6cmVmbGVj
dGVkLXN0cmluZy1hdHRyIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
LSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RFRF9JTlRFR1JBTF9B
VFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJyZWZsZWN0ZWQt
aW50ZWdyYWwtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQtaW50ZWdyYWwt
YXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOnJlZmxlY3RlZC1p
bnRlZ3JhbC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JF
RkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JBTF9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfdWxv
bmcoCi0gICAgICAgICAgICAicmVmbGVjdGVkLXVuc2lnbmVkLWludGVncmFsLWF0dHIiLAotICAg
ICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVkLXVuc2lnbmVkLWludGVncmFsLWF0dHIiLAotICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIFRlc3RPYmo6cmVmbGVjdGVkLXVuc2lnbmVkLWlu
dGVncmFsLWF0dHIiLAotICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUZMRUNURURf
Qk9PTEVBTl9BVFRSLAotICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAg
ICJyZWZsZWN0ZWQtYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOnJlZmxlY3Rl
ZC1ib29sZWFuLWF0dHIiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gVGVzdE9i
ajpyZWZsZWN0ZWQtYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgIEZBTFNFLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RF
RF9VUkxfQVRUUiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJy
ZWZsZWN0ZWQtdXJsLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVkLXVybC1h
dHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0T2JqOnJlZmxlY3RlZC11
cmwtYXR0ciIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAg
IGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAicmVmbGVjdGVkLXN0cmluZy1h
dHRyIiwKLSAgICAgICAgICAgICJUZXN0T2JqOnJlZmxlY3RlZC1zdHJpbmctYXR0ciIsCi0gICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE9iajpyZWZsZWN0ZWQtc3RyaW5nLWF0dHIi
LAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0
Q2xhc3MsCi0gICAgICAgIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJyZWZsZWN0ZWQtY3VzdG9tLWlu
dGVncmFsLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RPYmo6cmVmbGVjdGVkLWN1c3RvbS1pbnRl
Z3JhbC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6cmVmbGVj
dGVkLWN1c3RvbS1pbnRlZ3JhbC1hdHRyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhM
T05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAg
ICAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9BVFRSLAotICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKLSAgICAgICAgICAgICJyZWZsZWN0ZWQtY3VzdG9tLWJvb2xlYW4tYXR0
ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQtY3VzdG9tLWJvb2xlYW4tYXR0ciIs
Ci0gICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBUZXN0T2JqOnJlZmxlY3RlZC1jdXN0
b20tYm9vbGVhbi1hdHRyIiwKLSAgICAgICAgICAgIEZBTFNFLAotICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01f
VVJMX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAicmVm
bGVjdGVkLWN1c3RvbS11cmwtYXR0ciIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZWZsZWN0ZWQt
Y3VzdG9tLXVybC1hdHRyIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0T2Jq
OnJlZmxlY3RlZC1jdXN0b20tdXJsLWF0dHIiLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfRU5BQkxFRF9B
VF9SVU5USU1FX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKLSAgICAg
ICAgICAgICJlbmFibGVkLWF0LXJ1bnRpbWUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJUZXN0
T2JqOmVuYWJsZWQtYXQtcnVudGltZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIFRlc3RPYmo6ZW5hYmxlZC1hdC1ydW50aW1lLWF0dHJpYnV0ZSIsCi0gICAgICAg
ICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAg
ICAgICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCi0gICAgICAgICAgICAiYXR0ci13aXRoLWdldHRlci1leGNlcHRpb24iLAotICAg
ICAgICAgICAgIlRlc3RPYmo6YXR0ci13aXRoLWdldHRlci1leGNlcHRpb24iLAotICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbiIs
Ci0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVS
X0VYQ0VQVElPTl9XSVRIX01FU1NBR0UsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAg
ICAgICAgICAgImF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uLXdpdGgtbWVzc2FnZSIsCi0gICAg
ICAgICAgICAiVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbi13aXRoLW1lc3NhZ2Ui
LAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajphdHRyLXdpdGgtZ2V0dGVy
LWV4Y2VwdGlvbi13aXRoLW1lc3NhZ2UiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAg
ICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKAotICAgICAgICAgICAgImF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAg
ICAgICAgICJUZXN0T2JqOmF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1leGNlcHRpb24iLAot
ICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9F
WENFUFRJT05fV0lUSF9NRVNTQUdFLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAg
ICAgICAgICJhdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbi13aXRoLW1lc3NhZ2UiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1leGNlcHRpb24td2l0aC1tZXNzYWdlIiwK
LSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6YXR0ci13aXRoLXNldHRlci1l
eGNlcHRpb24td2l0aC1tZXNzYWdlIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05H
LCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdHJpbmctYXR0ci13aXRoLWdldHRlci1leGNl
cHRpb24iLAotICAgICAgICAgICAgIlRlc3RPYmo6c3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhj
ZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBUZXN0T2JqOnN0cmluZy1h
dHRyLXdpdGgtZ2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVFJJTkdfQVRU
Ul9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0g
ICAgICAgICAgICAic3RyaW5nLWF0dHItd2l0aC1zZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAg
ICAgICJUZXN0T2JqOnN0cmluZy1hdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdE9iajpzdHJpbmctYXR0ci13aXRoLXNldHRlci1l
eGNlcHRpb24iLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAg
ICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRF
LAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1z
dGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtc3RhdGUt
YXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVGVzdE9iajp3aXRoLXNj
cmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAg
UFJPUF9XSVRIX0NBTExfV0lUSF9BTkRfU0VUVEVSX0NBTExfV0lUSF9BVFRSSUJVVEUsCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAgIndpdGgtY2FsbC13aXRoLWFuZC1z
ZXR0ZXItY2FsbC13aXRoLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajp3aXRoLWNh
bGwtd2l0aC1hbmQtc2V0dGVyLWNhbGwtd2l0aC1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJl
YWQtb25seSBnbG9uZyBUZXN0T2JqOndpdGgtY2FsbC13aXRoLWFuZC1zZXR0ZXItY2FsbC13aXRo
LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1dJVEhf
U0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hdHRy
aWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRl
eHQtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGVzdE9iaiog
VGVzdE9iajp3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAg
ICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklC
VVRFX1JBSVNFUywKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3
aXRoLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJUZXN0T2Jq
OndpdGgtc2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LXN0YXRlLWF0dHJpYnV0
ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfV0lUSF9T
Q1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JBSVNFUywKLSAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4
dC1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJUZXN0T2JqOndpdGgtc2NyaXB0LWV4
ZWN1dGlvbi1jb250ZXh0LWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgInJlYWQtb25s
eSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2JqOndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0
LWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JK
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9BVFRSSUJV
VEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAid2l0aC1zY3Jp
cHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1zdGF0ZS1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1z
dGF0ZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2Jq
KiBUZXN0T2JqOndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWFuZC1zY3JpcHQtc3RhdGUt
YXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1dJVEhf
U0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNF
UywKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJ3aXRoLXNjcmlw
dC1leGVjdXRpb24tY29udGV4dC1hbmQtc2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAot
ICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNj
cmlwdC1zdGF0ZS1hdHRyaWJ1dGUtcmFpc2VzIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NVGVzdE9iaiogVGVzdE9iajp3aXRoLXNjcmlwdC1leGVjdXRpb24tY29udGV4dC1hbmQt
c2NyaXB0LXN0YXRlLWF0dHJpYnV0ZS1yYWlzZXMiLAotICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX1RFU1RfT0JKLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9T
VEFURV9XSVRIX1NQQUNFU19BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
Ci0gICAgICAgICAgICAid2l0aC1zY3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1z
dGF0ZS13aXRoLXNwYWNlcy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6d2l0aC1z
Y3JpcHQtZXhlY3V0aW9uLWNvbnRleHQtYW5kLXNjcmlwdC1zdGF0ZS13aXRoLXNwYWNlcy1hdHRy
aWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UZXN0T2JqKiBUZXN0T2Jq
OndpdGgtc2NyaXB0LWV4ZWN1dGlvbi1jb250ZXh0LWFuZC1zY3JpcHQtc3RhdGUtd2l0aC1zcGFj
ZXMtYXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNUX09CSiwKLSAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1dJ
VEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEUsCi0gICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAid2l0aC1zY3JpcHQtYXJndW1lbnRzLWFu
ZC1jYWxsLXN0YWNrLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajp3aXRoLXNjcmlw
dC1hcmd1bWVudHMtYW5kLWNhbGwtc3RhY2stYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NVGVzdE9iaiogVGVzdE9iajp3aXRoLXNjcmlwdC1hcmd1bWVudHMtYW5k
LWNhbGwtc3RhY2stYXR0cmlidXRlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVNU
X09CSiwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAg
ICAgICAgICAgICJjb25kaXRpb25hbC1hdHRyMSIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb25k
aXRpb25hbC1hdHRyMSIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmNv
bmRpdGlvbmFsLWF0dHIxIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAot
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9Q
X0NPTkRJVElPTkFMX0FUVFIyLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAg
ICAgICJjb25kaXRpb25hbC1hdHRyMiIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb25kaXRpb25h
bC1hdHRyMiIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmNvbmRpdGlv
bmFsLWF0dHIyIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NPTkRJ
VElPTkFMX0FUVFIzLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJj
b25kaXRpb25hbC1hdHRyMyIsCi0gICAgICAgICAgICAiVGVzdE9iajpjb25kaXRpb25hbC1hdHRy
MyIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBUZXN0T2JqOmNvbmRpdGlvbmFsLWF0
dHIzIiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FOWV9BVFRSSUJV
VEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAiYW55LWF0dHJp
YnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajphbnktYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NYW55KiBUZXN0T2JqOmFueS1hdHRyaWJ1dGUiLAotICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0FOWSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQsCi0gICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAiY29udGVudC1kb2N1bWVudCIsCi0gICAg
ICAgICAgICAiVGVzdE9iajpjb250ZW50LWRvY3VtZW50IiwKLSAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRG9jdW1lbnQqIFRlc3RPYmo6Y29udGVudC1kb2N1bWVudCIsCi0gICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAg
ICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9NVVRBQkxFX1BPSU5ULAotICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAotICAgICAgICAgICAgIm11dGFibGUtcG9pbnQiLAotICAgICAg
ICAgICAgIlRlc3RPYmo6bXV0YWJsZS1wb2ludCIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTVNWR1BvaW50KiBUZXN0T2JqOm11dGFibGUtcG9pbnQiLAotICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX1NWR19QT0lOVCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29i
amVjdENsYXNzLAotICAgICAgICBQUk9QX0lNTVVUQUJMRV9QT0lOVCwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKLSAgICAgICAgICAgICJpbW11dGFibGUtcG9pbnQiLAotICAgICAgICAg
ICAgIlRlc3RPYmo6aW1tdXRhYmxlLXBvaW50IiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmo6aW1tdXRhYmxlLXBvaW50IiwKLSAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9TVkdfUE9JTlQsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdv
YmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9TVFJBV0JFUlJZLAotICAgICAgICBnX3BhcmFtX3Nw
ZWNfbG9uZygKLSAgICAgICAgICAgICJzdHJhd2JlcnJ5IiwKLSAgICAgICAgICAgICJUZXN0T2Jq
OnN0cmF3YmVycnkiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajpzdHJh
d2JlcnJ5IiwKLSAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0RFU0NSSVBU
SU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biIsCi0gICAgICAgICAgICAiVGVzdE9iajpkZXNjcmlwdGlvbiIsCi0gICAgICAgICAgICAicmVh
ZC1vbmx5IGdsb25nIFRlc3RPYmo6ZGVzY3JpcHRpb24iLAotICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFz
cywKLSAgICAgICAgUFJPUF9JRCwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCi0gICAgICAg
ICAgICAiaWQiLAotICAgICAgICAgICAgIlRlc3RPYmo6aWQiLAotICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2xvbmcgVGVzdE9iajppZCIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAg
ICAgUFJPUF9IQVNILAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAg
Imhhc2giLAotICAgICAgICAgICAgIlRlc3RPYmo6aGFzaCIsCi0gICAgICAgICAgICAicmVhZC1v
bmx5IGdjaGFyKiBUZXN0T2JqOmhhc2giLAotICAgICAgICAgICAgIiIsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9SRVBMQUNFQUJMRV9B
VFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAgInJlcGxh
Y2VhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpyZXBsYWNlYWJsZS1hdHRy
aWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUZXN0T2JqOnJlcGxhY2VhYmxl
LWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKLSAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05VTExB
QkxFX0RPVUJMRV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCi0gICAg
ICAgICAgICAibnVsbGFibGUtZG91YmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9i
ajpudWxsYWJsZS1kb3VibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Rv
dWJsZSBUZXN0T2JqOm51bGxhYmxlLWRvdWJsZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgLUdf
TUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAg
Z29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05VTExBQkxFX0xPTkdfQVRUUklCVVRFLAotICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJudWxsYWJsZS1sb25nLWF0dHJp
YnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpudWxsYWJsZS1sb25nLWF0dHJpYnV0ZSIsCi0g
ICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFRlc3RPYmo6bnVsbGFibGUtbG9uZy1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCi0gICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OVUxMQUJMRV9CT09M
RUFOX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCi0gICAgICAgICAg
ICAibnVsbGFibGUtYm9vbGVhbi1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RPYmo6bnVs
bGFibGUtYm9vbGVhbi1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVh
biBUZXN0T2JqOm51bGxhYmxlLWJvb2xlYW4tYXR0cmlidXRlIiwKLSAgICAgICAgICAgIEZBTFNF
LAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfTlVMTEFCTEVfU1RSSU5HX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKLSAgICAgICAgICAgICJudWxsYWJsZS1zdHJpbmctYXR0cmlidXRlIiwKLSAgICAgICAgICAg
ICJUZXN0T2JqOm51bGxhYmxlLXN0cmluZy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogVGVzdE9iajpudWxsYWJsZS1zdHJpbmctYXR0cmlidXRlIiwKLSAgICAgICAg
ICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAg
ICAgIFBST1BfTlVMTEFCTEVfTE9OR19TRVRUQUJMRV9BVFRSSUJVVEUsCi0gICAgICAgIGdfcGFy
YW1fc3BlY19sb25nKAotICAgICAgICAgICAgIm51bGxhYmxlLWxvbmctc2V0dGFibGUtYXR0cmli
dXRlIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm51bGxhYmxlLWxvbmctc2V0dGFibGUtYXR0cmli
dXRlIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RPYmo6bnVsbGFibGUtbG9u
Zy1zZXR0YWJsZS1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfTlVMTEFCTEVfU1RSSU5HX1NFVFRBQkxFX0FUVFJJQlVURSwKLSAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJudWxsYWJsZS1zdHJpbmctc2V0dGFibGUtYXR0
cmlidXRlIiwKLSAgICAgICAgICAgICJUZXN0T2JqOm51bGxhYmxlLXN0cmluZy1zZXR0YWJsZS1h
dHRyaWJ1dGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6bnVsbGFi
bGUtc3RyaW5nLXNldHRhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJPUF9OVUxMQUJM
RV9TVFJJTkdfVkFMVUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAgICAgICAg
Im51bGxhYmxlLXN0cmluZy12YWx1ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpudWxsYWJsZS1z
dHJpbmctdmFsdWUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgVGVzdE9iajpudWxs
YWJsZS1zdHJpbmctdmFsdWUiLAotICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBS
T1BfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAg
ImF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajphdHRyaWJ1dGUiLAotICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogVGVzdE9iajphdHRyaWJ1dGUiLAotICAgICAgICAgICAgIiIs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLQotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFzcywKLSAgICAgICAgUFJP
UF9QVVRfRk9SV0FSRFNfQVRUUklCVVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAot
ICAgICAgICAgICAgInB1dC1mb3J3YXJkcy1hdHRyaWJ1dGUiLAotICAgICAgICAgICAgIlRlc3RP
Ymo6cHV0LWZvcndhcmRzLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTVRlc3ROb2RlKiBUZXN0T2JqOnB1dC1mb3J3YXJkcy1hdHRyaWJ1dGUiLAotICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfTk9ERSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAg
ICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1BVVF9GT1JXQVJEU19OVUxMQUJMRV9BVFRS
SUJVVEUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAicHV0LWZv
cndhcmRzLW51bGxhYmxlLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpwdXQtZm9y
d2FyZHMtbnVsbGFibGUtYXR0cmlidXRlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NVGVzdE5vZGUqIFRlc3RPYmo6cHV0LWZvcndhcmRzLW51bGxhYmxlLWF0dHJpYnV0ZSIsCi0g
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OT0RFLAotICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfU1RSSU5HSUZJRVJfQVRUUklC
VVRFLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInN0cmluZ2lm
aWVyLWF0dHJpYnV0ZSIsCi0gICAgICAgICAgICAiVGVzdE9iajpzdHJpbmdpZmllci1hdHRyaWJ1
dGUiLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RPYmo6c3RyaW5naWZpZXIt
YXR0cmlidXRlIiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfaW5pdChX
ZWJLaXRET01UZXN0T2JqKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RPYmpQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09CSl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVRlc3RPYmpQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGNvbnN0IGdjaGFyKiB0ZXN0UGFyYW0pCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVS
RSkKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKHRlc3RQYXJhbSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUZXN0UGFyYW0gPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodGVzdFBhcmFtKTsKLSAgICBpdGVtLT5lbmFibGVkQXRSdW50aW1lT3Bl
cmF0aW9uKGNvbnZlcnRlZFRlc3RQYXJhbSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKLSAgICBVTlVTRURfUEFSQU0odGVzdFBhcmFtKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotI2VuZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRV
UkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9lbmFibGVkX2F0X3J1bnRpbWVf
b3BlcmF0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHRlc3RQYXJhbSkKLXsKLSNp
ZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+ZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbih0ZXN0UGFyYW0pOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5VU0VEX1BBUkFNKHRlc3RQYXJhbSk7Ci0gICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0dXJlIikKLSNlbmRpZiAv
KiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
dm9pZF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnZvaWRNZXRob2QoKTsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBv
YmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzdHJBcmcpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihvYmpBcmcpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJBcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZE9i
akFyZyA9IFdlYktpdDo6Y29yZShvYmpBcmcpOwotICAgIGl0ZW0tPnZvaWRNZXRob2RXaXRoQXJn
cyhsb25nQXJnLCBjb252ZXJ0ZWRTdHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcpOwotfQotCi1naW50
OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2ludDggcmVz
dWx0ID0gaXRlbS0+Ynl0ZU1ldGhvZCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWdpbnQ4
IHdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdpbnQ4IGJ5dGVBcmcsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERPTVRl
c3RPYmoqIG9iakFyZykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCAwKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iakFyZyksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0ckFyZyk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0Ojpjb3JlKG9iakFyZyk7
Ci0gICAgZ2ludDggcmVzdWx0ID0gaXRlbS0+Ynl0ZU1ldGhvZFdpdGhBcmdzKGJ5dGVBcmcsIGNv
bnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotZ3VpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9kKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9jdGV0TWV0aG9kKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotZ3VpbnQ4IHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9kX3dpdGhfYXJncyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDggb2N0ZXRBcmcsIGNvbnN0IGdjaGFyKiBzdHJB
cmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyQXJnLCAw
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iakFy
ZyksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0ckFyZyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqQXJnID0gV2ViS2l0
Ojpjb3JlKG9iakFyZyk7Ci0gICAgZ3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9jdGV0TWV0aG9kV2l0
aEFyZ3Mob2N0ZXRBcmcsIGNvbnZlcnRlZFN0ckFyZywgKmNvbnZlcnRlZE9iakFyZyk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9sb25nX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmxvbmdNZXRob2QoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2xvbmdfbWV0aG9k
X3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBn
Y2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihvYmpBcmcpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzdHJBcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZE9iakFy
ZyA9IFdlYktpdDo6Y29yZShvYmpBcmcpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmxvbmdN
ZXRob2RXaXRoQXJncyhsb25nQXJnLCBjb252ZXJ0ZWRTdHJBcmcsICpjb252ZXJ0ZWRPYmpBcmcp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21f
dGVzdF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kKCkpOwotICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotV2ViS2l0RE9NVGVz
dE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRE
T01UZXN0T2JqKiBvYmpBcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFN0ckFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJBcmcpOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZE9iakFyZyA9IFdlYktpdDo6Y29yZShvYmpB
cmcpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+b2JqTWV0aG9kV2l0aEFyZ3MobG9uZ0FyZywgY29udmVydGVkU3RyQXJnLCAq
Y29udmVydGVkT2JqQXJnKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3VuZm9yZ2VhYmxlX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnVuZm9yZ2VhYmxlTWV0aG9kKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX2FyZ190cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogYXJnKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9P
Qkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZEFyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChhcmcpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhB
cmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKGNvbnZlcnRlZEFyZyk7Ci19Ci0KLXZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZlcl9wYXJhbWV0ZXIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZl
cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfTlNfUkVTT0xWRVIocmVzb2x2ZXIpKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpYUGF0aE5TUmVzb2x2ZXI+IGNvbnZlcnRlZFJlc29sdmVyID0gV2ViS2l0Ojpj
b3JlKHJlc29sdmVyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFyYW1l
dGVyKFdURjo6Z2V0UHRyKCpjb252ZXJ0ZWRSZXNvbHZlcikpOwotfQotCi1nY2hhciogd2Via2l0
X2RvbV90ZXN0X29ial9udWxsYWJsZV9zdHJpbmdfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bnVsbGFibGVTdHJpbmdNZXRob2Qo
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpf
bnVsbGFibGVfc3RyaW5nX3NwZWNpYWxfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1
bG9uZyBpbmRleCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwg
MCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5udWxsYWJsZVN0cmlu
Z1NwZWNpYWxNZXRob2QoaW5kZXgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZW51bV9hcmcoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX0VOVU1fVFlQRShlbnVtQXJnKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0RW51bVR5cGUqIGNvbnZlcnRl
ZEVudW1BcmcgPSBXZWJLaXQ6OmNvcmUoZW51bUFyZyk7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aEVu
dW1BcmcoY29udmVydGVkRW51bUFyZyk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9lbnVtX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0RW51bVR5cGUqIGVudW1BcmcpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfRU5V
TV9UWVBFKGVudW1BcmcpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RFbnVtVHlwZSogY29udmVydGVkRW51bUFyZyA9
IFdlYktpdDo6Y29yZShlbnVtQXJnKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxFbnVt
QXJnKGNvbnZlcnRlZEVudW1BcmcpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9hcmdfYW5kX2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVNUX0VOVU1fVFlQRShlbnVtQXJnKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0RW51bVR5cGUqIGNv
bnZlcnRlZEVudW1BcmcgPSBXZWJLaXQ6OmNvcmUoZW51bUFyZyk7Ci0gICAgaXRlbS0+bWV0aG9k
V2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRFbnVtQXJnKTsKLX0K
LQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1
aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzdHJBcmcsIFdlYktpdERPTVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHN0ckFyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX09CSihvYmpBcmcpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJBcmcgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoc3RyQXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0
ZWRPYmpBcmcgPSBXZWJLaXQ6OmNvcmUob2JqQXJnKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29u
dmVydGVkU3RyQXJnLCAqY29udmVydGVkT2JqQXJnLCBlYykpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFy
KiBzZXJpYWxpemVkQXJnKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZEFyZyk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXJpYWxpemVkVmFs
dWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHNlcmlhbGl6ZWRBcmcpKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9v
cHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01EaWN0aW9uYXJ5
KiBvbywgV2ViS2l0RE9NRGljdGlvbmFyeSogb29vKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ESUNU
SU9OQVJZKG9vKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RJQ1RJT05B
Ulkob29vKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5KiBjb252ZXJ0ZWRPbyA9IFdlYktpdDo6Y29yZShv
byk7Ci0gICAgV2ViQ29yZTo6RGljdGlvbmFyeSogY29udmVydGVkT29vID0gV2ViS2l0Ojpjb3Jl
KG9vbyk7Ci0gICAgaXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRPbywgY29udmVydGVkT29v
KTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAh
KmVycm9yKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPm1ldGhvZFdp
dGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNl
cHRpb25XaXRoTWVzc2FnZSgpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9wdWJs
aWNfYW5kX3ByaXZhdGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFy
KiBhcmd1bWVudCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwg
MCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoYXJndW1lbnQsIDApOwotICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkQXJndW1lbnQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnQpOwotICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnB1YmxpY0FuZFByaXZhdGVN
ZXRob2QoY29udmVydGVkQXJndW1lbnQpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
d2l0aFNjcmlwdFN0YXRlVm9pZCgpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlw
dFN0YXRlT2JqKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRl
bS0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbihlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1XZWJLaXRET01U
ZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZSgpOwotfQotCi1XZWJLaXRE
T01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250
ZXh0X2FuZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RP
Ymo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaiog
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2Ny
aXB0X3N0YXRlX3dpdGhfc3BhY2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RP
Ymo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcygpKTsKLSAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial93
aXRoX2RvY3VtZW50X2FyZ3VtZW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoRG9jdW1lbnRBcmd1bWVudCgp
OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9jYWxsZXJfZG9jdW1lbnRfYXJn
dW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGl0ZW0tPndpdGhDYWxsZXJEb2N1bWVudEFyZ3VtZW50KCk7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl93aW5kb3dfYXJndW1lbnQoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGl0ZW0tPndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCgpOwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIG9wdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0t
Pm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3ZhbHVlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShvcHQpOwot
fQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2Fy
Z19hbmRfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbk9wdCwg
Z2xvbmcgb3B0KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0LCBvcHQpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19h
bmRfdHdvX29wdGlvbmFsX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgbm9uT3B0
LCBnbG9uZyBvcHQxLCBnbG9uZyBvcHQyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9P
Qkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdz
KG5vbk9wdCwgb3B0MSwgb3B0Mik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2No
YXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoY29u
dmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29w
dGlvbmFsX2F0b21pY19zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIq
IHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmco
Y29udmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBjb25zdCBnY2hhciogc3RyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0FuZERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19hbmRfZGVmYXVs
dF92YWx1ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c3RyKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIp
OwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1
ZShjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dp
dGhfb3B0aW9uYWxfc3RyaW5nX2lzX251bGwoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJ
c051bGwoY29udmVydGVkU3RyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHIg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmdJc1VuZGVmaW5lZChjb252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJp
bmcgY29udmVydGVkU3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+
bWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKGNvbnZlcnRlZFN0cik7Ci19Ci0K
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNf
ZW1wdHlfc3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzdHIpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkU3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0cik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyhj
b252ZXJ0ZWRTdHIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhf
b3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19lbXB0eV9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRT
dHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKGNvbnZlcnRlZFN0cik7Ci19Ci0KLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9kb3VibGVfaXNfbmFfbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZG91YmxlIG51bWJlcikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlzTmFO
KG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRp
b25hbF9mbG9hdF9pc19uYV9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdmbG9hdCBudW1iZXIp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5tZXRob2RXaXRo
T3B0aW9uYWxGbG9hdElzTmFOKG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2ludDY0IG51bWJlcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKG51bWJlcik7Ci19Ci0KLXZvaWQgd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnaW50NjQgbnVtYmVyKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8o
bnVtYmVyKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlv
bmFsX3Vuc2lnbmVkX2xvbmdfbG9uZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDY0IG51
bWJlcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhv
ZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcobnVtYmVyKTsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZ19pc196
ZXJvKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1aW50NjQgbnVtYmVyKQotewotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsVW5zaWdu
ZWRMb25nTG9uZ0lzWmVybyhudW1iZXIpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
bWV0aG9kX3dpdGhfb3B0aW9uYWxfYm9vbGVhbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9v
bGVhbiBiKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0
aG9kV2l0aE9wdGlvbmFsQm9vbGVhbihiKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX2Jvb2xlYW5faXNfZmFsc2UoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2Jvb2xlYW4gYikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKGIpOwotfQotCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYW55KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTWFueSogYSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQU5ZKGEpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdl
YkNvcmU6OmFueSogY29udmVydGVkQSA9IFdlYktpdDo6Y29yZShhKTsKLSAgICBpdGVtLT5tZXRo
b2RXaXRoT3B0aW9uYWxBbnkoY29udmVydGVkQSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9udWxsYWJsZV93cmFwcGVyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIG9iaikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkoob2JqKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb252ZXJ0ZWRPYmogPSBXZWJLaXQ6OmNvcmUo
b2JqKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXIoY29udmVy
dGVkT2JqKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlv
bmFsX251bGxhYmxlX3dyYXBwZXJfaXNfbnVsbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0T2JqKiBvYmopCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKG9iaikpOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogY29udmVydGVkT2JqID0gV2ViS2l0Ojpjb3JlKG9iaik7Ci0gICAgaXRl
bS0+bWV0aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsKGNvbnZlcnRlZE9iaik7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF94cGF0
aF9uc19yZXNvbHZlcihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXIqIHJlc29sdmVyKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9OU19SRVNPTFZFUihy
ZXNvbHZlcikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlcj4gY29udmVydGVkUmVzb2x2
ZXIgPSBXZWJLaXQ6OmNvcmUocmVzb2x2ZXIpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25h
bFhQYXRoTlNSZXNvbHZlcihXVEY6OmdldFB0cihjb252ZXJ0ZWRSZXNvbHZlcikpOwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QxKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Y29uZGl0aW9uYWxNZXRob2QxKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFs
X21ldGhvZDIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDIoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHNlbGYpOwotI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSNlbmRpZgotI2lmICFFTkFCTEUoQ29uZGl0aW9u
MikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNl
bmRpZgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikg
Ki8KLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5j
b25kaXRpb25hbE1ldGhvZDMoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX2VuZm9yY2VfcmFuZ2UoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ3VzaG9ydCBvYmpBcmdzU2hvcnQsIGd1bG9uZyBvYmpBcmdzTG9uZykKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmNsYXNzTWV0aG9kV2l0
aEVuZm9yY2VSYW5nZShvYmpBcmdzU2hvcnQsIG9iakFyZ3NMb25nKTsKLX0KLQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVRlc3ROb2RlKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9OT0RFKHZhbHVlKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBX
ZWJDb3JlOjpUZXN0Tm9kZSogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwot
ICAgIGl0ZW0tPmNvbnZlcnQxKCpjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0
Tm9kZSogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfTk9ERSh2YWx1ZSkpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6VGVzdE5vZGUqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBp
dGVtLT5jb252ZXJ0Mihjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0MyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+Y29udmVydDMoY29udmVydGVkVmFsdWUpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPmNvbnZlcnQ0
KGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3Jl
OjpTVkdQb2ludD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm11dGFibGVQb2lu
dEZ1bmN0aW9uKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqIHdlYmtpdF9kb21fdGVzdF9vYmpfaW1tdXRhYmxl
X3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnRGdW5jdGlvbigp
KTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmJhbmFuYSgpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21ldGhvZChXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogaGVhZCwgLi4uKQotewotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoaGVhZCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRIZWFkID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGhlYWQpOwotICAg
IHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OwotICAgIFZlY3RvcjxXVEY6OlN0cmluZz4g
Y29udmVydGVkVGFpbDsKLSAgICB2YV9zdGFydCh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIGhlYWQp
OwotICAgIHdoaWxlIChnY2hhciogdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9hcmcodmFyaWFkaWNQ
YXJhbWV0ZXJMaXN0LCBnY2hhciopKQotICAgICAgICBjb252ZXJ0ZWRUYWlsLmFwcGVuZChXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFyaWFkaWNQYXJhbWV0ZXIpKTsKLSAgICB2YV9lbmQodmFyaWFk
aWNQYXJhbWV0ZXJMaXN0KTsKLSAgICBpdGVtLT52YXJpYWRpY1N0cmluZ01ldGhvZChjb252ZXJ0
ZWRIZWFkLCBXVEZNb3ZlKGNvbnZlcnRlZFRhaWwpKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3ZhcmlhZGljX2RvdWJsZV9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Rv
dWJsZSBoZWFkLCBndWludCBuX3RhaWwsIC4uLikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OwotICAgIFZlY3Rvcjxn
ZG91YmxlPiBjb252ZXJ0ZWRUYWlsOwotICAgIHZhX3N0YXJ0KHZhcmlhZGljUGFyYW1ldGVyTGlz
dCwgaGVhZCk7Ci0gICAgY29udmVydGVkVGFpbC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5fdGFp
bCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fdGFpbDsgKytpKSB7Ci0gICAgICAg
IGNvbnZlcnRlZFRhaWwudW5jaGVja2VkQXBwZW5kKHZhX2FyZyh2YXJpYWRpY1BhcmFtZXRlckxp
c3QsIGdkb3VibGUpKTsKLSAgICB2YV9lbmQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0KTsKLSAgICBp
dGVtLT52YXJpYWRpY0RvdWJsZU1ldGhvZChoZWFkLCBXVEZNb3ZlKGNvbnZlcnRlZFRhaWwpKTsK
LX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX25vZGVfbWV0aG9kKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTU5vZGUqIGhlYWQsIC4uLikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTk9ERShoZWFkKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRIZWFkID0gV2ViS2l0
Ojpjb3JlKGhlYWQpOwotICAgIHZhX2xpc3QgdmFyaWFkaWNQYXJhbWV0ZXJMaXN0OwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpOb2RlKj4gY29udmVydGVkVGFpbDsKLSAgICB2YV9zdGFydCh2YXJpYWRp
Y1BhcmFtZXRlckxpc3QsIGhlYWQpOwotICAgIHdoaWxlIChXZWJLaXRET01Ob2RlKiB2YXJpYWRp
Y1BhcmFtZXRlciA9IHZhX2FyZyh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIFdlYktpdERPTU5vZGUq
KSkKLSAgICAgICAgY29udmVydGVkVGFpbC5hcHBlbmQoV2ViS2l0Ojpjb3JlKHZhcmlhZGljUGFy
YW1ldGVyKSk7Ci0gICAgdmFfZW5kKHZhcmlhZGljUGFyYW1ldGVyTGlzdCk7Ci0gICAgaXRlbS0+
dmFyaWFkaWNOb2RlTWV0aG9kKCpjb252ZXJ0ZWRIZWFkLCBXVEZNb3ZlKGNvbnZlcnRlZFRhaWwp
KTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2FueShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnZmxvYXQgYSwgZ2xvbmcgYikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPmFueShhLCBiKTsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2F0
dGFjaF9zaGFkb3dfcm9vdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0RGlj
dGlvbmFyeSogaW5pdCkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9ESUNUSU9OQVJZKGluaXQp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFdlYkNvcmU6OlRlc3REaWN0aW9uYXJ5KiBjb252ZXJ0ZWRJbml0ID0gV2ViS2l0Ojpjb3JlKGlu
aXQpOwotICAgIGl0ZW0tPmF0dGFjaFNoYWRvd1Jvb3QoY29udmVydGVkSW5pdCk7Ci19Ci0KLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5yZWFkT25seUxvbmdBdHRyKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVz
dF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKLSAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLWdpbnQ4IHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2J5dGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdpbnQ4IHJlc3VsdCA9
IGl0ZW0tPmJ5dGVBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9ieXRlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDgg
dmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRC
eXRlQXR0cih2YWx1ZSk7Ci19Ci0KLWd1aW50OCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9vY3Rl
dF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ4IHJlc3VsdCA9IGl0ZW0tPm9jdGV0QXR0cigpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfb2N0
ZXRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWludDggdmFsdWUpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRPY3RldEF0dHIodmFsdWUpOwot
fQotCi1nc2hvcnQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2hvcnRfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdzaG9ydCByZXN1bHQgPSBpdGVtLT5zaG9ydEF0dHIoKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgaXRlbS0+c2V0U2hvcnRBdHRyKHZhbHVlKTsKLX0KLQotZ3Nob3J0IHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2NsYW1wZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdzaG9y
dCByZXN1bHQgPSBpdGVtLT5jbGFtcGVkU2hvcnRBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jbGFtcGVkX3Nob3J0X2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q2xhbXBlZFNob3J0QXR0cih2YWx1ZSk7Ci19Ci0K
LWdzaG9ydCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNU
X09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnc2hvcnQgcmVzdWx0ID0gaXRlbS0+ZW5mb3JjZVJhbmdlU2hvcnRBdHRy
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0
IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0
RW5mb3JjZVJhbmdlU2hvcnRBdHRyKHZhbHVlKTsKLX0KLQotZ3VzaG9ydCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VzaG9ydCByZXN1
bHQgPSBpdGVtLT51bnNpZ25lZFNob3J0QXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBndXNob3J0IHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRTaG9ydEF0dHIodmFsdWUpOwotfQotCi1n
bG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5sb25nQXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdsb25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
aXRlbS0+c2V0TG9uZ0F0dHIodmFsdWUpOwotfQotCi1naW50NjQgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnaW50NjQgcmVzdWx0ID0gaXRlbS0+
bG9uZ0xvbmdBdHRyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50
NjQgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5z
ZXRMb25nTG9uZ0F0dHIodmFsdWUpOwotfQotCi1ndWludDY0IHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ2NCByZXN1bHQg
PSBpdGVtLT51bnNpZ25lZExvbmdMb25nQXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ2NCB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKHZhbHVlKTsK
LX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0
cigpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyKGNvbnZlcnRlZFZhbHVl
KTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9v
YmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVz
dE9iaiogdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHZhbHVlKSk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgaXRl
bS0+c2V0VGVzdE9iakF0dHIoKmNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9i
aiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9udWxsYWJsZV9vYmpfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+dGVzdE51bGxhYmxlT2JqQXR0cigpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
dGVzdF9udWxsYWJsZV9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01U
ZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoodmFsdWUpKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBp
dGVtLT5zZXRUZXN0TnVsbGFibGVPYmpBdHRyKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotV2ViS2l0
RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbGVuaWVudF90ZXN0X29ial9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVT
VF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5sZW5pZW50VGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoodmFsdWUp
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsK
LSAgICBpdGVtLT5zZXRMZW5pZW50VGVzdE9iakF0dHIoKmNvbnZlcnRlZFZhbHVlKTsKLX0KLQot
Z2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3VuZm9yZ2VhYmxlX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxm
KSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT51bmZvcmdlYWJs
ZUF0dHIoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3N0cmluZ19hdHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxs
X2FzX2VtcHR5X3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoY29udmVydGVkVmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnhtbE9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkoodmFsdWUpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0
Ojpjb3JlKHZhbHVlKTsKLSAgICBpdGVtLT5zZXRYTUxPYmpBdHRyKCpjb252ZXJ0ZWRWYWx1ZSk7
Ci19Ci0KLWdib29sZWFuIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCBGQUxTRSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc0NyZWF0ZSgpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY3JlYXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q3JlYXRlKHZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0
cikpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVt
LT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVn
cmFsYXR0ckF0dHIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBp
dGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGlu
dGVncmFsYXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ3Vsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAg
IFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3Vsb25n
IHJlc3VsdCA9IGl0ZW0tPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3Vuc2ln
bmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vsb25nIHZhbHVlKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRl
c3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50
ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIEZBTFNFKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ2No
YXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
dXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgY29udmVydGVkVmFsdWUp
OwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1
c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVj
dGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZh
bHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxB
dHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCBGQUxTRSk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9t
X2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKLXsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCB2
YWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3Vz
dG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudFVSTEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3Vz
dG9tQ29udGVudFVSTEF0dHJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUZXN0IEZlYXR1cmUiKQotICAgIHJldHVybiAwOwotI2Vu
ZGlmIC8qIEVOQUJMRShURVNUX0ZFQVRVUkUpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfZW5hYmxlZF9hdF9ydW50aW1lX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKGNvbnZlcnRl
ZFZhbHVlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVGVzdCBGZWF0
dXJlIikKLSNlbmRpZiAvKiBFTkFCTEUoVEVTVF9GRUFUVVJFKSAqLwotfQotCi1nbG9uZyB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2xvbmcgcmVz
dWx0ID0gaXRlbS0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewot
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0
ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0QXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24odmFsdWUpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRy
X3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyBy
ZXN1bHQgPSBpdGVtLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dp
dGhfZ2V0dGVyX2V4Y2VwdGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVt
LT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKHZhbHVlKTsKLX0KLQotZ2xv
bmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
YXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcg
dmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkoo
c2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24odmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0
dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJf
d2l0aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UodmFsdWUpOwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihjb252ZXJ0
ZWRWYWx1ZSk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0
cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0
cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KGNvbnZlcnRlZFZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1
bHQgPSBpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9hbmRf
c2V0dGVyX2NhbGxfd2l0aF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
PndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYykpOwotICAgIGlmIChlYykgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJp
YnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMo
ZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwot
fQotCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3Njcmlw
dF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgp
KTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdl
YktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1
dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3RPYmo+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAg
fQotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotV2Vi
S2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3Bh
Y2VzQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0
cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5jb25kaXRpb25hbEF0dHIxKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHNlbGYpOwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IkNvbmRpdGlvbjEiKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUp
Ci17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09C
SihzZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIxKHZhbHVlKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0jZW5kaWYgLyogRU5BQkxFKENv
bmRpdGlvbjEpICovCi19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlv
bmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1Rf
T0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmNvbmRpdGlvbmFsQXR0cjIoKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0jaWYgIUVO
QUJMRShDb25kaXRpb24xKQotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNv
bmRpdGlvbjEiKQotI2VuZGlmCi0jaWYgIUVOQUJMRShDb25kaXRpb24yKQotICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdsb25nPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYg
RU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
Y29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMih2YWx1
ZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSNlbmRpZgotI2lmICFFTkFCTEUoQ29uZGl0aW9uMikK
LSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSNlbmRp
ZgotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
LX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z2xvbmcgcmVzdWx0ID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMygpOwotICAgIHJldHVybiByZXN1
bHQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24yIikKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDAp
OwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
LX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihz
ZWxmKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIzKHZhbHVlKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNlbGYpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi1XZWJLaXRET01hbnkqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
YW55PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YW55QXR0cmlidXRlKCkpOwot
ICAgIHJldHVybiAwOyAvLyBUT0RPOiByZXR1cm4gY2FudmFzIG9iamVjdAotfQotCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NYW55KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JK
KHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQU5ZKHZhbHVlKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBX
ZWJDb3JlOjphbnkqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICBp
dGVtLT5zZXRBbnlBdHRyaWJ1dGUoY29udmVydGVkVmFsdWUpOwotfQotCi1XZWJLaXRET01Eb2N1
bWVudCogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
LCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmNvbnRlbnREb2N1bWVudCgpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNWR1Bv
aW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bXV0YWJsZVBvaW50KCkpOwot
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKLX0KLQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RF
U1RfT0JKKHNlbGYpKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1ZHX1BP
SU5UKHZhbHVlKSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpTVkdQb2ludCogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNv
cmUodmFsdWUpOwotICAgIGl0ZW0tPnNldE11dGFibGVQb2ludChjb252ZXJ0ZWRWYWx1ZSk7Ci19
Ci0KLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbW11dGFibGVf
cG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pbW11dGFibGVQb2ludCgpKTsKLSAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVNWR1BvaW50KiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYp
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1ZHX1BPSU5UKHZhbHVlKSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBX
ZWJDb3JlOjpTVkdQb2ludCogY29udmVydGVkVmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwot
ICAgIGl0ZW0tPnNldEltbXV0YWJsZVBvaW50KGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcg
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyYXdiZXJyeShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJl
c3VsdCA9IGl0ZW0tPmJsdWViZXJyeSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyYXdiZXJyeShXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPnNldEJsdWViZXJyeSh2YWx1ZSk7Ci19Ci0KLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2Rlc2NyaXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+ZGVzY3Jp
cHRpb24oKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmlkKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldElkKHZhbHVlKTsKLX0KLQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5oYXNoKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlcGxhY2VhYmxlX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnJlcGxhY2VhYmxlQXR0cmlidXRlKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotZ2RvdWJsZSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxs
YWJsZV9kb3VibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVt
LT5udWxsYWJsZURvdWJsZUF0dHJpYnV0ZSgpLnZhbHVlT3IoMCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfbG9uZ19hdHRy
aWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX09CSihzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5udWxsYWJsZUxvbmdBdHRy
aWJ1dGUoKS52YWx1ZU9yKDApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWdib29sZWFuIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZiksIEZBTFNFKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0
ZSgpLnZhbHVlT3IoMCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZ2NoYXIqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX3N0cmluZ19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5udWxsYWJsZVN0cmluZ0F0
dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9udWxsYWJsZV9sb25nX3NldHRhYmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAw
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdsb25nIHJlc3VsdCA9IGl0ZW0tPm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkudmFs
dWVPcigwKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2Vs
ZikpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+c2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUodmFsdWUpOwotfQotCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5nX3NldHRhYmxlX2F0
dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9zdHJpbmdf
c2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXROdWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlKGNvbnZlcnRlZFZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfbnVsbGFibGVfc3RyaW5nX3ZhbHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJv
cioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAw
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5udWxsYWJs
ZVN0cmluZ1ZhbHVlKGVjKS52YWx1ZU9yKDApOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ192YWx1ZShXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldE51bGxhYmxlU3RyaW5nVmFsdWUodmFsdWUpOwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cmlidXRlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlKCkpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVdlYktpdERPTVRlc3ROb2RlKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdl
YkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3ROb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cHV0Rm9y
d2FyZHNBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOwotfQotCi1XZWJLaXRET01UZXN0Tm9kZSogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpUZXN0Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnB1dEZvcndh
cmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOwotfQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5n
aWZpZXJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9PQkooc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+c3RyaW5naWZpZXJBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdpZmllcl9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9PQkooc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOwotICAgIGl0ZW0tPnNldFN0cmluZ2lmaWVyQXR0cmlidXRlKGNvbnZlcnRlZFZhbHVlKTsK
LX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0YWZhOWEzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgL2Rldi9udWxsCkBAIC0x
LDIxMjUgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBX
ZWJLaXRET01UZXN0T2JqX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE9ial9oCi0KLSNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgotI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PQkogICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNU
X09CSiwgV2ViS2l0RE9NVGVzdE9iaikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfT0JKLCBXZWJLaXRET01UZXN0T2JqQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9PQkoob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT0JKKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX09CSl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9PQkopKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9URVNUX09CSiwgV2ViS2l0RE9NVGVzdE9iakNsYXNzKSkKLQotI2lmIEVOQUJMRShD
b25kaXRpb24xKQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTkRJVElPTkFMX0NPTlNU
OgotICovCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ09ORElUSU9OQUxfQ09OU1QgMAot
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwotCi0vKioKLSAqIFdFQktJVF9ET01fVEVT
VF9PQkpfQ09OU1RfVkFMVUVfMDoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NP
TlNUX1ZBTFVFXzAgMAotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVf
MToKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzEgMQotCi0v
KioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMjoKLSAqLwotI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzIgMgotCi0vKioKLSAqIFdFQktJVF9ET01f
VEVTVF9PQkpfQ09OU1RfVkFMVUVfNDoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JK
X0NPTlNUX1ZBTFVFXzQgNAotCi0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFM
VUVfODoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzggOAot
Ci0vKioKLSAqIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfOToKLSAqLwotI2RlZmlu
ZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzkgLTEKLQotLyoqCi0gKiBXRUJLSVRf
RE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzExOgotICovCi0jZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9PQkpfQ09OU1RfVkFMVUVfMTEgMHhmZmZmZmZmZgotCi0vKioKLSAqIFdFQktJVF9ET01fVEVT
VF9PQkpfQ09OU1RfVkFMVUVfMTI6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09CSl9D
T05TVF9WQUxVRV8xMiAweDAxCi0KLS8qKgotICogV0VCS0lUX0RPTV9URVNUX09CSl9DT05TVF9W
QUxVRV8xMzoKLSAqLwotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzEz
IDBYMjAKLQotLyoqCi0gKiBXRUJLSVRfRE9NX1RFU1RfT0JKX0NPTlNUX1ZBTFVFXzE0OgotICov
Ci0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfVkFMVUVfMTQgMHgxYWJjCi0KLS8q
KgotICogV0VCS0lUX0RPTV9URVNUX09CSl9DT05TVF9KQVZBU0NSSVBUOgotICovCi0jZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9PQkpfQ09OU1RfSkFWQVNDUklQVCAxNQotCi0vKioKLSAqIFdFQktJ
VF9ET01fVEVTVF9PQkpfcmVhZG9ubHk6Ci0gKi8KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09C
Sl9yZWFkb25seSAwCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE9iaiB7Ci0gICAgV2ViS2l0RE9N
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE9iakNs
YXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJL
SVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90eXBlKHZvaWQpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZW5hYmxlZF9hdF9ydW50aW1lX29wZXJhdGlvbjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdGVzdFBhcmFtOiBBICNnY2hhcgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2VuYWJsZWRfYXRfcnVudGltZV9vcGVyYXRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHRlc3RQYXJhbSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9lbmFibGVkX2F0X3J1bnRpbWVfb3BlcmF0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqIEB0ZXN0UGFyYW06IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZW5hYmxlZF9h
dF9ydW50aW1lX29wZXJhdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB0ZXN0UGFy
YW0pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Q6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRo
b2Rfd2l0aF9hcmdzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBsb25nQXJn
OiBBICNnbG9uZwotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpBcmc6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgbG9uZ0FyZywgY29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9N
VGVzdE9iaiogb2JqQXJnKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0
aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
aW50OAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnaW50OAot
d2Via2l0X2RvbV90ZXN0X29ial9ieXRlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2J5dGVfbWV0aG9kX3dpdGhfYXJnczoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAYnl0ZUFyZzogQSAjZ2ludDgKLSAqIEBz
dHJBcmc6IEEgI2djaGFyCi0gKiBAb2JqQXJnOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICog
UmV0dXJuczogQSAjZ2ludDgKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgZ2ludDgKLXdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ4IGJ5dGVBcmcsIGNvbnN0IGdjaGFyKiBzdHJBcmcs
IFdlYktpdERPTVRlc3RPYmoqIG9iakFyZyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9vY3RldF9tZXRob2Q6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJl
dHVybnM6IEEgI2d1aW50OAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBndWludDgKLXdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9kKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfb2N0ZXRfbWV0aG9k
X3dpdGhfYXJnczoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2N0ZXRBcmc6
IEEgI2d1aW50OAotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpBcmc6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNndWludDgKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ4Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX29jdGV0
X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ4IG9jdGV0QXJn
LCBjb25zdCBnY2hhciogc3RyQXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbG9uZ19tZXRob2Q6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2xvbmdf
bWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbG9uZ19tZXRob2Rfd2l0aF9hcmdzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBsb25nQXJnOiBBICNnbG9uZwotICogQHN0ckFyZzogQSAjZ2NoYXIKLSAqIEBvYmpB
cmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X29ial9sb25nX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgbG9uZ0FyZywgY29uc3QgZ2NoYXIqIHN0ckFyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqQXJn
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Q6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfb2Jq
X21ldGhvZF93aXRoX2FyZ3M6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGxv
bmdBcmc6IEEgI2dsb25nCi0gKiBAc3RyQXJnOiBBICNnY2hhcgotICogQG9iakFyZzogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBX
ZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kX3dpdGhfYXJn
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBsb25nQXJnLCBjb25zdCBnY2hhciogc3Ry
QXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpBcmcpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfdW5mb3JnZWFibGVfbWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial91bmZvcmdlYWJsZV9tZXRo
b2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9hcmdfdHJlYXRpbmdfbnVsbF9hc19lbXB0eV9zdHJpbmc6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGFyZzogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9hcmdfdHJlYXRpbmdfbnVsbF9hc19lbXB0eV9zdHJpbmcoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIGFyZyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZlcl9wYXJhbWV0ZXI6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICogQHJlc29sdmVyOiBBICNXZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF94cGF0aF9uc19yZXNvbHZlcl9wYXJhbWV0
ZXIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNv
bHZlcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9udWxsYWJsZV9zdHJpbmdfbWV0
aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
Y2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfbnVsbGFibGVfc3RyaW5nX21ldGhvZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX251bGxhYmxlX3N0cmlu
Z19zcGVjaWFsX21ldGhvZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAaW5k
ZXg6IEEgI2d1bG9uZwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9u
dWxsYWJsZV9zdHJpbmdfc3BlY2lhbF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vs
b25nIGluZGV4KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2Vu
dW1fYXJnOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlbnVtQXJnOiBBICNX
ZWJLaXRET01UZXN0RW51bVR5cGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9lbnVtX2FyZyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0RW51bVR5cGUqIGVudW1BcmcpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9h
cmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGVudW1Bcmc6IEEgI1dlYktp
dERPTVRlc3RFbnVtVHlwZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2VudW1f
YXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RFbnVtVHlwZSogZW51bUFy
Zyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9l
bnVtX2FyZ19hbmRfZGVmYXVsdF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAZW51bUFyZzogQSAjV2ViS2l0RE9NVGVzdEVudW1UeXBlCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfb3B0aW9uYWxfZW51bV9hcmdfYW5kX2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKiBlbnVtQXJnKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJv
d3M6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0ckFyZzogQSAjZ2NoYXIK
LSAqIEBvYmpBcmc6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoK
LSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgot
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhy
b3dzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJBcmcsIFdlYktpdERP
TVRlc3RPYmoqIG9iakFyZywgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAc2VyaWFsaXplZEFyZzogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3Zh
bHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZXJpYWxpemVkQXJnKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0OgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvbzogQSAjV2ViS2l0RE9NRGljdGlvbmFyeQotICog
QG9vbzogQSAjV2ViS2l0RE9NRGljdGlvbmFyeQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTURpY3Rpb25hcnkqIG9vLCBXZWJLaXRE
T01EaWN0aW9uYXJ5KiBvb28pOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJv
cjogI0dFcnJvcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb25fd2l0aF9tZXNzYWdlOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9B
UEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb25fd2l0aF9t
ZXNzYWdlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfcHVibGljX2FuZF9wcml2YXRlX21ldGhvZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCi0gKiBAYXJndW1lbnQ6IEEgI2djaGFyCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3B1YmxpY19hbmRfcHJpdmF0ZV9tZXRob2QoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgY29uc3QgZ2NoYXIqIGFyZ3VtZW50KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0
ZV9vYmo6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0
X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmooV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlv
bjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial93aXRo
X3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJv
cioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4
ZWN1dGlvbl9jb250ZXh0OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dChXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9j
b250ZXh0X2FuZF9zY3JpcHRfc3RhdGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3Rh
dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX29ial9leGNl
cHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGVycm9yOiAjR0Vycm9y
Ci0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RP
YmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJy
b3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfZG9jdW1l
bnRfYXJndW1lbnQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3dpdGhfZG9jdW1lbnRfYXJndW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl9kb2N1bWVudF9hcmd1bWVudDoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9jYWxsZXJfZG9j
dW1lbnRfYXJndW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial93aXRoX2NhbGxlcl93aW5kb3dfYXJndW1lbnQ6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfY2FsbGVyX3dpbmRvd19hcmd1bWVu
dChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX2FyZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAb3B0OiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2Fy
ZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBvcHQpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3ZhbHVlOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvcHQ6IEEgI2dsb25nCi0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnX2FuZF9kZWZhdWx0X3ZhbHVlKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF9vcHRpb25hbF9hcmc6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQG5vbk9wdDogQSAjZ2xvbmcKLSAqIEBvcHQ6IEEg
I2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19hbmRfb3B0
aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbk9wdCwgZ2xvbmcgb3B0
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25h
bF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBub25PcHQ6IEEgI2dsb25nCi0gKiBAb3B0MTogQSAjZ2xvbmcKLSAqIEBvcHQyOiBB
ICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX3R3
b19vcHRpb25hbF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbk9wdCwgZ2xv
bmcgb3B0MSwgZ2xvbmcgb3B0Mik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9zdHJpbmc6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHN0cjogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJp
bmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICog
U3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZToKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19hbmRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2F0b21pY19zdHJpbmdfYW5kX2RlZmF1bHRfdmFsdWU6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nX2FuZF9kZWZhdWx0X3Zh
bHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX251bGw6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfbnVsbChXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQ6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICogQHN0cjogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfdW5kZWZpbmVkKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dp
dGhfb3B0aW9uYWxfYXRvbWljX3N0cmluZ19pc19udWxsKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX2VtcHR5X3N0cmluZzoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3N0cmluZ19pc19lbXB0eV9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHN0cik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9vcHRpb25hbF9hdG9taWNfc3RyaW5nX2lzX2VtcHR5X3N0cmluZzoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAc3RyOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX2F0b21pY19zdHJpbmdfaXNfZW1wdHlfc3RyaW5nKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfZG91YmxlX2lzX25hX246Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICogQG51bWJlcjogQSAjZ2RvdWJsZQotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX2RvdWJsZV9pc19uYV9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdkb3VibGUgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93
aXRoX29wdGlvbmFsX2Zsb2F0X2lzX25hX246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICogQG51bWJlcjogQSAjZ2Zsb2F0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9u
YWxfZmxvYXRfaXNfbmFfbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZmxvYXQgbnVtYmVyKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2xvbmdf
bG9uZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNnaW50
NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmcoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2ludDY0IG51bWJlcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybzoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNnaW50NjQKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9sb25nX2xvbmdfaXNfemVybyhXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnaW50NjQgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZzoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKiBAbnVtYmVyOiBBICNndWludDY0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dp
dGhfb3B0aW9uYWxfdW5zaWduZWRfbG9uZ19sb25nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1
aW50NjQgbnVtYmVyKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3Vuc2lnbmVkX2xvbmdfbG9uZ19pc196ZXJvOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RPYmoKLSAqIEBudW1iZXI6IEEgI2d1aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9vcHRpb25hbF91bnNpZ25lZF9sb25nX2xvbmdfaXNfemVybyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBndWludDY0IG51bWJlcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9ib29sZWFuOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBiOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwot
V0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFs
X2Jvb2xlYW4oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gYik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9ib29sZWFuX2lzX2ZhbHNl
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBiOiBBICNnYm9vbGVhbgotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2Jvb2xlYW5faXNfZmFsc2UoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gYik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9vcHRpb25hbF9hbnk6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICogQGE6IEEgI1dlYktpdERPTWFueQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlv
bmFsX2FueShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01hbnkqIGEpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfbnVsbGFibGVfd3Jh
cHBlcjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2JqOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfbnVsbGFibGVfd3Jh
cHBlcihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiBvYmopOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfbnVsbGFibGVf
d3JhcHBlcl9pc19udWxsOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBvYmo6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9u
dWxsYWJsZV93cmFwcGVyX2lzX251bGwoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
VGVzdE9iaiogb2JqKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3hwYXRoX25zX3Jlc29sdmVyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEByZXNvbHZlcjogQSAjV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfeHBhdGhfbnNfcmVzb2x2ZXIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlcik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QxOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Y29uZGl0aW9uYWxfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDI6Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25h
bF9tZXRob2QzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9j
b25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfZW5mb3JjZV9yYW5nZToKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAb2JqQXJnc1Nob3J0OiBBICNndXNob3J0Ci0g
KiBAb2JqQXJnc0xvbmc6IEEgI2d1bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRo
X2VuZm9yY2VfcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCBvYmpBcmdzU2hv
cnQsIGd1bG9uZyBvYmpBcmdzTG9uZyk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9j
b252ZXJ0MToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dl
YktpdERPTVRlc3ROb2RlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NVGVzdE5vZGUqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NvbnZlcnQyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1
ZTogQSAjV2ViS2l0RE9NVGVzdE5vZGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0Tm9kZSogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfY29udmVydDM6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0NDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFi
bGVfcG9pbnRfZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFibGVfcG9pbnRf
ZnVuY3Rpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29yYW5nZToKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRf
QVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21ldGhv
ZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAaGVhZDogQSAjZ2NoYXIKLSAq
IEAuLi46IGxpc3Qgb2YgI2djaGFyIGVuZGVkIGJ5ICVOVUxMLgotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3Zhcmlh
ZGljX3N0cmluZ19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIGhl
YWQsIC4uLik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial92YXJpYWRpY19kb3VibGVf
bWV0aG9kOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBoZWFkOiBBICNnZG91
YmxlCi0gKiBAbl90YWlsOiBudW1iZXIgb2YgdGFpbCB0aGF0IHdpbGwgYmUgcGFzc2VkCi0gKiBA
Li4uOiBsaXN0IG9mICNnZG91YmxlCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfZG91YmxlX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZG91YmxlIGhlYWQsIGd1aW50IG5fdGFpbCwgLi4u
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZhcmlhZGljX25vZGVfbWV0aG9kOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBoZWFkOiBBICNXZWJLaXRET01Ob2Rl
Ci0gKiBALi4uOiBsaXN0IG9mICNXZWJLaXRET01Ob2RlIGVuZGVkIGJ5ICVOVUxMLgotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3ZhcmlhZGljX25vZGVfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTU5vZGUqIGhlYWQsIC4uLik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9hbnk6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQGE6IEEgI2dmbG9hdAotICogQGI6
IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfYW55KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdmbG9h
dCBhLCBnbG9uZyBiKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2F0dGFjaF9zaGFk
b3dfcm9vdDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAaW5pdDogQSAjV2Vi
S2l0RE9NVGVzdERpY3Rpb25hcnkKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9hdHRhY2hfc2hhZG93X3Jvb3QoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdERpY3Rpb25hcnkqIGluaXQpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHI6Ci0gKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0
cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2No
YXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5
X3Rlc3Rfb2JqX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYnl0ZV9hdHRyOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnaW50OAot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnaW50OAotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfYnl0ZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5dGVfYXR0cjoKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dpbnQ4Ci0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5
dGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50OCB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfb2N0ZXRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ3VpbnQ4Ci0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGd1aW50OAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
b2N0ZXRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9vY3RldF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoK
LSAqIEB2YWx1ZTogQSAjZ3VpbnQ4Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X29jdGV0X2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ3VpbnQ4IHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9zaG9ydF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
Ci0gKiBSZXR1cm5zOiBBICNnc2hvcnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ3Nob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBB
ICNnc2hvcnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnc2hvcnQgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2Ns
YW1wZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICog
UmV0dXJuczogQSAjZ3Nob3J0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIGdzaG9ydAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY2xhbXBlZF9zaG9ydF9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2NsYW1wZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KiBAdmFsdWU6IEEgI2dzaG9ydAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jbGFtcGVkX3Nob3J0X2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dzaG9ydAotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnc2hvcnQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2VuZm9yY2VfcmFuZ2Vfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsK
LQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9lbmZvcmNlX3JhbmdlX3Nob3J0X2F0
dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnc2hvcnQK
LSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfZW5mb3JjZV9yYW5nZV9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdzaG9ydCB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfdW5zaWduZWRfc2hvcnRfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KgotICogUmV0dXJuczogQSAjZ3VzaG9ydAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBndXNob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9z
aG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3Vuc2lnbmVkX3Nob3J0X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICogQHZhbHVlOiBBICNndXNob3J0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVk
X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCB2YWx1ZSk7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbG9uZ19hdHRyOgotICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0
eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2xvbmdfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFJldHVybnM6IEEgI2dpbnQ2NAotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoq
LwotV0VCS0lUX0FQSSBnaW50NjQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2xvbmdfbG9uZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
IEB2YWx1ZTogQSAjZ2ludDY0Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ2NCB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2d1aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ2NAotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNndWludDY0Ci0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGd1aW50NjQgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmluZ19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5z
OiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBn
Y2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X29i
al9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cjoKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01U
ZXN0T2JqKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9u
dWxsYWJsZV9vYmpfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X251bGxhYmxlX29ial9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3RfbnVsbGFi
bGVfb2JqX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3RfbnVsbGFibGVfb2JqX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xlbmllbnRfdGVzdF9vYmpfYXR0cjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9s
ZW5pZW50X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfbGVuaWVudF90ZXN0X29ial9hdHRyOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NVGVzdE9iagotICoK
LSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9sZW5pZW50X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3VuZm9yZ2VhYmxlX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5mb3JnZWFibGVf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZzoKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9zdHJpbmdfYXR0cl90cmVhdGluZ19udWxsX2FzX2VtcHR5X3N0cmluZzoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3N0cmluZ19hdHRyX3RyZWF0aW5nX251bGxfYXNfZW1wdHlfc3RyaW5nKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfeG1sX29ial9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
Ci0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF94bWxfb2JqX2F0dHI6Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfY3JlYXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1
cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NyZWF0ZToK
LSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dib29sZWFuCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmlu
Z19hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hh
cioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZs
ZWN0ZWRfc3RyaW5nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZh
bHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cjoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2xvbmcKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Jl
ZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNndWxvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgZ3Vsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZs
ZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQot
LyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdy
YWxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2d1
bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWxvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHI6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnYm9vbGVhbgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9yZWZsZWN0ZWRfdXJsX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoK
LSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3VybF9h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3JlZmxlY3RlZF91cmxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1X
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91cmxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cjoKLSAqIEBzZWxm
OiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRy
OgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5z
dGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVm
bGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0v
KioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxf
YXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25n
Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dib29sZWFuCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9t
X2Jvb2xlYW5fYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI2dib29sZWFuCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3Rv
bV91cmxfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEg
I2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9lbmFibGVkX2F0X3J1bnRpbWVfYXR0cmlidXRlOgotICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfZW5hYmxlZF9hdF9ydW50
aW1lX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2VuYWJsZWRfYXRfcnVudGltZV9hdHRyaWJ1dGUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1
cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQ
SSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjZ2xvbmcKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0
aF9nZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4
Y2VwdGlvbl93aXRoX21lc3NhZ2U6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICog
QHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lU
X0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2Vw
dGlvbl93aXRoX21lc3NhZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0
aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNn
bG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0
RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0
cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagot
ICogQHZhbHVlOiBBICNnbG9uZwotICogQGVycm9yOiAjR0Vycm9yCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb25fd2l0aF9tZXNzYWdlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0
aF9zZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uX3dpdGhfbWVzc2FnZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9u
ZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
IEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0
RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdf
YXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdf
YXR0cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0
dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2Vw
dGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFy
Ci0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dp
dGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0
X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9hbmRfc2V0dGVyX2NhbGxfd2l0aF9h
dHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6
IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGds
b25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX2NhbGxfd2l0aF9hbmRfc2V0dGVyX2Nh
bGxfd2l0aF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmli
dXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3Nj
cmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RP
YmoKLSAqIEBlcnJvcjogI0dFcnJvcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VC
S0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9z
Y3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJy
b3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlczoKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxl
Ci0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3Rh
dGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRf
c3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlczoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2Ny
aXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Njcmlw
dF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NVGVzdE9i
agotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01U
ZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9u
YWxfYXR0cjE6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6
IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGds
b25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRp
b25hbF9hdHRyMToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEg
I2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdsb25nIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9jb25kaXRpb25hbF9hdHRyMjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgot
ICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X2NvbmRpdGlvbmFsX2F0dHIyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
IEB2YWx1ZTogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0
aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjM6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICogQHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25h
bF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICog
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfYW55X2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01hbnkKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0
RE9NYW55Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYW55X2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hbnlfYXR0
cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjV2Vi
S2l0RE9NYW55Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgV2ViS2l0RE9NYW55KiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfY29udGVudF9kb2N1bWVudDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVudAot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1
bWVudCoKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbXV0YWJs
ZV9wb2ludDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01TVkdQb2ludAotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01TVkdQb2ludCoKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8q
KgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludDoKLSAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dlYktpdERPTVNWR1BvaW50Ci0gKgot
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0
RE9NU1ZHUG9pbnQqIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9p
bW11dGFibGVfcG9pbnQ6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJl
dHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NU1ZHUG9pbnQKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
Zik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRhYmxlX3BvaW50Ogot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEB2YWx1ZTogQSAjV2ViS2l0RE9NU1ZH
UG9pbnQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfc3RyYXdiZXJyeToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0g
KgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8K
LVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmF3YmVycnkoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c3RyYXdiZXJyeToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEg
I2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmF3YmVycnkoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2Rlc2Ny
aXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9u
Zwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQ6Ci0gKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9pZDoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFs
dWU6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJ
IHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIHZhbHVlKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9oYXNoOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnY2hhcgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2hhc2goV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcmVwbGFjZWFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2RvdWJsZV9hdHRy
aWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6IEEg
I2dkb3VibGUKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2Rv
dWJsZQotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfZG91YmxlX2F0dHJpYnV0ZShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9udWxsYWJsZV9sb25nX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2xv
bmdfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X251bGxhYmxlX2Jvb2xlYW5fYXR0cmlidXRlOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnYm9vbGVhbgotICoKLSAqIFN0
YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnYm9vbGVhbgotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfbnVsbGFibGVfYm9vbGVhbl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5n
X2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJu
czogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkg
Z2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfYXR0cmlidXRl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTog
VW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
bnVsbGFibGVfbG9uZ19zZXR0YWJsZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7
Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbnVsbGFibGVfbG9uZ19zZXR0YWJs
ZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBB
ICNnbG9uZwotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9sb25nX3NldHRhYmxlX2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfc3RyaW5nX3NldHRhYmxlX2F0dHJpYnV0ZToKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAq
Ci0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251
bGxhYmxlX3N0cmluZ19zZXR0YWJsZV9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdE9iagotICogQHZhbHVlOiBBICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUK
LSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9z
dHJpbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVf
c3RyaW5nX3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEBlcnJvcjog
I0dFcnJvcgotICoKLSAqIFJldHVybnM6IEEgI2dsb25nCi0gKgotICogU3RhYmlsaXR5OiBVbnN0
YWJsZQotKiovCi1XRUJLSVRfQVBJIGdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9udWxs
YWJsZV9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yKiogZXJyb3Ip
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ192YWx1
ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI2dsb25nCi0g
KgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X251bGxhYmxlX3N0cmluZ192YWx1ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0
cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hh
cioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfYXR0
cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3ROb2RlKgotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wdXRfZm9yd2FyZHNfbnVsbGFi
bGVfYXR0cmlidXRlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTVRlc3ROb2RlCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVRlc3ROb2RlKgotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcHV0X2ZvcndhcmRzX251bGxhYmxlX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJp
bmdpZmllcl9hdHRyaWJ1dGU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAq
IFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiovCi1XRUJL
SVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5naWZpZXJfYXR0cmli
dXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3N0cmluZ2lmaWVyX2F0dHJpYnV0ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQotKiov
Ci1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ2lmaWVyX2F0
dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi1H
X0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0j
ZW5kaWYgLyogV2ViS2l0RE9NVGVzdE9ial9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLnN5bWJvbHMg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkN2YxMzIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZChXZWJLaXRET01UZXN0T2JqKikK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9N
VGVzdE9iaiosIGdsb25nLCBjb25zdCBnY2hhciosIFdlYktpdERPTVRlc3RPYmoqKQotZ2ludDgg
d2Via2l0X2RvbV90ZXN0X29ial9ieXRlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKikKLWdpbnQ4
IHdlYmtpdF9kb21fdGVzdF9vYmpfYnl0ZV9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RP
YmoqLCBnaW50OCwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikKLWd1aW50OCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX29jdGV0X21ldGhvZChXZWJLaXRET01UZXN0T2JqKikKLWd1aW50OCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX29jdGV0X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9i
aiosIGd1aW50OCwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdlYmtp
dF9kb21fdGVzdF9vYmpfbG9uZ19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiopCi1nbG9uZyB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2xvbmdfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiwg
Z2xvbmcsIGNvbnN0IGdjaGFyKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2Jq
KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJL
aXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdzKFdl
YktpdERPTVRlc3RPYmoqLCBnbG9uZywgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKikK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9lbnVtX2FyZyhXZWJLaXRET01U
ZXN0T2JqKiwgV2ViS2l0RE9NVGVzdEVudW1UeXBlKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyhX
ZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqLCBXZWJLaXRET01UZXN0T2JqKiwgR0Vycm9y
KiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01U
ZXN0T2JqKiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKikKLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NRGlj
dGlvbmFyeSosIFdlYktpdERPTURpY3Rpb25hcnkqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiwgR0Vycm9yKiopCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChXZWJLaXRET01UZXN0
T2JqKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
c3RhdGVfb2JqKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dp
dGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3Iq
KikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3Rh
dGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiwgR0Vycm9yKiopCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHQoV2ViS2l0RE9NVGVz
dE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZShXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVRlc3RP
YmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5k
X3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikK
LVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyhXZWJLaXRET01UZXN0T2Jq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcoV2Vi
S2l0RE9NVGVzdE9iaiosIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93
aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiwg
Z2xvbmcsIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9v
cHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdlYktpdERPTVRlc3RPYmoqLCBnbG9u
ZywgZ2xvbmcsIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29w
dGlvbmFsX3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqKQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQo
V2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNfbnVsbF9zdHJpbmcoV2ViS2l0RE9NVGVz
dE9iaiosIGNvbnN0IGdjaGFyKikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlv
bmFsX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpf
Y29uZGl0aW9uYWxfbWV0aG9kMihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZChXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdl
YmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfb3B0aW9uYWwoV2ViS2l0RE9NVGVz
dE9iaiosIGdsb25nKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX292ZXJsb2FkZWRfbWV0aG9k
MShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfb3Zl
cmxvYWRlZF9tZXRob2QxKFdlYktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktpdERPTVRl
c3ROb2RlKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRET01UZXN0
T2JqKiwgV2ViS2l0RE9NVGVzdE5vZGUqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZl
cnQ0KFdlYktpdERPTVRlc3RPYmoqLCBXZWJLaXRET01UZXN0Tm9kZSopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfY29udmVydDUoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktpdERPTVRlc3ROb2Rl
KikKLVdlYktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFibGVfcG9pbnRf
ZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01TVkdQb2ludCogd2Via2l0X2Rv
bV90ZXN0X29ial9pbW11dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktpdERPTVRlc3RPYmoqKQotV2ViS2l0
RE9NYm9vbCogd2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24oV2ViS2l0RE9NVGVz
dE9iaiosIGNvbnN0IGdjaGFyKiwgZ2Zsb2F0LCBnbG9uZywgR0Vycm9yKiopCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfdmFyaWFkaWNfc3RyaW5nX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiwg
Y29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfdmFy
aWFkaWNfZG91YmxlX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiwgZ2RvdWJsZSwgZ2RvdWJsZSkK
LXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial92YXJpYWRpY19ub2RlX21ldGhvZChXZWJLaXRET01U
ZXN0T2JqKiwgV2ViS2l0RE9NTm9kZSosIFdlYktpdERPTU5vZGUqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2FueShXZWJLaXRET01UZXN0T2JqKiwgZ2Zsb2F0LCBnbG9uZykKLWdsb25nIHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3N0cmluZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqKQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi1naW50OCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9ieXRlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lk
IHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2J5dGVfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgZ2lu
dDgpCi1ndWludDggd2Via2l0X2RvbV90ZXN0X29ial9nZXRfb2N0ZXRfYXR0cihXZWJLaXRET01U
ZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfb2N0ZXRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiwgZ3VpbnQ4KQotZ3Nob3J0IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Nob3J0
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3No
b3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGdzaG9ydCkKLWd1c2hvcnQgd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0
T2JqKiwgZ3VzaG9ydCkKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqLCBnbG9uZykKLWdpbnQ2NCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiosIGdpbnQ2NCkKLWd1aW50
NjQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdf
bG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqLCBndWludDY0KQotZ2NoYXIqIHdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2No
YXIqKQotV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpf
YXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVz
dF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRE
T01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJL
aXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2Jvb2xlYW4pCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RP
YmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiwgZ2xvbmcpCi1ndWxvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVk
X3Vuc2lnbmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqLCBndWxvbmcpCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZs
ZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqLCBnYm9v
bGVhbikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiwgY29uc3QgZ2NoYXIqKQotZ2NoYXIqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdl
YktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12
b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1nYm9vbGVhbiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKikKLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiosIGdib29sZWFuKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiosIGNvbnN0IGdjaGFyKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0
dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZv
aWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0
cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqLCBnbG9uZywgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3Ry
aW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3Iq
KikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqLCBjb25zdCBnY2hhciopCi1nY2hhciogd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktp
dERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93
aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiosIGNvbnN0IGdjaGFyKiwgR0Vy
cm9yKiopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1X
ZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVj
dXRpb25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShX
ZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2Vz
KFdlYktpdERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiwg
V2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktp
dERPTVRlc3RPYmoqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0
T2JqKiwgV2ViS2l0RE9NVGVzdE9iaiopCi1XZWJLaXRET01UZXN0T2JqKiB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRl
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdE9iaiosIFdlYktpdERPTVRlc3RPYmoqKQotV2ViS2l0RE9NVGVzdE9i
aiogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRf
YW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqLCBHRXJy
b3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9u
X2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RP
YmoqLCBXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVf
d2l0aF9zcGFjZXNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0
YXRlX3dpdGhfc3BhY2VzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgV2ViS2l0RE9NVGVz
dE9iaiopCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShX
ZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9u
YWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqLCBn
bG9uZykKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdl
YktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25h
bF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1XZWJLaXRET01hbnkqIHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2FueV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiosIFdl
YktpdERPTWFueSopCi1XZWJLaXRET01Eb2N1bWVudCogd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
Y29udGVudF9kb2N1bWVudChXZWJLaXRET01UZXN0T2JqKikKLVdlYktpdERPTVNWR1BvaW50KiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqKQot
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RP
YmoqLCBXZWJLaXRET01TVkdQb2ludCopCi1XZWJLaXRET01TVkdQb2ludCogd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqKQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiosIFdl
YktpdERPTVNWR1BvaW50KikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmF3YmVy
cnkoV2ViS2l0RE9NVGVzdE9iaiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmF3
YmVycnkoV2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2Zsb2F0IHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKikKLXZvaWQgd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfc3RyaWN0X2Zsb2F0KFdlYktpdERPTVRlc3RPYmoqLCBnZmxvYXQpCi1nbG9u
ZyB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9kZXNjcmlwdGlvbihXZWJLaXRET01UZXN0T2JqKikK
LWdsb25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2lkKFdlYktpdERPTVRlc3RPYmoqKQotdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1n
Y2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01UZXN0T2JqKikKLWds
b25nIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlcGxhY2VhYmxlX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKikKLWdkb3VibGUgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfZG91
YmxlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X251bGxhYmxlX2xvbmdfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqKQotZ2Jvb2xl
YW4gd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVfYm9vbGVhbl9hdHRyaWJ1dGUoV2Vi
S2l0RE9NVGVzdE9iaiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfbnVsbGFibGVf
c3RyaW5nX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKLWdsb25nIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X251bGxhYmxlX2xvbmdfc2V0dGFibGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RP
YmoqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9sb25nX3NldHRhYmxl
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiwgZ2xvbmcpCi1nbG9uZyB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiosIEdFcnJv
cioqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9udWxsYWJsZV9zdHJpbmdfdmFsdWUo
V2ViS2l0RE9NVGVzdE9iaiosIGdsb25nKQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNGM0ZDllOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRS
dWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfR0VUX1BS
SVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SUywgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM+IGNvcmVPYmplY3Q7Ci19IFdlYktpdERPTVRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTVRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTKHJldCk7Ci0KLSAg
ICByZXR1cm4gd3JhcFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKG9iaik7Ci19Ci0KLVdlYkNv
cmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBjb3JlKFdlYktpdERPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyogd3JhcFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKFdlYkNvcmU6
OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RS
VUNUT1JTKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNU
UlVDVE9SUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycywgd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3Zl
cmxvYWRlZF9jb25zdHJ1Y3RvcnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19HRVRfUFJJVkFURShvYmplY3QpOwotCi0g
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0
ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0
cnVjdG9yc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgR09i
amVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc19w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RS
VUNUT1JTX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3Rv
cnNfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZh
dGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXN0X292
ZXJsb2FkZWRfY29uc3RydWN0b3JzX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfZmluYWxpemU7
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9y
c19pbml0KFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiByZXF1ZXN0KQotewot
ICAgIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19HRVRfUFJJVkFURShyZXF1ZXN0
KTsKLSAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJp
dmF0ZSgpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIw
Y2Q4Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc19oCi0jZGVmaW5lIFdlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzX2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNF
X1VOU1RBQkxFX0FQSQotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMtdW5zdGFibGUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTICAgICAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc19nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURF
RF9DT05TVFJVQ1RPUlMsIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKSkKLSNk
ZWZpbmUgV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9U
RVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTLCBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUkxPQURFRF9DT05T
VFJVQ1RPUlMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMpKQotI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZF
UkxPQURFRF9DT05TVFJVQ1RPUlMpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURF
RF9DT05TVFJVQ1RPUlNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlMsIFdl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIHsKLSAgICBXZWJLaXRET01PYmplY3QgcGFy
ZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc0NsYXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19
OwotCi1XRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1
Y3RvcnNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5z
eW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuc3ltYm9scwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1ByaXZhdGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA3NDRhMi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAg
QEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2gKLQotI2luY2x1ZGUgIlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHdyYXBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhXZWJD
b3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyopOwotV2ViS2l0RE9NVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMqIGtpdChXZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyop
OwotV2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGNvcmUoV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLyogV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDU5ODU0MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgiCi0KLSNpbmNs
dWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3Rh
dGUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZF
UkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRV9HRVRfUFJJVkFURShvYmopIEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX09WRVJMT0FE
RURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZSB7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlPiBjb3Jl
T2JqZWN0OwotfSBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZVByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSoga2l0KFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2Jq
KSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9S
U19XSVRIX1NFUVVFTkNFKHJldCk7Ci0KLSAgICByZXR1cm4gd3JhcFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiBjb3JlKFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlKiByZXF1ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1X
ZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSogd3JhcFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKFdlYkNvcmU6OlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKiBjb3JlT2JqZWN0KQotewotICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNU
T1JTX1dJVEhfU0VRVUVOQ0UoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX09WRVJM
T0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5FX1RZ
UEUoV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UsIHdlYmtp
dF9kb21fdGVzdF9vdmVybG9hZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlLCBXRUJLSVRf
RE9NX1RZUEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRl
ZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhf
U0VRVUVOQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRE
T01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUoKTsKLSAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRlZF9jb25zdHJ1Y3RvcnNfd2l0
aF9zZXF1ZW5jZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMg
R09iamVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dpdGhfc2Vx
dWVuY2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAg
R09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X292ZXJsb2Fk
ZWRfY29uc3RydWN0b3JzX3dpdGhfc2VxdWVuY2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQot
ICAgIFdlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NF
UVVFTkNFX0dFVF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKj4o
V0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICBy
ZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRl
ZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9jbGFzc19pbml0KFdlYktpdERPTVRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAg
ICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7Ci0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdl
YktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZSkpOwot
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcmxvYWRl
ZF9jb25zdHJ1Y3RvcnNfd2l0aF9zZXF1ZW5jZV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dp
dGhfc2VxdWVuY2VfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9v
dmVybG9hZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlX2luaXQoV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0
RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0VfR0VU
X1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzOGJkNTQu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaAorKysg
L2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVu
Y2VfaAotI2RlZmluZSBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZV9oCi0KLSNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKLQotI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgot
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+Ci0KLUdfQkVH
SU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNU
UlVDVE9SU19XSVRIX1NFUVVFTkNFICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vdmVybG9h
ZGVkX2NvbnN0cnVjdG9yc193aXRoX3NlcXVlbmNlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UsIFdlYktpdERPTVRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKSkKLSNkZWZpbmUgV0VCS0lUX0RP
TV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0VfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRSwgV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RP
TV9JU19URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0Uob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RF
U1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRSkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX09WRVJMT0FERURfQ09OU1RSVUNUT1JTX1dJVEhfU0VRVUVOQ0UpKQotI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfT1ZFUkxPQURFRF9DT05TVFJVQ1RPUlNfV0lUSF9TRVFVRU5DRV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfVEVTVF9PVkVSTE9BREVEX0NPTlNUUlVDVE9SU19XSVRIX1NFUVVFTkNFLCBXZWJLaXRE
T01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNsYXNzKSkKLQotc3RydWN0
IF9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSB7Ci0gICAg
V2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0RE9N
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDbGFzcyB7Ci0gICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotV0VCS0lUX0FQSSBHVHlwZQotd2Vi
a2l0X2RvbV90ZXN0X292ZXJsb2FkZWRfY29uc3RydWN0b3JzX3dpdGhfc2VxdWVuY2VfZ2V0X3R5
cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNU
QUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T3ZlcnJpZGVCdWlsdGlucy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMDA2
YmYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTE2ICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oIgot
Ci0jaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVp
bHRpbnNQcml2YXRlLmgiCi0jaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgi
Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlNfR0VUX1BSSVZBVEUob2JqKSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVS
UklERV9CVUlMVElOUywgV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlKQotCi10
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlIHsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnM+IGNvcmVPYmplY3Q7Ci19IFdl
YktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJy
aWRlQnVpbHRpbnMqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQotICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TKHJldCk7Ci0KLSAgICBy
ZXR1cm4gd3JhcFRlc3RPdmVycmlkZUJ1aWx0aW5zKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RP
dmVycmlkZUJ1aWx0aW5zKiBjb3JlKFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiByZXF1
ZXN0KQotewotICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92
ZXJyaWRlQnVpbHRpbnMqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOwotfQotCi1XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucyogd3JhcFRlc3RPdmVycmlk
ZUJ1aWx0aW5zKFdlYkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKiBjb3JlT2JqZWN0KQotewot
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX09WRVJS
SURFX0JVSUxUSU5TKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9PVkVSUklERV9C
VUlMVElOUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0T3ZlcnJpZGVC
dWlsdGlucywgd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zLCBXRUJLSVRfRE9NX1RZ
UEVfT0JKRUNUKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRp
bnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RPdmVycmlk
ZUJ1aWx0aW5zUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9PVkVSUklERV9CVUlMVElO
U19HRVRfUFJJVkFURShvYmplY3QpOwotCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9y
Z2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotCi0gICAgcHJpdi0+fldlYktpdERPTVRlc3RP
dmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF9vdmVycmlkZV9idWlsdGluc19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwot
fQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9idWlsdGlu
c19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVp
bHRpbnNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TX0dF
VF9QUklWQVRFKG9iamVjdCk7Ci0gICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+
Y29yZU9iamVjdCk7Ci0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCksIG9iamVjdCk7Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNfY2xhc3NfaW5pdChXZWJLaXRE
T01UZXN0T3ZlcnJpZGVCdWlsdGluc0NsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01U
ZXN0T3ZlcnJpZGVCdWlsdGluc1ByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVj
dG9yID0gd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX2NvbnN0cnVjdG9yOwotICAg
IGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRp
bnNfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9i
dWlsdGluc19pbml0KFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiByZXF1ZXN0KQotewot
ICAgIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fVEVTVF9PVkVSUklERV9CVUlMVElOU19HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBuZXcg
KHByaXYpIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZSgpOwotfQotCi1XZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNfbmFtZWRfaXRlbShX
ZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucyogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCi17
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9PVkVSUklERV9CVUlMVElOUyhzZWxmKSwg
MCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVz
dE92ZXJyaWRlQnVpbHRpbnMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV1RGOjpT
dHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5h
bWVkSXRlbShjb252ZXJ0ZWROYW1lKSk7Ci0gICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJyaWRlQnVpbHRpbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY5NTRiNC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUg
KzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJLaXRE
T01UZXN0T3ZlcnJpZGVCdWlsdGluc19oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1
aWx0aW5zX2gKLQotI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQotCi0jaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+
Ci0jaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KLQotR19C
RUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX09WRVJSSURFX0JVSUxU
SU5TICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vdmVycmlkZV9idWlsdGluc19nZXRfdHlw
ZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMsIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX09WRVJSSURFX0JVSUxUSU5TX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNU
X09WRVJSSURFX0JVSUxUSU5TLCBXZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGluc0NsYXNzKQot
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
T1ZFUlJJREVfQlVJTFRJTlMpKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUlJJREVf
QlVJTFRJTlNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlMpKQotI2RlZmluZSBXRUJLSVRf
RE9NX1RFU1RfT1ZFUlJJREVfQlVJTFRJTlNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfT1ZFUlJJREVfQlVJTFRJ
TlMsIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zQ2xhc3MpKQotCi1zdHJ1Y3QgX1dlYktp
dERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zIHsKLSAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGluc0NsYXNz
IHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRf
QVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGVfYnVpbHRpbnNfZ2V0X3R5cGUodm9p
ZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX25hbWVkX2l0
ZW06Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMKLSAqIEBuYW1l
OiBBICNnY2hhcgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9N
Tm9kZQotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRE
T01Ob2RlKgotd2Via2l0X2RvbV90ZXN0X292ZXJyaWRlX2J1aWx0aW5zX25hbWVkX2l0ZW0oV2Vi
S2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnMqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsKLQot
R19FTkRfREVDTFMKLQotI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwot
I2VuZGlmIC8qIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRlQnVpbHRpbnNQcml2YXRlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNWNhNTIuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJyaWRlQnVpbHRpbnNQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0v
KgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RPdmVy
cmlkZUJ1aWx0aW5zUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0
aW5zUHJpdmF0ZV9oCi0KLSNpbmNsdWRlICJUZXN0T3ZlcnJpZGVCdWlsdGlucy5oIgotI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0T3ZlcnJpZGVCdWlsdGlucy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RPdmVycmlkZUJ1aWx0aW5zKiB3cmFwVGVzdE92ZXJy
aWRlQnVpbHRpbnMoV2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqKTsKLVdlYktpdERPTVRl
c3RPdmVycmlkZUJ1aWx0aW5zKiBraXQoV2ViQ29yZTo6VGVzdE92ZXJyaWRlQnVpbHRpbnMqKTsK
LVdlYkNvcmU6OlRlc3RPdmVycmlkZUJ1aWx0aW5zKiBjb3JlKFdlYktpdERPTVRlc3RPdmVycmlk
ZUJ1aWx0aW5zKik7Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8qIFdlYktpdERP
TVRlc3RPdmVycmlkZUJ1aWx0aW5zUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzNiM2QzLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjgwICswLDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUuaCIKLSNpbmNsdWRlICJn
b2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9TRVJJQUxJ
WkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVEX1NDUklQ
VF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUgewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZT4gY29yZU9iamVjdDsKLSNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi19IFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcml2YXRlOwotCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIG9iaikKLXsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQot
ICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lO
VEVSRkFDRShyZXQpOwotCi0gICAgcmV0dXJuIHdyYXBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKG9iaik7Ci19Ci0KLVdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwotfQotCi1XZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiB3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlT2JqZWN0
KQotewotICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKLSAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNU
X1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFLCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCi1H
X0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Us
IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2UsIFdFQktJ
VF9ET01fVFlQRV9PQkpFQ1QpCi0KLWVudW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX1ZBTFVF
LAotICAgIFBST1BfUkVBRE9OTFlfVkFMVUUsCi0gICAgUFJPUF9DQUNIRURfVkFMVUUsCi0gICAg
UFJPUF9DQUNIRURfUkVBRE9OTFlfVkFMVUUsCi19OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxV
RV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwotI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBwcml2LT5+V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJp
YWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17
Ci0gICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiA9
IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uob2JqZWN0
KTsKLQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9WQUxVRToKLSAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9SRUFET05MWV9WQUxVRToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2dldF9yZWFkb25seV92YWx1ZShzZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9DQUNIRURfVkFMVUU6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVk
X3ZhbHVlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBQ0hFRF9SRUFE
T05MWV9WQUxVRToKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9u
bHlfdmFsdWUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIEdPYmplY3QqIHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfY29uc3RydWN0b3IoR1R5
cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0
UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCogb2JqZWN0ID0gR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVy
ZmFjZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLSAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVEX1NDUklQ
VF9WQUxVRV9JTlRFUkZBQ0VfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBwcml2LT5jb3JlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwotICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOwot
I2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBy
ZXR1cm4gb2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZSkpOwotICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFs
dWVfaW50ZXJmYWNlX2NvbnN0cnVjdG9yOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2ZpbmFsaXpl
OwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAg
IFBST1BfVkFMVUUsCi0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAi
dmFsdWUiLAotICAgICAgICAgICAgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6
dmFsdWUiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTp2YWx1ZSIsCi0gICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU0VS
SUFMSVpFRF9TQ1JJUFRfVkFMVUUsCi0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgUFJPUF9SRUFET05MWV9WQUxVRSwKLSAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKLSAgICAgICAgICAgICJyZWFkb25seS12YWx1ZSIsCi0gICAgICAgICAgICAi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTpyZWFkb25seS12YWx1ZSIsCi0gICAg
ICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOnJlYWRvbmx5LXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TRVJJQUxJ
WkVEX1NDUklQVF9WQUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwot
Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENs
YXNzLAotICAgICAgICBQUk9QX0NBQ0hFRF9WQUxVRSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKLSAgICAgICAgICAgICJjYWNoZWQtdmFsdWUiLAotICAgICAgICAgICAgIlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVkLXZhbHVlIiwKLSAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2NoYXIqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVk
LXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TRVJJQUxJWkVEX1NDUklQVF9W
QUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAg
ICBQUk9QX0NBQ0hFRF9SRUFET05MWV9WQUxVRSwKLSAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKLSAgICAgICAgICAgICJjYWNoZWQtcmVhZG9ubHktdmFsdWUiLAotICAgICAgICAgICAgIlRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Y2FjaGVkLXJlYWRvbmx5LXZhbHVlIiwK
LSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6Y2FjaGVkLXJlYWRvbmx5LXZhbHVlIiwKLSAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRSwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOwotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfaW5pdChXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX1NFUklB
TElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKLSAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2
YXRlKCk7Ci19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFs
dWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRURfU0NSSVBU
X1ZBTFVFX0lOVEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWx1ZSgpLT50b1N0cmluZygp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0g
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwot
fQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZh
Y2Vfc2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRURf
U0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRWYWx1ZShXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpKSk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUp
OwotICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotZ2NoYXIq
IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3Jl
YWRvbmx5X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5U
RVJGQUNFKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnJlYWRvbmx5VmFsdWUoKS0+dG9TdHJpbmcoKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGYpOwotICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQotICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQotICAgIHJldHVybiAwOwot
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0K
LQotZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZh
Y2VfZ2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRURfU0NSSVBUX1ZB
TFVFX0lOVEVSRkFDRShzZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jYWNoZWRWYWx1ZSgpLT50b1N0cmlu
ZygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7
Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCi0gICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCi0gICAgcmV0dXJu
IDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAq
LwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9T
RVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uoc2VsZikpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q2FjaGVkVmFs
dWUoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKSkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJD
b25kaXRpb24xIikKLSAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yIikKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
ICovCi19Ci0KLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVf
aW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9TRVJJ
QUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Uoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y2FjaGVk
UmVhZG9ubHlWYWx1ZSgpLT50b1N0cmluZygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oc2VsZik7Ci0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiQ29uZGl0aW9uMSIpCi0gICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMiIpCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjZhNjkuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICsw
LDAgQEAKLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgotICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZV9oCi0jZGVmaW5lIFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VfaAotCi0jaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFICAgICAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3R5
cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lO
VEVSRkFDRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0Us
IFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpKQotI2RlZmluZSBX
RUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRSwgV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lT
X1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX1NFUklB
TElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSVNfVEVT
VF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpF
RF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1NFUklB
TElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVEX1ND
UklQVF9WQUxVRV9JTlRFUkZBQ0UsIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKLX07
Ci0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNs
YXNzIHsKLSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJL
SVRfQVBJIEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50
ZXJmYWNlX2dldF90eXBlKHZvaWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKLSAqCi0gKiBSZXR1cm5zOiBB
ICNnY2hhcgotICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnY2hh
cioKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0
X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYp
OwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2Vfc2V0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6
ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9zZXRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKLQotLyoq
Ci0gKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dl
dF9yZWFkb25seV92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZShXZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKTsKLQotLyoqCi0g
KiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9j
YWNoZWRfdmFsdWU6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZQotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5
OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92
YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlCi0gKiBAdmFsdWU6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAq
IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2Nh
Y2hlZF9yZWFkb25seV92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlf
dmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZik7
Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkg
Ki8KLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uuc3ltYm9s
cyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uuc3ltYm9scwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjE1ZjE3My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLnN5bWJvbHMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVdl
YktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRf
c2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSopCi12b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Nj
cmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqKQotV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZShXZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKikKLVdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9n
ZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX3NldF9jYWNoZWRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSosIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopCi1XZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWY1MGNiLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRl
X2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
aXZhdGVfaAotCi0jaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5o
IgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmg+Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIHdyYXBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqKTsKLVdlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7Ci1XZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBjb3JlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqKTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dFN1cHBsZW1lbnRhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDA1MmMwNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVk
IGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRh
bC5oIGFuZAotICAgIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZv
ciBUZXN0U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBz
Y3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwu
aCBhbmQKLSAgICBXZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBidWlsZC4g
VGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dFN1cHBsZW1lbnRhbC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDUyYzA1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDYgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3Qg
dG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NVGVzdFN1cHBsZW1lbnRhbC5oIGFu
ZAotICAgIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuY3BwIGFyZSBjcmVhdGVkIGZvciBUZXN0
U3VwcGxlbWVudGFsLmlkbCwgYW5kIHRodXMKLSAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRz
IGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuaCBhbmQK
LSAgICBXZWJLaXRET01UZXN0U3VwcGxlbWVudGFsLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBm
aWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCi0qLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RUeXBlZGVmcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1
OTc0ODUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5
NCArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgiCi0KLSNpbmNsdWRlICJD
U1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIK
LSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NU1ZHUG9pbnRQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJpdmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29u
dmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1RZUEVERUZTX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfVFlQRURFRlMsIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUpCi0KLXR5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlIHsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdFR5cGVkZWZzPiBjb3JlT2JqZWN0OwotfSBXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2
YXRlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBraXQo
V2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2Jq
KSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9UWVBFREVGUyhyZXQpOwotCi0gICAg
cmV0dXJuIHdyYXBUZXN0VHlwZWRlZnMob2JqKTsKLX0KLQotV2ViQ29yZTo6VGVzdFR5cGVkZWZz
KiBjb3JlKFdlYktpdERPTVRlc3RUeXBlZGVmcyogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RUeXBlZGVmcyo+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTVRlc3RUeXBlZGVm
cyogd3JhcFRlc3RUeXBlZGVmcyhXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGNvcmVPYmplY3QpCi17
Ci0gICAgQVNTRVJUKGNvcmVPYmplY3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfVFlQ
RURFRlMoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTLCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RUeXBlZGVmcywgd2Via2l0X2RvbV90ZXN0
X3R5cGVkZWZzLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQotCi1lbnVtIHsKLSAgICBQUk9QXzAs
Ci0gICAgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKLSAgICBQUk9QX0lNTVVUQUJMRV9T
RVJJQUxJWkVEX1NDUklQVF9WQUxVRSwKLSAgICBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBU
SU9OLAotICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9TVFJJ
TkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9TVFJJTkdfQVRUUl9XSVRI
X1NFVFRFUl9FWENFUFRJT04sCi19OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlw
ZWRlZnNfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTVRlc3RUeXBl
ZGVmc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfVFlQRURFRlNfR0VUX1BSSVZBVEUo
b2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRl
KCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF90eXBlZGVmc19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRE
T01UZXN0VHlwZWRlZnMqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfVFlQRURFRlMob2JqZWN0KTsK
LQotICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9MT05H
X0xPTkdfQVRUUjoKLSAgICAgICAgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25l
ZF9sb25nX2xvbmdfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF91aW50NjQodmFsdWUpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgotICAg
ICAgICB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgICAgICB3ZWJraXRfZG9t
X3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIGdfdmFs
dWVfZ2V0X2xvbmcodmFsdWUpLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQ
Uk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICAgICAgd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX3NldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UFJPUF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgICAgIHdlYmtpdF9k
b21fdGVzdF90eXBlZGVmc19zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQotewotICAgIFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZiA9IFdFQktJVF9ET01fVEVT
VF9UWVBFREVGUyhvYmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2Fz
ZSBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSOgotICAgICAgICBnX3ZhbHVlX3NldF91aW50
NjQodmFsdWUsIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfdW5zaWduZWRfbG9uZ19sb25n
X2F0dHIoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU1NVVRBQkxFX1NF
UklBTElaRURfU0NSSVBUX1ZBTFVFOgotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfaW1tdXRhYmxlX3NlcmlhbGl6ZWRfc2NyaXB0
X3ZhbHVlKHNlbGYpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9H
RVRURVJfRVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKHNlbGYsIG51
bGxwdHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJf
RVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3RfdHlwZWRlZnNfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKHNlbGYpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElP
TjoKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oc2VsZiwgbnVsbHB0
cikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRU
RVJfRVhDRVBUSU9OOgotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihz
ZWxmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQotewotICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF90eXBlZGVm
c19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwotCi0gICAgV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9UWVBFREVGU19HRVRfUFJJVkFURShvYmplY3Qp
OwotICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0VHlwZWRl
ZnMqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQot
ICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF90eXBl
ZGVmc19jbGFzc19pbml0KFdlYktpdERPTVRlc3RUeXBlZGVmc0NsYXNzKiByZXF1ZXN0Q2xhc3Mp
Ci17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOwotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlKSk7Ci0gICAgZ29iamVjdENsYXNzLT5j
b25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19jb25zdHJ1Y3RvcjsKLSAgICBn
b2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2ZpbmFsaXpl
OwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fdGVzdF90eXBlZGVmc19nZXRfcHJvcGVydHk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfVU5T
SUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgICAgIGdfcGFyYW1fc3BlY191aW50NjQoCi0gICAg
ICAgICAgICAidW5zaWduZWQtbG9uZy1sb25nLWF0dHIiLAotICAgICAgICAgICAgIlRlc3RUeXBl
ZGVmczp1bnNpZ25lZC1sb25nLWxvbmctYXR0ciIsCi0gICAgICAgICAgICAicmVhZC13cml0ZSBn
dWludDY0IFRlc3RUeXBlZGVmczp1bnNpZ25lZC1sb25nLWxvbmctYXR0ciIsCi0gICAgICAgICAg
ICAwLCBHX01BWFVJTlQ2NCwgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgUFJPUF9JTU1VVEFCTEVfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUUs
Ci0gICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCi0gICAgICAgICAgICAiaW1tdXRhYmxlLXNl
cmlhbGl6ZWQtc2NyaXB0LXZhbHVlIiwKLSAgICAgICAgICAgICJUZXN0VHlwZWRlZnM6aW1tdXRh
YmxlLXNlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2No
YXIqIFRlc3RUeXBlZGVmczppbW11dGFibGUtc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUiLAotICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFLAotICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0KLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAotICAgICAgICBnb2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1BfQVRUUl9X
SVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAotICAgICAg
ICAgICAgImF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJUZXN0VHlw
ZWRlZnM6YXR0ci13aXRoLWdldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2xvbmcgVGVzdFR5cGVkZWZzOmF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAg
ICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAg
ICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBU
SU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKLSAgICAgICAgICAgICJhdHRyLXdpdGgt
c2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiVGVzdFR5cGVkZWZzOmF0dHItd2l0aC1z
ZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIFRlc3RUeXBl
ZGVmczphdHRyLXdpdGgtc2V0dGVyLWV4Y2VwdGlvbiIsCi0gICAgICAgICAgICBHX01JTkxPTkcs
IEdfTUFYTE9ORywgMCwKLSAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLQot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCi0gICAgICAgIGdvYmplY3RDbGFz
cywKLSAgICAgICAgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAic3RyaW5nLWF0dHItd2l0aC1n
ZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJUZXN0VHlwZWRlZnM6c3RyaW5nLWF0dHIt
d2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBU
ZXN0VHlwZWRlZnM6c3RyaW5nLWF0dHItd2l0aC1nZXR0ZXItZXhjZXB0aW9uIiwKLSAgICAgICAg
ICAgICIiLAotICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAg
ICAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKLSAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKLSAgICAgICAgICAgICJzdHJpbmctYXR0ci13aXRoLXNldHRlci1l
eGNlcHRpb24iLAotICAgICAgICAgICAgIlRlc3RUeXBlZGVmczpzdHJpbmctYXR0ci13aXRoLXNl
dHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RUeXBl
ZGVmczpzdHJpbmctYXR0ci13aXRoLXNldHRlci1leGNlcHRpb24iLAotICAgICAgICAgICAgIiIs
Ci0gICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLX0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2luaXQoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBy
ZXF1ZXN0KQotewotICAgIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RFU1RfVFlQRURFRlNfR0VUX1BSSVZBVEUocmVxdWVzdCk7Ci0gICAgbmV3IChwcml2
KSBXZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlKCk7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90
ZXN0X3R5cGVkZWZzX3NldF9zaGFkb3coV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBnZmxv
YXQgd2lkdGgsIGdmbG9hdCBoZWlnaHQsIGdmbG9hdCBibHVyLCBjb25zdCBnY2hhciogY29sb3Is
IGdmbG9hdCBhbHBoYSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2Vs
ZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29sb3IpOwotICAgIFdlYkNvcmU6OlRlc3RUeXBl
ZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRDb2xvciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb2xvcik7Ci0gICAgaXRlbS0+c2V0U2hh
ZG93KHdpZHRoLCBoZWlnaHQsIGJsdXIsIGNvbnZlcnRlZENvbG9yLCBhbHBoYSk7Ci19Ci0KLVdl
YktpdERPTVNWR1BvaW50KiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfaW1tdXRhYmxlX3BvaW50
X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX1RZUEVERUZTKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlw
ZWRlZnMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNW
R1BvaW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnRG
dW5jdGlvbigpKTsKLSAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX21ldGhvZF93aXRoX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bCghZXJyb3IgfHwgISplcnJvcik7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotZ3VpbnQ2NCB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERP
TVRlc3RUeXBlZGVmcyogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZ
UEVERUZTKHNlbGYpLCAwKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT51bnNpZ25lZExvbmdM
b25nQXR0cigpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0
X3R5cGVkZWZzX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0VHlwZWRl
ZnMqIHNlbGYsIGd1aW50NjQgdmFsdWUpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZ
UEVERUZTKHNlbGYpKTsKLSAgICBXZWJDb3JlOjpUZXN0VHlwZWRlZnMqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodmFsdWUpOwot
fQotCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9pbW11dGFibGVfc2VyaWFs
aXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmKQotewotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6
OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0
VmFsdWUoKS0+dG9TdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2ltbXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZShXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUo
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKSkpOwotfQotCi1nbG9uZyB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2F0
dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2VsZiwgR0Vy
cm9yKiogZXJyb3IpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhz
ZWxmKSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDAp
OwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9hdHRyX3dpdGhfZ2V0dGVy
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGdsb25nIHZhbHVlKQotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgV2ViQ29yZTo6
VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKHZhbHVlKTsKLX0KLQotZ2xvbmcgd2Via2l0X2RvbV90ZXN0
X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlw
ZWRlZnMqIHNlbGYpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9UWVBFREVGUyhz
ZWxmKSwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRl
ZnNfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyog
c2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKQotewotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfVEVTVF9UWVBFREVGUyhzZWxmKSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvcik7Ci0gICAgV2ViQ29yZTo6VGVzdFR5cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNl
dEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1RZUEVERUZTKHNlbGYpLCAwKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Ci0gICAgV2ViQ29yZTo6VGVzdFR5
cGVkZWZzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dp
dGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVm
cyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0U3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oY29udmVydGVkVmFsdWUpOwotfQotCi1nY2hhciogd2Vi
a2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRp
b24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1RFU1RfVFlQRURFRlMoc2VsZiksIDApOwotICAgIFdlYkNvcmU6OlRlc3RUeXBlZGVmcyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc3Ry
aW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RFU1RfVFlQRURFRlMoc2VsZikpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOwotICAgIFdlYkNvcmU6
OlRlc3RUeXBlZGVmcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oY29udmVydGVkVmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RUeXBlZGVmcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQwMDUyMjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwy
MTggKzAsMCBAQAotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCi0gKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBXZWJL
aXRET01UZXN0VHlwZWRlZnNfaAotI2RlZmluZSBXZWJLaXRET01UZXN0VHlwZWRlZnNfaAotCi0j
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCi0KLSNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0K
LSNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfVFlQRURFRlMgICAgICAgICAgICAod2Via2l0
X2RvbV90ZXN0X3R5cGVkZWZzX2dldF90eXBlKCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9U
WVBFREVGUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9UWVBFREVGUywgV2ViS2l0RE9NVGVzdFR5cGVkZWZzKSkK
LSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1RZUEVERUZTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZT
LCBXZWJLaXRET01UZXN0VHlwZWRlZnNDbGFzcykKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X1RZUEVERUZTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19U
RVNUX1RZUEVERUZTX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9U
RVNUX1RZUEVERUZTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1RZUEVERUZTLCBXZWJLaXRET01UZXN0VHlwZWRl
ZnNDbGFzcykpCi0KLXN0cnVjdCBfV2ViS2l0RE9NVGVzdFR5cGVkZWZzIHsKLSAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOwotfTsKLQotc3RydWN0IF9XZWJLaXRET01UZXN0VHlw
ZWRlZnNDbGFzcyB7Ci0gICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsK
LQotV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF90eXBlKHZv
aWQpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc2hhZG93OgotICog
QHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQHdpZHRoOiBBICNnZmxvYXQKLSAq
IEBoZWlnaHQ6IEEgI2dmbG9hdAotICogQGJsdXI6IEEgI2dmbG9hdAotICogQGNvbG9yOiBBICNn
Y2hhcgotICogQGFscGhhOiBBICNnZmxvYXQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9zaGFkb3co
V2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBnZmxvYXQgd2lkdGgsIGdmbG9hdCBoZWlnaHQs
IGdmbG9hdCBibHVyLCBjb25zdCBnY2hhciogY29sb3IsIGdmbG9hdCBhbHBoYSk7Ci0KLS8qKgot
ICogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbjoKLSAq
IEBzZWxmOiBBICNXZWJLaXRET01UZXN0VHlwZWRlZnMKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTVNWR1BvaW50Ci0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNl
bGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19tZXRob2Rfd2l0aF9leGNl
cHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFR5cGVkZWZzCi0gKiBAZXJyb3I6ICNH
RXJyb3IKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgdm9pZAot
d2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9t
X3Rlc3RfdHlwZWRlZnNfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RUeXBlZGVmcwotICoKLSAqIFJldHVybnM6IEEgI2d1aW50NjQKLSAqCi0g
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ3VpbnQ2NAotd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX2dldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0
VHlwZWRlZnMqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRf
dW5zaWduZWRfbG9uZ19sb25nX2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzCi0gKiBAdmFsdWU6IEEgI2d1aW50NjQKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25l
ZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGd1aW50NjQgdmFs
dWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfaW1tdXRhYmxlX3Nl
cmlhbGl6ZWRfc2NyaXB0X3ZhbHVlOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVm
cwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmlsaXR5OiBVbnN0YWJsZQot
KiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9pbW11
dGFibGVfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxm
KTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2ltbXV0YWJsZV9zZXJp
YWxpemVkX3NjcmlwdF92YWx1ZToKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0VHlwZWRlZnMK
LSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9pbW11dGFibGVfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfYXR0
cl93aXRoX2dldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzCi0gKiBAZXJyb3I6ICNHRXJyb3IKLSAqCi0gKiBSZXR1cm5zOiBBICNnbG9uZwotICoKLSAq
IFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSBnbG9uZwotd2Via2l0X2RvbV90
ZXN0X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rl
c3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQHZhbHVlOiBBICNnbG9uZwotICoKLSAqIFN0YWJp
bGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3RfdHlw
ZWRlZnNfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVm
cyogc2VsZiwgZ2xvbmcgdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVm
c19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb246Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdFR5cGVkZWZzCi0gKgotICogUmV0dXJuczogQSAjZ2xvbmcKLSAqCi0gKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCi0qKi8KLVdFQktJVF9BUEkgZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF90eXBlZGVm
c19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBz
ZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICog
QHZhbHVlOiBBICNnbG9uZwotICogQGVycm9yOiAjR0Vycm9yCi0gKgotICogU3RhYmlsaXR5OiBV
bnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19z
ZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxm
LCBnbG9uZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVz
dF90eXBlZGVmc19nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RUeXBlZGVmcwotICogQGVycm9yOiAjR0Vycm9yCi0gKgotICog
UmV0dXJuczogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0qKi8KLVdFQktJ
VF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmluZ19hdHRyX3dp
dGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIEdFcnJvcioq
IGVycm9yKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19h
dHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0VHlw
ZWRlZnMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqCi0gKiBTdGFiaWxpdHk6IFVuc3RhYmxlCi0q
Ki8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9zdHJpbmdf
YXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19n
ZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uOgotICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RUeXBlZGVmcwotICoKLSAqIFJldHVybnM6IEEgI2djaGFyCi0gKgotICogU3RhYmls
aXR5OiBVbnN0YWJsZQotKiovCi1XRUJLSVRfQVBJIGdjaGFyKgotd2Via2l0X2RvbV90ZXN0X3R5
cGVkZWZzX2dldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dFR5cGVkZWZzKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfc2V0
X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0VHlwZWRlZnMKLSAqIEB2YWx1ZTogQSAjZ2NoYXIKLSAqIEBlcnJvcjogI0dFcnJvcgot
ICoKLSAqIFN0YWJpbGl0eTogVW5zdGFibGUKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRf
ZG9tX3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0VHlwZWRlZnMqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiog
ZXJyb3IpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdFR5cGVkZWZzX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RUeXBlZGVmcy5zeW1ib2xzIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJiOTU4NzQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzLnN5bWJvbHMK
KysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBl
ZGVmc19mdW5jKFdlYktpdERPTVRlc3RUeXBlZGVmcyosIFdlYktpdERPTWxvbmdbXSopCi12b2lk
IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc2hhZG93KFdlYktpdERPTVRlc3RUeXBlZGVm
cyosIGdmbG9hdCwgZ2Zsb2F0LCBnZmxvYXQsIGNvbnN0IGdjaGFyKiwgZ2Zsb2F0KQotdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfbnVsbGFibGVfYXJyYXlfYXJnKFdlYktpdERPTVRlc3RU
eXBlZGVmcyosIFdlYktpdERPTURPTVN0cmluZ1tdKikKLVdlYktpdERPTVNWR1BvaW50KiB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfaW1tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRl
c3RUeXBlZGVmcyopCi1XZWJLaXRET01ET01TdHJpbmdbXSogd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX3N0cmluZ19hcnJheV9mdW5jdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqLCBXZWJLaXRE
T01ET01TdHJpbmdbXSosIEdFcnJvcioqKQotV2ViS2l0RE9NRE9NU3RyaW5nW10qIHdlYmtpdF9k
b21fdGVzdF90eXBlZGVmc19zdHJpbmdfYXJyYXlfZnVuY3Rpb24yKFdlYktpdERPTVRlc3RUeXBl
ZGVmcyosIFdlYktpdERPTURPTVN0cmluZ1tdKiwgR0Vycm9yKiopCi12b2lkIHdlYmtpdF9kb21f
dGVzdF90eXBlZGVmc19tZXRob2Rfd2l0aF9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZz
KiwgR0Vycm9yKiopCi1ndWludDY0IHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfdW5zaWdu
ZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKikKLXZvaWQgd2Via2l0X2Rv
bV90ZXN0X3R5cGVkZWZzX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0
VHlwZWRlZnMqLCBndWludDY0KQotV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB3ZWJr
aXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X2ltbXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZShXZWJLaXRET01UZXN0VHlwZWRlZnMqKQotdm9pZCB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNf
c2V0X2ltbXV0YWJsZV9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZShXZWJLaXRET01UZXN0VHlwZWRl
ZnMqLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqKQotZ2xvbmcgd2Via2l0X2RvbV90
ZXN0X3R5cGVkZWZzX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
VHlwZWRlZnMqLCBHRXJyb3IqKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX3NldF9h
dHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqLCBnbG9uZykK
LWdsb25nIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19nZXRfYXR0cl93aXRoX3NldHRlcl9leGNl
cHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKikKLXZvaWQgd2Via2l0X2RvbV90ZXN0X3R5cGVk
ZWZzX3NldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMq
LCBnbG9uZywgR0Vycm9yKiopCi1nY2hhciogd2Via2l0X2RvbV90ZXN0X3R5cGVkZWZzX2dldF9z
dHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiwg
R0Vycm9yKiopCi12b2lkIHdlYmtpdF9kb21fdGVzdF90eXBlZGVmc19zZXRfc3RyaW5nX2F0dHJf
d2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RUeXBlZGVmcyosIGNvbnN0IGdjaGFy
KikKLWdjaGFyKiB3ZWJraXRfZG9tX3Rlc3RfdHlwZWRlZnNfZ2V0X3N0cmluZ19hdHRyX3dpdGhf
c2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0VHlwZWRlZnMqKQotdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfdHlwZWRlZnNfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0VHlwZWRlZnMqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NYXR0
cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTWF0dHJpYnV0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJi
NjlkMTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NYXR0cmlidXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyAr
MCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NYXR0cmlidXRlLmgiCi0KLSNpbmNsdWRlICJDU1NJbXBv
cnRSdWxlLmgiCi0jaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NYXR0cmlidXRlUHJp
dmF0ZS5oIgotI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgotI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgV0VC
S0lUX0RPTV9BVFRSSUJVVEVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQVRUUklCVVRFLCBXZWJLaXRET01hdHRyaWJ1dGVQ
cml2YXRlKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NYXR0cmlidXRlUHJpdmF0ZSB7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OmF0dHJpYnV0ZT4gY29yZU9iamVjdDsKLX0gV2ViS2l0RE9NYXR0
cmlidXRlUHJpdmF0ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYktpdERPTWF0dHJpYnV0
ZSoga2l0KFdlYkNvcmU6OmF0dHJpYnV0ZSogb2JqKQotewotICAgIGlmICghb2JqKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0
KG9iaikpCi0gICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFJJQlVURShyZXQpOwotCi0gICAg
cmV0dXJuIHdyYXBhdHRyaWJ1dGUob2JqKTsKLX0KLQotV2ViQ29yZTo6YXR0cmlidXRlKiBjb3Jl
KFdlYktpdERPTWF0dHJpYnV0ZSogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OmF0dHJpYnV0ZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTWF0dHJpYnV0ZSogd3JhcGF0dHJpYnV0
ZShXZWJDb3JlOjphdHRyaWJ1dGUqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOwotICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFJJQlVURShnX29iamVjdF9uZXcoV0VCS0lU
X0RPTV9UWVBFX0FUVFJJQlVURSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01h
dHRyaWJ1dGUsIHdlYmtpdF9kb21fYXR0cmlidXRlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQot
Ci1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9SRUFET05MWSwKLX07Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdF9kb21fYXR0cmlidXRlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAg
ICBXZWJLaXRET01hdHRyaWJ1dGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BVFRSSUJVVEVf
R0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01hdHRyaWJ1
dGVQcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hdHRyaWJ1dGVfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X2V4Y2VwdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRE
T01UZXN0RXhjZXB0aW9uKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX0VYQ0VQVElPTihvYmplY3Qp
OwotCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Ci0gICAgY2FzZSBQUk9QX05BTUU6Ci0gICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25f
Z2V0X25hbWUoc2VsZikpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXR0
cmlidXRlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAgIFdlYktpdERPTWF0dHJpYnV0
ZSogc2VsZiA9IFdFQktJVF9ET01fQVRUUklCVVRFKG9iamVjdCk7Ci0KLSAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKLSAgICBjYXNlIFBST1BfUkVBRE9OTFk6Ci0gICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9yZWFkb25seShzZWxmKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1zdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9hdHRyaWJ1dGVfY29u
c3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2Jq
ZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCi17Ci0gICAgR09iamVjdCog
b2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9hdHRyaWJ1dGVfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0FUVFJJQlVURV9HRVRfUFJJVkFURShvYmplY3QpOwotICAgIHByaXYtPmNvcmVPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjphdHRyaWJ1dGUqPihXRUJLSVRfRE9NX09CSkVDVChv
YmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXR0cmlidXRlX2NsYXNzX2luaXQoV2ViS2l0RE9NYXR0
cmlidXRlQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGUp
KTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9hdHRyaWJ1dGVf
Y29uc3RydWN0b3I7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fYXR0
cmlidXRlX2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9hdHRyaWJ1dGVfZ2V0X3Byb3BlcnR5OwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX05BTUUsCi0g
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAgICAgICAgICAibmFtZSIsCi0gICAgICAg
ICAgICAiVGVzdEV4Y2VwdGlvbjpuYW1lIiwKLSAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IFRlc3RFeGNlcHRpb246bmFtZSIsCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOwotCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKLSAgICAgICAgZ29iamVjdENsYXNzLAotICAgICAgICBQUk9QX1JFQURPTkxZLAotICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAotICAgICAgICAgICAgInJlYWRvbmx5IiwKLSAgICAgICAg
ICAgICJhdHRyaWJ1dGU6cmVhZG9ubHkiLAotICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
YXR0cmlidXRlOnJlYWRvbmx5IiwKLSAgICAgICAgICAgICIiLAotICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdHRyaWJ1
dGVfaW5pdChXZWJLaXRET01hdHRyaWJ1dGUqIHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0RE9NYXR0
cmlidXRlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQVRUUklCVVRFX0dFVF9QUklWQVRFKHJl
cXVlc3QpOwotICAgIG5ldyAocHJpdikgV2ViS2l0RE9NYXR0cmlidXRlUHJpdmF0ZSgpOwotfQot
Ci1nY2hhciogd2Via2l0X2RvbV9hdHRyaWJ1dGVfZ2V0X3JlYWRvbmx5KFdlYktpdERPTWF0dHJp
YnV0ZSogc2VsZikKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSSUJVVEUoc2VsZiks
IDApOwotICAgIFdlYkNvcmU6OmF0dHJpYnV0ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5yZWFkb25seSgp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1dGUuc3ltYm9scyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTWF0
dHJpYnV0ZS5zeW1ib2xzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGE4MmFhLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTWF0dHJpYnV0ZS5zeW1ib2xzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
Z2NoYXIqIHdlYmtpdF9kb21fYXR0cmlidXRlX2dldF9yZWFkb25seShXZWJLaXRET01hdHRyaWJ1
dGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyOWNlOWE4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0RE9NcmVhZG9ubHkuaCIKLQotI2lu
Y2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKLSNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oIgotI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRE
T01yZWFkb25seVByaXZhdGUuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJp
bmcuaCIKLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci0jZGVmaW5lIFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfUkVBRE9OTFksIFdlYktpdERP
TXJlYWRvbmx5UHJpdmF0ZSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTXJlYWRvbmx5UHJp
dmF0ZSB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OnJlYWRvbmx5PiBjb3JlT2JqZWN0OwotfSBXZWJL
aXRET01yZWFkb25seVByaXZhdGU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJLaXRET01y
ZWFkb25seSoga2l0KFdlYkNvcmU6OnJlYWRvbmx5KiBvYmopCi17Ci0gICAgaWYgKCFvYmopCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSkKLSAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fUkVBRE9OTFkocmV0KTsKLQot
ICAgIHJldHVybiB3cmFwcmVhZG9ubHkob2JqKTsKLX0KLQotV2ViQ29yZTo6cmVhZG9ubHkqIGNv
cmUoV2ViS2l0RE9NcmVhZG9ubHkqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIHJlcXVlc3QgPyBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpyZWFkb25seSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Ci19Ci0KLVdlYktpdERPTXJlYWRvbmx5KiB3cmFwcmVhZG9ubHko
V2ViQ29yZTo6cmVhZG9ubHkqIGNvcmVPYmplY3QpCi17Ci0gICAgQVNTRVJUKGNvcmVPYmplY3Qp
OwotICAgIHJldHVybiBXRUJLSVRfRE9NX1JFQURPTkxZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9N
X1RZUEVfUkVBRE9OTFksICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NcmVhZG9u
bHksIHdlYmtpdF9kb21fcmVhZG9ubHksIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCi0KLXN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fcmVhZG9ubHlfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewot
ICAgIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlf
R0VUX1BSSVZBVEUob2JqZWN0KTsKLQotICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKLQotICAgIHByaXYtPn5XZWJLaXRET01yZWFkb25s
eVByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3JlYWRvbmx5X3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX3JlYWRvbmx5X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQot
ewotICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fcmVhZG9u
bHlfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKLQotICAgIFdlYktpdERPTXJlYWRvbmx5UHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUob2JqZWN0KTsKLSAgICBw
cml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6cmVhZG9ubHkqPihXRUJLSVRf
RE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKLSAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKLQotICAgIHJldHVybiBv
YmplY3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fcmVhZG9ubHlfY2xhc3NfaW5pdChX
ZWJLaXRET01yZWFkb25seUNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwotICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01yZWFkb25s
eVByaXZhdGUpKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9y
ZWFkb25seV9jb25zdHJ1Y3RvcjsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV9yZWFkb25seV9maW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV9yZWFk
b25seV9pbml0KFdlYktpdERPTXJlYWRvbmx5KiByZXF1ZXN0KQotewotICAgIFdlYktpdERPTXJl
YWRvbmx5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUkVBRE9OTFlfR0VUX1BSSVZBVEUocmVx
dWVzdCk7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRET01yZWFkb25seVByaXZhdGUoKTsKLX0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NcmVhZG9ubHkuc3ltYm9scyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTXJlYWRvbmx5LnN5bWJvbHMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNo
ZWV0LmlkbAppbmRleCA1NjJiNWRhLi44NmQ4NzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuaWRsCkBAIC0yMyw5ICsyMyw3IEBAIGludGVyZmFjZSBDU1NTdHlsZVNoZWV0IDogU3R5
bGVTaGVldCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU1J1bGVMaXN0IGNzc1J1bGVzOwog
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBpbnNlcnRSdWxlKERPTVN0cmlu
ZyBydWxlLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhjZXB0aW9uLCBJbXBsZW1l
bnRlZEFzPWRlcHJlY2F0ZWRJbnNlcnRSdWxlXSB1bnNpZ25lZCBsb25nIGluc2VydFJ1bGUoRE9N
U3RyaW5nIHJ1bGUpOyAvLyBEZXByZWNhdGVkLgotI2VuZGlmCiAKICAgICBbUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIGRlbGV0ZVJ1bGUodW5zaWduZWQgbG9uZyBpbmRleCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9SR0JDb2xvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUkdC
Q29sb3IuaWRsCmluZGV4IDVhYzRhYjcuLmI2MDJmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9SR0JDb2xvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1JHQkNvbG9yLmlk
bApAQCAtMjYsNyArMjYsNSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVW
YWx1ZSBncmVlbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTUHJpbWl0aXZlVmFsdWUgYmx1
ZTsKIAotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NQcmltaXRpdmVWYWx1ZSBhbHBoYTsKLSNlbmRpZgog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmlkbAppbmRleCA0YTQyOTNiLi4z
NGQxNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQ29yZUV4Y2VwdGlvbi5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUNvcmVFeGNlcHRpb24uaWRsCkBAIC0zOCw5
ICszOCw3IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgbmFtZTsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICBtZXNzYWdlOwogCi0jaWYg
IShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW05v
dEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAgICAvLyBFeGNl
cHRpb25Db2RlCiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU5ERVhfU0laRV9FUlIgPSAxOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5pZGwKaW5kZXggMzMwMDVkYS4uZGEy
NmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaWRsCkBAIC0yOCwx
MyArMjgsNyBAQAogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudFR5
cGUgY3JlYXRlRG9jdW1lbnRUeXBlKERPTVN0cmluZyBxdWFsaWZpZWROYW1lLCBET01TdHJpbmcg
cHVibGljSWQsIERPTVN0cmluZyBzeXN0ZW1JZCk7CiAKLSAgICBbTmV3T2JqZWN0LCBSYWlzZXNF
eGNlcHRpb25dCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JK
RUNUCi0gICAgICAgIERvY3VtZW50Ci0jZWxzZQotICAgICAgICBYTUxEb2N1bWVudAotI2VuZGlm
Ci0gICAgY3JlYXRlRG9jdW1lbnQoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIFtUcmVhdE51bGxB
cz1FbXB0eVN0cmluZ10gRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUsIG9wdGlvbmFsIERvY3VtZW50
VHlwZT8gZG9jdHlwZSA9IG51bGwpOworICAgIFtOZXdPYmplY3QsIFJhaXNlc0V4Y2VwdGlvbl0g
WE1MRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIFtUcmVh
dE51bGxBcz1FbXB0eVN0cmluZ10gRE9NU3RyaW5nIHF1YWxpZmllZE5hbWUsIG9wdGlvbmFsIERv
Y3VtZW50VHlwZT8gZG9jdHlwZSA9IG51bGwpOwogCiAgICAgLy8gRklYTUU6IFVzaW5nICJ1bmRl
ZmluZWQiIGFzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGlzIHdyb25nLgogICAgIFtSYWlzZXNF
eGNlcHRpb25dIENTU1N0eWxlU2hlZXQgY3JlYXRlQ1NTU3R5bGVTaGVldChvcHRpb25hbCBET01T
dHJpbmcgdGl0bGUgPSAidW5kZWZpbmVkIiwgb3B0aW9uYWwgRE9NU3RyaW5nIG1lZGlhID0gInVu
ZGVmaW5lZCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKaW5kZXggOTU1NTYyMS4uYzhlMDYxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCkBAIC01NywzNyArNTcsMTggQEAKIAogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIE5vZGUgYWRvcHROb2RlKE5vZGUgc291cmNlKTsKIAotI2lmIGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIC8vIGRvY3VtZW50LmRv
Y3VtZW50VVJJIHdhcyB3cml0YWJsZSBpbiBET00zIENvcmUsIGJ1dCBpcyByZWFkLW9ubHkgaW4g
RE9NNAotICAgIC8vIChzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9XRC1kb20tMjAxMTA5
MTUvI2RvY3VtZW50KS4gV2UgbmVlZCB0byBrZWVwCi0gICAgLy8gdGhlIHdyaXRhYmxlIHZlcnNp
b24gYXJvdW5kIGZvciBHT2JqZWN0IGNsaWVudHMsIGJ1dCBhcmUgbW92aW5nIHRvCi0gICAgLy8g
cmVhZC1vbmx5IGZvciBvdGhlciBjbGllbnRzLgotICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGRv
Y3VtZW50VVJJOwotI2Vsc2UKICAgICBbSW1wbGVtZW50ZWRBcz11cmxGb3JCaW5kaW5nc10gcmVh
ZG9ubHkgYXR0cmlidXRlIFVTVlN0cmluZyBkb2N1bWVudFVSSTsKLSNlbmRpZgogCiAgICAgW1Jh
aXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBFdmVudCBjcmVhdGVFdmVudChET01TdHJpbmcgZXZl
bnRUeXBlKTsKIAogICAgIFtOZXdPYmplY3RdIFJhbmdlIGNyZWF0ZVJhbmdlKCk7CiAKLSNpZiBk
ZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBOb2RlSXRl
cmF0b3IgY3JlYXRlTm9kZUl0ZXJhdG9yKE5vZGUgcm9vdCwKLSAgICAgICAgb3B0aW9uYWwgdW5z
aWduZWQgbG9uZyB3aGF0VG9TaG93ID0gMHhGRkZGRkZGRiwKLSAgICAgICAgb3B0aW9uYWwgTm9k
ZUZpbHRlcj8gZmlsdGVyLAotICAgICAgICBvcHRpb25hbCBib29sZWFuIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpOwotICAgIFRyZWVXYWxrZXIgY3JlYXRlVHJlZVdhbGtlcihOb2RlIHJvb3QsCi0g
ICAgICAgIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCi0g
ICAgICAgIG9wdGlvbmFsIE5vZGVGaWx0ZXI/IGZpbHRlciwKLSAgICAgICAgb3B0aW9uYWwgYm9v
bGVhbiBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKLSNlbHNlCiAgICAgW05ld09iamVjdF0gTm9k
ZUl0ZXJhdG9yIGNyZWF0ZU5vZGVJdGVyYXRvcihOb2RlIHJvb3QsCiAgICAgICAgIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCiAgICAgICAgIG9wdGlvbmFs
IE5vZGVGaWx0ZXI/IGZpbHRlciA9IG51bGwpOwogICAgIFtOZXdPYmplY3RdIFRyZWVXYWxrZXIg
Y3JlYXRlVHJlZVdhbGtlcihOb2RlIHJvb3QsCiAgICAgICAgIG9wdGlvbmFsIHVuc2lnbmVkIGxv
bmcgd2hhdFRvU2hvdyA9IDB4RkZGRkZGRkYsCiAgICAgICAgIG9wdGlvbmFsIE5vZGVGaWx0ZXI/
IGZpbHRlciA9IG51bGwpOwotI2VuZGlmCiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NV2lu
ZG93IGRlZmF1bHRWaWV3OwogCkBAIC0xMjAsMTEgKzEwMSw3IEBACiAgICAgYXR0cmlidXRlIERP
TVN0cmluZyBkZXNpZ25Nb2RlOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFVTVlN0cmluZyBy
ZWZlcnJlcjsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09C
SkVDVCkKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGRv
bWFpbjsKLSNlbHNlCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkb21haW47Ci0j
ZW5kaWYKICAgICBbSW1wbGVtZW50ZWRBcz11cmxGb3JCaW5kaW5nc10gcmVhZG9ubHkgYXR0cmli
dXRlIFVTVlN0cmluZyBVUkw7CiAKICAgICBbR2V0dGVyUmFpc2VzRXhjZXB0aW9uLCBTZXR0ZXJS
YWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgY29va2llOwpAQCAtMTQ0LDMzICsx
MjEsMjEgQEAKIAogICAgIE5vZGVMaXN0IGdldEVsZW1lbnRzQnlOYW1lKFtBdG9taWNTdHJpbmdd
IERPTVN0cmluZyBlbGVtZW50TmFtZSk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVD
VCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUHV0Rm9yd2FyZHM9aHJlZiwgVW5mb3JnZWFi
bGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBMb2NhdGlvbj8gbG9jYXRpb247Ci0jZW5kaWYKIAotI2lm
IGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgY2hhcnNldDsKLSNlbHNlCiAgICAgW0ltcGxlbWVudGVkQXM9Y2hhcmFj
dGVyU2V0V2l0aFVURjhGYWxsYmFja10gcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBjaGFy
c2V0OwotI2VuZGlmCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyByZWFkeVN0YXRl
OwogCiAgICAgRWxlbWVudCBlbGVtZW50RnJvbVBvaW50KG9wdGlvbmFsIGxvbmcgeCA9IDAsIG9w
dGlvbmFsIGxvbmcgeSA9IDApOwogICAgIFJhbmdlIGNhcmV0UmFuZ2VGcm9tUG9pbnQob3B0aW9u
YWwgbG9uZyB4ID0gMCwgb3B0aW9uYWwgbG9uZyB5ID0gMCk7CiAKICAgICAvLyBNb3ppbGxhIGV4
dGVuc2lvbnMKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09C
SkVDVCkKICAgICBET01TZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCk7Ci0jZW5kaWYKICAgICBbSW1w
bGVtZW50ZWRBcz1jaGFyYWN0ZXJTZXRXaXRoVVRGOEZhbGxiYWNrXSByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGNoYXJhY3RlclNldDsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmc/IHByZWZlcnJlZFN0eWxlc2hlZXRTZXQ7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8g
c2VsZWN0ZWRTdHlsZXNoZWV0U2V0OwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAm
JiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBjcmVhdGVDU1NTdHls
ZURlY2xhcmF0aW9uKCk7Ci0jZW5kaWYKLQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBzdGFu
ZGFyZCBhbmQgaGFzIGJlZW4gZHJvcHBlZCBmcm9tIEJsaW5rIGFscmVhZHkuCiAgICAgW0N1c3Rv
bV0gKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KSBnZXRDU1NDYW52YXNDb250ZXh0KERPTVN0cmluZyBjb250ZXh0SWQsIERPTVN0cmluZyBuYW1l
LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCk7CiAKQEAgLTE5Nyw3ICsxNjIsNiBAQAogICAgIFtD
b25kaXRpb25hbD1QT0lOVEVSX0xPQ0tdIHZvaWQgZXhpdFBvaW50ZXJMb2NrKCk7CiAgICAgW0Nv
bmRpdGlvbmFsPVBPSU5URVJfTE9DS10gcmVhZG9ubHkgYXR0cmlidXRlIEVsZW1lbnQ/IHBvaW50
ZXJMb2NrRWxlbWVudDsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5H
VUFHRV9HT0JKRUNUKQogICAgIFtDb25kaXRpb25hbD1DU1NfUkVHSU9OU10gRE9NTmFtZWRGbG93
Q29sbGVjdGlvbiB3ZWJraXRHZXROYW1lZEZsb3dzKCk7CiAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRm9udEZhY2VTZXQgZm9udHM7CkBAIC0yMTMsOCArMTc3LDYgQEAKICAgICBbTmV3T2JqZWN0
LCBDdXN0b21dIFRvdWNoTGlzdCBjcmVhdGVUb3VjaExpc3QoVG91Y2guLi4gdG91Y2hlcyk7CiAj
ZW5kaWYKIAotI2VuZGlmCi0KICAgICAvLyBQYWdlIHZpc2liaWxpdHkgQVBJLgogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmlzaWJpbGl0eVN0YXRlOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBib29sZWFuIGhpZGRlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudFR5cGUuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5pZGwKaW5k
ZXggZTY4NzQ1Yi4uZTFlYTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50VHlwZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5pZGwKQEAg
LTIyLDEzICsyMiw2IEBACiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKIF0gaW50ZXJmYWNlIERv
Y3VtZW50VHlwZSA6IE5vZGUgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKLQotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAot
ICAgIFtJbXBsZW1lbnRlZEFzPWVudGl0aWVzRm9yQmluZGluZ3NdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBOYW1lZE5vZGVNYXAgZW50aXRpZXM7Ci0gICAgW0ltcGxlbWVudGVkQXM9bm90YXRpb25zRm9y
QmluZGluZ3NdIHJlYWRvbmx5IGF0dHJpYnV0ZSBOYW1lZE5vZGVNYXAgbm90YXRpb25zOwotICAg
IFtJbXBsZW1lbnRlZEFzPWludGVybmFsU3Vic2V0Rm9yQmluZGluZ3NdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmc/IGludGVybmFsU3Vic2V0OwotI2VuZGlmCi0KICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHB1YmxpY0lkOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc3lzdGVtSWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCmluZGV4IDcxYjYwNDMuLjg0
NzBlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKQEAgLTc4LDExICs3OCw2IEBACiAKICAgICBb
SW1wbGVtZW50ZWRBcz1iaW5kaW5nc09mZnNldFBhcmVudF0gcmVhZG9ubHkgYXR0cmlidXRlIEVs
ZW1lbnQgb2Zmc2V0UGFyZW50OwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBM
QU5HVUFHRV9HT0JKRUNUCi0gICAgdm9pZCBmb2N1cygpOwotICAgIHZvaWQgYmx1cigpOwotI2Vu
ZGlmCi0KICAgICB2b2lkIHNjcm9sbEludG9WaWV3KG9wdGlvbmFsIGJvb2xlYW4gYWxpZ25XaXRo
VG9wID0gdHJ1ZSk7CiAKICAgICBzZXF1ZW5jZTxET01TdHJpbmc+IGdldEF0dHJpYnV0ZU5hbWVz
KCk7CkBAIC0xMDIsMTEgKzk3LDkgQEAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBFbGVtZW50IGNs
b3Nlc3QoRE9NU3RyaW5nIHNlbGVjdG9ycyk7ICAgIAogICAgIFtJbXBsZW1lbnRlZEFzPW1hdGNo
ZXMsIFJhaXNlc0V4Y2VwdGlvbl0gYm9vbGVhbiB3ZWJraXRNYXRjaGVzU2VsZWN0b3IoRE9NU3Ry
aW5nIHNlbGVjdG9ycyk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFO
R1VBR0VfR09CSkVDVCkKICAgICAvLyBDU1NPTSBWaWV3IE1vZHVsZSBBUEkKICAgICBDbGllbnRS
ZWN0TGlzdCBnZXRDbGllbnRSZWN0cygpOwogICAgIENsaWVudFJlY3QgZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCk7Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAm
JiBFTkFCTEVfRlVMTFNDUkVFTl9BUEkKICAgICAvLyBNb3ppbGxhIHZlcnNpb24KQEAgLTEzMSwx
MiArMTI0LDEwIEBACiAgICAgW0NvbmRpdGlvbmFsPUNTU19SRUdJT05TXSByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHdlYmtpdFJlZ2lvbk92ZXJzZXQ7CiAgICAgW0NvbmRpdGlvbmFsPUNT
U19SRUdJT05TXSBzZXF1ZW5jZTxSYW5nZT4gd2Via2l0R2V0UmVnaW9uRmxvd1JhbmdlcygpOwog
Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAg
ICAgLy8gU2hhZG93IERPTSBBUEkKICAgICBbRW5hYmxlZEF0UnVudGltZT1TaGFkb3dET00sIFJh
aXNlc0V4Y2VwdGlvbl0gU2hhZG93Um9vdCBhdHRhY2hTaGFkb3coU2hhZG93Um9vdEluaXQgaW5p
dCk7CiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLCBJbXBsZW1lbnRlZEFzPXNoYWRv
d1Jvb3RGb3JCaW5kaW5ncywgQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTaGFkb3dSb290IHNoYWRvd1Jvb3Q7CiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9N
LCBSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNsb3Q7Ci0jZW5kaWYKIAogICAgIC8vIEV2
ZW50IEhhbmRsZXJzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCmluZGV4IGQzYjY0Y2YuLmZkODJhMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50LmlkbApAQCAtNzIsNyArNzIsNSBAQAogICAgIFtJbXBsZW1lbnRlZEFzPWxl
Z2FjeVJldHVyblZhbHVlXSBhdHRyaWJ1dGUgYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICBhdHRy
aWJ1dGUgYm9vbGVhbiBjYW5jZWxCdWJibGU7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1
dGUgRGF0YVRyYW5zZmVyIGNsaXBib2FyZERhdGE7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmlkbAppbmRleCBkMDEzYjBiLi4zMzZhNDJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAgICBKU0N1c3RvbUhlYWRlciwKICAgICBK
U0N1c3RvbVRvTmF0aXZlT2JqZWN0LAogXSBpbnRlcmZhY2UgRXZlbnRUYXJnZXQgewotI2lmICEo
ZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIC8vIEZJ
WE1FOiBTaG91bGQgYmU6CiAgICAgLy8gdm9pZCBhZGRFdmVudExpc3RlbmVyKERPTVN0cmluZyB0
eXBlLCBFdmVudExpc3RlbmVyPyBjYWxsYmFjaywgb3B0aW9uYWwgKEFkZEV2ZW50TGlzdGVuZXJP
cHRpb25zIG9yIGJvb2xlYW4pIG9wdGlvbnMpOwogICAgIC8vIHZvaWQgcmVtb3ZlRXZlbnRMaXN0
ZW5lcihET01TdHJpbmcgdHlwZSwgRXZlbnRMaXN0ZW5lcj8gY2FsbGJhY2ssIG9wdGlvbmFsIChF
dmVudExpc3RlbmVyT3B0aW9ucyBvciBib29sZWFuKSBvcHRpb25zKTsKQEAgLTMyLDcgKzMxLDYg
QEAKICAgICBbSW1wbGVtZW50ZWRBcz1hZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3NdIHZvaWQg
YWRkRXZlbnRMaXN0ZW5lcihbQXRvbWljU3RyaW5nXSBET01TdHJpbmcgdHlwZSwgRXZlbnRMaXN0
ZW5lcj8gbGlzdGVuZXIsIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIG9wdGlvbnMpOwogICAgIFtJ
bXBsZW1lbnRlZEFzPXJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5nc10gdm9pZCByZW1vdmVF
dmVudExpc3RlbmVyKFtBdG9taWNTdHJpbmddIERPTVN0cmluZyB0eXBlLCBFdmVudExpc3RlbmVy
PyBsaXN0ZW5lcik7CiAgICAgW0ltcGxlbWVudGVkQXM9cmVtb3ZlRXZlbnRMaXN0ZW5lckZvckJp
bmRpbmdzXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoW0F0b21pY1N0cmluZ10gRE9NU3RyaW5n
IHR5cGUsIEV2ZW50TGlzdGVuZXI/IGxpc3RlbmVyLCBFdmVudExpc3RlbmVyT3B0aW9ucyBvcHRp
b25zKTsKLSNlbmRpZgogCiAgICAgW0ltcGxlbWVudGVkQXM9YWRkRXZlbnRMaXN0ZW5lckZvckJp
bmRpbmdzXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoW0F0b21pY1N0cmluZ10gRE9NU3RyaW5nIHR5
cGUsIEV2ZW50TGlzdGVuZXI/IGxpc3RlbmVyLCBib29sZWFuIHVzZUNhcHR1cmUpOwogICAgIFtJ
bXBsZW1lbnRlZEFzPXJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5nc10gdm9pZCByZW1vdmVF
dmVudExpc3RlbmVyKFtBdG9taWNTdHJpbmddIERPTVN0cmluZyB0eXBlLCBFdmVudExpc3RlbmVy
PyBsaXN0ZW5lciwgYm9vbGVhbiB1c2VDYXB0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9LZXlib2FyZEV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2
ZW50LmlkbAppbmRleCBlNDM4M2ZhLi44NTJlNWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJk
RXZlbnQuaWRsCkBAIC0yMywyMCArMjMsMTAgQEAKICAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPUV2
ZW50LAogXSBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudCA6IFVJRXZlbnQgewogCi0jaWYgZGVmaW5l
ZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgLy8gS2V5TG9jYXRp
b25Db2RlCi0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBLRVlfTE9DQVRJT05fU1RBTkRBUkQgPSAw
eDAwOwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgS0VZX0xPQ0FUSU9OX0xFRlQgPSAweDAxOwot
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgS0VZX0xPQ0FUSU9OX1JJR0hUID0gMHgwMjsKLSAgICBj
b25zdCB1bnNpZ25lZCBsb25nIEtFWV9MT0NBVElPTl9OVU1QQUQgPSAweDAzOwotI2VuZGlmCi0K
LSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIERPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQgPSAweDAwOwog
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9MRUZUID0gMHgwMTsKICAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIERPTV9LRVlfTE9DQVRJT05fUklHSFQgPSAweDAyOwogICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgPSAweDAzOwotI2Vu
ZGlmCiAKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcga2V5SWRlbnRpZmllcjsKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29u
c3RydWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvY2F0aW9uOwpAQCAt
NDcsMTAgKzM3LDYgQEAKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3JdIHJlYWRv
bmx5IGF0dHJpYnV0ZSBib29sZWFuIG1ldGFLZXk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJv
b2xlYW4gYWx0R3JhcGhLZXk7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExB
TkdVQUdFX0dPQkpFQ1QKLSAgICBib29sZWFuIGdldE1vZGlmaWVyU3RhdGUob3B0aW9uYWwgRE9N
U3RyaW5nIGtleUlkZW50aWZpZXJBcmcpOwotI2VuZGlmCi0KICAgICAvLyBGSVhNRTogdGhpcyBk
b2VzIG5vdCBtYXRjaCB0aGUgdmVyc2lvbiBpbiB0aGUgRE9NIHNwZWMuCiAgICAgLy8gRklYTUU6
IFVzaW5nICJ1bmRlZmluZWQiIGFzIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlIGlzIHdyb25nLgog
ICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQob3B0aW9uYWwgRE9NU3RyaW5nIHR5cGUgPSAidW5k
ZWZpbmVkIiwgb3B0aW9uYWwgYm9vbGVhbiBjYW5CdWJibGUgPSBmYWxzZSwgb3B0aW9uYWwgYm9v
bGVhbiBjYW5jZWxhYmxlID0gZmFsc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
TWVzc2FnZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaWRsCmlu
ZGV4IGYxNTI3OGEuLjRiNmU1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaWRsCkBA
IC0zMyw3ICszMyw2IEBACiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9yXSByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhc3RFdmVudElkOwogICAgIFtJbml0aWFsaXplZEJ5
RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9ubHkgYXR0cmlidXRlIEV2ZW50VGFyZ2V0IHNvdXJjZTsg
Ly8gTWF5IGJlIGEgRE9NV2luZG93IG9yIGEgTWVzc2FnZVBvcnQuCiAKLSNpZiAhKGRlZmluZWQo
TEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbSW5pdGlhbGl6ZWRC
eUV2ZW50Q29uc3RydWN0b3IsIENhY2hlZEF0dHJpYnV0ZSwgQ3VzdG9tR2V0dGVyXSByZWFkb25s
eSBhdHRyaWJ1dGUgYW55IGRhdGE7CiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9y
XSByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8TWVzc2FnZVBvcnQ+IHBvcnRzOwogCkBAIC00
NCwxMSArNDMsNCBAQAogICAgIFtDdXN0b21dIHZvaWQgd2Via2l0SW5pdE1lc3NhZ2VFdmVudChv
cHRpb25hbCBET01TdHJpbmcgdHlwZUFyZywgb3B0aW9uYWwgYm9vbGVhbiBjYW5CdWJibGVBcmcs
IG9wdGlvbmFsIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywKICAgICAgICAgb3B0aW9uYWwgYW55IGRh
dGFBcmcsIG9wdGlvbmFsIFVTVlN0cmluZyBvcmlnaW5BcmcsIG9wdGlvbmFsIERPTVN0cmluZyBs
YXN0RXZlbnRJZEFyZywgb3B0aW9uYWwgRE9NV2luZG93IHNvdXJjZUFyZywKICAgICAgICAgb3B0
aW9uYWwgQXJyYXkgdHJhbnNmZXJhYmxlcyk7Ci0jZWxzZQotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0YTsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVz
c2FnZVBvcnQgbWVzc2FnZVBvcnQ7Ci0gICAgdm9pZCBpbml0TWVzc2FnZUV2ZW50KG9wdGlvbmFs
IERPTVN0cmluZyB0eXBlQXJnLCBvcHRpb25hbCBib29sZWFuIGNhbkJ1YmJsZUFyZywgb3B0aW9u
YWwgYm9vbGVhbiBjYW5jZWxhYmxlQXJnLAotICAgICAgICBvcHRpb25hbCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU/IGRhdGFBcmcsIG9wdGlvbmFsIERPTVN0cmluZyBvcmlnaW5BcmcsIG9wdGlvbmFs
IERPTVN0cmluZyBsYXN0RXZlbnRJZEFyZywgb3B0aW9uYWwgRE9NV2luZG93PyBzb3VyY2VBcmcs
Ci0gICAgICAgIG9wdGlvbmFsIE1lc3NhZ2VQb3J0PyBtZXNzYWdlUG9ydCk7Ci0jZW5kaWYKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsIGIvU291cmNl
L1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmlkbAppbmRleCBjYWU4MzUyLi5iNTcyZDk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5pZGwKQEAgLTMxLDEyICszMSwxMCBAQAogICAgIEdlbmVy
YXRlSXNSZWFjaGFibGU9SW1wbCwKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJm
YWNlIE1lc3NhZ2VQb3J0IDogRXZlbnRUYXJnZXQgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9H
T0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtDdXN0b20sIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgQXJyYXkgbWVzc2FnZVBv
cnRzKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKICAgICB2b2lkIGNsb3NlKCk7CiAKICAgICBhdHRy
aWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2FnZTsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmlkbAppbmRleCA1NWZhNzI2Li44NTlhMGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZl
bnQuaWRsCkBAIC0yMiwxMCArMjIsOCBAQAogICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9RXZlbnQs
CiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKIF0gaW50ZXJmYWNlIE1vdXNlRXZlbnQgOiBVSUV2
ZW50IHsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVD
VCkKICAgICBbQ29uZGl0aW9uYWw9TU9VU0VfRk9SQ0VfRVZFTlRTXSBjb25zdCBkb3VibGUgV0VC
S0lUX0ZPUkNFX0FUX01PVVNFX0RPV04gPSAxOwogICAgIFtDb25kaXRpb25hbD1NT1VTRV9GT1JD
RV9FVkVOVFNdIGNvbnN0IGRvdWJsZSBXRUJLSVRfRk9SQ0VfQVRfRk9SQ0VfTU9VU0VfRE9XTiA9
IDI7Ci0jZW5kaWYKIAogICAgIFtJbml0aWFsaXplZEJ5RXZlbnRDb25zdHJ1Y3Rvcl0gcmVhZG9u
bHkgYXR0cmlidXRlIGxvbmcgc2NyZWVuWDsKICAgICBbSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3Ry
dWN0b3JdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIHNjcmVlblk7CkBAIC0zOSw5ICszNyw3IEBA
CiAgICAgW0luaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9yXSByZWFkb25seSBhdHRyaWJ1dGUg
RXZlbnRUYXJnZXQ/IHJlbGF0ZWRUYXJnZXQ7CiAgICAgW0NvbmRpdGlvbmFsPVBPSU5URVJfTE9D
S10gcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgbW92ZW1lbnRYOwogICAgIFtDb25kaXRpb25hbD1Q
T0lOVEVSX0xPQ0tdIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIG1vdmVtZW50WTsKLSNpZiAhKGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0
aW9uYWw9TU9VU0VfRk9SQ0VfRVZFTlRTLCBJbXBsZW1lbnRlZEFzPWZvcmNlXXJlYWRvbmx5IGF0
dHJpYnV0ZSBkb3VibGUgd2Via2l0Rm9yY2U7Ci0jZW5kaWYKIAogICAgIC8vIEZJWE1FOiBVc2lu
ZyAidW5kZWZpbmVkIiBhcyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBpcyB3cm9uZy4KICAgICB2
b2lkIGluaXRNb3VzZUV2ZW50KG9wdGlvbmFsIERPTVN0cmluZyB0eXBlID0gInVuZGVmaW5lZCIs
IG9wdGlvbmFsIGJvb2xlYW4gY2FuQnViYmxlID0gZmFsc2UsICBvcHRpb25hbCBib29sZWFuIGNh
bmNlbGFibGUgPSBmYWxzZSwKQEAgLTU2LDggKzUyLDUgQEAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgbG9uZyB5OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlPyBmcm9tRWxlbWVudDsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZT8gdG9FbGVtZW50OwotCi0jaWYgIShkZWZpbmVkKExB
TkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERhdGFUcmFuc2ZlciBkYXRhVHJhbnNmZXI7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuaWRsCmluZGV4IDE1MDRiMDcuLmM2NzI2NzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
YW1lZE5vZGVNYXAuaWRsCkBAIC0yNSw3ICsyNSw2IEBACiBdIGludGVyZmFjZSBOYW1lZE5vZGVN
YXAgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKIAotI2lm
ICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIGdl
dHRlciBBdHRyPyBnZXROYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwogICAgIFtSYWlzZXNFeGNl
cHRpb25dIEF0dHI/IHNldE5hbWVkSXRlbShBdHRyIGF0dHIpOwogICAgIFtSYWlzZXNFeGNlcHRp
b25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKQEAgLTMzLDEzICszMiw0
IEBACiAgICAgQXR0cj8gZ2V0TmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VVUkksIERP
TVN0cmluZyBsb2NhbE5hbWUpOwogICAgIFtSYWlzZXNFeGNlcHRpb24sIEltcGxlbWVudGVkQXM9
c2V0TmFtZWRJdGVtXSBBdHRyPyBzZXROYW1lZEl0ZW1OUyhBdHRyIGF0dHIpOwogICAgIFtSYWlz
ZXNFeGNlcHRpb25dIEF0dHIgcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3BhY2VV
UkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotI2Vsc2UKLSAgICBnZXR0ZXIgTm9kZT8gZ2V0TmFt
ZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBOb2RlPyBzZXRO
YW1lZEl0ZW0oTm9kZSBub2RlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBOb2RlIHJlbW92ZU5h
bWVkSXRlbShET01TdHJpbmcgbmFtZSk7Ci0gICAgZ2V0dGVyIE5vZGU/IGl0ZW0odW5zaWduZWQg
bG9uZyBpbmRleCk7Ci0gICAgTm9kZT8gZ2V0TmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBuYW1lc3Bh
Y2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotICAgIFtSYWlzZXNFeGNlcHRpb24sIEltcGxl
bWVudGVkQXM9c2V0TmFtZWRJdGVtXSBOb2RlPyBzZXROYW1lZEl0ZW1OUyhOb2RlIG5vZGUpOwot
ICAgIFtSYWlzZXNFeGNlcHRpb25dIE5vZGUgcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nPyBu
YW1lc3BhY2VVUkksIERPTVN0cmluZyBsb2NhbE5hbWUpOwotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aWRsCmluZGV4IDdjOTI1ZTMuLmZlZTIxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwKQEAgLTY2LDEwICs2
Niw2IEBACiAKICAgICB2b2lkIG5vcm1hbGl6ZSgpOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9H
T0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9aXNTdXBwb3J0
ZWRGb3JCaW5kaW5nc10gYm9vbGVhbiBpc1N1cHBvcnRlZChvcHRpb25hbCBET01TdHJpbmcgZmVh
dHVyZSwgb3B0aW9uYWwgRE9NU3RyaW5nIHZlcnNpb24pOwotI2VuZGlmCi0KICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGJhc2VVUkk7CiAKICAgICAvLyBGSVhNRTogdGhlIHNwZWMg
c2F5cyB0aGlzIGNhbiBhbHNvIHJhaXNlIG9uIHJldHJpZXZhbC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaWRsCmlu
ZGV4IDY5NjI0OWMuLmY0YTNjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmlkbApAQCAtMzMsMTMgKzMzLDgg
QEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb2xsYXBzZWQ7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWluZXI7CiAKLSNpZiAhKGRlZmlu
ZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHNldFN0YXJ0KE5vZGUgcmVmTm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQp
OwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0RW5kKE5vZGUgcmVmTm9kZSwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotI2Vsc2UKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFN0
YXJ0KE5vZGUgcmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZv
aWQgc2V0RW5kKE5vZGUgcmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotI2VuZGlmCiAKICAgICBbUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHNldFN0YXJ0QmVmb3JlKE5vZGUgcmVmTm9kZSk7CiAgICAgW1Jh
aXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRTdGFydEFmdGVyKE5vZGUgcmVmTm9kZSk7CkBAIC02Nywx
MCArNjIsOCBAQAogCiAgICAgdm9pZCBkZXRhY2goKTsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFH
RV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIENsaWVudFJlY3RMaXN0IGdldENs
aWVudFJlY3RzKCk7CiAgICAgQ2xpZW50UmVjdCBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSNl
bmRpZgogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbiwgTmV3T2JqZWN0XSBEb2N1bWVudEZyYWdtZW50
IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChET01TdHJpbmcgaHRtbCk7CiAKQEAgLTg0LDE4ICs3
Nyw5IEBACiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBib29sZWFuIGludGVyc2VjdHNOb2RlKE5v
ZGUgcmVmTm9kZSk7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VB
R0VfR09CSkVDVCkKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBzaG9ydCBjb21wYXJlUG9pbnQoTm9k
ZSByZWZOb2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0g
Ym9vbGVhbiBpc1BvaW50SW5SYW5nZShOb2RlIHJlZk5vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSNlbHNlCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gc2hvcnQgY29tcGFyZVBvaW50KE5vZGUg
cmVmTm9kZSwgbG9uZyBvZmZzZXQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIGJvb2xlYW4gaXNQ
b2ludEluUmFuZ2UoTm9kZSByZWZOb2RlLCBsb25nIG9mZnNldCk7Ci0jZW5kaWYKIAogICAgIC8v
IEZJWE1FOiBVc2luZyAidW5kZWZpbmVkIiBhcyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBpcyB3
cm9uZy4KICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGV4cGFuZChvcHRpb25hbCBET01TdHJp
bmcgdW5pdCA9ICJ1bmRlZmluZWQiKTsKLQotI2lmIGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkg
JiYgTEFOR1VBR0VfR09CSkVDVAotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdGV4
dDsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TbG90YWJsZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2xvdGFibGUuaWRsCmluZGV4IDJhYTJjNzkuLjEzMmVh
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TbG90YWJsZS5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1Nsb3RhYmxlLmlkbApAQCAtMjgsNyArMjgsNSBAQAogICAgIE5vSW50
ZXJmYWNlT2JqZWN0LAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9U2hhZG93RE9NLAogXSBpbnRlcmZh
Y2UgU2xvdGFibGUgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFH
RV9HT0JKRUNUKQogICAgIFtJbXBsZW1lbnRlZEFzPWFzc2lnbmVkU2xvdEZvckJpbmRpbmdzXSBy
ZWFkb25seSBhdHRyaWJ1dGUgSFRNTFNsb3RFbGVtZW50PyBhc3NpZ25lZFNsb3Q7Ci0jZW5kaWYK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5pZGwKaW5kZXggNjUzZWU0Zi4uODE2YjE3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmlkbApAQCAtNDAsMTUgKzQwLDggQEAKIAogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBib29sZWFuIHdlYmtpdERpcmVjdGlvbkludmVydGVkRnJvbURldmljZTsK
IAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQog
ICAgIHZvaWQgaW5pdFdlYktpdFdoZWVsRXZlbnQob3B0aW9uYWwgbG9uZyB3aGVlbERlbHRhWCA9
IDAsIG9wdGlvbmFsIGxvbmcgd2hlZWxEZWx0YVkgPSAwLCBvcHRpb25hbCBET01XaW5kb3c/IHZp
ZXcgPSBudWxsLAogICAgICAgICBvcHRpb25hbCBsb25nIHNjcmVlblggPSAwLCBvcHRpb25hbCBs
b25nIHNjcmVlblkgPSAwLCBvcHRpb25hbCBsb25nIGNsaWVudFggPSAwLCBvcHRpb25hbCBsb25n
IGNsaWVudFkgPSAwLAogICAgICAgICBvcHRpb25hbCBib29sZWFuIGN0cmxLZXkgPSBmYWxzZSwg
b3B0aW9uYWwgYm9vbGVhbiBhbHRLZXkgPSBmYWxzZSwKICAgICAgICAgb3B0aW9uYWwgYm9vbGVh
biBzaGlmdEtleSA9IGZhbHNlLCBvcHRpb25hbCBib29sZWFuIG1ldGFLZXkgPSBmYWxzZSk7Ci0j
ZWxzZQotICAgIHZvaWQgaW5pdFdoZWVsRXZlbnQob3B0aW9uYWwgbG9uZyB3aGVlbERlbHRhWCA9
IDAsIG9wdGlvbmFsIGxvbmcgd2hlZWxEZWx0YVkgPSAwLCBvcHRpb25hbCBET01XaW5kb3c/IHZp
ZXcgPSBudWxsLAotICAgICAgICBvcHRpb25hbCBsb25nIHNjcmVlblggPSAwLCBvcHRpb25hbCBs
b25nIHNjcmVlblkgPSAwLCBvcHRpb25hbCBsb25nIGNsaWVudFggPSAwLCBvcHRpb25hbCBsb25n
IGNsaWVudFkgPSAwLAotICAgICAgICBvcHRpb25hbCBib29sZWFuIGN0cmxLZXkgPSBmYWxzZSwg
b3B0aW9uYWwgYm9vbGVhbiBhbHRLZXkgPSBmYWxzZSwKLSAgICAgICAgb3B0aW9uYWwgYm9vbGVh
biBzaGlmdEtleSA9IGZhbHNlLCBvcHRpb25hbCBib29sZWFuIG1ldGFLZXkgPSBmYWxzZSk7Ci0j
ZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVFeGNlcHRp
b24uaWRsIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmlkbAppbmRleCAy
ZTE2ZGMzLi40MTZlMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVF
eGNlcHRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZUV4Y2VwdGlvbi5p
ZGwKQEAgLTM3LDkgKzM3LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5h
bWU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOwogCi0jaWYgIShk
ZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW05vdEVu
dW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAgICAvLyBGaWxlRXhj
ZXB0aW9uQ29kZQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5PVF9GT1VORF9FUlIgPSAxOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAppbmRleCBiMjg5YzU5Li5j
NTRiZWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbApAQCAt
MjksMTcgKzI5LDkgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBjb2RlOwog
ICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgVVNWU3RyaW5nIGNvZGVCYXNlOwogICAgIFtSZWZsZWN0
XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhlaWdodDsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0
cmluZyBoc3BhY2U7Ci0jZWxzZQotICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgbG9uZyBoc3BhY2U7
Ci0jZW5kaWYKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIFtS
ZWZsZWN0XSBhdHRyaWJ1dGUgVVNWU3RyaW5nIG9iamVjdDsKLSNpZiAhKGRlZmluZWQoTEFOR1VB
R0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbUmVmbGVjdF0gYXR0cmlidXRl
IERPTVN0cmluZyB2c3BhY2U7Ci0jZWxzZQotICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgbG9uZyB2
c3BhY2U7Ci0jZW5kaWYKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyB3aWR0aDsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCmluZGV4IGJlYmEz
OGQuLmZlM2M3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRs
CkBAIC0yOSwxMyArMjksOCBAQAogICAgIFJlcG9ydEV4dHJhTWVtb3J5Q29zdCwKICAgICBSZXBv
cnRFeHRlcm5hbE1lbW9yeUNvc3QsCiBdIGludGVyZmFjZSBIVE1MQ2FudmFzRWxlbWVudCA6IEhU
TUxFbGVtZW50IHsKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dP
QkpFQ1QKLSAgICBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsKLSAgICBhdHRyaWJ1dGUgbG9uZyBoZWln
aHQ7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHdpZHRoOwogICAgIGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIGhlaWdodDsKLSNlbmRpZgogCiAgICAgW0N1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBET01TdHJpbmcgdG9EYXRhVVJMKG9wdGlvbmFsIERPTVN0cmluZz8gdHlwZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaWRsIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKaW5kZXggOGVmYzAzYS4uMTk0
MWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5pZGwKQEAgLTI2LDExICsy
Niw2IEBACiBdIGludGVyZmFjZSBIVE1MQ29sbGVjdGlvbiB7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNU
KSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgZ2V0dGVyIE5vZGUgaXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KTsKLSAgICBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotI2Vs
c2UKICAgICBnZXR0ZXIgRWxlbWVudD8gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICBn
ZXR0ZXIgRWxlbWVudD8gbmFtZWRJdGVtKERPTVN0cmluZyBuYW1lKTsKLSNlbmRpZgogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbAppbmRleCBkMDBmNWIyLi41MDEwOGM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCkBAIC0zMCwyMSArMzAsMTMgQEAKICAgICBb
Q3VzdG9tXSB2b2lkIHdyaXRlKG9wdGlvbmFsIERPTVN0cmluZyB0ZXh0KTsKICAgICBbQ3VzdG9t
XSB2b2lkIHdyaXRlbG4ob3B0aW9uYWwgRE9NU3RyaW5nIHRleHQpOwogCi0jaWYgIShkZWZpbmVk
KExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW0N1c3RvbSwgUmVw
bGFjZWFibGUsIERlbGV0YWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxBbGxDb2xsZWN0aW9u
IGFsbDsKLSNlbmRpZgogCiAgICAgdm9pZCBjbGVhcigpOwogCiAgICAgdm9pZCBjYXB0dXJlRXZl
bnRzKCk7CiAgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdF
X0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9u
ZyB3aWR0aDsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBoZWlnaHQ7Ci0gICAgYXR0cmli
dXRlIERPTVN0cmluZyBkaXI7Ci0jZW5kaWYKLQogICAgIC8vIERlcHJlY2F0ZWQgYXR0cmlidXRl
cy4KICAgICBbVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYmdD
b2xvcjsKICAgICBbVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcg
ZmdDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaWRs
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKaW5kZXggMDI0ZWM0Ny4uZmVh
YmE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwKQEAgLTUxLDEyICs1MSwxMCBA
QAogCiAgICAgdm9pZCBjbGljaygpOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1Qp
ICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgdm9pZCBmb2N1cygpOwogICAgIHZvaWQgYmx1cigp
OwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ01hcCBkYXRhc2V0OwotI2VuZGlm
CiB9OwogCiBIVE1MRWxlbWVudCBpbXBsZW1lbnRzIEdsb2JhbEV2ZW50SGFuZGxlcnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAppbmRleCA1MDI2YzJhLi4xZDgzMGVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwKQEAgLTI0LDE5ICsy
NCwxMSBAQAogICAgIEN1c3RvbUNhbGwsCiBdIGludGVyZmFjZSBIVE1MRW1iZWRFbGVtZW50IDog
SFRNTEVsZW1lbnQgewogW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgYWxpZ247Ci0jaWYg
IShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiBbUmVmbGVj
dF0gYXR0cmlidXRlIERPTVN0cmluZyBoZWlnaHQ7Ci0jZWxzZQotW1JlZmxlY3RdIGF0dHJpYnV0
ZSBsb25nIGhlaWdodDsKLSNlbmRpZgogW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKIFtSZWZsZWN0LCBVUkxdIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgc3JjOwogW1JlZmxlY3RdIGF0
dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkg
JiYgTEFOR1VBR0VfR09CSkVDVCkKIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdpZHRo
OwotI2Vsc2UKLVtSZWZsZWN0XSBhdHRyaWJ1dGUgbG9uZyB3aWR0aDsKLSNlbmRpZgogCiBbQ2hl
Y2tTZWN1cml0eUZvck5vZGUsIFJhaXNlc0V4Y2VwdGlvbl0gU1ZHRG9jdW1lbnQgZ2V0U1ZHRG9j
dW1lbnQoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNl
dEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50Lmlk
bAppbmRleCA4MmMxNDAyLi42ZDY1M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5pZGwKQEAgLTI0LDExICsyNCw3IEBAIGludGVyZmFjZSBIVE1MRmllbGRT
ZXRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyB0eXBlOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9H
T0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9ZWxlbWVudHNGb3JOYXRpdmVCaW5kaW5nc10gcmVh
ZG9ubHkgYXR0cmlidXRlIEhUTUxDb2xsZWN0aW9uIGVsZW1lbnRzOwotI2Vsc2UKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24gZWxlbWVudHM7Ci0jZW5k
aWYKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuICAgICAgICAgd2lsbFZhbGlkYXRl
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBWYWxpZGl0eVN0YXRlICAgdmFsaWRpdHk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKaW5kZXggZGIyMDYwMi4uOWYzYjY4NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmlkbApAQCAtMzUsMTEgKzM1LDcg
QEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xlYW4gbm9WYWxpZGF0ZTsKICAgICBbUmVm
bGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyB0YXJnZXQ7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdF
X0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBbSW1wbGVtZW50ZWRBcz1lbGVtZW50
c0Zvck5hdGl2ZUJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gZWxl
bWVudHM7Ci0jZWxzZQogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbiBlbGVtZW50czsKLSNlbmRpZgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGxl
bmd0aDsKIAogICAgIGdldHRlciBFbGVtZW50ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKQEAgLTQ4
LDExICs0NCw3IEBACiAKICAgICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JSRUNUX0FORF9BVVRP
Q0FQSVRBTElaRSwgVHJlYXROdWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcg
YXV0b2NhcGl0YWxpemU7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFO
R1VBR0VfR09CSkVDVCkKICAgICBbSW1wbGVtZW50ZWRBcz1zdWJtaXRGcm9tSmF2YVNjcmlwdF0g
dm9pZCBzdWJtaXQoKTsKLSNlbHNlCi0gICAgdm9pZCBzdWJtaXQoKTsKLSNlbmRpZgogICAgIHZv
aWQgcmVzZXQoKTsKICAgICBib29sZWFuIGNoZWNrVmFsaWRpdHkoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAppbmRleCA5NzBlMzNjLi43YzExY2E4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmlkbApAQCAtMjcsMTEgKzI3LDcg
QEAgaW50ZXJmYWNlIEhUTUxJRnJhbWVFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZs
ZWN0LCBUcmVhdE51bGxBcz1FbXB0eVN0cmluZ10gYXR0cmlidXRlIERPTVN0cmluZyBtYXJnaW5X
aWR0aDsKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogCi0jaWYgZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW1JlZmxlY3Rd
IGF0dHJpYnV0ZSBET01TdHJpbmcgc2FuZGJveDsKLSNlbHNlCiAgICAgW1B1dEZvcndhcmRzPXZh
bHVlXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NVG9rZW5MaXN0IHNhbmRib3g7Ci0jZW5kaWYKIAog
ICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNjcm9sbGluZzsKICAgICBbUmVmbGVj
dCwgVVJMXSBhdHRyaWJ1dGUgVVNWU3RyaW5nIHNyYzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaWRsCmluZGV4IDQ4YjAyNWEuLmE4ZDJiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbApAQCAtNTgsMTEgKzU4LDcgQEAKICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHR5cGU7IC8vIHJlYWRvbmx5IGRyb3BwZWQgYXMgcGFydCBvZiBET00gbGV2
ZWwgMgogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZGVmYXVsdFZhbHVlOwogICAgIC8vIFNlZSB0
aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAwMDg1Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCiAgICAgW1RyZWF0TnVsbEFzPUVtcHR5U3RyaW5nLCBTZXR0ZXJSYWlzZXNFeGNlcHRpb25d
IGF0dHJpYnV0ZSBET01TdHJpbmcgdmFsdWU7Ci0jZWxzZQotICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgdmFsdWU7Ci0jZW5kaWYKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUg
RGF0ZSB2YWx1ZUFzRGF0ZTsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUg
dW5yZXN0cmljdGVkIGRvdWJsZSB2YWx1ZUFzTnVtYmVyOwogCkBAIC05MywxMCArODksNiBAQAog
ICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVzZU1hcDsKICAgICBbUmVmbGVjdF0g
YXR0cmlidXRlIGJvb2xlYW4gaW5jcmVtZW50YWw7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dP
QkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICB2b2lkIHNldFZhbHVlRm9yVXNlcihET01T
dHJpbmcgdmFsdWUpOwotI2VuZGlmCi0KICAgICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JSRUNU
X0FORF9BVVRPQ0FQSVRBTElaRV0gYXR0cmlidXRlIGJvb2xlYW4gYXV0b2NvcnJlY3Q7CiAKICAg
ICBbQ29uZGl0aW9uYWw9SU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSwgVHJlYXRO
dWxsQXM9RW1wdHlTdHJpbmddIGF0dHJpYnV0ZSBET01TdHJpbmcgYXV0b2NhcGl0YWxpemU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRsIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmlkbAppbmRleCA0ZjAyODYxLi44ZDBj
MGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5pZGwKQEAgLTk1LDcg
Kzk1LDYgQEAKICAgICBbQ29uZGl0aW9uYWw9TUVESUFfU1RBVElTVElDU10gcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgd2Via2l0QXVkaW9EZWNvZGVkQnl0ZUNvdW50OwogICAgIFtD
b25kaXRpb25hbD1NRURJQV9TVEFUSVNUSUNTXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyB3ZWJraXRWaWRlb0RlY29kZWRCeXRlQ291bnQ7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VB
R0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0aW9uYWw9RU5DUllQ
VEVEX01FRElBLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgd2Via2l0R2VuZXJhdGVLZXlSZXF1ZXN0
KERPTVN0cmluZz8ga2V5U3lzdGVtLCBvcHRpb25hbCBVaW50OEFycmF5PyBpbml0RGF0YSA9IG51
bGwpOwogICAgIFtDb25kaXRpb25hbD1FTkNSWVBURURfTUVESUEsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB3ZWJraXRBZGRLZXkoRE9NU3RyaW5nPyBrZXlTeXN0ZW0sIFVpbnQ4QXJyYXkga2V5LCBv
cHRpb25hbCBVaW50OEFycmF5PyBpbml0RGF0YSA9IG51bGwsIG9wdGlvbmFsIERPTVN0cmluZyBz
ZXNzaW9uSWQpOwogICAgIFtDb25kaXRpb25hbD1FTkNSWVBURURfTUVESUEsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB3ZWJraXRDYW5jZWxLZXlSZXF1ZXN0KERPTVN0cmluZz8ga2V5U3lzdGVtLCBv
cHRpb25hbCBET01TdHJpbmcgc2Vzc2lvbklkKTsKQEAgLTEwNywxNSArMTA2LDEyIEBACiAgICAg
W0NvbmRpdGlvbmFsPVZJREVPX1RSQUNLXSByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9UcmFja0xp
c3QgYXVkaW9UcmFja3M7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPX1RSQUNLXSByZWFkb25seSBh
dHRyaWJ1dGUgVGV4dFRyYWNrTGlzdCB0ZXh0VHJhY2tzOwogICAgIFtDb25kaXRpb25hbD1WSURF
T19UUkFDS10gcmVhZG9ubHkgYXR0cmlidXRlIFZpZGVvVHJhY2tMaXN0IHZpZGVvVHJhY2tzOwot
I2VuZGlmCiAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBtZWRpYUdyb3VwOwog
CiAgICAgW0N1c3RvbVNldHRlcl0gYXR0cmlidXRlIE1lZGlhQ29udHJvbGxlciBjb250cm9sbGVy
OwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1Qp
CiAgICAgW0NvbmRpdGlvbmFsPU1FRElBX1NPVVJDRV0gVmlkZW9QbGF5YmFja1F1YWxpdHkgZ2V0
VmlkZW9QbGF5YmFja1F1YWxpdHkoKTsKLSNlbmRpZgogCiAgICAgW0NvbmRpdGlvbmFsPVdJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVF0gdm9pZCB3ZWJraXRTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIo
KTsKICAgICBbQ29uZGl0aW9uYWw9V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUXSByZWFkb25seSBh
dHRyaWJ1dGUgYm9vbGVhbiB3ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmlkbAppbmRleCBhYjNmOGQwLi41
YmYwM2U0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5pZGwKQEAg
LTMwLDEwICszMCw2IEBACiAgICAgYXR0cmlidXRlIGJvb2xlYW4gc2VsZWN0ZWQ7CiAgICAgYXR0
cmlidXRlIERPTVN0cmluZyB2YWx1ZTsKIAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNU
KSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgdGV4dDsKLSNl
bHNlCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0ZXh0OwotI2VuZGlmCiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaW5kZXg7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsCmluZGV4IDQxYTZmMTYuLjgzODc1OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwKQEAgLTI3LDI1
ICsyNywxNSBAQAogICAgIGF0dHJpYnV0ZSBsb25nIHNlbGVjdGVkSW5kZXg7CiAgICAgW0N1c3Rv
bVNldHRlciwgU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBs
ZW5ndGg7CiAKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QKLSAgICBnZXR0ZXIgTm9kZSBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwotI2Vsc2UKICAg
ICBnZXR0ZXIgSFRNTE9wdGlvbkVsZW1lbnQ/IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CiAg
ICAgZ2V0dGVyIEhUTUxPcHRpb25FbGVtZW50PyBuYW1lZEl0ZW0oRE9NU3RyaW5nIG5hbWUpOwot
I2VuZGlmCiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09C
SkVDVCkKICAgICAvLyBGSVhNRTogU2hvdWxkIGJlOgogICAgIC8vIHZvaWQgYWRkKChIVE1MT3B0
aW9uRWxlbWVudCBvciBIVE1MT3B0R3JvdXBFbGVtZW50KSBlbGVtZW50LCBvcHRpb25hbCAoSFRN
TEVsZW1lbnQgb3IgbG9uZyk/IGJlZm9yZSA9IG51bGwpOwogICAgIFtSYWlzZXNFeGNlcHRpb25d
IHZvaWQgYWRkKEhUTUxFbGVtZW50IGVsZW1lbnQsIG9wdGlvbmFsIEhUTUxFbGVtZW50PyBiZWZv
cmUgPSBudWxsKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGFkZChIVE1MRWxlbWVudCBl
bGVtZW50LCBsb25nIGluZGV4KTsKLSNlbHNlCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBh
ZGQoSFRNTE9wdGlvbkVsZW1lbnQgb3B0aW9uLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKLSNlbmRp
ZgogCiAgICAgdm9pZCByZW1vdmUobG9uZyBpbmRleCk7Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdF
X0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgLy8gRklYTUU6IFRoaXMgb3Zlcmxv
YWQgaXMgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBoYXMgYmVlbiBkcm9wcGVkIGluIEJs
aW5rLgogICAgIHZvaWQgcmVtb3ZlKEhUTUxPcHRpb25FbGVtZW50IG9wdGlvbik7Ci0jZW5kaWYK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsCmluZGV4IDk3Y2Q4
MDEuLmUzOWYzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRs
CkBAIC0zMCwyNyArMzAsMTcgQEAKICAgICBbUmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBu
YW1lOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiByZXF1aXJlZDsKIAotI2lmIGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIGF0dHJpYnV0
ZSBsb25nIHNpemU7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNpemU7Ci0j
ZW5kaWYKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKIAogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gb3B0aW9uczsKICAgICBbU2V0
dGVyUmFpc2VzRXhjZXB0aW9uXSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAKLSNp
ZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QKLSAgICBnZXR0
ZXIgTm9kZSBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIE5vZGUgbmFtZWRJdGVtKERP
TVN0cmluZyBuYW1lKTsKLSNlbHNlCiAgICAgZ2V0dGVyIEhUTUxPcHRpb25FbGVtZW50PyBpdGVt
KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIEhUTUxPcHRpb25FbGVtZW50PyBuYW1lZEl0ZW0o
RE9NU3RyaW5nIG5hbWUpOwotI2VuZGlmCiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGFk
ZChIVE1MRWxlbWVudCBlbGVtZW50LCBvcHRpb25hbCBIVE1MRWxlbWVudD8gYmVmb3JlID0gbnVs
bCk7Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1Qp
CiAgICAgLy8gRklYTUU6IFNob3VsZCBiZToKICAgICAvLyB2b2lkIGFkZCgoSFRNTE9wdGlvbkVs
ZW1lbnQgb3IgSFRNTE9wdEdyb3VwRWxlbWVudCkgZWxlbWVudCwgb3B0aW9uYWwgKEhUTUxFbGVt
ZW50IG9yIGxvbmcpPyBiZWZvcmUgPSBudWxsKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IGFkZChIVE1MRWxlbWVudCBlbGVtZW50LCBsb25nIGluZGV4KTsKQEAgLTU4LDcgKzQ4LDYgQEAK
ICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHJlbW92ZSgpOyAvLyBDaGlsZE5vZGUgb3Zlcmxv
YWQKICAgICAvLyBGSVhNRTogVGhpcyBvdmVybG9hZCBpcyBub3QgaW4gdGhlIHNwZWNpZmljYXRp
b24gYW5kIHdhcyBkcm9wcGVkIGluIEJsaW5rLgogICAgIHZvaWQgcmVtb3ZlKEhUTUxPcHRpb25F
bGVtZW50IG9wdGlvbik7Ci0jZW5kaWYKICAgICBbSW1wbGVtZW50ZWRBcz1yZW1vdmVCeUluZGV4
XSB2b2lkIHJlbW92ZShsb25nIGluZGV4KTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1M
Q29sbGVjdGlvbiBzZWxlY3RlZE9wdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlQ2VsbEVsZW1lbnQuaWRsCmluZGV4IDRjOTY2OTkuLjZhOTBkZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaWRsCkBAIC0yNiwxMyArMjYsOCBAQCBp
bnRlcmZhY2UgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxl
Y3Q9Y2hhcl0gYXR0cmlidXRlIERPTVN0cmluZyBjaDsKICAgICBbUmVmbGVjdD1jaGFyb2ZmXSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGNoT2ZmOwogCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNU
KSAmJiBMQU5HVUFHRV9HT0JKRUNUCi0gICAgW0ltcGxlbWVudGVkQXM9Y29sU3BhbkZvckJpbmRp
bmdzXSBhdHRyaWJ1dGUgbG9uZyBjb2xTcGFuOwotICAgIFtJbXBsZW1lbnRlZEFzPXJvd1NwYW5G
b3JCaW5kaW5nc10gYXR0cmlidXRlIGxvbmcgcm93U3BhbjsKLSNlbHNlCiAgICAgW0ltcGxlbWVu
dGVkQXM9Y29sU3BhbkZvckJpbmRpbmdzXSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2xTcGFu
OwogICAgIFtJbXBsZW1lbnRlZEFzPXJvd1NwYW5Gb3JCaW5kaW5nc10gYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgcm93U3BhbjsKLSNlbmRpZgogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgc3VwcG9z
ZWQgdG8gYmU6CiAgICAgLy8gW1B1dEZvcndhcmRzPXZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUg
RE9NVG9rZW5MaXN0IGhlYWRlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUNvbEVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xF
bGVtZW50LmlkbAppbmRleCBmNzlhZmZhLi4wM2MwMGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5pZGwKQEAgLTIyLDExICsyMiw3IEBAIGludGVyZmFjZSBI
VE1MVGFibGVDb2xFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZsZWN0XSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGFsaWduOwogICAgIFtSZWZsZWN0PWNoYXJdIGF0dHJpYnV0ZSBET01TdHJp
bmcgY2g7CiAgICAgW1JlZmxlY3Q9Y2hhcm9mZl0gYXR0cmlidXRlIERPTVN0cmluZyBjaE9mZjsK
LSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAg
ICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBzcGFuOwotI2Vsc2UKLSAgICBhdHRyaWJ1dGUgbG9u
ZyBzcGFuOwotI2VuZGlmCiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgdkFsaWdu
OwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHdpZHRoOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsCmluZGV4IGIwYzhjYzEuLmE1YTlh
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbApAQCAt
MjksMTMgKzI5LDggQEAgaW50ZXJmYWNlIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBIVE1MRWxlbWVu
dCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgcGxhY2Vob2xkZXI7CiAgICAg
W1JlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIHJlYWRPbmx5OwogICAgIFtSZWZsZWN0XSBhdHRy
aWJ1dGUgYm9vbGVhbiByZXF1aXJlZDsKLSNpZiBkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYm
IExBTkdVQUdFX0dPQkpFQ1QKLSAgICBhdHRyaWJ1dGUgbG9uZyByb3dzOwotICAgIGF0dHJpYnV0
ZSBsb25nIGNvbHM7Ci0jZWxzZQogICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHJvd3M7CiAg
ICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgY29sczsKLSNlbmRpZgogICAgIFtSZWZsZWN0XSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHdyYXA7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1l
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmlkbAppbmRleCBm
ZTFhOTJkLi4yNjFmM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5p
ZGwKQEAgLTUyLDEyICs1Miw5IEBACiAgICAgLy8gVGhlIG51bWJlciBvZiBkZWNvZGVkIGZyYW1l
cyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGJ5IHRoZSBwbGF5ZXIgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMgZHVyaW5nIHBsYXliYWNrLgogICAgIFtDb25kaXRpb25hbD1NRURJQV9TVEFUSVNUSUNT
XSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyB3ZWJraXREcm9wcGVkRnJhbWVDb3Vu
dDsKIAotICAgIC8vIFdvcmsgYXJvdW5kIHNob3J0Y29taW5ncyBpbiB0aGUgZ29iamVjdCBiaW5k
aW5nIGdlbmVyYXRvciBoYW5kbGluZyBvZiBjb25kaXRpb25hbCBmZWF0dXJlcyBieSB0dXJuaW5n
IHRoZXNlIG9mZiBmb3IgZ29iamVjdC4KLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkg
JiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJFU0VOVEFUSU9O
X01PREVdIGJvb2xlYW4gd2Via2l0U3VwcG9ydHNQcmVzZW50YXRpb25Nb2RlKFZpZGVvUHJlc2Vu
dGF0aW9uTW9kZSBtb2RlKTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJFU0VOVEFUSU9OX01P
REVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBWaWRlb1ByZXNlbnRhdGlvbk1vZGUgd2Via2l0UHJlc2Vu
dGF0aW9uTW9kZTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9fUFJFU0VOVEFUSU9OX01PREVdIHZv
aWQgd2Via2l0U2V0UHJlc2VudGF0aW9uTW9kZShWaWRlb1ByZXNlbnRhdGlvbk1vZGUgbW9kZSk7
Ci0jZW5kaWYKIH07CiAKIFtDb25kaXRpb25hbD1WSURFT19QUkVTRU5UQVRJT05fTU9ERV0gZW51
bSBWaWRlb1ByZXNlbnRhdGlvbk1vZGUgeyAiZnVsbHNjcmVlbiIsICJwaWN0dXJlLWluLXBpY3R1
cmUiLCAiaW5saW5lIiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURh
dGEuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaWRsCmluZGV4IDIxNTAxMjcu
LjlhMGFlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YS5pZGwKQEAgLTM2LDcgKzM2LDQgQEAK
IF0gaW50ZXJmYWNlIEltYWdlRGF0YSB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgd2lk
dGg7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgaGVpZ2h0OwotI2lmIGRlZmluZWQoTEFO
R1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVAotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBVaW50OENsYW1wZWRBcnJheSBkYXRhOwotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9VUkxVdGlscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFV0aWxz
LmlkbAppbmRleCAyNzA4YmNkLi5lYzg1ODcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1VSTFV0aWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFV0aWxzLmlkbApA
QCAtMjYsOSArMjYsNyBAQAogW05vSW50ZXJmYWNlT2JqZWN0XSBpbnRlcmZhY2UgVVJMVXRpbHMg
ewogICAgIFtTZXR0ZXJSYWlzZXNFeGNlcHRpb24sIFVSTF0gYXR0cmlidXRlIFVTVlN0cmluZyBo
cmVmOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCiAgICAgW05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgVVNWU3RyaW5nIG9yaWdpbjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suaWRsCmluZGV4IGI3ODAzNmEuLjAwMDgxNDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5pZGwKQEAgLTQ5LDExICs0OSw4IEBAIGVudW0g
VGV4dFRyYWNrS2luZCB7ICJzdWJ0aXRsZXMiLCAiY2FwdGlvbnMiLCAiZGVzY3JpcHRpb25zIiwg
ImNoYXB0ZXJzIiwgIm1ldGFkCiAKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uY3VlY2hh
bmdlOwogCi0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpF
Q1QpCi0gICAgLy8gV29yayBhcm91bmQgc2hvcnRjb21pbmdzIGluIHRoZSBnb2JqZWN0IGJpbmRp
bmcgZ2VuZXJhdG9yIGhhbmRsaW5nIG9mIGNvbmRpdGlvbmFsIGZlYXR1cmVzIGJ5IHR1cm5pbmcg
dGhlc2Ugb2ZmIGZvciBnb2JqZWN0LgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBWVFRSZWdpb25M
aXN0IHJlZ2lvbnM7CiAgICAgLy8gRklYTUU6IHJlZ2lvbiBwYXJhbWV0ZXIgc2hvdWxkIG5vdCBi
ZSBudWxsYWJsZSBpbiBhZGRSZWdpb24gYW5kIHJlbW92ZVJlZ2lvbi4KICAgICB2b2lkIGFkZFJl
Z2lvbihWVFRSZWdpb24/IHJlZ2lvbik7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCByZW1v
dmVSZWdpb24oVlRUUmVnaW9uPyByZWdpb24pOwotI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uaWRsCmluZGV4IDc5OWI3ZDUuLjc2MTkzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5pZGwKQEAgLTU0LDkgKzU0LDcgQEAKICAgICB2b2lkIHJlbW92ZUFsbFJh
bmdlcygpOwogICAgIHZvaWQgYWRkUmFuZ2UoUmFuZ2UgcmFuZ2UpOwogCi0jaWYgIShkZWZpbmVk
KExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgW05vdEVudW1lcmFi
bGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotI2VuZGlmCiAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHR5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBjY2U3
YmQwLi4wMTgyMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC02OCw5ICs2OCw3
IEBACiAKICAgICBbQ3VzdG9tXSBhbnkgc2hvd01vZGFsRGlhbG9nKERPTVN0cmluZyB1cmwsIG9w
dGlvbmFsIGFueSBkaWFsb2dBcmdzLCBvcHRpb25hbCBET01TdHJpbmcgZmVhdHVyZUFyZ3MpOwog
Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAg
ICAgdm9pZCBhbGVydCgpOwotI2VuZGlmCiAgICAgdm9pZCBhbGVydChET01TdHJpbmcgbWVzc2Fn
ZSk7CiAgICAgYm9vbGVhbiBjb25maXJtKG9wdGlvbmFsIERPTVN0cmluZyBtZXNzYWdlID0gIiIp
OwogICAgIERPTVN0cmluZz8gcHJvbXB0KG9wdGlvbmFsIERPTVN0cmluZyBtZXNzYWdlID0gIiIs
IG9wdGlvbmFsIERPTVN0cmluZyBkZWZhdWx0VmFsdWUgPSAiIik7CkBAIC0xMDMsMTEgKzEwMSw5
IEBACiAgICAgdm9pZCBzY3JvbGxUbyh1bnJlc3RyaWN0ZWQgZG91YmxlIHgsIHVucmVzdHJpY3Rl
ZCBkb3VibGUgeSk7CiAgICAgW0ltcGxlbWVudGVkQXM9c2Nyb2xsVG9dIHZvaWQgc2Nyb2xsKHVu
cmVzdHJpY3RlZCBkb3VibGUgeCwgdW5yZXN0cmljdGVkIGRvdWJsZSB5KTsKIAotI2lmICEoZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIHZvaWQgc2Ny
b2xsQnkob3B0aW9uYWwgU2Nyb2xsVG9PcHRpb25zIG9wdGlvbik7CiAgICAgdm9pZCBzY3JvbGxU
byhvcHRpb25hbCBTY3JvbGxUb09wdGlvbnMgb3B0aW9ucyk7CiAgICAgW0ltcGxlbWVudGVkQXM9
c2Nyb2xsVG9dIHZvaWQgc2Nyb2xsKG9wdGlvbmFsIFNjcm9sbFRvT3B0aW9ucyBvcHRpb25zKTsK
LSNlbmRpZgogCiAgICAgdm9pZCBtb3ZlQnkob3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IHgg
PSBOYU4sIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCB5ID0gTmFOKTsgLy8gRklYTUU6IHRo
aXMgc2hvdWxkIHRha2UgbG9uZ3Mgbm90IGZsb2F0cy4KICAgICB2b2lkIG1vdmVUbyhvcHRpb25h
bCB1bnJlc3RyaWN0ZWQgZmxvYXQgeCA9IE5hTiwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0
IHkgPSBOYU4pOyAvLyBGSVhNRTogdGhpcyBzaG91bGQgdGFrZSBsb25ncyBub3QgZmxvYXRzLgpA
QCAtMTIyLDEwICsxMTgsOCBAQAogCiAgICAgYXR0cmlidXRlIERPTVN0cmluZyBzdGF0dXM7CiAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyBkZWZhdWx0U3RhdHVzOwotI2lmICEoZGVmaW5lZChMQU5H
VUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIC8vIFRoaXMgYXR0cmlidXRl
IGlzIGFuIGFsaWFzIG9mIGRlZmF1bHRTdGF0dXMgYW5kIGlzIG5lY2Vzc2FyeSBmb3IgbGVnYWN5
IHVzZXMuCiAgICAgW0ltcGxlbWVudGVkQXM9ZGVmYXVsdFN0YXR1c10gYXR0cmlidXRlIERPTVN0
cmluZyBkZWZhdWx0c3RhdHVzOwotI2VuZGlmCiAKICAgICAvLyBTZWxmIHJlZmVyZW50aWFsIGF0
dHJpYnV0ZXMKICAgICBbUmVwbGFjZWFibGUsIERvTm90Q2hlY2tTZWN1cml0eU9uR2V0dGVyXSBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NV2luZG93IHNlbGY7CkBAIC0xNDcsMTUgKzE0MSwxMSBAQAog
CiAgICAgLy8gRE9NIExldmVsIDIgU3R5bGUgSW50ZXJmYWNlCiAgICAgW05ld09iamVjdF0gQ1NT
U3R5bGVEZWNsYXJhdGlvbiBnZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQgZWxlbWVudCwgb3B0aW9u
YWwgRE9NU3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0gbnVsbCk7Ci0jaWYgIShkZWZpbmVkKExBTkdV
QUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAgICAgLy8gRklYTUU6IERyb3AgdGhp
cyBvdmVybG9hZCBvbmNlIDxyZGFyOi8vcHJvYmxlbS8yODAxNjc3OD4gaGFzIGJlZW4gZml4ZWQu
CiAgICAgW05ld09iamVjdCwgUmFpc2VzRXhjZXB0aW9uXSBDU1NTdHlsZURlY2xhcmF0aW9uIGdl
dENvbXB1dGVkU3R5bGUoRG9jdW1lbnQgZG9jdW1lbnQsIG9wdGlvbmFsIERPTVN0cmluZz8gcHNl
dWRvRWxlbWVudCA9IG51bGwpOwotI2VuZGlmCiAKICAgICAvLyBXZWJLaXQgZXh0ZW5zaW9ucwot
I2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAg
IENTU1J1bGVMaXN0IGdldE1hdGNoZWRDU1NSdWxlcyhvcHRpb25hbCBFbGVtZW50PyBlbGVtZW50
ID0gbnVsbCwgb3B0aW9uYWwgRE9NU3RyaW5nPyBwc2V1ZG9FbGVtZW50ID0gbnVsbCk7Ci0jZW5k
aWYKIAogICAgIFtSZXBsYWNlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIHVucmVzdHJpY3RlZCBk
b3VibGUgZGV2aWNlUGl4ZWxSYXRpbzsKICAgICAKQEAgLTE3NSwxMSArMTY1LDcgQEAKICAgICBb
Q29uZGl0aW9uYWw9T1JJRU5UQVRJT05fRVZFTlRTXSByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBv
cmllbnRhdGlvbjsKIAogICAgIC8vIGNyb3NzLWRvY3VtZW50IG1lc3NhZ2luZwotI2lmICEoZGVm
aW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIFtEb05vdENo
ZWNrU2VjdXJpdHksIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uLCBGb3J3YXJkRGVjbGFyZUluSGVh
ZGVyXSB2b2lkIHBvc3RNZXNzYWdlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBtZXNzYWdlLCBVU1ZT
dHJpbmcgdGFyZ2V0T3JpZ2luLCBvcHRpb25hbCBBcnJheSBtZXNzYWdlUG9ydHMpOwotI2Vsc2UK
LSAgICBbRG9Ob3RDaGVja1NlY3VyaXR5LCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbiwgRm9yd2Fy
ZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBwb3N0TWVzc2FnZShTZXJpYWxpemVkU2NyaXB0VmFsdWUg
bWVzc2FnZSwgb3B0aW9uYWwgTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQsIERPTVN0cmluZyB0YXJn
ZXRPcmlnaW4pOwotI2VuZGlmCiAKICAgICBbQ29uZGl0aW9uYWw9V0VCX1RJTUlORywgUmVwbGFj
ZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBQZXJmb3JtYW5jZSBwZXJmb3JtYW5jZTsKIApAQCAt
MTkyLDcgKzE3OCw2IEBACiAgICAgdm9pZCBjYXB0dXJlRXZlbnRzKC8qaW4gbG9uZyBldmVudEZs
YWdzKi8pOwogICAgIHZvaWQgcmVsZWFzZUV2ZW50cygvKmluIGxvbmcgZXZlbnRGbGFncyovKTsK
IAotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9HT0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQog
ICAgIFtDdXN0b21HZXR0ZXIsIEN1c3RvbUNvbnN0cnVjdG9yXSBhdHRyaWJ1dGUgSFRNTEltYWdl
RWxlbWVudE5hbWVkQ29uc3RydWN0b3IgSW1hZ2U7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRv
cgogICAgIGF0dHJpYnV0ZSBYTUxEb2N1bWVudENvbnN0cnVjdG9yIFNWR0RvY3VtZW50OwogCkBA
IC0yMDAsNyArMTg1LDYgQEAKICAgICBhdHRyaWJ1dGUgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVj
dG9yIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI7IC8vIEZJWE1FOiBBZGQgbWV0cmljcyB0byBkZXRl
cm1pbmUgd2hlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMuCiAKICAgICBbQ29uZGl0aW9uYWw9Q1VTVE9N
X0VMRU1FTlRTLCBFbmFibGVkQXRSdW50aW1lPUN1c3RvbUVsZW1lbnRzLCBJbXBsZW1lbnRlZEFz
PWVuc3VyZUN1c3RvbUVsZW1lbnRSZWdpc3RyeV0gcmVhZG9ubHkgYXR0cmlidXRlIEN1c3RvbUVs
ZW1lbnRSZWdpc3RyeSBjdXN0b21FbGVtZW50czsKLSNlbmRpZgogCiAgICAgLy8gRXZlbnQgSGFu
ZGxlcnMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudC5pZGwKaW5kZXggNzg3ZTI0Yy4uY2RlZTNh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnQuaWRsCkBAIC0yMCw3ICsyMCw1IEBACiAgKi8K
IAogcGFydGlhbCBpbnRlcmZhY2UgRG9jdW1lbnQgewotI2lmICEoZGVmaW5lZChMQU5HVUFHRV9H
T0JKRUNUKSAmJiBMQU5HVUFHRV9HT0JKRUNUKQogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdT
VkdFbGVtZW50PyByb290RWxlbWVudDsKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmlkbAppbmRleCAzOTgzNmI4Li4xMmQ3ZWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaWRs
CkBAIC0zNywxMiArMzcsMTAgQEAKICAgICAvLyBGSVhNRTogVXNpbmcgInVuZGVmaW5lZCIgYXMg
ZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWUgaXMgd3JvbmcuCiAgICAgQ1NTVmFsdWUgZ2V0UHJlc2Vu
dGF0aW9uQXR0cmlidXRlKG9wdGlvbmFsIERPTVN0cmluZyBuYW1lID0gInVuZGVmaW5lZCIpOwog
Ci0jaWYgIShkZWZpbmVkKExBTkdVQUdFX0dPQkpFQ1QpICYmIExBTkdVQUdFX0dPQkpFQ1QpCiAg
ICAgdm9pZCBmb2N1cygpOwogICAgIHZvaWQgYmx1cigpOwogCiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZ01hcCBkYXRhc2V0OwotI2VuZGlmCiB9OwogCiBTVkdFbGVtZW50IGltcGxl
bWVudHMgR2xvYmFsRXZlbnRIYW5kbGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFeGNlcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4Y2VwdGlvbi5pZGwK
aW5kZXggNDhlNzhiMS4uZmEwYzExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0V4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0V4Y2VwdGlvbi5pZGwK
QEAgLTI2LDkgKzI2LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAg
ICBuYW1lOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgIG1lc3NhZ2U7
CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkK
ICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7Ci0jZW5kaWYKIAogICAg
IC8vIFNWR0V4Y2VwdGlvbkNvZGUKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTVkdfV1JPTkdf
VFlQRV9FUlIgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmlkbAppbmRleCAxOWIzNzc1Li5mZGZjYTcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlk
bApAQCAtMzMsMTEgKzMzLDcgQEAKICAgICBFeHBvc2VkPURlZGljYXRlZFdvcmtlciwKICAgICBK
U0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBdIGludGVyZmFjZSBEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZSA6IFdvcmtlckdsb2JhbFNjb3BlIHsKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09C
SkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgcG9zdE1lc3NhZ2UoYW55IG1lc3NhZ2UsIG9wdGlvbmFsIEFycmF5IG1lc3NhZ2VQb3J0
cyk7Ci0jZWxzZQotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoRE9NU3Ry
aW5nIG1lc3NhZ2UsIG9wdGlvbmFsIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KTsKLSNlbmRpZgog
CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuaWRsCmluZGV4IDYxNjg1OTguLjIwNDdhODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlci5pZGwKQEAgLTMxLDExICszMSw3IEBACiBdIGludGVyZmFjZSBXb3JrZXIgOiBFdmVudFRh
cmdldCB7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2U7CiAKLSNpZiAhKGRl
ZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICBbQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXplZFNjcmlwdFZhbHVl
IG1lc3NhZ2UsIG9wdGlvbmFsIEFycmF5IG1lc3NhZ2VQb3J0cyk7Ci0jZWxzZQotICAgIFtSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgcG9zdE1lc3NhZ2UoU2VyaWFsaXplZFNjcmlwdFZhbHVlIG1lc3Nh
Z2UsIG9wdGlvbmFsIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KTsKLSNlbmRpZgogCiAgICAgdm9p
ZCB0ZXJtaW5hdGUoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckdsb2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuaWRsCmluZGV4IGQ5OTM4ZWEuLjk4NmEzNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmlkbApAQCAtMzEsOSArMzEsNyBAQAogICAgIEpTTGVn
YWN5UGFyZW50PUpTV29ya2VyR2xvYmFsU2NvcGVCYXNlLAogXSBpbnRlcmZhY2UgV29ya2VyR2xv
YmFsU2NvcGUgOiBFdmVudFRhcmdldCB7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVD
VCkgJiYgTEFOR1VBR0VfR09CSkVDVCkKICAgICByZWFkb25seSBhdHRyaWJ1dGUgV29ya2VyR2xv
YmFsU2NvcGUgc2VsZjsKLSNlbmRpZgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBXb3JrZXJMb2Nh
dGlvbiBsb2NhdGlvbjsKICAgICB2b2lkIGNsb3NlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEV4Y2VwdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhF
eGNlcHRpb24uaWRsCmluZGV4IDdhODhhNWYuLjRlMDhmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEV4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoRXhjZXB0aW9uLmlkbApAQCAtMzQsOSArMzQsNyBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgbmFtZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3Nh
Z2U7CiAKLSNpZiAhKGRlZmluZWQoTEFOR1VBR0VfR09CSkVDVCkgJiYgTEFOR1VBR0VfR09CSkVD
VCkKICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7Ci0jZW5kaWYKIAog
ICAgIC8vIFhQYXRoRXhjZXB0aW9uQ29kZQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElOVkFM
SURfRVhQUkVTU0lPTl9FUlIgPSA1MTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBmM2EzZGUwLi44ODliYmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR09iamVjdCBE
T00gYmluZGluZ3MgdG8gV2ViS2l0MiBsYXllciBhbmQgc3RvcCBhdXRvIGdlbmVyYXRpbmcgdGhl
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNDM4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgTW92
ZSBhbGwgR09iamVjdCBiaW5kaW5ncyBjb2RlIHRvIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00uCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NOgorCiAyMDE2LTA4LTMxICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQgc2hvdWxkIHNl
dCBhIHN1YnN5c3RlbSBmb3Igb3NfbG9nIHNvIGl0J3MgZWFzaWVyIHRvIGZpbHRlciBmb3IgV2Vi
S2l0IGxvZyBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBjMDAxYTExLi5l
ZWVjNjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTUsNiArMTUsNyBAQCBjb25m
aWd1cmVfZmlsZSh3ZWJraXQyZ3RrLXdlYi1leHRlbnNpb24ucGMuaW4gJHtXZWJLaXQyV2ViRXh0
ZW5zaW9uX1BLR0NPTkZJR19GSQogCiBhZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19XRUJLSVQp
CiBhZGRfZGVmaW5pdGlvbnMoLURXRUJLSVQyX0NPTVBJTEFUSU9OKQorYWRkX2RlZmluaXRpb25z
KC1EV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJKQogCiBhZGRfZGVmaW5pdGlvbnMoLURMSUJF
WEVDRElSPSIke0NNQUtFX0lOU1RBTExfRlVMTF9MSUJFWEVDRElSfSIpCiBhZGRfZGVmaW5pdGlv
bnMoLURQS0dMSUJFWEVDRElSPSIke0xJQkVYRUNfSU5TVEFMTF9ESVJ9IikKQEAgLTMyMiw2ICsz
MjMsMTg2IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvQ29v
a2llcy9zb3VwL1dlYkNvb2tpZU1hbmFnZXJTb3VwLmNwcAogICAgIFdlYlByb2Nlc3MvQ29va2ll
cy9zb3VwL1dlYktpdFNvdXBDb29raWVKYXJTcWxpdGUuY3BwCiAKKyAgICBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9ET01PYmplY3RDYWNoZS5jcHAKKyAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3RFdmVudExpc3Rl
bmVyLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVj
dE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9HT2JqZWN0WFBhdGhOU1Jlc29sdmVyLmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0YWJsZS5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvbkVmZmVj
dC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUFuaW1hdGlvblRpbWVsaW5lLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQXR0ci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2suY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrTGlzdC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhclByb3AuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXR0
ZXJ5TWFuYWdlci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUJsb2IuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQ1NTU3R5bGVTaGVldC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNvbW1lbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b20uY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01B
cHBsaWNhdGlvbkNhY2hlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24uY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlw
ZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTU1pbWVUeXBlQXJyYXkuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2lu
QXJyYXkuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01TZWxlY3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdMaXN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFwLmNwcAorICAgIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NVG9rZW5MaXN0LmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9N
V2luZG93LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNlLmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGVwcmVjYXRlZC5j
cHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURv
Y3VtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRBbmltYXRpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50LmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZS5j
cHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURv
Y3VtZW50VHlwZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01FdmVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZS5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZC5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVw
YWRMaXN0LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NR2VvbG9jYXRpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFy
ZWFFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1lbnQuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
Qm9keUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRExpc3RFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRGl2RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxEb2N1bWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudC5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxG
aWVsZFNldEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVt
ZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIUkVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQuY3BwCisg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVh
ZGluZ0VsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTElFbGVtZW50LmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVs
RWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxMZWdlbmRFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50LmNwcAorICAgIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TWFycXVlZUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1ldGFFbGVt
ZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE1vZEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQuY3BwCisg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCisg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFy
YWdyYXBoRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5jcHAKKyAgICBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQcml2YXRlLmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFF1b3RlRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVF
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKKyAg
ICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJs
ZUNvbEVsZW1lbnQuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuY3BwCisgICAg
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RF
bGVtZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnkuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50LmNwcAorICAgIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3Qu
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01M
b2NhdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU1lZGlhQ29udHJvbGxlci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNlcy5jcHAKKyAgICBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3IuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3QuY3Bw
CisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YVF1ZXJ5TGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0LmNwcAor
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VF
dmVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU5hbWVkTm9kZU1hcC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU5hdmlnYXRvci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNlcy5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGUuY3BwCisg
ICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmls
dGVyLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTm9kZUl0ZXJhdG9yLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTm9kZUxpc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01PYmplY3QuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZS5jcHAKKyAgICBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnku
Y3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Q
ZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZy5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByaXZhdGUuY3BwCisgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01SYW5nZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVNjcmVlbi5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcy5jcHAKKyAgICBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50LmNw
cAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwCisgICAgV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZUlu
Zm8uY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01TdG9yYWdlUXVvdGEuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01TdHlsZU1lZGlhLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldC5jcHAKKyAgICBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0LmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dC5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRU
cmFjay5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVRleHRUcmFja0N1ZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0LmNwcAorICAgIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJhbmdlcy5j
cHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRv
dWNoLmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVHJhY2tFdmVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVRyZWVXYWxrZXIuY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyLmNwcAorICAg
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3Nh
Z2VIYW5kbGVyc05hbWVzcGFjZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVZUVEN1ZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5U3RhdGUuY3BwCisgICAgV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0
eS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVZpZGVvVHJhY2suY3BwCisgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01WaWRlb1RyYWNrTGlzdC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYkFuaW1hdGlvbi5jcHAKKyAgICBXZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVkRmxvdy5jcHAK
KyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktp
dE5hbWVzcGFjZS5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVdlYktpdFBvaW50LmNwcAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxFdmVudC5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5jcHAKKyAgICBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoTlNSZXNv
bHZlci5jcHAKKyAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVhQYXRoUmVzdWx0LmNwcAorCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL1dlYktpdENvbnNvbGVNZXNzYWdlLmNwcAogICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9XZWJLaXRGcmFtZS5jcHAKICAgICBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvV2ViS2l0U2NyaXB0V29ybGQuY3BwCkBAIC00NDksNiArNjMwLDMzNCBAQCBzZXQo
V2ViS2l0MldlYkV4dGVuc2lvbl9JTlNUQUxMRURfSEVBREVSUwogICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay93ZWJraXQtd2ViLWV4dGVuc2lvbi5o
CiApCiAKK3NldChXZWJLaXRET01fSU5TVEFMTEVEX0hFQURFUlMKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWF1dG9jbGVh
bnVwcy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS93ZWJraXRkb21hdXRvY2xlYW51cHMtdW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tZGVmaW5l
cy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbS5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01B
bmltYXRhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRp
b25UaW1lbGluZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHJVbnN0YWJsZS5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01BdWRpb1RyYWNrLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUJhclByb3AuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxvYi5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01CbG9iVW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUNoYXJhY3RlckRhdGEuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVVuc3RhYmxlLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNvbW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlTGlzdC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DU1NSdWxlVW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01DU1NTdHlsZVNoZWV0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUN1c3RvbS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b21VbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhYmFz
ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01EYXRhQ3VlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURlcHJlY2F0ZWQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RG9jdW1lbnRBbmltYXRpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Eb2N1bWVudEZyYWdtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRG9jdW1lbnRUaW1lbGluZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGUuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RG9jdW1lbnRUeXBlVW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRVbnN0YWJsZS5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01BcHBsaWNhdGlvbkNhY2hlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNTU05hbWVzcGFjZS5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURPTU1pbWVUeXBlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24u
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURPTVNlbGVjdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdMaXN0LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURP
TVN0cmluZ01hcC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5k
b3dVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnRVbnN0YWJs
ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01FdmVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFRhcmdldC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01F
dmVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3QuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRmlsZVVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWQuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBh
ZExpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NR2VvbG9jYXRpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSGlzdG9yeS5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFVuc3Rh
YmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
QXVkaW9FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
Qm9keUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFVuc3RhYmxlLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxDYW52YXNFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxEZXRhaWxzRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxEb2N1bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50
VW5zdGFibGUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3Jt
RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MRnJhbWVFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEhlYWRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MSFJFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MSHRtbEVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFVuc3RhYmxlLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMZWdl
bmRFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtF
bGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxNYXBFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MTWFycXVlZUVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNZW51RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0v
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT0xpc3RF
bGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MT3B0R3JvdXBFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rp
b25VbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MUGFyYW1FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQcmVFbGVtZW50LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxRdW90ZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFNjcmlwdEVsZW1lbnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudFVuc3RhYmxlLmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGUuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFRhYmxlUm93RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnRVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudC5oCisgICAgJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXli
b2FyZEV2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0aW9u
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU1lZGlhQ29udHJvbGxlci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYURldmljZXMuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTWVkaWFFcnJvci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3QuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVk
aWFRdWVyeUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU1lc3NhZ2VQb3J0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TW91c2VFdmVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVkTm9kZU1hcC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01O
YXZpZ2F0b3IuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5v
ZGVGaWx0ZXIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlSXRlcmF0b3IuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTm9kZUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZVVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU9iamVj
dC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVRp
bWluZy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2Uu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NUmFuZ2VVbnN0YWJsZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TY3JlZW4uaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzRXZlbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNW
b2ljZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TdG9yYWdlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VJbmZvLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVN0b3JhZ2VRdW90YS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZU1lZGlhLmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxl
U2hlZXQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dC5oCisgICAg
JHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01UZXh0VHJhY2tDdWUuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdC5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01UZXh0VHJhY2suaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrTGlzdC5oCisgICAgJHtXRUJLSVQyX0RJ
Un0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UaW1lUmFu
Z2VzLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVRvdWNoLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VHJlZVdhbGtlci5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnRVbnN0YWJs
ZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VI
YW5kbGVyc05hbWVzcGFjZS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0eVN0YXRlLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZp
ZGVvUGxheWJhY2tRdWFsaXR5LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2suaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlk
ZW9UcmFja0xpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYkFuaW1hdGlvbi5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlLmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVdlYktpdFBvaW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZlbnQuaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
V2hlZWxFdmVudFVuc3RhYmxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5oCisgICAgJHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01YUGF0aE5TUmVzb2x2ZXIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHQuaAorKQorCitzZXQoV2Vi
S2l0RE9NX0dUS0RPQ19IRUFERVJTCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRhYmxlLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0
dHIuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQmxvYi5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24uaAorICAgICR7V0VC
S0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Q2hhcmFjdGVyRGF0YS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Db21tZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGUuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ1NTUnVsZUxpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01DU1NTdHlsZVNoZWV0LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUN1
c3RvbS5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01EZXByZWNhdGVkLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9u
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnQuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRUeXBlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uLmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURPTVdpbmRvdy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFRhcmdldC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01GaWxlLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NR2FtZXBhZExpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9keUVsZW1lbnQuaAor
ICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEb2N1bWVudC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxGaWVsZFNldEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50LmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxGb3JtRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50LmgKKyAg
ICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSFJFbGVtZW50LmgK
KyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxIdG1sRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVu
dC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MTElFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MTWFwRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQu
aAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MTW9kRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1l
bnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50LmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxQYXJhbUVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQuaAorICAgICR7V0VCS0lU
Ml9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFF1b3RlRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudC5oCisgICAgJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50LmgKKyAgICAke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFRpdGxlRWxlbWVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmgKKyAgICAk
e1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUtleWJvYXJkRXZlbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFMaXN0LmgKKyAgICAke1dFQktJVDJf
RElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNl
RXZlbnQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvck1lZGlh
RGV2aWNlcy5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlRmlsdGVyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGUuaAorICAgICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTm9kZUl0ZXJhdG9yLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVMaXN0LmgKKyAgICAke1dFQktJVDJfRElS
fS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU9iamVjdC5o
CisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuaAorICAg
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3RvcmFnZUluZm8uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmgKKyAgICAke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0
eWxlU2hlZXQuaAorICAgICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuaAorICAgICR7V0VCS0lUMl9ESVJ9
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dC5oCisg
ICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UcmVlV2Fsa2VyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVJRXZlbnQuaAorICAgICR7V0VCS0lUMl9E
SVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2hlZWxF
dmVudC5oCisgICAgJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01YUGF0aEV4cHJlc3Npb24uaAorICAgICR7V0VCS0lUMl9ESVJ9L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29s
dmVyLmgKKyAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVhQYXRoUmVzdWx0LmgKKykKKwogc2V0KEluc3BlY3RvckZpbGVzCiAg
ICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS8qLmh0bWwKICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvKi5qcwpAQCAtNTI4LDYgKzEwMzcsNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNz
L2xpbnV4IgogICAgICIke1dFQktJVDJfRElSfS9VSVByb2Nlc3Mvc291cCIKICAgICAiJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrIgorICAgICIke1dFQktJ
VDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NIgogICAgICIke1dF
QktJVDJfRElSfS9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvdW5peCIKICAgICAiJHtXRUJL
SVQyX0RJUn0vV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL3gxMSIKICAgICAiJHtXRUJLSVQy
X0RJUn0vV2ViUHJvY2Vzcy9ndGsiCkBAIC01OTIsNyArMTEwMiw2IEBAIHNldChTaGFyZWRXZWJL
aXQyTGlicmFyaWVzCiApCiAKIGxpc3QoQVBQRU5EIFdlYktpdDJfTElCUkFSSUVTCi0gICAgR09i
amVjdERPTUJpbmRpbmdzCiAgICAgV2ViQ29yZVBsYXRmb3JtR1RLCiAgICAgJHtHVEtfVU5JWF9Q
UklOVF9MSUJSQVJJRVN9CiApCkBAIC04NzgsMTMgKzEzODcsMTEgQEAgaW5jbHVkZV9kaXJlY3Rv
cmllcygKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
YyIKICAgICAiJHtERVJJVkVEX1NPVVJDRVNfRElSfSIKICAgICAiJHtERVJJVkVEX1NPVVJDRVNf
RElSfS9JbmplY3RlZEJ1bmRsZSIKLSAgICAiJHtERVJJVkVEX1NPVVJDRVNfR09CSkVDVF9ET01f
QklORElOR1NfRElSfSIKICAgICAiJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfSIKICAgICAiJHtG
T1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVJ9IgogKQogCiBhZGRfbGlicmFyeSh3ZWJr
aXQyZ3RraW5qZWN0ZWRidW5kbGUgTU9EVUxFICIke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL2d0
ay9XZWJHdGtJbmplY3RlZEJ1bmRsZU1haW4uY3BwIikKLWFkZF9kZXBlbmRlbmNpZXMod2Via2l0
Mmd0a2luamVjdGVkYnVuZGxlIEdPYmplY3RET01CaW5kaW5ncykKIGFkZF93ZWJraXQyX3ByZWZp
eF9oZWFkZXIod2Via2l0Mmd0a2luamVjdGVkYnVuZGxlKQogdGFyZ2V0X2xpbmtfbGlicmFyaWVz
KHdlYmtpdDJndGtpbmplY3RlZGJ1bmRsZSBXZWJLaXQyKQogCkBAIC05OTUsNyArMTUwMiw3IEBA
IGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgLUkke0ZPUldBUkRJTkdfSEVBREVSU19XRUJL
SVQyR1RLX0RJUn0KICAgICAgICAgLUkke0ZPUldBUkRJTkdfSEVBREVSU19XRUJLSVQyR1RLX0VY
VEVOU0lPTl9ESVJ9CiAgICAgICAgIC1JJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrCi0gICAgICAgICR7R09iamVjdERPTUJpbmRpbmdzX0dJUl9IRUFERVJT
fQorICAgICAgICAke1dlYktpdERPTV9JTlNUQUxMRURfSEVBREVSU30KICAgICAgICAgJHtXZWJL
aXQyV2ViRXh0ZW5zaW9uX0lOU1RBTExFRF9IRUFERVJTfQogICAgICAgICAke1dFQktJVDJfRElS
fS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5oCiAgICAgICAgICR7V0VCS0lU
Ml9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51LmNwcApAQCAtMTAzNCw2
ICsxNTQxLDkgQEAgaW5zdGFsbChGSUxFUyAke1dlYktpdDJHVEtfSU5TVEFMTEVEX0hFQURFUlN9
CiAgICAgICAgICAgICAgICR7V2ViS2l0MldlYkV4dGVuc2lvbl9JTlNUQUxMRURfSEVBREVSU30K
ICAgICAgICAgREVTVElOQVRJT04gIiR7V0VCS0lUR1RLX0hFQURFUl9JTlNUQUxMX0RJUn0vd2Vi
a2l0MiIKICkKK2luc3RhbGwoRklMRVMgJHtXZWJLaXRET01fSU5TVEFMTEVEX0hFQURFUlN9Cisg
ICAgICAgIERFU1RJTkFUSU9OICIke1dFQktJVEdUS19IRUFERVJfSU5TVEFMTF9ESVJ9L3dlYmtp
dGRvbSIKKykKIAogaWYgKEVOQUJMRV9JTlRST1NQRUNUSU9OKQogICAgIGluc3RhbGwoRklMRVMg
JHtDTUFLRV9CSU5BUllfRElSfS9XZWJLaXQyLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfS5naXIK
QEAgLTEwNjIsNiArMTU3MiwyMCBAQCBmaWxlKFdSSVRFICR7Q01BS0VfQklOQVJZX0RJUn0vZ3Rr
ZG9jLXdlYmtpdDJndGsuY2ZnCiAgICAgIm1haW5fc2dtbF9maWxlPXdlYmtpdDJndGstZG9jcy5z
Z21sXG4iCiApCiAKK2ZpbGUoV1JJVEUgJHtDTUFLRV9CSU5BUllfRElSfS9ndGtkb2Mtd2Via2l0
ZG9tLmNmZworICAgICJbd2Via2l0ZG9tZ3RrLSR7V0VCS0lUR1RLX0FQSV9WRVJTSU9OfV1cbiIK
KyAgICAicGtnY29uZmlnX2ZpbGU9JHtXZWJLaXQyX1BLR0NPTkZJR19GSUxFfVxuIgorICAgICJu
YW1lc3BhY2U9d2Via2l0X2RvbVxuIgorICAgICJjZmxhZ3M9LUkke0NNQUtFX1NPVVJDRV9ESVJ9
L1NvdXJjZVxuIgorICAgICIgICAgICAgLUkke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NXG4iCisgICAgIiAgICAgICAtSSR7REVSSVZFRF9TT1VSQ0VT
X1dFQktJVDJHVEtfRElSfVxuIgorICAgICIgICAgICAgLUkke0ZPUldBUkRJTkdfSEVBREVSU19X
RUJLSVQyR1RLX0RJUn1cbiIKKyAgICAiZG9jX2Rpcj0ke1dFQktJVDJfRElSfS9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL2RvY3NcbiIKKyAgICAic291cmNlX2RpcnM9JHtX
RUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTVxuIgorICAg
ICJoZWFkZXJzPSR7V2ViS2l0RE9NX0dUS0RPQ19IRUFERVJTfVxuIgorICAgICJtYWluX3NnbWxf
ZmlsZT13ZWJraXRkb21ndGstZG9jcy5zZ21sXG4iCispCisKIGFkZF9jdXN0b21fdGFyZ2V0KFdl
YktpdDItZm9yd2FyZGluZy1oZWFkZXJzCiAgICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0g
JHtXRUJLSVQyX0RJUn0vU2NyaXB0cy9nZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgLS1p
bmNsdWRlLXBhdGggJHtXRUJLSVQyX0RJUn0gLS1vdXRwdXQgJHtGT1JXQVJESU5HX0hFQURFUlNf
RElSfSAtLXBsYXRmb3JtIGd0ayAtLXBsYXRmb3JtIHNvdXAKICkKQEAgLTEwNzcsOSArMTYwMSwx
NSBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgREVQRU5EUyAke1dFQktJVDJfRElSfS9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsKICAgICBDT01NQU5EIGxuIC1uIC1zIC1mICR7
V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ayAke0ZPUldBUkRJ
TkdfSEVBREVSU19XRUJLSVQyR1RLX0VYVEVOU0lPTl9ESVJ9L3dlYmtpdDIKICkKK2FkZF9jdXN0
b21fY29tbWFuZCgKKyAgICBPVVRQVVQgJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19F
WFRFTlNJT05fRElSfS93ZWJraXRkb20KKyAgICBERVBFTkRTICR7V0VCS0lUMl9ESVJ9L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00KKyAgICBDT01NQU5EIGxuIC1uIC1zIC1m
ICR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00gJHtG
T1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19FWFRFTlNJT05fRElSfS93ZWJraXRkb20KKykK
IGFkZF9jdXN0b21fdGFyZ2V0KFdlYktpdDItZmFrZS1hcGktaGVhZGVycwogICAgIERFUEVORFMg
JHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19ESVJ9L3dlYmtpdDIKICAgICAgICAgICAg
ICR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtfRVhURU5TSU9OX0RJUn0vd2Via2l0Mgor
ICAgICAgICAgICAgJHtGT1JXQVJESU5HX0hFQURFUlNfV0VCS0lUMkdUS19FWFRFTlNJT05fRElS
fS93ZWJraXRkb20KICkKIAogc2V0KFdFQktJVDJfRVhUUkFfREVQRU5ERU5DSUVTCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJv
bSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuY3Bw
CnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL0NvbnZlcnRUb1VURjhTdHJpbmcuY3BwCmluZGV4IDFhYWYyODcuLmI1ZTE2NTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRGOFN0
cmluZy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9Db252ZXJ0VG9VVEY4U3RyaW5nLmNwcApAQCAtMjEsNyArMjEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKIAotI2lu
Y2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
Q29udmVydFRvVVRGOFN0cmluZy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaApyZW5h
bWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9Db252ZXJ0VG9VVEY4U3RyaW5nLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvRE9NT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9ET01PYmplY3RDYWNoZS5jcHAKc2ltaWxhcml0
eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9E
T01PYmplY3RDYWNoZS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vRE9NT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDM1NTRmNjMu
LjBlNzkwZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvRE9N
T2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vRE9NT2JqZWN0Q2FjaGUuY3BwCkBAIC0xOSwxMSArMTksMTEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogCi0jaW5j
bHVkZSAiRE9NV2luZG93UHJvcGVydHkuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgiCi0jaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2luZG93UHJvcGVydHkuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Ob2RlLmg+CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9ET01PYmplY3RDYWNoZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9ET01PYmplY3RD
YWNoZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vRE9NT2JqZWN0Q2FjaGUuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0RXZlbnRM
aXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL0dPYmplY3RFdmVudExpc3RlbmVyLmNwcApzaW1pbGFyaXR5IGluZGV4IDk3JQpy
ZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExp
c3RlbmVyLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKaW5kZXggZjJlZDkzMi4u
ODgxNGE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2Jq
ZWN0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTE5LDEz
ICsxOSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdPYmplY3RFdmVudExp
c3RlbmVyLmgiCiAKLSNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
LmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewogCiBHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6R09i
amVjdEV2ZW50TGlzdGVuZXIoR09iamVjdCogdGFyZ2V0LCBFdmVudFRhcmdldCogY29yZVRhcmdl
dCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgYm9vbCBjYXB0
dXJlKQogICAgIDogRXZlbnRMaXN0ZW5lcihHT2JqZWN0RXZlbnRMaXN0ZW5lclR5cGUpCkBAIC04
Niw0ICs4OCw0IEBAIGJvb2wgR09iamVjdEV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3Qg
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi19
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdEV2ZW50TGlzdGVuZXIuaApz
aW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdEV2ZW50TGlzdGVuZXIu
aAppbmRleCAyMDZiYmQ3Li4zOGFkNzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L0dPYmplY3RFdmVudExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0RXZlbnRMaXN0ZW5l
ci5oCkBAIC0xNiwxMSArMTYsMTAgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwog
Ci0jaWZuZGVmIEdPYmplY3RFdmVudExpc3RlbmVyX2gKLSNkZWZpbmUgR09iamVjdEV2ZW50TGlz
dGVuZXJfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50TGlzdGVuZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50VGFyZ2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CkBAIC0yOCwxOCArMjcsMTggQEAKIHR5cGVkZWYgc3RydWN0IF9HT2JqZWN0IEdPYmpl
Y3Q7CiB0eXBlZGVmIHN0cnVjdCBfR0Nsb3N1cmUgR0Nsb3N1cmU7CiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBHT2JqZWN0RXZlbnRMaXN0ZW5lciA6
IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK2NsYXNzIEdPYmplY3RFdmVudExpc3RlbmVyIDogcHVi
bGljIFdlYkNvcmU6OkV2ZW50TGlzdGVuZXIgewogcHVibGljOgogCi0gICAgc3RhdGljIGJvb2wg
YWRkRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiB0YXJnZXQsIEV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0
LCBjb25zdCBjaGFyKiBkb21FdmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIHVzZUNh
cHR1cmUpCisgICAgc3RhdGljIGJvb2wgYWRkRXZlbnRMaXN0ZW5lcihHT2JqZWN0KiB0YXJnZXQs
IFdlYkNvcmU6OkV2ZW50VGFyZ2V0KiBjb3JlVGFyZ2V0LCBjb25zdCBjaGFyKiBkb21FdmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBib29sIHVzZUNhcHR1cmUpCiAgICAgewogICAgICAgICBS
ZWY8R09iamVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKGFkb3B0UmVmKCpuZXcgR09iamVjdEV2
ZW50TGlzdGVuZXIodGFyZ2V0LCBjb3JlVGFyZ2V0LCBkb21FdmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpKSk7CiAgICAgICAgIHJldHVybiBjb3JlVGFyZ2V0LT5hZGRFdmVudExpc3RlbmVy
KGRvbUV2ZW50TmFtZSwgV1RGTW92ZShsaXN0ZW5lciksIHVzZUNhcHR1cmUpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoR09iamVjdCogdGFyZ2V0LCBFdmVu
dFRhcmdldCogY29yZVRhcmdldCwgY29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgYm9vbCB1c2VDYXB0dXJlKQorICAgIHN0YXRpYyBib29sIHJlbW92ZUV2ZW50TGlz
dGVuZXIoR09iamVjdCogdGFyZ2V0LCBXZWJDb3JlOjpFdmVudFRhcmdldCogY29yZVRhcmdldCwg
Y29uc3QgY2hhciogZG9tRXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgYm9vbCB1c2VDYXB0
dXJlKQogICAgIHsKICAgICAgICAgR09iamVjdEV2ZW50TGlzdGVuZXIga2V5KHRhcmdldCwgY29y
ZVRhcmdldCwgZG9tRXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKICAgICAgICAgcmV0
dXJuIGNvcmVUYXJnZXQtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBrZXksIHVz
ZUNhcHR1cmUpOwpAQCAtNTAsMzAgKzQ5LDMwIEBAIHB1YmxpYzoKICAgICAgICAgbGlzdGVuZXIt
PmdvYmplY3REZXN0cm95ZWQoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3QgR09iamVjdEV2
ZW50TGlzdGVuZXIqIGNhc3QoY29uc3QgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCisgICAgc3Rh
dGljIGNvbnN0IEdPYmplY3RFdmVudExpc3RlbmVyKiBjYXN0KGNvbnN0IFdlYkNvcmU6OkV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIGxpc3RlbmVyLT50eXBl
KCkgPT0gR09iamVjdEV2ZW50TGlzdGVuZXJUeXBlCiAgICAgICAgICAgICA/IHN0YXRpY19jYXN0
PGNvbnN0IEdPYmplY3RFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpCi0gICAgICAgICAgICA6IDA7
CisgICAgICAgICAgICA6IG51bGxwdHI7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgV2ViQ29yZTo6RXZlbnRMaXN0ZW5lciYgb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OwogCiBwcml2YXRlOgotICAgIEdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqLCBFdmVudFRh
cmdldCosIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqLCBib29sIGNhcHR1cmUp
OworICAgIEdPYmplY3RFdmVudExpc3RlbmVyKEdPYmplY3QqLCBXZWJDb3JlOjpFdmVudFRhcmdl
dCosIGNvbnN0IGNoYXIqIGRvbUV2ZW50TmFtZSwgR0Nsb3N1cmUqLCBib29sIGNhcHR1cmUpOwog
ICAgIH5HT2JqZWN0RXZlbnRMaXN0ZW5lcigpOwogICAgIHZvaWQgZ29iamVjdERlc3Ryb3llZCgp
OwogCi0gICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgV2ViQ29yZTo6RXZlbnQqKTsKIAogICAgIEdPYmplY3QqIG1fdGFy
Z2V0OwogICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1f
Y29yZVRhcmdldCwgYmVjYXVzZQogICAgIC8vIHdlIG9ubHkgdXNlIGl0IHdoZW4gdGhlIEdPYmpl
Y3QgYW5kIHRodXMgdGhlIG1fY29yZVRhcmdldCBvYmplY3QgaXMgYWxpdmUuCi0gICAgRXZlbnRU
YXJnZXQqIG1fY29yZVRhcmdldDsKKyAgICBXZWJDb3JlOjpFdmVudFRhcmdldCogbV9jb3JlVGFy
Z2V0OwogICAgIENTdHJpbmcgbV9kb21FdmVudE5hbWU7CiAgICAgR1JlZlB0cjxHQ2xvc3VyZT4g
bV9oYW5kbGVyOwogICAgIGJvb2wgbV9jYXB0dXJlOwogfTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dP
YmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNwcApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29u
ZGl0aW9uLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKaW5kZXggZTBh
YmI3Yy4uNDNlYTFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9HT2JqZWN0Tm9kZUZpbHRlckNvbmRp
dGlvbi5jcHAKQEAgLTE5LDEwICsxOSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmgiCiAKLSNpbmNsdWRlICJOb2RlRmlsdGVy
LmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L05vZGVGaWx0ZXIuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewogCiBHT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlv
bjo6fkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uKCkKIHsKQEAgLTM2LDQgKzM4LDQgQEAgc2hv
cnQgR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29u
c3QKICAgICByZXR1cm4gd2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9hY2NlcHRfbm9kZShtX2ZpbHRl
ci5nZXQoKSwgV2ViS2l0OjpraXQobm9kZSkpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24uaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdE5vZGVGaWx0ZXJD
b25kaXRpb24uaApzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmgKcmVuYW1lIHRv
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09i
amVjdE5vZGVGaWx0ZXJDb25kaXRpb24uaAppbmRleCA4YmUyYzc4Li4xZWQxYzdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29u
ZGl0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5oCkBAIC0xNiwxOCArMTYsMTkg
QEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaWZuZGVmIEdPYmplY3ROb2Rl
RmlsdGVyQ29uZGl0aW9uX2gKLSNkZWZpbmUgR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb25faAot
Ci0jaW5jbHVkZSAiTm9kZUZpbHRlckNvbmRpdGlvbi5oIgorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJXZWJLaXRET01Ob2RlRmlsdGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlRmlsdGVy
Q29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBOb2RlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3Mg
R09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMgTm9kZUZpbHRlckNvbmRpdGlvbiB7
CitjbGFzcyBHT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBXZWJDb3JlOjpOb2Rl
RmlsdGVyQ29uZGl0aW9uIHsKIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZWY8R09iamVjdE5vZGVG
aWx0ZXJDb25kaXRpb24+IGNyZWF0ZShXZWJLaXRET01Ob2RlRmlsdGVyKiBmaWx0ZXIpCkBAIC0z
NSw3ICszNiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR09iamVj
dE5vZGVGaWx0ZXJDb25kaXRpb24oZmlsdGVyKSk7CiAgICAgfQogCi0gICAgc2hvcnQgYWNjZXB0
Tm9kZShOb2RlKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2hvcnQgYWNjZXB0Tm9kZShXZWJDb3Jl
OjpOb2RlKikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgR09iamVjdE5vZGVGaWx0
ZXJDb25kaXRpb24oV2ViS2l0RE9NTm9kZUZpbHRlciogZmlsdGVyKQpAQCAtNDcsNiArNDgsNCBA
QCBwcml2YXRlOgogICAgIEdSZWZQdHI8V2ViS2l0RE9NTm9kZUZpbHRlcj4gbV9maWx0ZXI7CiB9
OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHT2JqZWN0Tm9kZUZpbHRl
ckNvbmRpdGlvbl9oCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3RY
UGF0aE5TUmVzb2x2ZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5jcHAKcmVu
YW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vR09iamVjdFhQYXRoTlNSZXNvbHZlci5jcHAKaW5kZXggMzJmYWY0MS4uYTRkZjgyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HT2JqZWN0WFBhdGhOU1Jl
c29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIuY3BwCkBAIC0yMiw3ICsyMiw3IEBA
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgV2ViS2l0IHsKIAogR09i
amVjdFhQYXRoTlNSZXNvbHZlcjo6fkdPYmplY3RYUGF0aE5TUmVzb2x2ZXIoKQogewpAQCAtMzMs
NCArMzMsNCBAQCBTdHJpbmcgR09iamVjdFhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNl
VVJJKGNvbnN0IFN0cmluZyYgcHJlZml4KQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHdl
YmtpdF9kb21feHBhdGhfbnNfcmVzb2x2ZXJfbG9va3VwX25hbWVzcGFjZV91cmkobV9yZXNvbHZl
ci5nZXQoKSwgcHJlZml4LnV0ZjgoKS5kYXRhKCkpKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vR09iamVjdFhQYXRoTlNSZXNv
bHZlci5oCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvR09iamVjdFhQYXRoTlNSZXNvbHZlci5oCnJlbmFtZSB0byBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmplY3RYUGF0
aE5TUmVzb2x2ZXIuaAppbmRleCBiZTEzNGMxLi4zZTVjYzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3RYUGF0aE5TUmVzb2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL0dPYmpl
Y3RYUGF0aE5TUmVzb2x2ZXIuaApAQCAtMTYsMTYgKzE2LDE1IEBACiAgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCiAgKi8KIAotI2lmbmRlZiBHT2JqZWN0WFBhdGhOU1Jlc29sdmVyX2gKLSNkZWZp
bmUgR09iamVjdFhQYXRoTlNSZXNvbHZlcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldl
YktpdERPTVhQYXRoTlNSZXNvbHZlci5oIgotI2luY2x1ZGUgIlhQYXRoTlNSZXNvbHZlci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvWFBhdGhOU1Jlc29sdmVyLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIv
R1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgV2ViS2l0IHsKIAot
Y2xhc3MgR09iamVjdFhQYXRoTlNSZXNvbHZlciA6IHB1YmxpYyBYUGF0aE5TUmVzb2x2ZXIgewor
Y2xhc3MgR09iamVjdFhQYXRoTlNSZXNvbHZlciA6IHB1YmxpYyBXZWJDb3JlOjpYUGF0aE5TUmVz
b2x2ZXIgewogcHVibGljOgogCiAgICAgc3RhdGljIFJlZjxHT2JqZWN0WFBhdGhOU1Jlc29sdmVy
PiBjcmVhdGUoV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlcikKQEAgLTQ1LDYgKzQ0
LDQgQEAgcHJpdmF0ZToKICAgICBHUmVmUHRyPFdlYktpdERPTVhQYXRoTlNSZXNvbHZlcj4gbV9y
ZXNvbHZlcjsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdPYmpl
Y3RYUGF0aE5TUmVzb2x2ZXJfaAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUFuaW1hdGFibGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42NDEwZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Bbmlt
YXRhYmxlLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRl
ZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTUFuaW1hdGFibGUuaCBh
bmQKKyAgICBXZWJLaXRET01BbmltYXRhYmxlLmNwcCBhcmUgY3JlYXRlZCBmb3IgQW5pbWF0YWJs
ZS5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWlu
ZyB0byBnZW5lcmF0ZSBXZWJLaXRET01BbmltYXRhYmxlLmggYW5kCisgICAgV2ViS2l0RE9NQW5p
bWF0YWJsZS5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0
byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0YWJsZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Bbmlt
YXRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxMGRiOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0YWJsZS5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQg
V2ViS2l0RE9NQW5pbWF0YWJsZS5oIGFuZAorICAgIFdlYktpdERPTUFuaW1hdGFibGUuY3BwIGFy
ZSBjcmVhdGVkIGZvciBBbmltYXRhYmxlLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBi
dWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTUFuaW1hdGFibGUu
aCBhbmQKKyAgICBXZWJLaXRET01BbmltYXRhYmxlLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBm
aWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01B
bmltYXRpb25FZmZlY3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25FZmZlY3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YmNjODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUFuaW1hdGlvbkVmZmVjdC5jcHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01B
bmltYXRpb25FZmZlY3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VU
RjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fQU5JTUFUSU9OX0VGRkVDVF9HRVRfUFJJVkFURShv
YmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9BTklN
QVRJT05fRUZGRUNULCBXZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZSB7CisjaWYgRU5BQkxFKFdF
Ql9BTklNQVRJT05TKQorICAgIFJlZlB0cjxXZWJDb3JlOjpBbmltYXRpb25FZmZlY3Q+IGNvcmVP
YmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BTklNQVRJT05TKQorfSBXZWJLaXRET01Bbmlt
YXRpb25FZmZlY3RQcml2YXRlOworCisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0KiBraXQoV2ViQ29yZTo6
QW5pbWF0aW9uRWZmZWN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fQU5JTUFUSU9OX0VGRkVDVChyZXQpOworCisgICAgcmV0
dXJuIHdyYXBBbmltYXRpb25FZmZlY3Qob2JqKTsKK30KKworV2ViQ29yZTo6QW5pbWF0aW9uRWZm
ZWN0KiBjb3JlKFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUFu
aW1hdGlvbkVmZmVjdCogd3JhcEFuaW1hdGlvbkVmZmVjdChXZWJDb3JlOjpBbmltYXRpb25FZmZl
Y3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0FOSU1BVElPTl9FRkZFQ1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9B
TklNQVRJT05fRUZGRUNULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BTklNQVRJ
T05TKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdCwgd2Via2l0X2Rv
bV9hbmltYXRpb25fZWZmZWN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2FuaW1hdGlvbl9lZmZlY3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X0FOSU1BVElPTl9FRkZFQ1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoV0VCX0FO
SU1BVElPTlMpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBwcml2
LT5+V2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fYW5pbWF0aW9uX2VmZmVjdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9hbmltYXRpb25fZWZmZWN0X2Nv
bnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09i
amVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3Qq
IG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYW5pbWF0aW9uX2VmZmVjdF9wYXJl
bnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNv
bnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBXZWJL
aXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BTklNQVRJT05f
RUZGRUNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkFuaW1hdGlvbkVmZmVjdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVj
dCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5j
b3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfQU5JTUFUSU9O
UykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2FuaW1h
dGlvbl9lZmZlY3RfY2xhc3NfaW5pdChXZWJLaXRET01BbmltYXRpb25FZmZlY3RDbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVj
dENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0UHJpdmF0ZSkpOworICAgIGdv
YmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2FuaW1hdGlvbl9lZmZlY3RfY29u
c3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fYW5pbWF0
aW9uX2VmZmVjdF9maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hbmltYXRp
b25fZWZmZWN0X2luaXQoV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0KiByZXF1ZXN0KQoreworICAg
IFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FOSU1B
VElPTl9FRkZFQ1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRE
T01BbmltYXRpb25FZmZlY3RQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVyZmFjZU5hbWUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0LmgKc2ltaWxhcml0eSBpbmRleCA1NSUKcmVuYW1lIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
SW50ZXJmYWNlTmFtZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdC5oCmluZGV4IGRk
Y2I1NWYuLmQwMjgzNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUludGVyZmFjZU5hbWUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1h
dGlvbkVmZmVjdC5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01JbnRlcmZhY2VOYW1lX2gKLSNkZWZpbmUg
V2ViS2l0RE9NSW50ZXJmYWNlTmFtZV9oCisjaWZuZGVmIFdlYktpdERPTUFuaW1hdGlvbkVmZmVj
dF9oCisjZGVmaW5lIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdF9oCiAKICNpZmRlZiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkKIApAQCAtMjksMjUgKzI5LDI1IEBACiAKIEdfQkVHSU5fREVD
TFMKIAotI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNFX05BTUUgICAgICAgICAgICAo
d2Via2l0X2RvbV9pbnRlcmZhY2VfbmFtZV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9N
X0lOVEVSRkFDRV9OQU1FKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSwgV2ViS2l0RE9NSW50ZXJm
YWNlTmFtZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fSU5URVJGQUNFX05BTUVfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0lO
VEVSRkFDRV9OQU1FLCBXZWJLaXRET01JbnRlcmZhY2VOYW1lQ2xhc3MpCi0jZGVmaW5lIFdFQktJ
VF9ET01fSVNfSU5URVJGQUNFX05BTUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0lOVEVSRkFDRV9OQU1FKSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV9JU19JTlRFUkZBQ0VfTkFNRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSU5URVJGQUNFX05BTUUpKQotI2Rl
ZmluZSBXRUJLSVRfRE9NX0lOVEVSRkFDRV9OQU1FX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9JTlRFUkZBQ0VfTkFNRSwg
V2ViS2l0RE9NSW50ZXJmYWNlTmFtZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0FO
SU1BVElPTl9FRkZFQ1QgICAgICAgICAgICAod2Via2l0X2RvbV9hbmltYXRpb25fZWZmZWN0X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fQU5JTUFUSU9OX0VGRkVDVChvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
QU5JTUFUSU9OX0VGRkVDVCwgV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0KSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9BTklNQVRJT05fRUZGRUNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fRUZGRUNULCBXZWJL
aXRET01BbmltYXRpb25FZmZlY3RDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19BTklNQVRJ
T05fRUZGRUNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fRUZGRUNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19BTklNQVRJT05fRUZGRUNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fRUZGRUNUKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9BTklNQVRJT05fRUZGRUNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fRUZGRUNULCBXZWJL
aXRET01BbmltYXRpb25FZmZlY3RDbGFzcykpCiAKLXN0cnVjdCBfV2ViS2l0RE9NSW50ZXJmYWNl
TmFtZSB7CitzdHJ1Y3QgX1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdCB7CiAgICAgV2ViS2l0RE9N
T2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKIH07CiAKLXN0cnVjdCBfV2ViS2l0RE9NSW50ZXJmYWNl
TmFtZUNsYXNzIHsKK3N0cnVjdCBfV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0Q2xhc3MgewogICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKIH07CiAKIFdFQktJVF9BUEkgR1R5
cGUKLXdlYmtpdF9kb21faW50ZXJmYWNlX25hbWVfZ2V0X3R5cGUodm9pZCk7Cit3ZWJraXRfZG9t
X2FuaW1hdGlvbl9lZmZlY3RfZ2V0X3R5cGUodm9pZCk7CiAKIEdfRU5EX0RFQ0xTCiAKICNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01J
bnRlcmZhY2VOYW1lX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01BbmltYXRpb25FZmZlY3RfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1h
dGlvbkVmZmVjdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
ZDI4MzQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlLmgK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01BbmltYXRpb25FZmZlY3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQW5p
bWF0aW9uRWZmZWN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbkVmZmVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01BbmltYXRpb25FZmZlY3QuaD4KKyNp
ZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
QW5pbWF0aW9uRWZmZWN0KiB3cmFwQW5pbWF0aW9uRWZmZWN0KFdlYkNvcmU6OkFuaW1hdGlvbkVm
ZmVjdCopOworV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0KiBraXQoV2ViQ29yZTo6QW5pbWF0aW9u
RWZmZWN0Kik7CitXZWJDb3JlOjpBbmltYXRpb25FZmZlY3QqIGNvcmUoV2ViS2l0RE9NQW5pbWF0
aW9uRWZmZWN0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShX
RUJfQU5JTUFUSU9OUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUFuaW1hdGlvblRpbWVsaW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MDZiZWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZS5jcHAK
QEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01BbmltYXRpb25UaW1lbGluZS5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBX
RUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fVElNRUxJTkUs
IFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJ
T05TKQorICAgIFJlZlB0cjxXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZT4gY29yZU9iamVjdDsK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCit9IFdlYktpdERPTUFuaW1hdGlvblRp
bWVsaW5lUHJpdmF0ZTsKKworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lKiBraXQoV2ViQ29yZTo6QW5p
bWF0aW9uVGltZWxpbmUqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9BTklNQVRJT05fVElNRUxJTkUocmV0KTsKKworICAgIHJl
dHVybiB3cmFwQW5pbWF0aW9uVGltZWxpbmUob2JqKTsKK30KKworV2ViQ29yZTo6QW5pbWF0aW9u
VGltZWxpbmUqIGNvcmUoV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBbmltYXRpb25UaW1lbGlu
ZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dl
YktpdERPTUFuaW1hdGlvblRpbWVsaW5lKiB3cmFwQW5pbWF0aW9uVGltZWxpbmUoV2ViQ29yZTo6
QW5pbWF0aW9uVGltZWxpbmUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORShnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0FOSU1BVElPTl9USU1FTElORSwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01BbmltYXRp
b25UaW1lbGluZSwgd2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmUsIFdFQktJVF9ET01fVFlQ
RV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYW5pbWF0aW9uX3RpbWVsaW5lX2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01BbmltYXRpb25UaW1lbGlu
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORV9HRVRfUFJJVkFU
RShvYmplY3QpOworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BTklNQVRJT05TKQorICAgIHByaXYtPn5XZWJLaXRET01BbmltYXRpb25UaW1lbGlu
ZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1l
bGluZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwg
Z3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNv
bnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxp
bmVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BTklNQVRJT05fVElNRUxJTkVfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
QW5pbWF0aW9uVGltZWxpbmUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgcmV0dXJu
IG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVf
Y2xhc3NfaW5pdChXZWJLaXRET01BbmltYXRpb25UaW1lbGluZUNsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9hbmltYXRpb25fdGltZWxpbmVfY29uc3RydWN0
b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fYW5pbWF0aW9uX3Rp
bWVsaW5lX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2FuaW1hdGlvbl90
aW1lbGluZV9pbml0KFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lKiByZXF1ZXN0KQoreworICAg
IFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQU5J
TUFUSU9OX1RJTUVMSU5FX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2Vi
S2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lLmgKc2ltaWxhcml0eSBpbmRl
eCA1MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuaApyZW5hbWUgdG8gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Bbmlt
YXRpb25UaW1lbGluZS5oCmluZGV4IDVlNGU5NmQuLjkyNDAyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BbmltYXRpb25UaW1lbGluZS5oCkBAIC0xOCw4ICsx
OCw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBX
ZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yX2gKKyNpZm5kZWYgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVfaAorI2Rl
ZmluZSBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZV9oCiAKICNpZmRlZiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkKIApAQCAtMjksMjUgKzI5LDI1IEBACiAKIEdfQkVHSU5fREVDTFMKIAot
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiAgICAgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZ2V0X3R5cGUoKSkKLSNkZWZpbmUg
V0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX05BTUVEX0NP
TlNUUlVDVE9SLCBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvcikpCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9OQU1FRF9DT05TVFJV
Q1RPUiwgV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JDbGFzcykKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX05BTUVEX0NPTlNUUlVDVE9SKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNUX05BTUVEX0NPTlNUUlVD
VE9SKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX05BTUVEX0NPTlNUUlVDVE9SX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX05BTUVE
X0NPTlNUUlVDVE9SX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX05BTUVEX0NPTlNUUlVDVE9SLCBXZWJLaXRET01U
ZXN0TmFtZWRDb25zdHJ1Y3RvckNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0FOSU1B
VElPTl9USU1FTElORSAgICAgICAgICAgICh3ZWJraXRfZG9tX2FuaW1hdGlvbl90aW1lbGluZV9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0FOSU1BVElPTl9USU1FTElORShvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfQU5JTUFUSU9OX1RJTUVMSU5FLCBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZSkpCisjZGVm
aW5lIFdFQktJVF9ET01fQU5JTUFUSU9OX1RJTUVMSU5FX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fVElN
RUxJTkUsIFdlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfQU5JTUFUSU9OX1RJTUVMSU5FKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fVElNRUxJTkUpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0FOSU1BVElPTl9USU1FTElORV9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX1RJ
TUVMSU5FKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BTklNQVRJT05fVElNRUxJTkVfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X0FOSU1BVElPTl9USU1FTElORSwgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVDbGFzcykpCiAK
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3Igeworc3RydWN0IF9XZWJLaXRE
T01BbmltYXRpb25UaW1lbGluZSB7CiAgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5j
ZTsKIH07CiAKLXN0cnVjdCBfV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JDbGFzcyB7Citz
dHJ1Y3QgX1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lQ2xhc3MgewogICAgIFdlYktpdERPTU9i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKLXdlYmtpdF9k
b21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9nZXRfdHlwZSh2b2lkKTsKK3dlYmtpdF9kb21fYW5p
bWF0aW9uX3RpbWVsaW5lX2dldF90eXBlKHZvaWQpOwogCiBHX0VORF9ERUNMUwogCiAjZW5kaWYg
LyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3JfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUFuaW1hdGlvblRpbWVs
aW5lX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUFuaW1hdGlvblRpbWVsaW5lUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjMwYmI0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUFuaW1hdGlvblRpbWVs
aW5lUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvQW5pbWF0aW9uVGltZWxpbmUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQW5p
bWF0aW9uVGltZWxpbmUuaD4KKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUqIHdyYXBBbmltYXRpb25UaW1l
bGluZShXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZSopOworV2ViS2l0RE9NQW5pbWF0aW9uVGlt
ZWxpbmUqIGtpdChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZSopOworV2ViQ29yZTo6QW5pbWF0
aW9uVGltZWxpbmUqIGNvcmUoV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFdFQl9BTklNQVRJT05TKSAqLworCisj
ZW5kaWYgLyogV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVQcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQXR0ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI4ZTYxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF0dHIuY3BwCkBA
IC0wLDAgKzEsMzM1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQXR0ci5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQXR0clByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUF0dHJV
bnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01BdHRyKiBraXQoV2ViQ29yZTo6
QXR0ciogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0FUVFIoa2l0KHN0YXRpY19jYXN0
PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkF0dHIqIGNvcmUoV2ViS2l0
RE9NQXR0ciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkF0dHIqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01BdHRyKiB3cmFwQXR0cihXZWJDb3JlOjpBdHRyKiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9BVFRS
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQVRUUiwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21fYXR0cl9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlm
ICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6QXR0ciog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkF0dHIqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2F0dHJfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29y
ZTo6QXR0ciogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkF0dHIqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9hdHRyX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkF0dHIqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdHRyKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBp
ZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2F0dHJfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fYXR0cl9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
YXR0cl9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdERPTUF0dHIsIHdlYmtpdF9kb21fYXR0ciwgV0VCS0lUX0RPTV9UWVBFX05PREUsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
TkFNRSwKKyAgICBQUk9QX1NQRUNJRklFRCwKKyAgICBQUk9QX1ZBTFVFLAorICAgIFBST1BfT1dO
RVJfRUxFTUVOVCwKKyAgICBQUk9QX0lTX0lELAorICAgIFBST1BfTkFNRVNQQUNFX1VSSSwKKyAg
ICBQUk9QX1BSRUZJWCwKKyAgICBQUk9QX0xPQ0FMX05BTUUsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2F0dHJfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NQXR0ciogc2VsZiA9IFdFQktJVF9ET01fQVRUUihvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9t
X2F0dHJfc2V0X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdHRyX2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUF0dHIqIHNlbGYgPSBXRUJLSVRfRE9NX0FU
VFIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9O
QU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F0dHJf
Z2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1BFQ0lGSUVE
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2F0dHJfZ2V0
X3NwZWNpZmllZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToK
KyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dldF92
YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PV05FUl9FTEVNRU5U
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fYXR0cl9nZXRf
b3duZXJfZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19J
RDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9hdHRyX2dl
dF9pc19pZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FU1BBQ0Vf
VVJJOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F0dHJf
Z2V0X25hbWVzcGFjZV91cmkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
UFJFRklYOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F0
dHJfZ2V0X3ByZWZpeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT0NB
TF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F0
dHJfZ2V0X2xvY2FsX25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9hdHRyX2NsYXNzX2luaXQoV2ViS2l0RE9NQXR0ckNsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9h
dHRyX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtp
dF9kb21fYXR0cl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAg
ICJBdHRyOm5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogQXR0cjpuYW1lIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU1BFQ0lGSUVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJzcGVjaWZpZWQiLAorICAgICAgICAgICAgIkF0dHI6c3BlY2lmaWVk
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gQXR0cjpzcGVjaWZpZWQiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ2YWx1ZSIsCisgICAgICAgICAgICAiQXR0cjp2YWx1ZSIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogQXR0cjp2YWx1ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PV05F
Ul9FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm93
bmVyLWVsZW1lbnQiLAorICAgICAgICAgICAgIkF0dHI6b3duZXItZWxlbWVudCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIEF0dHI6b3duZXItZWxlbWVudCIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lTX0lELAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJpcy1pZCIsCisgICAgICAgICAgICAiQXR0
cjppcy1pZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEF0dHI6aXMtaWQiLAor
ICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9OQU1FU1BBQ0VfVVJJLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgIm5hbWVzcGFjZS11cmkiLAorICAgICAgICAgICAgIkF0dHI6
bmFtZXNwYWNlLXVyaSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBBdHRyOm5hbWVz
cGFjZS11cmkiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QUkVGSVgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAicHJlZml4IiwKKyAgICAgICAgICAgICJBdHRyOnByZWZp
eCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBBdHRyOnByZWZpeCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0xPQ0FMX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAibG9jYWwtbmFtZSIsCisgICAgICAgICAgICAiQXR0cjpsb2NhbC1uYW1lIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEF0dHI6bG9jYWwtbmFtZSIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fYXR0cl9pbml0KFdlYktpdERPTUF0dHIqIHJlcXVlc3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9hdHRyX2dl
dF9uYW1lKFdlYktpdERPTUF0dHIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
QVRUUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QXR0ciogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5uYW1l
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fYXR0cl9n
ZXRfc3BlY2lmaWVkKFdlYktpdERPTUF0dHIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfQVRUUihzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkF0dHIqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+c3BlY2lmaWVkKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fYXR0cl9nZXRfdmFs
dWUoV2ViS2l0RE9NQXR0ciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRS
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdHRyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZhbHVlRm9y
QmluZGluZ3MoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2F0
dHJfc2V0X3ZhbHVlKFdlYktpdERPTUF0dHIqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdl
YkNvcmU6OkF0dHIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldFZhbHVlRm9yQmluZGluZ3MoY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01FbGVt
ZW50KiB3ZWJraXRfZG9tX2F0dHJfZ2V0X293bmVyX2VsZW1lbnQoV2ViS2l0RE9NQXR0ciogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpBdHRyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+b3duZXJFbGVtZW50
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0X2RvbV9hdHRyX2dldF9pc19pZChXZWJLaXRET01BdHRyKiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpBdHRyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmlzSWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0
X2RvbV9hdHRyX2dldF9uYW1lc3BhY2VfdXJpKFdlYktpdERPTUF0dHIqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfQVRUUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QXR0ciog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5uYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fYXR0cl9nZXRfcHJlZml4KFdlYktpdERPTUF0dHIqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVRUUihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6QXR0ciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wcmVmaXgoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fYXR0cl9nZXRfbG9jYWxfbmFtZShXZWJLaXRET01BdHRy
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FUVFIoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkF0dHIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bG9jYWxOYW1lKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0ci5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4MTliOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQXR0ci5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01B
dHRyX2gKKyNkZWZpbmUgV2ViS2l0RE9NQXR0cl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9BVFRSICAgICAgICAgICAgKHdlYmtpdF9kb21fYXR0cl9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0FUVFIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FUVFIsIFdlYktpdERPTUF0dHIpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0FUVFJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FUVFIsIFdlYktpdERPTUF0dHJDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19BVFRSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BVFRSKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19BVFRSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9BVFRSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVFRSX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9BVFRSLCBXZWJLaXRET01BdHRyQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUF0
dHIgeworICAgIFdlYktpdERPTU5vZGUgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01BdHRyQ2xhc3MgeworICAgIFdlYktpdERPTU5vZGVDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2F0dHJfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9hdHRyX2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUF0dHIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9hdHRyX2dldF9uYW1lKFdlYktpdERPTUF0dHIqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fYXR0cl9nZXRfc3BlY2lmaWVkOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUF0dHIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX2F0dHJfZ2V0X3NwZWNpZmllZChXZWJLaXRET01BdHRyKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2F0dHJfZ2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUF0dHIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9hdHRyX2dldF92YWx1ZShXZWJLaXRET01BdHRyKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2F0dHJfc2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF0
dHIKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2F0dHJfc2V0X3ZhbHVlKFdlYktpdERPTUF0dHIqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtp
dF9kb21fYXR0cl9nZXRfb3duZXJfZWxlbWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdHRy
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50Cisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fYXR0cl9nZXRfb3du
ZXJfZWxlbWVudChXZWJLaXRET01BdHRyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F0
dHJfZ2V0X25hbWVzcGFjZV91cmk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQXR0cgorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fYXR0cl9nZXRfbmFtZXNwYWNlX3VyaShXZWJLaXRET01BdHRyKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F0dHJfZ2V0X3ByZWZpeDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01BdHRyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTaW5jZTog
Mi4xNAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9hdHRyX2dldF9wcmVmaXgo
V2ViS2l0RE9NQXR0ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9hdHRyX2dldF9sb2Nh
bF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF0dHIKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2F0dHJfZ2V0X2xvY2FsX25hbWUoV2ViS2l0RE9NQXR0ciogc2VsZik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01BdHRyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUF0dHJQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9ialByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyUHJpdmF0ZS5oCmluZGV4IDZlMzZh
NmUuLmQwZWM4ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyUHJp
dmF0ZS5oCkBAIC0xOCwxNiArMTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RPYmpQcml2YXRlX2gKLSNkZWZpbmUgV2Vi
S2l0RE9NVGVzdE9ialByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01BdHRyUHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUF0dHJQcml2YXRlX2gKIAotI2luY2x1ZGUgIlRlc3RPYmouaCIKLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdE9iai5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
QXR0ci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01BdHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE9iaiogd3JhcFRlc3RPYmooV2ViQ29yZTo6VGVzdE9i
aiopOwotV2ViS2l0RE9NVGVzdE9iaioga2l0KFdlYkNvcmU6OlRlc3RPYmoqKTsKLVdlYkNvcmU6
OlRlc3RPYmoqIGNvcmUoV2ViS2l0RE9NVGVzdE9iaiopOworV2ViS2l0RE9NQXR0ciogd3JhcEF0
dHIoV2ViQ29yZTo6QXR0ciopOworV2ViS2l0RE9NQXR0cioga2l0KFdlYkNvcmU6OkF0dHIqKTsK
K1dlYkNvcmU6OkF0dHIqIGNvcmUoV2ViS2l0RE9NQXR0ciopOwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0T2JqUHJpdmF0ZV9oICovCisjZW5kaWYgLyog
V2ViS2l0RE9NQXR0clByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdHRyVW5zdGFibGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQXR0clVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjNjOTUxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXR0clVuc3RhYmxlLmgKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01BdHRyVW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01BdHRyVW5zdGFibGVfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICog
d2Via2l0X2RvbV9hdHRyX2dldF9pc19pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdHRyCisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fYXR0cl9nZXRfaXNfaWQoV2ViS2l0
RE9NQXR0ciogc2VsZik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUF0dHJVbnN0YWJsZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2suY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTU1NzI4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01BdWRpb1RyYWNrLmNwcApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUF1ZGlvVHJhY2suaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2RlZmluZSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0dFVF9QUklWQVRFKG9iaikgR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLLCBX
ZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUF1
ZGlvVHJhY2tQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgUmVmUHRyPFdl
YkNvcmU6OkF1ZGlvVHJhY2s+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RS
QUNLKQorfSBXZWJLaXRET01BdWRpb1RyYWNrUHJpdmF0ZTsKKworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUF1ZGlvVHJhY2sqIGtpdChX
ZWJDb3JlOjpBdWRpb1RyYWNrKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fQVVESU9fVFJBQ0socmV0KTsKKworICAgIHJldHVy
biB3cmFwQXVkaW9UcmFjayhvYmopOworfQorCitXZWJDb3JlOjpBdWRpb1RyYWNrKiBjb3JlKFdl
YktpdERPTUF1ZGlvVHJhY2sqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1RyYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCkt
PmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQXVkaW9UcmFjayogd3JhcEF1ZGlvVHJh
Y2soV2ViQ29yZTo6QXVkaW9UcmFjayogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQVVESU9fVFJBQ0soZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9BVURJT19UUkFDSywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShW
SURFT19UUkFDSykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01BdWRpb1RyYWNrLCB3ZWJraXRf
ZG9tX2F1ZGlvX3RyYWNrLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9JRCwKKyAgICBQUk9QX0tJTkQsCisgICAgUFJPUF9MQUJFTCwKKyAg
ICBQUk9QX0xBTkdVQUdFLAorICAgIFBST1BfRU5BQkxFRCwKK307CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fYXVkaW9fdHJhY2tfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdERPTUF1ZGlvVHJhY2tQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BVURJT19UUkFDS19H
RVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHByaXYtPn5XZWJLaXRET01BdWRpb1RyYWNrUHJp
dmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9h
dWRpb190cmFja19zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01BdWRpb1RyYWNrKiBzZWxmID0gV0VCS0lUX0RPTV9BVURJT19UUkFDSyhvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0VOQUJMRUQ6CisgICAgICAg
IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfc2V0X2VuYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9v
bGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdWRp
b190cmFja19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01BdWRpb1Ry
YWNrKiBzZWxmID0gV0VCS0lUX0RPTV9BVURJT19UUkFDSyhvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0lEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9pZChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9LSU5EOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9raW5kKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9sYWJlbChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQU5HVUFHRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfbGFuZ3VhZ2Uoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRU5BQkxFRDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfZW5hYmxlZChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9hdWRpb190
cmFja19jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBH
T2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX3Bh
cmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
Y29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktp
dERPTUF1ZGlvVHJhY2tQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BVURJT19UUkFDS19HRVRf
UFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpBdWRpb1RyYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCks
IG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfY2xhc3NfaW5pdChX
ZWJLaXRET01BdWRpb1RyYWNrQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUF1ZGlv
VHJhY2tQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9k
b21fYXVkaW9fdHJhY2tfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9
IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX3NldF9wcm9wZXJ0eTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X3Byb3Bl
cnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0lELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImlkIiwKKyAgICAgICAgICAgICJBdWRpb1RyYWNrOmlkIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEF1ZGlvVHJhY2s6aWQiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9LSU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImtpbmQi
LAorICAgICAgICAgICAgIkF1ZGlvVHJhY2s6a2luZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBBdWRpb1RyYWNrOmtpbmQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQUJFTCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsYWJlbCIsCisgICAgICAgICAg
ICAiQXVkaW9UcmFjazpsYWJlbCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBBdWRp
b1RyYWNrOmxhYmVsIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFOR1VBR0UsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibGFuZ3VhZ2UiLAorICAgICAgICAgICAgIkF1
ZGlvVHJhY2s6bGFuZ3VhZ2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogQXVkaW9U
cmFjazpsYW5ndWFnZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VOQUJMRUQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImVuYWJsZWQiLAorICAgICAgICAgICAgIkF1
ZGlvVHJhY2s6ZW5hYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBBdWRp
b1RyYWNrOmVuYWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9hdWRpb190
cmFja19pbml0KFdlYktpdERPTUF1ZGlvVHJhY2sqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9N
QXVkaW9UcmFja1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FVRElPX1RSQUNLX0dFVF9QUklW
QVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NQXVkaW9UcmFja1ByaXZhdGUo
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2lkKFdlYktpdERPTUF1
ZGlvVHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0FVRElPX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpBdWRpb1Ry
YWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmlkKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVP
X1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfa2luZChX
ZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVURJT19UUkFDSyhzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6QXVkaW9UcmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5raW5kKCkpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9hdWRpb190cmFj
a19nZXRfbGFiZWwoV2ViS2l0RE9NQXVkaW9UcmFjayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0soc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkF1ZGlvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bGFiZWwoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4g
MDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2F1ZGlvX3RyYWNrX2dldF9sYW5ndWFnZShXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKQor
eworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVURJ
T19UUkFDSyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QXVkaW9UcmFjayogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5sYW5ndWFnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8g
VHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8K
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfZW5hYmxlZChXZWJLaXRE
T01BdWRpb1RyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19BVURJT19UUkFDSyhzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OkF1ZGlvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+ZW5hYmxlZCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9hdWRpb190
cmFja19zZXRfZW5hYmxlZChXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVURJ
T19UUkFDSyhzZWxmKSk7CisgICAgV2ViQ29yZTo6QXVkaW9UcmFjayogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRFbmFibGVkKHZhbHVlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShW
SURFT19UUkFDSykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUF1ZGlvVHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNhY2U3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrLmgKQEAgLTAsMCArMSwxMTggQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQXVkaW9U
cmFja19oCisjZGVmaW5lIFdlYktpdERPTUF1ZGlvVHJhY2tfaAorCisjaWZkZWYgV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX0FVRElPX1RSQUNLICAgICAgICAgICAgKHdlYmtpdF9kb21fYXVkaW9fdHJhY2tf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVURJT19UUkFDSyhvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQVVE
SU9fVFJBQ0ssIFdlYktpdERPTUF1ZGlvVHJhY2spKQorI2RlZmluZSBXRUJLSVRfRE9NX0FVRElP
X1RSQUNLX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDSywgV2ViS2l0RE9NQXVkaW9UcmFja0NsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0FVRElPX1RSQUNLKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9BVURJT19UUkFDSykpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0tfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9BVURJT19UUkFDS19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0ssIFdlYktp
dERPTUF1ZGlvVHJhY2tDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFjayB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NQXVkaW9UcmFja0NsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF90
eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2lkOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fYXVkaW9fdHJhY2tfZ2V0X2lkKFdlYktpdERPTUF1ZGlvVHJhY2sqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfZ2V0X2tpbmQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NQXVkaW9UcmFjaworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9hdWRpb190
cmFja19nZXRfa2luZChXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9sYWJlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdWRp
b1RyYWNrCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9s
YWJlbChXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F1
ZGlvX3RyYWNrX2dldF9sYW5ndWFnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdWRpb1RyYWNr
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2dldF9sYW5ndWFn
ZShXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX2dldF9lbmFibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2sKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9hdWRpb190cmFja19nZXRfZW5hYmxl
ZChXZWJLaXRET01BdWRpb1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX3NldF9lbmFibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2sKKyAq
IEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9hdWRpb190cmFja19zZXRfZW5hYmxlZChXZWJLaXRE
T01BdWRpb1RyYWNrKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRE
T01BdWRpb1RyYWNrX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01BdWRpb1RyYWNrTGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTUyYmVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QuY3BwCkBA
IC0wLDAgKzEsMjU1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUF1ZGlvVHJhY2tM
aXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9BVURJT19UUkFDS19MSVNUX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX0FVRElPX1RSQUNLX0xJU1QsIFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0UHJpdmF0ZSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0UHJpdmF0ZSB7CisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdD4gY29y
ZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9IFdlYktpdERPTUF1ZGlv
VHJhY2tMaXN0UHJpdmF0ZTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBraXQoV2ViQ29yZTo6QXVkaW9U
cmFja0xpc3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9BVURJT19UUkFDS19MSVNUKHJldCk7CisKKyAgICByZXR1cm4gd3Jh
cEF1ZGlvVHJhY2tMaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBjb3Jl
KFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01BdWRpb1RyYWNrTGlz
dCogd3JhcEF1ZGlvVHJhY2tMaXN0KFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9BVURJ
T19UUkFDS19MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0tfTElT
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9kaXNwYXRjaF9ldmVudChXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVy
cm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpFdmVudCogY29y
ZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJB
TShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
IC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21f
YXVkaW9fdHJhY2tfbGlzdF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6
QXVkaW9UcmFja0xpc3QqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1Ry
YWNrTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVu
dE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNl
Q2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJh
Y2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURf
UEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNl
KQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tf
bGlzdF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9hdWRpb190cmFja19saXN0X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
QXVkaW9UcmFja0xpc3QsIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdCwgV0VCS0lUX0RPTV9U
WVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9U
QVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUF1
ZGlvVHJhY2tMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQVVESU9fVFJBQ0tfTElTVF9H
RVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHByaXYtPn5XZWJLaXRET01BdWRpb1RyYWNrTGlz
dFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xp
c3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9hdWRpb190cmFja19saXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBzZWxmID0gV0VCS0lUX0RPTV9BVURJT19UUkFDS19M
SVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
TEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9hdWRp
b190cmFja19saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdP
YmplY3QqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBl
LCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSog
Y29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9BVURJT19UUkFDS19MSVNUX0dFVF9QUklWQVRFKG9iamVj
dCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkF1ZGlvVHJh
Y2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9jbGFzc19pbml0KFdlYktp
dERPTUF1ZGlvVHJhY2tMaXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUF1ZGlv
VHJhY2tMaXN0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJr
aXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9maW5hbGl6ZTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJBdWRpb1RyYWNr
TGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgQXVkaW9UcmFja0xp
c3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2F1
ZGlvX3RyYWNrX2xpc3RfaW5pdChXZWJLaXRET01BdWRpb1RyYWNrTGlzdCogcmVxdWVzdCkKK3sK
KyAgICBXZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0FV
RElPX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJL
aXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NQXVkaW9UcmFjayog
d2Via2l0X2RvbV9hdWRpb190cmFja19saXN0X2l0ZW0oV2ViS2l0RE9NQXVkaW9UcmFja0xpc3Qq
IHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0tfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6QXVkaW9UcmFja0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkF1ZGlvVHJhY2s+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5p
dGVtKGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisg
ICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitXZWJL
aXRET01BdWRpb1RyYWNrKiB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfZ2V0X3RyYWNrX2J5
X2lkKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogaWQpCit7Cisj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0FVRElPX1RS
QUNLX0xJU1Qoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGlkLCAwKTsKKyAg
ICBXZWJDb3JlOjpBdWRpb1RyYWNrTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRJZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChpZCk7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkF1ZGlvVHJhY2s+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5nZXRUcmFja0J5SWQoY29udmVydGVkSWQpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBVTlVTRURfUEFSQU0oaWQpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2F1ZGlvX3RyYWNrX2xpc3RfZ2V0X2xl
bmd0aChXZWJLaXRET01BdWRpb1RyYWNrTGlzdCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVVESU9fVFJBQ0tfTElTVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1
bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2N2VmYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3QuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0X2gKKyNkZWZp
bmUgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3RfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0FVRElPX1RSQUNLX0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV9hdWRpb190cmFja19saXN0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fQVVESU9fVFJBQ0tfTElTVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfQVVESU9fVFJBQ0tfTElTVCwgV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0FVRElPX1RSQUNLX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0FVRElPX1RSQUNLX0xJU1QsIFdl
YktpdERPTUF1ZGlvVHJhY2tMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQVVESU9f
VFJBQ0tfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0tfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfQVVESU9fVFJBQ0tfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0tfTElTVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fQVVESU9fVFJBQ0tfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQVVESU9fVFJBQ0tfTElTVCwgV2Vi
S2l0RE9NQXVkaW9UcmFja0xpc3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFj
a0xpc3QgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fYXVk
aW9fdHJhY2tfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2F1ZGlv
X3RyYWNrX2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01BdWRpb1RyYWNrTGlzdAor
ICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTUF1ZGlvVHJhY2sKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NQXVkaW9UcmFjayoKK3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlz
dF9pdGVtKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisv
KioKKyAqIHdlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9nZXRfdHJhY2tfYnlfaWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NQXVkaW9UcmFja0xpc3QKKyAqIEBpZDogQSAjZ2NoYXIKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUF1ZGlvVHJhY2sKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQXVkaW9UcmFj
ayoKK3dlYmtpdF9kb21fYXVkaW9fdHJhY2tfbGlzdF9nZXRfdHJhY2tfYnlfaWQoV2ViS2l0RE9N
QXVkaW9UcmFja0xpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBpZCk7CisKKy8qKgorICogd2Via2l0
X2RvbV9hdWRpb190cmFja19saXN0X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
QXVkaW9UcmFja0xpc3QKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2F1ZGlvX3Ry
YWNrX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01BdWRpb1RyYWNrTGlzdCogc2VsZik7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01BdWRpb1RyYWNrTGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1
ZGlvVHJhY2tMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzNhYzU4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01BdWRpb1RyYWNrTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0UHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0F1ZGlvVHJhY2tMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTUF1ZGlvVHJhY2tMaXN0Lmg+CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiB3cmFwQXVkaW9UcmFja0xp
c3QoV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqKTsKK1dlYktpdERPTUF1ZGlvVHJhY2tMaXN0KiBr
aXQoV2ViQ29yZTo6QXVkaW9UcmFja0xpc3QqKTsKK1dlYkNvcmU6OkF1ZGlvVHJhY2tMaXN0KiBj
b3JlKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUF1
ZGlvVHJhY2tMaXN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUF1ZGlvVHJhY2tQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWUwMGNmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQXVkaW9UcmFja1By
aXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTUF1ZGlvVHJhY2tQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
QXVkaW9UcmFja1ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9BdWRpb1RyYWNrLmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUF1ZGlvVHJhY2suaD4KKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NQXVkaW9UcmFjayogd3Jh
cEF1ZGlvVHJhY2soV2ViQ29yZTo6QXVkaW9UcmFjayopOworV2ViS2l0RE9NQXVkaW9UcmFjayog
a2l0KFdlYkNvcmU6OkF1ZGlvVHJhY2sqKTsKK1dlYkNvcmU6OkF1ZGlvVHJhY2sqIGNvcmUoV2Vi
S2l0RE9NQXVkaW9UcmFjayopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBF
TkFCTEUoVklERU9fVFJBQ0spICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01BdWRpb1RyYWNrUHJp
dmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJhclByb3AuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXJQcm9wLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjUxZWM4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01CYXJQcm9wLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUJhclByb3AuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01CYXJQcm9wUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2Rl
ZmluZSBXRUJLSVRfRE9NX0JBUl9QUk9QX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLCBXZWJLaXRET01CYXJQ
cm9wUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUJhclByb3BQcml2YXRlIHsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6QmFyUHJvcD4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NQmFy
UHJvcFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01CYXJQcm9wKiBr
aXQoV2ViQ29yZTo6QmFyUHJvcCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0JBUl9QUk9QKHJldCk7CisKKyAgICByZXR1cm4g
d3JhcEJhclByb3Aob2JqKTsKK30KKworV2ViQ29yZTo6QmFyUHJvcCogY29yZShXZWJLaXRET01C
YXJQcm9wKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6QmFyUHJvcCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTUJhclByb3AqIHdyYXBCYXJQcm9wKFdlYkNvcmU6OkJhclByb3Aq
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0JBUl9QUk9QKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AsICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NQmFyUHJvcCwgd2Via2l0X2RvbV9iYXJf
cHJvcCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfVklTSUJMRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYmFyX3Byb3BfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUJhclByb3BQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9CQVJfUFJPUF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2Vi
S2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisg
ICAgcHJpdi0+fldlYktpdERPTUJhclByb3BQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV9iYXJfcHJvcF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Jhcl9wcm9wX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTUJhclByb3AqIHNlbGYgPSBXRUJLSVRfRE9NX0JBUl9QUk9QKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVklTSUJM
RToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9iYXJfcHJv
cF9nZXRfdmlzaWJsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Vi
a2l0X2RvbV9iYXJfcHJvcF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGll
cykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2Jh
cl9wcm9wX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01CYXJQcm9wUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQkFSX1BST1BfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFyUHJvcCo+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJu
IG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9iYXJfcHJvcF9jbGFzc19pbml0
KFdlYktpdERPTUJhclByb3BDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQmFyUHJv
cFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9i
YXJfcHJvcF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV9iYXJfcHJvcF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZJ
U0lCTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInZpc2li
bGUiLAorICAgICAgICAgICAgIkJhclByb3A6dmlzaWJsZSIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdib29sZWFuIEJhclByb3A6dmlzaWJsZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fYmFyX3Byb3BfaW5pdChXZWJLaXRET01CYXJQcm9wKiByZXF1ZXN0KQoreworICAgIFdl
YktpdERPTUJhclByb3BQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9CQVJfUFJPUF9HRVRfUFJJ
VkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUJhclByb3BQcml2YXRlKCk7
Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3Zpc2libGUoV2ViS2l0RE9N
QmFyUHJvcCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19CQVJfUFJPUChzZWxm
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkJhclByb3AqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dmlzaWJsZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXJQcm9wLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwMjAzOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQmFyUHJvcC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NQmFyUHJvcF9oCisjZGVmaW5lIFdlYktp
dERPTUJhclByb3BfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QICAgICAg
ICAgICAgKHdlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9CQVJfUFJPUChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AsIFdlYktpdERPTUJhclByb3ApKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0JBUl9QUk9QX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCwgV2ViS2l0RE9NQmFyUHJv
cENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0JBUl9QUk9QKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfQkFSX1BST1BfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9CQVJfUFJPUF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AsIFdlYktpdERPTUJhclBy
b3BDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQmFyUHJvcCB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NQmFyUHJvcENsYXNz
IHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2Jhcl9wcm9wX2dldF90eXBlKHZvaWQpOworCisvKioKKyAq
IHdlYmtpdF9kb21fYmFyX3Byb3BfZ2V0X3Zpc2libGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
QmFyUHJvcAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2Jhcl9wcm9wX2dl
dF92aXNpYmxlKFdlYktpdERPTUJhclByb3AqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
QmFyUHJvcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcFBy
aXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Tm9kZVByaXZhdGUuaApy
ZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01CYXJQcm9wUHJpdmF0ZS5oCmluZGV4IGY0OWJhNWQuLjU5ZWVkNjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3ROb2RlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmFyUHJvcFByaXZhdGUuaApAQCAt
MTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBXZWJLaXRET01UZXN0Tm9kZVByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0
Tm9kZVByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01CYXJQcm9wUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTUJhclByb3BQcml2YXRlX2gKIAotI2luY2x1ZGUgIlRlc3ROb2RlLmgiCi0jaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRlc3ROb2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9C
YXJQcm9wLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUJhclByb3AuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Tm9kZSogd3JhcFRlc3ROb2RlKFdlYkNvcmU6
OlRlc3ROb2RlKik7Ci1XZWJLaXRET01UZXN0Tm9kZSoga2l0KFdlYkNvcmU6OlRlc3ROb2RlKik7
Ci1XZWJDb3JlOjpUZXN0Tm9kZSogY29yZShXZWJLaXRET01UZXN0Tm9kZSopOworV2ViS2l0RE9N
QmFyUHJvcCogd3JhcEJhclByb3AoV2ViQ29yZTo6QmFyUHJvcCopOworV2ViS2l0RE9NQmFyUHJv
cCoga2l0KFdlYkNvcmU6OkJhclByb3AqKTsKK1dlYkNvcmU6OkJhclByb3AqIGNvcmUoV2ViS2l0
RE9NQmFyUHJvcCopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRE
T01UZXN0Tm9kZVByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUJhclByb3BQcml2YXRl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXR0ZXJ5
TWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMmRkNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMzA3
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVk
ZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fQkFUVEVSWV9NQU5BR0VSX0dF
VF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RP
TV9UWVBFX0JBVFRFUllfTUFOQUdFUiwgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlIHsKKyNpZiBF
TkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgUmVmUHRyPFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2Vy
PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykKK30gV2ViS2l0
RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlOworCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqIGtpdChXZWJD
b3JlOjpCYXR0ZXJ5TWFuYWdlciogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0JBVFRFUllfTUFOQUdFUihyZXQpOworCisgICAg
cmV0dXJuIHdyYXBCYXR0ZXJ5TWFuYWdlcihvYmopOworfQorCitXZWJDb3JlOjpCYXR0ZXJ5TWFu
YWdlciogY29yZShXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQmF0
dGVyeU1hbmFnZXIqIHdyYXBCYXR0ZXJ5TWFuYWdlcihXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlciog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fQkFUVEVSWV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQkFUVEVS
WV9NQU5BR0VSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEJBVFRFUllfU1RBVFVTKQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2ViQ29y
ZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3Jl
RXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdl
ciogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAg
ICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQmF0dGVyeSBTdGF0dXMiKQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9T
VEFUVVMpCisgICAgV2ViQ29yZTo6QmF0dGVyeU1hbmFnZXIqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlcio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjph
ZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwor
ICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsK
KyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQmF0dGVyeSBTdGF0dXMiKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAv
LyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2JhdHRlcnlfbWFuYWdlcl9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisgICAgV2Vi
Q29yZTo6QmF0dGVyeU1hbmFnZXIqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpC
YXR0ZXJ5TWFuYWdlcio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9Q
QVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURf
UEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
QmF0dGVyeSBTdGF0dXMiKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZGlzcGF0Y2hfZXZlbnQ7Cisg
ICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2Vy
X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitH
X0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciwgd2Via2l0X2Rv
bV9iYXR0ZXJ5X21hbmFnZXIsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0hBUkdJTkcsCisg
ICAgUFJPUF9DSEFSR0lOR19USU1FLAorICAgIFBST1BfRElTQ0hBUkdJTkdfVElNRSwKKyAgICBQ
Uk9QX0xFVkVMLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUJhdHRlcnlNYW5hZ2Vy
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQkFUVEVSWV9NQU5BR0VSX0dFVF9QUklWQVRFKG9i
amVjdCk7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUo
QkFUVEVSWV9TVEFUVVMpCisgICAgcHJpdi0+fldlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0
ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
YmF0dGVyeV9tYW5hZ2VyX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUJhdHRlcnlNYW5hZ2VyKiBzZWxmID0gV0VCS0lUX0RPTV9CQVRURVJZX01BTkFHRVIob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DSEFSR0lORzoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9iYXR0ZXJ5X21h
bmFnZXJfZ2V0X2NoYXJnaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NIQVJHSU5HX1RJTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0
X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2NoYXJnaW5nX3RpbWUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRElTQ0hBUkdJTkdfVElNRToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfZGlzY2hhcmdp
bmdfdGltZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MRVZFTDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdl
cl9nZXRfbGV2ZWwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtp
dF9kb21fYmF0dGVyeV9tYW5hZ2VyX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fYmF0dGVyeV9tYW5hZ2VyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKEJB
VFRFUllfU1RBVFVTKQorICAgIFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fQkFUVEVSWV9NQU5BR0VSX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJp
di0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKj4oV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmpl
Y3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8g
RU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2NsYXNzX2luaXQoV2ViS2l0RE9NQmF0dGVy
eU1hbmFnZXJDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQ
cml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fYmF0
dGVyeV9tYW5hZ2VyX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9wcm9wZXJ0eTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9DSEFSR0lORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAiY2hhcmdpbmciLAorICAgICAgICAgICAgIkJhdHRlcnlNYW5hZ2VyOmNo
YXJnaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gQmF0dGVyeU1hbmFnZXI6
Y2hhcmdpbmciLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSEFSR0lOR19USU1FLAorICAgICAgICBn
X3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImNoYXJnaW5nLXRpbWUiLAorICAgICAg
ICAgICAgIkJhdHRlcnlNYW5hZ2VyOmNoYXJnaW5nLXRpbWUiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnZG91YmxlIEJhdHRlcnlNYW5hZ2VyOmNoYXJnaW5nLXRpbWUiLAorICAgICAgICAgICAg
LUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJU0NIQVJHSU5HX1RJTUUsCisgICAgICAg
IGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAiZGlzY2hhcmdpbmctdGltZSIsCisg
ICAgICAgICAgICAiQmF0dGVyeU1hbmFnZXI6ZGlzY2hhcmdpbmctdGltZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdkb3VibGUgQmF0dGVyeU1hbmFnZXI6ZGlzY2hhcmdpbmctdGltZSIsCisg
ICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVWRUwsCisgICAgICAg
IGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAibGV2ZWwiLAorICAgICAgICAgICAg
IkJhdHRlcnlNYW5hZ2VyOmxldmVsIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBC
YXR0ZXJ5TWFuYWdlcjpsZXZlbCIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9V
QkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfaW5pdChXZWJLaXRET01CYXR0ZXJ5
TWFuYWdlciogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX0JBVFRFUllfTUFOQUdFUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsK
KyAgICBuZXcgKHByaXYpIFdlYktpdERPTUJhdHRlcnlNYW5hZ2VyUHJpdmF0ZSgpOworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfY2hhcmdpbmcoV2ViS2l0RE9N
QmF0dGVyeU1hbmFnZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0JBVFRFUllfTUFOQUdFUihzZWxmKSwgRkFMU0UpOworICAg
IFdlYkNvcmU6OkJhdHRlcnlNYW5hZ2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNoYXJnaW5nKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIkJhdHRlcnkgU3RhdHVzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShCQVRURVJZX1NUQVRVUykgKi8KK30KKworZ2Rv
dWJsZSB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfY2hhcmdpbmdfdGltZShXZWJLaXRE
T01CYXR0ZXJ5TWFuYWdlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQkFUVEVSWV9NQU5BR0VSKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
ZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmNoYXJnaW5nVGltZSgpOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJCYXR0ZXJ5IFN0YXR1cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdk
b3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShCQVRURVJZX1NUQVRVUykgKi8KK30KKworZ2Rv
dWJsZSB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfZGlzY2hhcmdpbmdfdGltZShXZWJL
aXRET01CYXR0ZXJ5TWFuYWdlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMp
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQkFUVEVSWV9NQU5BR0VSKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmRpc2NoYXJnaW5nVGltZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJCYXR0ZXJ5IFN0YXR1cyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShCQVRURVJZX1NUQVRVUykgKi8KK30K
KworZ2RvdWJsZSB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfbGV2ZWwoV2ViS2l0RE9N
QmF0dGVyeU1hbmFnZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0JBVFRFUllfTUFOQUdFUihzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6QmF0dGVyeU1hbmFnZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Rv
dWJsZSByZXN1bHQgPSBpdGVtLT5sZXZlbCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJCYXR0ZXJ5IFN0YXR1cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDAp
OworI2VuZGlmIC8qIEVOQUJMRShCQVRURVJZX1NUQVRVUykgKi8KK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01CYXR0ZXJ5TWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXR0ZXJ5TWFuYWdlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NWFkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUJhdHRlcnlNYW5hZ2VyLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcl9oCisjZGVmaW5lIFdl
YktpdERPTUJhdHRlcnlNYW5hZ2VyX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9CQVRU
RVJZX01BTkFHRVIgICAgICAgICAgICAod2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9CQVRURVJZX01BTkFHRVIob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0JBVFRF
UllfTUFOQUdFUiwgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0JBVFRFUllfTUFOQUdFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQkFUVEVSWV9NQU5BR0VSLCBXZWJLaXRET01CYXR0
ZXJ5TWFuYWdlckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0JBVFRFUllfTUFOQUdFUihv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfQkFUVEVSWV9NQU5BR0VSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19CQVRURVJZX01B
TkFHRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0JBVFRFUllfTUFOQUdFUikpCisjZGVmaW5lIFdFQktJVF9ET01fQkFUVEVS
WV9NQU5BR0VSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9CQVRURVJZX01BTkFHRVIsIFdlYktpdERPTUJhdHRlcnlNYW5h
Z2VyQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyIHsKKyAgICBXZWJL
aXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01CYXR0
ZXJ5TWFuYWdlckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRf
dHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfY2hh
cmdpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIKKyAqCisgKiBSZXR1
cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9iYXR0ZXJ5X21hbmFnZXJfZ2V0X2NoYXJnaW5nKFdl
YktpdERPTUJhdHRlcnlNYW5hZ2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2JhdHRl
cnlfbWFuYWdlcl9nZXRfY2hhcmdpbmdfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01CYXR0
ZXJ5TWFuYWdlcgorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9iYXR0ZXJ5X21h
bmFnZXJfZ2V0X2NoYXJnaW5nX3RpbWUoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fYmF0dGVyeV9tYW5hZ2VyX2dldF9kaXNjaGFyZ2luZ190aW1l
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyCisgKgorICogUmV0dXJuczog
QSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
ZG91YmxlCit3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9nZXRfZGlzY2hhcmdpbmdfdGltZShX
ZWJLaXRET01CYXR0ZXJ5TWFuYWdlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9iYXR0
ZXJ5X21hbmFnZXJfZ2V0X2xldmVsOgorICogQHNlbGY6IEEgI1dlYktpdERPTUJhdHRlcnlNYW5h
Z2VyCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX2JhdHRlcnlfbWFuYWdlcl9n
ZXRfbGV2ZWwoV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqIHNlbGYpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NQmF0dGVyeU1hbmFnZXJfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CYXR0ZXJ5TWFuYWdl
clByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTgzZjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmF0
dGVyeU1hbmFnZXJQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlclByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9CYXR0ZXJ5TWFuYWdlci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01CYXR0
ZXJ5TWFuYWdlci5oPgorI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciogd3JhcEJhdHRlcnlNYW5hZ2VyKFdlYkNv
cmU6OkJhdHRlcnlNYW5hZ2VyKik7CitXZWJLaXRET01CYXR0ZXJ5TWFuYWdlcioga2l0KFdlYkNv
cmU6OkJhdHRlcnlNYW5hZ2VyKik7CitXZWJDb3JlOjpCYXR0ZXJ5TWFuYWdlciogY29yZShXZWJL
aXRET01CYXR0ZXJ5TWFuYWdlciopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
KiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01CYXR0ZXJ5
TWFuYWdlclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxv
Yi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmZWIyMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQmxvYi5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01CbG9iLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQmxvYlByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUJsb2JVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9CTE9CX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX0JMT0IsIFdlYktpdERPTUJsb2JQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NQmxvYlByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpCbG9iPiBjb3JlT2JqZWN0Owor
fSBXZWJLaXRET01CbG9iUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TUJsb2IqIGtpdChXZWJDb3JlOjpCbG9iKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fQkxPQihyZXQpOworCisgICAgcmV0dXJu
IHdyYXAob2JqKTsKK30KKworV2ViQ29yZTo6QmxvYiogY29yZShXZWJLaXRET01CbG9iKiByZXF1
ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmxvYio+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTUJsb2IqIHdyYXBCbG9iKFdlYkNvcmU6OkJsb2IqIGNvcmVPYmplY3QpCit7CisgICAgQVNT
RVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0JMT0IoZ19vYmplY3RfbmV3
KFdFQktJVF9ET01fVFlQRV9CTE9CLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRy
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERP
TUJsb2IsIHdlYmtpdF9kb21fYmxvYiwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7
CisgICAgUFJPUF8wLAorICAgIFBST1BfU0laRSwKKyAgICBQUk9QX1RZUEUsCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2Jsb2JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTUJsb2JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9CTE9CX0dFVF9QUklWQVRF
KG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NQmxvYlByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2Jsb2JfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ibG9iX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUJsb2IqIHNlbGYgPSBXRUJLSVRfRE9NX0JMT0Io
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9TSVpF
OgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fYmxvYl9nZXRf
c2l6ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2Jsb2JfZ2V0X2Jsb2JfdHlw
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9ibG9i
X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
R09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmpl
Y3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fYmxvYl9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFBy
b3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NQmxvYlByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X0JMT0JfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6QmxvYio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmpl
Y3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ibG9iX2NsYXNzX2luaXQoV2ViS2l0RE9NQmxvYkNsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNp
emVvZihXZWJLaXRET01CbG9iUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0
b3IgPSB3ZWJraXRfZG9tX2Jsb2JfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdF9kb21fYmxvYl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21fYmxvYl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfU0laRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJzaXpl
IiwKKyAgICAgICAgICAgICJCbG9iOnNpemUiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWlu
dDY0IEJsb2I6c2l6ZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAg
ICAgICAiQmxvYjp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEJsb2I6dHlw
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fYmxvYl9pbml0KFdlYktpdERPTUJsb2Iq
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NQmxvYlByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X0JMT0JfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01CbG9i
UHJpdmF0ZSgpOworfQorCitXZWJLaXRET01CbG9iKiB3ZWJraXRfZG9tX2Jsb2Jfc2xpY2UoV2Vi
S2l0RE9NQmxvYiogc2VsZiwgZ2ludDY0IHN0YXJ0LCBnaW50NjQgZW5kLCBjb25zdCBnY2hhciog
Y29udGVudFR5cGUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQkxPQihzZWxmKSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udGVudFR5cGUsIDApOworICAgIFdlYkNvcmU6
OkJsb2IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkQ29udGVudFR5cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoY29udGVudFR5cGUpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpCbG9iPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
c2xpY2Uoc3RhcnQsIGVuZCwgY29udmVydGVkQ29udGVudFR5cGUpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9i
bG9iX2dldF9zaXplKFdlYktpdERPTUJsb2IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfQkxPQihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6QmxvYiogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnNpemUoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9ibG9iX2dldF9ibG9iX3R5cGUoV2Vi
S2l0RE9NQmxvYiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19CTE9CKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpCbG9iKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9iLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2MxNGNiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01CbG9iLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRv
bS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
RE9NQmxvYl9oCisjZGVmaW5lIFdlYktpdERPTUJsb2JfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9CTE9CICAgICAgICAgICAgKHdlYmtpdF9kb21fYmxvYl9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0JMT0Iob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0JMT0IsIFdlYktpdERPTUJs
b2IpKQorI2RlZmluZSBXRUJLSVRfRE9NX0JMT0JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0JMT0IsIFdlYktpdERPTUJs
b2JDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19CTE9CKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9CTE9CKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19CTE9CX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9CTE9CKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9C
TE9CX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9CTE9CLCBXZWJLaXRET01CbG9iQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTUJsb2IgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTUJsb2JDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9ibG9iX2dldF90
eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fYmxvYl9nZXRfc2l6ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01CbG9iCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorKiovCitXRUJL
SVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fYmxvYl9nZXRfc2l6ZShXZWJLaXRET01CbG9iKiBz
ZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUJsb2JfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NcmVhZG9ubHlQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUJsb2JQcml2YXRlLmgKc2ltaWxhcml0eSBp
bmRleCA3NSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NcmVhZG9ubHlQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQmxvYlBy
aXZhdGUuaAppbmRleCBlNzY1OTFhLi4wOGIxMmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01yZWFkb25seVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUJsb2JQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NcmVhZG9ubHlQ
cml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NcmVhZG9ubHlQcml2YXRlX2gKKyNpZm5kZWYgV2Vi
S2l0RE9NQmxvYlByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01CbG9iUHJpdmF0ZV9oCiAKLSNp
bmNsdWRlICJyZWFkb25seS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01yZWFkb25s
eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQmxvYi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01CbG9iLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NcmVhZG9ubHkqIHdy
YXByZWFkb25seShXZWJDb3JlOjpyZWFkb25seSopOwotV2ViS2l0RE9NcmVhZG9ubHkqIGtpdChX
ZWJDb3JlOjpyZWFkb25seSopOwotV2ViQ29yZTo6cmVhZG9ubHkqIGNvcmUoV2ViS2l0RE9NcmVh
ZG9ubHkqKTsKK1dlYktpdERPTUJsb2IqIHdyYXBCbG9iKFdlYkNvcmU6OkJsb2IqKTsKK1dlYktp
dERPTUJsb2IqIGtpdChXZWJDb3JlOjpCbG9iKik7CitXZWJDb3JlOjpCbG9iKiBjb3JlKFdlYktp
dERPTUJsb2IqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogV2ViS2l0RE9N
cmVhZG9ubHlQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01CbG9iUHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQmxvYlVuc3RhYmxlLmgKc2ltaWxhcml0eSBpbmRleCA1NCUKcmVuYW1lIGZyb20g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlLmgKcmVuYW1lIHRvIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQmxvYlVuc3RhYmxlLmgKaW5kZXggZTJmNDEyMy4uZjQ0MTBiMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01CbG9i
VW5zdGFibGUuaApAQCAtMTgsMTYgKzE4LDQyIEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZVByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZVByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01CbG9iVW5z
dGFibGVfaAorI2RlZmluZSBXZWJLaXRET01CbG9iVW5zdGFibGVfaAogCi0jaW5jbHVkZSAiVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaCIKLSNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaD4KKyNp
ZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1X
ZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSogd3JhcFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKFdlYkNvcmU6OlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlKik7Ci1XZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZSoga2l0KFdlYkNvcmU6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlKik7Ci1XZWJDb3JlOjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dp
dGhTZXF1ZW5jZSogY29yZShXZWJLaXRET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZSopOwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlUHJpdmF0ZV9oICovCitHX0JFR0lOX0RFQ0xT
CisKKy8qKgorICogd2Via2l0X2RvbV9ibG9iX3NsaWNlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUJsb2IKKyAqIEBzdGFydDogQSAjZ2ludDY0CisgKiBAZW5kOiBBICNnaW50NjQKKyAqIEBjb250
ZW50VHlwZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dl
YktpdERPTUJsb2IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NQmxvYioKK3dlYmtpdF9kb21fYmxvYl9zbGljZShXZWJLaXRET01CbG9iKiBzZWxm
LCBnaW50NjQgc3RhcnQsIGdpbnQ2NCBlbmQsIGNvbnN0IGdjaGFyKiBjb250ZW50VHlwZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9ibG9iX2dldF9ibG9iX3R5cGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NQmxvYgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9ibG9iX2dldF9ibG9i
X3R5cGUoV2ViS2l0RE9NQmxvYiogc2VsZik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUJsb2JV
bnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNEQVRBU2VjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNE
QVRBU2VjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyMTBj
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLmNwcApAQCAtMCwwICsxLDEw
NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTUNEQVRBU2VjdGlvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29y
ZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRl
ICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQ0RBVEFTZWN0aW9uUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01DREFUQVNlY3Rpb24qIGtpdChXZWJDb3JlOjpDREFU
QVNlY3Rpb24qIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DREFUQV9TRUNUSU9OKGtp
dChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpDREFU
QVNlY3Rpb24qIGNvcmUoV2ViS2l0RE9NQ0RBVEFTZWN0aW9uKiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q0RBVEFTZWN0aW9uKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQ0RB
VEFTZWN0aW9uKiB3cmFwQ0RBVEFTZWN0aW9uKFdlYkNvcmU6OkNEQVRBU2VjdGlvbiogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
Q0RBVEFfU0VDVElPTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0NEQVRBX1NFQ1RJT04s
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25fZGlz
cGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQq
IGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50
ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkNEQVRBU2VjdGlvbiogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkNEQVRBU2VjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpj
b3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlv
bi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fY2RhdGFfc2VjdGlvbl9hZGRfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpDREFUQVNlY3Rpb24qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDREFUQVNl
Y3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX3JlbW92ZV9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkNEQVRBU2VjdGlvbiogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNE
QVRBU2VjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAg
IHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2
ZW50ID0gd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNl
LT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2NkYXRhX3NlY3Rpb25fYWRkX2V2ZW50
X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2NkYXRhX3NlY3Rpb25fcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBF
X1dJVEhfQ09ERShXZWJLaXRET01DREFUQVNlY3Rpb24sIHdlYmtpdF9kb21fY2RhdGFfc2VjdGlv
biwgV0VCS0lUX0RPTV9UWVBFX1RFWFQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2NsYXNzX2luaXQoV2ViS2l0RE9NQ0RB
VEFTZWN0aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVz
dENsYXNzKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2luaXQo
V2ViS2l0RE9NQ0RBVEFTZWN0aW9uKiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DREFUQVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFT
ZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzZjVlOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLmgKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0RE9NQ0RBVEFTZWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ0RBVEFT
ZWN0aW9uX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTVRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0NEQVRBX1NFQ1RJ
T04gICAgICAgICAgICAod2Via2l0X2RvbV9jZGF0YV9zZWN0aW9uX2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fQ0RBVEFfU0VDVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ0RBVEFfU0VDVElPTiwgV2Vi
S2l0RE9NQ0RBVEFTZWN0aW9uKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DREFUQV9TRUNUSU9OX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9DREFUQV9TRUNUSU9OLCBXZWJLaXRET01DREFUQVNlY3Rpb25DbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19DREFUQV9TRUNUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DREFUQV9TRUNUSU9OKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19DREFUQV9TRUNUSU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DREFUQV9TRUNUSU9OKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9DREFUQV9TRUNUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9DREFUQV9TRUNUSU9O
LCBXZWJLaXRET01DREFUQVNlY3Rpb25DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQ0RBVEFT
ZWN0aW9uIHsKKyAgICBXZWJLaXRET01UZXh0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVj
dCBfV2ViS2l0RE9NQ0RBVEFTZWN0aW9uQ2xhc3MgeworICAgIFdlYktpdERPTVRleHRDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2NkYXRhX3Nl
Y3Rpb25fZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRE
T01DREFUQVNlY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01DREFUQVNlY3Rpb25Qcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dFR5cGVkZWZzUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNEQVRBU2VjdGlvblByaXZhdGUuaApp
bmRleCAyNWQwNTVkLi5kMGMwZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0VHlwZWRlZnNQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01DREFUQVNlY3Rpb25Qcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdFR5
cGVkZWZzUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RUeXBlZGVmc1ByaXZhdGVfaAor
I2lmbmRlZiBXZWJLaXRET01DREFUQVNlY3Rpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
Q0RBVEFTZWN0aW9uUHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0VHlwZWRlZnMuaCIKLSNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdFR5cGVkZWZzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9DREFUQVNlY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ0RBVEFTZWN0
aW9uLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdFR5cGVkZWZzKiB3cmFw
VGVzdFR5cGVkZWZzKFdlYkNvcmU6OlRlc3RUeXBlZGVmcyopOwotV2ViS2l0RE9NVGVzdFR5cGVk
ZWZzKiBraXQoV2ViQ29yZTo6VGVzdFR5cGVkZWZzKik7Ci1XZWJDb3JlOjpUZXN0VHlwZWRlZnMq
IGNvcmUoV2ViS2l0RE9NVGVzdFR5cGVkZWZzKik7CitXZWJLaXRET01DREFUQVNlY3Rpb24qIHdy
YXBDREFUQVNlY3Rpb24oV2ViQ29yZTo6Q0RBVEFTZWN0aW9uKik7CitXZWJLaXRET01DREFUQVNl
Y3Rpb24qIGtpdChXZWJDb3JlOjpDREFUQVNlY3Rpb24qKTsKK1dlYkNvcmU6OkNEQVRBU2VjdGlv
biogY29yZShXZWJLaXRET01DREFUQVNlY3Rpb24qKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
Ci0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdFR5cGVkZWZzUHJpdmF0ZV9oICovCisjZW5kaWYgLyog
V2ViS2l0RE9NQ0RBVEFTZWN0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1
bGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01DU1NSdWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40N2VkYzFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlLmNwcApAQCAtMCww
ICsxLDI0NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGUuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01D
U1NSdWxlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1N0eWxlU2hlZXRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VU
RjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01DU1NSdWxlVW5zdGFibGUuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdF
QktJVF9ET01fQ1NTX1JVTEVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BS
SVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUsIFdlYktpdERPTUNTU1J1bGVQcml2
YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUgeworICAgIFJl
ZlB0cjxXZWJDb3JlOjpDU1NSdWxlPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01DU1NSdWxlUHJp
dmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUNTU1J1bGUqIGtpdChXZWJD
b3JlOjpDU1NSdWxlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fQ1NTX1JVTEUocmV0KTsKKworICAgIHJldHVybiB3cmFwQ1NT
UnVsZShvYmopOworfQorCitXZWJDb3JlOjpDU1NSdWxlKiBjb3JlKFdlYktpdERPTUNTU1J1bGUq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpD
U1NSdWxlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30K
KworV2ViS2l0RE9NQ1NTUnVsZSogd3JhcENTU1J1bGUoV2ViQ29yZTo6Q1NTUnVsZSogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
Q1NTX1JVTEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRSwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01DU1NSdWxlLCB3ZWJraXRfZG9tX2Nzc19ydWxlLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9U
WVBFLAorICAgIFBST1BfQ1NTX1RFWFQsCisgICAgUFJPUF9QQVJFTlRfU1RZTEVfU0hFRVQsCisg
ICAgUFJPUF9QQVJFTlRfUlVMRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3J1
bGVfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTUNTU1J1bGVQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfUlVMRV9HRVRfUFJJVkFURShvYmplY3QpOworCisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkp
OworCisgICAgcHJpdi0+fldlYktpdERPTUNTU1J1bGVQcml2YXRlKCk7CisgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV9jc3NfcnVsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19ydWxlX3NldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUNTU1J1bGUqIHNlbGYgPSBXRUJLSVRfRE9N
X0NTU19SVUxFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfQ1NTX1RFWFQ6CisgICAgICAgIHdlYmtpdF9kb21fY3NzX3J1bGVfc2V0X2Nzc190ZXh0
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01DU1NSdWxlKiBzZWxmID0gV0VCS0lUX0RPTV9DU1NfUlVMRShv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RZUEU6
CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0
X3J1bGVfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DU1NfVEVY
VDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9jc3NfcnVs
ZV9nZXRfY3NzX3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFS
RU5UX1NUWUxFX1NIRUVUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fY3NzX3J1bGVfZ2V0X3BhcmVudF9zdHlsZV9zaGVldChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QQVJFTlRfUlVMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9wYXJlbnRfcnVsZShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9jc3NfcnVsZV9jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2Nzc19ydWxlX3BhcmVudF9jbGFzcyktPmNv
bnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVy
dGllcyk7CisKKyAgICBXZWJLaXRET01DU1NSdWxlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
Q1NTX1JVTEVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Q1NTUnVsZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9jc3NfcnVsZV9jbGFzc19pbml0KFdlYktpdERPTUNTU1J1bGVDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9jc3NfcnVsZV9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9jc3NfcnVsZV9maW5hbGl6ZTsK
KyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fY3NzX3J1bGVfc2V0
X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9j
c3NfcnVsZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiQ1NT
UnVsZTp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VzaG9ydCBDU1NSdWxlOnR5cGUi
LAorICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1NTX1RFWFQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY3NzLXRleHQiLAorICAgICAgICAgICAgIkNT
U1J1bGU6Y3NzLXRleHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIENTU1J1bGU6
Y3NzLXRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFSRU5UX1NUWUxFX1NIRUVULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBhcmVudC1zdHlsZS1zaGVldCIs
CisgICAgICAgICAgICAiQ1NTUnVsZTpwYXJlbnQtc3R5bGUtc2hlZXQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBDU1NSdWxlOnBhcmVudC1zdHlsZS1z
aGVldCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX1NIRUVULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFS
RU5UX1JVTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicGFy
ZW50LXJ1bGUiLAorICAgICAgICAgICAgIkNTU1J1bGU6cGFyZW50LXJ1bGUiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01DU1NSdWxlKiBDU1NSdWxlOnBhcmVudC1ydWxlIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3J1bGVf
aW5pdChXZWJLaXRET01DU1NSdWxlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUNTU1J1bGVQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfUlVMRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsK
KyAgICBuZXcgKHByaXYpIFdlYktpdERPTUNTU1J1bGVQcml2YXRlKCk7Cit9CisKK2d1c2hvcnQg
d2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcnVsZV90eXBlKFdlYktpdERPTUNTU1J1bGUqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1JVTEUoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkNTU1J1bGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCBy
ZXN1bHQgPSBpdGVtLT50eXBlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21fY3NzX3J1bGVfZ2V0X2Nzc190ZXh0KFdlYktpdERPTUNTU1J1bGUqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1JVTEUoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkNTU1J1bGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y3NzVGV4dCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fY3NzX3J1bGVfc2V0X2Nzc190ZXh0KFdlYktpdERP
TUNTU1J1bGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfUlVMRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAg
V2ViQ29yZTo6Q1NTUnVsZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0Q3NzVGV4dChjb252
ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogd2Via2l0
X2RvbV9jc3NfcnVsZV9nZXRfcGFyZW50X3N0eWxlX3NoZWV0KFdlYktpdERPTUNTU1J1bGUqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1JVTEUoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkNTU1J1bGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5wYXJlbnRTdHlsZVNoZWV0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQ1NTUnVsZSogd2Via2l0X2RvbV9jc3NfcnVsZV9n
ZXRfcGFyZW50X3J1bGUoV2ViS2l0RE9NQ1NTUnVsZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19DU1NfUlVMRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTUnVsZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZT4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBhcmVudFJ1bGUoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUNTU1J1bGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjhjNTJkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGUuaApAQCAtMCww
ICsxLDEzNSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNl
cnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTUnVsZV9oCisjZGVmaW5lIFdlYktp
dERPTUNTU1J1bGVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9DU1Nf
UlVMRSAgICAgICAgICAgICh3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fQ1NTX1JVTEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFLCBXZWJLaXRET01DU1NSdWxl
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUsIFdlYktp
dERPTUNTU1J1bGVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DU1NfUlVMRShvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
Q1NTX1JVTEUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NTU19SVUxFX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVM
RSkpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFLCBXZWJL
aXRET01DU1NSdWxlQ2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfVU5LTk9X
Tl9SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfVU5LTk9XTl9SVUxFIDAK
KworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19SVUxFX1NUWUxFX1JVTEU6CisgKi8KKyNkZWZpbmUg
V0VCS0lUX0RPTV9DU1NfUlVMRV9TVFlMRV9SVUxFIDEKKworLyoqCisgKiBXRUJLSVRfRE9NX0NT
U19SVUxFX0NIQVJTRVRfUlVMRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFX0NI
QVJTRVRfUlVMRSAyCisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9JTVBPUlRfUlVMRToK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0NTU19SVUxFX0lNUE9SVF9SVUxFIDMKKworLyoqCisg
KiBXRUJLSVRfRE9NX0NTU19SVUxFX01FRElBX1JVTEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9DU1NfUlVMRV9NRURJQV9SVUxFIDQKKworLyoqCisgKiBXRUJLSVRfRE9NX0NTU19SVUxFX0ZP
TlRfRkFDRV9SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfRk9OVF9GQUNF
X1JVTEUgNQorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfUEFHRV9SVUxFOgorICovCisj
ZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfUEFHRV9SVUxFIDYKKworc3RydWN0IF9XZWJLaXRE
T01DU1NSdWxlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01DU1NSdWxlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fY3NzX3J1
bGVfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcnVs
ZV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1J1bGUKKyAqCisgKiBSZXR1cm5zOiBB
ICNndXNob3J0CisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0X2RvbV9jc3NfcnVsZV9n
ZXRfcnVsZV90eXBlKFdlYktpdERPTUNTU1J1bGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fY3NzX3J1bGVfZ2V0X2Nzc190ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1J1bGUK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9jc3NfcnVsZV9nZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTUnVsZSogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9jc3NfcnVsZV9zZXRfY3NzX3RleHQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NQ1NTUnVsZQorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fY3NzX3J1bGVfc2V0X2Nzc190ZXh0
KFdlYktpdERPTUNTU1J1bGUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3BhcmVudF9zdHlsZV9zaGVl
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NSdWxlCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRET01DU1NTdHlsZVNoZWV0CisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NQ1NTU3R5bGVTaGVldCoKK3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3BhcmVudF9zdHls
ZV9zaGVldChXZWJLaXRET01DU1NSdWxlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nz
c19ydWxlX2dldF9wYXJlbnRfcnVsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NSdWxlCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01DU1NSdWxlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTUnVsZSoKK3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3Bh
cmVudF9ydWxlKFdlYktpdERPTUNTU1J1bGUqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV2ViS2l0RE9NQ1NTUnVsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmJiODU2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0LmNwcApA
QCAtMCwwICsxLDE1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1J1bGVMaXN0LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTUnVs
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUX0dFVF9QUklW
QVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBF
X0NTU19SVUxFX0xJU1QsIFdlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkNTU1J1bGVMaXN0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01DU1NSdWxlTGlzdCoga2l0KFdlYkNv
cmU6OkNTU1J1bGVMaXN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fQ1NTX1JVTEVfTElTVChyZXQpOworCisgICAgcmV0dXJu
IHdyYXBDU1NSdWxlTGlzdChvYmopOworfQorCitXZWJDb3JlOjpDU1NSdWxlTGlzdCogY29yZShX
ZWJLaXRET01DU1NSdWxlTGlzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkNTU1J1bGVMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIHdyYXBDU1NS
dWxlTGlzdChXZWJDb3JlOjpDU1NSdWxlTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQ1NTX1JVTEVfTElTVChnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX0NTU19SVUxFX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NQ1NTUnVsZUxpc3QsIHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdCwgV0VC
S0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVO
R1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX0NTU19SVUxFX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsK
KworICAgIHByaXYtPn5XZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUNTU1J1bGVMaXN0KiBzZWxmID0g
V0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9jb25zdHJ1
Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RD
b25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmpl
Y3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fQ1NTX1JVTEVfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNv
cmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDU1NSdWxlTGlzdCo+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2NsYXNzX2luaXQo
V2ViS2l0RE9NQ1NTUnVsZUxpc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NQ1NT
UnVsZUxpc3RQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtp
dF9kb21fY3NzX3J1bGVfbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF9wcm9wZXJ0eTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygK
KyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkNTU1J1bGVMaXN0Omxlbmd0aCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBDU1NSdWxlTGlzdDpsZW5ndGgiLAorICAg
ICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9pbml0
KFdlYktpdERPTUNTU1J1bGVMaXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUNTU1J1bGVM
aXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fQ1NTX1JVTEVfTElTVF9HRVRfUFJJVkFURShy
ZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUNTU1J1bGVMaXN0UHJpdmF0ZSgpOwor
fQorCitXZWJLaXRET01DU1NSdWxlKiB3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfaXRlbShXZWJL
aXRET01DU1NSdWxlTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0NTU19SVUxFX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNTU1J1bGVM
aXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NS
dWxlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdl
YmtpdF9kb21fY3NzX3J1bGVfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTUNTU1J1bGVMaXN0KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19SVUxFX0xJU1Qoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkNTU1J1bGVMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVMaXN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJmMDdkOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NQ1NTUnVsZUxpc3QuaApAQCAtMCwwICsxLDczIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Vi
a2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRET01DU1NSdWxlTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTUNTU1J1bGVMaXN0X2gKKwor
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEVfTElTVCAgICAgICAg
ICAgICh3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9DU1NfUlVMRV9MSVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNULCBXZWJLaXRET01DU1NS
dWxlTGlzdCkpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfTElTVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfQ1NT
X1JVTEVfTElTVCwgV2ViS2l0RE9NQ1NTUnVsZUxpc3RDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19DU1NfUlVMRV9MSVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19DU1NfUlVMRV9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNUKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9DU1NfUlVMRV9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfUlVMRV9MSVNULCBXZWJLaXRET01D
U1NSdWxlTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01DU1NSdWxlTGlzdCB7CisgICAg
V2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9N
Q1NTUnVsZUxpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF90
eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3J1bGVfbGlzdF9pdGVtOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUNTU1J1bGVMaXN0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NTUnVsZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUNTU1J1bGUqCit3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfaXRl
bShXZWJLaXRET01DU1NSdWxlTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01DU1NSdWxlTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJ
IGd1bG9uZword2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NQ1NT
UnVsZUxpc3QqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NQ1NT
UnVsZUxpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQ1NTUnVsZUxpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjcwNjVmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZUxpc3RQcml2YXRlLmgK
QEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01DU1NSdWxl
TGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NSdWxlTGlzdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NSdWxlTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTUNTU1J1bGVMaXN0KiB3cmFwQ1NTUnVsZUxpc3QoV2ViQ29yZTo6Q1NTUnVs
ZUxpc3QqKTsKK1dlYktpdERPTUNTU1J1bGVMaXN0KiBraXQoV2ViQ29yZTo6Q1NTUnVsZUxpc3Qq
KTsKK1dlYkNvcmU6OkNTU1J1bGVMaXN0KiBjb3JlKFdlYktpdERPTUNTU1J1bGVMaXN0Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUNTU1J1bGVMaXN0UHJp
dmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01hdHRyaWJ1dGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVQcml2
YXRlLmgKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NYXR0cmlidXRlUHJpdmF0ZS5oCnJl
bmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUNTU1J1bGVQcml2YXRlLmgKaW5kZXggZGZlYjJkNi4uM2U4M2RkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NYXR0cmlidXRlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGUuaApAQCAt
MTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAot
I2lmbmRlZiBXZWJLaXRET01hdHRyaWJ1dGVQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NYXR0
cmlidXRlUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUNTU1J1bGVQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NQ1NTUnVsZVByaXZhdGVfaAogCi0jaW5jbHVkZSAiYXR0cmlidXRlLmgiCi0j
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTWF0dHJpYnV0ZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTUnVsZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NSdWxlLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NYXR0cmlidXRlKiB3cmFwYXR0cmlidXRlKFdl
YkNvcmU6OmF0dHJpYnV0ZSopOwotV2ViS2l0RE9NYXR0cmlidXRlKiBraXQoV2ViQ29yZTo6YXR0
cmlidXRlKik7Ci1XZWJDb3JlOjphdHRyaWJ1dGUqIGNvcmUoV2ViS2l0RE9NYXR0cmlidXRlKik7
CitXZWJLaXRET01DU1NSdWxlKiB3cmFwQ1NTUnVsZShXZWJDb3JlOjpDU1NSdWxlKik7CitXZWJL
aXRET01DU1NSdWxlKiBraXQoV2ViQ29yZTo6Q1NTUnVsZSopOworV2ViQ29yZTo6Q1NTUnVsZSog
Y29yZShXZWJLaXRET01DU1NSdWxlKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlm
IC8qIFdlYktpdERPTWF0dHJpYnV0ZVByaXZhdGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTUNT
U1J1bGVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTUnVsZVVuc3RhYmxlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNTU1J1bGVVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmE2NWFiODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1J1bGVVbnN0YWJsZS5oCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NQ1NTUnVsZVVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTUnVsZVVuc3RhYmxl
X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisv
KioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfS0VZRlJBTUVTX1JVTEU6CisgKi8KKyNkZWZpbmUg
V0VCS0lUX0RPTV9DU1NfUlVMRV9LRVlGUkFNRVNfUlVMRSA3CisKKy8qKgorICogV0VCS0lUX0RP
TV9DU1NfUlVMRV9LRVlGUkFNRV9SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JV
TEVfS0VZRlJBTUVfUlVMRSA4CisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9TVVBQT1JU
U19SVUxFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfU1VQUE9SVFNfUlVMRSAx
MgorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfV0VCS0lUX1JFR0lPTl9SVUxFOgorICov
CisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1JVTEVfV0VCS0lUX1JFR0lPTl9SVUxFIDE2CisKKy8q
KgorICogV0VCS0lUX0RPTV9DU1NfUlVMRV9XRUJLSVRfS0VZRlJBTUVTX1JVTEU6CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9XRUJLSVRfS0VZRlJBTUVTX1JVTEUgNworCisvKioK
KyAqIFdFQktJVF9ET01fQ1NTX1JVTEVfV0VCS0lUX0tFWUZSQU1FX1JVTEU6CisgKi8KKyNkZWZp
bmUgV0VCS0lUX0RPTV9DU1NfUlVMRV9XRUJLSVRfS0VZRlJBTUVfUlVMRSA4CisKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlm
IC8qIFdlYktpdERPTUNTU1J1bGVVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0
eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJmMjY0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01DU1NSdWxlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OX0dFVF9QUklWQVRF
KG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0NT
U19TVFlMRV9ERUNMQVJBVElPTiwgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZSB7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24+IGNvcmVPYmplY3Q7Cit9
IFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbioga2l0KFdlYkNvcmU6OkNTU1N0eWxl
RGVjbGFyYXRpb24qIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAg
ICByZXR1cm4gV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT04ocmV0KTsKKworICAgIHJl
dHVybiB3cmFwQ1NTU3R5bGVEZWNsYXJhdGlvbihvYmopOworfQorCitXZWJDb3JlOjpDU1NTdHls
ZURlY2xhcmF0aW9uKiBjb3JlKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHJlcXVlc3Qp
Cit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDU1NTdHlsZURl
Y2xhcmF0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogd3JhcENTU1N0eWxlRGVjbGFyYXRp
b24oV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFU
SU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OLCAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24sIHdl
YmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9DU1NfVEVYVCwKKyAgICBQUk9QX0xFTkdU
SCwKKyAgICBQUk9QX1BBUkVOVF9SVUxFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9j
c3Nfc3R5bGVfZGVjbGFyYXRpb25fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1Nf
U1RZTEVfREVDTEFSQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYt
Pn5XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3BhcmVudF9jbGFzcyktPmZpbmFs
aXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xh
cmF0aW9uX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNv
bnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUNT
U1N0eWxlRGVjbGFyYXRpb24qIHNlbGYgPSBXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElP
TihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NT
U19URVhUOgorICAgICAgICB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9zZXRfY3Nz
X3RleHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
KiBzZWxmID0gV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT04ob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DU1NfVEVYVDoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRp
b25fZ2V0X2Nzc190ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xF
TkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fY3NzX3N0
eWxlX2RlY2xhcmF0aW9uX2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUEFSRU5UX1JVTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3BhcmVudF9ydWxlKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNs
YXJhdGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAg
ICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2Nzc19zdHlsZV9k
ZWNsYXJhdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJB
VElPTl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2Jq
ZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYt
PmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9jbGFzc19pbml0KFdl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0
aW9uX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3Bl
cnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NTU19URVhULAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImNzcy10ZXh0IiwKKyAgICAgICAgICAgICJDU1NTdHlsZURl
Y2xhcmF0aW9uOmNzcy10ZXh0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBDU1NT
dHlsZURlY2xhcmF0aW9uOmNzcy10ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAg
ICAgICAiQ1NTU3R5bGVEZWNsYXJhdGlvbjpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWxvbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19N
QVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1BBUkVOVF9SVUxFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgInBhcmVudC1ydWxlIiwKKyAgICAgICAgICAgICJDU1NTdHlsZURlY2xhcmF0
aW9uOnBhcmVudC1ydWxlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQ1NTUnVs
ZSogQ1NTU3R5bGVEZWNsYXJhdGlvbjpwYXJlbnQtcnVsZSIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfQ1NTX1JVTEUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9pbml0
KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0NTU19TVFlMRV9E
RUNMQVJBVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERP
TUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Nz
c19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWUoV2ViS2l0RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFSQVRJT04oc2VsZiksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHByb3BlcnR5TmFtZSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTU3R5
bGVEZWNsYXJhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocHJvcGVydHlO
YW1lKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRQ
cm9wZXJ0eVZhbHVlKGNvbnZlcnRlZFByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9yZW1vdmVfcHJv
cGVydHkoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHBy
b3BlcnR5TmFtZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
Q1NTX1NUWUxFX0RFQ0xBUkFUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChwcm9wZXJ0eU5hbWUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAh
KmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFByb3BlcnR5TmFtZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwcm9wZXJ0eU5hbWUpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPnJlbW92ZVByb3BlcnR5KGNvbnZlcnRlZFByb3BlcnR5TmFtZSwgZWMpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRp
b25fZ2V0X3Byb3BlcnR5X3ByaW9yaXR5KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNl
bGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChwcm9wZXJ0eU5hbWUsIDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24q
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHJv
cGVydHlOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHByb3BlcnR5TmFtZSk7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0UHJvcGVydHlQcmlvcml0
eShjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3NldF9wcm9wZXJ0eShXZWJLaXRET01D
U1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lLCBjb25z
dCBnY2hhciogdmFsdWUsIGNvbnN0IGdjaGFyKiBwcmlvcml0eSwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFSQVRJT04oc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwocHJvcGVydHlOYW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHByaW9yaXR5KTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9u
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFBy
b3BlcnR5TmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwcm9wZXJ0eU5hbWUpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRQcmlvcml0eSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChwcmlvcml0eSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRl
bS0+c2V0UHJvcGVydHkoY29udmVydGVkUHJvcGVydHlOYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgY29u
dmVydGVkUHJpb3JpdHksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Nzc19zdHls
ZV9kZWNsYXJhdGlvbl9pdGVtKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGd1
bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFS
QVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfc2hvcnRoYW5k
KFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0
eU5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9O
KHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwcm9wZXJ0eU5hbWUsIDApOwor
ICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHJvcGVydHlOYW1lID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHByb3BlcnR5TmFtZSk7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29udmVydGVkUHJvcGVydHlOYW1l
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9jc3Nfc3R5
bGVfZGVjbGFyYXRpb25faXNfcHJvcGVydHlfaW1wbGljaXQoV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFSQVRJT04oc2VsZiksIEZBTFNFKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChwcm9wZXJ0eU5hbWUsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpD
U1NTdHlsZURlY2xhcmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFByb3BlcnR5TmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwcm9w
ZXJ0eU5hbWUpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmlzUHJvcGVydHlJbXBsaWNp
dChjb252ZXJ0ZWRQcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfY3NzX3RleHQoV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19D
U1NfU1RZTEVfREVDTEFSQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNTU1N0eWxlRGVj
bGFyYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y3NzVGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3NldF9jc3NfdGV4
dChXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xB
UkFUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZURlY2xh
cmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRDc3NUZXh0KGNvbnZlcnRlZFZhbHVl
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorfQorCitndWxvbmcgd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25f
Z2V0X2xlbmd0aChXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2ViS2l0RE9NQ1NTUnVsZSogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25f
Z2V0X3BhcmVudF9ydWxlKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+cGFyZW50UnVsZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uODM1NTY3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbi5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBi
ZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01DU1NTdHls
ZURlY2xhcmF0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbl9oCisK
KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01P
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9ERUNMQVJBVElP
TiAgICAgICAgICAgICh3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElPTihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ1NT
X1NUWUxFX0RFQ0xBUkFUSU9OLCBXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9DU1NfU1RZTEVfREVDTEFSQVRJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9E
RUNMQVJBVElPTiwgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkNsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTihvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX0RFQ0xB
UkFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfREVDTEFSQVRJT05fQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0NTU19TVFlMRV9ERUNMQVJBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1NUWUxF
X0RFQ0xBUkFUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9DU1NfU1RZTEVfREVDTEFSQVRJT04sIFdlYktpdERPTUNT
U1N0eWxlRGVjbGFyYXRpb25DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01P
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorICogQHByb3BlcnR5TmFtZTogQSAj
Z2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3ZhbHVlKFdlYktp
dERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3JlbW92ZV9wcm9w
ZXJ0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisgKiBAcHJv
cGVydHlOYW1lOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2Rl
Y2xhcmF0aW9uX3JlbW92ZV9wcm9wZXJ0eShXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBz
ZWxmLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X3Byb3BlcnR5X3ByaW9yaXR5
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqIEBwcm9wZXJ0
eU5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9w
cmlvcml0eShXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciog
cHJvcGVydHlOYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlv
bl9zZXRfcHJvcGVydHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bgorICogQHByb3BlcnR5TmFtZTogQSAjZ2NoYXIKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBw
cmlvcml0eTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9zZXRfcHJvcGVydHkoV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFt
ZSwgY29uc3QgZ2NoYXIqIHZhbHVlLCBjb25zdCBnY2hhciogcHJpb3JpdHksIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9pdGVtOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqIEBpbmRleDogQSAj
Z3Vsb25nCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2l0ZW0oV2ViS2l0RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nz
c19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfc2hvcnRoYW5kOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqIEBwcm9wZXJ0eU5hbWU6IEEgI2djaGFy
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9zaG9ydGhhbmQoV2ViS2l0
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25faXNfcHJvcGVydHlf
aW1wbGljaXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorICog
QHByb3BlcnR5TmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9p
c19wcm9wZXJ0eV9pbXBsaWNpdChXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmLCBj
b25zdCBnY2hhciogcHJvcGVydHlOYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHls
ZV9kZWNsYXJhdGlvbl9nZXRfY3NzX3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfY3NzX3RleHQoV2Vi
S2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9j
c3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X2Nzc190ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUNTU1N0eWxlRGVjbGFyYXRpb24KKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNs
YXJhdGlvbl9zZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01DU1NTdHlsZURlY2xhcmF0aW9uCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8KK1dF
QktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfbGVu
Z3RoKFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wYXJlbnRfcnVsZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01DU1NSdWxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NT
UnVsZSoKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wYXJlbnRfcnVsZShX
ZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFj
dGl2ZURPTU9iamVjdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUu
aApzaW1pbGFyaXR5IGluZGV4IDY4JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0
ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlLmgKaW5kZXggMTBh
NTFkZC4uYzgwOGQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Qcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAog
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9N
VGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0QWN0aXZl
RE9NT2JqZWN0UHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb25Q
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGVfaAog
Ci0jaW5jbHVkZSAiVGVzdEFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NTdHls
ZURlY2xhcmF0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNTU1N0eWxlRGVj
bGFyYXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0KiB3cmFwVGVzdEFjdGl2ZURPTU9iamVjdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2Jq
ZWN0Kik7Ci1XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBraXQoV2ViQ29yZTo6VGVzdEFj
dGl2ZURPTU9iamVjdCopOwotV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogY29yZShXZWJL
aXRET01UZXN0QWN0aXZlRE9NT2JqZWN0Kik7CitXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9u
KiB3cmFwQ1NTU3R5bGVEZWNsYXJhdGlvbihXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uKik7
CitXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uKiBraXQoV2ViQ29yZTo6Q1NTU3R5bGVEZWNs
YXJhdGlvbiopOworV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbiogY29yZShXZWJLaXRET01D
U1NTdHlsZURlY2xhcmF0aW9uKik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8q
IFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNT
U1N0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZVNoZWV0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zNTdhYzE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NT
dHlsZVNoZWV0LmNwcApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1N0eWxl
U2hlZXQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01DU1NSdWxlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01DU1NSdWxlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUNTU1N0eWxl
U2hlZXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBraXQoV2Vi
Q29yZTo6Q1NTU3R5bGVTaGVldCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0NTU19T
VFlMRV9TSEVFVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3R5bGVTaGVldCo+KG9iaikpKTsK
K30KKworV2ViQ29yZTo6Q1NTU3R5bGVTaGVldCogY29yZShXZWJLaXRET01DU1NTdHlsZVNoZWV0
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
Q1NTU3R5bGVTaGVldCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTUNTU1N0eWxlU2hlZXQqIHdyYXBDU1NTdHlsZVNoZWV0KFdlYkNv
cmU6OkNTU1N0eWxlU2hlZXQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX0NTU19TVFlMRV9TSEVFVChnX29iamVjdF9uZXcoV0VC
S0lUX0RPTV9UWVBFX0NTU19TVFlMRV9TSEVFVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01DU1NTdHlsZVNoZWV0LCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldCwgV0VCS0lU
X0RPTV9UWVBFX1NUWUxFX1NIRUVUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9P
V05FUl9SVUxFLAorICAgIFBST1BfQ1NTX1JVTEVTLAorICAgIFBST1BfUlVMRVMsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmID0gV0VCS0lUX0RPTV9D
U1NfU1RZTEVfU0hFRVQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9PV05FUl9SVUxFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9vd25lcl9ydWxlKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NTU19SVUxFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfY3NzX3J1bGVzKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JVTEVTOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9ydWxl
cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHls
ZV9zaGVldF9jbGFzc19pbml0KFdlYktpdERPTUNTU1N0eWxlU2hlZXRDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fY3NzX3N0eWxlX3NoZWV0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PV05F
Ul9SVUxFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm93bmVy
LXJ1bGUiLAorICAgICAgICAgICAgIkNTU1N0eWxlU2hlZXQ6b3duZXItcnVsZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTUNTU1J1bGUqIENTU1N0eWxlU2hlZXQ6b3duZXItcnVs
ZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEUsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DU1NfUlVMRVMsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY3NzLXJ1bGVzIiwKKyAg
ICAgICAgICAgICJDU1NTdHlsZVNoZWV0OmNzcy1ydWxlcyIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTUNTU1J1bGVMaXN0KiBDU1NTdHlsZVNoZWV0OmNzcy1ydWxlcyIsCisgICAg
ICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1JVTEVfTElTVCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JVTEVTLAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInJ1bGVzIiwKKyAgICAgICAgICAgICJD
U1NTdHlsZVNoZWV0OnJ1bGVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQ1NT
UnVsZUxpc3QqIENTU1N0eWxlU2hlZXQ6cnVsZXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX0NTU19SVUxFX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9pbml0KFdlYktp
dERPTUNTU1N0eWxlU2hlZXQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3Qp
OworfQorCitndWxvbmcgd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfaW5zZXJ0X3J1bGUoV2Vi
S2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZiwgY29uc3QgZ2NoYXIqIHJ1bGUsIGd1bG9uZyBpbmRl
eCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxF
X1NIRUVUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChydWxlLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29y
ZTo6Q1NTU3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRSdWxlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHJ1bGUpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5p
bnNlcnRSdWxlKGNvbnZlcnRlZFJ1bGUsIGluZGV4LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZGVsZXRlX3J1bGUoV2Vi
S2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZiwgZ3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9TSEVFVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBpdGVtLT5kZWxldGVSdWxlKGluZGV4LCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitn
bG9uZyB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9hZGRfcnVsZShXZWJLaXRET01DU1NTdHls
ZVNoZWV0KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3IsIGNvbnN0IGdjaGFyKiBzdHlsZSwg
Z3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19DU1NfU1RZTEVfU0hFRVQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGVjdG9yLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHlsZSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkNT
U1N0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkU2VsZWN0b3IgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3IpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0eWxlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0eWxl
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnbG9uZyByZXN1bHQg
PSBpdGVtLT5hZGRSdWxlKGNvbnZlcnRlZFNlbGVjdG9yLCBjb252ZXJ0ZWRTdHlsZSwgaW5kZXgs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2Nzc19z
dHlsZV9zaGVldF9yZW1vdmVfcnVsZShXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmLCBndWxv
bmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NU
WUxFX1NIRUVUKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
KTsKKyAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnJlbW92ZVJ1
bGUoaW5kZXgsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUNTU1J1bGUqIHdlYmtpdF9kb21fY3Nz
X3N0eWxlX3NoZWV0X2dldF9vd25lcl9ydWxlKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+b3duZXJSdWxlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworV2ViS2l0RE9NQ1NTUnVsZUxpc3QqIHdlYmtpdF9kb21fY3NzX3N0eWxl
X3NoZWV0X2dldF9jc3NfcnVsZXMoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfU0hFRVQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkNTU1N0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkNTU1J1bGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+Y3NzUnVsZXMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01DU1NSdWxlTGlzdCogd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hl
ZXRfZ2V0X3J1bGVzKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfQ1NTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpD
U1NTdHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpDU1NSdWxlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJ1bGVz
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01DU1NTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlU2hlZXQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM5OGEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DU1NTdHlsZVNoZWV0LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93
ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdERPTUNTU1N0eWxlU2hlZXRfaAorI2RlZmluZSBXZWJLaXRET01DU1NTdHlsZVNoZWV0
X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVN0eWxlU2hlZXQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9T
SEVFVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0NTU19TVFlMRV9TSEVFVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX1NI
RUVULCBXZWJLaXRET01DU1NTdHlsZVNoZWV0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfU1RZ
TEVfU0hFRVRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0NTU19TVFlMRV9TSEVFVCwgV2ViS2l0RE9NQ1NTU3R5bGVTaGVl
dENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NTU19TVFlMRV9TSEVFVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ1NT
X1NUWUxFX1NIRUVUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVfU0hFRVRfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0NTU19TVFlMRV9TSEVFVCkpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVU
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9DU1NfU1RZTEVfU0hFRVQsIFdlYktpdERPTUNTU1N0eWxlU2hlZXRDbGFzcykp
CisKK3N0cnVjdCBfV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCB7CisgICAgV2ViS2l0RE9NU3R5bGVT
aGVldCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxlU2hl
ZXRDbGFzcyB7CisgICAgV2ViS2l0RE9NU3R5bGVTaGVldENsYXNzIHBhcmVudF9jbGFzczsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2luc2VydF9ydWxl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlU2hlZXQKKyAqIEBydWxlOiBBICNnY2hh
cgorICogQGluZGV4OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVy
bnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9jc3Nfc3R5
bGVfc2hlZXRfaW5zZXJ0X3J1bGUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHJ1bGUsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2RlbGV0ZV9ydWxlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUNTU1N0eWxlU2hlZXQKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRf
ZGVsZXRlX3J1bGUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZiwgZ3Vsb25nIGluZGV4LCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfYWRk
X3J1bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVTaGVldAorICogQHNlbGVjdG9y
OiBBICNnY2hhcgorICogQHN0eWxlOiBBICNnY2hhcgorICogQGluZGV4OiBBICNndWxvbmcKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2FkZF9ydWxlKFdlYktpdERPTUNT
U1N0eWxlU2hlZXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvciwgY29uc3QgZ2NoYXIqIHN0
eWxlLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2Nzc19zdHlsZV9zaGVldF9yZW1vdmVfcnVsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NT
dHlsZVNoZWV0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X3JlbW92ZV9y
dWxlKFdlYktpdERPTUNTU1N0eWxlU2hlZXQqIHNlbGYsIGd1bG9uZyBpbmRleCwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9vd25lcl9y
dWxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNTU1N0eWxlU2hlZXQKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUNTU1J1bGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01DU1NSdWxlKgord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X293bmVyX3J1
bGUoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9j
c3Nfc3R5bGVfc2hlZXRfZ2V0X2Nzc19ydWxlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NT
dHlsZVNoZWV0CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01D
U1NSdWxlTGlzdAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNTU1J1bGVMaXN0Kgord2Via2l0
X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X2Nzc19ydWxlcyhXZWJLaXRET01DU1NTdHlsZVNoZWV0
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVldF9nZXRfcnVsZXM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ1NTU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NTUnVsZUxpc3QKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01DU1NSdWxlTGlzdCoKK3dlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2dldF9ydWxl
cyhXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdlYktpdERPTUNTU1N0eWxlU2hlZXRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NSW50ZXJmYWNlTmFtZVBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDcx
JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01JbnRlcmZhY2VOYW1lUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxl
U2hlZXRQcml2YXRlLmgKaW5kZXggMzQxNTE1ZC4uMmMyMjljMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NSW50ZXJmYWNl
TmFtZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmgKQEAgLTE4LDE2
ICsxOCwxNiBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgV2ViS2l0RE9NSW50ZXJmYWNlTmFtZVByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01JbnRl
cmZhY2VOYW1lUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTUNTU1N0eWxlU2hlZXRQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NQ1NTU3R5bGVTaGVldFByaXZhdGVfaAogCi0jaW5jbHVkZSAi
SW50ZXJmYWNlTmFtZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01JbnRlcmZhY2VO
YW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NTdHlsZVNoZWV0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUNTU1N0eWxlU2hlZXQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1X
ZWJLaXRET01JbnRlcmZhY2VOYW1lKiB3cmFwSW50ZXJmYWNlTmFtZShXZWJDb3JlOjpJbnRlcmZh
Y2VOYW1lKik7Ci1XZWJLaXRET01JbnRlcmZhY2VOYW1lKiBraXQoV2ViQ29yZTo6SW50ZXJmYWNl
TmFtZSopOwotV2ViQ29yZTo6SW50ZXJmYWNlTmFtZSogY29yZShXZWJLaXRET01JbnRlcmZhY2VO
YW1lKik7CitXZWJLaXRET01DU1NTdHlsZVNoZWV0KiB3cmFwQ1NTU3R5bGVTaGVldChXZWJDb3Jl
OjpDU1NTdHlsZVNoZWV0Kik7CitXZWJLaXRET01DU1NTdHlsZVNoZWV0KiBraXQoV2ViQ29yZTo6
Q1NTU3R5bGVTaGVldCopOworV2ViQ29yZTo6Q1NTU3R5bGVTaGVldCogY29yZShXZWJLaXRET01D
U1NTdHlsZVNoZWV0Kik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktp
dERPTUludGVyZmFjZU5hbWVQcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01DU1NTdHls
ZVNoZWV0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Q1NTVmFsdWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTY1MzYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmNwcApAQCAtMCwwICsxLDE5OCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUNTU1ZhbHVlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTVmFsdWVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0dFVF9QUklWQVRFKG9iaikg
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0NTU19WQUxV
RSwgV2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
Q1NTVmFsdWVQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTVmFsdWU+IGNvcmVPYmpl
Y3Q7Cit9IFdlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTUNTU1ZhbHVlKiBraXQoV2ViQ29yZTo6Q1NTVmFsdWUqIG9iaikKK3sKKyAgICBp
ZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9N
T2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9DU1NfVkFM
VUUocmV0KTsKKworICAgIHJldHVybiB3cmFwQ1NTVmFsdWUob2JqKTsKK30KKworV2ViQ29yZTo6
Q1NTVmFsdWUqIGNvcmUoV2ViS2l0RE9NQ1NTVmFsdWUqIHJlcXVlc3QpCit7CisgICAgcmV0dXJu
IHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDU1NWYWx1ZSo+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUNTU1ZhbHVlKiB3
cmFwQ1NTVmFsdWUoV2ViQ29yZTo6Q1NTVmFsdWUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0NTU19WQUxVRShnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX0NTU19WQUxVRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
bnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRET01DU1NWYWx1ZSwgd2Via2l0X2RvbV9jc3NfdmFsdWUsIFdFQktJVF9ET01fVFlQRV9P
QkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NTU19URVhULAorICAgIFBS
T1BfQ1NTX1ZBTFVFX1RZUEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc192YWx1
ZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NQ1NTVmFsdWVQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9DU1NfVkFMVUVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKwor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgp
KTsKKworICAgIHByaXYtPn5XZWJLaXRET01DU1NWYWx1ZVByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX2Nzc192YWx1ZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Nzc192YWx1ZV9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01DU1NWYWx1ZSogc2VsZiA9IFdFQktJ
VF9ET01fQ1NTX1ZBTFVFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfQ1NTX1RFWFQ6CisgICAgICAgIHdlYmtpdF9kb21fY3NzX3ZhbHVlX3NldF9j
c3NfdGV4dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUNTU1ZhbHVlKiBzZWxmID0gV0VCS0lUX0RPTV9D
U1NfVkFMVUUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2Ug
UFJPUF9DU1NfVEVYVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9jc3NfdmFsdWVfZ2V0X2Nzc190ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0NTU19WQUxVRV9UWVBFOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVl
LCB3ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfY3NzX3ZhbHVlX3R5cGUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fY3NzX3ZhbHVlX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fY3NzX3ZhbHVlX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisKKyAgICBXZWJLaXRET01DU1NWYWx1ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0NT
U19WQUxVRV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpDU1NWYWx1ZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9jc3NfdmFsdWVfY2xhc3NfaW5pdChXZWJLaXRET01DU1NWYWx1ZUNsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01DU1NWYWx1ZVByaXZhdGUpKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9jc3NfdmFsdWVfY29uc3RydWN0b3I7
CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fY3NzX3ZhbHVlX2ZpbmFs
aXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9jc3NfdmFs
dWVfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9jc3NfdmFsdWVfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NTU19URVhU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNzcy10ZXh0IiwK
KyAgICAgICAgICAgICJDU1NWYWx1ZTpjc3MtdGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogQ1NTVmFsdWU6Y3NzLXRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1NTX1ZBTFVF
X1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgImNzcy12YWx1
ZS10eXBlIiwKKyAgICAgICAgICAgICJDU1NWYWx1ZTpjc3MtdmFsdWUtdHlwZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1c2hvcnQgQ1NTVmFsdWU6Y3NzLXZhbHVlLXR5cGUiLAorICAgICAg
ICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jc3NfdmFsdWVfaW5pdChXZWJLaXRE
T01DU1NWYWx1ZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01DU1NWYWx1ZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX0NTU19WQUxVRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcg
KHByaXYpIFdlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9jc3NfdmFsdWVfZ2V0X2Nzc190ZXh0KFdlYktpdERPTUNTU1ZhbHVlKiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0NTU19WQUxVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
Q1NTVmFsdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y3NzVGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21fY3NzX3ZhbHVlX3NldF9jc3NfdGV4dChXZWJLaXRET01D
U1NWYWx1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0NTU19WQUxVRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAg
V2ViQ29yZTo6Q1NTVmFsdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldENzc1RleHQoY29u
dmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV9jc3NfdmFsdWVf
Z2V0X2Nzc192YWx1ZV90eXBlKFdlYktpdERPTUNTU1ZhbHVlKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0NTU19WQUxVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q1NTVmFs
dWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVt
LT5jc3NWYWx1ZVR5cGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNTU1ZhbHVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWQxYzJiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ1NTVmFsdWUuaApA
QCAtMCwwICsxLDEwMiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJ
VCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NQ1NTVmFsdWVfaAorI2RlZmlu
ZSBXZWJLaXRET01DU1NWYWx1ZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9U
WVBFX0NTU19WQUxVRSAgICAgICAgICAgICh3ZWJraXRfZG9tX2Nzc192YWx1ZV9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0NTU19WQUxVRShvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ1NTX1ZBTFVFLCBXZWJL
aXRET01DU1NWYWx1ZSkpCisjZGVmaW5lIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9D
U1NfVkFMVUUsIFdlYktpdERPTUNTU1ZhbHVlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
Q1NTX1ZBTFVFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9DU1NfVkFMVUUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0NTU19W
QUxVRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfQ1NTX1ZBTFVFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfVkFMVUVfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX0NTU19WQUxVRSwgV2ViS2l0RE9NQ1NTVmFsdWVDbGFzcykpCisKKy8qKgorICogV0VC
S0lUX0RPTV9DU1NfVkFMVUVfQ1NTX0lOSEVSSVQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9D
U1NfVkFMVUVfQ1NTX0lOSEVSSVQgMAorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NT
U19QUklNSVRJVkVfVkFMVUU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NT
X1BSSU1JVElWRV9WQUxVRSAxCisKKy8qKgorICogV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX1ZB
TFVFX0xJU1Q6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX1ZBTFVFX0xJ
U1QgMgorCisvKioKKyAqIFdFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19DVVNUT006CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX0NVU1RPTSAzCisKK3N0cnVjdCBfV2ViS2l0
RE9NQ1NTVmFsdWUgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTUNTU1ZhbHVlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fY3Nz
X3ZhbHVlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fY3NzX3ZhbHVlX2dl
dF9jc3NfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NWYWx1ZQorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Nzc192YWx1
ZV9nZXRfY3NzX3RleHQoV2ViS2l0RE9NQ1NTVmFsdWUqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fY3NzX3ZhbHVlX3NldF9jc3NfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01DU1NW
YWx1ZQorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fY3NzX3ZhbHVlX3NldF9jc3NfdGV4dChXZWJLaXRE
T01DU1NWYWx1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9jc3NfdmFsdWVfZ2V0X2Nzc192YWx1ZV90eXBlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUNTU1ZhbHVlCisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorKiov
CitXRUJLSVRfQVBJIGd1c2hvcnQKK3dlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9jc3NfdmFsdWVf
dHlwZShXZWJLaXRET01DU1NWYWx1ZSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXZWJLaXRET01DU1NWYWx1ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNTU1ZhbHVlUHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01DU1NWYWx1ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yNzIyOTRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DU1NWYWx1ZVByaXZhdGUu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUNTU1ZhbHVlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUNTU1ZhbHVl
UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU1ZhbHVlLmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUNTU1ZhbHVlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NQ1NTVmFsdWUqIHdyYXBDU1NWYWx1ZShXZWJDb3JlOjpDU1NWYWx1ZSopOworV2ViS2l0RE9N
Q1NTVmFsdWUqIGtpdChXZWJDb3JlOjpDU1NWYWx1ZSopOworV2ViQ29yZTo6Q1NTVmFsdWUqIGNv
cmUoV2ViS2l0RE9NQ1NTVmFsdWUqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
LyogV2ViS2l0RE9NQ1NTVmFsdWVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ2hhcmFj
dGVyRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjhiMmEzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNoYXJhY3Rl
ckRhdGEuY3BwCkBAIC0wLDAgKzEsMzI1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
Q2hhcmFjdGVyRGF0YVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FbGVtZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTUNoYXJhY3RlckRhdGFVbnN0YWJsZS5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBraXQoV2ViQ29yZTo6Q2hhcmFjdGVy
RGF0YSogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBKGtpdChz
dGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpDaGFyYWN0
ZXJEYXRhKiBjb3JlKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NQ2hh
cmFjdGVyRGF0YSogd3JhcENoYXJhY3RlckRhdGEoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fQ0hBUkFDVEVSX0RBVEEoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9DSEFSQUNURVJf
REFUQSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fY2hhcmFjdGVyX2Rh
dGFfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9N
RXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29y
ZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmlu
ZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRl
c2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAg
ICBXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Q2hhcmFjdGVyRGF0YSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRh
X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25z
dCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJl
KQoreworICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFj
ZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2Rpc3BhdGNoX2V2
ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2NoYXJhY3Rl
cl9kYXRhX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9
CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUNoYXJhY3RlckRhdGEsIHdlYmtp
dF9kb21fY2hhcmFjdGVyX2RhdGEsIFdFQktJVF9ET01fVFlQRV9OT0RFLCBHX0lNUExFTUVOVF9J
TlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0RBVEEsCisgICAg
UFJPUF9MRU5HVEgsCisgICAgUFJPUF9QUkVWSU9VU19FTEVNRU5UX1NJQkxJTkcsCisgICAgUFJP
UF9ORVhUX0VMRU1FTlRfU0lCTElORywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY2hh
cmFjdGVyX2RhdGFfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NQ2hhcmFjdGVyRGF0YSogc2VsZiA9IFdFQktJVF9ET01fQ0hBUkFDVEVSX0RBVEEob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9EQVRBOgorICAg
ICAgICB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3NldF9kYXRhKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmID0gV0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQShv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0RBVEE6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fY2hhcmFjdGVy
X2RhdGFfZ2V0X2RhdGEoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEVO
R1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9jaGFyYWN0
ZXJfZGF0YV9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1BSRVZJT1VTX0VMRU1FTlRfU0lCTElORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9wcmV2aW91c19lbGVtZW50X3NpYmxp
bmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkVYVF9FTEVNRU5UX1NJ
QkxJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9jaGFy
YWN0ZXJfZGF0YV9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmcoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9jbGFzc19pbml0KFdlYktp
dERPTUNoYXJhY3RlckRhdGFDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9jaGFy
YWN0ZXJfZGF0YV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREFUQSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkYXRhIiwKKyAgICAgICAgICAg
ICJDaGFyYWN0ZXJEYXRhOmRhdGEiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIENo
YXJhY3RlckRhdGE6ZGF0YSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdf
cGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkNo
YXJhY3RlckRhdGE6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIENoYXJh
Y3RlckRhdGE6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QUkVWSU9V
U19FTEVNRU5UX1NJQkxJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAicHJldmlvdXMtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXJE
YXRhOnByZXZpb3VzLWVsZW1lbnQtc2libGluZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTUVsZW1lbnQqIENoYXJhY3RlckRhdGE6cHJldmlvdXMtZWxlbWVudC1zaWJsaW5nIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkVYVF9FTEVNRU5UX1NJQkxJ
TkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibmV4dC1lbGVt
ZW50LXNpYmxpbmciLAorICAgICAgICAgICAgIkNoYXJhY3RlckRhdGE6bmV4dC1lbGVtZW50LXNp
YmxpbmciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBDaGFyYWN0
ZXJEYXRhOm5leHQtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9pbml0KFdlYktpdERPTUNoYXJh
Y3RlckRhdGEqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9zdWJzdHJpbmdfZGF0YShXZWJLaXRET01D
aGFyYWN0ZXJEYXRhKiBzZWxmLCBndWxvbmcgb2Zmc2V0LCBndWxvbmcgbGVuZ3RoLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwor
ICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3Vic3RyaW5nRGF0YShvZmZzZXQsIGxlbmd0aCwgZWMp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fY2hhcmFjdGVyX2Rh
dGFfYXBwZW5kX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZiwgY29uc3QgZ2NoYXIq
IGRhdGEsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVS
X0RBVEEoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGF0YSk7CisgICAgVU5VU0VEX1BB
UkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZERhdGEgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoZGF0YSk7CisgICAgaXRlbS0+YXBwZW5kRGF0YShjb252ZXJ0ZWREYXRhKTsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2luc2VydF9kYXRhKFdlYktpdERPTUNo
YXJhY3RlckRhdGEqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVy
cm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRGF0YSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChkYXRhKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpdGVtLT5pbnNlcnREYXRhKG9mZnNldCwgY29udmVydGVkRGF0YSwgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30K
Kwordm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2RlbGV0ZV9kYXRhKFdlYktpdERPTUNo
YXJhY3RlckRhdGEqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIGd1bG9uZyBsZW5ndGgsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RBVEEoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkNo
YXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+ZGVsZXRlRGF0YShvZmZzZXQsIGxlbmd0aCwg
ZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3JlcGxhY2VfZGF0
YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBndWxvbmcgb2Zmc2V0LCBndWxvbmcgbGVu
Z3RoLCBjb25zdCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19DSEFSQUNURVJfREFUQShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChkYXRh
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpDaGFyYWN0ZXJEYXRhKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZERhdGEgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+cmVwbGFjZURhdGEob2Zmc2V0
LCBsZW5ndGgsIGNvbnZlcnRlZERhdGEsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9j
aGFyYWN0ZXJfZGF0YV9yZW1vdmUoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZiwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5yZW1vdmUoZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2No
YXIqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5k
YXRhKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9jaGFyYWN0
ZXJfZGF0YV9zZXRfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFD
VEVSX0RBVEEoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0RGF0YShjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9sZW5ndGgoV2ViS2l0
RE9NQ2hhcmFjdGVyRGF0YSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19DSEFS
QUNURVJfREFUQShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9j
aGFyYWN0ZXJfZGF0YV9nZXRfcHJldmlvdXNfZWxlbWVudF9zaWJsaW5nKFdlYktpdERPTUNoYXJh
Y3RlckRhdGEqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQ0hBUkFDVEVSX0RB
VEEoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVu
dCogd2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmcoV2Vi
S2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19D
SEFSQUNURVJfREFUQShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5leHRFbGVtZW50U2libGluZygpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2MzdlZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NQ2hhcmFjdGVyRGF0YS5oCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9t
Lmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRE
T01DaGFyYWN0ZXJEYXRhX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YV9oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2Rl
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9DSEFSQUNURVJfREFUQSAgICAgICAgICAg
ICh3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fQ0hBUkFDVEVSX0RBVEEob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBLCBXZWJLaXRET01DaGFy
YWN0ZXJEYXRhKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DSEFSQUNURVJfREFUQV9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
Q0hBUkFDVEVSX0RBVEEsIFdlYktpdERPTUNoYXJhY3RlckRhdGFDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19DSEFSQUNURVJfREFUQShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9DSEFSQUNURVJfREFUQSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fQ0hBUkFDVEVSX0RBVEFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRB
LCBXZWJLaXRET01DaGFyYWN0ZXJEYXRhQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUNoYXJh
Y3RlckRhdGEgeworICAgIFdlYktpdERPTU5vZGUgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01DaGFyYWN0ZXJEYXRhQ2xhc3MgeworICAgIFdlYktpdERPTU5vZGVDbGFz
cyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2NoYXJh
Y3Rlcl9kYXRhX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVy
X2RhdGFfc3Vic3RyaW5nX2RhdGE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YQorICogQG9mZnNldDogQSAjZ3Vsb25nCisgKiBAbGVuZ3RoOiBBICNndWxvbmcKKyAqIEBlcnJv
cjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3N1YnN0cmluZ19kYXRhKFdlYktpdERPTUNo
YXJhY3RlckRhdGEqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIGd1bG9uZyBsZW5ndGgsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2FwcGVuZF9kYXRh
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAqIEBkYXRhOiBBICNnY2hh
cgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fY2hhcmFjdGVyX2RhdGFfYXBwZW5kX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2Vs
ZiwgY29uc3QgZ2NoYXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2NoYXJhY3Rlcl9kYXRhX2luc2VydF9kYXRhOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNo
YXJhY3RlckRhdGEKKyAqIEBvZmZzZXQ6IEEgI2d1bG9uZworICogQGRhdGE6IEEgI2djaGFyCisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9j
aGFyYWN0ZXJfZGF0YV9pbnNlcnRfZGF0YShXZWJLaXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmLCBn
dWxvbmcgb2Zmc2V0LCBjb25zdCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZGVsZXRlX2RhdGE6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NQ2hhcmFjdGVyRGF0YQorICogQG9mZnNldDogQSAjZ3Vsb25nCisgKiBAbGVuZ3Ro
OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2RlbGV0ZV9kYXRhKFdlYktpdERPTUNoYXJhY3Rl
ckRhdGEqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIGd1bG9uZyBsZW5ndGgsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3JlcGxhY2VfZGF0YToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01DaGFyYWN0ZXJEYXRhCisgKiBAb2Zmc2V0OiBBICNndWxvbmcK
KyAqIEBsZW5ndGg6IEEgI2d1bG9uZworICogQGRhdGE6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0
YV9yZXBsYWNlX2RhdGEoV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZiwgZ3Vsb25nIG9mZnNl
dCwgZ3Vsb25nIGxlbmd0aCwgY29uc3QgZ2NoYXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9kYXRhOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfZGF0YShXZWJL
aXRET01DaGFyYWN0ZXJEYXRhKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJhY3Rl
cl9kYXRhX3NldF9kYXRhOgorICogQHNlbGY6IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX3NldF9kYXRhKFdlYktpdERPTUNoYXJh
Y3RlckRhdGEqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01DaGFyYWN0ZXJEYXRhCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8K
K1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2NoYXJhY3Rlcl9kYXRhX2dldF9sZW5ndGgo
V2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXZWJLaXRET01DaGFyYWN0ZXJEYXRhX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUNoYXJhY3RlckRhdGFQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA3MSUK
cmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEV4Y2VwdGlvblByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJE
YXRhUHJpdmF0ZS5oCmluZGV4IDNiOGIzYzAuLjFmM2QzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFeGNlcHRp
b25Qcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhUHJpdmF0ZS5oCkBAIC0xOCwxNiAr
MTgsMTYgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVm
IFdlYktpdERPTVRlc3RFeGNlcHRpb25Qcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEV4
Y2VwdGlvblByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01DaGFyYWN0ZXJEYXRhUHJpdmF0ZV9o
CisjZGVmaW5lIFdlYktpdERPTUNoYXJhY3RlckRhdGFQcml2YXRlX2gKIAotI2luY2x1ZGUgIlRl
c3RFeGNlcHRpb24uaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdEV4Y2VwdGlv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hhcmFjdGVyRGF0YS5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2Vi
S2l0RE9NVGVzdEV4Y2VwdGlvbiogd3JhcFRlc3RFeGNlcHRpb24oV2ViQ29yZTo6VGVzdEV4Y2Vw
dGlvbiopOwotV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbioga2l0KFdlYkNvcmU6OlRlc3RFeGNlcHRp
b24qKTsKLVdlYkNvcmU6OlRlc3RFeGNlcHRpb24qIGNvcmUoV2ViS2l0RE9NVGVzdEV4Y2VwdGlv
biopOworV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSogd3JhcENoYXJhY3RlckRhdGEoV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YSopOworV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YSoga2l0KFdlYkNvcmU6OkNo
YXJhY3RlckRhdGEqKTsKK1dlYkNvcmU6OkNoYXJhY3RlckRhdGEqIGNvcmUoV2ViS2l0RE9NQ2hh
cmFjdGVyRGF0YSopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRE
T01UZXN0RXhjZXB0aW9uUHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YVByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DaGFyYWN0ZXJEYXRhVW5zdGFibGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ2hhcmFjdGVyRGF0YVVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOTZmMTczYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0
YVVuc3RhYmxlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01DaGFyYWN0ZXJEYXRhVW5zdGFibGVfaAorI2RlZmluZSBX
ZWJLaXRET01DaGFyYWN0ZXJEYXRhVW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0
YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9jaGFyYWN0ZXJf
ZGF0YV9yZW1vdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YQorICogQGVy
cm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfcmVtb3ZlKFdlYktpdERPTUNoYXJhY3Rl
ckRhdGEqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2NoYXJh
Y3Rlcl9kYXRhX2dldF9wcmV2aW91c19lbGVtZW50X3NpYmxpbmc6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NQ2hhcmFjdGVyRGF0YQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9nZXRfcHJl
dmlvdXNfZWxlbWVudF9zaWJsaW5nKFdlYktpdERPTUNoYXJhY3RlckRhdGEqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5n
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUNoYXJhY3RlckRhdGEKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fY2hh
cmFjdGVyX2RhdGFfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5nKFdlYktpdERPTUNoYXJhY3RlckRh
dGEqIHNlbGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01DaGFyYWN0ZXJEYXRhVW5zdGFibGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Db21tZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29tbWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ5YjgxOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NQ29tbWVudC5jcHAKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01D
b21tZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJL
aXRET01Db21tZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Db21tZW50
KiBraXQoV2ViQ29yZTo6Q29tbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0NP
TU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNv
cmU6OkNvbW1lbnQqIGNvcmUoV2ViS2l0RE9NQ29tbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNvbW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01Db21tZW50KiB3
cmFwQ29tbWVudChXZWJDb3JlOjpDb21tZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChj
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9DT01NRU5UKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfQ09NTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fY29tbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6Q29tbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNvbW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2NvbW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29y
ZTo6Q29tbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNvbW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9jb21tZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkNvbW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDb21tZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRh
cmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBp
ZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2NvbW1lbnRf
ZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21fY29tbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9s
aXN0ZW5lciA9IHdlYmtpdF9kb21fY29tbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUNvbW1lbnQsIHdlYmtpdF9kb21fY29t
bWVudCwgV0VCS0lUX0RPTV9UWVBFX0NIQVJBQ1RFUl9EQVRBLCBHX0lNUExFTUVOVF9JTlRFUkZB
Q0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fY29tbWVudF9jbGFzc19pbml0KFdlYktp
dERPTUNvbW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0Q2xhc3MpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2NvbW1lbnRfaW5pdChXZWJL
aXRET01Db21tZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Db21tZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNvbW1lbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2I1NjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Db21tZW50LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NQ29tbWVu
dF9oCisjZGVmaW5lIFdlYktpdERPTUNvbW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfQ09NTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2NvbW1l
bnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DT01NRU5UKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9DT01N
RU5ULCBXZWJLaXRET01Db21tZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9DT01NRU5UX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9DT01NRU5ULCBXZWJLaXRET01Db21tZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfQ09NTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfQ09NTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfQ09NTUVO
VF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfQ09NTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fQ09NTUVOVF9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
Q09NTUVOVCwgV2ViS2l0RE9NQ29tbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Db21t
ZW50IHsKKyAgICBXZWJLaXRET01DaGFyYWN0ZXJEYXRhIHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NQ29tbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01DaGFyYWN0ZXJE
YXRhQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rv
bV9jb21tZW50X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2Vi
S2l0RE9NQ29tbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUNvbW1lbnRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUNvbW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDMzYjg1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ29tbWVudFByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTUNvbW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NQ29tbWVudFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9Db21tZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUNvbW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01Db21tZW50KiB3
cmFwQ29tbWVudChXZWJDb3JlOjpDb21tZW50Kik7CitXZWJLaXRET01Db21tZW50KiBraXQoV2Vi
Q29yZTo6Q29tbWVudCopOworV2ViQ29yZTo6Q29tbWVudCogY29yZShXZWJLaXRET01Db21tZW50
Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUNvbW1lbnRQ
cml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3Qv
V2ViS2l0RE9NQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3VzdG9tLmNwcApzaW1pbGFyaXR5IGluZGV4IDk2
JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1
c3RvbS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3VzdG9tLmNwcAppbmRleCA2NjExZGYwLi4zMjUxNDMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b20uY3BwCkBAIC0xOSw5ICsxOSw5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NQ3VzdG9tLmgiCiAKLSNpbmNsdWRlICJE
T01Ub2tlbkxpc3QuaCIKLSNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKLSNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTVRva2Vu
TGlzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KICNpbmNsdWRlICJXZWJLaXRE
T01ET01XaW5kb3dQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIldlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01DdXN0b20uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uaApyZW5hbWUgdG8gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01DdXN0b20uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01DdXN0b21VbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01DdXN0b21VbnN0YWJsZS5oCnNpbWlsYXJp
dHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0
L1dlYktpdERPTUN1c3RvbVVuc3RhYmxlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBw
bGljYXRpb25DYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZh
NzQ1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKQEAg
LTAsMCArMSwyMTggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01BcHBs
aWNhdGlvbkNhY2hlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9E
T01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RPTV9BUFBMSUNBVElPTl9DQUNIRSwg
V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkRPTUFwcGxpY2F0aW9uQ2FjaGU+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTUFwcGxpY2F0
aW9uQ2FjaGVQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRE9NQXBw
bGljYXRpb25DYWNoZSoga2l0KFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqIG9iaikKK3sK
KyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9E
T01fQVBQTElDQVRJT05fQ0FDSEUocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NQXBwbGljYXRp
b25DYWNoZShvYmopOworfQorCitXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKiBjb3JlKFdl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVl
c3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRE9NQXBw
bGljYXRpb25DYWNoZSogd3JhcERPTUFwcGxpY2F0aW9uQ2FjaGUoV2ViQ29yZTo6RE9NQXBwbGlj
YXRpb25DYWNoZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFLCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfZGlzcGF0Y2hfZXZlbnQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3Jl
KGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNv
cmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRk
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb21f
YXBwbGljYXRpb25fY2FjaGVfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJn
ZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9k
b21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9hZGRfZXZl
bnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9k
b21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSwgd2Via2l0
X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGUsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1Q
TEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfU1RB
VFVTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTURPTUFwcGxpY2F0aW9u
Q2FjaGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEVfR0VU
X1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChw
cml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01ET01BcHBsaWNh
dGlvbkNhY2hlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX2Fw
cGxpY2F0aW9uX2NhY2hlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYgPSBX
RUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNIRShvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NUQVRVUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWludCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfZ2V0X3N0YXR1cyhz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fYXBw
bGljYXRpb25fY2FjaGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Cit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21f
YXBwbGljYXRpb25fY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERP
TURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fQVBQTElD
QVRJT05fQ0FDSEVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSo+KFdFQktJVF9ET01fT0JK
RUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfY2xhc3Nf
aW5pdChXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNz
LT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2NvbnN0cnVj
dG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2RvbV9hcHBsaWNh
dGlvbl9jYWNoZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TVEFUVVMsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAg
InN0YXR1cyIsCisgICAgICAgICAgICAiRE9NQXBwbGljYXRpb25DYWNoZTpzdGF0dXMiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBndXNob3J0IERPTUFwcGxpY2F0aW9uQ2FjaGU6c3RhdHVzIiwK
KyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9u
X2NhY2hlX2luaXQoV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
RE9NX0FQUExJQ0FUSU9OX0NBQ0hFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJp
dikgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZVByaXZhdGUoKTsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV91cGRhdGUoV2ViS2l0RE9NRE9NQXBwbGljYXRp
b25DYWNoZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fQVBQTElDQVRJT05fQ0FDSEUoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9y
IHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+dXBkYXRlKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fYXBwbGlj
YXRpb25fY2FjaGVfc3dhcF9jYWNoZShXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiBzZWxm
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9BUFBMSUNBVElP
Tl9DQUNIRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7
CisgICAgV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zd2Fw
Q2FjaGUoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNo
ZV9hYm9ydChXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpE
T01BcHBsaWNhdGlvbkNhY2hlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PmFib3J0KCk7Cit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVf
Z2V0X3N0YXR1cyhXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9BUFBMSUNBVElPTl9DQUNIRShzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPnN0YXR1cygpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01B
cHBsaWNhdGlvbkNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0
YzYzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZS5oCkBAIC0w
LDAgKzEsMTIzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVfaAorI2RlZmluZSBXZWJLaXRET01ET01BcHBsaWNh
dGlvbkNhY2hlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fQVBQTElDQVRJT05f
Q0FDSEUgICAgICAgICAgICAod2Via2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05fQ0FDSEUob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0RPTV9BUFBMSUNBVElPTl9DQUNIRSwgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NBQ0hFX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fQVBQ
TElDQVRJT05fQ0FDSEUsIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19ET01fQVBQTElDQVRJT05fQ0FDSEUob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9BUFBMSUNB
VElPTl9DQUNIRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX0FQUExJQ0FUSU9OX0NBQ0hF
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9ET01fQVBQTElDQVRJT05fQ0FDSEUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9B
UFBMSUNBVElPTl9DQUNIRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX0FQUExJQ0FUSU9OX0NBQ0hFLCBXZWJLaXRE
T01ET01BcHBsaWNhdGlvbkNhY2hlQ2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9ET01fRE9NX0FQ
UExJQ0FUSU9OX0NBQ0hFX1VOQ0FDSEVEOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQ
UExJQ0FUSU9OX0NBQ0hFX1VOQ0FDSEVEIDAKKworLyoqCisgKiBXRUJLSVRfRE9NX0RPTV9BUFBM
SUNBVElPTl9DQUNIRV9JRExFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQUExJQ0FU
SU9OX0NBQ0hFX0lETEUgMQorCisvKioKKyAqIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NB
Q0hFX0NIRUNLSU5HOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQUExJQ0FUSU9OX0NB
Q0hFX0NIRUNLSU5HIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9DQUNI
RV9ET1dOTE9BRElORzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9BUFBMSUNBVElPTl9D
QUNIRV9ET1dOTE9BRElORyAzCisKKy8qKgorICogV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJT05f
Q0FDSEVfVVBEQVRFUkVBRFk6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fQVBQTElDQVRJ
T05fQ0FDSEVfVVBEQVRFUkVBRFkgNAorCisvKioKKyAqIFdFQktJVF9ET01fRE9NX0FQUExJQ0FU
SU9OX0NBQ0hFX09CU09MRVRFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0FQUExJQ0FU
SU9OX0NBQ0hFX09CU09MRVRFIDUKKworc3RydWN0IF9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNh
Y2hlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVj
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
ZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX3VwZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01BcHBsaWNhdGlvbkNhY2hlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fYXBwbGljYXRp
b25fY2FjaGVfdXBkYXRlKFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9z
d2FwX2NhY2hlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9zd2FwX2NhY2hlKFdl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV9hcHBsaWNhdGlvbl9jYWNoZV9hYm9ydDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hl
X2Fib3J0KFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX2FwcGxpY2F0aW9uX2NhY2hlX2dldF9zdGF0dXM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZQorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Vi
a2l0X2RvbV9kb21fYXBwbGljYXRpb25fY2FjaGVfZ2V0X3N0YXR1cyhXZWJLaXRET01ET01BcHBs
aWNhdGlvbkNhY2hlKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTUFwcGxpY2F0aW9u
Q2FjaGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM1NGIyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUFwcGxp
Y2F0aW9uQ2FjaGVQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlUHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvRE9NQXBwbGljYXRpb25DYWNoZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
V2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogd3JhcERPTUFwcGxpY2F0aW9uQ2FjaGUoV2Vi
Q29yZTo6RE9NQXBwbGljYXRpb25DYWNoZSopOworV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNo
ZSoga2l0KFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGUqKTsKK1dlYkNvcmU6OkRPTUFwcGxp
Y2F0aW9uQ2FjaGUqIGNvcmUoV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hl
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNTU05hbWVzcGFjZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTUNTU05hbWVzcGFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZDc3ZmRkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmNwcApAQCAt
MCwwICsxLDEwNCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTUNTU05hbWVzcGFjZS5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9ET01fQ1NTX05BTUVTUEFDRV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9ET01fQ1NTX05BTUVTUEFDRSwgV2ViS2l0RE9N
RE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTUNT
U05hbWVzcGFjZVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpET01DU1NOYW1lc3BhY2U+
IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01ET01DU1NOYW1lc3BhY2UqIGtpdChXZWJDb3JlOjpE
T01DU1NOYW1lc3BhY2UqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fQ1NTX05BTUVTUEFDRShyZXQpOworCisgICAgcmV0
dXJuIHdyYXBET01DU1NOYW1lc3BhY2Uob2JqKTsKK30KKworV2ViQ29yZTo6RE9NQ1NTTmFtZXNw
YWNlKiBjb3JlKFdlYktpdERPTURPTUNTU05hbWVzcGFjZSogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTUNTU05hbWVzcGFjZSo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURP
TUNTU05hbWVzcGFjZSogd3JhcERPTUNTU05hbWVzcGFjZShXZWJDb3JlOjpET01DU1NOYW1lc3Bh
Y2UqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0RPTV9DU1NfTkFNRVNQQUNFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
RE9NX0NTU19OQU1FU1BBQ0UsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRE9N
Q1NTTmFtZXNwYWNlLCB3ZWJraXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNlLCBXRUJLSVRfRE9NX1RZ
UEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNlX2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fQ1NTX05BTUVTUEFDRV9HRVRfUFJJVkFURShv
YmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNlX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJr
aXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fZG9tX2Nzc19uYW1lc3BhY2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdl
YktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9DU1Nf
TkFNRVNQQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkRPTUNTU05hbWVzcGFjZSo+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fY3NzX25hbWVzcGFjZV9jbGFzc19pbml0KFdlYktp
dERPTURPTUNTU05hbWVzcGFjZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01ET01D
U1NOYW1lc3BhY2VQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fZG9tX2Nzc19uYW1lc3BhY2VfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX2Nzc19uYW1lc3BhY2VfZmluYWxpemU7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX2Nzc19uYW1lc3BhY2VfaW5pdChXZWJLaXRET01E
T01DU1NOYW1lc3BhY2UqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNl
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX0NTU19OQU1FU1BBQ0VfR0VUX1BSSVZBVEUo
cmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VQcml2YXRl
KCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNT
U05hbWVzcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MTQ0YjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNTU05hbWVzcGFjZS5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9N
Q1NTTmFtZXNwYWNlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlX2gKKworI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fQ1NTX05BTUVTUEFDRSAgICAgICAgICAgICh3ZWJr
aXRfZG9tX2RvbV9jc3NfbmFtZXNwYWNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
RE9NX0NTU19OQU1FU1BBQ0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9DU1NfTkFNRVNQQUNFLCBXZWJLaXRET01E
T01DU1NOYW1lc3BhY2UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9DU1NfTkFNRVNQQUNFX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9ET01fQ1NTX05BTUVTUEFDRSwgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlQ2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX0NTU19OQU1FU1BBQ0Uob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9DU1Nf
TkFNRVNQQUNFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fQ1NTX05BTUVTUEFDRV9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfRE9NX0NTU19OQU1FU1BBQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9DU1NfTkFNRVNQ
QUNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9ET01fQ1NTX05BTUVTUEFDRSwgV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNl
Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTURPTUNTU05hbWVzcGFjZSB7CisgICAgV2ViS2l0
RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NQ1NT
TmFtZXNwYWNlQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9tX2Nzc19uYW1lc3BhY2VfZ2V0
X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01DU1NOYW1lc3BhY2VQ
cml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJp
dmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUNTU05hbWVzcGFjZVByaXZhdGUuaAppbmRleCBmMDFh
Y2QyLi5mNGExNDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01ET01DU1NOYW1lc3BhY2VQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEV2ZW50
VGFyZ2V0UHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGVf
aAorI2lmbmRlZiBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJUZXN0RXZlbnRUYXJn
ZXQuaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9ET01DU1NOYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0
RE9NVGVzdEV2ZW50VGFyZ2V0KiB3cmFwVGVzdEV2ZW50VGFyZ2V0KFdlYkNvcmU6OlRlc3RFdmVu
dFRhcmdldCopOwotV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQoV2ViQ29yZTo6VGVzdEV2
ZW50VGFyZ2V0Kik7Ci1XZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmUoV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0Kik7CitXZWJLaXRET01ET01DU1NOYW1lc3BhY2UqIHdyYXBET01DU1NOYW1l
c3BhY2UoV2ViQ29yZTo6RE9NQ1NTTmFtZXNwYWNlKik7CitXZWJLaXRET01ET01DU1NOYW1lc3Bh
Y2UqIGtpdChXZWJDb3JlOjpET01DU1NOYW1lc3BhY2UqKTsKK1dlYkNvcmU6OkRPTUNTU05hbWVz
cGFjZSogY29yZShXZWJLaXRET01ET01DU1NOYW1lc3BhY2UqKTsKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZV9oICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTUltcGxlbWVudGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDZjMWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uLmNwcApAQCAtMCwwICsxLDE5MiBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTURPTUltcGxlbWVudGF0aW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQ1NTU3R5
bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Eb2N1bWVudFR5cGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TERvY3VtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNs
dWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRB
VElPTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04sIFdlYktpdERPTURPTUltcGxlbWVudGF0
aW9uUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTUltcGxlbWVudGF0aW9u
UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uPiBjb3JlT2Jq
ZWN0OworfSBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbioga2l0KFdlYkNvcmU6OkRPTUlt
cGxlbWVudGF0aW9uKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX0lNUExFTUVOVEFUSU9OKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcERPTUltcGxlbWVudGF0aW9uKG9iaik7Cit9CisKK1dlYkNvcmU6OkRPTUltcGxlbWVu
dGF0aW9uKiBjb3JlKFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb24q
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01ET01JbXBsZW1lbnRhdGlvbiogd3JhcERPTUltcGxlbWVudGF0aW9uKFdlYkNvcmU6OkRP
TUltcGxlbWVudGF0aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJT04oZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZ
UEUoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24sIHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0
aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Rv
bV9pbXBsZW1lbnRhdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fSU1QTEVN
RU5UQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRE
T01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY29uc3Ry
dWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0
Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2Jq
ZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX0lNUExFTUVOVEFUSU9OX0dFVF9QUklWQVRFKG9iamVj
dCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTUltcGxl
bWVudGF0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVj
dCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Rv
bV9pbXBsZW1lbnRhdGlvbl9jbGFzc19pbml0KFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uQ2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0ZSkp
OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9pbXBsZW1l
bnRhdGlvbl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV9kb21faW1wbGVtZW50YXRpb25fZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2luaXQoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24q
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJT05fR0VUX1BSSVZBVEUocmVxdWVzdCk7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUoKTsKK30KKwor
Z2Jvb2xlYW4gd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25faGFzX2ZlYXR1cmUoV2ViS2l0
RE9NRE9NSW1wbGVtZW50YXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBmZWF0dXJlLCBjb25zdCBn
Y2hhciogdmVyc2lvbikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fSU1QTEVNRU5U
QVRJT04oc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChmZWF0dXJlLCBG
QUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodmVyc2lvbiwgRkFMU0UpOworICAgIFdl
YkNvcmU6OkRPTUltcGxlbWVudGF0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZEZlYXR1cmUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZmVh
dHVyZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmVyc2lvbiA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2ZXJzaW9uKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNGZWF0dXJl
KGNvbnZlcnRlZEZlYXR1cmUsIGNvbnZlcnRlZFZlcnNpb24pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1dlYktpdERPTURvY3VtZW50VHlwZSogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRp
b25fY3JlYXRlX2RvY3VtZW50X3R5cGUoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIHNlbGYs
IGNvbnN0IGdjaGFyKiBxdWFsaWZpZWROYW1lLCBjb25zdCBnY2hhciogcHVibGljSWQsIGNvbnN0
IGdjaGFyKiBzeXN0ZW1JZCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9NX0lNUExFTUVOVEFUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChxdWFsaWZpZWROYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwdWJsaWNJ
ZCwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3lzdGVtSWQsIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpET01J
bXBsZW1lbnRhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRRdWFsaWZpZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHF1YWxpZmll
ZE5hbWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFB1YmxpY0lkID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHB1YmxpY0lkKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTeXN0ZW1JZCA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzeXN0ZW1JZCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50VHlwZT4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZURvY3VtZW50VHlwZShjb252ZXJ0ZWRRdWFs
aWZpZWROYW1lLCBjb252ZXJ0ZWRQdWJsaWNJZCwgY29udmVydGVkU3lzdGVtSWQsIGVjKSk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAg
fQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NRG9jdW1lbnQqIHdlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1
bWVudChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVz
cGFjZVVSSSwgY29uc3QgZ2NoYXIqIHF1YWxpZmllZE5hbWUsIFdlYktpdERPTURvY3VtZW50VHlw
ZSogZG9jdHlwZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9NX0lNUExFTUVOVEFUSU9OKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChx
dWFsaWZpZWROYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZG9jdHlwZSB8fCBX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RZUEUoZG9jdHlwZSksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpET01JbXBsZW1l
bnRhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRRdWFsaWZpZWROYW1lID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHF1YWxpZmllZE5hbWUpOworICAgIFdlYkNvcmU6OkRvY3VtZW50VHlwZSogY29udmVy
dGVkRG9jdHlwZSA9IFdlYktpdDo6Y29yZShkb2N0eXBlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVEb2N1bWVudChjb252ZXJ0ZWROYW1lc3BhY2VV
UkksIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUsIGNvbnZlcnRlZERvY3R5cGUsIGVjKSk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NQ1NTU3R5bGVTaGVldCogd2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRlX2Nz
c19zdHlsZV9zaGVldChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogc2VsZiwgY29uc3QgZ2No
YXIqIHRpdGxlLCBjb25zdCBnY2hhciogbWVkaWEsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1FTlRBVElPTihzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwodGl0bGUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG1l
ZGlhLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7
CisgICAgV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVGl0bGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodGl0bGUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lZGlhID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KG1lZGlhKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6Q1NTU3R5bGVTaGVldD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmNyZWF0ZUNTU1N0eWxlU2hlZXQoY29udmVydGVkVGl0bGUsIGNvbnZlcnRlZE1l
ZGlhLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTUhUTUxEb2N1bWVudCogd2Via2l0X2RvbV9kb21faW1wbGVtZW50
YXRpb25fY3JlYXRlX2h0bWxfZG9jdW1lbnQoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIHNl
bGYsIGNvbnN0IGdjaGFyKiB0aXRsZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
SU1QTEVNRU5UQVRJT04oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHRpdGxl
LCAwKTsKKyAgICBXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUaXRsZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh0aXRsZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxEb2N1bWVudD4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZUhUTUxEb2N1bWVudChjb252ZXJ0ZWRU
aXRsZSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1l
bnRhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMWUxZDIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uLmgKQEAgLTAsMCArMSwxMTMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJ
VERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9u
bHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNl
bmRpZgorCisjaWZuZGVmIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NRE9NSW1wbGVtZW50YXRpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04gICAgICAgICAgICAod2Via2l0X2RvbV9kb21faW1w
bGVtZW50YXRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5U
QVRJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0RPTV9JTVBMRU1FTlRBVElPTiwgV2ViS2l0RE9NRE9NSW1wbGVtZW50
YXRpb24pKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTl9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
RE9NX0lNUExFTUVOVEFUSU9OLCBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbkNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9JTVBMRU1FTlRBVElPTihvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX0lNUExFTUVO
VEFUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fSU1QTEVNRU5UQVRJT05fQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0RPTV9JTVBMRU1FTlRBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX0lNUExFTUVOVEFU
SU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9ET01fSU1QTEVNRU5UQVRJT04sIFdlYktpdERPTURPTUltcGxlbWVudGF0
aW9uQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uIHsKKyAgICBX
ZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01E
T01JbXBsZW1lbnRhdGlvbkNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRh
dGlvbl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRh
dGlvbl9oYXNfZmVhdHVyZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01JbXBsZW1lbnRhdGlv
bgorICogQGZlYXR1cmU6IEEgI2djaGFyCisgKiBAdmVyc2lvbjogQSAjZ2NoYXIKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2RvbV9pbXBsZW1lbnRhdGlvbl9oYXNfZmVhdHVyZShXZWJLaXRET01ET01JbXBsZW1lbnRhdGlv
biogc2VsZiwgY29uc3QgZ2NoYXIqIGZlYXR1cmUsIGNvbnN0IGdjaGFyKiB2ZXJzaW9uKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnRfdHlw
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbgorICogQHF1YWxpZmll
ZE5hbWU6IEEgI2djaGFyCisgKiBAcHVibGljSWQ6IEEgI2djaGFyCisgKiBAc3lzdGVtSWQ6IEEg
I2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTURvY3VtZW50VHlwZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURv
Y3VtZW50VHlwZSoKK3dlYmtpdF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVu
dF90eXBlKFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogcXVh
bGlmaWVkTmFtZSwgY29uc3QgZ2NoYXIqIHB1YmxpY0lkLCBjb25zdCBnY2hhciogc3lzdGVtSWQs
IEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlv
bl9jcmVhdGVfZG9jdW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRp
b24KKyAqIEBuYW1lc3BhY2VVUkk6IChhbGxvdy1ub25lKTogQSAjZ2NoYXIKKyAqIEBxdWFsaWZp
ZWROYW1lOiBBICNnY2hhcgorICogQGRvY3R5cGU6IChhbGxvdy1ub25lKTogQSAjV2ViS2l0RE9N
RG9jdW1lbnRUeXBlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
RG9jdW1lbnQqCit3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnQo
V2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VV
UkksIGNvbnN0IGdjaGFyKiBxdWFsaWZpZWROYW1lLCBXZWJLaXRET01Eb2N1bWVudFR5cGUqIGRv
Y3R5cGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9pbXBsZW1l
bnRhdGlvbl9jcmVhdGVfY3NzX3N0eWxlX3NoZWV0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURP
TUltcGxlbWVudGF0aW9uCisgKiBAdGl0bGU6IEEgI2djaGFyCisgKiBAbWVkaWE6IEEgI2djaGFy
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTUNTU1N0eWxlU2hlZXQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01DU1NTdHls
ZVNoZWV0Kgord2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25fY3JlYXRlX2Nzc19zdHlsZV9z
aGVldChXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogc2VsZiwgY29uc3QgZ2NoYXIqIHRpdGxl
LCBjb25zdCBnY2hhciogbWVkaWEsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfaHRtbF9kb2N1bWVudDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbgorICogQHRpdGxlOiBBICNnY2hhcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTERvY3VtZW50Kgord2Via2l0X2RvbV9kb21faW1wbGVt
ZW50YXRpb25fY3JlYXRlX2h0bWxfZG9jdW1lbnQoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24q
IHNlbGYsIGNvbnN0IGdjaGFyKiB0aXRsZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
ZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTUltcGxl
bWVudGF0aW9uUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjIxM2FhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01JbXBsZW1lbnRhdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTUltcGxlbWVu
dGF0aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uUHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTUltcGxlbWVudGF0aW9uLmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTURPTUltcGxlbWVudGF0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qIHdyYXBET01JbXBsZW1lbnRhdGlvbihX
ZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiopOworV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24q
IGtpdChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlvbiopOworV2ViQ29yZTo6RE9NSW1wbGVtZW50
YXRpb24qIGNvcmUoV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24qKTsKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25Qcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlNmE1OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGUuY3BwCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRE9NTWltZVR5cGUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01NaW1lVHlwZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01QbHVnaW5Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5l
IFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFLCBXZWJLaXRE
T01ET01NaW1lVHlwZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01NaW1l
VHlwZVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpET01NaW1lVHlwZT4gY29yZU9iamVj
dDsKK30gV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NRE9NTWltZVR5cGUqIGtpdChXZWJDb3JlOjpET01NaW1lVHlwZSogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X0RPTV9NSU1FX1RZUEUocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NTWltZVR5cGUob2JqKTsK
K30KKworV2ViQ29yZTo6RE9NTWltZVR5cGUqIGNvcmUoV2ViS2l0RE9NRE9NTWltZVR5cGUqIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01N
aW1lVHlwZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTURPTU1pbWVUeXBlKiB3cmFwRE9NTWltZVR5cGUoV2ViQ29yZTo6RE9NTWlt
ZVR5cGUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9E
T01fTUlNRV9UWVBFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURPTU1pbWVU
eXBlLCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGUsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9TVUZGSVhFUywK
KyAgICBQUk9QX0RFU0NSSVBUSU9OLAorICAgIFBST1BfRU5BQkxFRF9QTFVHSU4sCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fRE9NX01JTUVfVFlQRV9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+
fldlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fZG9tX21pbWVfdHlwZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NTWltZVR5cGUqIHNlbGYgPSBXRUJLSVRfRE9NX0RP
TV9NSU1FX1RZUEUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2NvbnRlbnRfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9TVUZGSVhFUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9zdWZmaXhlcyhzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVNDUklQVElPTjoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9kZXNjcmlwdGlv
bihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkFCTEVEX1BMVUdJTjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5
cGVfZ2V0X2VuYWJsZWRfcGx1Z2luKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3Vp
bnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0
cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV9kb21fbWltZV90eXBlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUs
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBX
ZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZ
UEVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6RE9NTWltZVR5cGUqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3Jl
T2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVj
dC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9jbGFzc19pbml0KFdlYktpdERPTURPTU1pbWVUeXBl
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVf
Y29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9t
X21pbWVfdHlwZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
VFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwK
KyAgICAgICAgICAgICJET01NaW1lVHlwZTp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2NoYXIqIERPTU1pbWVUeXBlOnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVUZGSVhFUywKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzdWZmaXhlcyIsCisgICAg
ICAgICAgICAiRE9NTWltZVR5cGU6c3VmZml4ZXMiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Y2hhciogRE9NTWltZVR5cGU6c3VmZml4ZXMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERVNDUklQVElP
TiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biIsCisgICAgICAgICAgICAiRE9NTWltZVR5cGU6ZGVzY3JpcHRpb24iLAorICAgICAgICAgICAg
InJlYWQtb25seSBnY2hhciogRE9NTWltZVR5cGU6ZGVzY3JpcHRpb24iLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9FTkFCTEVEX1BMVUdJTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJlbmFibGVkLXBsdWdpbiIsCisgICAgICAgICAgICAiRE9NTWltZVR5cGU6ZW5hYmxl
ZC1wbHVnaW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01QbHVnaW4qIERP
TU1pbWVUeXBlOmVuYWJsZWQtcGx1Z2luIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9E
T01fUExVR0lOLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2luaXQoV2ViS2l0RE9NRE9NTWlt
ZVR5cGUqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2NvbnRlbnRfdHlwZShXZWJLaXRET01ET01NaW1lVHlw
ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTUlNRV9UWVBFKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpET01NaW1lVHlwZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50eXBlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5
cGVfZ2V0X3N1ZmZpeGVzKFdlYktpdERPTURPTU1pbWVUeXBlKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9NSU1FX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRP
TU1pbWVUeXBlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN1ZmZpeGVzKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2Rlc2NyaXB0aW9u
KFdlYktpdERPTURPTU1pbWVUeXBlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9NSU1FX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTU1pbWVUeXBlKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmRlc2NyaXB0aW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dl
YktpdERPTURPTVBsdWdpbiogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9lbmFibGVkX3Bs
dWdpbihXZWJLaXRET01ET01NaW1lVHlwZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET01fTUlNRV9UWVBFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01NaW1lVHlwZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NUGx1Z2lu
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZW5hYmxlZFBsdWdpbigpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRE9NTWltZVR5cGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI3Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01NaW1lVHlwZS5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NTWltZVR5cGVfaAorI2RlZmluZSBXZWJLaXRET01E
T01NaW1lVHlwZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRSAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFLCBXZWJLaXRE
T01ET01NaW1lVHlwZSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfRE9NX01JTUVfVFlQRSwgV2ViS2l0RE9NRE9NTWltZVR5cGVDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19ET01fTUlNRV9UWVBFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19ET01fTUlNRV9UWVBFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fTUlNRV9UWVBFLCBXZWJL
aXRET01ET01NaW1lVHlwZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01ET01NaW1lVHlwZSB7
CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NRE9NTWltZVR5cGVDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb21fbWltZV90eXBl
X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRf
Y29udGVudF90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTU1pbWVUeXBlCisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfZ2V0X2NvbnRlbnRfdHlwZShX
ZWJLaXRET01ET01NaW1lVHlwZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbWlt
ZV90eXBlX2dldF9zdWZmaXhlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01NaW1lVHlwZQor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9zdWZmaXhl
cyhXZWJLaXRET01ET01NaW1lVHlwZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
bWltZV90eXBlX2dldF9kZXNjcmlwdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01NaW1l
VHlwZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb21fbWltZV90eXBlX2dldF9k
ZXNjcmlwdGlvbihXZWJLaXRET01ET01NaW1lVHlwZSogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fbWltZV90eXBlX2dldF9lbmFibGVkX3BsdWdpbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01ET01NaW1lVHlwZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NRE9NUGx1Z2luCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTURPTVBsdWdpbioKK3dlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9nZXRfZW5h
YmxlZF9wbHVnaW4oV2ViS2l0RE9NRE9NTWltZVR5cGUqIHNlbGYpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NRE9NTWltZVR5cGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZUFycmF5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzg3OWYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVB
cnJheS5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01NaW1lVHlwZUFy
cmF5LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9ET01fTUlNRV9UWVBFX0FSUkFZX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEVfQVJSQVksIFdlYktp
dERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
RE9NTWltZVR5cGVBcnJheVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpET01NaW1lVHlw
ZUFycmF5PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIGtpdChX
ZWJDb3JlOjpET01NaW1lVHlwZUFycmF5KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQo
b2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWShyZXQp
OworCisgICAgcmV0dXJuIHdyYXBET01NaW1lVHlwZUFycmF5KG9iaik7Cit9CisKK1dlYkNvcmU6
OkRPTU1pbWVUeXBlQXJyYXkqIGNvcmUoV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTU1pbWVU
eXBlQXJyYXkqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiB3cmFwRE9NTWltZVR5cGVBcnJheShXZWJD
b3JlOjpET01NaW1lVHlwZUFycmF5KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0FSUkFZKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRV9BUlJBWSwgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19E
RUZJTkVfVFlQRShXZWJLaXRET01ET01NaW1lVHlwZUFycmF5LCB3ZWJraXRfZG9tX2RvbV9taW1l
X3R5cGVfYXJyYXksIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1Bf
MCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX21p
bWVfdHlwZV9hcnJheV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9N
RE9NTWltZVR5cGVBcnJheVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVf
QVJSQVlfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01E
T01NaW1lVHlwZUFycmF5UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
ZG9tX21pbWVfdHlwZV9hcnJheV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSogc2VsZiA9IFdF
QktJVF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxv
bmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9nZXRfbGVuZ3RoKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9taW1lX3R5
cGVfYXJyYXlfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGll
c0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7Cisg
ICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fbWltZV90
eXBlX2FycmF5X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3Bl
cnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01ET01NaW1l
VHlwZUFycmF5UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWV9H
RVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpET01NaW1lVHlwZUFycmF5Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfY2xhc3NfaW5pdChXZWJLaXRET01ET01N
aW1lVHlwZUFycmF5Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTU1pbWVUeXBl
QXJyYXlQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9k
b21fZG9tX21pbWVfdHlwZV9hcnJheV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2ZpbmFsaXplOworICAgIGdv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFy
YW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkRPTU1p
bWVUeXBlQXJyYXk6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIERPTU1p
bWVUeXBlQXJyYXk6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfaW5pdChXZWJLaXRET01ET01NaW1lVHlwZUFycmF5
KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9ET01fTUlNRV9UWVBFX0FSUkFZX0dFVF9QUklWQVRFKHJlcXVlc3QpOwor
ICAgIG5ldyAocHJpdikgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGUoKTsKK30KKwor
V2ViS2l0RE9NRE9NTWltZVR5cGUqIHdlYmtpdF9kb21fZG9tX21pbWVfdHlwZV9hcnJheV9pdGVt
KFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTUlNRV9UWVBFX0FSUkFZKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpET01NaW1lVHlwZUFycmF5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpET01NaW1lVHlwZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURPTU1pbWVUeXBlKiB3ZWJraXRfZG9tX2RvbV9taW1l
X3R5cGVfYXJyYXlfbmFtZWRfaXRlbShXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiBzZWxmLCBj
b25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fTUlNRV9U
WVBFX0FSUkFZKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsK
KyAgICBXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
bmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTU1pbWVUeXBlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+bmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9t
X2RvbV9taW1lX3R5cGVfYXJyYXlfZ2V0X2xlbmd0aChXZWJLaXRET01ET01NaW1lVHlwZUFycmF5
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9NSU1FX1RZUEVfQVJSQVko
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTU1pbWVUeXBlQXJyYXkqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01NaW1lVHlwZUFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTdmNjFmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheS5oCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheV9oCisjZGVmaW5lIFdlYktpdERPTURPTU1pbWVUeXBl
QXJyYXlfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEVfQVJSQVkg
ICAgICAgICAgICAod2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fRE9NX01JTUVfVFlQRV9BUlJBWShvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVf
VFlQRV9BUlJBWSwgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSkpCisjZGVmaW5lIFdFQktJVF9E
T01fRE9NX01JTUVfVFlQRV9BUlJBWV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX01JTUVfVFlQRV9BUlJBWSwgV2Vi
S2l0RE9NRE9NTWltZVR5cGVBcnJheUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9N
SU1FX1RZUEVfQVJSQVkob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEVfQVJSQVkpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0RPTV9NSU1FX1RZUEVfQVJSQVlfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9NSU1FX1RZUEVfQVJSQVkp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9NSU1FX1RZUEVfQVJSQVlfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9N
SU1FX1RZUEVfQVJSQVksIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlDbGFzcykpCisKK3N0cnVj
dCBfV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVu
dF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheUNsYXNz
IHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVfYXJyYXlfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2l0ZW06CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheQorICogQGluZGV4OiBBICNndWxvbmcKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTU1pbWVUeXBlCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTU1p
bWVUeXBlKgord2Via2l0X2RvbV9kb21fbWltZV90eXBlX2FycmF5X2l0ZW0oV2ViS2l0RE9NRE9N
TWltZVR5cGVBcnJheSogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV9taW1lX3R5cGVfYXJyYXlfbmFtZWRfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01NaW1lVHlwZUFycmF5CisgKiBAbmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTU1pbWVUeXBlCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTU1pbWVUeXBlKgord2Via2l0X2Rv
bV9kb21fbWltZV90eXBlX2FycmF5X25hbWVkX2l0ZW0oV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJh
eSogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX21p
bWVfdHlwZV9hcnJheV9nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTU1pbWVU
eXBlQXJyYXkKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvbV9taW1lX3R5cGVf
YXJyYXlfZ2V0X2xlbmd0aChXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiBzZWxmKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2Vu
ZGlmIC8qIFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEdsb2Jh
bE9iamVjdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGUuaApzaW1pbGFy
aXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZS5oCnJlbmFtZSB0
byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRlLmgKaW5kZXggNTdjMDAyOC4uMTY2ZTlmZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBl
QXJyYXlQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEdsb2JhbE9iamVjdFByaXZh
dGVfaAotI2RlZmluZSBXZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0UHJpdmF0ZV9oCisjaWZuZGVm
IFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXlQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9N
TWltZVR5cGVBcnJheVByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdEdsb2JhbE9iamVjdC5oIgot
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9ET01NaW1lVHlwZUFycmF5Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTURPTU1pbWVUeXBlQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0KiB3cmFwVGVzdEdsb2JhbE9iamVjdChXZWJDb3JlOjpUZXN0R2xvYmFs
T2JqZWN0Kik7Ci1XZWJLaXRET01UZXN0R2xvYmFsT2JqZWN0KiBraXQoV2ViQ29yZTo6VGVzdEds
b2JhbE9iamVjdCopOwotV2ViQ29yZTo6VGVzdEdsb2JhbE9iamVjdCogY29yZShXZWJLaXRET01U
ZXN0R2xvYmFsT2JqZWN0Kik7CitXZWJLaXRET01ET01NaW1lVHlwZUFycmF5KiB3cmFwRE9NTWlt
ZVR5cGVBcnJheShXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5Kik7CitXZWJLaXRET01ET01NaW1l
VHlwZUFycmF5KiBraXQoV2ViQ29yZTo6RE9NTWltZVR5cGVBcnJheSopOworV2ViQ29yZTo6RE9N
TWltZVR5cGVBcnJheSogY29yZShXZWJLaXRET01ET01NaW1lVHlwZUFycmF5Kik7CiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RHbG9iYWxPYmplY3RQcml2
YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01ET01NaW1lVHlwZUFycmF5UHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlw
ZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWJjYTUyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01NaW1lVHlwZVByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURP
TU1pbWVUeXBlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTU1pbWVUeXBlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTURPTU1pbWVUeXBlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
RE9NTWltZVR5cGUqIHdyYXBET01NaW1lVHlwZShXZWJDb3JlOjpET01NaW1lVHlwZSopOworV2Vi
S2l0RE9NRE9NTWltZVR5cGUqIGtpdChXZWJDb3JlOjpET01NaW1lVHlwZSopOworV2ViQ29yZTo6
RE9NTWltZVR5cGUqIGNvcmUoV2ViS2l0RE9NRE9NTWltZVR5cGUqKTsKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NRE9NTWltZVR5cGVQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFm
MDM4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24uY3Bw
CkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlv
bi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVdlYktpdE5h
bWVkRmxvd1ByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBX
RUJLSVRfRE9NX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT05fR0VUX1BSSVZBVEUob2JqKSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9NX05BTUVEX0ZM
T1dfQ09MTEVDVElPTiwgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUpCisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZSB7
CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorICAgIFJlZlB0cjxXZWJDb3JlOjpET01OYW1lZEZs
b3dDb2xsZWN0aW9uPiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShDU1NfUkVHSU9OUykK
K30gV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGU7CisKKyNpZiBFTkFCTEUo
Q1NTX1JFR0lPTlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01ET01OYW1lZEZs
b3dDb2xsZWN0aW9uKiBraXQoV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbiogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04ocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbihvYmopOworfQorCitXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xsZWN0
aW9uKiBjb3JlKFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01OYW1lZEZsb3dDb2xs
ZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30K
KworV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiogd3JhcERPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24oV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbiogY29yZU9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX05BTUVEX0ZM
T1dfQ09MTEVDVElPTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9OQU1FRF9GTE9X
X0NPTExFQ1RJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1JFR0lPTlMpCisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiwgd2Via2l0X2Rv
bV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitl
bnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OX0dFVF9QUklWQVRFKG9iamVj
dCk7CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1JF
R0lPTlMpCisgICAgcHJpdi0+fldlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRl
KCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0
aW9uX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBzZWxmID0gV0VCS0lU
X0RPTV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91
bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2dldF9sZW5n
dGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fZG9t
X25hbWVkX2Zsb3dfY29sbGVjdGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJv
cGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3Io
dHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNp
ZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCisgICAgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlv
blByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT05fR0VU
X1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCkt
PmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShDU1NfUkVHSU9OUykKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9uYW1lZF9m
bG93X2NvbGxlY3Rpb25fY2xhc3NfaW5pdChXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9u
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Q
cml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9t
X25hbWVkX2Zsb3dfY29sbGVjdGlvbl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2ZpbmFsaXplOwor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kb21fbmFtZWRfZmxv
d19jb2xsZWN0aW9uX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisg
ICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAg
ICAgICAgIkRPTU5hbWVkRmxvd0NvbGxlY3Rpb246bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ3Vsb25nIERPTU5hbWVkRmxvd0NvbGxlY3Rpb246bGVuZ3RoIiwKKyAgICAgICAgICAg
IDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25f
aW5pdChXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiByZXF1ZXN0KQoreworICAgIFdl
YktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9E
T01fTkFNRURfRkxPV19DT0xMRUNUSU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAo
cHJpdikgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGUoKTsKK30KKworV2Vi
S2l0RE9NV2ViS2l0TmFtZWRGbG93KiB3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rp
b25faXRlbShXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBzZWxmLCBndWxvbmcgaW5k
ZXgpCit7CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTU5h
bWVkRmxvd0NvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0o
aW5kZXgpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNzcyBSZWdpb25z
IikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoQ1NTX1JFR0lPTlMpICovCit9CisK
K1dlYktpdERPTVdlYktpdE5hbWVkRmxvdyogd2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xs
ZWN0aW9uX25hbWVkX2l0ZW0oV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiogc2VsZiwg
Y29uc3QgZ2NoYXIqIG5hbWUpCit7CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04oc2VsZiksIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIDApOworICAgIFdlYkNvcmU6OkRPTU5hbWVkRmxv
d0NvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+bmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBV
TlVTRURfUEFSQU0obmFtZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q3NzIFJlZ2lvbnMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShDU1NfUkVHSU9O
UykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9n
ZXRfbGVuZ3RoKFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHNlbGYpCit7CisjaWYg
RU5BQkxFKENTU19SRUdJT05TKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9OQU1FRF9G
TE9XX0NPTExFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDc3MgUmVnaW9u
cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxF
KENTU19SRUdJT05TKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxl
Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjYwZjM5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5h
bWVkRmxvd0NvbGxlY3Rpb24uaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25faAor
I2RlZmluZSBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uX2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OICAgICAgICAgICAgKHdlYmtp
dF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9OQU1FRF9GTE9X
X0NPTExFQ1RJT04sIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24pKQorI2RlZmluZSBX
RUJLSVRfRE9NX0RPTV9OQU1FRF9GTE9XX0NPTExFQ1RJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9OQU1FRF9G
TE9XX0NPTExFQ1RJT04sIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25DbGFzcykKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01f
TkFNRURfRkxPV19DT0xMRUNUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fTkFNRURf
RkxPV19DT0xMRUNUSU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9ET01fTkFNRURfRkxPV19DT0xMRUNUSU9OX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fTkFN
RURfRkxPV19DT0xMRUNUSU9OLCBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uQ2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24geworICAgIFdlYktp
dERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURPTU5h
bWVkRmxvd0NvbGxlY3Rpb25DbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb21fbmFtZWRfZmxv
d19jb2xsZWN0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX25h
bWVkX2Zsb3dfY29sbGVjdGlvbl9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTU5hbWVk
Rmxvd0NvbGxlY3Rpb24KKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01XZWJLaXROYW1lZEZsb3cKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93Kgor
d2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2l0ZW0oV2ViS2l0RE9NRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbiogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fbmFtZWRfaXRlbToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uCisgKiBAbmFtZTogQSAjZ2NoYXIKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVdlYktpdE5hbWVkRmxvdwor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01XZWJL
aXROYW1lZEZsb3cqCit3ZWJraXRfZG9tX2RvbV9uYW1lZF9mbG93X2NvbGxlY3Rpb25fbmFtZWRf
aXRlbShXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciog
bmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fbmFtZWRfZmxvd19jb2xsZWN0aW9uX2dl
dF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbgor
ICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZG9tX25hbWVkX2Zsb3dfY29sbGVjdGlv
bl9nZXRfbGVuZ3RoKFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIHNlbGYpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbl9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTU5hbWVkRmxv
d0NvbGxlY3Rpb25Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTIzMzc1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblBy
aXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb25Qcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvblByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9ET01OYW1lZEZsb3dDb2xsZWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaD4KKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMp
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiog
d3JhcERPTU5hbWVkRmxvd0NvbGxlY3Rpb24oV2ViQ29yZTo6RE9NTmFtZWRGbG93Q29sbGVjdGlv
biopOworV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbioga2l0KFdlYkNvcmU6OkRPTU5h
bWVkRmxvd0NvbGxlY3Rpb24qKTsKK1dlYkNvcmU6OkRPTU5hbWVkRmxvd0NvbGxlY3Rpb24qIGNv
cmUoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiopOworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoQ1NTX1JFR0lPTlMpICovCisKKyNlbmRpZiAvKiBXZWJL
aXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTVBsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMTg2MzdhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2lu
LmNwcApAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVBsdWdpbi5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTURPTU1pbWVUeXBlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURP
TVBsdWdpblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fUExVR0lOX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX0RPTV9QTFVHSU4sIFdlYktpdERPTURPTVBsdWdpblByaXZhdGUpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01ET01QbHVnaW5Qcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9N
UGx1Z2luPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01ET01QbHVnaW5Qcml2YXRlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRE9NUGx1Z2luKiBraXQoV2ViQ29yZTo6RE9NUGx1
Z2luKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fRE9NX1BMVUdJTihyZXQpOworCisgICAgcmV0dXJuIHdyYXBET01QbHVnaW4o
b2JqKTsKK30KKworV2ViQ29yZTo6RE9NUGx1Z2luKiBjb3JlKFdlYktpdERPTURPTVBsdWdpbiog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRP
TVBsdWdpbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTURPTVBsdWdpbiogd3JhcERPTVBsdWdpbihXZWJDb3JlOjpET01QbHVnaW4q
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0RPTV9QTFVHSU4oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lO
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURPTVBsdWdpbiwgd2Via2l0X2Rv
bV9kb21fcGx1Z2luLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfRklMRU5BTUUsCisgICAgUFJPUF9ERVNDUklQ
VElPTiwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9t
X3BsdWdpbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRE9NUGx1
Z2luUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX1BMVUdJTl9HRVRfUFJJVkFURShvYmpl
Y3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTURPTVBsdWdpblByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9wbHVnaW5fcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fcGx1Z2luX2dl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTURPTVBsdWdpbiogc2VsZiA9
IFdFQktJVF9ET01fRE9NX1BMVUdJTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9GSUxFTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9maWxlbmFtZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVNDUklQVElPTjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9kZXNjcmlwdGlvbihzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFs
dWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X2xlbmd0aChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fcGx1Z2lu
X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
R09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmpl
Y3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3BsdWdpbl9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0
cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fRE9NX1BMVUdJTl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNv
cmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01QbHVnaW4qPihXRUJLSVRfRE9NX09C
SkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpw
dXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9jbGFzc19pbml0KFdlYktp
dERPTURPTVBsdWdpbkNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01ET01QbHVnaW5Q
cml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9t
X3BsdWdpbl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0
X2RvbV9kb21fcGx1Z2luX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUi
LAorICAgICAgICAgICAgIkRPTVBsdWdpbjpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2NoYXIqIERPTVBsdWdpbjpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRklMRU5BTUUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZmlsZW5hbWUiLAorICAgICAg
ICAgICAgIkRPTVBsdWdpbjpmaWxlbmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFy
KiBET01QbHVnaW46ZmlsZW5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERVNDUklQVElPTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiIsCisg
ICAgICAgICAgICAiRE9NUGx1Z2luOmRlc2NyaXB0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2NoYXIqIERPTVBsdWdpbjpkZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdU
SCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisg
ICAgICAgICAgICAiRE9NUGx1Z2luOmxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1
bG9uZyBET01QbHVnaW46bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2RvbV9wbHVnaW5faW5pdChXZWJLaXRET01ET01QbHVnaW4qIHJlcXVlc3QpCit7
CisgICAgV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRE9NX1BM
VUdJTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTURPTVBs
dWdpblByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NRE9NTWltZVR5cGUqIHdlYmtpdF9kb21fZG9t
X3BsdWdpbl9pdGVtKFdlYktpdERPTURPTVBsdWdpbiogc2VsZiwgZ3Vsb25nIGluZGV4KQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9QTFVHSU4oc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkRPTVBsdWdpbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6RE9NTWltZVR5cGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVt
KGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01ET01NaW1lVHlwZSogd2Via2l0X2RvbV9kb21fcGx1Z2luX25hbWVkX2l0
ZW0oV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fUExVR0lOKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpET01QbHVnaW4qIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NTWltZVR5cGU+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5uYW1lZEl0ZW0oY29udmVydGVkTmFtZSkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfbmFtZShXZWJLaXRET01ET01QbHVnaW4qIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1BMVUdJTihzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RE9NUGx1Z2luKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfZmlsZW5h
bWUoV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9QTFVHSU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVBsdWdpbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5maWxlbmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9kb21fcGx1Z2luX2dldF9kZXNjcmlwdGlvbihXZWJLaXRET01ET01QbHVnaW4qIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1BMVUdJTihzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RE9NUGx1Z2luKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRlc2NyaXB0aW9uKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0
X2xlbmd0aChXZWJLaXRET01ET01QbHVnaW4qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9NX1BMVUdJTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NUGx1Z2luKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdpbi5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01QbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
MzRlOWNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW4uaApAQCAtMCwwICsxLDEy
MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01E
T01QbHVnaW5faAorI2RlZmluZSBXZWJLaXRET01ET01QbHVnaW5faAorCisjaWZkZWYgV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX0RPTV9QTFVHSU4gICAgICAgICAgICAod2Via2l0X2RvbV9kb21fcGx1Z2lu
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9N
X1BMVUdJTiwgV2ViS2l0RE9NRE9NUGx1Z2luKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fUExV
R0lOX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9ET01fUExVR0lOLCBXZWJLaXRET01ET01QbHVnaW5DbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19ET01fUExVR0lOKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19ET01fUExVR0lOX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9ET01fUExVR0lOX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOLCBXZWJLaXRET01ET01QbHVn
aW5DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NUGx1Z2luIHsKKyAgICBXZWJLaXRET01P
YmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01ET01QbHVnaW5D
bGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURPTVBsdWdpbgorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTURPTU1pbWVUeXBlCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTU1pbWVUeXBlKgord2Via2l0X2RvbV9k
b21fcGx1Z2luX2l0ZW0oV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmLCBndWxvbmcgaW5kZXgpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9uYW1lZF9pdGVtOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURPTVBsdWdpbgorICogQG5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01NaW1lVHlwZQorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01NaW1lVHlwZSoKK3dlYmtp
dF9kb21fZG9tX3BsdWdpbl9uYW1lZF9pdGVtKFdlYktpdERPTURPTVBsdWdpbiogc2VsZiwgY29u
c3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfbmFt
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01QbHVnaW4KKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfbmFtZShXZWJLaXRET01ET01QbHVnaW4qIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9nZXRfZmlsZW5hbWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NUGx1Z2luCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2RvbV9wbHVnaW5fZ2V0X2ZpbGVuYW1lKFdlYktpdERPTURPTVBsdWdpbiogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fcGx1Z2luX2dldF9kZXNjcmlwdGlvbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01ET01QbHVnaW4KKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9t
X3BsdWdpbl9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NRE9NUGx1Z2luKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01ET01QbHVnaW4KKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvbV9wbHVn
aW5fZ2V0X2xlbmd0aChXZWJLaXRET01ET01QbHVnaW4qIHNlbGYpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2Vi
S2l0RE9NRE9NUGx1Z2luX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01QbHVnaW5BcnJheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjU5NDJjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkuY3Bw
CkBAIC0wLDAgKzEsMTczIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkuaCIKKwor
I2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENh
Y2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01ET01QbHVnaW5Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTl9B
UlJBWV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdF
QktJVF9ET01fVFlQRV9ET01fUExVR0lOX0FSUkFZLCBXZWJLaXRET01ET01QbHVnaW5BcnJheVBy
aXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUg
eworICAgIFJlZlB0cjxXZWJDb3JlOjpET01QbHVnaW5BcnJheT4gY29yZU9iamVjdDsKK30gV2Vi
S2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NRE9NUGx1Z2luQXJyYXkqIGtpdChXZWJDb3JlOjpET01QbHVnaW5BcnJheSogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X0RPTV9QTFVHSU5fQVJSQVkocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NUGx1Z2luQXJyYXko
b2JqKTsKK30KKworV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIGNvcmUoV2ViS2l0RE9NRE9NUGx1
Z2luQXJyYXkqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpET01QbHVnaW5BcnJheSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURPTVBsdWdpbkFycmF5KiB3cmFwRE9NUGx1Z2lu
QXJyYXkoV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9QTFVHSU5fQVJSQVkoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOX0FSUkFZLCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitH
X0RFRklORV9UWVBFKFdlYktpdERPTURPTVBsdWdpbkFycmF5LCB3ZWJraXRfZG9tX2RvbV9wbHVn
aW5fYXJyYXksIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3BsdWdp
bl9hcnJheV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRE9NUGx1
Z2luQXJyYXlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NUGx1Z2luQXJy
YXlQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fcGx1Z2luX2Fy
cmF5X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01ET01QbHVnaW5BcnJheSogc2VsZiA9IFdFQktJVF9ET01fRE9NX1BMVUdJTl9B
UlJBWShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9t
X3BsdWdpbl9hcnJheV9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBH
T2JqZWN0KiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfY29uc3RydWN0b3IoR1R5cGUgdHlw
ZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0q
IGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X3BhcmVudF9jbGFzcyktPmNvbnN0cnVj
dG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7
CisKKyAgICBXZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X0RPTV9QTFVHSU5fQVJSQVlfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqPihXRUJLSVRfRE9NX09C
SkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpw
dXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9jbGFzc19pbml0
KFdlYktpdERPTURPTVBsdWdpbkFycmF5Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERP
TURPTVBsdWdpbkFycmF5UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3Ig
PSB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9maW5hbGl6ZTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJh
eV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3Bh
cmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJET01Q
bHVnaW5BcnJheTpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRE9NUGx1
Z2luQXJyYXk6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2RvbV9wbHVnaW5fYXJyYXlfaW5pdChXZWJLaXRET01ET01QbHVnaW5BcnJheSogcmVxdWVz
dCkKK3sKKyAgICBXZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX0RPTV9QTFVHSU5fQVJSQVlfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2
KSBXZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NRE9NUGx1
Z2luKiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfaXRlbShXZWJLaXRET01ET01QbHVnaW5B
cnJheSogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9QTFVHSU5fQVJSQVkoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01QbHVnaW4+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01ET01Q
bHVnaW4qIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9uYW1lZF9pdGVtKFdlYktpdERPTURP
TVBsdWdpbkFycmF5KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fUExVR0lOX0FSUkFZKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpET01QbHVnaW5BcnJheSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01QbHVnaW4+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5uYW1lZEl0ZW0oY29udmVydGVkTmFtZSkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfcmVmcmVzaChXZWJLaXRET01ET01QbHVnaW5B
cnJheSogc2VsZiwgZ2Jvb2xlYW4gcmVsb2FkKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1BMVUdJTl9BUlJBWShzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVmcmVzaChyZWxvYWQpOworfQorCitn
dWxvbmcgd2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2dldF9sZW5ndGgoV2ViS2l0RE9NRE9N
UGx1Z2luQXJyYXkqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1BMVUdJ
Tl9BUlJBWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NUGx1Z2luQXJyYXkqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXku
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mZmVkMzRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5BcnJheS5oCkBA
IC0wLDAgKzEsOTggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlfaAorI2RlZmluZSBXZWJLaXRET01ET01QbHVnaW5BcnJh
eV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGds
aWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX1BMVUdJTl9BUlJBWSAgICAgICAg
ICAgICh3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9ET01fUExVR0lOX0FSUkFZKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fUExVR0lOX0FSUkFZLCBXZWJL
aXRET01ET01QbHVnaW5BcnJheSkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1BMVUdJTl9BUlJB
WV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfRE9NX1BMVUdJTl9BUlJBWSwgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fUExVR0lOX0FSUkFZKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fUExV
R0lOX0FSUkFZKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fUExVR0lOX0FSUkFZX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9ET01fUExVR0lOX0FSUkFZKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fUExVR0lOX0FSUkFZ
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9ET01fUExVR0lOX0FSUkFZLCBXZWJLaXRET01ET01QbHVnaW5BcnJheUNsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01ET01QbHVnaW5BcnJheSB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NUGx1Z2luQXJy
YXlDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9kb21fcGx1Z2luX2FycmF5X2dldF90eXBlKHZv
aWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9pdGVtOgorICogQHNl
bGY6IEEgI1dlYktpdERPTURPTVBsdWdpbkFycmF5CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NUGx1Z2luCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTVBsdWdp
bioKK3dlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9pdGVtKFdlYktpdERPTURPTVBsdWdpbkFy
cmF5KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdp
bl9hcnJheV9uYW1lZF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVBsdWdpbkFycmF5
CisgKiBAbmFtZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTURPTVBsdWdpbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01ET01QbHVnaW4qCit3ZWJraXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlf
bmFtZWRfaXRlbShXZWJLaXRET01ET01QbHVnaW5BcnJheSogc2VsZiwgY29uc3QgZ2NoYXIqIG5h
bWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9yZWZyZXNoOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVBsdWdpbkFycmF5CisgKiBAcmVsb2FkOiBBICNnYm9vbGVh
bgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2RvbV9wbHVnaW5fYXJyYXlfcmVmcmVzaChXZWJLaXRET01ET01QbHVnaW5BcnJheSog
c2VsZiwgZ2Jvb2xlYW4gcmVsb2FkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9wbHVnaW5f
YXJyYXlfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01QbHVnaW5BcnJheQor
ICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fZG9tX3BsdWdpbl9hcnJheV9nZXRfbGVu
Z3RoKFdlYktpdERPTURPTVBsdWdpbkFycmF5KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERP
TURPTVBsdWdpbkFycmF5X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTVBsdWdpbkFycmF5UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY3MzcxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdp
bkFycmF5UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXlQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUv
RE9NUGx1Z2luQXJyYXkuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRE9NUGx1Z2lu
QXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01QbHVnaW5BcnJheSog
d3JhcERPTVBsdWdpbkFycmF5KFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5Kik7CitXZWJLaXRET01E
T01QbHVnaW5BcnJheSoga2l0KFdlYkNvcmU6OkRPTVBsdWdpbkFycmF5Kik7CitXZWJDb3JlOjpE
T01QbHVnaW5BcnJheSogY29yZShXZWJLaXRET01ET01QbHVnaW5BcnJheSopOworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01QbHVnaW5BcnJheVByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVBsdWdp
blByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmZmMWUyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01QbHVnaW5Qcml2YXRlLmgKQEAgLTAsMCArMSwzMyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01Q
bHVnaW5Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NUGx1Z2luUHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0RPTVBsdWdpbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01ET01QbHVnaW4uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01ET01QbHVnaW4q
IHdyYXBET01QbHVnaW4oV2ViQ29yZTo6RE9NUGx1Z2luKik7CitXZWJLaXRET01ET01QbHVnaW4q
IGtpdChXZWJDb3JlOjpET01QbHVnaW4qKTsKK1dlYkNvcmU6OkRPTVBsdWdpbiogY29yZShXZWJL
aXRET01ET01QbHVnaW4qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2Vi
S2l0RE9NRE9NUGx1Z2luUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVNlbGVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTVNlbGVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjQwZjQxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU2VsZWN0aW9uLmNw
cApAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVNlbGVjdGlvbi5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01O
b2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01SYW5nZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2Rl
ZmluZSBXRUJLSVRfRE9NX0RPTV9TRUxFQ1RJT05fR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1NFTEVDVElPTiwgV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURP
TVNlbGVjdGlvblByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpET01TZWxlY3Rpb24+IGNv
cmVPYmplY3Q7Cit9IFdlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01ET01TZWxlY3Rpb24qIGtpdChXZWJDb3JlOjpET01TZWxlY3Rp
b24qIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
Z3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4g
V0VCS0lUX0RPTV9ET01fU0VMRUNUSU9OKHJldCk7CisKKyAgICByZXR1cm4gd3JhcERPTVNlbGVj
dGlvbihvYmopOworfQorCitXZWJDb3JlOjpET01TZWxlY3Rpb24qIGNvcmUoV2ViS2l0RE9NRE9N
U2VsZWN0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RE9NU2VsZWN0aW9uKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiB3cmFwRE9NU2VsZWN0aW9u
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1NFTEVDVElPTihnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0RPTV9TRUxFQ1RJT04sICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0RE9NRE9NU2VsZWN0aW9uLCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb24sIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FOQ0hPUl9O
T0RFLAorICAgIFBST1BfQU5DSE9SX09GRlNFVCwKKyAgICBQUk9QX0ZPQ1VTX05PREUsCisgICAg
UFJPUF9GT0NVU19PRkZTRVQsCisgICAgUFJPUF9JU19DT0xMQVBTRUQsCisgICAgUFJPUF9SQU5H
RV9DT1VOVCwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9CQVNFX05PREUsCisgICAgUFJPUF9C
QVNFX09GRlNFVCwKKyAgICBQUk9QX0VYVEVOVF9OT0RFLAorICAgIFBST1BfRVhURU5UX09GRlNF
VCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9maW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9ET01fRE9NX1NFTEVDVElPTl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOwor
CisgICAgcHJpdi0+fldlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiA9
IFdFQktJVF9ET01fRE9NX1NFTEVDVElPTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0
eUlkKSB7CisgICAgY2FzZSBQUk9QX0FOQ0hPUl9OT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYW5jaG9yX25vZGUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQU5DSE9SX09GRlNFVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRf
YW5jaG9yX29mZnNldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT0NV
U19OT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9t
X3NlbGVjdGlvbl9nZXRfZm9jdXNfbm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9GT0NVU19PRkZTRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3
ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2ZvY3VzX29mZnNldChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19DT0xMQVBTRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfaXNfY29sbGFwc2Vk
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JBTkdFX0NPVU5UOgorICAg
ICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dl
dF9yYW5nZV9jb3VudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBF
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fZ2V0X3NlbGVjdGlvbl90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0JBU0VfTk9ERToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2Jhc2Vfbm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9CQVNFX09GRlNFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmco
dmFsdWUsIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYmFzZV9vZmZzZXQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVhURU5UX05PREU6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9leHRlbnRf
bm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FWFRFTlRfT0ZGU0VU
OgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2dldF9leHRlbnRfb2Zmc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3Vp
bnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0
cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUs
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBX
ZWJLaXRET01ET01TZWxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fU0VMRUNU
SU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkRPTVNlbGVjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2NsYXNzX2luaXQoV2ViS2l0RE9NRE9NU2VsZWN0
aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9t
X2RvbV9zZWxlY3Rpb25fZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0FOQ0hPUl9OT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgImFuY2hvci1ub2RlIiwKKyAgICAgICAgICAgICJET01TZWxlY3Rpb246YW5jaG9yLW5vZGUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBET01TZWxlY3Rpb246YW5j
aG9yLW5vZGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTkNIT1JfT0ZG
U0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiYW5jaG9yLW9m
ZnNldCIsCisgICAgICAgICAgICAiRE9NU2VsZWN0aW9uOmFuY2hvci1vZmZzZXQiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBndWxvbmcgRE9NU2VsZWN0aW9uOmFuY2hvci1vZmZzZXQiLAorICAg
ICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPQ1VTX05PREUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9jdXMtbm9kZSIsCisgICAgICAgICAgICAiRE9N
U2VsZWN0aW9uOmZvY3VzLW5vZGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01O
b2RlKiBET01TZWxlY3Rpb246Zm9jdXMtbm9kZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0ZPQ1VTX09GRlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAg
ICAgICAgICAgImZvY3VzLW9mZnNldCIsCisgICAgICAgICAgICAiRE9NU2VsZWN0aW9uOmZvY3Vz
LW9mZnNldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBET01TZWxlY3Rpb246Zm9j
dXMtb2Zmc2V0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JU19DT0xMQVBTRUQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImlzLWNvbGxhcHNl
ZCIsCisgICAgICAgICAgICAiRE9NU2VsZWN0aW9uOmlzLWNvbGxhcHNlZCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdib29sZWFuIERPTVNlbGVjdGlvbjppcy1jb2xsYXBzZWQiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9SQU5HRV9DT1VOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAor
ICAgICAgICAgICAgInJhbmdlLWNvdW50IiwKKyAgICAgICAgICAgICJET01TZWxlY3Rpb246cmFu
Z2UtY291bnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRE9NU2VsZWN0aW9uOnJh
bmdlLWNvdW50IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAg
IkRPTVNlbGVjdGlvbjp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERPTVNl
bGVjdGlvbjp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkFTRV9OT0RFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImJhc2Utbm9kZSIsCisgICAgICAgICAgICAi
RE9NU2VsZWN0aW9uOmJhc2Utbm9kZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERP
TU5vZGUqIERPTVNlbGVjdGlvbjpiYXNlLW5vZGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9CQVNFX09GRlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAg
ICAgICAgICAgImJhc2Utb2Zmc2V0IiwKKyAgICAgICAgICAgICJET01TZWxlY3Rpb246YmFzZS1v
ZmZzZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRE9NU2VsZWN0aW9uOmJhc2Ut
b2Zmc2V0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9FWFRFTlRfTk9ERSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJleHRlbnQtbm9kZSIsCisg
ICAgICAgICAgICAiRE9NU2VsZWN0aW9uOmV4dGVudC1ub2RlIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NTm9kZSogRE9NU2VsZWN0aW9uOmV4dGVudC1ub2RlIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRVhURU5UX09GRlNFVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImV4dGVudC1vZmZzZXQiLAorICAgICAgICAgICAg
IkRPTVNlbGVjdGlvbjpleHRlbnQtb2Zmc2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vs
b25nIERPTVNlbGVjdGlvbjpleHRlbnQtb2Zmc2V0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25faW5pdChXZWJLaXRET01ET01TZWxlY3Rp
b24qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NU2VsZWN0aW9uUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fRE9NX1NFTEVDVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcg
KHByaXYpIFdlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUoKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2RvbV9zZWxlY3Rpb25fY29sbGFwc2UoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBX
ZWJLaXRET01Ob2RlKiBub2RlLCBndWxvbmcgb2Zmc2V0KQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUobm9kZSkpOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0
Ojpjb3JlKG5vZGUpOworICAgIGl0ZW0tPmNvbGxhcHNlKGNvbnZlcnRlZE5vZGUsIG9mZnNldCk7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2NvbGxhcHNlX3RvX2VuZChXZWJL
aXRET01ET01TZWxlY3Rpb24qIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJy
b3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0
ZW0tPmNvbGxhcHNlVG9FbmQoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fY29sbGFwc2VfdG9fc3RhcnQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6
OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5jb2xsYXBzZVRvU3RhcnQoZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
K30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZGVsZXRlX2Zyb21fZG9jdW1lbnQo
V2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1NFTEVDVElPTihzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmRlbGV0ZUZyb21Eb2N1bWVudCgpOworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29udGFpbnNfbm9kZShXZWJLaXRET01E
T01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIGdib29sZWFuIGFsbG93UGFy
dGlhbCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCBG
QUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUp
LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUo
bm9kZSk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y29udGFpbnNOb2RlKCpjb252ZXJ0
ZWROb2RlLCBhbGxvd1BhcnRpYWwpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9kb21fc2VsZWN0aW9uX3NlbGVjdF9hbGxfY2hpbGRyZW4oV2ViS2l0RE9NRE9NU2Vs
ZWN0aW9uKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUobm9kZSkpOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0
Ojpjb3JlKG5vZGUpOworICAgIGl0ZW0tPnNlbGVjdEFsbENoaWxkcmVuKCpjb252ZXJ0ZWROb2Rl
KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZXh0ZW5kKFdlYktpdERPTURP
TVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgZ3Vsb25nIG9mZnNldCwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShub2RlKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNv
bnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNvcmUobm9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+ZXh0ZW5kKCpjb252ZXJ0ZWROb2RlLCBvZmZzZXQsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9Cit9CisKK1dlYktpdERPTVJhbmdlKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0
X3JhbmdlX2F0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgZ3Vsb25nIGluZGV4LCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNl
bGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7
CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldFJhbmdlQXQoaW5kZXgs
IGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fcmVtb3ZlX2FsbF9yYW5nZXMoV2Vi
S2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NF
TEVDVElPTihzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnJlbW92ZUFsbFJhbmdlcygpOworfQorCit2b2lkIHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9hZGRfcmFuZ2UoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBz
ZWxmLCBXZWJLaXRET01SYW5nZSogcmFuZ2UpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01f
U0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFO
R0UocmFuZ2UpKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGNvbnZlcnRlZFJhbmdlID0gV2ViS2l0Ojpj
b3JlKHJhbmdlKTsKKyAgICBpdGVtLT5hZGRSYW5nZSgqY29udmVydGVkUmFuZ2UpOworfQorCit2
b2lkIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9zZXRfYmFzZV9hbmRfZXh0ZW50KFdlYktpdERP
TURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogYmFzZU5vZGUsIGd1bG9uZyBiYXNl
T2Zmc2V0LCBXZWJLaXRET01Ob2RlKiBleHRlbnROb2RlLCBndWxvbmcgZXh0ZW50T2Zmc2V0KQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoYmFzZU5vZGUpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShleHRlbnROb2RlKSk7CisgICAgV2ViQ29yZTo6RE9N
U2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZEJhc2VOb2RlID0gV2ViS2l0Ojpjb3JlKGJhc2VOb2RlKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBjb252ZXJ0ZWRFeHRlbnROb2RlID0gV2ViS2l0Ojpjb3JlKGV4dGVudE5vZGUpOwor
ICAgIGl0ZW0tPnNldEJhc2VBbmRFeHRlbnQoY29udmVydGVkQmFzZU5vZGUsIGJhc2VPZmZzZXQs
IGNvbnZlcnRlZEV4dGVudE5vZGUsIGV4dGVudE9mZnNldCk7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX3NldF9wb3NpdGlvbihXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYs
IFdlYktpdERPTU5vZGUqIG5vZGUsIGd1bG9uZyBvZmZzZXQpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET01fU0VMRUNUSU9OKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTk9ERShub2RlKSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJL
aXQ6OmNvcmUobm9kZSk7CisgICAgaXRlbS0+c2V0UG9zaXRpb24oY29udmVydGVkTm9kZSwgb2Zm
c2V0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZW1wdHkoV2ViS2l0RE9N
RE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElP
TihzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPmVtcHR5KCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fc2Vs
ZWN0aW9uX21vZGlmeShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBh
bHRlciwgY29uc3QgZ2NoYXIqIGRpcmVjdGlvbiwgY29uc3QgZ2NoYXIqIGdyYW51bGFyaXR5KQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChhbHRlcik7CisgICAgZ19yZXR1cm5faWZfZmFpbChkaXJlY3Rpb24pOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoZ3JhbnVsYXJpdHkpOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRB
bHRlciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChhbHRlcik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkRGlyZWN0aW9uID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRpcmVjdGlvbik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkR3JhbnVsYXJpdHkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
Z3JhbnVsYXJpdHkpOworICAgIGl0ZW0tPm1vZGlmeShjb252ZXJ0ZWRBbHRlciwgY29udmVydGVk
RGlyZWN0aW9uLCBjb252ZXJ0ZWRHcmFudWxhcml0eSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdl
YmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYW5jaG9yX25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0
aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxFQ1RJT04oc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmFuY2hvck5vZGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9h
bmNob3Jfb2Zmc2V0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01T
ZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9
IGl0ZW0tPmFuY2hvck9mZnNldCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERP
TU5vZGUqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZm9jdXNfbm9kZShXZWJLaXRET01E
T01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVD
VElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+Zm9jdXNOb2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlv
bl9nZXRfZm9jdXNfb2Zmc2V0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJl
c3VsdCA9IGl0ZW0tPmZvY3VzT2Zmc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9pc19jb2xsYXBzZWQoV2ViS2l0RE9N
RE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9TRUxF
Q1RJT04oc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aXNDb2xsYXBz
ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2RvbV9kb21fc2Vs
ZWN0aW9uX2dldF9yYW5nZV9jb3VudChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9u
ZyByZXN1bHQgPSBpdGVtLT5yYW5nZUNvdW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX3R5cGUoV2ViS2l0
RE9NRE9NU2VsZWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9T
RUxFQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVNlbGVjdGlvbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT50eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGUq
IHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYmFzZV9ub2RlKFdlYktpdERPTURPTVNlbGVj
dGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5iYXNlTm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2Jh
c2Vfb2Zmc2V0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01TZWxl
Y3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPmJhc2VPZmZzZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2Rl
KiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2V4dGVudF9ub2RlKFdlYktpdERPTURPTVNl
bGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9O
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01TZWxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5leHRlbnROb2RlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9n
ZXRfZXh0ZW50X29mZnNldChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9NX1NFTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RE9NU2VsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1
bHQgPSBpdGVtLT5leHRlbnRPZmZzZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURPTVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TZWxlY3Rpb24uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjgxNTNjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01TZWxlY3Rpb24uaApAQCAtMCwwICsxLDMyNiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01ET01TZWxlY3Rpb25faAorI2RlZmluZSBX
ZWJLaXRET01ET01TZWxlY3Rpb25faAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVf
QVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0
YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPTV9T
RUxFQ1RJT04gICAgICAgICAgICAod2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1NFTEVDVElPTihvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1NFTEVDVElP
TiwgV2ViS2l0RE9NRE9NU2VsZWN0aW9uKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU0VMRUNU
SU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9ET01fU0VMRUNUSU9OLCBXZWJLaXRET01ET01TZWxlY3Rpb25DbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fU0VMRUNUSU9O
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fU0VMRUNUSU9OX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fU0VMRUNU
SU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU0VMRUNUSU9OX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01fU0VM
RUNUSU9OLCBXZWJLaXRET01ET01TZWxlY3Rpb25DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
RE9NU2VsZWN0aW9uIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsK
Kworc3RydWN0IF9XZWJLaXRET01ET01TZWxlY3Rpb25DbGFzcyB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9t
X3NlbGVjdGlvbl9jb2xsYXBzZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24K
KyAqIEBub2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb2Zmc2V0OiBBICNndWxvbmcKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9k
b21fc2VsZWN0aW9uX2NvbGxhcHNlKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgV2ViS2l0
RE9NTm9kZSogbm9kZSwgZ3Vsb25nIG9mZnNldCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
c2VsZWN0aW9uX2NvbGxhcHNlX3RvX2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxl
Y3Rpb24KKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29sbGFwc2VfdG9f
ZW5kKFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9jb2xsYXBzZV90b19zdGFydDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9z
ZWxlY3Rpb25fY29sbGFwc2VfdG9fc3RhcnQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2RlbGV0
ZV9mcm9tX2RvY3VtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2RvbV9zZWxlY3Rpb25fZGVsZXRlX2Zyb21fZG9jdW1lbnQoV2ViS2l0RE9NRE9NU2VsZWN0aW9u
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29udGFpbnNfbm9k
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqIEBub2RlOiBBICNXZWJL
aXRET01Ob2RlCisgKiBAYWxsb3dQYXJ0aWFsOiBBICNnYm9vbGVhbgorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fY29udGFpbnNfbm9kZShXZWJLaXRE
T01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIGdib29sZWFuIGFsbG93
UGFydGlhbCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX3NlbGVjdF9hbGxf
Y2hpbGRyZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKiBAbm9kZTog
QSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fc2VsZWN0X2FsbF9jaGlsZHJlbihX
ZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9leHRlbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NU2VsZWN0aW9uCisgKiBAbm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQG9mZnNldDog
QSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2V4dGVuZChX
ZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIGd1bG9uZyBv
ZmZzZXQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rp
b25fZ2V0X3JhbmdlX2F0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICog
QGluZGV4OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NUmFuZ2UqCit3ZWJraXRfZG9tX2RvbV9zZWxl
Y3Rpb25fZ2V0X3JhbmdlX2F0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZiwgZ3Vsb25nIGlu
ZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9u
X3JlbW92ZV9hbGxfcmFuZ2VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2RvbV9zZWxlY3Rpb25fcmVtb3ZlX2FsbF9yYW5nZXMoV2ViS2l0RE9NRE9NU2VsZWN0aW9u
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fYWRkX3JhbmdlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICogQHJhbmdlOiBBICNXZWJLaXRE
T01SYW5nZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fYWRkX3JhbmdlKFdlYktpdERPTURPTVNlbGVjdGlv
biogc2VsZiwgV2ViS2l0RE9NUmFuZ2UqIHJhbmdlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
bV9zZWxlY3Rpb25fc2V0X2Jhc2VfYW5kX2V4dGVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01TZWxlY3Rpb24KKyAqIEBiYXNlTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGJhc2VPZmZz
ZXQ6IEEgI2d1bG9uZworICogQGV4dGVudE5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBleHRl
bnRPZmZzZXQ6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fc2V0X2Jhc2VfYW5kX2V4dGVu
dChXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIGJhc2VOb2RlLCBn
dWxvbmcgYmFzZU9mZnNldCwgV2ViS2l0RE9NTm9kZSogZXh0ZW50Tm9kZSwgZ3Vsb25nIGV4dGVu
dE9mZnNldCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX3NldF9wb3NpdGlv
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqIEBub2RlOiBBICNXZWJL
aXRET01Ob2RlCisgKiBAb2Zmc2V0OiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX3NldF9w
b3NpdGlvbihXZWJLaXRET01ET01TZWxlY3Rpb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUs
IGd1bG9uZyBvZmZzZXQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9lbXB0
eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fc2VsZWN0aW9u
X2VtcHR5KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX21vZGlmeToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rp
b24KKyAqIEBhbHRlcjogQSAjZ2NoYXIKKyAqIEBkaXJlY3Rpb246IEEgI2djaGFyCisgKiBAZ3Jh
bnVsYXJpdHk6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9tb2RpZnkoV2ViS2l0RE9NRE9N
U2VsZWN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogYWx0ZXIsIGNvbnN0IGdjaGFyKiBkaXJlY3Rp
b24sIGNvbnN0IGdjaGFyKiBncmFudWxhcml0eSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21f
c2VsZWN0aW9uX2dldF9hbmNob3Jfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxl
Y3Rpb24KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9k
ZSoKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYW5jaG9yX25vZGUoV2ViS2l0RE9NRE9N
U2VsZWN0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0
X2FuY2hvcl9vZmZzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgor
ICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9hbmNob3Jfb2Zm
c2V0KFdlYktpdERPTURPTVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b21fc2VsZWN0aW9uX2dldF9mb2N1c19ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNl
bGVjdGlvbgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9k
ZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01O
b2RlKgord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9mb2N1c19ub2RlKFdlYktpdERPTURP
TVNlbGVjdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dl
dF9mb2N1c19vZmZzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU2VsZWN0aW9uCisgKgor
ICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9mb2N1c19vZmZz
ZXQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
bV9zZWxlY3Rpb25fZ2V0X2lzX2NvbGxhcHNlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01T
ZWxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb21fc2VsZWN0
aW9uX2dldF9pc19jb2xsYXBzZWQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3JhbmdlX2NvdW50OgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9k
b21fZG9tX3NlbGVjdGlvbl9nZXRfcmFuZ2VfY291bnQoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl90
eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9kb21fc2VsZWN0aW9uX2dldF9zZWxlY3Rpb25fdHlwZShXZWJLaXRE
T01ET01TZWxlY3Rpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlv
bl9nZXRfYmFzZV9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0
X2RvbV9kb21fc2VsZWN0aW9uX2dldF9iYXNlX25vZGUoV2ViS2l0RE9NRE9NU2VsZWN0aW9uKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2Jhc2Vfb2Zmc2V0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAqIFJldHVybnM6IEEg
I2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxv
bmcKK3dlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfYmFzZV9vZmZzZXQoV2ViS2l0RE9NRE9N
U2VsZWN0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0
X2V4dGVudF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVNlbGVjdGlvbgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2Rv
bV9kb21fc2VsZWN0aW9uX2dldF9leHRlbnRfbm9kZShXZWJLaXRET01ET01TZWxlY3Rpb24qIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3NlbGVjdGlvbl9nZXRfZXh0ZW50X29mZnNl
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBB
ICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vs
b25nCit3ZWJraXRfZG9tX2RvbV9zZWxlY3Rpb25fZ2V0X2V4dGVudF9vZmZzZXQoV2ViS2l0RE9N
RE9NU2VsZWN0aW9uKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTVNlbGVjdGlvbl9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU2Vs
ZWN0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2M4
NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVNlbGVjdGlvblByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTURPTVNlbGVjdGlvblByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01ET01TZWxlY3Rpb25Q
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRE9NU2VsZWN0aW9uLmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTURPTVNlbGVjdGlvbi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTURPTVNlbGVjdGlvbiogd3JhcERPTVNlbGVjdGlvbihXZWJDb3JlOjpET01TZWxl
Y3Rpb24qKTsKK1dlYktpdERPTURPTVNlbGVjdGlvbioga2l0KFdlYkNvcmU6OkRPTVNlbGVjdGlv
biopOworV2ViQ29yZTo6RE9NU2VsZWN0aW9uKiBjb3JlKFdlYktpdERPTURPTVNlbGVjdGlvbiop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01TZWxlY3Rp
b25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURPTVN0cmluZ0xpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZh
MWEwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ0xpc3QuY3BwCkBAIC0wLDAg
KzEsMTY0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NU3RyaW5nTGlzdC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktp
dERPTURPTVN0cmluZ0xpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1NU
UklOR19MSVNUX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9i
aiwgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTElTVCwgV2ViS2l0RE9NRE9NU3RyaW5nTGlz
dFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0
ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+IGNvcmVPYmplY3Q7Cit9IFdl
YktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NRE9NU3RyaW5nTGlzdCoga2l0KFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIG9iaikKK3sK
KyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9E
T01fU1RSSU5HX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NU3RyaW5nTGlzdChvYmop
OworfQorCitXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBjb3JlKFdlYktpdERPTURPTVN0cmluZ0xp
c3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpET01TdHJpbmdMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogd3JhcERPTVN0cmluZ0xpc3QoV2Vi
Q29yZTo6RE9NU3RyaW5nTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19MSVNULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0
LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBF
KFdlYktpdERPTURPTVN0cmluZ0xpc3QsIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0LCBXRUJL
SVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5H
VEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOwor
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlKCk7CisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fc3RyaW5n
X2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRE9NU3RyaW5n
TGlzdCogc2VsZiA9IFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3Zh
bHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfZ2V0X2xlbmd0
aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21f
c3RyaW5nX2xpc3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7
CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fc3Ry
aW5nX2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTURPTVN0cmlu
Z0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fU1RSSU5HX0xJU1RfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RE9NU3RyaW5nTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBv
YmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9kb21fc3RyaW5nX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01ET01TdHJpbmdMaXN0Q2xhc3Mq
IHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdv
YmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlKSk7CisgICAg
Z29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2Nv
bnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2RvbV9z
dHJpbmdfbGlzdF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5n
dGgiLAorICAgICAgICAgICAgIkRPTVN0cmluZ0xpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3Vsb25nIERPTVN0cmluZ0xpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdf
TUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9pbml0KFdlYktpdERPTURP
TVN0cmluZ0xpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTElTVF9HRVRfUFJJVkFURShyZXF1ZXN0
KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTURPTVN0cmluZ0xpc3RQcml2YXRlKCk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9pdGVtKFdlYktpdERPTURPTVN0cmlu
Z0xpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fU1RSSU5HX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVN0cmluZ0xpc3QqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2di
b29sZWFuIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2NvbnRhaW5zKFdlYktpdERPTURPTVN0
cmluZ0xpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJpbmcpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX1NUUklOR19MSVNUKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc3RyaW5nLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RE9NU3RyaW5nTGlzdCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJpbmcg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5jb250YWlucyhjb252ZXJ0ZWRTdHJpbmcpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2d1bG9uZyB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTURP
TVN0cmluZ0xpc3QqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1NUUklO
R19MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ0xpc3QuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NU3RyaW5nTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjBkN2ZlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ0xpc3QuaApAQCAtMCww
ICsxLDg4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTURPTVN0cmluZ0xpc3RfaAorI2RlZmluZSBXZWJLaXRET01ET01TdHJpbmdMaXN0X2gKKwor
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX0xJU1QgICAgICAgICAgICAod2Vi
a2l0X2RvbV9kb21fc3RyaW5nX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9E
T01fU1RSSU5HX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTElTVCwgV2ViS2l0RE9NRE9NU3Ry
aW5nTGlzdCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1NUUklOR19MSVNUX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9E
T01fU1RSSU5HX0xJU1QsIFdlYktpdERPTURPTVN0cmluZ0xpc3RDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19ET01fU1RSSU5HX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdfTElTVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfRE9NX1NUUklOR19MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX0xJU1Qp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklO
R19MSVNULCBXZWJLaXRET01ET01TdHJpbmdMaXN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TURPTVN0cmluZ0xpc3QgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTURPTVN0cmluZ0xpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9N
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2RvbV9kb21fc3RyaW5nX2xpc3RfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fc3RyaW5nX2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01TdHJpbmdM
aXN0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9kb21fc3RyaW5nX2xpc3RfaXRlbShXZWJLaXRET01ET01TdHJpbmdMaXN0KiBzZWxmLCBndWxv
bmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2NvbnRhaW5z
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVN0cmluZ0xpc3QKKyAqIEBzdHJpbmc6IEEgI2dj
aGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0
X2NvbnRhaW5zKFdlYktpdERPTURPTVN0cmluZ0xpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJp
bmcpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2dldF9sZW5ndGg6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NU3RyaW5nTGlzdAorICoKKyAqIFJldHVybnM6IEEgI2d1
bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcK
K3dlYmtpdF9kb21fZG9tX3N0cmluZ19saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NRE9NU3RyaW5n
TGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01ET01TdHJpbmdMaXN0X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTGlzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTGlz
dFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWIzOTExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdMaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
RE9NU3RyaW5nTGlzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01ET01TdHJpbmdMaXN0UHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTVN0cmluZ0xpc3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NRE9NU3RyaW5nTGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTURPTVN0cmluZ0xpc3QqIHdyYXBET01TdHJpbmdMaXN0KFdlYkNvcmU6OkRPTVN0
cmluZ0xpc3QqKTsKK1dlYktpdERPTURPTVN0cmluZ0xpc3QqIGtpdChXZWJDb3JlOjpET01TdHJp
bmdMaXN0Kik7CitXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBjb3JlKFdlYktpdERPTURPTVN0cmlu
Z0xpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NRE9N
U3RyaW5nTGlzdFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01TdHJpbmdNYXAuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01TdHJpbmdNYXAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmMyNTNjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ01hcC5jcHAKQEAg
LTAsMCArMSwxMDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01TdHJpbmdNYXAuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJX
ZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRE9N
X1NUUklOR19NQVBfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19NQVAsIFdlYktpdERPTURPTVN0cmluZ01h
cFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRl
IHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTWFwPiBjb3JlT2JqZWN0OworfSBXZWJL
aXRET01ET01TdHJpbmdNYXBQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NRE9NU3RyaW5nTWFwKiBraXQoV2ViQ29yZTo6RE9NU3RyaW5nTWFwKiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fRE9NX1NU
UklOR19NQVAocmV0KTsKKworICAgIHJldHVybiB3cmFwRE9NU3RyaW5nTWFwKG9iaik7Cit9CisK
K1dlYkNvcmU6OkRPTVN0cmluZ01hcCogY29yZShXZWJLaXRET01ET01TdHJpbmdNYXAqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01TdHJp
bmdNYXAqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQor
CitXZWJLaXRET01ET01TdHJpbmdNYXAqIHdyYXBET01TdHJpbmdNYXAoV2ViQ29yZTo6RE9NU3Ry
aW5nTWFwKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9ET01fU1RSSU5HX01BUChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBF
X0RPTV9TVFJJTkdfTUFQLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURPTVN0
cmluZ01hcCwgd2Via2l0X2RvbV9kb21fc3RyaW5nX21hcCwgV0VCS0lUX0RPTV9UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fc3RyaW5nX21hcF9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fRE9NX1NUUklOR19NQVBfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdl
YktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKwor
ICAgIHByaXYtPn5XZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlKCk7CisgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV9kb21fc3RyaW5nX21hcF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kb21fc3RyaW5nX21hcF9j
b25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdP
YmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0
KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29u
c3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9ET01fU1RSSU5HX01BUF9HRVRfUFJJVkFURShvYmplY3QpOworICAg
IHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01TdHJpbmdNYXAqPihX
RUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9tX3N0cmluZ19tYXBf
Y2xhc3NfaW5pdChXZWJLaXRET01ET01TdHJpbmdNYXBDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2Yo
V2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3Ry
dWN0b3IgPSB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2NvbnN0cnVjdG9yOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2ZpbmFsaXplOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV9zdHJpbmdfbWFwX2luaXQoV2ViS2l0RE9N
RE9NU3RyaW5nTWFwKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTURPTVN0cmluZ01hcFByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTUFQX0dFVF9QUklWQVRFKHJlcXVlc3Qp
OworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NRE9NU3RyaW5nTWFwUHJpdmF0ZSgpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0SXRlcmFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFwLmgKc2ltaWxhcml0eSBp
bmRleCA1NiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEl0ZXJhYmxlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5n
TWFwLmgKaW5kZXggN2M5NWM2YS4uYmU4MjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEl0ZXJhYmxlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01ET01TdHJpbmdNYXAuaApAQCAtMTgsOCArMTgsOCBAQAogICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEl0ZXJhYmxlX2gK
LSNkZWZpbmUgV2ViS2l0RE9NVGVzdEl0ZXJhYmxlX2gKKyNpZm5kZWYgV2ViS2l0RE9NRE9NU3Ry
aW5nTWFwX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9NU3RyaW5nTWFwX2gKIAogI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQogCkBAIC0yOSwyNSArMjksMjUgQEAKIAogR19CRUdJTl9E
RUNMUwogCi0jZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVNUX0lURVJBQkxFICAgICAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9pdGVyYWJsZV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfSVRFUkFCTEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfSVRFUkFCTEUsIFdlYktpdERPTVRlc3RJdGVy
YWJsZSkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9JVEVSQUJMRV9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9J
VEVSQUJMRSwgV2ViS2l0RE9NVGVzdEl0ZXJhYmxlQ2xhc3MpCi0jZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVTVF9JVEVSQUJMRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JVEVSQUJMRSkpCi0jZGVmaW5lIFdFQktJVF9E
T01fSVNfVEVTVF9JVEVSQUJMRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JVEVSQUJMRSkpCi0jZGVmaW5lIFdFQktJ
VF9ET01fVEVTVF9JVEVSQUJMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9JVEVSQUJMRSwgV2ViS2l0RE9NVGVz
dEl0ZXJhYmxlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9NX1NUUklOR19NQVAg
ICAgICAgICAgICAod2Via2l0X2RvbV9kb21fc3RyaW5nX21hcF9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0RPTV9TVFJJTkdfTUFQKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX01BUCwgV2Vi
S2l0RE9NRE9NU3RyaW5nTWFwKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU1RSSU5HX01BUF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfRE9NX1NUUklOR19NQVAsIFdlYktpdERPTURPTVN0cmluZ01hcENsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0RPTV9TVFJJTkdfTUFQKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET01fU1RSSU5HX01BUCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX1NUUklOR19NQVBfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RPTV9TVFJJTkdf
TUFQKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET01fU1RSSU5HX01BUF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1NU
UklOR19NQVAsIFdlYktpdERPTURPTVN0cmluZ01hcENsYXNzKSkKIAotc3RydWN0IF9XZWJLaXRE
T01UZXN0SXRlcmFibGUgeworc3RydWN0IF9XZWJLaXRET01ET01TdHJpbmdNYXAgewogICAgIFdl
YktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7CiB9OwogCi1zdHJ1Y3QgX1dlYktpdERPTVRl
c3RJdGVyYWJsZUNsYXNzIHsKK3N0cnVjdCBfV2ViS2l0RE9NRE9NU3RyaW5nTWFwQ2xhc3Mgewog
ICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKIH07CiAKIFdFQktJVF9BUEkg
R1R5cGUKLXdlYmtpdF9kb21fdGVzdF9pdGVyYWJsZV9nZXRfdHlwZSh2b2lkKTsKK3dlYmtpdF9k
b21fZG9tX3N0cmluZ19tYXBfZ2V0X3R5cGUodm9pZCk7CiAKIEdfRU5EX0RFQ0xTCiAKICNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KLSNlbmRpZiAvKiBXZWJLaXRET01U
ZXN0SXRlcmFibGVfaCAqLworI2VuZGlmIC8qIFdlYktpdERPTURPTVN0cmluZ01hcF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NU3RyaW5nTWFw
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOWY5YzUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVN0cmluZ01hcFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURP
TVN0cmluZ01hcFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2YXRl
X2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRE9NU3RyaW5nTWFwLmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTURPTVN0cmluZ01hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTURPTVN0cmluZ01hcCogd3JhcERPTVN0cmluZ01hcChXZWJDb3JlOjpET01TdHJpbmdNYXAq
KTsKK1dlYktpdERPTURPTVN0cmluZ01hcCoga2l0KFdlYkNvcmU6OkRPTVN0cmluZ01hcCopOwor
V2ViQ29yZTo6RE9NU3RyaW5nTWFwKiBjb3JlKFdlYktpdERPTURPTVN0cmluZ01hcCopOworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01ET01TdHJpbmdNYXBQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NVG9rZW5MaXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NVG9r
ZW5MaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTEyNjg1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3QuY3BwCkBAIC0wLDAgKzEsMjg3IEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRE9NVG9rZW5MaXN0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NVG9r
ZW5MaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNUX0dF
VF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RP
TV9UWVBFX0RPTV9UT0tFTl9MSVNULCBXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZSB7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkRPTVRva2VuTGlzdD4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NRE9NVG9rZW5M
aXN0UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURPTVRva2VuTGlz
dCoga2l0KFdlYkNvcmU6OkRPTVRva2VuTGlzdCogb2JqKQoreworICAgIGlmICghb2JqKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6
Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNUKHJldCk7
CisKKyAgICByZXR1cm4gd3JhcERPTVRva2VuTGlzdChvYmopOworfQorCitXZWJDb3JlOjpET01U
b2tlbkxpc3QqIGNvcmUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RE9NVG9rZW5MaXN0Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRE9N
VG9rZW5MaXN0KiB3cmFwRE9NVG9rZW5MaXN0KFdlYkNvcmU6OkRPTVRva2VuTGlzdCogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
RE9NX1RPS0VOX0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElT
VCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01ET01Ub2tlbkxpc3QsIHdlYmtp
dF9kb21fZG9tX3Rva2VuX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKKyAgICBQUk9QX1ZBTFVFLAorfTsKKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fRE9NX1RPS0VOX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYt
Pn5XZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9kb21fdG9rZW5fbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3NldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiA9IFdF
QktJVF9ET01fRE9NX1RPS0VOX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9kb21fdG9rZW5f
bGlzdF9zZXRfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiA9IFdFQktJ
VF9ET01fRE9NX1RPS0VOX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVl
LCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X3ZhbHVlKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2NvbnN0
cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVj
dENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9i
amVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJp
di0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVRva2VuTGlzdCo+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJu
IG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9jbGFz
c19pbml0KFdlYktpdERPTURPTVRva2VuTGlzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJL
aXRET01ET01Ub2tlbkxpc3RQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3Rv
ciA9IHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfZmluYWxpemU7CisgICAg
Z29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
ZG9tX3Rva2VuX2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAg
ICAgICAgICAiRE9NVG9rZW5MaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1
bG9uZyBET01Ub2tlbkxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWx1
ZSIsCisgICAgICAgICAgICAiRE9NVG9rZW5MaXN0OnZhbHVlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBET01Ub2tlbkxpc3Q6dmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9kb21fdG9rZW5fbGlzdF9pbml0KFdlYktpdERPTURPTVRva2VuTGlzdCogcmVxdWVz
dCkKK3sKKyAgICBXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9ET01fVE9LRU5fTElTVF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdl
YktpdERPTURPTVRva2VuTGlzdFByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9t
X3Rva2VuX2xpc3RfaXRlbShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIGd1bG9uZyBpbmRl
eCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPml0ZW0oaW5kZXgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV90b2tl
bl9saXN0X2NvbnRhaW5zKFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIq
IHRva2VuKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9UT0tFTl9MSVNUKHNlbGYp
LCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodG9rZW4sIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpET01Ub2tlbkxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVG9rZW4gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodG9rZW4pOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNvbnRhaW5zKGNvbnZlcnRlZFRva2VuKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3RfYWRk
KFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwgR0Vycm9yKiogZXJyb3IsIC4uLikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9UT0tFTl9MSVNUKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpET01Ub2tlbkxpc3QqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgdmFfbGlzdCB2YXJpYWRpY1BhcmFtZXRlckxp
c3Q7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBjb252ZXJ0ZWRUb2tlbnM7CisgICAgdmFfc3Rh
cnQodmFyaWFkaWNQYXJhbWV0ZXJMaXN0LCBlcnJvcik7CisgICAgd2hpbGUgKGdjaGFyKiB2YXJp
YWRpY1BhcmFtZXRlciA9IHZhX2FyZyh2YXJpYWRpY1BhcmFtZXRlckxpc3QsIGdjaGFyKikpCisg
ICAgICAgIGNvbnZlcnRlZFRva2Vucy5hcHBlbmQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhcmlh
ZGljUGFyYW1ldGVyKSk7CisgICAgdmFfZW5kKHZhcmlhZGljUGFyYW1ldGVyTGlzdCk7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+YWRkKFdURk1vdmUoY29u
dmVydGVkVG9rZW5zKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV90b2tlbl9s
aXN0X3JlbW92ZShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIEdFcnJvcioqIGVycm9yLCAu
Li4pCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RE9NVG9r
ZW5MaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHZhX2xpc3QgdmFyaWFkaWNQ
YXJhbWV0ZXJMaXN0OworICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gY29udmVydGVkVG9rZW5zOwor
ICAgIHZhX3N0YXJ0KHZhcmlhZGljUGFyYW1ldGVyTGlzdCwgZXJyb3IpOworICAgIHdoaWxlIChn
Y2hhciogdmFyaWFkaWNQYXJhbWV0ZXIgPSB2YV9hcmcodmFyaWFkaWNQYXJhbWV0ZXJMaXN0LCBn
Y2hhciopKQorICAgICAgICBjb252ZXJ0ZWRUb2tlbnMuYXBwZW5kKFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YXJpYWRpY1BhcmFtZXRlcikpOworICAgIHZhX2VuZCh2YXJpYWRpY1BhcmFtZXRlckxp
c3QpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnJlbW92
ZShXVEZNb3ZlKGNvbnZlcnRlZFRva2VucyksIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fZG9tX3Rva2VuX2xpc3RfdG9nZ2xlKFdlYktpdERPTURPTVRva2VuTGlzdCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHRva2VuLCBnYm9vbGVhbiBmb3JjZSwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1RPS0VOX0xJU1Qoc2VsZiksIEZBTFNFKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCh0b2tlbiwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RE9NVG9rZW5M
aXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFRva2VuID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRva2VuKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT50b2dnbGUoY29u
dmVydGVkVG9rZW4sIGZvcmNlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9yZXBsYWNlKFdlYktpdERPTURPTVRva2VuTGlz
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHRva2VuLCBjb25zdCBnY2hhciogbmV3VG9rZW4sIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1RPS0VOX0xJU1Qoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodG9rZW4pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmV3
VG9rZW4pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdl
YkNvcmU6OkRPTVRva2VuTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRUb2tlbiA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0b2tlbik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmV3VG9rZW4gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
bmV3VG9rZW4pOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0t
PnJlcGxhY2UoY29udmVydGVkVG9rZW4sIGNvbnZlcnRlZE5ld1Rva2VuLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQor
CitndWxvbmcgd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTURP
TVRva2VuTGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fVE9LRU5f
TElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NVG9rZW5MaXN0KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9nZXRf
dmFsdWUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0RPTV9UT0tFTl9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01Ub2tlbkxp
c3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3NldF92YWx1ZShXZWJLaXRET01ET01Ub2tl
bkxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPTV9UT0tFTl9MSVNUKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpET01Ub2tlbkxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldFZhbHVlKGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01ET01Ub2tlbkxpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NVG9rZW5MaXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMGZhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9N
VG9rZW5MaXN0LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRE9NVG9rZW5MaXN0X2gKKyNkZWZpbmUgV2ViS2l0RE9N
RE9NVG9rZW5MaXN0X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElT
VCAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fRE9NX1RPS0VOX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNULCBX
ZWJLaXRET01ET01Ub2tlbkxpc3QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNU
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCwgV2ViS2l0RE9NRE9NVG9rZW5MaXN0Q2xhc3MpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX1RPS0VOX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9UT0tFTl9MSVNU
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ET01fVE9LRU5fTElTVF9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VO
X0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9UT0tFTl9MSVNUX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET01f
VE9LRU5fTElTVCwgV2ViS2l0RE9NRE9NVG9rZW5MaXN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTURPTVRva2VuTGlzdCB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NRE9NVG9rZW5MaXN0Q2xhc3MgeworICAgIFdlYktpdERP
TU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21fZG9tX3Rva2VuX2xpc3RfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fdG9rZW5fbGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVRva2VuTGlz
dAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
ZG9tX3Rva2VuX2xpc3RfaXRlbShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIGd1bG9uZyBp
bmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9jb250YWluczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqIEB0b2tlbjogQSAjZ2NoYXIKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9jb250YWlu
cyhXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0b2tlbik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9hZGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NVG9rZW5MaXN0CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqIEAuLi46IGxpc3Qgb2YgI2dj
aGFyIGVuZGVkIGJ5ICVOVUxMLgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2FkZChXZWJLaXRET01ET01U
b2tlbkxpc3QqIHNlbGYsIEdFcnJvcioqIGVycm9yLCAuLi4pOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3Rva2VuX2xpc3RfcmVtb3ZlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVRva2Vu
TGlzdAorICogQGVycm9yOiAjR0Vycm9yCisgKiBALi4uOiBsaXN0IG9mICNnY2hhciBlbmRlZCBi
eSAlTlVMTC4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9yZW1vdmUoV2ViS2l0RE9NRE9NVG9rZW5MaXN0
KiBzZWxmLCBHRXJyb3IqKiBlcnJvciwgLi4uKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV90
b2tlbl9saXN0X3RvZ2dsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAq
IEB0b2tlbjogQSAjZ2NoYXIKKyAqIEBmb3JjZTogQSAjZ2Jvb2xlYW4KKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0
X3RvZ2dsZShXZWJLaXRET01ET01Ub2tlbkxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB0b2tlbiwg
Z2Jvb2xlYW4gZm9yY2UsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
bV90b2tlbl9saXN0X3JlcGxhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0
CisgKiBAdG9rZW46IEEgI2djaGFyCisgKiBAbmV3VG9rZW46IEEgI2djaGFyCisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9yZXBsYWNlKFdlYktpdERPTURPTVRva2VuTGlz
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHRva2VuLCBjb25zdCBnY2hhciogbmV3VG9rZW4sIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF9sZW5n
dGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0CisgKgorICogUmV0dXJuczog
QSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1
bG9uZword2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTURPTVRv
a2VuTGlzdCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fdG9rZW5fbGlzdF9nZXRf
dmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X2dldF92YWx1ZShXZWJLaXRET01ET01U
b2tlbkxpc3QqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3Rva2VuX2xpc3Rfc2V0
X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVRva2VuTGlzdAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2RvbV90b2tlbl9saXN0X3NldF92YWx1ZShXZWJLaXRET01ET01Ub2tlbkxp
c3QqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01ET01U
b2tlbkxpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURPTVRva2VuTGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wNmExNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01ET01Ub2tlbkxpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRE9N
VG9rZW5MaXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0RPTVRva2VuTGlzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01ET01Ub2tlbkxpc3QuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01ET01Ub2tlbkxpc3QqIHdyYXBET01Ub2tlbkxpc3QoV2ViQ29y
ZTo6RE9NVG9rZW5MaXN0Kik7CitXZWJLaXRET01ET01Ub2tlbkxpc3QqIGtpdChXZWJDb3JlOjpE
T01Ub2tlbkxpc3QqKTsKK1dlYkNvcmU6OkRPTVRva2VuTGlzdCogY29yZShXZWJLaXRET01ET01U
b2tlbkxpc3QqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9N
RE9NVG9rZW5MaXN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvdy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTVdpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTBmNDZiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93LmNwcApAQCAtMCwwICsx
LDE1NjkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01ET01XaW5kb3cuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQmFyUHJvcFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURP
TUFwcGxpY2F0aW9uQ2FjaGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NU2VsZWN0
aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURPTVdpbmRvd1ByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Eb2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
bGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSGlzdG9y
eVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU2Ny
ZWVuUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01TdG9yYWdlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVN0eWxlTWVkaWFQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NV2ViS2l0UG9pbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTURPTVdpbmRvd1Vuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX0RPTV9XSU5ET1dfR0VU
X1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9N
X1RZUEVfRE9NX1dJTkRPVywgV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0ZSkKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTURPTVdpbmRvd1ByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpE
T01XaW5kb3c+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTURPTVdpbmRvd1ByaXZhdGU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01ET01XaW5kb3cqIGtpdChXZWJDb3JlOjpET01X
aW5kb3cqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1
cm4gV0VCS0lUX0RPTV9ET01fV0lORE9XKHJldCk7CisKKyAgICByZXR1cm4gd3JhcERPTVdpbmRv
dyhvYmopOworfQorCitXZWJDb3JlOjpET01XaW5kb3cqIGNvcmUoV2ViS2l0RE9NRE9NV2luZG93
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RE9NV2luZG93Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NRE9NV2luZG93KiB3cmFwRE9NV2luZG93KFdlYkNvcmU6OkRPTVdpbmRv
dyogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fRE9NX1dJTkRPVyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5E
T1csICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZGlz
cGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQq
IGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50
ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkRPTVdpbmRvdyo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZl
bnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2Rl
LCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9tX3dpbmRvd19hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpET01XaW5k
b3cqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpET01XaW5kb3cqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9kb21fd2luZG93X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBo
YW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVdpbmRvdyo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSog
aWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9kb21fd2lu
ZG93X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01ET01XaW5kb3csIHdl
YmtpdF9kb21fZG9tX3dpbmRvdywgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRf
SU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9TQ1JFRU4sCisg
ICAgUFJPUF9ISVNUT1JZLAorICAgIFBST1BfTE9DQVRJT05CQVIsCisgICAgUFJPUF9NRU5VQkFS
LAorICAgIFBST1BfUEVSU09OQUxCQVIsCisgICAgUFJPUF9TQ1JPTExCQVJTLAorICAgIFBST1Bf
U1RBVFVTQkFSLAorICAgIFBST1BfVE9PTEJBUiwKKyAgICBQUk9QX05BVklHQVRPUiwKKyAgICBQ
Uk9QX0NMSUVOVF9JTkZPUk1BVElPTiwKKyAgICBQUk9QX0ZSQU1FX0VMRU1FTlQsCisgICAgUFJP
UF9PRkZTQ1JFRU5fQlVGRkVSSU5HLAorICAgIFBST1BfT1VURVJfSEVJR0hULAorICAgIFBST1Bf
T1VURVJfV0lEVEgsCisgICAgUFJPUF9JTk5FUl9IRUlHSFQsCisgICAgUFJPUF9JTk5FUl9XSURU
SCwKKyAgICBQUk9QX1NDUkVFTl9YLAorICAgIFBST1BfU0NSRUVOX1ksCisgICAgUFJPUF9TQ1JF
RU5fTEVGVCwKKyAgICBQUk9QX1NDUkVFTl9UT1AsCisgICAgUFJPUF9TQ1JPTExfWCwKKyAgICBQ
Uk9QX1NDUk9MTF9ZLAorICAgIFBST1BfUEFHRV9YX09GRlNFVCwKKyAgICBQUk9QX1BBR0VfWV9P
RkZTRVQsCisgICAgUFJPUF9DTE9TRUQsCisgICAgUFJPUF9MRU5HVEgsCisgICAgUFJPUF9OQU1F
LAorICAgIFBST1BfU1RBVFVTLAorICAgIFBST1BfREVGQVVMVF9TVEFUVVMsCisgICAgUFJPUF9T
RUxGLAorICAgIFBST1BfV0lORE9XLAorICAgIFBST1BfRlJBTUVTLAorICAgIFBST1BfT1BFTkVS
LAorICAgIFBST1BfUEFSRU5ULAorICAgIFBST1BfVE9QLAorICAgIFBST1BfRE9DVU1FTlQsCisg
ICAgUFJPUF9TVFlMRV9NRURJQSwKKyAgICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTywKKyAgICBQ
Uk9QX0FQUExJQ0FUSU9OX0NBQ0hFLAorICAgIFBST1BfU0VTU0lPTl9TVE9SQUdFLAorICAgIFBS
T1BfTE9DQUxfU1RPUkFHRSwKKyAgICBQUk9QX09SSUVOVEFUSU9OLAorICAgIFBST1BfUEVSRk9S
TUFOQ0UsCisgICAgUFJPUF9TUEVFQ0hfU1lOVEhFU0lTLAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9kb21fd2luZG93X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRET01ET01XaW5kb3dQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fV0lORE9XX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRE9NV2luZG93UHJp
dmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZG9tX3dpbmRvd19wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmID0gV0VCS0lUX0RPTV9ET01fV0lORE9XKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0
X2RvbV9kb21fd2luZG93X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RBVFVTOgorICAgICAgICB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfc2V0X3N0YXR1cyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfU1RBVFVTOgorICAgICAg
ICB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X2RlZmF1bHRfc3RhdHVzKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9kb21fd2luZG93X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTURP
TVdpbmRvdyogc2VsZiA9IFdFQktJVF9ET01fRE9NX1dJTkRPVyhvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NDUkVFTjoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbihzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ISVNUT1JZOgorICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfaGlzdG9yeShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT0NBVElPTkJBUjoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2xv
Y2F0aW9uYmFyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FTlVCQVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9tZW51YmFyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BFUlNP
TkFMQkFSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfcGVyc29uYWxiYXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU0NST0xMQkFSUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbGJhcnMoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU1RBVFVTQkFSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3RhdHVzYmFyKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1RPT0xCQVI6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF90b29sYmFyKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BVklHQVRPUjoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X25hdmlnYXRvcihzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTElFTlRfSU5GT1JNQVRJT046CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9j
bGllbnRfaW5mb3JtYXRpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RlJBTUVfRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X2ZyYW1lX2VsZW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfT0ZGU0NSRUVOX0JVRkZFUklORzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9vZmZzY3JlZW5fYnVmZmVy
aW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09VVEVSX0hFSUdIVDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF9vdXRlcl9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1VU
RVJfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfb3V0ZXJfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSU5ORVJfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X2lubmVyX2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9JTk5FUl9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9pbm5lcl93aWR0aChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JFRU5fWDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5feChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JFRU5fWToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5feShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JFRU5fTEVGVDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5fbGVm
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JFRU5fVE9QOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Nj
cmVlbl90b3Aoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX1g6
CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfc2Nyb2xsX3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xM
X1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19nZXRfc2Nyb2xsX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFH
RV9YX09GRlNFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9wYWdlX3hfb2Zmc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1BBR0VfWV9PRkZTRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFnZV95X29mZnNldChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9DTE9TRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY2xvc2VkKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxv
bmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbmFtZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEFUVVM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3RhdHVzKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfU1RBVFVTOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2RlZmF1bHRfc3Rh
dHVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEY6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zZWxm
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJTkRPVzoKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3dpbmRv
dyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkFNRVM6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9mcmFt
ZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1BFTkVSOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3Bl
bmVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBUkVOVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Bh
cmVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT1A6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF90b3Ao
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9DVU1FTlQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9kb2N1
bWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVFlMRV9NRURJQToK
KyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3N0eWxlX21lZGlhKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RF
VklDRV9QSVhFTF9SQVRJTzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X2RldmljZV9waXhlbF9yYXRpbyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9BUFBMSUNBVElPTl9DQUNIRToKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2FwcGxpY2F0aW9u
X2NhY2hlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFU1NJT05fU1RP
UkFHRToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZ2V0X3Nlc3Npb25fc3RvcmFnZShzZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9MT0NBTF9TVE9SQUdFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbG9jYWxfc3RvcmFnZShzZWxmLCBu
dWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PUklFTlRBVElPTjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9v
cmllbnRhdGlvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QRVJGT1JN
QU5DRToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZ2V0X3BlcmZvcm1hbmNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NQRUVDSF9TWU5USEVTSVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zcGVlY2hfc3ludGhlc2lzKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY29uc3RydWN0
b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29u
c3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0
ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9kb21fd2luZG93X3BhcmVudF9jbGFzcyktPmNv
bnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVy
dGllcyk7CisKKyAgICBXZWJLaXRET01ET01XaW5kb3dQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9ET01fV0lORE9XX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRPTVdpbmRvdyo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVj
dCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5j
b3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X2NsYXNzX2luaXQoV2ViS2l0RE9NRE9NV2lu
ZG93Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTURPTVdpbmRvd1ByaXZhdGUpKTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9kb21fd2luZG93X2Nv
bnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9TQ1JFRU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAi
c2NyZWVuIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2NyZWVuIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NU2NyZWVuKiBET01XaW5kb3c6c2NyZWVuIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9TQ1JFRU4sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ISVNUT1JZLAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgImhpc3RvcnkiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpo
aXN0b3J5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSGlzdG9yeSogRE9NV2lu
ZG93Omhpc3RvcnkiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hJU1RPUlksCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MT0NB
VElPTkJBUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJsb2Nh
dGlvbmJhciIsCisgICAgICAgICAgICAiRE9NV2luZG93OmxvY2F0aW9uYmFyIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQmFyUHJvcCogRE9NV2luZG93OmxvY2F0aW9uYmFyIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01FTlVCQVIsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibWVudWJhciIsCisgICAgICAgICAg
ICAiRE9NV2luZG93Om1lbnViYXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01C
YXJQcm9wKiBET01XaW5kb3c6bWVudWJhciIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
QkFSX1BST1AsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9QRVJTT05BTEJBUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJwZXJzb25hbGJhciIsCisgICAgICAgICAgICAiRE9NV2luZG93OnBlcnNvbmFs
YmFyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQmFyUHJvcCogRE9NV2luZG93
OnBlcnNvbmFsYmFyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9CQVJfUFJPUCwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ND
Uk9MTEJBUlMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic2Ny
b2xsYmFycyIsCisgICAgICAgICAgICAiRE9NV2luZG93OnNjcm9sbGJhcnMiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01CYXJQcm9wKiBET01XaW5kb3c6c2Nyb2xsYmFycyIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQkFSX1BST1AsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVEFUVVNCQVIsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic3RhdHVzYmFyIiwKKyAgICAgICAg
ICAgICJET01XaW5kb3c6c3RhdHVzYmFyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NQmFyUHJvcCogRE9NV2luZG93OnN0YXR1c2JhciIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfQkFSX1BST1AsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9UT09MQkFSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgInRvb2xiYXIiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzp0b29sYmFyIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQmFyUHJvcCogRE9NV2luZG93OnRvb2xi
YXIiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0JBUl9QUk9QLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFWSUdBVE9SLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm5hdmlnYXRvciIsCisg
ICAgICAgICAgICAiRE9NV2luZG93Om5hdmlnYXRvciIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTU5hdmlnYXRvciogRE9NV2luZG93Om5hdmlnYXRvciIsCisgICAgICAgICAgICBX
RUJLSVRfRE9NX1RZUEVfTkFWSUdBVE9SLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0xJRU5UX0lORk9STUFUSU9OLAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNsaWVudC1pbmZvcm1hdGlvbiIsCisg
ICAgICAgICAgICAiRE9NV2luZG93OmNsaWVudC1pbmZvcm1hdGlvbiIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTU5hdmlnYXRvciogRE9NV2luZG93OmNsaWVudC1pbmZvcm1hdGlv
biIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTkFWSUdBVE9SLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRlJBTUVfRUxFTUVO
VCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJmcmFtZS1lbGVt
ZW50IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6ZnJhbWUtZWxlbWVudCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIERPTVdpbmRvdzpmcmFtZS1lbGVtZW50IiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT0ZGU0NSRUVOX0JVRkZFUklO
RywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAib2Zmc2NyZWVu
LWJ1ZmZlcmluZyIsCisgICAgICAgICAgICAiRE9NV2luZG93Om9mZnNjcmVlbi1idWZmZXJpbmci
LAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBET01XaW5kb3c6b2Zmc2NyZWVuLWJ1
ZmZlcmluZyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09VVEVSX0hFSUdIVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAib3V0ZXItaGVpZ2h0IiwKKyAgICAgICAgICAg
ICJET01XaW5kb3c6b3V0ZXItaGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcg
RE9NV2luZG93Om91dGVyLWhlaWdodCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX09VVEVSX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAg
ICAgICJvdXRlci13aWR0aCIsCisgICAgICAgICAgICAiRE9NV2luZG93Om91dGVyLXdpZHRoIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgRE9NV2luZG93Om91dGVyLXdpZHRoIiwKKyAg
ICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSU5ORVJfSEVJR0hULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJpbm5lci1oZWlnaHQiLAorICAgICAg
ICAgICAgIkRPTVdpbmRvdzppbm5lci1oZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
bG9uZyBET01XaW5kb3c6aW5uZXItaGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19N
QVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfSU5ORVJfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgImlubmVyLXdpZHRoIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6aW5uZXItd2lk
dGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6aW5uZXItd2lkdGgi
LAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JFRU5fWCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2NyZWVuLXgiLAorICAgICAgICAg
ICAgIkRPTVdpbmRvdzpzY3JlZW4teCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERP
TVdpbmRvdzpzY3JlZW4teCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1NDUkVFTl9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3Jl
ZW4teSIsCisgICAgICAgICAgICAiRE9NV2luZG93OnNjcmVlbi15IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2xvbmcgRE9NV2luZG93OnNjcmVlbi15IiwKKyAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU0NSRUVOX0xFRlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25n
KAorICAgICAgICAgICAgInNjcmVlbi1sZWZ0IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2Ny
ZWVuLWxlZnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6c2NyZWVu
LWxlZnQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JFRU5fVE9Q
LAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JlZW4tdG9wIiwK
KyAgICAgICAgICAgICJET01XaW5kb3c6c2NyZWVuLXRvcCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdsb25nIERPTVdpbmRvdzpzY3JlZW4tdG9wIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywg
R19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfU0NST0xMX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgInNjcm9sbC14IiwKKyAgICAgICAgICAgICJET01XaW5kb3c6c2Nyb2xsLXgiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6c2Nyb2xsLXgiLAorICAgICAg
ICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JPTExfWSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2Nyb2xsLXkiLAorICAgICAgICAgICAgIkRPTVdp
bmRvdzpzY3JvbGwteSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIERPTVdpbmRvdzpz
Y3JvbGwteSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBR0VfWF9P
RkZTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInBhZ2UteC1v
ZmZzZXQiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpwYWdlLXgtb2Zmc2V0IiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2xvbmcgRE9NV2luZG93OnBhZ2UteC1vZmZzZXQiLAorICAgICAgICAg
ICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQUdFX1lfT0ZGU0VULAorICAgICAgICBnX3Bh
cmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJwYWdlLXktb2Zmc2V0IiwKKyAgICAgICAgICAg
ICJET01XaW5kb3c6cGFnZS15LW9mZnNldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25n
IERPTVdpbmRvdzpwYWdlLXktb2Zmc2V0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhM
T05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQ0xPU0VELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAg
ICAgICJjbG9zZWQiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpjbG9zZWQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnYm9vbGVhbiBET01XaW5kb3c6Y2xvc2VkIiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAi
bGVuZ3RoIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6bGVuZ3RoIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3Vsb25nIERPTVdpbmRvdzpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhV
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAibmFtZSIsCisgICAgICAgICAgICAiRE9NV2luZG93Om5hbWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIERPTVdpbmRvdzpuYW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NUQVRV
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzdGF0dXMiLAor
ICAgICAgICAgICAgIkRPTVdpbmRvdzpzdGF0dXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIERPTVdpbmRvdzpzdGF0dXMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVF9TVEFU
VVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGVmYXVsdC1z
dGF0dXMiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpkZWZhdWx0LXN0YXR1cyIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogRE9NV2luZG93OmRlZmF1bHQtc3RhdHVzIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NFTEYsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAg
ICAgICAic2VsZiIsCisgICAgICAgICAgICAiRE9NV2luZG93OnNlbGYiLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01ET01XaW5kb3cqIERPTVdpbmRvdzpzZWxmIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9XLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lORE9XLAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIndpbmRvdyIsCisgICAgICAgICAgICAiRE9NV2lu
ZG93OndpbmRvdyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVdpbmRvdyog
RE9NV2luZG93OndpbmRvdyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRP
VywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0ZSQU1FUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJm
cmFtZXMiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpmcmFtZXMiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01ET01XaW5kb3cqIERPTVdpbmRvdzpmcmFtZXMiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PUEVORVIsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAib3BlbmVyIiwKKyAgICAgICAgICAgICJET01XaW5k
b3c6b3BlbmVyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NV2luZG93KiBE
T01XaW5kb3c6b3BlbmVyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9X
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfUEFSRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInBh
cmVudCIsCisgICAgICAgICAgICAiRE9NV2luZG93OnBhcmVudCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTURPTVdpbmRvdyogRE9NV2luZG93OnBhcmVudCIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RPUCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJ0b3AiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzp0b3Ai
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01XaW5kb3cqIERPTVdpbmRvdzp0
b3AiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ET0NVTUVOVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJkb2N1bWVudCIsCisg
ICAgICAgICAgICAiRE9NV2luZG93OmRvY3VtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NRG9jdW1lbnQqIERPTVdpbmRvdzpkb2N1bWVudCIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfRE9DVU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9TVFlMRV9NRURJQSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJzdHlsZS1tZWRpYSIsCisgICAgICAgICAgICAiRE9NV2lu
ZG93OnN0eWxlLW1lZGlhIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NU3R5bGVN
ZWRpYSogRE9NV2luZG93OnN0eWxlLW1lZGlhIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9TVFlMRV9NRURJQSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTywKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2RvdWJsZSgKKyAgICAgICAgICAgICJkZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICAgICAgICAg
IkRPTVdpbmRvdzpkZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICAgICAgICAgInJlYWQtb25seSBn
ZG91YmxlIERPTVdpbmRvdzpkZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICAgICAgICAgLUdfTUFY
RE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0FQUExJQ0FUSU9OX0NBQ0hFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImFwcGxpY2F0aW9uLWNhY2hlIiwKKyAgICAg
ICAgICAgICJET01XaW5kb3c6YXBwbGljYXRpb24tY2FjaGUiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKiBET01XaW5kb3c6YXBwbGljYXRpb24t
Y2FjaGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9BUFBMSUNBVElPTl9DQUNI
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1NFU1NJT05fU1RPUkFHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJzZXNzaW9uLXN0b3JhZ2UiLAorICAgICAgICAgICAgIkRPTVdpbmRvdzpzZXNzaW9u
LXN0b3JhZ2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01TdG9yYWdlKiBET01X
aW5kb3c6c2Vzc2lvbi1zdG9yYWdlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TVE9S
QUdFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTE9DQUxfU1RPUkFHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJsb2NhbC1zdG9yYWdlIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6bG9jYWwtc3Rv
cmFnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVN0b3JhZ2UqIERPTVdpbmRv
dzpsb2NhbC1zdG9yYWdlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9TVE9SQUdFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
T1JJRU5UQVRJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIm9y
aWVudGF0aW9uIiwKKyAgICAgICAgICAgICJET01XaW5kb3c6b3JpZW50YXRpb24iLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnbG9uZyBET01XaW5kb3c6b3JpZW50YXRpb24iLAorICAgICAgICAg
ICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QRVJGT1JNQU5DRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJwZXJmb3JtYW5jZSIsCisgICAgICAgICAgICAi
RE9NV2luZG93OnBlcmZvcm1hbmNlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
UGVyZm9ybWFuY2UqIERPTVdpbmRvdzpwZXJmb3JtYW5jZSIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfUEVSRk9STUFOQ0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9TUEVFQ0hfU1lOVEhFU0lTLAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInNwZWVjaC1zeW50aGVzaXMiLAorICAgICAgICAg
ICAgIkRPTVdpbmRvdzpzcGVlY2gtc3ludGhlc2lzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBET01XaW5kb3c6c3BlZWNoLXN5bnRoZXNpcyIsCisg
ICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUywKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19pbml0KFdlYktpdERPTURPTVdpbmRvdyogcmVxdWVzdCkKK3sKKyAgICBXZWJL
aXRET01ET01XaW5kb3dQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ET01fV0lORE9XX0dFVF9Q
UklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NRE9NV2luZG93UHJpdmF0
ZSgpOworfQorCitXZWJLaXRET01ET01TZWxlY3Rpb24qIHdlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfc2VsZWN0aW9uKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVNlbGVj
dGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldFNlbGVjdGlvbigpKTsK
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9kb21fd2luZG93X2ZvY3VzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5mb2N1cygpOwor
fQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19ibHVyKFdlYktpdERPTURPTVdpbmRvdyog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdl
YkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5i
bHVyKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X2Nsb3NlKFdlYktpdERPTURP
TVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikp
OworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5jbG9zZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19wcmludChX
ZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lO
RE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+cHJpbnQoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfc3RvcChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c3RvcCgpOworfQorCit2b2lkIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19hbGVydChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBt
ZXNzYWdlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChtZXNzYWdlKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTWVzc2FnZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKTsKKyAgICBpdGVtLT5hbGVydChjb252ZXJ0
ZWRNZXNzYWdlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb21fd2luZG93X2NvbmZpcm0o
V2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwobWVzc2FnZSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRNZXNz
YWdlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmNvbmZpcm0oY29udmVydGVkTWVzc2FnZSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19wcm9tcHQoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSwgY29uc3QgZ2NoYXIqIGRlZmF1bHRWYWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChtZXNzYWdlLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChkZWZhdWx0VmFsdWUsIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRNZXNzYWdlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZERl
ZmF1bHRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChkZWZhdWx0VmFsdWUpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnByb21wdChjb252ZXJ0ZWRN
ZXNzYWdlLCBjb252ZXJ0ZWREZWZhdWx0VmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZmluZChXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJpbmcsIGdib29sZWFuIGNhc2VTZW5zaXRpdmUsIGdib29s
ZWFuIGJhY2t3YXJkcywgZ2Jvb2xlYW4gd3JhcCwgZ2Jvb2xlYW4gd2hvbGVXb3JkLCBnYm9vbGVh
biBzZWFyY2hJbkZyYW1lcywgZ2Jvb2xlYW4gc2hvd0RpYWxvZykKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc3RyaW5nLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFN0cmluZyA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmZp
bmQoY29udmVydGVkU3RyaW5nLCBjYXNlU2Vuc2l0aXZlLCBiYWNrd2FyZHMsIHdyYXAsIHdob2xl
V29yZCwgc2VhcmNoSW5GcmFtZXMsIHNob3dEaWFsb2cpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3Njcm9sbF9ieShXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYsIGdkb3VibGUgeCwgZ2RvdWJsZSB5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNjcm9sbEJ5KHgsIHkpOworfQorCit2b2lkIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19zY3JvbGxfdG8oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZG91
YmxlIHgsIGdkb3VibGUgeSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2Vs
ZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zY3JvbGxUbyh4LCB5KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfc2Nyb2xsKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2RvdWJsZSB4LCBnZG91YmxlIHkp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2Nyb2xs
VG8oeCwgeSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X21vdmVfYnkoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmLCBnZmxvYXQgeCwgZ2Zsb2F0IHkpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+bW92ZUJ5KHgsIHkpOworfQorCit2b2lk
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19tb3ZlX3RvKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwg
Z2Zsb2F0IHgsIGdmbG9hdCB5KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhz
ZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGl0ZW0tPm1vdmVUbyh4LCB5KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5k
b3dfcmVzaXplX2J5KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2Zsb2F0IHgsIGdmbG9hdCB5
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAgV2ViQ29y
ZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnJlc2l6
ZUJ5KHgsIHkpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9tX3dpbmRvd19yZXNpemVfdG8oV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZmxvYXQgd2lkdGgsIGdmbG9hdCBoZWlnaHQpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01X
aW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVzaXplVG8od2lk
dGgsIGhlaWdodCk7Cit9CisKK1dlYktpdERPTU1lZGlhUXVlcnlMaXN0KiB3ZWJraXRfZG9tX2Rv
bV93aW5kb3dfbWF0Y2hfbWVkaWEoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBjb25zdCBnY2hh
ciogcXVlcnkpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocXVlcnksIDApOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRRdWVyeSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChxdWVyeSk7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok1lZGlhUXVlcnlMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
bWF0Y2hNZWRpYShjb252ZXJ0ZWRRdWVyeSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYsIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IGdjaGFyKiBwc2V1ZG9FbGVt
ZW50KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChlbGVtZW50KSwg
MCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGNvbnZlcnRlZEVsZW1lbnQgPSBXZWJLaXQ6OmNvcmUoZWxl
bWVudCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkUHNldWRvRWxlbWVudCA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChwc2V1ZG9FbGVtZW50KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTU3R5
bGVEZWNsYXJhdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldENvbXB1
dGVkU3R5bGUoKmNvbnZlcnRlZEVsZW1lbnQsIGNvbnZlcnRlZFBzZXVkb0VsZW1lbnQpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERP
TVdlYktpdFBvaW50KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X2NvbnZlcnRfcG9pbnRf
ZnJvbV9wYWdlX3RvX25vZGUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiBub2RlLCBXZWJLaXRET01XZWJLaXRQb2ludCogcCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREUobm9kZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfV0VCS0lUX1BPSU5UKHApLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTm9k
ZSA9IFdlYktpdDo6Y29yZShub2RlKTsKKyAgICBXZWJDb3JlOjpXZWJLaXRQb2ludCogY29udmVy
dGVkUCA9IFdlYktpdDo6Y29yZShwKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6V2ViS2l0UG9pbnQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT53ZWJraXRDb252ZXJ0UG9pbnRGcm9t
UGFnZVRvTm9kZShjb252ZXJ0ZWROb2RlLCBjb252ZXJ0ZWRQKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01XZWJLaXRQb2ludCog
d2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jb252ZXJ0X3BvaW50X2Zyb21fbm9kZV90b19w
YWdlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgV2ViS2l0
RE9NV2ViS2l0UG9pbnQqIHApCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRP
VyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RF
KG5vZGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQktJ
VF9QT0lOVChwKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE5vZGUgPSBXZWJLaXQ6OmNv
cmUobm9kZSk7CisgICAgV2ViQ29yZTo6V2ViS2l0UG9pbnQqIGNvbnZlcnRlZFAgPSBXZWJLaXQ6
OmNvcmUocCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OldlYktpdFBvaW50PiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2UoY29u
dmVydGVkTm9kZSwgY29udmVydGVkUCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2FuY2VsX2Fu
aW1hdGlvbl9mcmFtZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdsb25nIGlkKQoreworI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oaWQpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlJlcXVlc3QgQW5pbWF0aW9uIEZyYW1lIikKKyNl
bmRpZiAvKiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICovCit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jYW5jZWxfYW5pbWF0aW9uX2ZyYW1lKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZiwgZ2xvbmcgaWQpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSk7CisgICAg
V2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiUmVxdWVzdCBBbmltYXRpb24gRnJhbWUiKQorI2VuZGlmIC8qIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Vi
a2l0X2NhbmNlbF9yZXF1ZXN0X2FuaW1hdGlvbl9mcmFtZShXZWJLaXRET01ET01XaW5kb3cqIHNl
bGYsIGdsb25nIGlkKQoreworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jYW5jZWxBbmltYXRp
b25GcmFtZShpZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0oaWQpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlJlcXVlc3Qg
QW5pbWF0aW9uIEZyYW1lIikKKyNlbmRpZiAvKiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X2NhcHR1cmVfZXZlbnRzKFdl
YktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5E
T1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5jYXB0dXJlRXZlbnRzKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9k
b21fd2luZG93X3JlbGVhc2VfZXZlbnRzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5yZWxlYXNlRXZlbnRz
KCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X2NsZWFyX3RpbWVvdXQoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmLCBnbG9uZyBoYW5kbGUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fV0lORE9XKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2xlYXJUaW1lb3V0KGhhbmRsZSk7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9kb21fd2luZG93X2NsZWFyX2ludGVydmFsKFdlYktpdERPTURPTVdpbmRv
dyogc2VsZiwgZ2xvbmcgaGFuZGxlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRP
VyhzZWxmKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPmNsZWFySW50ZXJ2YWwoaGFuZGxlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19hdG9iKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2No
YXIqIHN0cmluZywgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyaW5nLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAg
V2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFN0cmluZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0b2IoY29udmVydGVkU3RyaW5nLCBlYykpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfYnRvYShX
ZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJpbmcsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cmluZywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTdHJpbmcg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5idG9hKGNvbnZlcnRlZFN0cmluZywgZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitX
ZWJLaXRET01TY3JlZW4qIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9X
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcmVlbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnNjcmVlbigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhpc3RvcnkqIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19nZXRfaGlzdG9yeShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aGlzdG9yeSgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUJhclBy
b3AqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbG9jYXRpb25iYXIoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6QmFyUHJvcD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmxvY2F0aW9uYmFyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQmFyUHJvcCogd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9tZW51YmFyKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkJhclByb3A+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5tZW51YmFyKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQmFyUHJv
cCogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wZXJzb25hbGJhcihXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpCYXJQcm9wPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+cGVyc29uYWxiYXIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01CYXJQcm9wKiB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3Njcm9sbGJhcnMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRv
dyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QmFyUHJv
cD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNjcm9sbGJhcnMoKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01C
YXJQcm9wKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3N0YXR1c2JhcihXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpCYXJQcm9wPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+c3RhdHVzYmFyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQmFyUHJvcCogd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF90b29sYmFyKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkJhclByb3A+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT50b29sYmFyKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTmF2aWdh
dG9yKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X25hdmlnYXRvcihXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpOYXZpZ2F0b3I+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5uYXZpZ2F0b3IoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01OYXZpZ2F0b3IqIHdlYmtpdF9kb21fZG9tX3dpbmRv
d19nZXRfY2xpZW50X2luZm9ybWF0aW9uKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5hdmlnYXRvcj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNsaWVudElu
Zm9ybWF0aW9uKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9mcmFt
ZV9lbGVtZW50KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mcmFtZUVsZW1lbnQoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X29mZnNjcmVlbl9idWZmZXJpbmcoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+b2Zmc2NyZWVuQnVmZmVyaW5nKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9v
dXRlcl9oZWlnaHQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5vdXRl
ckhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfb3V0ZXJfd2lkdGgoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQg
PSBpdGVtLT5vdXRlcldpZHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9pbm5lcl9oZWlnaHQoV2ViS2l0RE9NRE9NV2luZG93KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
bG9uZyByZXN1bHQgPSBpdGVtLT5pbm5lckhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2dsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfaW5uZXJfd2lkdGgoV2ViS2l0RE9N
RE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1co
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5pbm5lcldpZHRoKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5feChX
ZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9N
X1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcmVlblgoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVl
bl95KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c2NyZWVuWSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRf
c2NyZWVuX2xlZnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zY3Jl
ZW5MZWZ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9zY3JlZW5fdG9wKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
T01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0g
aXRlbS0+c2NyZWVuVG9wKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9zY3JvbGxfeChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJl
c3VsdCA9IGl0ZW0tPnNjcm9sbFgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Njcm9sbF95KFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xv
bmcgcmVzdWx0ID0gaXRlbS0+c2Nyb2xsWSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFnZV94X29mZnNldChXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnBhZ2VYT2Zmc2V0KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYWdlX3lfb2Zmc2V0
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+cGFnZVlPZmZzZXQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X2Nsb3NlZChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRPTVdpbmRv
dyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5jbG9zZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9sZW5ndGgoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRP
TVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0g
aXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfbmFtZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X25hbWUoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T01fV0lORE9XKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldE5hbWUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9zdGF0dXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdp
bmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdGF0dXMoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X3N0YXR1cyhXZWJLaXRET01ET01XaW5k
b3cqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9XSU5ET1coc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0U3RhdHVzKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfZGVmYXVsdF9zdGF0dXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5kZWZhdWx0U3RhdHVzKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb21fd2luZG93X3NldF9kZWZhdWx0
X3N0YXR1cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0RGVmYXVsdFN0YXR1cyhjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK1dlYktpdERPTURPTVdpbmRvdyogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9z
ZWxmKFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdpbmRvdz4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlbGYoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01ET01XaW5kb3cqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfd2luZG93KFdlYktpdERPTURPTVdpbmRvdyogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkRPTVdpbmRvdz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpbmRv
dygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K1dlYktpdERPTURPTVdpbmRvdyogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9mcmFtZXMoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9X
SU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZnJhbWVzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9NV2luZG93KiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X29wZW5lcihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpET01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5vcGVuZXIoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01ET01XaW5kb3cqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFyZW50KFdlYktpdERP
TURPTVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9X
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVdpbmRvdz4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnBhcmVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURPTVdpbmRvdyogd2Via2l0X2RvbV9kb21f
d2luZG93X2dldF90b3AoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRv
dyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2lu
ZG93PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dG9wKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRG9jdW1l
bnQqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZG9jdW1lbnQoV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKK1dlYktpdERPTVN0eWxlTWVkaWEqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfc3R5bGVfbWVkaWEoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0RPTV9XSU5ET1coc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRv
dyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3R5bGVN
ZWRpYT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnN0eWxlTWVkaWEoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnZG91Ymxl
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvKFdlYktpdERPTURP
TVdpbmRvdyogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5kZXZpY2VQaXhlbFJhdGlvKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSogd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9hcHBsaWNhdGlvbl9jYWNoZShXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpET01BcHBsaWNhdGlvbkNhY2hlPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+YXBwbGljYXRpb25DYWNoZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVN0b3JhZ2UqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfc2Vzc2lvbl9zdG9yYWdlKFdlYktpdERPTURPTVdpbmRvdyogc2Vs
ZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRP
VyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
U3RvcmFnZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlc3Npb25TdG9yYWdl
KGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsK
K30KKworV2ViS2l0RE9NU3RvcmFnZSogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sb2NhbF9z
dG9yYWdlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRPTVdpbmRv
dyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3RvcmFnZT4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmxvY2FsU3RvcmFnZShlYykpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfb3JpZW50YXRpb24oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKQoreworI2lmIEVO
QUJMRShPUklFTlRBVElPTl9FVkVOVFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJ
TkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm9yaWVudGF0aW9uKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk9yaWVudGF0aW9uIEV2ZW50cyIpCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoT1JJRU5UQVRJT05f
RVZFTlRTKSAqLworfQorCitXZWJLaXRET01QZXJmb3JtYW5jZSogd2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9wZXJmb3JtYW5jZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpCit7CisjaWYgRU5B
QkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpQZXJmb3JtYW5jZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnBlcmZvcm1hbmNlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiAw
OworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitXZWJLaXRET01TcGVlY2hT
eW50aGVzaXMqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3BlZWNoX3N5bnRoZXNpcyhXZWJL
aXRET01ET01XaW5kb3cqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RE9NV2luZG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpTcGVlY2hTeW50aGVzaXM+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihXZWJDb3Jl
OjpET01XaW5kb3dTcGVlY2hTeW50aGVzaXM6OnNwZWVjaFN5bnRoZXNpcygqaXRlbSkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNw
ZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hf
U1lOVEhFU0lTKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvdy5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
T01XaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODBkODZiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3cuaApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01ET01XaW5kb3dfaAorI2RlZmluZSBXZWJLaXRET01ET01XaW5kb3df
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9XICAgICAg
ICAgICAgKHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0RPTV9XSU5ET1cob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1csIFdlYktpdERPTURPTVdpbmRvdykp
CisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1dJTkRPV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9NX1dJTkRPVywgV2Vi
S2l0RE9NRE9NV2luZG93Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX1dJTkRPVyhv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfRE9NX1dJTkRPVykpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9NX1dJTkRPV19DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfRE9NX1dJTkRPVykpCisjZGVmaW5lIFdFQktJVF9ET01fRE9NX1dJTkRPV19HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
RE9NX1dJTkRPVywgV2ViS2l0RE9NRE9NV2luZG93Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TURPTVdpbmRvdyB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NRE9NV2luZG93Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTURPTVdpbmRvd19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRE9NV2luZG93UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjNkMDcxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1ByaXZhdGUuaApA
QCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTURPTVdpbmRvd1ByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01ET01XaW5kb3dQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRE9NV2luZG93Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTURPTVdpbmRvdy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTURPTVdpbmRvdyogd3JhcERPTVdpbmRvdyhXZWJDb3JlOjpET01XaW5kb3cqKTsKK1dlYktp
dERPTURPTVdpbmRvdyoga2l0KFdlYkNvcmU6OkRPTVdpbmRvdyopOworV2ViQ29yZTo6RE9NV2lu
ZG93KiBjb3JlKFdlYktpdERPTURPTVdpbmRvdyopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01ET01XaW5kb3dQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3lu
dGhlc2lzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIxNzA2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCkBAIC0w
LDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBi
dWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmggYW5k
CisgICAgV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCBhcmUgY3JlYXRlZCBm
b3IgRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRo
ZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTURPTVdpbmRv
d1NwZWVjaFN5bnRoZXNpcy5oIGFuZAorICAgIFdlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRo
ZXNpcy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBj
b21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhmYjE3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURPTVdpbmRvd1Nw
ZWVjaFN5bnRoZXNpcy5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2Vu
ZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NRE9NV2luZG93
U3BlZWNoU3ludGhlc2lzLmggYW5kCisgICAgV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzLmNwcCBhcmUgY3JlYXRlZCBmb3IgRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmlkbCwgYW5k
IHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVy
YXRlIFdlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oIGFuZAorICAgIFdlYktpdERP
TURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBt
dXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2lu
ZG93VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRE9NV2luZG93VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45OTRkZjQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01ET01X
aW5kb3dVbnN0YWJsZS5oCkBAIC0wLDAgKzEsODgyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURPTVdpbmRvd1Vuc3RhYmxlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NRE9NV2luZG93VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ3VzdG9tVW5zdGFibGUu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zZWxlY3Rp
b246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01TZWxlY3Rpb24KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NU2VsZWN0aW9uKgord2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9zZWxlY3Rpb24oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZm9jdXM6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19mb2N1cyhXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19ibHVyOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfYmx1cihXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19jbG9zZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X2Nsb3NlKFdlYktp
dERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3By
aW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfcHJp
bnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93
aW5kb3dfc3RvcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2lu
ZG93X3N0b3AoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvbV93aW5kb3dfYWxlcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBA
bWVzc2FnZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X2FsZXJ0KFdlYktpdERPTURPTVdpbmRv
dyogc2VsZiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19jb25maXJtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQG1l
c3NhZ2U6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19jb25maXJtKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIG1l
c3NhZ2UpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19wcm9tcHQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAbWVzc2FnZTogQSAjZ2NoYXIKKyAqIEBkZWZh
dWx0VmFsdWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV93
aW5kb3dfcHJvbXB0KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIG1lc3Nh
Z2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0VmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19maW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQHN0cmlu
ZzogQSAjZ2NoYXIKKyAqIEBjYXNlU2Vuc2l0aXZlOiBBICNnYm9vbGVhbgorICogQGJhY2t3YXJk
czogQSAjZ2Jvb2xlYW4KKyAqIEB3cmFwOiBBICNnYm9vbGVhbgorICogQHdob2xlV29yZDogQSAj
Z2Jvb2xlYW4KKyAqIEBzZWFyY2hJbkZyYW1lczogQSAjZ2Jvb2xlYW4KKyAqIEBzaG93RGlhbG9n
OiBBICNnYm9vbGVhbgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZmluZChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJpbmcs
IGdib29sZWFuIGNhc2VTZW5zaXRpdmUsIGdib29sZWFuIGJhY2t3YXJkcywgZ2Jvb2xlYW4gd3Jh
cCwgZ2Jvb2xlYW4gd2hvbGVXb3JkLCBnYm9vbGVhbiBzZWFyY2hJbkZyYW1lcywgZ2Jvb2xlYW4g
c2hvd0RpYWxvZyk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X3Njcm9sbF9ieToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEB4OiBBICNnZG91YmxlCisgKiBA
eTogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xsX2J5KFdlYktpdERPTURPTVdpbmRv
dyogc2VsZiwgZ2RvdWJsZSB4LCBnZG91YmxlIHkpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9t
X3dpbmRvd19zY3JvbGxfdG86CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBA
eDogQSAjZ2RvdWJsZQorICogQHk6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X3Njcm9sbF90
byhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdkb3VibGUgeCwgZ2RvdWJsZSB5KTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2Nyb2xsOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURPTVdpbmRvdworICogQHg6IEEgI2dkb3VibGUKKyAqIEB5OiBBICNnZG91YmxlCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19zY3JvbGwoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZG91YmxlIHgsIGdkb3Vi
bGUgeSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X21vdmVfYnk6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAeDogQSAjZ2Zsb2F0CisgKiBAeTogQSAjZ2Zs
b2F0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZG9tX3dpbmRvd19tb3ZlX2J5KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgZ2Zs
b2F0IHgsIGdmbG9hdCB5KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfbW92ZV90
bzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEB4OiBBICNnZmxvYXQKKyAq
IEB5OiBBICNnZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X21vdmVfdG8oV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmLCBnZmxvYXQgeCwgZ2Zsb2F0IHkpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dp
bmRvd19yZXNpemVfYnk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKiBAeDog
QSAjZ2Zsb2F0CisgKiBAeTogQSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19yZXNpemVfYnkoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZmxvYXQgeCwgZ2Zsb2F0IHkpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19yZXNpemVfdG86CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9N
V2luZG93CisgKiBAd2lkdGg6IEEgI2dmbG9hdAorICogQGhlaWdodDogQSAjZ2Zsb2F0CisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
ZG9tX3dpbmRvd19yZXNpemVfdG8oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnZmxvYXQgd2lk
dGgsIGdmbG9hdCBoZWlnaHQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19tYXRj
aF9tZWRpYToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBxdWVyeTogQSAj
Z2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU1lZGlh
UXVlcnlMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTU1lZGlhUXVlcnlMaXN0Kgord2Via2l0X2RvbV9kb21fd2luZG93X21hdGNoX21lZGlh
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHF1ZXJ5KTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURPTVdpbmRvdworICogQGVsZW1lbnQ6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAq
IEBwc2V1ZG9FbGVtZW50OiAoYWxsb3ctbm9uZSk6IEEgI2djaGFyCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNTU1N0eWxlRGVj
bGFyYXRpb24qCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2NvbXB1dGVkX3N0eWxlKFdlYktp
dERPTURPTVdpbmRvdyogc2VsZiwgV2ViS2l0RE9NRWxlbWVudCogZWxlbWVudCwgY29uc3QgZ2No
YXIqIHBzZXVkb0VsZW1lbnQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJr
aXRfY29udmVydF9wb2ludF9mcm9tX3BhZ2VfdG9fbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01XaW5kb3cKKyAqIEBub2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAcDogQSAjV2ViS2l0
RE9NV2ViS2l0UG9pbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTVdlYktpdFBvaW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTVdlYktpdFBvaW50Kgord2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9j
b252ZXJ0X3BvaW50X2Zyb21fcGFnZV90b19ub2RlKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwg
V2ViS2l0RE9NTm9kZSogbm9kZSwgV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHApOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJraXRfY29udmVydF9wb2ludF9mcm9tX25vZGVfdG9f
cGFnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBub2RlOiBBICNXZWJL
aXRET01Ob2RlCisgKiBAcDogQSAjV2ViS2l0RE9NV2ViS2l0UG9pbnQKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVdlYktpdFBvaW50CisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVdlYktpdFBvaW50Kgord2Vi
a2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jb252ZXJ0X3BvaW50X2Zyb21fbm9kZV90b19wYWdl
KFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgV2ViS2l0RE9NTm9kZSogbm9kZSwgV2ViS2l0RE9N
V2ViS2l0UG9pbnQqIHApOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19jYW5jZWxf
YW5pbWF0aW9uX2ZyYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGlk
OiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2FuY2VsX2FuaW1hdGlvbl9mcmFtZShXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYsIGdsb25nIGlkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93
aW5kb3dfd2Via2l0X2NhbmNlbF9hbmltYXRpb25fZnJhbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKiBAaWQ6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd193ZWJraXRfY2Fu
Y2VsX2FuaW1hdGlvbl9mcmFtZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdsb25nIGlkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfd2Via2l0X2NhbmNlbF9yZXF1ZXN0X2Fu
aW1hdGlvbl9mcmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBpZDog
QSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9jYW5jZWxfcmVxdWVzdF9hbmltYXRpb25f
ZnJhbWUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnbG9uZyBpZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2NhcHR1cmVfZXZlbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfY2FwdHVyZV9ldmVudHMoV2ViS2l0RE9NRE9NV2lu
ZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfcmVsZWFzZV9ldmVu
dHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19yZWxl
YXNlX2V2ZW50cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19jbGVhcl90aW1lb3V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdp
bmRvdworICogQGhhbmRsZTogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb21fd2luZG93X2NsZWFyX3RpbWVvdXQo
V2ViS2l0RE9NRE9NV2luZG93KiBzZWxmLCBnbG9uZyBoYW5kbGUpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19jbGVhcl9pbnRlcnZhbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01XaW5kb3cKKyAqIEBoYW5kbGU6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19jbGVhcl9pbnRl
cnZhbChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGdsb25nIGhhbmRsZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9kb21fd2luZG93X2F0b2I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2lu
ZG93CisgKiBAc3RyaW5nOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfYXRvYihXZWJLaXRET01ET01XaW5kb3cq
IHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJpbmcsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfYnRvYToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5k
b3cKKyAqIEBzdHJpbmc6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19idG9hKFdlYktpdERPTURPTVdpbmRvdyog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cmluZywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTURP
TVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NU2Ny
ZWVuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TVNjcmVlbioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuKFdlYktpdERPTURPTVdp
bmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9oaXN0b3J5
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSGlzdG9yeQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IaXN0b3J5Kgord2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9oaXN0b3J5KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9sb2NhdGlvbmJhcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TUJhclByb3AKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NQmFyUHJvcCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfbG9jYXRpb25iYXIoV2Vi
S2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X21lbnViYXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01CYXJQcm9wCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUJhclByb3AqCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X21lbnViYXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3BlcnNvbmFsYmFyOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NQmFyUHJvcAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01CYXJQcm9wKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wZXJz
b25hbGJhcihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfc2Nyb2xsYmFyczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5k
b3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUJhclByb3AK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQmFy
UHJvcCoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Nyb2xsYmFycyhXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3RhdHVz
YmFyOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQmFyUHJvcAorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01CYXJQcm9wKgord2Via2l0X2RvbV9kb21f
d2luZG93X2dldF9zdGF0dXNiYXIoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Rvb2xiYXI6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01CYXJQcm9wCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTUJhclByb3AqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Rvb2xiYXIoV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X25hdmlnYXRvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01OYXZpZ2F0b3IqCit3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X25hdmlnYXRvcihXZWJLaXRET01ET01XaW5kb3cqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY2xpZW50X2luZm9ybWF0aW9u
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5hdmlnYXRvcioKK3dlYmtpdF9kb21fZG9t
X3dpbmRvd19nZXRfY2xpZW50X2luZm9ybWF0aW9uKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9mcmFtZV9lbGVtZW50OgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF9mcmFtZV9lbGVtZW50KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9vZmZzY3JlZW5fYnVmZmVyaW5nOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2RvbV93aW5kb3dfZ2V0X29mZnNjcmVlbl9idWZmZXJpbmcoV2ViS2l0RE9NRE9NV2luZG93KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X291dGVyX2hlaWdodDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9vdXRlcl9oZWlnaHQoV2ViS2l0RE9NRE9NV2luZG93KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X291dGVyX3dpZHRoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25n
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJr
aXRfZG9tX2RvbV93aW5kb3dfZ2V0X291dGVyX3dpZHRoKFdlYktpdERPTURPTVdpbmRvdyogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9pbm5lcl9oZWlnaHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfaW5uZXJfaGVpZ2h0KFdlYktpdERPTURPTVdpbmRvdyogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9pbm5lcl93aWR0aDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZwor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9pbm5lcl93aWR0aChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3g6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfc2NyZWVuX3goV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NjcmVlbl95OgorICogQHNlbGY6IEEgI1dl
YktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X3NjcmVlbl95KFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JlZW5fbGVmdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF9zY3JlZW5fbGVmdChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfc2NyZWVuX3RvcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9z
Y3JlZW5fdG9wKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb21fd2luZG93X2dldF9zY3JvbGxfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5k
b3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zY3JvbGxf
eChXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dp
bmRvd19nZXRfc2Nyb2xsX3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgor
ICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Nyb2xsX3koV2ViS2l0
RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0
X3BhZ2VfeF9vZmZzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICog
UmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFnZV94X29mZnNldChXZWJL
aXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfcGFnZV95X29mZnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYWdlX3lfb2Zmc2V0KFdl
YktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93
X2dldF9jbG9zZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0
dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfY2xvc2VkKFdlYktpdERP
TURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9s
ZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczog
QSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1
bG9uZword2Via2l0X2RvbV9kb21fd2luZG93X2dldF9sZW5ndGgoV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X25hbWU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X25hbWUoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19zZXRfbmFt
ZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9zdGF0dXM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvbV93aW5kb3df
Z2V0X3N0YXR1cyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19zZXRfc3RhdHVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRv
dworICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X3N0YXR1cyhXZWJLaXRE
T01ET01XaW5kb3cqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb21fd2luZG93X2dldF9kZWZhdWx0X3N0YXR1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfZGVmYXVsdF9zdGF0dXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0X2RlZmF1bHRfc3RhdHVzOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURPTVdpbmRvdworICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfc2V0
X2RlZmF1bHRfc3RhdHVzKFdlYktpdERPTURPTVdpbmRvdyogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3NlbGY6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2luZG93Kgord2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF9zZWxmKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b21fd2luZG93X2dldF93aW5kb3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2lu
ZG93Kgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF93aW5kb3coV2ViS2l0RE9NRE9NV2luZG93
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2ZyYW1lczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9tX2RvbV93aW5k
b3dfZ2V0X2ZyYW1lcyhXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9tX3dpbmRvd19nZXRfb3BlbmVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdp
bmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NV2lu
ZG93CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TURPTVdpbmRvdyoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfb3BlbmVyKFdlYktpdERPTURP
TVdpbmRvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wYXJl
bnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NV2luZG93Kgord2Via2l0X2RvbV9k
b21fd2luZG93X2dldF9wYXJlbnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3RvcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
T01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTURP
TVdpbmRvdworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3RvcChXZWJLaXRET01E
T01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfZG9j
dW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRE9NV2luZG93CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCoKK3dlYmtpdF9kb21f
ZG9tX3dpbmRvd19nZXRfZG9jdW1lbnQoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3N0eWxlX21lZGlhOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAj
V2ViS2l0RE9NU3R5bGVNZWRpYQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01TdHlsZU1lZGlhKgord2Via2l0X2RvbV9kb21fd2luZG93X2dldF9z
dHlsZV9tZWRpYShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9tX3dpbmRvd19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvOgorICogQHNlbGY6IEEgI1dlYktp
dERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8oV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X2FwcGxpY2F0aW9uX2NhY2hlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZQorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlKgor
d2Via2l0X2RvbV9kb21fd2luZG93X2dldF9hcHBsaWNhdGlvbl9jYWNoZShXZWJLaXRET01ET01X
aW5kb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc2Vzc2lv
bl9zdG9yYWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01TdG9y
YWdlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TVN0b3JhZ2UqCit3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Nlc3Npb25fc3RvcmFnZShXZWJL
aXRET01ET01XaW5kb3cqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X2xvY2FsX3N0b3JhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RE9NV2luZG93CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTVN0b3JhZ2UKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3RvcmFnZSoKK3dlYmtpdF9kb21fZG9tX3dpbmRvd19n
ZXRfbG9jYWxfc3RvcmFnZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X29yaWVudGF0aW9uOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURPTVdpbmRvdworICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRf
ZG9tX2RvbV93aW5kb3dfZ2V0X29yaWVudGF0aW9uKFdlYktpdERPTURPTVdpbmRvdyogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9wZXJmb3JtYW5jZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVs
bCk6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTVBlcmZvcm1hbmNlKgord2Via2l0X2RvbV9kb21fd2lu
ZG93X2dldF9wZXJmb3JtYW5jZShXZWJLaXRET01ET01XaW5kb3cqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfc3BlZWNoX3N5bnRoZXNpczoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01ET01XaW5kb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqCit3ZWJraXRfZG9tX2RvbV93
aW5kb3dfZ2V0X3NwZWVjaF9zeW50aGVzaXMoV2ViS2l0RE9NRE9NV2luZG93KiBzZWxmKTsKKwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICov
CisjZW5kaWYgLyogV2ViS2l0RE9NRE9NV2luZG93VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01EYXRhQ3VlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGE2MDM3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZS5j
cHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01EYXRhQ3VlLmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01EYXRhQ3VlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTURhdGFDdWUqIGtpdChXZWJDb3JlOjpEYXRhQ3VlKiBvYmopCit7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fREFUQV9DVUUoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFj
a0N1ZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6RGF0YUN1ZSogY29yZShXZWJLaXRET01EYXRh
Q3VlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6RGF0YUN1ZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Cit9CisKK1dlYktpdERPTURhdGFDdWUqIHdyYXBEYXRhQ3VlKFdlYkNvcmU6OkRhdGFDdWUqIGNv
cmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRf
RE9NX0RBVEFfQ1VFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfREFUQV9DVUUsICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2RhdGFfY3VlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6
OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViQ29yZTo6RGF0YUN1ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRhdGFDdWUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNv
cmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24u
bmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVy
cm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIp
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZGF0YV9jdWVfYWRkX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIFdlYkNvcmU6OkRhdGFDdWUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpEYXRhQ3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0
dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFN
KGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJB
TSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRl
byBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFD
SykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZGF0YV9jdWVfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkRhdGFDdWUqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpEYXRhQ3VlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOwor
ICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+
ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2RhdGFfY3VlX2Rpc3BhdGNoX2V2ZW50OworICAg
IGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2RhdGFfY3VlX2FkZF9ldmVu
dF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9kYXRhX2N1ZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYktpdERPTURhdGFDdWUsIHdlYmtpdF9kb21fZGF0YV9jdWUsIFdFQktJVF9ET01f
VFlQRV9URVhUX1RSQUNLX0NVRSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQ
RV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2RhdGFfY3VlX2NsYXNzX2luaXQoV2ViS2l0RE9NRGF0YUN1ZUNsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3RDbGFzcyk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZGF0YV9jdWVfaW5pdChXZWJLaXRET01EYXRhQ3VlKiBy
ZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01EYXRhQ3VlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFDdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hYzA2ODAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhQ3VlLmgKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01EYXRhQ3VlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRGF0YUN1ZV9oCisKKyNpZmRlZiBX
RUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRleHRUcmFja0N1ZS5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfREFUQV9DVUUgICAgICAgICAgICAod2Via2l0X2RvbV9k
YXRhX2N1ZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RBVEFfQ1VFKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9EQVRBX0NVRSwgV2ViS2l0RE9NRGF0YUN1ZSkpCisjZGVmaW5lIFdFQktJVF9ET01fREFUQV9D
VUVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0RBVEFfQ1VFLCBXZWJLaXRET01EYXRhQ3VlQ2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfREFUQV9DVUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0RBVEFfQ1VFKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19EQVRBX0NVRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfREFUQV9DVUUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RBVEFf
Q1VFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9EQVRBX0NVRSwgV2ViS2l0RE9NRGF0YUN1ZUNsYXNzKSkKKworc3RydWN0
IF9XZWJLaXRET01EYXRhQ3VlIHsKKyAgICBXZWJLaXRET01UZXh0VHJhY2tDdWUgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01EYXRhQ3VlQ2xhc3MgeworICAgIFdlYktp
dERPTVRleHRUcmFja0N1ZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fZGF0YV9jdWVfZ2V0X3R5cGUodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJL
aXRET01EYXRhQ3VlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RGF0YUN1ZVByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDcyJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SXRlcmFi
bGVQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YUN1ZVByaXZhdGUuaAppbmRleCBlZTA2YmFm
Li5hNmEwODM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRh
Q3VlUHJpdmF0ZS5oCkBAIC0xOCwxNiArMTgsMTkgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGVfaAot
I2RlZmluZSBXZWJLaXRET01UZXN0SXRlcmFibGVQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9N
RGF0YUN1ZVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01EYXRhQ3VlUHJpdmF0ZV9oCiAKLSNp
bmNsdWRlICJUZXN0SXRlcmFibGUuaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVz
dEl0ZXJhYmxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EYXRhQ3VlLmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTURhdGFDdWUuaD4KKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdEl0ZXJhYmxlKiB3cmFwVGVzdEl0ZXJhYmxl
KFdlYkNvcmU6OlRlc3RJdGVyYWJsZSopOwotV2ViS2l0RE9NVGVzdEl0ZXJhYmxlKiBraXQoV2Vi
Q29yZTo6VGVzdEl0ZXJhYmxlKik7Ci1XZWJDb3JlOjpUZXN0SXRlcmFibGUqIGNvcmUoV2ViS2l0
RE9NVGVzdEl0ZXJhYmxlKik7CitXZWJLaXRET01EYXRhQ3VlKiB3cmFwRGF0YUN1ZShXZWJDb3Jl
OjpEYXRhQ3VlKik7CitXZWJLaXRET01EYXRhQ3VlKiBraXQoV2ViQ29yZTo6RGF0YUN1ZSopOwor
V2ViQ29yZTo6RGF0YUN1ZSogY29yZShXZWJLaXRET01EYXRhQ3VlKik7CiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RJdGVyYWJsZVByaXZhdGVfaCAqLwor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTURh
dGFDdWVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2UuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
YXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkODcyNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01EYXRhYmFzZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRv
VVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9EQVRBQkFTRV9HRVRfUFJJVkFURShvYmopIEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9EQVRBQkFTRSwg
V2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRGF0
YWJhc2VQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YWJhc2U+IGNvcmVPYmplY3Q7
Cit9IFdlYktpdERPTURhdGFiYXNlUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YktpdERPTURhdGFiYXNlKiBraXQoV2ViQ29yZTo6RGF0YWJhc2UqIG9iaikKK3sKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9EQVRBQkFTRShy
ZXQpOworCisgICAgcmV0dXJuIHdyYXBEYXRhYmFzZShvYmopOworfQorCitXZWJDb3JlOjpEYXRh
YmFzZSogY29yZShXZWJLaXRET01EYXRhYmFzZSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRhdGFiYXNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
cmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NRGF0YWJhc2UqIHdyYXBE
YXRhYmFzZShXZWJDb3JlOjpEYXRhYmFzZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fREFUQUJBU0UoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9EQVRBQkFTRSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRE
T01EYXRhYmFzZSwgd2Via2l0X2RvbV9kYXRhYmFzZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVkVSU0lPTiwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZGF0YWJhc2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTURhdGFiYXNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fREFUQUJBU0VfR0VU
X1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChw
cml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01EYXRhYmFzZVBy
aXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RhdGFiYXNlX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZGF0
YWJhc2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NRGF0YWJhc2Uq
IHNlbGYgPSBXRUJLSVRfRE9NX0RBVEFCQVNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVkVSU0lPTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kYXRhYmFzZV9nZXRfdmVyc2lvbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9kYXRhYmFzZV9jb25zdHJ1Y3Rv
cihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25z
dHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3Qg
PSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2RhdGFiYXNlX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisKKyAgICBXZWJLaXRET01EYXRhYmFzZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0RB
VEFCQVNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkRhdGFiYXNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29y
ZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0RE9NRGF0YWJhc2VDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29i
amVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlKSk7CisgICAgZ29iamVj
dENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZGF0YWJhc2VfY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fZGF0YWJhc2VfZmluYWxpemU7
CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RhdGFiYXNlX2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WRVJTSU9OLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZlcnNpb24iLAorICAgICAgICAgICAgIkRhdGFi
YXNlOnZlcnNpb24iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRGF0YWJhc2U6dmVy
c2lvbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZGF0YWJhc2VfaW5pdChXZWJLaXRE
T01EYXRhYmFzZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01EYXRhYmFzZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX0RBVEFCQVNFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAo
cHJpdikgV2ViS2l0RE9NRGF0YWJhc2VQcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2RhdGFiYXNlX2dldF92ZXJzaW9uKFdlYktpdERPTURhdGFiYXNlKiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RBVEFCQVNFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEYXRh
YmFzZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT52ZXJzaW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTWF0dHJpYnV0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhYmFzZS5oCnNpbWlsYXJpdHkgaW5k
ZXggNTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTWF0dHJpYnV0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNlLmgKaW5k
ZXggNDEwZDY0Ny4uMTM1YTFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NYXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRh
YmFzZS5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01hdHRyaWJ1dGVfaAotI2RlZmluZSBXZWJLaXRET01h
dHRyaWJ1dGVfaAorI2lmbmRlZiBXZWJLaXRET01EYXRhYmFzZV9oCisjZGVmaW5lIFdlYktpdERP
TURhdGFiYXNlX2gKIAogI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQogCkBAIC0y
OSw0MCArMjksMzYgQEAKIAogR19CRUdJTl9ERUNMUwogCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0FUVFJJQlVURSAgICAgICAgICAgICh3ZWJraXRfZG9tX2F0dHJp
YnV0ZV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX0FUVFJJQlVURShvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
QVRUUklCVVRFLCBXZWJLaXRET01hdHRyaWJ1dGUpKQotI2RlZmluZSBXRUJLSVRfRE9NX0FUVFJJ
QlVURV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfQVRUUklCVVRFLCBXZWJLaXRET01hdHRyaWJ1dGVDbGFzcykKLSNkZWZp
bmUgV0VCS0lUX0RPTV9JU19BVFRSSUJVVEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0FUVFJJQlVURSkpCi0jZGVmaW5lIFdF
QktJVF9ET01fSVNfQVRUUklCVVRFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9BVFRSSUJVVEUpKQotI2RlZmluZSBXRUJLSVRf
RE9NX0FUVFJJQlVURV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfQVRUUklCVVRFLCBXZWJLaXRET01hdHRyaWJ1dGVDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9EQVRBQkFTRSAgICAgICAgICAgICh3ZWJraXRf
ZG9tX2RhdGFiYXNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fREFUQUJBU0Uob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0RBVEFCQVNFLCBXZWJLaXRET01EYXRhYmFzZSkpCisjZGVmaW5lIFdFQktJVF9ET01f
REFUQUJBU0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0RBVEFCQVNFLCBXZWJLaXRET01EYXRhYmFzZUNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX0RBVEFCQVNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9EQVRBQkFTRSkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfREFUQUJBU0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0RBVEFCQVNFKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9EQVRBQkFTRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfREFUQUJBU0UsIFdlYktpdERPTURhdGFiYXNlQ2xhc3MpKQog
Ci1zdHJ1Y3QgX1dlYktpdERPTWF0dHJpYnV0ZSB7CitzdHJ1Y3QgX1dlYktpdERPTURhdGFiYXNl
IHsKICAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwogfTsKIAotc3RydWN0IF9X
ZWJLaXRET01hdHRyaWJ1dGVDbGFzcyB7CitzdHJ1Y3QgX1dlYktpdERPTURhdGFiYXNlQ2xhc3Mg
ewogICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKIH07CiAKIFdFQktJVF9B
UEkgR1R5cGUKLXdlYmtpdF9kb21fYXR0cmlidXRlX2dldF90eXBlKHZvaWQpOword2Via2l0X2Rv
bV9kYXRhYmFzZV9nZXRfdHlwZSh2b2lkKTsKIAogLyoqCi0gKiB3ZWJraXRfZG9tX2F0dHJpYnV0
ZV9nZXRfcmVhZG9ubHk6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NYXR0cmlidXRlCisgKiB3ZWJr
aXRfZG9tX2RhdGFiYXNlX2dldF92ZXJzaW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURhdGFi
YXNlCiAgKgogICogUmV0dXJuczogQSAjZ2NoYXIKICAqCiAgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CiAqKi8KIFdFQktJVF9BUEkgZ2NoYXIqCi13ZWJraXRfZG9tX2F0dHJpYnV0ZV9nZXRfcmVhZG9u
bHkoV2ViS2l0RE9NYXR0cmlidXRlKiBzZWxmKTsKK3dlYmtpdF9kb21fZGF0YWJhc2VfZ2V0X3Zl
cnNpb24oV2ViS2l0RE9NRGF0YWJhc2UqIHNlbGYpOwogCiBHX0VORF9ERUNMUwogCiAjZW5kaWYg
LyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dEV4Y2VwdGlvbl9oICovCi0jZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICov
Ci0jZW5kaWYgLyogV2ViS2l0RE9NYXR0cmlidXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01E
YXRhYmFzZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURhdGFiYXNlUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01E
YXRhYmFzZVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTMx
MmY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01EYXRhYmFzZVByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TURhdGFiYXNlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURhdGFiYXNlUHJpdmF0ZV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0RhdGFiYXNlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTURhdGFiYXNlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRGF0YWJhc2Uq
IHdyYXBEYXRhYmFzZShXZWJDb3JlOjpEYXRhYmFzZSopOworV2ViS2l0RE9NRGF0YWJhc2UqIGtp
dChXZWJDb3JlOjpEYXRhYmFzZSopOworV2ViQ29yZTo6RGF0YWJhc2UqIGNvcmUoV2ViS2l0RE9N
RGF0YWJhc2UqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9N
RGF0YWJhc2VQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NRGVwcmVjYXRlZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURlcHJlY2F0ZWQuY3BwCnNp
bWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvV2ViS2l0RE9NRGVwcmVjYXRlZC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRGVwcmVjYXRlZC5j
cHAKaW5kZXggYWJiNmVhZi4uNzUzYWM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01EZXByZWNhdGVkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURlcHJlY2F0
ZWQuY3BwCkBAIC0yMCwxMiArMjAsMTIgQEAKICNpbmNsdWRlICJXZWJLaXRET01EZXByZWNhdGVk
LmgiCiAKICNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgotI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxDb2xsZWN0aW9uLmg+CiAjaW5jbHVkZSAiV2Vi
S2l0RE9NRG9jdW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01IVE1MRG9jdW1lbnRQcml2YXRlLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRGVwcmVjYXRlZC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRGVwcmVjYXRlZC5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURlcHJlY2F0ZWQuaAppbmRleCBjYzQ0ODg5Li4xYjkzNDFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTURlcHJlY2F0ZWQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURlcHJlY2F0ZWQuaApAQCAtMTYzLDYgKzE2Myw3IEBAIHdlYmtpdF9kb21fZWxl
bWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhCiAgKiB3ZWJraXRfZG9tX25vZGVfY2xvbmVfbm9kZToKICAqIEBzZWxmOiBBICNX
ZWJLaXRET01Ob2RlCiAgKiBAZGVlcDogQSAjZ2Jvb2xlYW4KKyAqIEBlcnJvcjogI0dFcnJvcgog
ICoKICAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQogICoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5MWYyMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRG9jdW1lbnQuY3BwCkBAIC0wLDAgKzEsMjAwNCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3Vt
ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRE
T01BdHRyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUNEQVRBU2VjdGlvblByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUNvbW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9N
SW1wbGVtZW50YXRpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRE9NV2luZG93UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RG9jdW1lbnRUeXBlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MSGVhZEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTFNjcmlwdEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUZpbHRl
clByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVJhbmdlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NVHJlZVdhbGtlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01YUGF0aEV4cHJl
c3Npb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudFVuc3Rh
YmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTURvY3VtZW50KiBraXQoV2ViQ29yZTo6
RG9jdW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET0NVTUVOVChraXQoc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6RG9jdW1lbnQq
IGNvcmUoV2ViS2l0RE9NRG9jdW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTURvY3VtZW50KiB3cmFwRG9jdW1l
bnQoV2ViQ29yZTo6RG9jdW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPQ1VNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfRE9DVU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2RvY3VtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9hZGRfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNv
cmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9kb2N1
bWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9kb2N1bWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9l
dmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZG9jdW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01Eb2N1bWVudCwgd2Via2l0
X2RvbV9kb2N1bWVudCwgV0VCS0lUX0RPTV9UWVBFX05PREUsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRE9DVFlQRSwKKyAgICBQUk9Q
X0lNUExFTUVOVEFUSU9OLAorICAgIFBST1BfRE9DVU1FTlRfRUxFTUVOVCwKKyAgICBQUk9QX0lO
UFVUX0VOQ09ESU5HLAorICAgIFBST1BfWE1MX0VOQ09ESU5HLAorICAgIFBST1BfWE1MX1ZFUlNJ
T04sCisgICAgUFJPUF9YTUxfU1RBTkRBTE9ORSwKKyAgICBQUk9QX0RPQ1VNRU5UX1VSSSwKKyAg
ICBQUk9QX0RFRkFVTFRfVklFVywKKyAgICBQUk9QX1NUWUxFX1NIRUVUUywKKyAgICBQUk9QX0NP
TlRFTlRfVFlQRSwKKyAgICBQUk9QX1RJVExFLAorICAgIFBST1BfRElSLAorICAgIFBST1BfREVT
SUdOX01PREUsCisgICAgUFJPUF9SRUZFUlJFUiwKKyAgICBQUk9QX0RPTUFJTiwKKyAgICBQUk9Q
X1VSTCwKKyAgICBQUk9QX0NPT0tJRSwKKyAgICBQUk9QX0JPRFksCisgICAgUFJPUF9IRUFELAor
ICAgIFBST1BfSU1BR0VTLAorICAgIFBST1BfQVBQTEVUUywKKyAgICBQUk9QX0xJTktTLAorICAg
IFBST1BfRk9STVMsCisgICAgUFJPUF9BTkNIT1JTLAorICAgIFBST1BfRU1CRURTLAorICAgIFBS
T1BfUExVR0lOUywKKyAgICBQUk9QX1NDUklQVFMsCisgICAgUFJPUF9MQVNUX01PRElGSUVELAor
ICAgIFBST1BfQ0hBUlNFVCwKKyAgICBQUk9QX1JFQURZX1NUQVRFLAorICAgIFBST1BfQ0hBUkFD
VEVSX1NFVCwKKyAgICBQUk9QX1BSRUZFUlJFRF9TVFlMRVNIRUVUX1NFVCwKKyAgICBQUk9QX1NF
TEVDVEVEX1NUWUxFU0hFRVRfU0VULAorICAgIFBST1BfQUNUSVZFX0VMRU1FTlQsCisgICAgUFJP
UF9DT01QQVRfTU9ERSwKKyAgICBQUk9QX1dFQktJVF9JU19GVUxMX1NDUkVFTiwKKyAgICBQUk9Q
X1dFQktJVF9GVUxMX1NDUkVFTl9LRVlCT0FSRF9JTlBVVF9BTExPV0VELAorICAgIFBST1BfV0VC
S0lUX0NVUlJFTlRfRlVMTF9TQ1JFRU5fRUxFTUVOVCwKKyAgICBQUk9QX1dFQktJVF9GVUxMU0NS
RUVOX0VOQUJMRUQsCisgICAgUFJPUF9XRUJLSVRfRlVMTFNDUkVFTl9FTEVNRU5ULAorICAgIFBS
T1BfUE9JTlRFUl9MT0NLX0VMRU1FTlQsCisgICAgUFJPUF9WSVNJQklMSVRZX1NUQVRFLAorICAg
IFBST1BfSElEREVOLAorICAgIFBST1BfQ1VSUkVOVF9TQ1JJUFQsCisgICAgUFJPUF9PUklHSU4s
CisgICAgUFJPUF9TQ1JPTExJTkdfRUxFTUVOVCwKKyAgICBQUk9QX0NISUxEUkVOLAorICAgIFBS
T1BfRklSU1RfRUxFTUVOVF9DSElMRCwKKyAgICBQUk9QX0xBU1RfRUxFTUVOVF9DSElMRCwKKyAg
ICBQUk9QX0NISUxEX0VMRU1FTlRfQ09VTlQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2RvY3VtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TURvY3VtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9ET0NVTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1hNTF9WRVJTSU9OOgorICAgICAgICB3
ZWJraXRfZG9tX2RvY3VtZW50X3NldF94bWxfdmVyc2lvbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1hNTF9T
VEFOREFMT05FOgorICAgICAgICB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF94bWxfc3RhbmRhbG9u
ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9ET0NVTUVOVF9VUkk6CisgICAgICAgIHdlYmtpdF9kb21fZG9j
dW1lbnRfc2V0X2RvY3VtZW50X3VyaShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RJVExFOgorICAgICAgICB3ZWJraXRfZG9t
X2RvY3VtZW50X3NldF90aXRsZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJUjoKKyAgICAgICAgd2Via2l0X2RvbV9kb2N1
bWVudF9zZXRfZGlyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfREVTSUdOX01PREU6CisgICAgICAgIHdlYmtpdF9kb21fZG9j
dW1lbnRfc2V0X2Rlc2lnbl9tb2RlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09PS0lFOgorICAgICAgICB3ZWJraXRfZG9t
X2RvY3VtZW50X3NldF9jb29raWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVs
bHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSEFSU0VUOgorICAgICAgICB3
ZWJraXRfZG9tX2RvY3VtZW50X3NldF9jaGFyc2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURURfU1RZTEVTSEVF
VF9TRVQ6CisgICAgICAgIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3NlbGVjdGVkX3N0eWxlc2hl
ZXRfc2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRET01Eb2N1bWVudCogc2VsZiA9IFdFQktJVF9ET01fRE9DVU1FTlQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ET0NUWVBF
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2RvY3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU1QTEVN
RU5UQVRJT046CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfaW1wbGVtZW50YXRpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRE9DVU1FTlRfRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF9lbGVtZW50KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOUFVUX0VOQ09ESU5HOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbnB1dF9lbmNv
ZGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9YTUxfRU5DT0RJTkc6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X3htbF9lbmNvZGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Y
TUxfVkVSU0lPTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfeG1sX3ZlcnNpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfWE1MX1NUQU5EQUxPTkU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFs
dWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF9zdGFuZGFsb25lKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RPQ1VNRU5UX1VSSToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfdXJpKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfVklFVzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZh
dWx0X3ZpZXcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RZTEVfU0hF
RVRTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3N0eWxlX3NoZWV0cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9DT05URU5UX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2NvbnRlbnRfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9USVRMRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdGl0bGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfRElSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9kaXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfREVTSUdOX01PREU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Rlc2lnbl9tb2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1JFRkVSUkVSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9yZWZlcnJlcihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9ET01BSU46CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvbWFpbihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9VUkw6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3VybChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DT09LSUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Nvb2tpZShzZWxmLCBudWxscHRyKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9CT0RZOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHkoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfSEVBRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oZWFkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0lNQUdFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbWFnZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQVBQTEVUUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hcHBsZXRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0xJTktTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0ZPUk1TOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2Zvcm1zKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0FOQ0hPUlM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfYW5jaG9ycyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9FTUJFRFM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfZW1iZWRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1BMVUdJTlM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfcGx1Z2lucyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TQ1JJUFRTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3NjcmlwdHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTEFTVF9NT0RJRklFRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9tb2RpZmllZChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9DSEFSU0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGFyc2V0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFQURZX1NUQVRFOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9yZWFkeV9zdGF0ZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSEFSQUNURVJfU0VUOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGFy
YWN0ZXJfc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BSRUZFUlJF
RF9TVFlMRVNIRUVUX1NFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfcHJlZmVycmVkX3N0eWxlc2hlZXRfc2V0KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEX1NUWUxFU0hFRVRfU0VUOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9z
ZWxlY3RlZF9zdHlsZXNoZWV0X3NldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9BQ1RJVkVfRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hY3RpdmVfZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DT01QQVRfTU9ERToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29tcGF0X21vZGUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0lTX0ZVTExfU0NSRUVOOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93
ZWJraXRfaXNfZnVsbF9zY3JlZW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0VCS0lUX0ZVTExfU0NSRUVOX0tFWUJPQVJEX0lOUFVUX0FMTE9XRUQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9m
dWxsX3NjcmVlbl9rZXlib2FyZF9pbnB1dF9hbGxvd2VkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1dFQktJVF9DVVJSRU5UX0ZVTExfU0NSRUVOX0VMRU1FTlQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Vi
a2l0X2N1cnJlbnRfZnVsbF9zY3JlZW5fZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9XRUJLSVRfRlVMTFNDUkVFTl9FTkFCTEVEOgorICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbHNj
cmVlbl9lbmFibGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJ
VF9GVUxMU0NSRUVOX0VMRU1FTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZWxlbWVudChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QT0lOVEVSX0xPQ0tfRUxFTUVOVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9w
b2ludGVyX2xvY2tfZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9WSVNJQklMSVRZX1NUQVRFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF92aXNpYmlsaXR5X3N0YXRlKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0hJRERFTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGlkZGVuKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfU0NSSVBUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2N1cnJlbnRfc2NyaXB0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09SSUdJTjoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfb3JpZ2luKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTElOR19FTEVNRU5UOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X3Njcm9sbGluZ19lbGVtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NISUxEUkVOOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2NoaWxkcmVuKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQVNUX0VMRU1FTlRfQ0hJTEQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9l
bGVtZW50X2NoaWxkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NISUxE
X0VMRU1FTlRfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01E
b2N1bWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wcm9wZXJ0
eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9ET0NUWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgImRvY3R5cGUiLAorICAgICAgICAgICAgIkRvY3VtZW50OmRvY3R5
cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Eb2N1bWVudFR5cGUqIERvY3Vt
ZW50OmRvY3R5cGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RZUEUs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9JTVBMRU1FTlRBVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJpbXBsZW1lbnRhdGlvbiIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6aW1wbGVtZW50YXRp
b24iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiog
RG9jdW1lbnQ6aW1wbGVtZW50YXRpb24iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RP
TV9JTVBMRU1FTlRBVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0RPQ1VNRU5UX0VMRU1FTlQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiZG9jdW1lbnQtZWxlbWVudCIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6ZG9jdW1lbnQtZWxlbWVudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTUVsZW1lbnQqIERvY3VtZW50OmRvY3VtZW50LWVsZW1lbnQiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9JTlBVVF9FTkNPRElORywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJpbnB1dC1lbmNvZGluZyIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6aW5wdXQtZW5jb2RpbmciLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciog
RG9jdW1lbnQ6aW5wdXQtZW5jb2RpbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9YTUxfRU5DT0RJTkcs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAieG1sLWVuY29kaW5n
IiwKKyAgICAgICAgICAgICJEb2N1bWVudDp4bWwtZW5jb2RpbmciLAorICAgICAgICAgICAgInJl
YWQtb25seSBnY2hhciogRG9jdW1lbnQ6eG1sLWVuY29kaW5nIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
WE1MX1ZFUlNJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
eG1sLXZlcnNpb24iLAorICAgICAgICAgICAgIkRvY3VtZW50OnhtbC12ZXJzaW9uIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBEb2N1bWVudDp4bWwtdmVyc2lvbiIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9YTUxfU1RBTkRBTE9ORSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAieG1sLXN0YW5kYWxvbmUiLAorICAgICAgICAgICAgIkRvY3VtZW50Onht
bC1zdGFuZGFsb25lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIERvY3VtZW50
OnhtbC1zdGFuZGFsb25lIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RPQ1VNRU5UX1VSSSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkb2N1bWVudC11cmkiLAor
ICAgICAgICAgICAgIkRvY3VtZW50OmRvY3VtZW50LXVyaSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogRG9jdW1lbnQ6ZG9jdW1lbnQtdXJpIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RF
RkFVTFRfVklFVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJk
ZWZhdWx0LXZpZXciLAorICAgICAgICAgICAgIkRvY3VtZW50OmRlZmF1bHQtdmlldyIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVdpbmRvdyogRG9jdW1lbnQ6ZGVmYXVsdC12
aWV3IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9XLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RZTEVfU0hF
RVRTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInN0eWxlLXNo
ZWV0cyIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6c3R5bGUtc2hlZXRzIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NU3R5bGVTaGVldExpc3QqIERvY3VtZW50OnN0eWxlLXNoZWV0
cyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVRfTElTVCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTlRF
TlRfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb250
ZW50LXR5cGUiLAorICAgICAgICAgICAgIkRvY3VtZW50OmNvbnRlbnQtdHlwZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDpjb250ZW50LXR5cGUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9USVRMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJ0aXRsZSIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6dGl0bGUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OnRpdGxlIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJUiwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkaXIiLAorICAgICAg
ICAgICAgIkRvY3VtZW50OmRpciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogRG9j
dW1lbnQ6ZGlyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFU0lHTl9NT0RFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRlc2lnbi1tb2RlIiwKKyAgICAgICAgICAg
ICJEb2N1bWVudDpkZXNpZ24tbW9kZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
RG9jdW1lbnQ6ZGVzaWduLW1vZGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVGRVJSRVIsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicmVmZXJyZXIiLAorICAgICAg
ICAgICAgIkRvY3VtZW50OnJlZmVycmVyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIq
IERvY3VtZW50OnJlZmVycmVyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRE9NQUlOLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRvbWFpbiIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6ZG9tYWluIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50
OmRvbWFpbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1VSTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJ1cmwiLAorICAgICAgICAgICAgIkRvY3VtZW50OnVybCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBEb2N1bWVudDp1cmwiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9DT09LSUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
Y29va2llIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpjb29raWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OmNvb2tpZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CT0RZ
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImJvZHkiLAorICAg
ICAgICAgICAgIkRvY3VtZW50OmJvZHkiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01IVE1MRWxlbWVudCogRG9jdW1lbnQ6Ym9keSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSEVBRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJoZWFkIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpoZWFkIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBEb2N1bWVudDpoZWFkIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURfRUxFTUVOVCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lNQUdFUywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJpbWFnZXMiLAorICAg
ICAgICAgICAgIkRvY3VtZW50OmltYWdlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDppbWFnZXMiLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FQUExFVFMsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiYXBwbGV0cyIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6
YXBwbGV0cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9u
KiBEb2N1bWVudDphcHBsZXRzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NP
TExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9MSU5LUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJsaW5rcyIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6bGlua3MiLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9jdW1lbnQ6bGlua3MiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk1TLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZvcm1zIiwKKyAgICAgICAgICAg
ICJEb2N1bWVudDpmb3JtcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxD
b2xsZWN0aW9uKiBEb2N1bWVudDpmb3JtcyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQU5DSE9SUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJhbmNob3JzIiwKKyAgICAgICAgICAgICJEb2N1bWVudDphbmNob3JzIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIERvY3VtZW50
OmFuY2hvcnMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0VNQkVEUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJlbWJl
ZHMiLAorICAgICAgICAgICAgIkRvY3VtZW50OmVtYmVkcyIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudDplbWJlZHMiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BMVUdJTlMsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicGx1Z2lucyIsCisgICAgICAgICAgICAi
RG9jdW1lbnQ6cGx1Z2lucyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxD
b2xsZWN0aW9uKiBEb2N1bWVudDpwbHVnaW5zIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9TQ1JJUFRTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgInNjcmlwdHMiLAorICAgICAgICAgICAgIkRvY3VtZW50OnNjcmlwdHMi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogRG9jdW1l
bnQ6c2NyaXB0cyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9O
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTEFTVF9NT0RJRklFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJsYXN0LW1vZGlmaWVkIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpsYXN0LW1vZGlmaWVk
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50Omxhc3QtbW9kaWZpZWQi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9DSEFSU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImNoYXJzZXQiLAorICAgICAgICAgICAgIkRvY3VtZW50OmNoYXJzZXQi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIERvY3VtZW50OmNoYXJzZXQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfUkVBRFlfU1RBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAicmVhZHktc3RhdGUiLAorICAgICAgICAgICAgIkRvY3VtZW50OnJlYWR5
LXN0YXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50OnJlYWR5LXN0
YXRlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hBUkFDVEVSX1NFVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaGFyYWN0ZXItc2V0IiwKKyAgICAgICAgICAgICJE
b2N1bWVudDpjaGFyYWN0ZXItc2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERv
Y3VtZW50OmNoYXJhY3Rlci1zZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QUkVGRVJSRURfU1RZTEVT
SEVFVF9TRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicHJl
ZmVycmVkLXN0eWxlc2hlZXQtc2V0IiwKKyAgICAgICAgICAgICJEb2N1bWVudDpwcmVmZXJyZWQt
c3R5bGVzaGVldC1zZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6
cHJlZmVycmVkLXN0eWxlc2hlZXQtc2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VMRUNURURfU1RZ
TEVTSEVFVF9TRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
c2VsZWN0ZWQtc3R5bGVzaGVldC1zZXQiLAorICAgICAgICAgICAgIkRvY3VtZW50OnNlbGVjdGVk
LXN0eWxlc2hlZXQtc2V0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBEb2N1bWVu
dDpzZWxlY3RlZC1zdHlsZXNoZWV0LXNldCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BQ1RJVkVfRUxF
TUVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJhY3RpdmUt
ZWxlbWVudCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6YWN0aXZlLWVsZW1lbnQiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBEb2N1bWVudDphY3RpdmUtZWxlbWVu
dCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTVBBVF9NT0RFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvbXBhdC1tb2RlIiwK
KyAgICAgICAgICAgICJEb2N1bWVudDpjb21wYXQtbW9kZSIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdjaGFyKiBEb2N1bWVudDpjb21wYXQtbW9kZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJ
VF9JU19GVUxMX1NDUkVFTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAg
ICAgICAid2Via2l0LWlzLWZ1bGwtc2NyZWVuIiwKKyAgICAgICAgICAgICJEb2N1bWVudDp3ZWJr
aXQtaXMtZnVsbC1zY3JlZW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBEb2N1
bWVudDp3ZWJraXQtaXMtZnVsbC1zY3JlZW4iLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRf
RlVMTF9TQ1JFRU5fS0VZQk9BUkRfSU5QVVRfQUxMT1dFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oCisgICAgICAgICAgICAid2Via2l0LWZ1bGwtc2NyZWVuLWtleWJvYXJkLWlucHV0
LWFsbG93ZWQiLAorICAgICAgICAgICAgIkRvY3VtZW50OndlYmtpdC1mdWxsLXNjcmVlbi1rZXli
b2FyZC1pbnB1dC1hbGxvd2VkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gRG9j
dW1lbnQ6d2Via2l0LWZ1bGwtc2NyZWVuLWtleWJvYXJkLWlucHV0LWFsbG93ZWQiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9XRUJLSVRfQ1VSUkVOVF9GVUxMX1NDUkVFTl9FTEVNRU5ULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIndlYmtpdC1jdXJyZW50LWZ1bGwt
c2NyZWVuLWVsZW1lbnQiLAorICAgICAgICAgICAgIkRvY3VtZW50OndlYmtpdC1jdXJyZW50LWZ1
bGwtc2NyZWVuLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVt
ZW50KiBEb2N1bWVudDp3ZWJraXQtY3VycmVudC1mdWxsLXNjcmVlbi1lbGVtZW50IiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0ZVTExTQ1JFRU5fRU5BQkxF
RCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2Via2l0LWZ1
bGxzY3JlZW4tZW5hYmxlZCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6d2Via2l0LWZ1bGxzY3Jl
ZW4tZW5hYmxlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIERvY3VtZW50Ondl
YmtpdC1mdWxsc2NyZWVuLWVuYWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfRlVM
TFNDUkVFTl9FTEVNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgIndlYmtpdC1mdWxsc2NyZWVuLWVsZW1lbnQiLAorICAgICAgICAgICAgIkRvY3VtZW50Ondl
YmtpdC1mdWxsc2NyZWVuLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01FbGVtZW50KiBEb2N1bWVudDp3ZWJraXQtZnVsbHNjcmVlbi1lbGVtZW50IiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUE9JTlRFUl9MT0NLX0VMRU1FTlQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicG9pbnRlci1sb2NrLWVsZW1l
bnQiLAorICAgICAgICAgICAgIkRvY3VtZW50OnBvaW50ZXItbG9jay1lbGVtZW50IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRWxlbWVudCogRG9jdW1lbnQ6cG9pbnRlci1sb2Nr
LWVsZW1lbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WSVNJQklM
SVRZX1NUQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZp
c2liaWxpdHktc3RhdGUiLAorICAgICAgICAgICAgIkRvY3VtZW50OnZpc2liaWxpdHktc3RhdGUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6dmlzaWJpbGl0eS1zdGF0
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0hJRERFTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAiaGlkZGVuIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpoaWRkZW4i
LAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBEb2N1bWVudDpoaWRkZW4iLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9DVVJSRU5UX1NDUklQVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJjdXJyZW50LXNjcmlwdCIsCisgICAgICAgICAgICAiRG9jdW1l
bnQ6Y3VycmVudC1zY3JpcHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudCogRG9jdW1lbnQ6Y3VycmVudC1zY3JpcHQiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PUklHSU4sCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAib3JpZ2luIiwKKyAgICAgICAgICAgICJEb2N1
bWVudDpvcmlnaW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnQ6b3Jp
Z2luIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NST0xMSU5HX0VMRU1FTlQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic2Nyb2xsaW5nLWVsZW1lbnQiLAorICAgICAg
ICAgICAgIkRvY3VtZW50OnNjcm9sbGluZy1lbGVtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRWxlbWVudCogRG9jdW1lbnQ6c2Nyb2xsaW5nLWVsZW1lbnQiLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSElMRFJFTiwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjaGlsZHJlbiIsCisgICAgICAgICAgICAiRG9j
dW1lbnQ6Y2hpbGRyZW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29s
bGVjdGlvbiogRG9jdW1lbnQ6Y2hpbGRyZW4iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAiZmlyc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAg
ICAgICAiRG9jdW1lbnQ6Zmlyc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTUVsZW1lbnQqIERvY3VtZW50OmZpcnN0LWVsZW1lbnQtY2hpbGQiLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQVNUX0VMRU1FTlRfQ0hJTEQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFzdC1lbGVtZW50LWNo
aWxkIiwKKyAgICAgICAgICAgICJEb2N1bWVudDpsYXN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBEb2N1bWVudDpsYXN0LWVsZW1lbnQt
Y2hpbGQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSElMRF9FTEVN
RU5UX0NPVU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiY2hp
bGQtZWxlbWVudC1jb3VudCIsCisgICAgICAgICAgICAiRG9jdW1lbnQ6Y2hpbGQtZWxlbWVudC1j
b3VudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBEb2N1bWVudDpjaGlsZC1lbGVt
ZW50LWNvdW50IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2luaXQoV2ViS2l0RE9NRG9jdW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50
X2NyZWF0ZV9lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdGFn
TmFtZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHRhZ05hbWUsIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRUYWdOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRhZ05hbWUpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlRWxlbWVudEZvckJpbmRp
bmdzKGNvbnZlcnRlZFRhZ05hbWUsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZG9jdW1lbnRfZnJhZ21lbnQoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVRleHQqIHdlYmtpdF9k
b21fZG9jdW1lbnRfY3JlYXRlX3RleHRfbm9kZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIGRhdGEpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2Vs
ZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRhdGEsIDApOworICAgIFdlYkNvcmU6
OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZERhdGEgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZGF0YSk7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlRleHQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVUZXh0
Tm9kZShjb252ZXJ0ZWREYXRhKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Db21tZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2Ny
ZWF0ZV9jb21tZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZGF0YSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoZGF0YSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRGF0YSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChkYXRhKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q29tbWVudD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZUNvbW1lbnQoY29udmVydGVk
RGF0YSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NQ0RBVEFTZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jZGF0
YV9zZWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZGF0YSwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGRhdGEsIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWREYXRh
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGRhdGEpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpDREFUQVNlY3Rpb24+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVDREFUQVNlY3Rpb24oY29udmVydGVkRGF0YSwg
ZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRf
Y3JlYXRlX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB0YXJnZXQsIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwodGFyZ2V0LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChkYXRh
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7Cisg
ICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVGFyZ2V0ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRhcmdldCk7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRGF0YSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChk
YXRhKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+Y3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnZlcnRlZFRhcmdldCwgY29udmVy
dGVkRGF0YSwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitXZWJLaXRET01BdHRyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9h
dHRyaWJ1dGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5jcmVhdGVBdHRyaWJ1dGUoY29udmVydGVkTmFtZSwgZWMpKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudHNfYnlfdGFn
X25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdGFnbmFtZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodGFnbmFtZSwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVGFnbmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0YWduYW1lKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5nZXRFbGVtZW50c0J5VGFnTmFtZShjb252ZXJ0ZWRUYWduYW1lKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2Rl
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2ltcG9ydF9ub2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxm
LCBXZWJLaXRET01Ob2RlKiBpbXBvcnRlZE5vZGUsIGdib29sZWFuIGRlZXAsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoaW1wb3J0ZWROb2RlKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAg
IFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNv
cmU6Ok5vZGUqIGNvbnZlcnRlZEltcG9ydGVkTm9kZSA9IFdlYktpdDo6Y29yZShpbXBvcnRlZE5v
ZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJD
b3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1wb3J0Tm9kZSgq
Y29udmVydGVkSW1wb3J0ZWROb2RlLCBkZWVwLCBlYykpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnRfbnMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBxdWFsaWZpZWROYW1lLCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocXVhbGlmaWVkTmFtZSwgMCk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6
OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFF1YWxpZmllZE5hbWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgocXVhbGlmaWVkTmFtZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6Omdl
dFB0cihpdGVtLT5jcmVhdGVFbGVtZW50TlMoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0
ZWRRdWFsaWZpZWROYW1lLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUF0dHIqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Y3JlYXRlX2F0dHJpYnV0ZV9ucyhXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIHF1YWxpZmllZE5hbWUsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChxdWFsaWZpZWROYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNw
YWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkUXVhbGlmaWVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChxdWFs
aWZpZWROYW1lKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0
ZUF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVSSSwgY29udmVydGVkUXVhbGlmaWVkTmFt
ZSwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudHNfYnlfdGFnX25hbWVfbnNfYXNfaHRtbF9jb2xsZWN0aW9uKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxO
YW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lc3BhY2VVUkksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGxvY2FsTmFtZSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJ
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkTG9jYWxOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGxvY2FsTmFtZSk7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkks
IGNvbnZlcnRlZExvY2FsTmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9kb2N1bWVudF9hZG9w
dF9ub2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBzb3VyY2UsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc291cmNl
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOwor
ICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdl
YkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFNvdXJjZSA9IFdlYktpdDo6Y29yZShzb3VyY2UpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YWRvcHROb2RlKCpjb252ZXJ0ZWRT
b3VyY2UsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworV2ViS2l0RE9NRXZlbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2V2
ZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXZlbnRUeXBlLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZlbnRUeXBlLCAwKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
RXZlbnRUeXBlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGV2ZW50VHlwZSk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OkV2ZW50PiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlRXZlbnQoY29udmVydGVkRXZlbnRU
eXBlLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTVJhbmdlKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9yYW5n
ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlUmFuZ2UoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHdlYmtp
dF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3IoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYsIFdlYktpdERPTU5vZGUqIHJvb3QsIGd1bG9uZyB3aGF0VG9TaG93LCBXZWJLaXRET01Ob2Rl
RmlsdGVyKiBmaWx0ZXIsIGdib29sZWFuIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocm9vdCksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFmaWx0ZXIgfHwgV0VCS0lUX0RPTV9JU19OT0RFX0ZJ
TFRFUihmaWx0ZXIpLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdlYkNvcmU6
OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZFJvb3QgPSBXZWJLaXQ6OmNvcmUocm9vdCk7CisgICAgUmVmUHRyPFdlYkNvcmU6
Ok5vZGVGaWx0ZXI+IGNvbnZlcnRlZEZpbHRlciA9IFdlYktpdDo6Y29yZShmaWx0ZXIpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpOb2RlSXRlcmF0b3I+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5jcmVhdGVOb2RlSXRlcmF0b3IoKmNvbnZlcnRlZFJvb3QsIHdoYXRUb1Nob3csIFdU
Rjo6Z2V0UHRyKGNvbnZlcnRlZEZpbHRlciksIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERP
TVRyZWVXYWxrZXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVfd2Fsa2VyKFdlYktp
dERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01Ob2RlKiByb290LCBndWxvbmcgd2hhdFRvU2hv
dywgV2ViS2l0RE9NTm9kZUZpbHRlciogZmlsdGVyLCBnYm9vbGVhbiBleHBhbmRFbnRpdHlSZWZl
cmVuY2VzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19O
T0RFKHJvb3QpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZmlsdGVyIHx8IFdFQktJ
VF9ET01fSVNfTk9ERV9GSUxURVIoZmlsdGVyKSwgMCk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9y
KTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSb290ID0gV2ViS2l0Ojpjb3JlKHJvb3QpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpOb2RlRmlsdGVyPiBjb252ZXJ0ZWRGaWx0ZXIgPSBXZWJLaXQ6OmNv
cmUoZmlsdGVyKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VHJlZVdhbGtlcj4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZVRyZWVXYWxrZXIoKmNvbnZlcnRlZFJvb3QsIHdo
YXRUb1Nob3csIFdURjo6Z2V0UHRyKGNvbnZlcnRlZEZpbHRlciksIGV4cGFuZEVudGl0eVJlZmVy
ZW5jZXMpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X292ZXJyaWRlX3N0eWxlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01FbGVtZW50
KiBlbGVtZW50LCBjb25zdCBnY2hhciogcHNldWRvRWxlbWVudCkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBjb252
ZXJ0ZWRFbGVtZW50ID0gV2ViS2l0Ojpjb3JlKGVsZW1lbnQpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFBzZXVkb0VsZW1lbnQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgocHNldWRvRWxlbWVu
dCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb24+IGdvYmplY3RSZXN1
bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRPdmVycmlkZVN0eWxlKGNvbnZlcnRlZEVsZW1lbnQs
IGNvbnZlcnRlZFBzZXVkb0VsZW1lbnQpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbiogd2Via2l0X2Rv
bV9kb2N1bWVudF9jcmVhdGVfZXhwcmVzc2lvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIGV4cHJlc3Npb24sIFdlYktpdERPTVhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNl
bGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChleHByZXNzaW9uLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX05TX1JFU09MVkVSKHJlc29s
dmVyKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDAp
OworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZEV4cHJlc3Npb24gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
ZXhwcmVzc2lvbik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlcj4gY29udmVy
dGVkUmVzb2x2ZXIgPSBXZWJLaXQ6OmNvcmUocmVzb2x2ZXIpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb24+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVFeHByZXNzaW9uKGNvbnZlcnRl
ZEV4cHJlc3Npb24sIFdURjo6Z2V0UHRyKGNvbnZlcnRlZFJlc29sdmVyKSwgZWMpKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01YUGF0aE5TUmVzb2x2ZXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25zX3Jlc29sdmVy
KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBub2RlUmVzb2x2ZXIpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShub2RlUmVzb2x2ZXIpLCAwKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJD
b3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlUmVzb2x2ZXIgPSBXZWJLaXQ6OmNvcmUobm9kZVJlc29s
dmVyKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVyPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlTlNSZXNvbHZlcihjb252ZXJ0ZWROb2RlUmVzb2x2
ZXIpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K1dlYktpdERPTVhQYXRoUmVzdWx0KiB3ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlKFdlYktp
dERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXhwcmVzc2lvbiwgV2ViS2l0RE9NTm9k
ZSogY29udGV4dE5vZGUsIFdlYktpdERPTVhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsIGd1c2hv
cnQgdHlwZSwgV2ViS2l0RE9NWFBhdGhSZXN1bHQqIGluUmVzdWx0LCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoZXhwcmVzc2lvbiwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OT0RFKGNvbnRleHROb2RlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoIXJlc29sdmVyIHx8IFdFQktJVF9ET01fSVNfWFBBVEhfTlNfUkVTT0xWRVIocmVz
b2x2ZXIpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghaW5SZXN1bHQgfHwgV0VCS0lU
X0RPTV9JU19YUEFUSF9SRVNVTFQoaW5SZXN1bHQpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRXhwcmVzc2lv
biA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChleHByZXNzaW9uKTsKKyAgICBXZWJDb3JlOjpOb2Rl
KiBjb252ZXJ0ZWRDb250ZXh0Tm9kZSA9IFdlYktpdDo6Y29yZShjb250ZXh0Tm9kZSk7CisgICAg
UmVmUHRyPFdlYkNvcmU6OlhQYXRoTlNSZXNvbHZlcj4gY29udmVydGVkUmVzb2x2ZXIgPSBXZWJL
aXQ6OmNvcmUocmVzb2x2ZXIpOworICAgIFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBjb252ZXJ0ZWRJ
blJlc3VsdCA9IFdlYktpdDo6Y29yZShpblJlc3VsdCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoUmVzdWx0PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZXZhbHVhdGUoY29udmVydGVkRXhwcmVzc2lvbiwgY29u
dmVydGVkQ29udGV4dE5vZGUsIFdURjo6Z2V0UHRyKGNvbnZlcnRlZFJlc29sdmVyKSwgdHlwZSwg
Y29udmVydGVkSW5SZXN1bHQsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9leGVj
X2NvbW1hbmQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kLCBn
Ym9vbGVhbiB1c2VySW50ZXJmYWNlLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChjb21tYW5kLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodmFsdWUs
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRDb21tYW5kID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KGNvbW1hbmQpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5leGVjQ29t
bWFuZChjb252ZXJ0ZWRDb21tYW5kLCB1c2VySW50ZXJmYWNlLCBjb252ZXJ0ZWRWYWx1ZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9xdWVy
eV9jb21tYW5kX2VuYWJsZWQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBj
b21tYW5kKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29tbWFuZCwgRkFMU0UpOworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZENvbW1hbmQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCk7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cXVlcnlDb21tYW5kRW5hYmxlZChjb252ZXJ0ZWRDb21t
YW5kKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3F1ZXJ5X2NvbW1hbmRfaW5kZXRlcm0oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiBjb21tYW5kKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29tbWFuZCwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZENvbW1hbmQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoY29tbWFu
ZCk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cXVlcnlDb21tYW5kSW5kZXRlcm0oY29u
dmVydGVkQ29tbWFuZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX3N0YXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogY29tbWFuZCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbW1hbmQsIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRDb21tYW5kID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KGNvbW1hbmQpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnF1ZXJ5Q29tbWFuZFN0YXRl
KGNvbnZlcnRlZENvbW1hbmQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdl
YmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9zdXBwb3J0ZWQoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPQ1VNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29t
bWFuZCwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZENvbW1hbmQgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoY29tbWFuZCk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cXVlcnlDb21t
YW5kU3VwcG9ydGVkKGNvbnZlcnRlZENvbW1hbmQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfdmFsdWUoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChj
b21tYW5kLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRDb21tYW5kID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGNvbW1hbmQpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPnF1ZXJ5Q29tbWFuZFZhbHVlKGNvbnZlcnRlZENvbW1hbmQpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudHNfYnlfbmFtZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVs
ZW1lbnROYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChlbGVtZW50TmFtZSwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkRWxlbWVudE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZWxlbWVudE5hbWUp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmdldEVsZW1lbnRzQnlOYW1lKGNvbnZlcnRlZEVsZW1lbnROYW1lKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01F
bGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2VsZW1lbnRfZnJvbV9wb2ludChXZWJLaXRET01E
b2N1bWVudCogc2VsZiwgZ2xvbmcgeCwgZ2xvbmcgeSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5lbGVtZW50RnJvbVBvaW50KHgsIHkpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTVJh
bmdlKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NhcmV0X3JhbmdlX2Zyb21fcG9pbnQoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYsIGdsb25nIHgsIGdsb25nIHkpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNhcmV0UmFuZ2VGcm9tUG9pbnQoeCwgeSkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY3NzX3N0eWxl
X2RlY2xhcmF0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTU3R5bGVEZWNs
YXJhdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZUNTU1N0eWxl
RGVjbGFyYXRpb24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjbGFzc05hbWVzKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChj
bGFzc05hbWVzLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRDbGFzc05hbWVzID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KGNsYXNzTmFtZXMpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVj
dGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoY29udmVydGVkQ2xhc3NOYW1lcykpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9oYXNf
Zm9jdXMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNGb2N1
cygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF93
ZWJraXRfY2FuY2VsX2Z1bGxfc2NyZWVuKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkRvY3VtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPndlYmtpdENhbmNlbEZ1bGxT
Y3JlZW4oKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3dlYmtpdF9leGl0X2Z1bGxz
Y3JlZW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+d2Via2l0RXhpdEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2RvY3VtZW50X2V4aXRfcG9pbnRlcl9sb2NrKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19E
T0NVTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+ZXhpdFBvaW50ZXJMb2NrKCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJQb2lu
dGVyIExvY2siKQorI2VuZGlmIC8qIEVOQUJMRShQT0lOVEVSX0xPQ0spICovCit9CisKK1dlYktp
dERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlbGVtZW50SWQpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGVsZW1lbnRJZCwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRWxlbWVudElkID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KGVsZW1lbnRJZCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRFbGVtZW50QnlJZChjb252ZXJ0
ZWRFbGVtZW50SWQpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfc2Vs
ZWN0b3IoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxlY3RvcnMsIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRTZWxlY3RvcnMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnF1ZXJ5U2VsZWN0b3IoY29udmVydGVk
U2VsZWN0b3JzLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX2RvY3VtZW50X3F1
ZXJ5X3NlbGVjdG9yX2FsbChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNl
bGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGVjdG9ycywgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzZWxlY3RvcnMp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnF1ZXJ5U2VsZWN0
b3JBbGwoY29udmVydGVkU2VsZWN0b3JzLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURvY3VtZW50VHlwZSogd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdHlwZShXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkRvY3VtZW50VHlwZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmRvY3R5
cGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitXZWJLaXRET01ET01JbXBsZW1lbnRhdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW1w
bGVtZW50YXRpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01JbXBsZW1lbnRh
dGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmltcGxlbWVudGF0aW9uKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfZWxlbWVudChX
ZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfaW5wdXRfZW5jb2RpbmcoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNoYXJhY3RlclNldFdpdGhVVEY4RmFsbGJhY2soKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3ht
bF9lbmNvZGluZyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+eG1sRW5jb2RpbmcoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF92ZXJzaW9uKFdlYktpdERPTURvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT54bWxWZXJzaW9uKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1s
X3ZlcnNpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0
ZW0tPnNldFhNTFZlcnNpb24oY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF9zdGFuZGFsb25lKFdlYktpdERPTURvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+eG1sU3RhbmRhbG9uZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3N0YW5kYWxvbmUo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpdGVtLT5zZXRYTUxTdGFuZGFsb25lKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciog
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfdXJpKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5kb2N1bWVudFVSSSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2RvY3Vt
ZW50X3VyaShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXREb2N1bWVudFVSSShjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK1dlYktpdERPTURPTVdpbmRvdyogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVsdF92
aWV3KFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZGVmYXVsdFZpZXcoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01TdHlsZVNoZWV0TGlz
dCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc3R5bGVfc2hlZXRzKFdlYktpdERPTURvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6U3R5bGVTaGVldExpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5zdHlsZVNoZWV0cygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb250ZW50
X3R5cGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmNvbnRlbnRUeXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF90aXRsZShXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGl0bGUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF90aXRsZShXZWJLaXRET01Eb2N1
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRUaXRsZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2dldF9kaXIoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmRpcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21fZG9jdW1lbnRfc2V0X2RpcihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXREaXIoY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVzaWduX21vZGUoV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmRl
c2lnbk1vZGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2Rv
Y3VtZW50X3NldF9kZXNpZ25fbW9kZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXREZXNpZ25Nb2RlKGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3JlZmVycmVy
KFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5yZWZlcnJlcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfZG9tYWluKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5kb21haW4oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3VybChXZWJLaXRET01Eb2N1bWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dXJsRm9yQmluZGluZ3MoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2Nvb2tpZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jb29r
aWUoZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1l
bnRfc2V0X2Nvb2tpZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaXRlbS0+c2V0Q29va2llKGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitXZWJLaXRE
T01IVE1MRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShXZWJLaXRET01Eb2N1
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+Ym9keU9yRnJhbWVzZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2JvZHko
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxFbGVtZW50KiB2YWx1ZSwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVCh2YWx1ZSkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRv
Y3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkhUTUxFbGVt
ZW50KiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0Qm9keU9yRnJhbWVzZXQoY29udmVy
dGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUhUTUxIZWFkRWxlbWVudCogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfaGVhZChXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhU
TUxIZWFkRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmhlYWQoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW1hZ2VzKFdlYktp
dERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5pbWFnZXMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfYXBwbGV0cyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YXBwbGV0
cygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhX
ZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NV
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bGlua3MoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfZm9ybXMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvcm1z
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2FuY2hvcnMo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmFuY2hvcnMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiog
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZW1iZWRzKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5l
bWJlZHMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcGx1
Z2lucyhXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGx1Z2lucygpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0
aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zY3JpcHRzKFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5zY3JpcHRzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xhc3RfbW9kaWZpZWQo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9D
VU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
Pmxhc3RNb2RpZmllZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfY2hhcnNldChXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y2hhcnNldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0Q2hhcnNldChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9yZWFkeV9zdGF0ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cmVhZHlTdGF0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hhcmFjdGVyX3NldChXZWJL
aXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y2hh
cmFjdGVyU2V0V2l0aFVURjhGYWxsYmFjaygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Y2hhciogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcHJlZmVycmVkX3N0eWxlc2hlZXRfc2V0KFdl
YktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5w
cmVmZXJyZWRTdHlsZXNoZWV0U2V0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zZWxlY3RlZF9zdHlsZXNoZWV0X3NldChXZWJLaXRE
T01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c2VsZWN0
ZWRTdHlsZXNoZWV0U2V0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9kb2N1bWVudF9zZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQoV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
Q1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0KGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0RE9N
RWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYWN0aXZlX2VsZW1lbnQoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+YWN0aXZlRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jb21w
YXRfbW9kZShXZWJLaXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+Y29tcGF0TW9kZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfaXNfZnVsbF9zY3JlZW4oV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2Vs
ZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53ZWJraXRJc0Z1bGxTY3JlZW4oKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF93ZWJraXRfZnVsbF9zY3JlZW5fa2V5Ym9hcmRfaW5wdXRfYWxsb3dlZChXZWJLaXRET01Eb2N1
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdEZ1bGxTY3JlZW5LZXlib2FyZElu
cHV0QWxsb3dlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTUVsZW1lbnQq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3dlYmtpdF9jdXJyZW50X2Z1bGxfc2NyZWVuX2VsZW1l
bnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50KCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZW5hYmxlZChXZWJL
aXRET01Eb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVO
VChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdEZ1bGxzY3JlZW5F
bmFibGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZWxlbWVudChXZWJLaXRET01E
b2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3BvaW50ZXJfbG9ja19lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBz
ZWxmKQoreworI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cG9pbnRlckxvY2tFbGVtZW50KCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlBvaW50ZXIg
TG9jayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFBPSU5URVJfTE9DSykgKi8K
K30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Zpc2liaWxpdHlfc3RhdGUoV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZp
c2liaWxpdHlTdGF0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2RvY3VtZW50X2dldF9oaWRkZW4oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5oaWRkZW4oKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY3VycmVudF9zY3Jp
cHQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudD4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmN1cnJlbnRTY3JpcHQoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfb3JpZ2luKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
b2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5vcmlnaW4oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2Nyb2xsaW5n
X2VsZW1lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2Nyb2xsaW5nRWxlbWVudCgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUhUTUxD
b2xsZWN0aW9uKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGlsZHJlbihXZWJLaXRET01Eb2N1
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+Y2hpbGRyZW4oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9maXJzdF9lbGVtZW50X2NoaWxkKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
b2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZpcnN0RWxlbWVudENo
aWxkKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9lbGVtZW50
X2NoaWxkKFdlYktpdERPTURvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmxhc3RFbGVtZW50Q2hpbGQoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfY2hpbGRfZWxlbWVudF9jb3VudChXZWJLaXRET01Eb2N1bWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6RG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25n
IHJlc3VsdCA9IGl0ZW0tPmNoaWxkRWxlbWVudENvdW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZjQ5NDkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURvY3VtZW50LmgKQEAgLTAsMCArMSw4NDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVm
aW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20u
aD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERP
TURvY3VtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9jdW1lbnRfaAorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9kZS5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VNRU5UKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9E
T0NVTUVOVCwgV2ViS2l0RE9NRG9jdW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VNRU5U
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9ET0NVTUVOVCwgV2ViS2l0RE9NRG9jdW1lbnRDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0RPQ1VNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0RPQ1VNRU5ULCBXZWJLaXRET01Eb2N1bWVudENsYXNzKSkKKworc3RydWN0
IF9XZWJLaXRET01Eb2N1bWVudCB7CisgICAgV2ViS2l0RE9NTm9kZSBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTURvY3VtZW50Q2xhc3MgeworICAgIFdlYktpdERPTU5v
ZGVDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Y3JlYXRlX2VsZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB0YWdO
YW1lOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
RWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0YWdOYW1lLCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZG9jdW1lbnRfZnJhZ21lbnQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Eb2N1bWVudEZyYWdtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZG9jdW1lbnRf
ZnJhZ21lbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9jdW1lbnRfY3JlYXRlX3RleHRfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICogQGRhdGE6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01UZXh0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGV4dCoKK3dlYmtpdF9k
b21fZG9jdW1lbnRfY3JlYXRlX3RleHRfbm9kZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIGRhdGEpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2Nv
bW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBkYXRhOiBBICNnY2hh
cgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQ29tbWVudAor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNvbW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2Ny
ZWF0ZV9jb21tZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZGF0YSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfY2RhdGFfc2VjdGlvbjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGRhdGE6IEEgI2djaGFyCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERP
TUNEQVRBU2VjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNEQVRBU2VjdGlvbioKK3dl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2NkYXRhX3NlY3Rpb24oV2ViS2l0RE9NRG9jdW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiBkYXRhLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfcHJvY2Vzc2luZ19pbnN0cnVjdGlvbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHRhcmdldDogQSAjZ2NoYXIKKyAqIEBkYXRhOiBB
ICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9wcm9jZXNzaW5nX2luc3RydWN0aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdGFyZ2V0LCBjb25zdCBnY2hhciogZGF0YSwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICogQG5hbWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUF0dHIKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01BdHRyKgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0
cmlidXRlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5
X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1
bWVudAorICogQHRhZ25hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNlOiAyLjEyCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0YWduYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2RvY3VtZW50X2ltcG9ydF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50Cisg
KiBAaW1wb3J0ZWROb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZGVlcDogQSAjZ2Jvb2xlYW4K
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9t
X2RvY3VtZW50X2ltcG9ydF9ub2RlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01O
b2RlKiBpbXBvcnRlZE5vZGUsIGdib29sZWFuIGRlZXAsIEdFcnJvcioqIGVycm9yKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVtZW50X25zOgorICogQHNlbGY6IEEg
I1dlYktpdERPTURvY3VtZW50CisgKiBAbmFtZXNwYWNlVVJJOiAoYWxsb3ctbm9uZSk6IEEgI2dj
aGFyCisgKiBAcXVhbGlmaWVkTmFtZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9l
bGVtZW50X25zKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNl
VVJJLCBjb25zdCBnY2hhciogcXVhbGlmaWVkTmFtZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0ZV9uczoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorICogQG5hbWVzcGFjZVVSSTogKGFsbG93LW5vbmUpOiBBICNn
Y2hhcgorICogQHF1YWxpZmllZE5hbWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUF0dHIKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01BdHRyKgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0cmli
dXRlX25zKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJ
LCBjb25zdCBnY2hhciogcXVhbGlmaWVkTmFtZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zX2FzX2h0bWxf
Y29sbGVjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQG5hbWVzcGFj
ZVVSSTogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNl
OiAyLjEyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9uc19hc19odG1sX2NvbGxlY3Rp
b24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNv
bnN0IGdjaGFyKiBsb2NhbE5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfYWRv
cHRfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHNvdXJjZTogQSAj
V2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9k
ZSoKK3dlYmtpdF9kb21fZG9jdW1lbnRfYWRvcHRfbm9kZShXZWJLaXRET01Eb2N1bWVudCogc2Vs
ZiwgV2ViS2l0RE9NTm9kZSogc291cmNlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyAqIEBldmVudFR5cGU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUV2ZW50CisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NRXZlbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9ldmVudChX
ZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGV2ZW50VHlwZSwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3JhbmdlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01SYW5nZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVJhbmdlKgor
d2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfcmFuZ2UoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25vZGVfaXRlcmF0b3I6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEByb290OiBBICNXZWJLaXRET01Ob2Rl
CisgKiBAd2hhdFRvU2hvdzogQSAjZ3Vsb25nCisgKiBAZmlsdGVyOiAoYWxsb3ctbm9uZSk6IEEg
I1dlYktpdERPTU5vZGVGaWx0ZXIKKyAqIEBleHBhbmRFbnRpdHlSZWZlcmVuY2VzOiBBICNnYm9v
bGVhbgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
OiBBICNXZWJLaXRET01Ob2RlSXRlcmF0b3IKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2Rl
SXRlcmF0b3IqCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9ub2RlX2l0ZXJhdG9yKFdlYktp
dERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01Ob2RlKiByb290LCBndWxvbmcgd2hhdFRvU2hv
dywgV2ViS2l0RE9NTm9kZUZpbHRlciogZmlsdGVyLCBnYm9vbGVhbiBleHBhbmRFbnRpdHlSZWZl
cmVuY2VzLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9j
cmVhdGVfdHJlZV93YWxrZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBy
b290OiBBICNXZWJLaXRET01Ob2RlCisgKiBAd2hhdFRvU2hvdzogQSAjZ3Vsb25nCisgKiBAZmls
dGVyOiAoYWxsb3ctbm9uZSk6IEEgI1dlYktpdERPTU5vZGVGaWx0ZXIKKyAqIEBleHBhbmRFbnRp
dHlSZWZlcmVuY2VzOiBBICNnYm9vbGVhbgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NVHJlZVdhbGtlcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3Ry
ZWVfd2Fsa2VyKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBXZWJLaXRET01Ob2RlKiByb290LCBn
dWxvbmcgd2hhdFRvU2hvdywgV2ViS2l0RE9NTm9kZUZpbHRlciogZmlsdGVyLCBnYm9vbGVhbiBl
eHBhbmRFbnRpdHlSZWZlcmVuY2VzLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfb3ZlcnJpZGVfc3R5bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyAqIEBlbGVtZW50OiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAcHNldWRvRWxl
bWVudDogKGFsbG93LW5vbmUpOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9vdmVy
cmlkZV9zdHlsZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgV2ViS2l0RE9NRWxlbWVudCogZWxl
bWVudCwgY29uc3QgZ2NoYXIqIHBzZXVkb0VsZW1lbnQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZG9jdW1lbnRfY3JlYXRlX2V4cHJlc3Npb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1l
bnQKKyAqIEBleHByZXNzaW9uOiBBICNnY2hhcgorICogQHJlc29sdmVyOiBBICNXZWJLaXRET01Y
UGF0aE5TUmVzb2x2ZXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXhw
cmVzc2lvbihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGV4cHJlc3Npb24s
IFdlYktpdERPTVhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9uc19yZXNvbHZlcjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQG5vZGVSZXNvbHZlcjogQSAjV2ViS2l0RE9NTm9k
ZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NWFBhdGhOU1Jl
c29sdmVyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKgord2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfbnNfcmVzb2x2ZXIoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYs
IFdlYktpdERPTU5vZGUqIG5vZGVSZXNvbHZlcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1
bWVudF9ldmFsdWF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGV4cHJl
c3Npb246IEEgI2djaGFyCisgKiBAY29udGV4dE5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBy
ZXNvbHZlcjogKGFsbG93LW5vbmUpOiBBICNXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIKKyAqIEB0
eXBlOiBBICNndXNob3J0CisgKiBAaW5SZXN1bHQ6IChhbGxvdy1ub25lKTogQSAjV2ViS2l0RE9N
WFBhdGhSZXN1bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01YUGF0aFJlc3VsdCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBleHByZXNzaW9uLCBXZWJLaXRET01Ob2RlKiBjb250
ZXh0Tm9kZSwgV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyKiByZXNvbHZlciwgZ3VzaG9ydCB0eXBl
LCBXZWJLaXRET01YUGF0aFJlc3VsdCogaW5SZXN1bHQsIEdFcnJvcioqIGVycm9yKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2V4ZWNfY29tbWFuZDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01Eb2N1bWVudAorICogQGNvbW1hbmQ6IEEgI2djaGFyCisgKiBAdXNlckludGVyZmFjZTog
QSAjZ2Jvb2xlYW4KKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X2V4ZWNf
Y29tbWFuZChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNvbW1hbmQsIGdi
b29sZWFuIHVzZXJJbnRlcmZhY2UsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX2VuYWJsZWQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqIEBjb21tYW5kOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9jdW1lbnRf
cXVlcnlfY29tbWFuZF9lbmFibGVkKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogY29tbWFuZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5k
X2luZGV0ZXJtOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAY29tbWFuZDog
QSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfaW5kZXRlcm0oV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfc3RhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRG9jdW1lbnQKKyAqIEBjb21tYW5kOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2di
b29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVl
cnlfY29tbWFuZF9zdGF0ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGNv
bW1hbmQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9zdXBw
b3J0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEBjb21tYW5kOiBBICNn
Y2hhcgorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9zdXBwb3J0ZWQoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyAqIEBjb21tYW5kOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1h
bmRfdmFsdWUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBjb21tYW5kKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9uYW1lOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZWxlbWVudE5hbWU6IEEgI2djaGFyCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudHNfYnlfbmFtZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVs
ZW1lbnROYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2VsZW1lbnRfZnJvbV9w
b2ludDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHg6IEEgI2dsb25nCisg
KiBAeTogQSAjZ2xvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2Rv
bV9kb2N1bWVudF9lbGVtZW50X2Zyb21fcG9pbnQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGds
b25nIHgsIGdsb25nIHkpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2Nz
c19zdHlsZV9kZWNsYXJhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24qCit3ZWJr
aXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jc3Nfc3R5bGVfZGVjbGFyYXRpb24oV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRz
X2J5X2NsYXNzX25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50CisgKiBAY2xhc3NOYW1lczogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgorICogU2luY2U6IDIu
MTIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uKFdl
YktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogY2xhc3NOYW1lcyk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb2N1bWVudF9oYXNfZm9jdXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X2hhc19mb2N1cyhXZWJLaXRET01Eb2N1bWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQGVsZW1lbnRJZDogQSAjZ2NoYXIK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
ZWxlbWVudF9ieV9pZChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVsZW1l
bnRJZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9zZWxlY3RvcjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHNlbGVjdG9yczogQSAjZ2NoYXIKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2Vi
S2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRf
ZG9tX2RvY3VtZW50X3F1ZXJ5X3NlbGVjdG9yKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9kb2N1bWVudF9xdWVyeV9zZWxlY3Rvcl9hbGw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyAqIEBzZWxlY3RvcnM6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVMaXN0CisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X3Nl
bGVjdG9yX2FsbChXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9y
cywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Rv
Y3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50VHlwZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTURvY3VtZW50VHlwZSoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvY3R5cGUo
V2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Z2V0X2ltcGxlbWVudGF0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01JbXBsZW1lbnRhdGlv
bgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTUltcGxlbWVudGF0aW9uKgord2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfaW1wbGVtZW50YXRpb24oV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvY3VtZW50X2VsZW1lbnQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50
Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfZWxlbWVudChXZWJLaXRET01Eb2N1
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW5wdXRfZW5j
b2Rpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
aW5wdXRfZW5jb2RpbmcoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X3htbF9lbmNvZGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01E
b2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxfZW5jb2RpbmcoV2ViS2l0RE9NRG9jdW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF92ZXJzaW9uOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF92ZXJz
aW9uKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3NldF94bWxfdmVyc2lvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3htbF92ZXJzaW9uKFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxfc3RhbmRhbG9uZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3htbF9zdGFuZGFsb25lKFdl
YktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3Nl
dF94bWxfc3RhbmRhbG9uZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHZh
bHVlOiBBICNnYm9vbGVhbgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X3htbF9zdGFuZGFsb25lKFdlYktpdERPTURv
Y3VtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvY3VtZW50X3VyaToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF91cmkoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2RvY3VtZW50
X3VyaToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kb2N1
bWVudF91cmkoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVsdF92aWV3OgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01ET01XaW5kb3cKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01XaW5kb3cq
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kZWZhdWx0X3ZpZXcoV2ViS2l0RE9NRG9jdW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3N0eWxlX3NoZWV0czoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NU3R5bGVTaGVldExpc3QKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01TdHlsZVNoZWV0TGlzdCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3N0eWxlX3NoZWV0
cyhXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfdGl0bGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfdGl0bGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZG9jdW1lbnRfc2V0X3RpdGxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfc2V0X3RpdGxlKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2Rlc2lnbl9tb2RlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTaW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZGVzaWduX21vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2Rlc2lnbl9tb2RlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTURvY3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIuMTQK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kZXNpZ25fbW9k
ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9yZWZlcnJlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9yZWZlcnJlcihXZWJLaXRET01Eb2N1bWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9tYWluOgorICogQHNl
bGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvbWFpbihXZWJLaXRE
T01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdXJs
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3VybChX
ZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfY29va2llOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29va2llKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfY29va2ll
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9k
b2N1bWVudF9zZXRfY29va2llKFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9ib2R5OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShXZWJL
aXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9zZXRf
Ym9keToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICogQHZhbHVlOiBBICNXZWJL
aXRET01IVE1MRWxlbWVudAorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2JvZHkoV2ViS2l0RE9NRG9jdW1lbnQqIHNl
bGYsIFdlYktpdERPTUhUTUxFbGVtZW50KiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhU
TUxIZWFkRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCoK
K3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ltYWdlczoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29sbGVj
dGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2ltYWdlcyhXZWJLaXRET01Eb2N1bWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYXBwbGV0czoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01I
VE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2FwcGxldHMoV2ViS2l0RE9N
RG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtz
OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2Zvcm1zOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZm9y
bXMoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X2FuY2hvcnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9hbmNob3JzKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9lbWJlZHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0
aW9uCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MQ29s
bGVjdGlvbioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VtYmVkcyhXZWJLaXRET01Eb2N1bWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcGx1Z2luczoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBTaW5jZTogMi4xNAorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVu
dF9nZXRfcGx1Z2lucyhXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfc2NyaXB0czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24KKyAqCisgKiBTaW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxD
b2xsZWN0aW9uKgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2NyaXB0cyhXZWJLaXRET01Eb2N1
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9tb2Rp
ZmllZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9s
YXN0X21vZGlmaWVkKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X2NoYXJzZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfY2hhcnNldChXZWJLaXRET01Eb2N1bWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9yZWFkeV9zdGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF9yZWFkeV9zdGF0ZShXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY2hhcmFjdGVyX3NldDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGFyYWN0ZXJfc2V0KFdlYktpdERP
TURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9wcmVm
ZXJyZWRfc3R5bGVzaGVldF9zZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfcHJlZmVycmVkX3N0eWxlc2hlZXRfc2V0KFdlYktpdERPTURvY3VtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9zZWxlY3RlZF9zdHls
ZXNoZWV0X3NldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9zZWxlY3RlZF9zdHlsZXNoZWV0X3NldChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9zZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfc2VsZWN0ZWRf
c3R5bGVzaGVldF9zZXQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYWN0aXZlX2VsZW1lbnQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVt
ZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYWN0aXZlX2VsZW1lbnQoV2ViS2l0RE9NRG9j
dW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NvbXBhdF9t
b2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyAqCisgKiBTaW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfY29tcGF0X21vZGUoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NRG9jdW1lbnRfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50QW5pbWF0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjRjNDhmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSw2IEBACisv
KgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMg
dGhhdCBXZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5oIGFuZAorICAgIFdlYktpdERPTURvY3Vt
ZW50QW5pbWF0aW9uLmNwcCBhcmUgY3JlYXRlZCBmb3IgRG9jdW1lbnRBbmltYXRpb24uaWRsLCBh
bmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2Vu
ZXJhdGUgV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uaCBhbmQKKyAgICBXZWJLaXRET01Eb2N1
bWVudEFuaW1hdGlvbi5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0
cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44ZjRjNDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlv
bi5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3Qg
dG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uaCBh
bmQKKyAgICBXZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbi5jcHAgYXJlIGNyZWF0ZWQgZm9yIERv
Y3VtZW50QW5pbWF0aW9uLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3Jp
cHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTURvY3VtZW50QW5pbWF0aW9uLmgg
YW5kCisgICAgV2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24uY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBU
aGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURvY3VtZW50RnJhZ21lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM0M2U1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Eb2N1bWVudEZyYWdtZW50LmNwcApAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTURvY3VtZW50RnJhZ21lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2
ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
PgorI2luY2x1ZGUgIldlYktpdERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVM
aXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCoga2l0KFdlYkNvcmU6OkRvY3VtZW50
RnJhZ21lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET0NVTUVOVF9GUkFHTUVO
VChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6
RG9jdW1lbnRGcmFnbWVudCogY29yZShXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RG9jdW1lbnRG
cmFnbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHdyYXBEb2N1bWVudEZyYWdtZW50KFdlYkNv
cmU6OkRvY3VtZW50RnJhZ21lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0RPQ1VNRU5UX0ZSQUdNRU5UKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShl
dmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6RG9jdW1lbnRGcmFnbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmpl
Y3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBk
ZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnRGcmFnbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50
RnJhZ21lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sK
KyAgICBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZh
Y2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9kaXNwYXRj
aF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9kb2N1
bWVudF9mcmFnbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50LCB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50LCBXRUJLSVRfRE9NX1RZUEVfTk9E
RSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAg
UFJPUF9DSElMRFJFTiwKKyAgICBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQsCisgICAgUFJPUF9M
QVNUX0VMRU1FTlRfQ0hJTEQsCisgICAgUFJPUF9DSElMRF9FTEVNRU5UX0NPVU5ULAorfTsKKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9ET0NVTUVOVF9GUkFHTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX0NISUxEUkVOOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2NoaWxkcmVuKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVu
dF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9MQVNUX0VMRU1FTlRfQ0hJTEQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxk
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NISUxEX0VMRU1FTlRfQ09V
TlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50
X2ZyYWdtZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfY2xhc3NfaW5pdChXZWJL
aXRET01Eb2N1bWVudEZyYWdtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSElMRFJFTiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjaGlsZHJlbiIsCisgICAgICAgICAgICAi
RG9jdW1lbnRGcmFnbWVudDpjaGlsZHJlbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktp
dERPTUhUTUxDb2xsZWN0aW9uKiBEb2N1bWVudEZyYWdtZW50OmNoaWxkcmVuIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GSVJTVF9FTEVNRU5UX0NISUxE
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZpcnN0LWVsZW1l
bnQtY2hpbGQiLAorICAgICAgICAgICAgIkRvY3VtZW50RnJhZ21lbnQ6Zmlyc3QtZWxlbWVudC1j
aGlsZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUVsZW1lbnQqIERvY3VtZW50
RnJhZ21lbnQ6Zmlyc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0xBU1RfRUxFTUVOVF9DSElMRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgKKyAgICAgICAgICAgICJsYXN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAgICAgIkRv
Y3VtZW50RnJhZ21lbnQ6bGFzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRWxlbWVudCogRG9jdW1lbnRGcmFnbWVudDpsYXN0LWVsZW1lbnQtY2hpbGQi
LAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSElMRF9FTEVNRU5UX0NP
VU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiY2hpbGQtZWxl
bWVudC1jb3VudCIsCisgICAgICAgICAgICAiRG9jdW1lbnRGcmFnbWVudDpjaGlsZC1lbGVtZW50
LWNvdW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIERvY3VtZW50RnJhZ21lbnQ6
Y2hpbGQtZWxlbWVudC1jb3VudCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9pbml0KFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQq
IHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01F
bGVtZW50KiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9lbGVtZW50X2J5X2lkKFdl
YktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlbGVtZW50SWQpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlRfRlJBR01FTlQoc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGVsZW1lbnRJZCwgMCk7CisgICAgV2ViQ29yZTo6RG9j
dW1lbnRGcmFnbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRFbGVtZW50SWQgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZWxlbWVudElkKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmdldEVsZW1lbnRCeUlkKGNvbnZlcnRlZEVsZW1lbnRJZCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVudCog
d2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9xdWVyeV9zZWxlY3RvcihXZWJLaXRET01Eb2N1
bWVudEZyYWdtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9GUkFHTUVOVChzZWxmKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZWN0b3JzLCAwKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnRGcmFnbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRTZWxlY3RvcnMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxl
bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnF1ZXJ5U2VsZWN0b3IoY29u
dmVydGVkU2VsZWN0b3JzLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X2ZyYWdtZW50X3F1ZXJ5X3NlbGVjdG9yX2FsbChXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9GUkFHTUVOVChzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZWN0b3JzLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxl
Y3RvcnMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5xdWVyeVNlbGVjdG9yQWxsKGNvbnZlcnRlZFNl
bGVjdG9ycywgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9kb2N1bWVu
dF9mcmFnbWVudF9nZXRfY2hpbGRyZW4oV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9GUkFHTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5jaGlsZHJlbigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZnJhZ21lbnRfZ2V0X2ZpcnN0X2VsZW1lbnRfY2hpbGQoV2ViS2l0RE9NRG9jdW1lbnRG
cmFnbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9GUkFH
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZpcnN0RWxlbWVudENoaWxkKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVu
dCogd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxkKFdl
YktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRE9DVU1FTlRfRlJBR01FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50RnJh
Z21lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkVs
ZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sYXN0RWxlbWVudENoaWxk
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
Z3Vsb25nIHdlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2NoaWxkX2VsZW1lbnRfY291
bnQoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19ET0NVTUVOVF9GUkFHTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RG9jdW1l
bnRGcmFnbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0
ID0gaXRlbS0+Y2hpbGRFbGVtZW50Q291bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZjc4YzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuaApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9j
dW1lbnRGcmFnbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ET0NV
TUVOVF9GUkFHTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfRlJBR01FTlQob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0RPQ1VNRU5UX0ZSQUdNRU5ULCBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9ET0NVTUVOVF9GUkFHTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQs
IFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19E
T0NVTUVOVF9GUkFHTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfRlJBR01FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0RPQ1VNRU5UX0ZSQUdNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9GUkFHTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fRE9DVU1FTlRfRlJBR01FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX0ZS
QUdNRU5ULCBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTURvY3VtZW50RnJhZ21lbnQgeworICAgIFdlYktpdERPTU5vZGUgcGFyZW50X2luc3RhbmNl
OworfTsKKworc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTU5vZGVDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnRQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4NjI0NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TURvY3VtZW50RnJhZ21lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9jdW1lbnRGcmFn
bWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiB3cmFwRG9jdW1lbnRGcmFn
bWVudChXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50Kik7CitXZWJLaXRET01Eb2N1bWVudEZyYWdt
ZW50KiBraXQoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCopOworV2ViQ29yZTo6RG9jdW1lbnRG
cmFnbWVudCogY29yZShXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50Kik7Cit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudFVuc3RhYmxlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURv
Y3VtZW50RnJhZ21lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjBhN2M5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3VtZW50RnJhZ21lbnRVbnN0
YWJsZS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdl
YktpdERPTURvY3VtZW50RnJhZ21lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVu
c3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2ZyYWdtZW50X2dldF9lbGVtZW50X2J5X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3Vt
ZW50RnJhZ21lbnQKKyAqIEBlbGVtZW50SWQ6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2RvY3Vt
ZW50X2ZyYWdtZW50X2dldF9lbGVtZW50X2J5X2lkKFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiBlbGVtZW50SWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9j
dW1lbnRfZnJhZ21lbnRfcXVlcnlfc2VsZWN0b3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnRGcmFnbWVudAorICogQHNlbGVjdG9yczogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVt
ZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9xdWVyeV9zZWxlY3RvcihXZWJLaXRE
T01Eb2N1bWVudEZyYWdtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3Iq
KiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9xdWVyeV9z
ZWxlY3Rvcl9hbGw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorICog
QHNlbGVjdG9yczogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9t
X2RvY3VtZW50X2ZyYWdtZW50X3F1ZXJ5X3NlbGVjdG9yX2FsbChXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfY2hpbGRyZW46CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJr
aXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9jaGlsZHJlbihXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dl
dF9maXJzdF9lbGVtZW50X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50RnJh
Z21lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUVsZW1l
bnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
RWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZnJhZ21lbnRfZ2V0X2ZpcnN0X2VsZW1lbnRf
Y2hpbGQoV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxkOgorICogQHNlbGY6
IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZnJh
Z21lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9jaGlsZF9l
bGVtZW50X2NvdW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2RvY3VtZW50X2ZyYWdtZW50X2dldF9jaGls
ZF9lbGVtZW50X2NvdW50KFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHNlbGYpOworCisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Eb2N1bWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4YmY4NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Eb2N1bWVudFByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRET01Eb2N1bWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Eb2N1bWVudC5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURvY3VtZW50KiB3cmFwRG9jdW1lbnQoV2ViQ29yZTo6
RG9jdW1lbnQqKTsKK1dlYktpdERPTURvY3VtZW50KiBraXQoV2ViQ29yZTo6RG9jdW1lbnQqKTsK
K1dlYkNvcmU6OkRvY3VtZW50KiBjb3JlKFdlYktpdERPTURvY3VtZW50Kik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTURvY3VtZW50UHJpdmF0ZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRpbWVs
aW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGE1NmQzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lLmNwcApAQCAtMCwwICsxLDc3IEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZS5oIgorCisjaW5jbHVkZSA8V2ViQ29y
ZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURv
Y3VtZW50VGltZWxpbmVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSoga2l0KFdl
YkNvcmU6OkRvY3VtZW50VGltZWxpbmUqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChv
YmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9ET0NVTUVOVF9USU1FTElORShyZXQpOwor
CisgICAgcmV0dXJuIHdyYXBEb2N1bWVudFRpbWVsaW5lKG9iaik7Cit9CisKK1dlYkNvcmU6OkRv
Y3VtZW50VGltZWxpbmUqIGNvcmUoV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50VGlt
ZWxpbmUqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQor
CitXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lKiB3cmFwRG9jdW1lbnRUaW1lbGluZShXZWJDb3Jl
OjpEb2N1bWVudFRpbWVsaW5lKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0
KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9ET0NVTUVOVF9USU1FTElORShnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RJTUVMSU5FLCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9BTklNQVRJT05TKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTURvY3VtZW50
VGltZWxpbmUsIHdlYmtpdF9kb21fZG9jdW1lbnRfdGltZWxpbmUsIFdFQktJVF9ET01fVFlQRV9B
TklNQVRJT05fVElNRUxJTkUpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfdGlt
ZWxpbmVfY2xhc3NfaW5pdChXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lQ2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdENsYXNzKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9kb2N1bWVudF90aW1lbGluZV9pbml0KFdlYktpdERPTURvY3VtZW50VGlt
ZWxpbmUqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZTg0Y2EKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURvY3VtZW50VGltZWxpbmUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50VGltZWxp
bmVfaAorI2RlZmluZSBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lX2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RJTUVMSU5FICAgICAgICAgICAgKHdl
YmtpdF9kb21fZG9jdW1lbnRfdGltZWxpbmVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9ET0NVTUVOVF9USU1FTElORShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVElNRUxJTkUsIFdlYktpdERP
TURvY3VtZW50VGltZWxpbmUpKQorI2RlZmluZSBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RJTUVMSU5F
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9ET0NVTUVOVF9USU1FTElORSwgV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZUNs
YXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RJTUVMSU5FKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ET0NV
TUVOVF9USU1FTElORSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRE9DVU1FTlRfVElNRUxJTkVf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX0RPQ1VNRU5UX1RJTUVMSU5FKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET0NVTUVOVF9U
SU1FTElORV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVElNRUxJTkUsIFdlYktpdERPTURvY3VtZW50VGlt
ZWxpbmVDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZSB7CisgICAg
V2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmUgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lQ2xhc3MgeworICAgIFdlYktpdERPTUFuaW1hdGlv
blRpbWVsaW5lQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2RvbV9kb2N1bWVudF90aW1lbGluZV9nZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTURvY3VtZW50VGltZWxpbmVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRp
bWVsaW5lUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lUHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MTY1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTURvY3VtZW50VGltZWxpbmVQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Eb2N1bWVudFRpbWVsaW5l
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTURvY3VtZW50VGltZWxpbmVQcml2YXRlX2gKKwor
I2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRUaW1lbGluZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01Eb2N1bWVudFRpbWVsaW5lLmg+CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05T
KQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURvY3VtZW50VGltZWxpbmUqIHdyYXBE
b2N1bWVudFRpbWVsaW5lKFdlYkNvcmU6OkRvY3VtZW50VGltZWxpbmUqKTsKK1dlYktpdERPTURv
Y3VtZW50VGltZWxpbmUqIGtpdChXZWJDb3JlOjpEb2N1bWVudFRpbWVsaW5lKik7CitXZWJDb3Jl
OjpEb2N1bWVudFRpbWVsaW5lKiBjb3JlKFdlYktpdERPTURvY3VtZW50VGltZWxpbmUqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFdFQl9BTklNQVRJT05TKSAq
LworCisjZW5kaWYgLyogV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZVByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDk2YjkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTURvY3VtZW50VHlwZS5jcHAKQEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Eb2N1bWVudFR5cGUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTURvY3VtZW50VHlwZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRG9jdW1lbnRUeXBl
VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBraXQo
V2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRE9D
VU1FTlRfVFlQRShraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKwor
V2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBjb3JlKFdlYktpdERPTURvY3VtZW50VHlwZSogcmVxdWVz
dCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRvY3VtZW50
VHlwZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTURvY3VtZW50VHlwZSogd3JhcERvY3VtZW50VHlwZShXZWJDb3JlOjpEb2N1bWVu
dFR5cGUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RZUEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9E
T0NVTUVOVF9UWVBFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9kb2N1
bWVudF90eXBlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpEb2N1bWVudFR5cGUqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEb2N1bWVudFR5cGUqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRG
b3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVf
YWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgV2ViQ29yZTo6RG9jdW1lbnRUeXBlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6RG9jdW1lbnRUeXBlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlw
ZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpEb2N1bWVudFR5cGUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpEb2N1bWVudFR5cGUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNl
LT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9kaXNwYXRjaF9ldmVu
dDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9kb2N1bWVudF90
eXBlX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVy
ID0gd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKwor
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NRG9jdW1lbnRUeXBlLCB3ZWJraXRfZG9t
X2RvY3VtZW50X3R5cGUsIFdFQktJVF9ET01fVFlQRV9OT0RFLCBHX0lNUExFTUVOVF9JTlRFUkZB
Q0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9F
TlRJVElFUywKKyAgICBQUk9QX05PVEFUSU9OUywKKyAgICBQUk9QX0lOVEVSTkFMX1NVQlNFVCwK
KyAgICBQUk9QX1BVQkxJQ19JRCwKKyAgICBQUk9QX1NZU1RFTV9JRCwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01Eb2N1bWVudFR5cGUqIHNlbGYgPSBXRUJLSVRfRE9NX0RPQ1VNRU5UX1RZ
UEUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9O
QU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3R5cGVfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RU5USVRJRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9k
b2N1bWVudF90eXBlX2dldF9lbnRpdGllcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9OT1RBVElPTlM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9ub3RhdGlvbnMoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfSU5URVJOQUxfU1VCU0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X2ludGVybmFsX3N1YnNl
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QVUJMSUNfSUQ6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9n
ZXRfcHVibGljX2lkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NZU1RF
TV9JRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9kb2N1
bWVudF90eXBlX2dldF9zeXN0ZW1faWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2NsYXNzX2luaXQoV2ViS2l0RE9NRG9jdW1lbnRU
eXBlQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5nZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAibmFtZSIsCisgICAgICAgICAgICAiRG9jdW1lbnRUeXBlOm5hbWUiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogRG9jdW1lbnRUeXBlOm5hbWUiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9FTlRJVElFUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJl
bnRpdGllcyIsCisgICAgICAgICAgICAiRG9jdW1lbnRUeXBlOmVudGl0aWVzIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBEb2N1bWVudFR5cGU6ZW50aXRp
ZXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX05BTUVEX05PREVfTUFQLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTk9UQVRJ
T05TLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm5vdGF0aW9u
cyIsCisgICAgICAgICAgICAiRG9jdW1lbnRUeXBlOm5vdGF0aW9ucyIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTU5hbWVkTm9kZU1hcCogRG9jdW1lbnRUeXBlOm5vdGF0aW9ucyIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTlRFUk5BTF9T
VUJTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaW50ZXJu
YWwtc3Vic2V0IiwKKyAgICAgICAgICAgICJEb2N1bWVudFR5cGU6aW50ZXJuYWwtc3Vic2V0IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50VHlwZTppbnRlcm5hbC1zdWJz
ZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9QVUJMSUNfSUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAicHVibGljLWlkIiwKKyAgICAgICAgICAgICJEb2N1bWVudFR5
cGU6cHVibGljLWlkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERvY3VtZW50VHlw
ZTpwdWJsaWMtaWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TWVNURU1fSUQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3lzdGVtLWlkIiwKKyAgICAgICAgICAgICJE
b2N1bWVudFR5cGU6c3lzdGVtLWlkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIERv
Y3VtZW50VHlwZTpzeXN0ZW0taWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3R5cGVfaW5pdChXZWJLaXRET01Eb2N1bWVudFR5cGUqIHJlcXVlc3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHJlcXVlc3QpOworfQorCit2b2lkIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9y
ZW1vdmUoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RZUEUoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkRvY3VtZW50VHlwZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT5yZW1vdmUoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9j
dW1lbnRfdHlwZV9nZXRfbmFtZShXZWJLaXRET01Eb2N1bWVudFR5cGUqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRE9DVU1FTlRfVFlQRShzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RG9jdW1lbnRUeXBlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPm5hbWUoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworV2ViS2l0RE9NTmFtZWROb2RlTWFwKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5
cGVfZ2V0X2VudGl0aWVzKFdlYktpdERPTURvY3VtZW50VHlwZSogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9UWVBFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpE
b2N1bWVudFR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmVudGl0
aWVzRm9yQmluZGluZ3MoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitXZWJLaXRET01OYW1lZE5vZGVNYXAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
dHlwZV9nZXRfbm90YXRpb25zKFdlYktpdERPTURvY3VtZW50VHlwZSogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9UWVBFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudFR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok5hbWVkTm9kZU1hcD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5v
dGF0aW9uc0ZvckJpbmRpbmdzKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVz
dWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfaW50
ZXJuYWxfc3Vic2V0KFdlYktpdERPTURvY3VtZW50VHlwZSogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19ET0NVTUVOVF9UWVBFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpEb2N1
bWVudFR5cGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aW50ZXJuYWxTdWJzZXRGb3JCaW5kaW5ncygpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF90eXBl
X2dldF9wdWJsaWNfaWQoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRv
Y3VtZW50VHlwZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wdWJsaWNJZCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9zeXN0ZW1faWQo
V2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UX1RZUEUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkRvY3VtZW50VHlwZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5zeXN0ZW1JZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTURvY3VtZW50VHlwZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjdmMjNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Eb2N1bWVudFR5cGUuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRv
bS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
RE9NRG9jdW1lbnRUeXBlX2gKKyNkZWZpbmUgV2ViS2l0RE9NRG9jdW1lbnRUeXBlX2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGUu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RZUEUgICAgICAgICAgICAo
d2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
RE9DVU1FTlRfVFlQRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlRfVFlQRSwgV2ViS2l0RE9NRG9jdW1lbnRU
eXBlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9ET0NVTUVOVF9UWVBFX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVO
VF9UWVBFLCBXZWJLaXRET01Eb2N1bWVudFR5cGVDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19ET0NVTUVOVF9UWVBFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9UWVBFKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19ET0NVTUVOVF9UWVBFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9UWVBFKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9ET0NVTUVOVF9UWVBFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9ET0NVTUVOVF9UWVBFLCBXZWJLaXRET01Eb2N1
bWVudFR5cGVDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnRUeXBlIHsKKyAgICBX
ZWJLaXRET01Ob2RlIHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRG9j
dW1lbnRUeXBlQ2xhc3MgeworICAgIFdlYktpdERPTU5vZGVDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9uYW1lOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50VHlwZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X25h
bWUoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X3R5cGVfZ2V0X2VudGl0aWVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50
VHlwZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTmFtZWRO
b2RlTWFwCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTmFtZWROb2RlTWFwKgord2Via2l0X2Rv
bV9kb2N1bWVudF90eXBlX2dldF9lbnRpdGllcyhXZWJLaXRET01Eb2N1bWVudFR5cGUqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfbm90YXRpb25zOgorICog
QHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50VHlwZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NTmFtZWROb2RlTWFwCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NTmFtZWROb2RlTWFwKgord2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9ub3RhdGlvbnMo
V2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3Vt
ZW50X3R5cGVfZ2V0X2ludGVybmFsX3N1YnNldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1
bWVudFR5cGUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9pbnRlcm5hbF9zdWJzZXQoV2ViS2l0RE9N
RG9jdW1lbnRUeXBlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVf
Z2V0X3B1YmxpY19pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudFR5cGUKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9k
b2N1bWVudF90eXBlX2dldF9wdWJsaWNfaWQoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3N5c3RlbV9pZDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudFR5cGUKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF9zeXN0
ZW1faWQoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTURvY3VtZW50VHlwZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTURvY3Vt
ZW50VHlwZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUeXBlUHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNTIyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TURvY3VtZW50VHlwZVByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50VHlwZVByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01Eb2N1bWVudFR5cGVQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnRUeXBlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTURvY3VtZW50
VHlwZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTURvY3VtZW50VHlwZSogd3Jh
cERvY3VtZW50VHlwZShXZWJDb3JlOjpEb2N1bWVudFR5cGUqKTsKK1dlYktpdERPTURvY3VtZW50
VHlwZSoga2l0KFdlYkNvcmU6OkRvY3VtZW50VHlwZSopOworV2ViQ29yZTo6RG9jdW1lbnRUeXBl
KiBjb3JlKFdlYktpdERPTURvY3VtZW50VHlwZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01Eb2N1bWVudFR5cGVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRG9jdW1lbnRUeXBlVW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRG9jdW1lbnRUeXBlVW5zdGFibGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E0YzNiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Eb2N1bWVudFR5cGVVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NRG9jdW1lbnRU
eXBlVW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01Eb2N1bWVudFR5cGVVbnN0YWJsZV9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfcmVtb3ZlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TURvY3VtZW50VHlwZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9yZW1v
dmUoV2ViS2l0RE9NRG9jdW1lbnRUeXBlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2Vu
ZGlmIC8qIFdlYktpdERPTURvY3VtZW50VHlwZVVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRG9jdW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Eb2N1bWVudFVuc3RhYmxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1N2QyMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NRG9jdW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTURvY3VtZW50VW5zdGFibGVfaAorI2Rl
ZmluZSBXZWJLaXRET01Eb2N1bWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNF
X1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRf
Y2FyZXRfcmFuZ2VfZnJvbV9wb2ludDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAor
ICogQHg6IEEgI2dsb25nCisgKiBAeTogQSAjZ2xvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgI1dlYktpdERPTVJhbmdlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTVJhbmdlKgord2Via2l0X2RvbV9kb2N1bWVudF9jYXJl
dF9yYW5nZV9mcm9tX3BvaW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmLCBnbG9uZyB4LCBnbG9u
ZyB5KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X3dlYmtpdF9jYW5jZWxfZnVsbF9z
Y3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb2N1bWVudF93ZWJr
aXRfY2FuY2VsX2Z1bGxfc2NyZWVuKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X3dlYmtpdF9leGl0X2Z1bGxzY3JlZW46CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9kb2N1bWVudF93ZWJraXRfZXhpdF9mdWxsc2NyZWVu
KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2V4aXRfcG9pbnRlcl9sb2NrOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
ZG9jdW1lbnRfZXhpdF9wb2ludGVyX2xvY2soV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NvbnRlbnRfdHlwZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfY29udGVudF90eXBlKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kaXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9j
dW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RpcihX
ZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9z
ZXRfZGlyOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZG9jdW1lbnRfc2V0X2RpcihXZWJLaXRET01Eb2N1bWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRf
aXNfZnVsbF9zY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2lzX2Z1bGxf
c2NyZWVuKFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF93ZWJraXRfZnVsbF9zY3JlZW5fa2V5Ym9hcmRfaW5wdXRfYWxsb3dlZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFu
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbF9zY3JlZW5fa2V5Ym9hcmRfaW5wdXRf
YWxsb3dlZChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfd2Via2l0X2N1cnJlbnRfZnVsbF9zY3JlZW5fZWxlbWVudDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0
X2N1cnJlbnRfZnVsbF9zY3JlZW5fZWxlbWVudChXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfd2Via2l0X2Z1bGxzY3JlZW5fZW5hYmxl
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2di
b29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbHNjcmVlbl9lbmFibGVkKFdl
YktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF93ZWJraXRfZnVsbHNjcmVlbl9lbGVtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3Vt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVs
ZW1lbnQqCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF93ZWJraXRfZnVsbHNjcmVlbl9lbGVtZW50
KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9wb2ludGVyX2xvY2tfZWxlbWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVt
ZW50Kgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcG9pbnRlcl9sb2NrX2VsZW1lbnQoV2ViS2l0
RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Zp
c2liaWxpdHlfc3RhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Zpc2liaWxpdHlfc3RhdGUoV2Vi
S2l0RE9NRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2hpZGRlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9oaWRkZW4oV2ViS2l0RE9NRG9jdW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2N1cnJlbnRfc2Ny
aXB0OgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVu
dCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2N1cnJlbnRfc2NyaXB0KFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9vcmlnaW46Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fZG9jdW1lbnRfZ2V0X29yaWdpbihXZWJLaXRET01Eb2N1bWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2Nyb2xsaW5nX2VsZW1lbnQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6
IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3Njcm9s
bGluZ19lbGVtZW50KFdlYktpdERPTURvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2RvY3VtZW50X2dldF9jaGlsZHJlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVu
dAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGlsZHJlbihXZWJL
aXRET01Eb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRf
Zmlyc3RfZWxlbWVudF9jaGlsZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Eb2N1bWVudAorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01FbGVtZW50Kgor
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZmlyc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01Eb2N1
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9lbGVt
ZW50X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERPTURvY3VtZW50CisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQoV2ViS2l0RE9NRG9jdW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2NoaWxkX2VsZW1lbnRfY291bnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRG9jdW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxv
bmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3
ZWJraXRfZG9tX2RvY3VtZW50X2dldF9jaGlsZF9lbGVtZW50X2NvdW50KFdlYktpdERPTURvY3Vt
ZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NRG9jdW1lbnRVbnN0YWJsZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2U1ZGM3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01FbGVtZW50LmNwcApAQCAtMCwwICsxLDE0MDUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FbGVt
ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUF0dHJQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01ET01Ub2tlbkxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xsZWN0aW9u
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01O
b2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRWxlbWVudFVuc3RhYmxl
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUVsZW1lbnQqIGtpdChXZWJDb3JlOjpFbGVt
ZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRUxFTUVOVChraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6RWxlbWVudCogY29yZShX
ZWJLaXRET01FbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUVsZW1lbnQqIHdyYXBFbGVtZW50KFdlYkNvcmU6
OkVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXRUJLSVRfRE9NX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9FTEVN
RU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9lbGVtZW50X2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9
IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNj
cmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxl
ciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNl
LT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAg
ICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRI
X0NPREUoV2ViS2l0RE9NRWxlbWVudCwgd2Via2l0X2RvbV9lbGVtZW50LCBXRUJLSVRfRE9NX1RZ
UEVfTk9ERSwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJH
RVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAs
CisgICAgUFJPUF9UQUdfTkFNRSwKKyAgICBQUk9QX0FUVFJJQlVURVMsCisgICAgUFJPUF9TVFlM
RSwKKyAgICBQUk9QX0lELAorICAgIFBST1BfTkFNRVNQQUNFX1VSSSwKKyAgICBQUk9QX1BSRUZJ
WCwKKyAgICBQUk9QX0xPQ0FMX05BTUUsCisgICAgUFJPUF9PRkZTRVRfTEVGVCwKKyAgICBQUk9Q
X09GRlNFVF9UT1AsCisgICAgUFJPUF9PRkZTRVRfV0lEVEgsCisgICAgUFJPUF9PRkZTRVRfSEVJ
R0hULAorICAgIFBST1BfQ0xJRU5UX0xFRlQsCisgICAgUFJPUF9DTElFTlRfVE9QLAorICAgIFBS
T1BfQ0xJRU5UX1dJRFRILAorICAgIFBST1BfQ0xJRU5UX0hFSUdIVCwKKyAgICBQUk9QX1NDUk9M
TF9MRUZULAorICAgIFBST1BfU0NST0xMX1RPUCwKKyAgICBQUk9QX1NDUk9MTF9XSURUSCwKKyAg
ICBQUk9QX1NDUk9MTF9IRUlHSFQsCisgICAgUFJPUF9PRkZTRVRfUEFSRU5ULAorICAgIFBST1Bf
SU5ORVJfSFRNTCwKKyAgICBQUk9QX09VVEVSX0hUTUwsCisgICAgUFJPUF9DTEFTU19OQU1FLAor
ICAgIFBST1BfQ0xBU1NfTElTVCwKKyAgICBQUk9QX1dFQktJVF9SRUdJT05fT1ZFUlNFVCwKKyAg
ICBQUk9QX1BSRVZJT1VTX0VMRU1FTlRfU0lCTElORywKKyAgICBQUk9QX05FWFRfRUxFTUVOVF9T
SUJMSU5HLAorICAgIFBST1BfQ0hJTERSRU4sCisgICAgUFJPUF9GSVJTVF9FTEVNRU5UX0NISUxE
LAorICAgIFBST1BfTEFTVF9FTEVNRU5UX0NISUxELAorICAgIFBST1BfQ0hJTERfRUxFTUVOVF9D
T1VOVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01FbGVtZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBj
YXNlIFBST1BfSUQ6CisgICAgICAgIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfaWQoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9T
Q1JPTExfTEVGVDoKKyAgICAgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9zY3JvbGxfbGVmdChz
ZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9TQ1JPTExfVE9QOgorICAgICAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF90
b3Aoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfSU5ORVJfSFRNTDoKKyAgICAgICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9pbm5l
cl9odG1sKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfT1VURVJfSFRNTDoKKyAgICAgICAgd2Via2l0X2RvbV9l
bGVtZW50X3NldF9vdXRlcl9odG1sKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51
bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0xBU1NfTkFNRToKKyAgICAg
ICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9jbGFzc19uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9lbGVt
ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUVsZW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9UQUdfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9BVFRSSUJVVEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlcyhzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVFlMRToKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3N0eWxlKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2lkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX05BTUVTUEFDRV9VUkk6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfbmFtZXNwYWNlX3VyaShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUkVGSVg6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJlZml4KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPQ0FMX05BTUU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfbG9jYWxfbmFtZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PRkZTRVRfTEVGVDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9s
ZWZ0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09GRlNFVF9UT1A6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9v
ZmZzZXRfdG9wKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09GRlNFVF9X
SURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X29mZnNldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9PRkZTRVRfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DTElFTlRfTEVGVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZh
bHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NMSUVOVF9UT1A6CisgICAgICAgIGdfdmFsdWVfc2V0X2Rv
dWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NMSUVOVF9XSURUSDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF93aWR0aChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTElFTlRfSEVJR0hUOgorICAg
ICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xp
ZW50X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExf
TEVGVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50
X2dldF9zY3JvbGxfbGVmdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9T
Q1JPTExfVE9QOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X3Njcm9sbF90b3Aoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU0NST0xMX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9TQ1JPTExfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVl
LCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9oZWlnaHQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfT0ZGU0VUX1BBUkVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9wYXJlbnQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5ORVJfSFRNTDoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9pbm5lcl9odG1s
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09VVEVSX0hUTUw6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb3V0
ZXJfaHRtbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DTEFTU19OQU1F
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRf
Z2V0X2NsYXNzX25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0xB
U1NfTElTVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X2NsYXNzX2xpc3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0VCS0lUX1JFR0lPTl9PVkVSU0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3dlYmtpdF9yZWdpb25fb3ZlcnNldChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUkVWSU9VU19FTEVNRU5UX1NJQkxJTkc6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9wcmV2aW91c19lbGVtZW50X3NpYmxpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTkVYVF9FTEVNRU5UX1NJQkxJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9uZXh0X2VsZW1lbnRfc2libGluZyhzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSElMRFJFTjoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NoaWxkcmVuKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9maXJzdF9lbGVtZW50X2NoaWxkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0xBU1RfRUxFTUVOVF9DSElMRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSElMRF9FTEVNRU5UX0NPVU5UOgorICAgICAgICBn
X3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9lbGVtZW50X2dldF9jaGlsZF9lbGVt
ZW50X2NvdW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZWxl
bWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RBR19OQU1F
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRhZy1uYW1lIiwK
KyAgICAgICAgICAgICJFbGVtZW50OnRhZy1uYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2NoYXIqIEVsZW1lbnQ6dGFnLW5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVFRSSUJVVEVTLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImF0dHJpYnV0ZXMiLAor
ICAgICAgICAgICAgIkVsZW1lbnQ6YXR0cmlidXRlcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTU5hbWVkTm9kZU1hcCogRWxlbWVudDphdHRyaWJ1dGVzIiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NUWUxFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInN0eWxlIiwKKyAgICAgICAgICAgICJFbGVtZW50
OnN0eWxlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiogRWxlbWVudDpzdHlsZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQ1NTX1NU
WUxFX0RFQ0xBUkFUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiaWQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6aWQiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEVsZW1lbnQ6aWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRVNQQUNF
X1VSSSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lc3Bh
Y2UtdXJpIiwKKyAgICAgICAgICAgICJFbGVtZW50Om5hbWVzcGFjZS11cmkiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogRWxlbWVudDpuYW1lc3BhY2UtdXJpIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUFJFRklYLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
InByZWZpeCIsCisgICAgICAgICAgICAiRWxlbWVudDpwcmVmaXgiLAorICAgICAgICAgICAgInJl
YWQtb25seSBnY2hhciogRWxlbWVudDpwcmVmaXgiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MT0NBTF9O
QU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxvY2FsLW5h
bWUiLAorICAgICAgICAgICAgIkVsZW1lbnQ6bG9jYWwtbmFtZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdjaGFyKiBFbGVtZW50OmxvY2FsLW5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PRkZT
RVRfTEVGVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJvZmZz
ZXQtbGVmdCIsCisgICAgICAgICAgICAiRWxlbWVudDpvZmZzZXQtbGVmdCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdkb3VibGUgRWxlbWVudDpvZmZzZXQtbGVmdCIsCisgICAgICAgICAgICAt
R19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT0ZGU0VUX1RPUCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJvZmZzZXQtdG9wIiwKKyAgICAgICAgICAgICJF
bGVtZW50Om9mZnNldC10b3AiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEVsZW1l
bnQ6b2Zmc2V0LXRvcCIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfT0ZGU0VUX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAg
ICAgIm9mZnNldC13aWR0aCIsCisgICAgICAgICAgICAiRWxlbWVudDpvZmZzZXQtd2lkdGgiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIEVsZW1lbnQ6b2Zmc2V0LXdpZHRoIiwKKyAg
ICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9PRkZTRVRfSEVJR0hULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgIm9mZnNldC1oZWlnaHQi
LAorICAgICAgICAgICAgIkVsZW1lbnQ6b2Zmc2V0LWhlaWdodCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdkb3VibGUgRWxlbWVudDpvZmZzZXQtaGVpZ2h0IiwKKyAgICAgICAgICAgIC1HX01B
WERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DTElFTlRfTEVGVCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJjbGllbnQtbGVmdCIsCisgICAgICAgICAgICAiRWxl
bWVudDpjbGllbnQtbGVmdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgRWxlbWVu
dDpjbGllbnQtbGVmdCIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQ0xJRU5UX1RPUCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAg
ICJjbGllbnQtdG9wIiwKKyAgICAgICAgICAgICJFbGVtZW50OmNsaWVudC10b3AiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnZG91YmxlIEVsZW1lbnQ6Y2xpZW50LXRvcCIsCisgICAgICAgICAg
ICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0xJRU5UX1dJRFRILAorICAgICAgICBn
X3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImNsaWVudC13aWR0aCIsCisgICAgICAg
ICAgICAiRWxlbWVudDpjbGllbnQtd2lkdGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91
YmxlIEVsZW1lbnQ6Y2xpZW50LXdpZHRoIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19N
QVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DTElFTlRfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91Ymxl
KAorICAgICAgICAgICAgImNsaWVudC1oZWlnaHQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6Y2xp
ZW50LWhlaWdodCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgRWxlbWVudDpjbGll
bnQtaGVpZ2h0IiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9T
Q1JPTExfTEVGVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2Ny
b2xsLWxlZnQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6c2Nyb2xsLWxlZnQiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2xvbmcgRWxlbWVudDpzY3JvbGwtbGVmdCIsCisgICAgICAgICAgICBH
X01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JPTExfVE9QLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JvbGwtdG9wIiwKKyAgICAgICAgICAgICJFbGVtZW50
OnNjcm9sbC10b3AiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgRWxlbWVudDpzY3Jv
bGwtdG9wIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTF9X
SURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAic2Nyb2xsLXdp
ZHRoIiwKKyAgICAgICAgICAgICJFbGVtZW50OnNjcm9sbC13aWR0aCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdsb25nIEVsZW1lbnQ6c2Nyb2xsLXdpZHRoIiwKKyAgICAgICAgICAgIEdfTUlO
TE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfU0NST0xMX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2xvbmcoCisgICAgICAgICAgICAic2Nyb2xsLWhlaWdodCIsCisgICAgICAgICAgICAiRWxlbWVu
dDpzY3JvbGwtaGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgRWxlbWVudDpz
Y3JvbGwtaGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT0ZG
U0VUX1BBUkVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJv
ZmZzZXQtcGFyZW50IiwKKyAgICAgICAgICAgICJFbGVtZW50Om9mZnNldC1wYXJlbnQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBFbGVtZW50Om9mZnNldC1wYXJl
bnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTk5FUl9IVE1MLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImlubmVyLWh0bWwiLAor
ICAgICAgICAgICAgIkVsZW1lbnQ6aW5uZXItaHRtbCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogRWxlbWVudDppbm5lci1odG1sIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09VVEVSX0hU
TUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAib3V0ZXItaHRt
bCIsCisgICAgICAgICAgICAiRWxlbWVudDpvdXRlci1odG1sIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBFbGVtZW50Om91dGVyLWh0bWwiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0xB
U1NfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjbGFz
cy1uYW1lIiwKKyAgICAgICAgICAgICJFbGVtZW50OmNsYXNzLW5hbWUiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEVsZW1lbnQ6Y2xhc3MtbmFtZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9DTEFTU19MSVNULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
ImNsYXNzLWxpc3QiLAorICAgICAgICAgICAgIkVsZW1lbnQ6Y2xhc3MtbGlzdCIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTURPTVRva2VuTGlzdCogRWxlbWVudDpjbGFzcy1saXN0
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9S
RUdJT05fT1ZFUlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJ3ZWJraXQtcmVnaW9uLW92ZXJzZXQiLAorICAgICAgICAgICAgIkVsZW1lbnQ6d2Via2l0LXJl
Z2lvbi1vdmVyc2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEVsZW1lbnQ6d2Vi
a2l0LXJlZ2lvbi1vdmVyc2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUFJFVklPVVNfRUxFTUVOVF9T
SUJMSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInByZXZp
b3VzLWVsZW1lbnQtc2libGluZyIsCisgICAgICAgICAgICAiRWxlbWVudDpwcmV2aW91cy1lbGVt
ZW50LXNpYmxpbmciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBF
bGVtZW50OnByZXZpb3VzLWVsZW1lbnQtc2libGluZyIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX05FWFRfRUxFTUVOVF9TSUJMSU5HLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfb2JqZWN0KAorICAgICAgICAgICAgIm5leHQtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAg
ICAgICJFbGVtZW50Om5leHQtZWxlbWVudC1zaWJsaW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRWxlbWVudCogRWxlbWVudDpuZXh0LWVsZW1lbnQtc2libGluZyIsCisgICAg
ICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NISUxEUkVOLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNoaWxkcmVuIiwKKyAgICAgICAgICAgICJF
bGVtZW50OmNoaWxkcmVuIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24qIEVsZW1lbnQ6Y2hpbGRyZW4iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0ZJUlNUX0VMRU1FTlRfQ0hJTEQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAiZmlyc3QtZWxlbWVudC1jaGlsZCIsCisgICAgICAg
ICAgICAiRWxlbWVudDpmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRWxlbWVudCogRWxlbWVudDpmaXJzdC1lbGVtZW50LWNoaWxkIiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFTVF9FTEVNRU5UX0NISUxELAorICAg
ICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImxhc3QtZWxlbWVudC1jaGls
ZCIsCisgICAgICAgICAgICAiRWxlbWVudDpsYXN0LWVsZW1lbnQtY2hpbGQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01FbGVtZW50KiBFbGVtZW50Omxhc3QtZWxlbWVudC1jaGls
ZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRUxFTUVOVCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NISUxEX0VMRU1FTlRf
Q09VTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJjaGlsZC1l
bGVtZW50LWNvdW50IiwKKyAgICAgICAgICAgICJFbGVtZW50OmNoaWxkLWVsZW1lbnQtY291bnQi
LAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgRWxlbWVudDpjaGlsZC1lbGVtZW50LWNv
dW50IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRf
aW5pdChXZWJLaXRET01FbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlKFdlYktp
dERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5h
bWUsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChu
YW1lKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRB
dHRyaWJ1dGUoY29udmVydGVkTmFtZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIG5hbWUsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKG5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlKGNvbnZlcnRlZE5hbWUsIGNvbnZlcnRl
ZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0
cmlidXRlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChu
YW1lKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFt
ZSk7CisgICAgaXRlbS0+cmVtb3ZlQXR0cmlidXRlKGNvbnZlcnRlZE5hbWUpOworfQorCitXZWJL
aXRET01BdHRyKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlKFdlYktpdERP
TUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUs
IDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1l
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmdldEF0dHJpYnV0ZU5vZGUoY29udmVydGVkTmFtZSkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQXR0ciogd2Via2l0
X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBX
ZWJLaXRET01BdHRyKiBuZXdBdHRyLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0FUVFIobmV3QXR0ciksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkF0dHIqIGNvbnZlcnRlZE5ld0F0dHIgPSBX
ZWJLaXQ6OmNvcmUobmV3QXR0cik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkF0dHI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5zZXRBdHRyaWJ1dGVOb2RlKCpjb252ZXJ0ZWROZXdBdHRyLCBlYykpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVj
KTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmlu
ZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTUF0
dHIqIHdlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25vZGUoV2ViS2l0RE9NRWxl
bWVudCogc2VsZiwgV2ViS2l0RE9NQXR0ciogb2xkQXR0ciwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19BVFRSKG9sZEF0dHIpLCAwKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpBdHRyKiBjb252ZXJ0
ZWRPbGRBdHRyID0gV2ViS2l0Ojpjb3JlKG9sZEF0dHIpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpBdHRyPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+cmVtb3ZlQXR0cmlidXRlTm9kZSgqY29udmVydGVkT2xkQXR0ciwg
ZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVt
ZW50c19ieV90YWdfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7CisgICAgV2Vi
Q29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
ZWxlbWVudF9oYXNfYXR0cmlidXRlcyhXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9
IGl0ZW0tPmhhc0F0dHJpYnV0ZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciog
d2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbnMoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChuYW1lc3BhY2VVUkksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGxvY2FsTmFtZSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRM
b2NhbE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobG9jYWxOYW1lKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRBdHRyaWJ1dGVOUyhjb252ZXJ0
ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMoV2ViS2l0RE9N
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIHF1
YWxpZmllZE5hbWUsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHF1
YWxpZmllZE5hbWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNl
VVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkUXVhbGlmaWVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChxdWFsaWZp
ZWROYW1lKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlTlMoY29udmVydGVkTmFtZXNwYWNlVVJJLCBjb252ZXJ0ZWRRdWFs
aWZpZWROYW1lLCBjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRfZG9t
X2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChuYW1l
c3BhY2VVUkkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobG9jYWxOYW1lKTsKKyAgICBXZWJDb3Jl
OjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZExvY2FsTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChsb2NhbE5hbWUpOworICAgIGl0ZW0tPnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnZlcnRlZE5h
bWVzcGFjZVVSSSwgY29udmVydGVkTG9jYWxOYW1lKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24qIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfbnNfYXNf
aHRtbF9jb2xsZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1l
c3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZXNw
YWNlVVJJLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChsb2NhbE5hbWUsIDApOworICAg
IFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWVz
cGFjZVVSSSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxOYW1lID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KGxvY2FsTmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0
aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0RWxlbWVudHNCeVRhZ05h
bWVOUyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NQXR0
ciogd2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxO
YW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWVzcGFjZVVSSSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwobG9jYWxOYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZExvY2FsTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChsb2NhbE5hbWUpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpBdHRyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
Z2V0QXR0cmlidXRlTm9kZU5TKGNvbnZlcnRlZE5hbWVzcGFjZVVSSSwgY29udmVydGVkTG9jYWxO
YW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitXZWJLaXRET01BdHRyKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlX25z
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUF0dHIqIG5ld0F0dHIsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfQVRUUihuZXdBdHRyKSwgMCk7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6
QXR0ciogY29udmVydGVkTmV3QXR0ciA9IFdlYktpdDo6Y29yZShuZXdBdHRyKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QXR0cj4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNldEF0dHJpYnV0ZU5vZGVOUygqY29udmVy
dGVkTmV3QXR0ciwgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0
ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwobmFtZSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRy
aWJ1dGUoY29udmVydGVkTmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9lbGVtZW50X2hhc19hdHRyaWJ1dGVfbnMoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwobmFtZXNwYWNlVVJJLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwobG9jYWxOYW1lLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VV
UkkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZXNwYWNlVVJJKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRMb2NhbE5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobG9jYWxOYW1lKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVOUyhjb252ZXJ0ZWROYW1l
c3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfZm9jdXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Zm9jdXMoKTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfYmx1cihXZWJLaXRET01FbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5ibHVyKCk7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9pbnRvX3ZpZXcoV2ViS2l0RE9NRWxlbWVudCog
c2VsZiwgZ2Jvb2xlYW4gYWxpZ25XaXRoVG9wKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zY3JvbGxJbnRvVmlldyhhbGlnbldpdGhUb3ApOworfQorCit2b2lk
IHdlYmtpdF9kb21fZWxlbWVudF9zY3JvbGxfaW50b192aWV3X2lmX25lZWRlZChXZWJLaXRET01F
bGVtZW50KiBzZWxmLCBnYm9vbGVhbiBjZW50ZXJJZk5lZWRlZCkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChjZW50ZXJJ
Zk5lZWRlZCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9ieV9saW5lcyhX
ZWJLaXRET01FbGVtZW50KiBzZWxmLCBnbG9uZyBsaW5lcykKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2Nyb2xsQnlMaW5lcyhsaW5lcyk7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9ieV9wYWdlcyhXZWJLaXRET01FbGVtZW50KiBzZWxm
LCBnbG9uZyBwYWdlcykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2Nyb2xsQnlQYWdlcyhwYWdlcyk7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWVfYXNfaHRtbF9jb2xs
ZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG5hbWUsIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChuYW1lKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNv
bnZlcnRlZE5hbWUpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fZWxlbWVudF9tYXRjaGVzKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxlY3RvcnMsIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgRkFMU0UpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkU2VsZWN0
b3JzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNlbGVjdG9ycyk7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWF0Y2hlcyhj
b252ZXJ0ZWRTZWxlY3RvcnMsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2Vi
S2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50X2Nsb3Nlc3QoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZWN0b3JzLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmNsb3Nlc3QoY29udmVydGVkU2VsZWN0b3JzLCBlYykpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fZWxlbWVudF93ZWJraXRfbWF0Y2hlc19zZWxlY3RvcihXZWJLaXRET01FbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZWN0b3JzLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVy
cm9yIHx8ICEqZXJyb3IsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm1hdGNoZXMoY29udmVydGVk
U2VsZWN0b3JzLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9lbGVtZW50X3dlYmtpdF9yZXF1ZXN0X2Z1bGxfc2NyZWVuKFdlYktpdERPTUVsZW1lbnQq
IHNlbGYsIGd1c2hvcnQgZmxhZ3MpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKGZsYWdzKTsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2VsZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbHNjcmVlbihXZWJLaXRET01FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT53ZWJr
aXRSZXF1ZXN0RnVsbHNjcmVlbigpOworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9t
X2VsZW1lbnRfaW5zZXJ0X2FkamFjZW50X2VsZW1lbnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHdoZXJlLCBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbCh3aGVyZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKGVsZW1lbnQpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRXaGVyZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh3aGVyZSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogY29u
dmVydGVkRWxlbWVudCA9IFdlYktpdDo6Y29yZShlbGVtZW50KTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmluc2VydEFkamFjZW50RWxlbWVudChjb252ZXJ0ZWRX
aGVyZSwgKmNvbnZlcnRlZEVsZW1lbnQsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfaW5z
ZXJ0X2FkamFjZW50X2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHdo
ZXJlLCBjb25zdCBnY2hhciogaHRtbCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHdoZXJlKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKGh0bWwpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkV2hlcmUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
Rjgod2hlcmUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEh0bWwgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoaHRtbCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aXRlbS0+aW5zZXJ0QWRqYWNlbnRIVE1MKGNvbnZlcnRlZFdoZXJlLCBjb252ZXJ0ZWRIdG1sLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfdGV4
dChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogd2hlcmUsIGNvbnN0IGdjaGFy
KiB0ZXh0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwod2hlcmUpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodGV4dCk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAg
V2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRXaGVyZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh3aGVyZSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVGV4dCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0ZXh0KTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5pbnNlcnRBZGph
Y2VudFRleHQoY29udmVydGVkV2hlcmUsIGNvbnZlcnRlZFRleHQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9lbGVtZW50X3JlcXVlc3RfcG9pbnRlcl9sb2NrKFdlYktpdERPTUVsZW1l
bnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVxdWVzdFBvaW50ZXJMb2NrKCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJQb2ludGVyIExvY2siKQorI2VuZGlmIC8qIEVOQUJMRShQT0lOVEVSX0xPQ0spICovCit9CisK
K3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3JlbW92ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaXRlbS0+cmVtb3ZlKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUVs
ZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVudF9xdWVyeV9zZWxlY3RvcihXZWJLaXRET01FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxlY3RvcnMsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdG9ycyA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzZWxlY3RvcnMpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+cXVlcnlTZWxlY3Rvcihjb252ZXJ0ZWRTZWxlY3RvcnMsIGVjKSk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9N
Tm9kZUxpc3QqIHdlYmtpdF9kb21fZWxlbWVudF9xdWVyeV9zZWxlY3Rvcl9hbGwoV2ViS2l0RE9N
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZWN0b3JzLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3RvcnMgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0b3JzKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5xdWVyeVNlbGVjdG9yQWxsKGNvbnZlcnRlZFNlbGVjdG9ycywgZWMp
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50X2dldF90YWdfbmFtZShXZWJLaXRET01FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGFnTmFtZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01OYW1lZE5vZGVNYXAqIHdlYmtpdF9kb21fZWxl
bWVudF9nZXRfYXR0cmlidXRlcyhXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5hbWVkTm9k
ZU1hcD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmF0dHJpYnV0ZXMoKSk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRE
T01DU1NTdHlsZURlY2xhcmF0aW9uKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3N0eWxlKFdlYktp
dERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlvbj4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNzc29tU3R5bGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50
X2dldF9pZChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Z2V0SWRBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lkKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjppZEF0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfbmFtZXNwYWNlX3VyaShXZWJL
aXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZXNw
YWNlVVJJKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X3ByZWZpeChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+cHJlZml4KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2xvY2FsX25hbWUoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxvY2FsTmFtZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnZG91YmxlIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2xl
ZnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+b2Zmc2V0TGVmdCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZz
ZXRfdG9wKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPm9mZnNldFRvcCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9lbGVtZW50X2dldF9v
ZmZzZXRfd2lkdGgoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+b2Zmc2V0V2lk
dGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnZG91YmxlIHdlYmtpdF9kb21fZWxlbWVu
dF9nZXRfb2Zmc2V0X2hlaWdodChXZWJLaXRET01FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5v
ZmZzZXRIZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnZG91YmxlIHdlYmtpdF9k
b21fZWxlbWVudF9nZXRfY2xpZW50X2xlZnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0g
aXRlbS0+Y2xpZW50TGVmdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUgd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3Vs
dCA9IGl0ZW0tPmNsaWVudFRvcCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dkb3VibGUg
d2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfd2lkdGgoV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUg
cmVzdWx0ID0gaXRlbS0+Y2xpZW50V2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
ZG91YmxlIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2hlaWdodChXZWJLaXRET01FbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2RvdWJsZSByZXN1bHQgPSBpdGVtLT5jbGllbnRIZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9sZWZ0KFdlYktpdERP
TUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zY3JvbGxMZWZ0KCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF9sZWZ0KFdlYktpdERP
TUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRTY3JvbGxMZWZ0KHZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0
X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfdG9wKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5zY3JvbGxUb3AoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21fZWxlbWVudF9zZXRfc2Nyb2xsX3RvcChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBnbG9uZyB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U2Ny
b2xsVG9wKHZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxf
d2lkdGgoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNjcm9sbFdpZHRoKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3Jv
bGxfaGVpZ2h0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zY3JvbGxIZWlnaHQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X29mZnNldF9wYXJlbnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpF
bGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+YmluZGluZ3NPZmZzZXRQ
YXJlbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9lbGVtZW50X2dldF9pbm5lcl9odG1sKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5pbm5lckhUTUwoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lu
bmVyX2h0bWwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0t
PnNldElubmVySFRNTChjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfb3V0ZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+b3V0ZXJIVE1MKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9lbGVtZW50X3NldF9vdXRlcl9odG1sKFdlYktpdERP
TUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRPdXRlckhUTUwoY29u
dmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X2NsYXNzX25hbWUoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpjbGFzc0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21fZWxlbWVudF9zZXRfY2xhc3NfbmFtZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2xhc3NBdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK1dlYktpdERPTURPTVRva2VuTGlzdCogd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9jbGFzc19saXN0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NVG9rZW5MaXN0PiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xhc3NMaXN0KCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21fZWxlbWVudF9nZXRfd2Via2l0X3JlZ2lvbl9vdmVyc2V0KFdlYktpdERPTUVsZW1lbnQqIHNl
bGYpCit7CisjaWYgRU5BQkxFKENTU19SRUdJT05TKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+d2Via2l0UmVnaW9uT3ZlcnNldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ3NzIFJlZ2lvbnMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShDU1NfUkVH
SU9OUykgKi8KK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50X2dldF9w
cmV2aW91c19lbGVtZW50X3NpYmxpbmcoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVt
ZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9
CisKK1dlYktpdERPTUVsZW1lbnQqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfbmV4dF9lbGVtZW50
X3NpYmxpbmcoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24qIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRyZW4oV2ViS2l0RE9NRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmNoaWxkcmVuKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50X2dldF9m
aXJzdF9lbGVtZW50X2NoaWxkKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZpcnN0RWxlbWVudENoaWxkKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NRWxlbWVudCogd2Via2l0X2RvbV9lbGVtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQoV2Vi
S2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+bGFzdEVsZW1lbnRDaGlsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X2NoaWxkX2VsZW1lbnRfY291bnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5j
aGlsZEVsZW1lbnRDb3VudCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDUwOTJmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudC5oCkBA
IC0wLDAgKzEsNjQzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01FbGVtZW50X2gKKyNkZWZpbmUg
V2ViS2l0RE9NRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9F
TEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsIFdlYktpdERPTUVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0VMRU1FTlQsIFdlYktpdERP
TUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19FTEVNRU5UKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9FTEVN
RU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULCBXZWJLaXRET01FbGVt
ZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUVsZW1lbnQgeworICAgIFdlYktpdERPTU5v
ZGUgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01FbGVtZW50Q2xhc3Mg
eworICAgIFdlYktpdERPTU5vZGVDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxl
bWVudAorICogQG5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlKFdlYktp
dERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50
CisgKiBAbmFtZTogQSAjZ2NoYXIKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0
dHJpYnV0ZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSwgY29uc3Qg
Z2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVt
ZW50X3JlbW92ZV9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICog
QG5hbWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxl
bWVudF9yZW1vdmVfYXR0cmlidXRlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2Rl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBuYW1lOiBBICNnY2hhcgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NQXR0cgorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTUF0dHIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9u
b2RlKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUVsZW1lbnQKKyAqIEBuZXdBdHRyOiBBICNXZWJLaXRET01BdHRyCisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUF0
dHIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01BdHRyKgord2Via2l0X2RvbV9lbGVtZW50X3Nl
dF9hdHRyaWJ1dGVfbm9kZShXZWJLaXRET01FbGVtZW50KiBzZWxmLCBXZWJLaXRET01BdHRyKiBu
ZXdBdHRyLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3Jl
bW92ZV9hdHRyaWJ1dGVfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBA
b2xkQXR0cjogQSAjV2ViS2l0RE9NQXR0cgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01BdHRyCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NQXR0cioKK3dlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25vZGUo
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgV2ViS2l0RE9NQXR0ciogb2xkQXR0ciwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFn
X25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQK
KyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAj
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBTaW5jZTogMi4xMgorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVt
ZW50c19ieV90YWdfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9oYXNf
YXR0cmlidXRlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9lbGVt
ZW50X2hhc19hdHRyaWJ1dGVzKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25zOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUVsZW1lbnQKKyAqIEBuYW1lc3BhY2VVUkk6IEEgI2djaGFyCisgKiBAbG9jYWxOYW1lOiBBICNn
Y2hhcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9uczoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01FbGVtZW50CisgKiBAbmFtZXNwYWNlVVJJOiAoYWxsb3ctbm9uZSk6IEEgI2dj
aGFyCisgKiBAcXVhbGlmaWVkTmFtZTogQSAjZ2NoYXIKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2Vs
ZW1lbnRfc2V0X2F0dHJpYnV0ZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogcXVhbGlmaWVkTmFtZSwgY29uc3QgZ2NoYXIq
IHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3Jl
bW92ZV9hdHRyaWJ1dGVfbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5h
bWVzcGFjZVVSSTogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFyCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25zKFdl
YktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VVUkksIGNvbnN0IGdj
aGFyKiBsb2NhbE5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVu
dHNfYnlfdGFnX25hbWVfbnNfYXNfaHRtbF9jb2xsZWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqIEBuYW1lc3BhY2VVUkk6IEEgI2djaGFyCisgKiBAbG9jYWxOYW1lOiBB
ICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb24KKyAqCisgKiBTaW5jZTogMi4xMgorKiovCitXRUJLSVRfQVBJIFdlYktpdERP
TUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdf
bmFtZV9uc19hc19odG1sX2NvbGxlY3Rpb24oV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZV9uczoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01FbGVtZW50CisgKiBAbmFtZXNwYWNlVVJJOiBBICNnY2hhcgorICogQGxvY2FsTmFt
ZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERP
TUF0dHIKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01BdHRyKgord2Via2l0X2RvbV9lbGVtZW50
X2dldF9hdHRyaWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogbmFtZXNwYWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlX25zOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqIEBuZXdBdHRyOiBBICNXZWJLaXRET01BdHRyCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUF0dHIK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01BdHRyKgord2Via2l0X2RvbV9lbGVtZW50X3NldF9h
dHRyaWJ1dGVfbm9kZV9ucyhXZWJLaXRET01FbGVtZW50KiBzZWxmLCBXZWJLaXRET01BdHRyKiBu
ZXdBdHRyLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2hh
c19hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5hbWU6IEEg
I2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV9lbGVtZW50X2hhc19hdHRyaWJ1dGUoV2ViS2l0RE9NRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9o
YXNfYXR0cmlidXRlX25zOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBuYW1l
c3BhY2VVUkk6IEEgI2djaGFyCisgKiBAbG9jYWxOYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZWxl
bWVudF9oYXNfYXR0cmlidXRlX25zKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZWxlbWVudF9mb2N1czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9mb2N1cyhXZWJLaXRET01F
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfYmx1cjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21fZWxlbWVudF9ibHVyKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZWxlbWVudF9zY3JvbGxfaW50b192aWV3OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUVsZW1lbnQKKyAqIEBhbGlnbldpdGhUb3A6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9zY3JvbGxfaW50b192aWV3KFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYsIGdib29sZWFuIGFsaWduV2l0aFRvcCk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9lbGVtZW50X3Njcm9sbF9pbnRvX3ZpZXdfaWZfbmVlZGVkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqIEBjZW50ZXJJZk5lZWRlZDogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9pbnRvX3ZpZXdfaWZfbmVl
ZGVkKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIGNlbnRlcklmTmVlZGVkKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2Nyb2xsX2J5X2xpbmVzOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUVsZW1lbnQKKyAqIEBsaW5lczogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9ieV9saW5lcyhXZWJLaXRET01FbGVt
ZW50KiBzZWxmLCBnbG9uZyBsaW5lcyk7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3Nj
cm9sbF9ieV9wYWdlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAcGFnZXM6
IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9z
Y3JvbGxfYnlfcGFnZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgZ2xvbmcgcGFnZXMpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZV9hc19o
dG1sX2NvbGxlY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQG5hbWU6
IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01I
VE1MQ29sbGVjdGlvbgorICoKKyAqIFNpbmNlOiAyLjEyCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2Ns
YXNzX25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfcXVlcnlfc2VsZWN0
b3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHNlbGVjdG9yczogQSAjZ2No
YXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3
ZWJraXRfZG9tX2VsZW1lbnRfcXVlcnlfc2VsZWN0b3IoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHNlbGVjdG9ycywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZWxlbWVudF9xdWVyeV9zZWxlY3Rvcl9hbGw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
RWxlbWVudAorICogQHNlbGVjdG9yczogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlzdCoKK3dlYmtpdF9kb21fZWxlbWVudF9xdWVyeV9z
ZWxlY3Rvcl9hbGwoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHNlbGVjdG9y
cywgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfdGFn
X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Rh
Z19uYW1lKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxl
bWVudF9nZXRfYXR0cmlidXRlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01OYW1lZE5vZGVNYXAqCit3ZWJraXRfZG9tX2VsZW1lbnRf
Z2V0X2F0dHJpYnV0ZXMoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9lbGVtZW50X2dldF9zdHlsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01DU1NTdHlsZURlY2xh
cmF0aW9uCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbioKK3dl
YmtpdF9kb21fZWxlbWVudF9nZXRfc3R5bGUoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fZWxlbWVudF9nZXRfaWQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9lbGVtZW50X3NldF9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZWxlbWVudF9zZXRfaWQoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X25hbWVzcGFjZV91
cmk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU2luY2U6IDIuMTQKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fZWxlbWVudF9nZXRfbmFtZXNwYWNlX3VyaShXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3ByZWZpeDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTaW5jZTogMi4x
NAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9lbGVtZW50X2dldF9wcmVmaXgo
V2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9sb2NhbF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2xvY2FsX25hbWUoV2ViS2l0RE9NRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfbGVmdDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorKiov
CitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2xlZnQo
V2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9vZmZzZXRfdG9wOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnZG91YmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9lbGVt
ZW50X2dldF9vZmZzZXRfdG9wKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisqKi8KK1dFQktJVF9BUEkgZ2Rv
dWJsZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfd2lkdGgoV2ViS2l0RE9NRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfaGVpZ2h0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZz
ZXRfaGVpZ2h0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfY2xpZW50X2xlZnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X3RvcDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorKiovCitXRUJL
SVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X3RvcChXZWJLaXRE
T01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVu
dF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2RvdWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fZWxlbWVudF9n
ZXRfY2xpZW50X3dpZHRoKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01F
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3Vi
bGUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xpZW50X2hlaWdodChXZWJLaXRET01FbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9sZWZ0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZwor
KiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9sZWZ0
KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9z
ZXRfc2Nyb2xsX2xlZnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHZhbHVl
OiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRf
c2V0X3Njcm9sbF9sZWZ0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF90b3A6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX3RvcChXZWJLaXRET01FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF90b3A6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X3Njcm9sbF90b3Ao
V2ViS2l0RE9NRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZWxlbWVudF9nZXRfc2Nyb2xsX3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF93aWR0aChXZWJLaXRET01FbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF9oZWlnaHQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dF
QktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2hlaWdodChXZWJL
aXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29m
ZnNldF9wYXJlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF9wYXJlbnQo
V2ViS2l0RE9NRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dl
dF9pbm5lcl9odG1sOgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFNpbmNlOiAyLjgKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fZWxlbWVudF9nZXRfaW5uZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2lubmVyX2h0bWw6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogU2luY2U6IDIuOAorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fZWxlbWVudF9zZXRfaW5uZXJfaHRtbChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X291dGVyX2h0bWw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU2luY2U6IDIuOAorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9lbGVtZW50X2dldF9vdXRlcl9odG1sKFdlYktpdERPTUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisgKiBTaW5jZTogMi44CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9lbGVtZW50X3NldF9vdXRlcl9odG1sKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21f
ZWxlbWVudF9nZXRfY2xhc3NfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fZWxlbWVudF9nZXRfY2xhc3NfbmFtZShXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2NsYXNzX25hbWU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2NsYXNzX25hbWUoV2ViS2l0RE9NRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRf
Z2V0X3ByZXZpb3VzX2VsZW1lbnRfc2libGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01FbGVtZW50
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtpdF9kb21fZWxlbWVudF9n
ZXRfcHJldmlvdXNfZWxlbWVudF9zaWJsaW5nKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfbmV4dF9lbGVtZW50X3NpYmxpbmc6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQq
Cit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5nKFdlYktpdERPTUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2hpbGRyZW46
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyAqCisgKiBTaW5jZTogMi4xMAor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9lbGVt
ZW50X2dldF9jaGlsZHJlbihXZWJLaXRET01FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X2ZpcnN0X2VsZW1lbnRfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0
RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2ZpcnN0X2VsZW1lbnRfY2hpbGQoV2ViS2l0RE9NRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2dldF9sYXN0X2VsZW1lbnRfY2hpbGQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogQSAjV2ViS2l0RE9NRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1l
bnQqCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2xhc3RfZWxlbWVudF9jaGlsZChXZWJLaXRET01F
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NoaWxkX2Vs
ZW1lbnRfY291bnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2d1bG9uZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9lbGVtZW50
X2dldF9jaGlsZF9lbGVtZW50X2NvdW50KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0NzMxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitXZWJLaXRET01FbGVtZW50KiB3cmFwRWxlbWVudChXZWJDb3JlOjpFbGVtZW50Kik7CitX
ZWJLaXRET01FbGVtZW50KiBraXQoV2ViQ29yZTo6RWxlbWVudCopOworV2ViQ29yZTo6RWxlbWVu
dCogY29yZShXZWJLaXRET01FbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxl
bWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNhMTEyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUVsZW1l
bnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTUVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktp
dERPTUVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisK
K0dfQkVHSU5fREVDTFMKKworLyoqCisgKiBXRUJLSVRfRE9NX0VMRU1FTlRfQUxMT1dfS0VZQk9B
UkRfSU5QVVQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FTEVNRU5UX0FMTE9XX0tFWUJPQVJE
X0lOUFVUIDEKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfbWF0Y2hlczoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAc2VsZWN0b3JzOiBBICNnY2hhcgorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZWxlbWVudF9t
YXRjaGVzKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBzZWxlY3RvcnMsIEdF
cnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfY2xvc2VzdDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKiBAc2VsZWN0b3JzOiBBICNnY2hhcgorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2VsZW1lbnRfY2xvc2VzdChXZWJLaXRET01F
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogc2VsZWN0b3JzLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEBzZWxlY3RvcnM6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9lbGVt
ZW50X3dlYmtpdF9tYXRjaGVzX3NlbGVjdG9yKFdlYktpdERPTUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiBzZWxlY3RvcnMsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2VsZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbF9zY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NRWxlbWVudAorICogQGZsYWdzOiBBICNndXNob3J0CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF93ZWJraXRfcmVx
dWVzdF9mdWxsX3NjcmVlbihXZWJLaXRET01FbGVtZW50KiBzZWxmLCBndXNob3J0IGZsYWdzKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2VsZW1lbnRfd2Via2l0X3JlcXVlc3RfZnVsbHNjcmVlbjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF93ZWJraXRfcmVxdWVz
dF9mdWxsc2NyZWVuKFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfZWxlbWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01FbGVtZW50CisgKiBAd2hlcmU6IEEgI2djaGFyCisgKiBAZWxlbWVudDogQSAjV2ViS2l0RE9N
RWxlbWVudAorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5v
bmUpOiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTUVsZW1lbnQqCit3ZWJraXRfZG9tX2VsZW1lbnRfaW5zZXJ0
X2FkamFjZW50X2VsZW1lbnQoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHdo
ZXJlLCBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9lbGVtZW50X2luc2VydF9hZGphY2VudF9odG1sOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUVsZW1lbnQKKyAqIEB3aGVyZTogQSAjZ2NoYXIKKyAqIEBodG1sOiBBICNnY2hh
cgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfaHRtbChX
ZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogd2hlcmUsIGNvbnN0IGdjaGFyKiBo
dG1sLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9lbGVtZW50X2luc2Vy
dF9hZGphY2VudF90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqIEB3aGVy
ZTogQSAjZ2NoYXIKKyAqIEB0ZXh0OiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
ZWxlbWVudF9pbnNlcnRfYWRqYWNlbnRfdGV4dChXZWJLaXRET01FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogd2hlcmUsIGNvbnN0IGdjaGFyKiB0ZXh0LCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9lbGVtZW50X3JlcXVlc3RfcG9pbnRlcl9sb2NrOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9lbGVtZW50X3JlcXVlc3RfcG9pbnRlcl9sb2NrKFdl
YktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9yZW1v
dmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRWxlbWVudAorICogQGVycm9yOiAjR0Vycm9yCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fZWxlbWVudF9yZW1vdmUoV2ViS2l0RE9NRWxlbWVudCogc2VsZiwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfY2xhc3NfbGlzdDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01ET01Ub2tlbkxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgV2ViS2l0RE9NRE9NVG9rZW5MaXN0Kgord2Via2l0X2RvbV9lbGVtZW50X2dl
dF9jbGFzc19saXN0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fZWxlbWVudF9nZXRfd2Via2l0X3JlZ2lvbl9vdmVyc2V0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRf
d2Via2l0X3JlZ2lvbl9vdmVyc2V0KFdlYktpdERPTUVsZW1lbnQqIHNlbGYpOworCisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01FbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iOTQ2YmVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudC5jcHAKQEAgLTAsMCArMSw0
OTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJ
bXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVO
VF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJ
VF9ET01fVFlQRV9FVkVOVCwgV2ViS2l0RE9NRXZlbnRQcml2YXRlKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRXZlbnRQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnQ+IGNv
cmVPYmplY3Q7Cit9IFdlYktpdERPTUV2ZW50UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTUV2ZW50KiBraXQoV2ViQ29yZTo6RXZlbnQqIG9iaikKK3sKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9FVkVOVChyZXQp
OworCisgICAgcmV0dXJuIHdyYXAob2JqKTsKK30KKworV2ViQ29yZTo6RXZlbnQqIGNvcmUoV2Vi
S2l0RE9NRXZlbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpFdmVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Cit9CisKK1dlYktpdERPTUV2ZW50KiB3cmFwRXZlbnQoV2ViQ29yZTo6RXZlbnQqIGNv
cmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRf
RE9NX0VWRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfRVZFTlQsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NRXZlbnQsIHdlYmtpdF9kb21fZXZlbnQsIFdFQktJVF9E
T01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RZUEUsCisg
ICAgUFJPUF9UQVJHRVQsCisgICAgUFJPUF9DVVJSRU5UX1RBUkdFVCwKKyAgICBQUk9QX0VWRU5U
X1BIQVNFLAorICAgIFBST1BfQlVCQkxFUywKKyAgICBQUk9QX0NBTkNFTEFCTEUsCisgICAgUFJP
UF9DT01QT1NFRCwKKyAgICBQUk9QX1RJTUVfU1RBTVAsCisgICAgUFJPUF9ERUZBVUxUX1BSRVZF
TlRFRCwKKyAgICBQUk9QX0lTX1RSVVNURUQsCisgICAgUFJPUF9TUkNfRUxFTUVOVCwKKyAgICBQ
Uk9QX1JFVFVSTl9WQUxVRSwKKyAgICBQUk9QX0NBTkNFTF9CVUJCTEUsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2V2ZW50X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBX
ZWJLaXRET01FdmVudFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0VWRU5UX0dFVF9QUklWQVRF
KG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NRXZlbnRQcml2YXRlKCk7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ldmVudF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3NldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUV2ZW50KiBzZWxmID0gV0VCS0lU
X0RPTV9FVkVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX1JFVFVSTl9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9ldmVudF9zZXRfcmV0dXJu
X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NBTkNFTF9CVUJCTEU6CisgICAgICAgIHdlYmtpdF9kb21fZXZlbnRf
c2V0X2NhbmNlbF9idWJibGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01FdmVudCogc2VsZiA9IFdFQktJVF9ET01fRVZFTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9UWVBF
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dl
dF9ldmVudF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RBUkdF
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dl
dF90YXJnZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VSUkVOVF9U
QVJHRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ldmVu
dF9nZXRfY3VycmVudF90YXJnZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfRVZFTlRfUEhBU0U6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9k
b21fZXZlbnRfZ2V0X2V2ZW50X3BoYXNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0JVQkJMRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtp
dF9kb21fZXZlbnRfZ2V0X2J1YmJsZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ0FOQ0VMQUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X2RvbV9ldmVudF9nZXRfY2FuY2VsYWJsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9DT01QT1NFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwg
d2Via2l0X2RvbV9ldmVudF9nZXRfY29tcG9zZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVElNRV9TVEFNUDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwg
d2Via2l0X2RvbV9ldmVudF9nZXRfdGltZV9zdGFtcChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9ERUZBVUxUX1BSRVZFTlRFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9ldmVudF9nZXRfZGVmYXVsdF9wcmV2ZW50ZWQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSVNfVFJVU1RFRDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9ldmVudF9nZXRfaXNfdHJ1c3RlZChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkNfRUxFTUVOVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2V2ZW50X2dldF9zcmNfZWxl
bWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVRVUk5fVkFMVUU6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fZXZlbnRfZ2V0
X3JldHVybl92YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DQU5D
RUxfQlVCQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9t
X2V2ZW50X2dldF9jYW5jZWxfYnViYmxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBH
T2JqZWN0KiB3ZWJraXRfZG9tX2V2ZW50X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fZXZlbnRfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTUV2ZW50
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRVZFTlRfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAg
ICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnQqPihXRUJLSVRf
RE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBv
YmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfY2xhc3NfaW5pdChXZWJL
aXRET01FdmVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01FdmVudFByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9ldmVudF9jb25z
dHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9ldmVudF9m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fZXZl
bnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9ldmVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAg
ICJFdmVudDp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEV2ZW50OnR5cGUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAidGFyZ2V0IiwKKyAgICAgICAgICAgICJFdmVudDp0YXJnZXQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01FdmVudFRhcmdldCogRXZlbnQ6dGFyZ2V0IiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DVVJSRU5UX1RBUkdF
VCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjdXJyZW50LXRh
cmdldCIsCisgICAgICAgICAgICAiRXZlbnQ6Y3VycmVudC10YXJnZXQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01FdmVudFRhcmdldCogRXZlbnQ6Y3VycmVudC10YXJnZXQiLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VWRU5UX1BIQVNFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAgICAgICJldmVudC1waGFzZSIsCisg
ICAgICAgICAgICAiRXZlbnQ6ZXZlbnQtcGhhc2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
dXNob3J0IEV2ZW50OmV2ZW50LXBoYXNlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0JVQkJMRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImJ1
YmJsZXMiLAorICAgICAgICAgICAgIkV2ZW50OmJ1YmJsZXMiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnYm9vbGVhbiBFdmVudDpidWJibGVzIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0FOQ0VM
QUJMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY2FuY2Vs
YWJsZSIsCisgICAgICAgICAgICAiRXZlbnQ6Y2FuY2VsYWJsZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIEV2ZW50OmNhbmNlbGFibGUiLAorICAgICAgICAgICAgRkFMU0UsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9D
T01QT1NFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY29t
cG9zZWQiLAorICAgICAgICAgICAgIkV2ZW50OmNvbXBvc2VkIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2Jvb2xlYW4gRXZlbnQ6Y29tcG9zZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9USU1F
X1NUQU1QLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgKKyAgICAgICAgICAgICJ0aW1lLXN0
YW1wIiwKKyAgICAgICAgICAgICJFdmVudDp0aW1lLXN0YW1wIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ3VpbnQzMiBFdmVudDp0aW1lLXN0YW1wIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlO
VCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0RFRkFVTFRfUFJFVkVOVEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigK
KyAgICAgICAgICAgICJkZWZhdWx0LXByZXZlbnRlZCIsCisgICAgICAgICAgICAiRXZlbnQ6ZGVm
YXVsdC1wcmV2ZW50ZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBFdmVudDpk
ZWZhdWx0LXByZXZlbnRlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lTX1RSVVNURUQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImlzLXRydXN0ZWQiLAorICAg
ICAgICAgICAgIkV2ZW50OmlzLXRydXN0ZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9v
bGVhbiBFdmVudDppcy10cnVzdGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1JDX0VMRU1FTlQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAic3JjLWVsZW1lbnQi
LAorICAgICAgICAgICAgIkV2ZW50OnNyYy1lbGVtZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NRXZlbnRUYXJnZXQqIEV2ZW50OnNyYy1lbGVtZW50IiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVRVUk5fVkFMVUUsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInJldHVybi12YWx1ZSIsCisgICAgICAg
ICAgICAiRXZlbnQ6cmV0dXJuLXZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29s
ZWFuIEV2ZW50OnJldHVybi12YWx1ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DQU5DRUxfQlVC
QkxFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjYW5jZWwt
YnViYmxlIiwKKyAgICAgICAgICAgICJFdmVudDpjYW5jZWwtYnViYmxlIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdib29sZWFuIEV2ZW50OmNhbmNlbC1idWJibGUiLAorICAgICAgICAgICAg
RkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF9pbml0KFdlYktpdERPTUV2ZW50KiByZXF1ZXN0KQor
eworICAgIFdlYktpdERPTUV2ZW50UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fRVZFTlRfR0VU
X1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01FdmVudFByaXZhdGUo
KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2V2ZW50X3N0b3BfcHJvcGFnYXRpb24oV2ViS2l0RE9N
RXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c3Rv
cFByb3BhZ2F0aW9uKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9ldmVudF9wcmV2ZW50X2RlZmF1
bHQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChz
ZWxmKSk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+cHJldmVudERlZmF1bHQoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2V2ZW50X2lu
aXRfZXZlbnQoV2ViS2l0RE9NRXZlbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBldmVudFR5cGVBcmcs
IGdib29sZWFuIGNhbkJ1YmJsZUFyZywgZ2Jvb2xlYW4gY2FuY2VsYWJsZUFyZykKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGV2ZW50
VHlwZUFyZyk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRXZlbnRUeXBlQXJnID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGV2ZW50VHlwZUFyZyk7CisgICAgaXRlbS0+aW5pdEV2ZW50KGNvbnZlcnRlZEV2ZW50
VHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3N0b3BfaW1tZWRpYXRlX3Byb3BhZ2F0aW9uKFdlYktpdERPTUV2ZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkV2
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnN0b3BJbW1lZGlhdGVQ
cm9wYWdhdGlvbigpOworfQorCitnY2hhciogd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfdHlw
ZShXZWJLaXRET01FdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01FdmVudFRhcmdldCogd2Via2l0
X2RvbV9ldmVudF9nZXRfdGFyZ2V0KFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRUYXJnZXQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT50YXJnZXQoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01FdmVudFRh
cmdldCogd2Via2l0X2RvbV9ldmVudF9nZXRfY3VycmVudF90YXJnZXQoV2ViS2l0RE9NRXZlbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpFdmVudFRhcmdldD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmN1
cnJlbnRUYXJnZXQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitndXNob3J0IHdlYmtpdF9kb21fZXZlbnRfZ2V0X2V2ZW50X3BoYXNlKFdlYktp
dERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPmV2ZW50UGhhc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X2dldF9idWJibGVzKFdlYktpdERPTUV2
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+YnViYmxlcygpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2dib29sZWFuIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2NhbmNlbGFibGUoV2ViS2l0RE9NRXZl
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5jYW5jZWxhYmxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9ldmVudF9nZXRfY29tcG9zZWQoV2ViS2l0RE9NRXZl
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRVZFTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5jb21wb3NlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2d1aW50MzIgd2Via2l0X2RvbV9ldmVudF9nZXRfdGltZV9zdGFtcChXZWJLaXRET01FdmVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQz
MiByZXN1bHQgPSBpdGVtLT50aW1lU3RhbXAoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X2dldF9kZWZhdWx0X3ByZXZlbnRlZChXZWJLaXRET01F
dmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X2dldF9pc190cnVzdGVkKFdl
YktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aXNUcnVzdGVkKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHdlYmtpdF9kb21fZXZlbnRfZ2V0
X3NyY19lbGVtZW50KFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpFdmVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRUYXJnZXQ+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zcmNFbGVtZW50KCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9l
dmVudF9nZXRfcmV0dXJuX3ZhbHVlKFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
bGVnYWN5UmV0dXJuVmFsdWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21fZXZlbnRfc2V0X3JldHVybl92YWx1ZShXZWJLaXRET01FdmVudCogc2VsZiwgZ2Jvb2xl
YW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19FVkVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6RXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0TGVn
YWN5UmV0dXJuVmFsdWUodmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2V2ZW50X2dl
dF9jYW5jZWxfYnViYmxlKFdlYktpdERPTUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6RXZlbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2FuY2Vs
QnViYmxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2V2ZW50
X3NldF9jYW5jZWxfYnViYmxlKFdlYktpdERPTUV2ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VWRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpFdmVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRDYW5jZWxCdWJibGUo
dmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUV2ZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjZDQyMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRXZlbnQuaApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZp
bmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5o
PiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9N
RXZlbnRfaAorI2RlZmluZSBXZWJLaXRET01FdmVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0VWRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fZXZlbnRfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRVZFTlQsIFdlYktpdERP
TUV2ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRVZFTlQsIFdlYktp
dERPTUV2ZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRVZFTlQob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0VWRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19FVkVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfRVZFTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0VWRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9FVkVOVCwgV2ViS2l0RE9NRXZlbnRDbGFzcykpCisK
Ky8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9OT05FOgorICovCisjZGVmaW5lIFdFQktJVF9ET01f
RVZFTlRfTk9ORSAwCisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9DQVBUVVJJTkdfUEhBU0U6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9DQVBUVVJJTkdfUEhBU0UgMQorCisvKioK
KyAqIFdFQktJVF9ET01fRVZFTlRfQVRfVEFSR0VUOgorICovCisjZGVmaW5lIFdFQktJVF9ET01f
RVZFTlRfQVRfVEFSR0VUIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX0JVQkJMSU5HX1BI
QVNFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfQlVCQkxJTkdfUEhBU0UgMworCisv
KioKKyAqIFdFQktJVF9ET01fRVZFTlRfTU9VU0VET1dOOgorICovCisjZGVmaW5lIFdFQktJVF9E
T01fRVZFTlRfTU9VU0VET1dOIDEKKworLyoqCisgKiBXRUJLSVRfRE9NX0VWRU5UX01PVVNFVVA6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9FVkVOVF9NT1VTRVVQIDIKKworLyoqCisgKiBXRUJL
SVRfRE9NX0VWRU5UX01PVVNFT1ZFUjoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX01P
VVNFT1ZFUiA0CisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9NT1VTRU9VVDoKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX0VWRU5UX01PVVNFT1VUIDgKKworLyoqCisgKiBXRUJLSVRfRE9NX0VW
RU5UX01PVVNFTU9WRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX01PVVNFTU9WRSAx
NgorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfTU9VU0VEUkFHOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fRVZFTlRfTU9VU0VEUkFHIDMyCisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9D
TElDSzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0NMSUNLIDY0CisKKy8qKgorICog
V0VCS0lUX0RPTV9FVkVOVF9EQkxDTElDSzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5U
X0RCTENMSUNLIDEyOAorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfS0VZRE9XTjoKKyAqLwor
I2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0tFWURPV04gMjU2CisKKy8qKgorICogV0VCS0lUX0RP
TV9FVkVOVF9LRVlVUDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0tFWVVQIDUxMgor
CisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfS0VZUFJFU1M6CisgKi8KKyNkZWZpbmUgV0VCS0lU
X0RPTV9FVkVOVF9LRVlQUkVTUyAxMDI0CisKKy8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9EUkFH
RFJPUDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0VWRU5UX0RSQUdEUk9QIDIwNDgKKworLyoq
CisgKiBXRUJLSVRfRE9NX0VWRU5UX0ZPQ1VTOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZF
TlRfRk9DVVMgNDA5NgorCisvKioKKyAqIFdFQktJVF9ET01fRVZFTlRfQkxVUjoKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX0VWRU5UX0JMVVIgODE5MgorCisvKioKKyAqIFdFQktJVF9ET01fRVZF
TlRfU0VMRUNUOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fRVZFTlRfU0VMRUNUIDE2Mzg0CisK
Ky8qKgorICogV0VCS0lUX0RPTV9FVkVOVF9DSEFOR0U6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9FVkVOVF9DSEFOR0UgMzI3NjgKKworc3RydWN0IF9XZWJLaXRET01FdmVudCB7CisgICAgV2Vi
S2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NRXZl
bnRDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9ldmVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2V2ZW50X3N0b3BfcHJvcGFnYXRpb246CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRXZlbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9ldmVudF9z
dG9wX3Byb3BhZ2F0aW9uKFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2V2ZW50X3ByZXZlbnRfZGVmYXVsdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2V2ZW50X3ByZXZlbnRfZGVmYXVs
dChXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9pbml0
X2V2ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKiBAZXZlbnRUeXBlQXJnOiBB
ICNnY2hhcgorICogQGNhbkJ1YmJsZUFyZzogQSAjZ2Jvb2xlYW4KKyAqIEBjYW5jZWxhYmxlQXJn
OiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2V2ZW50
X2luaXRfZXZlbnQoV2ViS2l0RE9NRXZlbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBldmVudFR5cGVB
cmcsIGdib29sZWFuIGNhbkJ1YmJsZUFyZywgZ2Jvb2xlYW4gY2FuY2VsYWJsZUFyZyk7CisKKy8q
KgorICogd2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01FdmVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF90eXBlKFdlYktpdERPTUV2ZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2dldF90YXJnZXQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTUV2ZW50VGFyZ2V0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRXZlbnRUYXJnZXQqCit3
ZWJraXRfZG9tX2V2ZW50X2dldF90YXJnZXQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2N1cnJlbnRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUV2ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01FdmVudFRhcmdldAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUV2ZW50VGFyZ2V0Kgord2Vi
a2l0X2RvbV9ldmVudF9nZXRfY3VycmVudF90YXJnZXQoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2V2ZW50X3BoYXNlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorKiovCitXRUJLSVRf
QVBJIGd1c2hvcnQKK3dlYmtpdF9kb21fZXZlbnRfZ2V0X2V2ZW50X3BoYXNlKFdlYktpdERPTUV2
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X2dldF9idWJibGVzOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9ldmVudF9nZXRfYnViYmxlcyhXZWJL
aXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9nZXRfY2FuY2Vs
YWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAqIFJldHVybnM6IEEgI2di
b29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fZXZlbnRfZ2V0X2Nh
bmNlbGFibGUoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZl
bnRfZ2V0X3RpbWVfc3RhbXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNndWludDMyCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQzMgord2Via2l0X2RvbV9l
dmVudF9nZXRfdGltZV9zdGFtcChXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9ldmVudF9nZXRfc3JjX2VsZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZl
bnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUV2ZW50VGFy
Z2V0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRXZlbnRUYXJnZXQqCit3ZWJraXRfZG9tX2V2
ZW50X2dldF9zcmNfZWxlbWVudChXZWJLaXRET01FdmVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9ldmVudF9nZXRfcmV0dXJuX3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUV2
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV9ldmVudF9nZXRfcmV0dXJuX3ZhbHVlKFdlYktpdERPTUV2ZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50X3NldF9yZXR1cm5fdmFsdWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9ldmVudF9zZXRfcmV0dXJuX3ZhbHVlKFdlYktpdERP
TUV2ZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVu
dF9nZXRfY2FuY2VsX2J1YmJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21fZXZlbnRfZ2V0X2NhbmNlbF9idWJibGUoV2ViS2l0RE9NRXZlbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fZXZlbnRfc2V0X2NhbmNlbF9idWJibGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NRXZlbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9ldmVudF9zZXRfY2FuY2VsX2J1YmJsZShXZWJLaXRET01FdmVudCog
c2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0
RE9NRXZlbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FdmVudFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjNjdjNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01FdmVudFBy
aXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01FdmVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9FdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01FdmVudC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUV2ZW50KiB3cmFwRXZlbnQoV2ViQ29yZTo6RXZl
bnQqKTsKK1dlYktpdERPTUV2ZW50KiBraXQoV2ViQ29yZTo6RXZlbnQqKTsKK1dlYkNvcmU6OkV2
ZW50KiBjb3JlKFdlYktpdERPTUV2ZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUV2ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZl
bnRUYXJnZXQuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwCnJlbmFtZSB0byBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUV2ZW50VGFyZ2V0LmNwcAppbmRleCA5ZTNiMTJiLi44Yjc1MGI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUV2ZW50VGFyZ2V0LmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldl
YktpdERPTUV2ZW50VGFyZ2V0LmgiCiAKICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgotI2lu
Y2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FdmVudFRhcmdldC5oPgog
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01FdmVudFRhcmdldC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKcmVuYW1l
IHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvZ29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRUYXJn
ZXRQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgKcmVuYW1l
IHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NRXZlbnRUYXJnZXRQcml2YXRlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRVbnN0
YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01FdmVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDY4MTY2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRXZlbnRVbnN0YWJsZS5o
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NRXZlbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUV2ZW50VW5zdGFi
bGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
Ky8qKgorICogd2Via2l0X2RvbV9ldmVudF9zdG9wX2ltbWVkaWF0ZV9wcm9wYWdhdGlvbjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2V2ZW50X3N0b3BfaW1tZWRpYXRlX3Byb3Bh
Z2F0aW9uKFdlYktpdERPTUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2V2ZW50
X2dldF9jb21wb3NlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01FdmVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2V2ZW50X2dldF9jb21wb3NlZChXZWJLaXRET01FdmVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ldmVudF9nZXRfZGVmYXVsdF9wcmV2ZW50
ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV9ldmVudF9nZXRfZGVmYXVsdF9wcmV2ZW50ZWQoV2ViS2l0RE9NRXZlbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fZXZlbnRfZ2V0X2lzX3RydXN0ZWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9ldmVudF9nZXRfaXNfdHJ1c3RlZChXZWJLaXRET01FdmVudCogc2VsZik7CisKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2Vu
ZGlmIC8qIFdlYktpdERPTUV2ZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NRmlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTEyOWMwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZS5jcHAKQEAgLTAsMCArMSwxMzIg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01GaWxlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NQmxvYlByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01GaWxlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRmlsZVVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUZpbGUq
IGtpdChXZWJDb3JlOjpGaWxlKiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fRklMRShr
aXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmxvYio+KG9iaikpKTsKK30KKworV2ViQ29yZTo6Rmls
ZSogY29yZShXZWJLaXRET01GaWxlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6RmlsZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUZpbGUqIHdyYXBGaWxlKFdlYkNvcmU6OkZp
bGUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0ZJTEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9GSUxFLCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUZpbGUsIHdlYmtpdF9kb21fZmlsZSwgV0VCS0lU
X0RPTV9UWVBFX0JMT0IpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX05BTUUsCisg
ICAgUFJPUF9MQVNUX01PRElGSUVELAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9maWxl
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUZpbGUqIHNlbGYgPSBX
RUJLSVRfRE9NX0ZJTEUob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2ZpbGVfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTEFTVF9NT0RJRklFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50NjQodmFsdWUsIHdlYmtp
dF9kb21fZmlsZV9nZXRfbGFzdF9tb2RpZmllZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2ZpbGVfY2xhc3NfaW5pdChXZWJLaXRET01GaWxlQ2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2ZpbGVfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAg
ICAgICAiRmlsZTpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEZpbGU6bmFt
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0xBU1RfTU9ESUZJRUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19pbnQ2NCgKKyAgICAgICAgICAgICJsYXN0LW1vZGlmaWVkIiwKKyAgICAgICAgICAgICJGaWxl
Omxhc3QtbW9kaWZpZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnaW50NjQgRmlsZTpsYXN0
LW1vZGlmaWVkIiwKKyAgICAgICAgICAgIEdfTUlOSU5UNjQsIEdfTUFYSU5UNjQsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2ZpbGVfaW5pdChXZWJLaXRET01GaWxlKiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fZmlsZV9nZXRfbmFtZShXZWJL
aXRET01GaWxlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0ZJTEUoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkZpbGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitnaW50NjQgd2Via2l0X2RvbV9maWxlX2dldF9sYXN0X21vZGlm
aWVkKFdlYktpdERPTUZpbGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRklM
RShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RmlsZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnaW50NjQgcmVzdWx0ID0gaXRlbS0+bGFzdE1vZGlmaWVkKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWVhZjliCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01GaWxlLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NRmls
ZV9oCisjZGVmaW5lIFdlYktpdERPTUZpbGVfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQmxvYi5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfRklMRSAgICAgICAgICAgICh3ZWJraXRfZG9tX2ZpbGVfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9GSUxFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9GSUxFLCBXZWJLaXRET01GaWxlKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9GSUxFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9GSUxFLCBXZWJLaXRET01GaWxlQ2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfRklMRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfRklMRSkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfRklMRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfRklMRSkpCisjZGVmaW5lIFdFQktJVF9ET01fRklMRV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfRklMRSwgV2ViS2l0RE9NRmlsZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01GaWxl
IHsKKyAgICBXZWJLaXRET01CbG9iIHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NRmlsZUNsYXNzIHsKKyAgICBXZWJLaXRET01CbG9iQ2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9maWxlX2dldF90eXBlKHZvaWQpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fZmlsZV9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01GaWxlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21fZmlsZV9nZXRfbmFtZShXZWJLaXRET01GaWxlKiBzZWxmKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUZpbGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01G
aWxlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45MDUzZWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlTGlzdC5jcHAK
QEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01GaWxlTGlzdC5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTUZpbGVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUZpbGVQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VU
RjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fRklMRV9MSVNUX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCwg
V2ViS2l0RE9NRmlsZUxpc3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRmls
ZUxpc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZUxpc3Q+IGNvcmVPYmplY3Q7
Cit9IFdlYktpdERPTUZpbGVMaXN0UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YktpdERPTUZpbGVMaXN0KiBraXQoV2ViQ29yZTo6RmlsZUxpc3QqIG9iaikKK3sKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9GSUxFX0xJU1Qo
cmV0KTsKKworICAgIHJldHVybiB3cmFwRmlsZUxpc3Qob2JqKTsKK30KKworV2ViQ29yZTo6Rmls
ZUxpc3QqIGNvcmUoV2ViS2l0RE9NRmlsZUxpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGaWxlTGlzdCo+KFdFQktJVF9ET01fT0JKRUNU
KHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUZpbGVMaXN0KiB3cmFw
RmlsZUxpc3QoV2ViQ29yZTo6RmlsZUxpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0ZJTEVfTElTVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJL
aXRET01GaWxlTGlzdCwgd2Via2l0X2RvbV9maWxlX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpF
Q1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fZmlsZV9saXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRET01GaWxlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0ZJTEVfTElT
VF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9y
Z2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTUZpbGVM
aXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZmlsZV9saXN0X3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fZmlsZV9saXN0X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUZp
bGVMaXN0KiBzZWxmID0gV0VCS0lUX0RPTV9GSUxFX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVf
c2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9jb25z
dHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmpl
Y3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBv
YmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2ZpbGVfbGlzdF9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFBy
b3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NRmlsZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9GSUxFX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RmlsZUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZmlsZV9saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NRmlsZUxp
c3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NRmlsZUxpc3RQcml2YXRlKSk7Cisg
ICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fZmlsZV9saXN0X2NvbnN0
cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX2ZpbGVfbGlz
dF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
ZmlsZV9saXN0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAg
ICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAg
ICAgIkZpbGVMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBGaWxl
TGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZmlsZV9saXN0X2luaXQoV2ViS2l0RE9NRmlsZUxpc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0
RE9NRmlsZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9GSUxFX0xJU1RfR0VUX1BSSVZB
VEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01GaWxlTGlzdFByaXZhdGUoKTsK
K30KKworV2ViS2l0RE9NRmlsZSogd2Via2l0X2RvbV9maWxlX2xpc3RfaXRlbShXZWJLaXRET01G
aWxlTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0ZJTEVfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6RmlsZUxpc3QqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkZpbGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0
KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9maWxlX2xpc3Rf
Z2V0X2xlbmd0aChXZWJLaXRET01GaWxlTGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19GSUxFX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkZpbGVMaXN0KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUZpbGVMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJl
NTIxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxpc3QuaApAQCAtMCwwICsxLDczIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRE
T01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5
IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRET01GaWxlTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTUZpbGVM
aXN0X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfRklMRV9MSVNUICAg
ICAgICAgICAgKHdlYmtpdF9kb21fZmlsZV9saXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fRklMRV9MSVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9GSUxFX0xJU1QsIFdlYktpdERPTUZpbGVMaXN0KSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9GSUxFX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCwgV2ViS2l0
RE9NRmlsZUxpc3RDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19GSUxFX0xJU1Qob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0ZJTEVfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfRklMRV9MSVNUX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9GSUxF
X0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0ZJTEVfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfRklMRV9MSVNU
LCBXZWJLaXRET01GaWxlTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01GaWxlTGlzdCB7
CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NRmlsZUxpc3RDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9maWxlX2xpc3RfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9maWxlX2xpc3RfaXRlbToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01GaWxlTGlzdAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUZpbGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01GaWxlKgord2Via2l0X2RvbV9maWxlX2xpc3RfaXRlbShXZWJLaXRET01GaWxlTGlz
dCogc2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2ZpbGVfbGlzdF9n
ZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUZpbGVMaXN0CisgKgorICogUmV0dXJu
czogQSAjZ3Vsb25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2ZpbGVfbGlz
dF9nZXRfbGVuZ3RoKFdlYktpdERPTUZpbGVMaXN0KiBzZWxmKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdlYktpdERPTUZpbGVMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRmlsZUxp
c3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmNmMTQwMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVMaXN0
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NRmlsZUxpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
RmlsZUxpc3RQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZUxpc3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRmlsZUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitXZWJLaXRET01GaWxlTGlzdCogd3JhcEZpbGVMaXN0KFdlYkNvcmU6OkZpbGVMaXN0Kik7CitX
ZWJLaXRET01GaWxlTGlzdCoga2l0KFdlYkNvcmU6OkZpbGVMaXN0Kik7CitXZWJDb3JlOjpGaWxl
TGlzdCogY29yZShXZWJLaXRET01GaWxlTGlzdCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01GaWxlTGlzdFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01GaWxlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjYwZjhlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUZpbGVQcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01GaWxlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUZpbGVQcml2
YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01GaWxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NRmlsZSogd3Jh
cEZpbGUoV2ViQ29yZTo6RmlsZSopOworV2ViS2l0RE9NRmlsZSoga2l0KFdlYkNvcmU6OkZpbGUq
KTsKK1dlYkNvcmU6OkZpbGUqIGNvcmUoV2ViS2l0RE9NRmlsZSopOworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01GaWxlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUZpbGVVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01GaWxlVW5zdGFibGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmRkZjIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01G
aWxlVW5zdGFibGUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTUZpbGVVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERP
TUZpbGVVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKwor
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVH
SU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2ZpbGVfZ2V0X2xhc3RfbW9kaWZpZWQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NRmlsZQorICoKKyAqIFJldHVybnM6IEEgI2dpbnQ2NAorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnaW50NjQKK3dlYmtpdF9k
b21fZmlsZV9nZXRfbGFzdF9tb2RpZmllZChXZWJLaXRET01GaWxlKiBzZWxmKTsKKworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5k
aWYgLyogV2ViS2l0RE9NRmlsZVVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBh
ZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUdhbWVwYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQzOTU0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWQuY3BwCkBAIC0wLDAg
KzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWls
ZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NR2FtZXBhZC5oIGFuZAorICAgIFdlYktpdERPTUdhbWVw
YWQuY3BwIGFyZSBjcmVhdGVkIGZvciBHYW1lcGFkLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50
IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdlYktpdERPTUdhbWVw
YWQuaCBhbmQKKyAgICBXZWJLaXRET01HYW1lcGFkLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBm
aWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01H
YW1lcGFkLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUdhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kMzk1NDUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkLmgKQEAgLTAsMCAr
MSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxk
IHNjcmlwdHMgdGhhdCBXZWJLaXRET01HYW1lcGFkLmggYW5kCisgICAgV2ViS2l0RE9NR2FtZXBh
ZC5jcHAgYXJlIGNyZWF0ZWQgZm9yIEdhbWVwYWQuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQg
dGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NR2FtZXBh
ZC5oIGFuZAorICAgIFdlYktpdERPTUdhbWVwYWQuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZp
bGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdh
bWVwYWRMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NR2FtZXBhZExpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZiNzgxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWRM
aXN0LmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBq
dXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTUdhbWVwYWRMaXN0LmggYW5k
CisgICAgV2ViS2l0RE9NR2FtZXBhZExpc3QuY3BwIGFyZSBjcmVhdGVkIGZvciBHYW1lcGFkTGlz
dC5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWlu
ZyB0byBnZW5lcmF0ZSBXZWJLaXRET01HYW1lcGFkTGlzdC5oIGFuZAorICAgIFdlYktpdERPTUdh
bWVwYWRMaXN0LmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVk
IHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HYW1lcGFkTGlzdC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01H
YW1lcGFkTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzgxNDcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUdhbWVwYWRMaXN0LmgKQEAgLTAsMCArMSw2IEBACisv
KgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMg
dGhhdCBXZWJLaXRET01HYW1lcGFkTGlzdC5oIGFuZAorICAgIFdlYktpdERPTUdhbWVwYWRMaXN0
LmNwcCBhcmUgY3JlYXRlZCBmb3IgR2FtZXBhZExpc3QuaWRsLCBhbmQgdGh1cworICAgIHByZXZl
bnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NR2Ft
ZXBhZExpc3QuaCBhbmQKKyAgICBXZWJLaXRET01HYW1lcGFkTGlzdC5jcHAgYXQgZXZlcnkgYnVp
bGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HZW9sb2NhdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1Mzg0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NR2VvbG9jYXRpb24uY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NR2Vv
bG9jYXRpb24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9HRU9MT0NBVElPTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9HRU9MT0NBVElPTiwgV2ViS2l0
RE9NR2VvbG9jYXRpb25Qcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NR2VvbG9j
YXRpb25Qcml2YXRlIHsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgUmVmUHRyPFdlYkNv
cmU6Okdlb2xvY2F0aW9uPiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElP
TikKK30gV2ViS2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlOworCisjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NR2VvbG9jYXRpb24qIGtpdChX
ZWJDb3JlOjpHZW9sb2NhdGlvbiogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikp
CisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0dFT0xPQ0FUSU9OKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcEdlb2xvY2F0aW9uKG9iaik7Cit9CisKK1dlYkNvcmU6Okdlb2xvY2F0aW9uKiBjb3Jl
KFdlYktpdERPTUdlb2xvY2F0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6R2VvbG9jYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01HZW9sb2NhdGlvbiogd3JhcEdl
b2xvY2F0aW9uKFdlYkNvcmU6Okdlb2xvY2F0aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9HRU9MT0NBVElPTihnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX0dFT0xPQ0FUSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdFT0xPQ0FUSU9OKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUdlb2xvY2F0aW9u
LCB3ZWJraXRfZG9tX2dlb2xvY2F0aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX0dF
T0xPQ0FUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgp
KTsKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgcHJpdi0+fldlYktpdERPTUdl
b2xvY2F0aW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fZ2VvbG9j
YXRpb25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fZ2VvbG9jYXRpb25fY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVj
dFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9nZW9sb2NhdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShH
RU9MT0NBVElPTikKKyAgICBXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX0dFT0xPQ0FUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Okdlb2xvY2F0aW9uKj4oV0VCS0lUX0RPTV9PQkpF
Q1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKEdFT0xP
Q0FUSU9OKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
Z2VvbG9jYXRpb25fY2xhc3NfaW5pdChXZWJLaXRET01HZW9sb2NhdGlvbkNsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xh
c3MsIHNpemVvZihXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9nZW9sb2NhdGlvbl9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9nZW9sb2NhdGlvbl9maW5hbGl6
ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9nZW9sb2NhdGlvbl9pbml0KFdlYktpdERP
TUdlb2xvY2F0aW9uKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fR0VPTE9DQVRJT05fR0VUX1BSSVZBVEUocmVxdWVzdCk7Cisg
ICAgbmV3IChwcml2KSBXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGUoKTsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2NsZWFyX3dhdGNoKFdlYktpdERPTUdlb2xvY2F0aW9uKiBz
ZWxmLCBnbG9uZyB3YXRjaElEKQoreworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0dFT0xPQ0FUSU9OKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpHZW9sb2NhdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jbGVhcldhdGNoKHdhdGNo
SUQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHdh
dGNoSUQpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkdlb2xvY2F0aW9u
IikKKyNlbmRpZiAvKiBFTkFCTEUoR0VPTE9DQVRJT04pICovCit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RF
eGNlcHRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NR2VvbG9jYXRpb24uaApzaW1pbGFyaXR5IGluZGV4IDUyJQpyZW5h
bWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0RXhjZXB0aW9uLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2VvbG9jYXRpb24uaAppbmRleCA2
Mjc0NTUzLi40ZWQ2ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXhjZXB0aW9uLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01HZW9s
b2NhdGlvbi5oCkBAIC0xOCw4ICsxOCw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0RXhjZXB0aW9uX2gKLSNkZWZpbmUgV2Vi
S2l0RE9NVGVzdEV4Y2VwdGlvbl9oCisjaWZuZGVmIFdlYktpdERPTUdlb2xvY2F0aW9uX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NR2VvbG9jYXRpb25faAogCiAjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJCiAKQEAgLTI5LDM2ICsyOSwzNSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKLSNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVhDRVBUSU9OICAgICAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9leGNlcHRpb25fZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0VYQ0VQ
VElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9FWENFUFRJT04sIFdlYktpdERPTVRlc3RFeGNlcHRpb24pKQot
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfRVhDRVBUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0VYQ0VQVElP
TiwgV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbkNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RF
U1RfRVhDRVBUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9URVNUX0VYQ0VQVElPTikpCi0jZGVmaW5lIFdFQktJVF9ET01f
SVNfVEVTVF9FWENFUFRJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfRVhDRVBUSU9OKSkKLSNkZWZpbmUgV0VCS0lU
X0RPTV9URVNUX0VYQ0VQVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FWENFUFRJT04sIFdlYktpdERPTVRl
c3RFeGNlcHRpb25DbGFzcykpCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9HRU9MT0NBVElPTiAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2dlb2xvY2F0aW9uX2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9ET01fR0VPTE9DQVRJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0dFT0xPQ0FUSU9OLCBXZWJLaXRET01HZW9s
b2NhdGlvbikpCisjZGVmaW5lIFdFQktJVF9ET01fR0VPTE9DQVRJT05fQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0dFT0xP
Q0FUSU9OLCBXZWJLaXRET01HZW9sb2NhdGlvbkNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0dFT0xPQ0FUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9HRU9MT0NBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
R0VPTE9DQVRJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0dFT0xPQ0FUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9HRU9M
T0NBVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfR0VPTE9DQVRJT04sIFdlYktpdERPTUdlb2xvY2F0aW9uQ2xhc3Mp
KQogCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RFeGNlcHRpb24geworc3RydWN0IF9XZWJLaXRET01H
ZW9sb2NhdGlvbiB7CiAgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKIH07CiAK
LXN0cnVjdCBfV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbkNsYXNzIHsKK3N0cnVjdCBfV2ViS2l0RE9N
R2VvbG9jYXRpb25DbGFzcyB7CiAgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9nZXRf
dHlwZSh2b2lkKTsKK3dlYmtpdF9kb21fZ2VvbG9jYXRpb25fZ2V0X3R5cGUodm9pZCk7CiAKIC8q
KgotICogd2Via2l0X2RvbV90ZXN0X2V4Y2VwdGlvbl9nZXRfbmFtZToKLSAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0RXhjZXB0aW9uCi0gKgotICogUmV0dXJuczogQSAjZ2NoYXIKKyAqIHdlYmtp
dF9kb21fZ2VvbG9jYXRpb25fY2xlYXJfd2F0Y2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NR2Vv
bG9jYXRpb24KKyAqIEB3YXRjaElEOiBBICNnbG9uZwogICoKICAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKICoqLwotV0VCS0lUX0FQSSBnY2hhcioKLXdlYmtpdF9kb21fdGVzdF9leGNlcHRpb25fZ2V0
X25hbWUoV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbiogc2VsZik7CitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fZ2VvbG9jYXRpb25fY2xlYXJfd2F0Y2goV2ViS2l0RE9NR2VvbG9jYXRpb24qIHNl
bGYsIGdsb25nIHdhdGNoSUQpOwogCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVzdEV4Y2VwdGlvbl9o
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NR2VvbG9jYXRpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01HZW9sb2NhdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZjVlNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NR2VvbG9jYXRpb25Qcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGVf
aAorI2RlZmluZSBXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9HZW9sb2NhdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01HZW9sb2Nh
dGlvbi5oPgorI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKworbmFtZXNwYWNlIFdlYktpdCB7CitX
ZWJLaXRET01HZW9sb2NhdGlvbiogd3JhcEdlb2xvY2F0aW9uKFdlYkNvcmU6Okdlb2xvY2F0aW9u
Kik7CitXZWJLaXRET01HZW9sb2NhdGlvbioga2l0KFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CitX
ZWJDb3JlOjpHZW9sb2NhdGlvbiogY29yZShXZWJLaXRET01HZW9sb2NhdGlvbiopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoR0VPTE9DQVRJT04pICovCisKKyNl
bmRpZiAvKiBXZWJLaXRET01HZW9sb2NhdGlvblByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY3ZWE5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5jcHAKQEAgLTAsMCArMSw5ODggQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBv
cnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0
RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01E
T01Ub2tlbkxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRVbnN0YWJs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
SFRNTF9BTkNIT1JfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikp
KTsKK30KKworV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiB3cmFw
SFRNTEFuY2hvckVsZW1lbnQoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
QU5DSE9SX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0FOQ0hPUl9F
TEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxB
bmNob3JFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEFuY2hv
ckVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihH
X09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1
cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktp
dERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVu
dCA9IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBp
ZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30K
KworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQsIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVO
VCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAg
UFJPUF9DSEFSU0VULAorICAgIFBST1BfQ09PUkRTLAorICAgIFBST1BfRE9XTkxPQUQsCisgICAg
UFJPUF9IUkVGTEFORywKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9QSU5HLAorICAgIFBST1Bf
UkVMLAorICAgIFBST1BfUkVWLAorICAgIFBST1BfU0hBUEUsCisgICAgUFJPUF9UQVJHRVQsCisg
ICAgUFJPUF9UWVBFLAorICAgIFBST1BfVEVYVCwKKyAgICBQUk9QX1JFTF9MSVNULAorICAgIFBS
T1BfSFJFRiwKKyAgICBQUk9QX09SSUdJTiwKKyAgICBQUk9QX1BST1RPQ09MLAorICAgIFBST1Bf
VVNFUk5BTUUsCisgICAgUFJPUF9QQVNTV09SRCwKKyAgICBQUk9QX0hPU1QsCisgICAgUFJPUF9I
T1NUTkFNRSwKKyAgICBQUk9QX1BPUlQsCisgICAgUFJPUF9QQVRITkFNRSwKKyAgICBQUk9QX1NF
QVJDSCwKKyAgICBQUk9QX0hBU0gsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfQU5DSE9SX0VM
RU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9DSEFSU0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2No
YXJzZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DT09SRFM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9zZXRfY29vcmRzKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9XTkxPQUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9zZXRfZG93bmxvYWQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IUkVGTEFORzoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ocmVmbGFuZyhzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfbmFtZShzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1BJTkc6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGluZyhz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1JFTDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9y
ZWwoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9SRVY6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9z
ZXRfcmV2KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU0hBUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9zZXRfc2hhcGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9zZXRfdGFyZ2V0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90eXBlX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3RleHQoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IUkVGOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hyZWYoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
Uk9UT0NPTDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wcm90
b2NvbChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1VTRVJOQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfc2V0X3VzZXJuYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFTU1dPUkQ6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGFzc3dvcmQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IT1NUOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hvc3Qoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IT1NUTkFNRToK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ob3N0bmFtZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BPUlQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcG9y
dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1BBVEhOQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfc2V0X3BhdGhuYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VBUkNIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfc2V0X3NlYXJjaChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hBU0g6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaGFzaChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9BTkNIT1JfRUxFTUVOVChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NIQVJTRVQ6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfY2hhcnNldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DT09SRFM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfY29vcmRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RPV05MT0FEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2Rvd25sb2FkKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUZMQU5HOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hy
ZWZsYW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QSU5H
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfZ2V0X3Bpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfUkVMOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JlbChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9SRVY6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmV2KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NIQVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3NoYXBlKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90YXJnZXQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90eXBl
X2F0dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X2dldF90ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTF9M
SVNUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9nZXRfcmVsX2xpc3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfSFJFRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVmKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX09SSUdJTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9vcmlnaW4oc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPVE9DT0w6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcHJvdG9j
b2woc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFUk5BTUU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfdXNlcm5hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
UEFTU1dPUkQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcGFzc3dvcmQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSE9TVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ob3N0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1ROQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hvc3RuYW1lKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPUlQ6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
cG9ydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVRITkFNRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9wYXRobmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TRUFSQ0g6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9nZXRfc2VhcmNoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0hBU0g6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfaGFzaChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQ0hBUlNFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJjaGFyc2V0IiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpjaGFyc2V0IiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpjaGFyc2V0
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0NPT1JEUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJjb29yZHMiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50
OmNvb3JkcyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1l
bnQ6Y29vcmRzIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RPV05MT0FELAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRvd25sb2FkIiwKKyAgICAgICAgICAgICJIVE1M
QW5jaG9yRWxlbWVudDpkb3dubG9hZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEFuY2hvckVsZW1lbnQ6ZG93bmxvYWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFJFRkxBTkcs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHJlZmxhbmciLAor
ICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OmhyZWZsYW5nIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpocmVmbGFuZyIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
Im5hbWUiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50Om5hbWUiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50Om5hbWUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfUElORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJwaW5nIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpwaW5nIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpwaW5nIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1JFTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJyZWwiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnJlbCIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6cmVsIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1JFViwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJy
ZXYiLAorICAgICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50OnJldiIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6cmV2IiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1NIQVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNo
YXBlIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpzaGFwZSIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6c2hhcGUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVEFSR0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInRhcmdldCIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6dGFyZ2V0IiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDp0YXJnZXQiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDp0eXBlIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDp0eXBlIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1RFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAidGV4dCIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6dGV4dCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6dGV4dCIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9SRUxfTElTVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJyZWwtbGlzdCIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1l
bnQ6cmVsLWxpc3QiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01Ub2tlbkxp
c3QqIEhUTUxBbmNob3JFbGVtZW50OnJlbC1saXN0IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9ET01fVE9LRU5fTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0hSRUYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiaHJlZiIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6aHJl
ZiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6aHJl
ZiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9PUklHSU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAib3JpZ2luIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVu
dDpvcmlnaW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTEFuY2hvckVsZW1l
bnQ6b3JpZ2luIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUFJPVE9DT0wsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAicHJvdG9jb2wiLAorICAgICAgICAgICAgIkhUTUxB
bmNob3JFbGVtZW50OnByb3RvY29sIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MQW5jaG9yRWxlbWVudDpwcm90b2NvbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9VU0VSTkFNRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ1c2VybmFtZSIsCisg
ICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6dXNlcm5hbWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxBbmNob3JFbGVtZW50OnVzZXJuYW1lIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1BBU1NXT1JELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInBhc3N3b3JkIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpwYXNzd29yZCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6cGFzc3dv
cmQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSE9TVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJob3N0IiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpo
b3N0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpo
b3N0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0hPU1ROQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImhvc3RuYW1lIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9y
RWxlbWVudDpob3N0bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFu
Y2hvckVsZW1lbnQ6aG9zdG5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUE9SVCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwb3J0IiwKKyAgICAgICAgICAgICJI
VE1MQW5jaG9yRWxlbWVudDpwb3J0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MQW5jaG9yRWxlbWVudDpwb3J0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBVEhOQU1FLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBhdGhuYW1lIiwKKyAgICAg
ICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpwYXRobmFtZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTEFuY2hvckVsZW1lbnQ6cGF0aG5hbWUiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfU0VBUkNILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNl
YXJjaCIsCisgICAgICAgICAgICAiSFRNTEFuY2hvckVsZW1lbnQ6c2VhcmNoIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpzZWFyY2giLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfSEFTSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJoYXNoIiwKKyAgICAgICAgICAgICJIVE1MQW5jaG9yRWxlbWVudDpoYXNoIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQW5jaG9yRWxlbWVudDpoYXNoIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9pbml0KFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfY2hhcnNl
dChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhcnNldEF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfY2hhcnNl
dChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyc2V0QXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X2dldF9jb29yZHMoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvb3Jkc0F0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9zZXRfY29vcmRzKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5j
aG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNv
b3Jkc0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9nZXRfZG93bmxvYWQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNl
bGYpCit7CisjaWYgRU5BQkxFKERPV05MT0FEX0FUVFJJQlVURSkKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZG93bmxvYWRBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkRvd25sb2FkIEF0dHJpYnV0ZSIpCisgICAgcmV0dXJuIDA7Cisj
ZW5kaWYgLyogRU5BQkxFKERPV05MT0FEX0FUVFJJQlVURSkgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2Rvd25sb2FkKFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5BQkxFKERPV05MT0FE
X0FUVFJJQlVURSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNo
b3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZG93
bmxvYWRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkRvd25sb2FkIEF0dHJpYnV0ZSIpCisjZW5kaWYgLyogRU5BQkxFKERPV05MT0FE
X0FUVFJJQlVURSkgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfaHJlZmxhbmcoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhyZWZsYW5nQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X3NldF9ocmVmbGFuZyhXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpocmVmbGFuZ0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BpbmcoV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
TkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnBpbmdBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3BpbmcoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGluZ0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmVsKFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWxBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JlbChXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWxBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JldihXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FO
Q0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmV2QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9yZXYoV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6cmV2QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9zaGFwZShXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FO
Q0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6c2hhcGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3NoYXBlKFdlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNoYXBlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnRhcmdldEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdGFyZ2V0KFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRhcmdldEF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdHlw
ZV9hdHRyKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90eXBl
X2F0dHIoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfdGV4dChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X3NldF90ZXh0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
VGV4dChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK1dlYktpdERPTURPTVRva2VuTGlzdCogd2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9yZWxfbGlzdChXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NVG9rZW5MaXN0PiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVsTGlzdCgpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZkF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9z
ZXRfaHJlZihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpocmVmQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9vcmlnaW4oV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+b3JpZ2luKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfZ2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnByb3Rv
Y29sKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X3NldF9wcm90b2NvbChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNI
T1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldFByb3RvY29sKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdXNlcm5hbWUoV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNI
T1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+dXNlcm5hbWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3VzZXJuYW1lKFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VXNlcm5hbWUoY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wYXNz
d29yZChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wYXNzd29yZCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
cGFzc3dvcmQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQ
YXNzd29yZChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfZ2V0X2hvc3QoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aG9zdCgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9zZXRfaG9zdChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldEhvc3QoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9ob3N0bmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5ob3N0bmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaG9zdG5hbWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRIb3N0bmFtZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BvcnQoV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9B
TkNIT1JfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+cG9ydCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcG9ydChXZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFBvcnQoY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wYXRobmFtZShXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wYXRobmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGF0aG5hbWUo
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQU5DSE9SX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQYXRobmFtZShj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfZ2V0X3NlYXJjaChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zZWFyY2goKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfc2V0X3NlYXJjaChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFu
Y2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldFNlYXJjaChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfZ2V0X2hhc2goV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aGFz
aCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9zZXRfaGFzaChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEhhc2goY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5ZDk2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEFuY2hvckVsZW1lbnQuaApAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRv
bS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BTkNI
T1JfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0FOQ0hPUl9FTEVNRU5ULCBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9BTkNIT1JfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BTkNIT1Jf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0FOQ0hPUl9FTEVNRU5UKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FO
Q0hPUl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX0FOQ0hPUl9FTEVNRU5ULCBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudENs
YXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCB7CisgICAgV2ViS2l0
RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5j
aG9yX2VsZW1lbnRfZ2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9jaGFyc2V0KFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9jaGFyc2V0KFdlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfY29vcmRzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfY29vcmRzKFdl
YktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2Nvb3JkczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2Nvb3JkcyhXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWZsYW5nOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
aHJlZmxhbmcoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZmxhbmc6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9ocmVm
bGFuZyhXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X25hbWU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9u
YW1lKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmVsOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxl
bWVudF9nZXRfcmVsKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JlbDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3JlbChX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3JldjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
Z2V0X3JldihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9yZXY6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9yZXYoV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9zaGFwZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X3NoYXBlKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3NoYXBlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfc2hhcGUoV2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90YXJnZXQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X2dldF90YXJnZXQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdGFyZ2V0OgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfdGFy
Z2V0KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfdHlwZV9hdHRy
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3R5cGVfYXR0
cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfZ2V0X3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90ZXh0KFdlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0
X2hyZWY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X2dldF9ocmVmKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hyZWY6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X3NldF9ocmVmKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
cHJvdG9jb2w6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2FuY2hvcl9lbGVtZW50X2dldF9wcm90b2NvbChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9w
cm90b2NvbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfc2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNo
b3JfZWxlbWVudF9nZXRfaG9zdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hvc3QoV2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9zZXRfaG9zdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hvc3QoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hv
cl9lbGVtZW50X2dldF9ob3N0bmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hvc3RuYW1lKFdlYktpdERPTUhU
TUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X2hvc3RuYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaG9zdG5hbWUoV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9wb3J0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcG9ydChXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2FuY2hvcl9lbGVtZW50X3NldF9wb3J0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcG9ydChXZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3BhdGhuYW1lOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcGF0aG5h
bWUoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGF0aG5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wYXRobmFtZShX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3NlYXJjaDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfZ2V0X3NlYXJjaChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9zZWFyY2g6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9z
ZWFyY2goV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9oYXNoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9nZXRfaGFzaChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9oYXNoOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
aGFzaChXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjE3MTU5NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTEFuY2hvckVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEFu
Y2hvckVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MQW5jaG9y
RWxlbWVudCogd3JhcEhUTUxBbmNob3JFbGVtZW50KFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
Kik7CitXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50Kik7CitXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudCogY29yZShXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50VW5zdGFibGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2U5ZTkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSwxNTAg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9kb3du
bG9hZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9kb3dubG9hZChX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2FuY2hvcl9lbGVtZW50X3NldF9kb3dubG9hZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2Vs
ZW1lbnRfc2V0X2Rvd25sb2FkKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfcGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9waW5n
KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3Bpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVt
ZW50X3NldF9waW5nKFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRf
dGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3RleHQoV2ViS2l0RE9NSFRN
TEFuY2hvckVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9yZWxfbGlzdDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NRE9NVG9rZW5MaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTVRva2VuTGlzdCoKK3dlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9nZXRfcmVsX2xpc3QoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfb3JpZ2lu
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X29yaWdpbihXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X2dldF91c2VybmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5j
aG9yRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9l
bGVtZW50X2dldF91c2VybmFtZShXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF91c2VybmFtZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3VzZXJuYW1lKFdlYktpdERPTUhUTUxBbmNo
b3JFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcGFzc3dvcmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9nZXRfcGFzc3dvcmQoV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcGFz
c3dvcmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wYXNzd29yZChXZWJLaXRE
T01IVE1MQW5jaG9yRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Zjk4OTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDUyOCBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdP
YmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBvYmop
Cit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxFTUVOVChraXQoc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEFwcGxldEVs
ZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
cmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTUhUTUxBcHBsZXRFbGVtZW50KiB3cmFwSFRNTEFwcGxldEVsZW1lbnQoV2ViQ29yZTo6SFRN
TEFwcGxldEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQVBQTEVUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9IVE1MX0FQUExFVF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShl
dmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBX
ZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxBcHBsZXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVu
dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUs
IGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2FkZF9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6
OkhUTUxBcHBsZXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TEFwcGxldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQor
eworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFj
ZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50
X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0RE9NSFRNTEFwcGxldEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudCwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX0FMVCwKKyAg
ICBQUk9QX0FSQ0hJVkUsCisgICAgUFJPUF9DT0RFLAorICAgIFBST1BfQ09ERV9CQVNFLAorICAg
IFBST1BfSEVJR0hULAorICAgIFBST1BfSFNQQUNFLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9Q
X09CSkVDVCwKKyAgICBQUk9QX1ZTUEFDRSwKKyAgICBQUk9QX1dJRFRILAorfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmID0gV0VC
S0lUX0RPTV9IVE1MX0FQUExFVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTFQ6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYWx0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVJDSElWRToKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hcmNoaXZlKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09ERToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09E
RV9CQVNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGVf
YmFzZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X3NldF9oZWlnaHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9IU1BBQ0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9zZXRfaHNwYWNlKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09CSkVDVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9vYmplY3Qoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WU1BBQ0U6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfdnNwYWNlKHNlbGYsIGdf
dmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJ
RFRIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3dpZHRoKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX0FQUExFVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FsdChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BUkNISVZFOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FyY2hp
dmUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09ERToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50
X2dldF9jb2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPREVfQkFT
RToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X2dldF9jb2RlX2Jhc2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9IU1BBQ0U6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfaHNwYWNlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfbmFtZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PQkpFQ1Q6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRf
b2JqZWN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZTUEFDRToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X2dldF92c3BhY2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lE
VEg6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRN
TEFwcGxldEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0
bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdO
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAg
ICAgICAgICAgICJIVE1MQXBwbGV0RWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTEFwcGxldEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QUxULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsdCIsCisg
ICAgICAgICAgICAiSFRNTEFwcGxldEVsZW1lbnQ6YWx0IiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MQXBwbGV0RWxlbWVudDphbHQiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVJD
SElWRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhcmNoaXZl
IiwKKyAgICAgICAgICAgICJIVE1MQXBwbGV0RWxlbWVudDphcmNoaXZlIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXBwbGV0RWxlbWVudDphcmNoaXZlIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NPREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiY29kZSIsCisgICAgICAgICAgICAiSFRNTEFwcGxldEVsZW1lbnQ6Y29kZSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFwcGxldEVsZW1lbnQ6Y29kZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9DT0RFX0JBU0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiY29kZS1iYXNlIiwKKyAgICAgICAgICAgICJIVE1MQXBwbGV0RWxlbWVudDpjb2Rl
LWJhc2UiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcHBsZXRFbGVtZW50
OmNvZGUtYmFzZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAgICAgICAgICJIVE1MQXBw
bGV0RWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxB
cHBsZXRFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IU1BBQ0UsCisgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImhzcGFjZSIsCisgICAgICAgICAgICAi
SFRNTEFwcGxldEVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25n
IEhUTUxBcHBsZXRFbGVtZW50OmhzcGFjZSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFY
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxBcHBsZXRFbGVtZW50Om5hbWUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcHBsZXRFbGVtZW50Om5hbWUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfT0JKRUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgIm9iamVjdCIsCisgICAgICAgICAgICAiSFRNTEFwcGxldEVsZW1lbnQ6b2JqZWN0IiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXBwbGV0RWxlbWVudDpvYmplY3Qi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfVlNQQUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygK
KyAgICAgICAgICAgICJ2c3BhY2UiLAorICAgICAgICAgICAgIkhUTUxBcHBsZXRFbGVtZW50OnZz
cGFjZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MQXBwbGV0RWxlbWVudDp2
c3BhY2UiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAg
ICAgICAgIkhUTUxBcHBsZXRFbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MQXBwbGV0RWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVu
dCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxBcHBs
ZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVU
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEFwcGxldEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2FsdChXZWJLaXRET01IVE1M
QXBwbGV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQ
UExFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6YWx0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hbHQoV2ViS2l0RE9NSFRNTEFwcGxldEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6YWx0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hcmNoaXZlKFdlYktpdERPTUhU
TUxBcHBsZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QVBQTEVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjphcmNoaXZlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hcmNoaXZlKFdlYktpdERPTUhU
TUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFyY2hpdmVBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2NvZGUo
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFw
cGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvZGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGUoV2ViS2l0
RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29kZUF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfY29k
ZV9iYXNlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2RlYmFzZUF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRf
Y29kZV9iYXNlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvZGVi
YXNlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhlaWdodEF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FQUExFVF9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQXBwbGV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmhlaWdodEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2Rv
bV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9oc3BhY2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpoc3BhY2VBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfaHNwYWNlKFdl
YktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhU
TUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNl
dEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aHNwYWNlQXR0ciwgdmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9uYW1lKFdl
YktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcHBs
ZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldE5hbWVBdHRyaWJ1dGUoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0
X25hbWUoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxl
bWVudF9nZXRfb2JqZWN0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpvYmplY3RBdHRyKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1l
bnRfc2V0X29iamVjdChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFw
cGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpv
YmplY3RBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9nZXRfdnNwYWNlKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6dnNwYWNlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3ZzcGFjZShXZWJLaXRET01I
VE1MQXBwbGV0RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0FQUExFVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MQXBwbGV0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3Jh
bEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZzcGFjZUF0dHIsIHZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9BUFBMRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1M
QXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDk3MzMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50LmgKQEAgLTAsMCArMSwy
NTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3Ig
Ik9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50X2gKKyNkZWZpbmUg
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfQVBQTEVUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2Rv
bV9odG1sX2FwcGxldF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9BUFBMRVRfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUFBMRVRfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQVBQTEVUX0VMRU1F
TlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfQVBQTEVUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9BUFBMRVRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9BUFBM
RVRfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUFBMRVRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9E
T01fSFRNTF9BUFBMRVRfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUFBMRVRfRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTEFwcGxldEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEFw
cGxldEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnRDbGFzcyB7CisgICAgV2Vi
S2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRf
Z2V0X2FsaWduKFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYWxpZ24o
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hbHQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50
X2dldF9hbHQoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYWx0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYWx0KFdlYktp
dERPTUhUTUxBcHBsZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfYXJjaGl2ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRf
Z2V0X2FyY2hpdmUoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYXJjaGl2ZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2Fy
Y2hpdmUoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9jb2RlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRf
ZWxlbWVudF9nZXRfY29kZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRf
Y29kZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X2NvZGVfYmFz
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXBw
bGV0X2VsZW1lbnRfZ2V0X2NvZGVfYmFzZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9jb2RlX2Jh
c2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FwcGxl
dF9lbGVtZW50X3NldF9jb2RlX2Jhc2UoV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVu
dF9zZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9h
cHBsZXRfZWxlbWVudF9nZXRfaHNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBs
ZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9oc3BhY2UoV2ViS2l0RE9NSFRN
TEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBsZXRf
ZWxlbWVudF9zZXRfaHNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfaHNwYWNlKFdlYktpdERPTUhUTUxBcHBsZXRF
bGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MQXBw
bGV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXBw
bGV0X2VsZW1lbnRfZ2V0X29iamVjdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X29iamVjdChXZWJLaXRET01IVE1M
QXBwbGV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X3NldF9vYmplY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9vYmplY3QoV2ViS2l0RE9NSFRNTEFwcGxldEVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2FwcGxldF9lbGVtZW50X2dldF92c3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFwcGxldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJ
IGdsb25nCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3ZzcGFjZShXZWJLaXRE
T01IVE1MQXBwbGV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fw
cGxldF9lbGVtZW50X3NldF92c3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF92c3BhY2UoV2ViS2l0RE9NSFRNTEFw
cGxldEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfYXBwbGV0X2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxB
cHBsZXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcHBs
ZXRfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFwcGxldEVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEFwcGxldEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50UHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzMxNzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TEFwcGxldEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEFwcGxldEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCogd3JhcEhUTUxBcHBsZXRF
bGVtZW50KFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50Kik7CitXZWJLaXRET01IVE1MQXBwbGV0
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1M
QXBwbGV0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCopOworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MQXJlYUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1
NGJkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5jcHAKQEAgLTAs
MCArMSw3OTQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+Cisj
aW5jbHVkZSAiV2ViS2l0RE9NRE9NVG9rZW5MaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9k
ZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxBcmVhRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxBcmVhRWxlbWVudCogd3Jh
cEhUTUxBcmVhRWxlbWVudChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQVJF
QV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUkVBX0VMRU1FTlQs
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2
ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVF
dmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRF
dmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZh
Y2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJL
aXRET01IVE1MQXJlYUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnQsIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQUxULAorICAgIFBST1BfQ09PUkRTLAorICAgIFBS
T1BfTk9fSFJFRiwKKyAgICBQUk9QX1BJTkcsCisgICAgUFJPUF9SRUwsCisgICAgUFJPUF9TSEFQ
RSwKKyAgICBQUk9QX1RBUkdFVCwKKyAgICBQUk9QX1JFTF9MSVNULAorICAgIFBST1BfSFJFRiwK
KyAgICBQUk9QX09SSUdJTiwKKyAgICBQUk9QX1BST1RPQ09MLAorICAgIFBST1BfVVNFUk5BTUUs
CisgICAgUFJPUF9QQVNTV09SRCwKKyAgICBQUk9QX0hPU1QsCisgICAgUFJPUF9IT1NUTkFNRSwK
KyAgICBQUk9QX1BPUlQsCisgICAgUFJPUF9QQVRITkFNRSwKKyAgICBQUk9QX1NFQVJDSCwKKyAg
ICBQUk9QX0hBU0gsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxB
cmVhRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1FTlQob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTFQ6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2FsdChzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPT1JEUzoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfY29vcmRzKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9f
SFJFRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfbm9faHJlZihz
ZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9QSU5HOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9w
aW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfUkVMOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3Nl
dF9yZWwoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9TSEFQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9zZXRfc2hhcGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfc2V0X3RhcmdldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9hcmVhX2VsZW1lbnRfc2V0X2hyZWYoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcHJvdG9jb2woc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VSTkFNRToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfdXNlcm5hbWUoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
QVNTV09SRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcGFzc3dv
cmQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IT1NUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3Nl
dF9ob3N0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSE9TVE5BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfc2V0X2hvc3RuYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9SVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9zZXRfcG9ydChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVEhOQU1FOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wYXRobmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFQVJDSDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfc2VhcmNoKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEFTSDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfaGFzaChzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0FSRUFfRUxF
TUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X0FMVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9nZXRfYWx0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0NPT1JEUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2FyZWFfZWxlbWVudF9nZXRfY29vcmRzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX05PX0hSRUY6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUs
IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X25vX2hyZWYoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUElORzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGluZyhzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUw6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3JlbChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSEFQRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfc2hhcGUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dl
dF90YXJnZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVMX0xJU1Q6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9nZXRfcmVsX2xpc3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSFJFRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9nZXRfaHJlZihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9PUklHSU46CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X29yaWdpbihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9QUk9UT0NPTDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcHJvdG9jb2woc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFUk5BTUU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3VzZXJu
YW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBU1NXT1JEOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X2dldF9wYXNzd29yZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9I
T1NUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X2dldF9ob3N0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0hPU1ROQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ob3N0bmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9QT1JUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wb3J0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVEhOQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wYXRobmFtZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUFSQ0g6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3Nl
YXJjaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IQVNIOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50
X2dldF9oYXNoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxULAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImFsdCIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50
OmFsdCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50OmFs
dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9DT09SRFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiY29vcmRzIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6
Y29vcmRzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6
Y29vcmRzIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PX0hSRUYsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgIm5vLWhyZWYiLAorICAgICAgICAgICAgIkhUTUxBcmVh
RWxlbWVudDpuby1ocmVmIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxB
cmVhRWxlbWVudDpuby1ocmVmIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BJTkcsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicGluZyIsCisgICAgICAgICAgICAi
SFRNTEFyZWFFbGVtZW50OnBpbmciLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxBcmVhRWxlbWVudDpwaW5nIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFTCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJyZWwiLAorICAgICAgICAgICAgIkhUTUxB
cmVhRWxlbWVudDpyZWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVh
RWxlbWVudDpyZWwiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0hBUEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2hhcGUiLAorICAgICAgICAgICAgIkhUTUxBcmVh
RWxlbWVudDpzaGFwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFF
bGVtZW50OnNoYXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RBUkdFVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0YXJnZXQiLAorICAgICAgICAgICAgIkhUTUxB
cmVhRWxlbWVudDp0YXJnZXQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxB
cmVhRWxlbWVudDp0YXJnZXQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVMX0xJU1QsCisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicmVsLWxpc3QiLAorICAgICAgICAg
ICAgIkhUTUxBcmVhRWxlbWVudDpyZWwtbGlzdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTURPTVRva2VuTGlzdCogSFRNTEFyZWFFbGVtZW50OnJlbC1saXN0IiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hSRUYsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHJlZiIsCisgICAgICAgICAgICAiSFRNTEFy
ZWFFbGVtZW50OmhyZWYiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVh
RWxlbWVudDpocmVmIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09SSUdJTiwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJvcmlnaW4iLAorICAgICAgICAgICAgIkhUTUxB
cmVhRWxlbWVudDpvcmlnaW4iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTEFy
ZWFFbGVtZW50Om9yaWdpbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BST1RPQ09MLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInByb3RvY29sIiwKKyAgICAgICAgICAg
ICJIVE1MQXJlYUVsZW1lbnQ6cHJvdG9jb2wiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxBcmVhRWxlbWVudDpwcm90b2NvbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9VU0VSTkFN
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ1c2VybmFtZSIs
CisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50OnVzZXJuYW1lIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6dXNlcm5hbWUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUEFTU1dPUkQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAicGFzc3dvcmQiLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVudDpwYXNzd29yZCIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEFyZWFFbGVtZW50OnBhc3N3b3JkIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0hPU1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiaG9zdCIsCisgICAgICAgICAgICAiSFRNTEFyZWFFbGVtZW50Omhvc3QiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDpob3N0IiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0hPU1ROQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgImhvc3RuYW1lIiwKKyAgICAgICAgICAgICJIVE1MQXJlYUVsZW1lbnQ6aG9z
dG5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxBcmVhRWxlbWVudDpo
b3N0bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QT1JULAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgInBvcnQiLAorICAgICAgICAgICAgIkhUTUxBcmVhRWxlbWVu
dDpwb3J0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJlYUVsZW1lbnQ6
cG9ydCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVRITkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJwYXRobmFtZSIsCisgICAgICAgICAgICAiSFRNTEFyZWFF
bGVtZW50OnBhdGhuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQXJl
YUVsZW1lbnQ6cGF0aG5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VBUkNILAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNlYXJjaCIsCisgICAgICAgICAgICAi
SFRNTEFyZWFFbGVtZW50OnNlYXJjaCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEFyZWFFbGVtZW50OnNlYXJjaCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IQVNILAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhhc2giLAorICAgICAgICAgICAg
IkhUTUxBcmVhRWxlbWVudDpoYXNoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MQXJlYUVsZW1lbnQ6aGFzaCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfZ2V0X2FsdChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWx0QXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRf
YWx0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsdEF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2Nv
b3JkcyhXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxB
cmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29vcmRzQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfY29vcmRzKFdlYktp
dERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvb3Jkc0F0dHIsIGNvbnZlcnRlZFZhbHVl
KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfbm9faHJl
ZihXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1M
QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6Om5vaHJlZkF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfbm9faHJlZihXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6bm9ocmVmQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcGluZyhXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGluZ0F0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfc2V0X3BpbmcoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFy
ZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGlu
Z0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfZ2V0X3JlbChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVsQXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcmVs
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlbEF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3NoYXBl
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpzaGFwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3NoYXBlKFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNoYXBlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktpdERP
TUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjp0YXJnZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6dGFyZ2V0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJL
aXRET01ET01Ub2tlbkxpc3QqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3JlbF9s
aXN0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFy
ZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpET01Ub2tlbkxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yZWxMaXN0
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJF
QV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZkF0dHIp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfc2V0X2hyZWYoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aHJlZkF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2Vs
ZW1lbnRfZ2V0X29yaWdpbihXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5vcmlnaW4oKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
Z2V0X3Byb3RvY29sKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnByb3RvY29sKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRf
cHJvdG9jb2woV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRQcm90b2Nv
bChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X2dldF91c2VybmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT51c2VybmFtZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
c2V0X3VzZXJuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VXNl
cm5hbWUoY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9nZXRfcGFzc3dvcmQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cGFzc3dvcmQoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X3NldF9wYXNzd29yZChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJl
YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dFBhc3N3b3JkKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9h
cmVhX2VsZW1lbnRfZ2V0X2hvc3QoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aG9zdCgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
c2V0X2hvc3QoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRIb3N0KGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
Z2V0X2hvc3RuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhvc3RuYW1lKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRf
aG9zdG5hbWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRIb3N0bmFt
ZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X2dldF9wb3J0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnBvcnQoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wb3J0
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UG9ydChjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wYXRo
bmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxB
cmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wYXRobmFtZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3BhdGhuYW1l
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0UGF0aG5hbWUoY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRf
c2VhcmNoKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnNlYXJjaCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3NlYXJjaChX
ZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFNlYXJjaChjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9oYXNo
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmhhc2goKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9oYXNoKFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0SGFzaChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTU5MzYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5oCkBAIC0wLDAgKzEsMjI1IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
QXJlYUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQVJFQV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVOVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9BUkVBX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVJFQV9FTEVN
RU5ULCBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX0FSRUFfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BUkVBX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfQVJFQV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0FSRUFfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9BUkVBX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVJF
QV9FTEVNRU5ULCBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRf
aW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxBcmVhRWxlbWVudENsYXNzIHsK
KyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfYWx0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dl
dF9hbHQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9hbHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2FsdChXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2FyZWFfZWxlbWVudF9nZXRfY29vcmRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9jb29yZHMoV2ViS2l0RE9N
SFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9l
bGVtZW50X3NldF9jb29yZHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X2Nvb3JkcyhXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9nZXRfbm9faHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ub19ocmVmKFdlYktpdERPTUhU
TUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxl
bWVudF9zZXRfbm9faHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfbm9faHJlZihXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X2dldF9zaGFwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfc2hhcGUoV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9z
aGFwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9zZXRfc2hhcGUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2FyZWFfZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfdGFyZ2V0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3Nl
dF90YXJnZXQoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hyZWY6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfZ2V0X2hyZWYoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ocmVmOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9ocmVmKFdlYktpdERP
TUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wcm90b2NvbDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcHJvdG9j
b2woV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X2dldF9ob3N0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxB
cmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9ob3N0KFdlYktpdERPTUhUTUxB
cmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9nZXRfaG9zdG5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hvc3RuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcG9y
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FyZWFf
ZWxlbWVudF9nZXRfcG9ydChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3BhdGhuYW1lOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9w
YXRobmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3NlYXJjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfc2VhcmNoKFdlYktp
dERPTUhUTUxBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9nZXRfaGFzaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfaGFzaChXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MQXJlYUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWM4M2M2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxBcmVhRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
QXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiB3
cmFwSFRNTEFyZWFFbGVtZW50KFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudCopOworV2ViS2l0RE9N
SFRNTEFyZWFFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Kik7CitXZWJDb3Jl
OjpIVE1MQXJlYUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Kik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxBcmVhRWxlbWVudFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXJlYUVsZW1lbnRVbnN0YWJsZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MQXJlYUVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBjMTRhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBcmVhRWxlbWVu
dFVuc3RhYmxlLmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50VW5zdGFibGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MQXJlYUVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
LXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X2dldF9waW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9n
ZXRfcGluZyhXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Bpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1l
bnRfc2V0X3BpbmcoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3JlbDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3JlbChXZWJLaXRET01IVE1MQXJl
YUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
c2V0X3JlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfcmVsKFdlYktpdERPTUhUTUxB
cmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9yZWxfbGlzdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dl
YktpdERPTURPTVRva2VuTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01ET01Ub2tlbkxpc3QqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVt
ZW50X2dldF9yZWxfbGlzdChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X29yaWdpbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X29yaWdpbihXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Byb3Rv
Y29sOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wcm90b2NvbChXZWJLaXRET01IVE1M
QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfdXNlcm5hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
YXJlYV9lbGVtZW50X2dldF91c2VybmFtZShXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3VzZXJuYW1lOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF91c2VybmFtZShXZWJLaXRET01IVE1MQXJlYUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9nZXRfcGFzc3dvcmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9l
bGVtZW50X2dldF9wYXNzd29yZChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3Bhc3N3b3JkOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfYXJlYV9lbGVtZW50X3NldF9wYXNzd29yZChXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9zZXRfaG9zdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfaG9zdChX
ZWJLaXRET01IVE1MQXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfaG9zdG5hbWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfc2V0X2hvc3RuYW1lKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJl
YV9lbGVtZW50X3NldF9wb3J0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVu
dAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wb3J0KFdl
YktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9wYXRobmFtZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2FyZWFfZWxlbWVudF9zZXRfcGF0aG5hbWUoV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfc2V0X3NlYXJjaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQXJlYUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfc2VhcmNo
KFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X3NldF9oYXNoOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X3NldF9oYXNoKFdlYktpdERPTUhUTUxBcmVhRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEFyZWFFbGVt
ZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZjM1NTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudC5j
cHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50Lmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEF1ZGlvRWxl
bWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQVVESU9fRUxFTUVOVChr
aXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRN
TEF1ZGlvRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50KiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEF1ZGlvRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQqIHdyYXBIVE1MQXVkaW9FbGVtZW50KFdlYkNvcmU6
OkhUTUxBdWRpb0VsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQVVESU9fRUxFTUVOVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0hUTUxfQVVESU9fRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9hdWRpb19l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAg
IGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRN
TEF1ZGlvRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBdWRp
b0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNv
cmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24u
bmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGVy
cm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9hdWRpb19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpIVE1MQXVkaW9FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTEF1ZGlvRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVu
dExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxl
ciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVO
VVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBV
TlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8p
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxlbWVudF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVT
RURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAg
IGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9hdWRpb19lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfYXVkaW9fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92
ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9hdWRpb19lbGVtZW50X3JlbW92ZV9l
dmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRN
TEF1ZGlvRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnQsIFdFQktJVF9ET01f
VFlQRV9IVE1MX01FRElBX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2F1ZGlvX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRE
T01IVE1MQXVkaW9FbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdENsYXNzKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2F1ZGlv
X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50KiByZXF1ZXN0KQoreworICAg
IFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXVkaW9F
bGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kYjRlNjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQXVkaW9F
bGVtZW50LmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTEF1ZGlvRWxlbWVudF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQVVESU9fRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfYXVkaW9fZWxl
bWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQVVESU9fRUxFTUVOVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9BVURJT19FTEVNRU5ULCBXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50KSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0FVRElPX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVVE
SU9fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfQVVESU9fRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9BVURJT19FTEVNRU5UKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0FVRElPX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQVVE
SU9fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9BVURJT19FTEVNRU5UX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01f
VFlQRV9IVE1MX0FVRElPX0VMRU1FTlQsIFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRDbGFzcykp
CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxBdWRpb0VsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9h
dWRpb19lbGVtZW50X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEF1
ZGlvRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDI1ZWFjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEF1ZGlv
RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MQXVkaW9FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxBdWRpb0VsZW1lbnQuaD4KKyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQg
eworV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudCogd3JhcEhUTUxBdWRpb0VsZW1lbnQoV2ViQ29y
ZTo6SFRNTEF1ZGlvRWxlbWVudCopOworV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQqIGNv
cmUoV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQXVk
aW9FbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MQlJFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jOTdmNTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQlJFbGVtZW50LmNwcApA
QCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCUkVsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQlJFbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NSFRNTEJSRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQq
IG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0JSX0VMRU1FTlQoa2l0KHN0YXRp
Y19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxCUkVsZW1l
bnQqIGNvcmUoV2ViS2l0RE9NSFRNTEJSRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
cmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MQlJF
bGVtZW50KiB3cmFwSFRNTEJSRWxlbWVudChXZWJDb3JlOjpIVE1MQlJFbGVtZW50KiBjb3JlT2Jq
ZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9I
VE1MX0JSX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0JSX0VMRU1F
TlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVu
dF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01F
dmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3Jl
RXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEJSRWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAg
ICBXZWJDb3JlOjpIVE1MQlJFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTEJSRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVu
dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29u
c3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVy
ZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQlJFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTEJSRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRf
dGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZh
Y2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9i
cl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MQlJFbGVtZW50LCB3
ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwg
R19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9DTEVBUiwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X3Nl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxCUkVsZW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfQlJfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NMRUFSOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfYnJfZWxlbWVudF9zZXRfY2xlYXIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYnJfZWxl
bWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MQlJFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0JSX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DTEVBUjoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfZ2V0X2NsZWFy
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9icl9l
bGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEJSRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9odG1sX2JyX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0NMRUFSLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImNsZWFyIiwKKyAgICAgICAgICAgICJIVE1MQlJFbGVtZW50OmNsZWFyIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQlJFbGVtZW50OmNsZWFyIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9icl9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEJS
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfY2xlYXIoV2ViS2l0RE9NSFRNTEJS
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JSX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCUkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNs
ZWFyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2JyX2VsZW1lbnRfc2V0X2NsZWFyKFdlYktpdERPTUhUTUxCUkVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlJfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJS
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNsZWFy
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmUyMmY3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCUkVsZW1lbnQuaApA
QCAtMCwwICsxLDcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MQlJFbGVtZW50X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NSFRNTEJSRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CUl9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21f
aHRtbF9icl9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CUl9F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX0JSX0VMRU1FTlQsIFdlYktpdERPTUhUTUxCUkVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQlJfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CUl9F
TEVNRU5ULCBXZWJLaXRET01IVE1MQlJFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9CUl9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0JSX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfQlJfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CUl9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0JSX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlJfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTEJSRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MQlJF
bGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTUhUTUxCUkVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfY2xlYXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEJSRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfY2xlYXIoV2ViS2l0RE9NSFRNTEJS
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfc2V0
X2NsZWFyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCUkVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2JyX2Vs
ZW1lbnRfc2V0X2NsZWFyKFdlYktpdERPTUhUTUxCUkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MQlJFbGVt
ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJSRWxlbWVudFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEJSRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44MDk4ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQlJFbGVtZW50UHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTEJSRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
QlJFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCUkVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEJSRWxlbWVudC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxCUkVsZW1lbnQqIHdyYXBIVE1MQlJFbGVtZW50KFdl
YkNvcmU6OkhUTUxCUkVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxCUkVsZW1lbnQqIGtpdChXZWJD
b3JlOjpIVE1MQlJFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MQlJFbGVtZW50KiBjb3JlKFdlYktp
dERPTUhUTUxCUkVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTEJSRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
QmFzZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOWQzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxCYXNlRWxlbWVudC5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
QmFzZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MQmFzZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIGtp
dChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX0JBU0VfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikp
KTsKK30KKworV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxCYXNl
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxCYXNlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxCYXNlRWxlbWVudCogd3JhcEhUTUxCYXNl
RWxlbWVudChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNT
RVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQkFTRV9FTEVNRU5U
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9CQVNFX0VMRU1FTlQsICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVu
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdl
YktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygq
Y29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRp
b24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkhUTUxCYXNlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxCYXNlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVt
ZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0
dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7Cisg
ICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9k
aXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9odG1sX2Jhc2VfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92
ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1M
QmFzZUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZF
TlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfSFJFRiwKKyAgICBQUk9QX1RBUkdFVCwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RP
TV9IVE1MX0JBU0VfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1l
bnRfc2V0X2hyZWYoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9iYXNl
X2VsZW1lbnRfc2V0X3RhcmdldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX0JBU0VfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X2hyZWYoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF90
YXJnZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X2Jhc2VfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxCYXNlRWxlbWVudENsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IUkVGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImhyZWYiLAorICAgICAgICAgICAgIkhUTUxCYXNlRWxlbWVudDpo
cmVmIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQmFzZUVsZW1lbnQ6aHJl
ZiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAidGFyZ2V0IiwKKyAgICAgICAgICAgICJIVE1MQmFzZUVsZW1lbnQ6
dGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQmFzZUVsZW1lbnQ6
dGFyZ2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRf
aW5pdChXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9n
ZXRfaHJlZihXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9CQVNFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxCYXNlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ocmVmKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9zZXRfaHJlZihXZWJL
aXRET01IVE1MQmFzZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfQkFTRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEhyZWYoY29udmVydGVkVmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfdGFyZ2V0KFdl
YktpdERPTUhUTUxCYXNlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0JBU0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJhc2VFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjp0YXJnZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRN
TEJhc2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0JBU0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGFyZ2V0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1l
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI2ZDA2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1lbnQuaApAQCAtMCwwICsxLDkwIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
QmFzZUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfQkFTRV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1l
bnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0JBU0VfRUxFTUVOVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9CQVNFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxCYXNlRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9CQVNFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQkFTRV9FTEVN
RU5ULCBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX0JBU0VfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CQVNFX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfQkFTRV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JBU0VfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CQVNFX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQkFT
RV9FTEVNRU5ULCBXZWJLaXRET01IVE1MQmFzZUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTEJhc2VFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRf
aW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxCYXNlRWxlbWVudENsYXNzIHsK
KyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfaHJlZjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9n
ZXRfaHJlZihXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9iYXNlX2VsZW1lbnRfc2V0X2hyZWY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEJhc2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfc2V0X2hyZWYoV2ViS2l0RE9NSFRN
TEJhc2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9iYXNlX2VsZW1lbnRfZ2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MQmFzZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Jhc2VfZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktp
dERPTUhUTUxCYXNlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Jh
c2VfZWxlbWVudF9zZXRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCYXNlRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRNTEJhc2VFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYg
LyogV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJh
c2VFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQmFzZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiNGQ4NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEJhc2VFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxCYXNlRWxlbWVudFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MQmFzZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NSFRNTEJhc2VFbGVtZW50KiB3cmFwSFRNTEJhc2VFbGVtZW50KFdlYkNvcmU6OkhUTUxCYXNl
RWxlbWVudCopOworV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEJh
c2VFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRN
TEJhc2VFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxCYXNlRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9k
eUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9keUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjBmYjJlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxC
b2R5RWxlbWVudC5jcHAKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQm9k
eUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
Qm9keUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGtpdChX
ZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9I
VE1MX0JPRFlfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsK
K30KKworV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxCb2R5RWxl
bWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxCb2R5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxCb2R5RWxlbWVudCogd3JhcEhUTUxCb2R5RWxl
bWVudChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9CT0RZX0VMRU1FTlQsICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2Rpc3BhdGNoX2V2
ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktp
dDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2FkZF9ldmVudF9s
aXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNv
cmU6OkhUTUxCb2R5RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxCb2R5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50
X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25z
dCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJl
KQoreworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpy
ZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9kaXNw
YXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9o
dG1sX2JvZHlfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9l
dmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MQm9k
eUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9I
VE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRf
VEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfQV9MSU5LLAorICAgIFBST1BfQkFDS0dST1VORCwKKyAgICBQUk9QX0JH
X0NPTE9SLAorICAgIFBST1BfTElOSywKKyAgICBQUk9QX1RFWFQsCisgICAgUFJPUF9WX0xJTkss
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BX0xJTks6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2FfbGluayhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JBQ0tHUk9VTkQ6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2JhY2tncm91bmQoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9C
R19DT0xPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYmdfY29s
b3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MSU5LOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3Nl
dF9saW5rKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfVEVYVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVu
dF9zZXRfdGV4dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1ZfTElOSzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2JvZHlf
ZWxlbWVudF9zZXRfdl9saW5rKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNl
bGYgPSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQV9MSU5LOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9hX2xpbmso
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQkFDS0dST1VORDoKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVu
dF9nZXRfYmFja2dyb3VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9C
R19DT0xPUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX2JvZHlfZWxlbWVudF9nZXRfYmdfY29sb3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfTElOSzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfbGluayhzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF90ZXh0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1ZfTElOSzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfdl9saW5rKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRf
Y2xhc3NfaW5pdChXZWJLaXRET01IVE1MQm9keUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRt
bF9ib2R5X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfQV9MSU5LLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImEtbGluayIsCisgICAgICAgICAgICAiSFRNTEJvZHlFbGVtZW50OmEtbGluayIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEJvZHlFbGVtZW50OmEtbGluayIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9CQUNLR1JPVU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImJhY2tncm91bmQiLAorICAgICAgICAgICAgIkhUTUxCb2R5RWxlbWVu
dDpiYWNrZ3JvdW5kIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQm9keUVs
ZW1lbnQ6YmFja2dyb3VuZCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CR19DT0xPUiwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJiZy1jb2xvciIsCisgICAgICAgICAg
ICAiSFRNTEJvZHlFbGVtZW50OmJnLWNvbG9yIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MQm9keUVsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTElOSywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsaW5rIiwKKyAgICAg
ICAgICAgICJIVE1MQm9keUVsZW1lbnQ6bGluayIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTEJvZHlFbGVtZW50OmxpbmsiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEVYVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0ZXh0IiwKKyAgICAgICAg
ICAgICJIVE1MQm9keUVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogSFRNTEJvZHlFbGVtZW50OnRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVl9MSU5LLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInYtbGluayIsCisgICAgICAg
ICAgICAiSFRNTEJvZHlFbGVtZW50OnYtbGluayIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTEJvZHlFbGVtZW50OnYtbGluayIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfYm9keV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiByZXF1
ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2FfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpbmtB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9k
eV9lbGVtZW50X3NldF9hX2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TEJvZHlFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
YWxpbmtBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
Ym9keV9lbGVtZW50X2dldF9iYWNrZ3JvdW5kKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpiYWNrZ3JvdW5k
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Jv
ZHlfZWxlbWVudF9zZXRfYmFja2dyb3VuZChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpiYWNrZ3JvdW5kQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTEJvZHlFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJn
Y29sb3JBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfYm9keV9lbGVtZW50X3NldF9iZ19jb2xvcihXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9E
WV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpiZ2NvbG9yQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bGlua0F0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9ib2R5
X2VsZW1lbnRfc2V0X2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEJv
ZHlFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bGlu
a0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9ib2R5
X2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRleHRBdHRyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF90
ZXh0KFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnRleHRBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF92
X2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
Qm9keUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZsaW5rQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfdl9saW5rKFdlYktp
dERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnZsaW5rQXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVudC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9k
eUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUwYzYyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9keUVsZW1lbnQuaApAQCAtMCwwICsxLDE2MiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
RE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25s
eSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2Vu
ZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTEJvZHlFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9IVE1MX0JPRFlfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfYm9k
eV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CT0RZX0VMRU1F
TlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfQk9EWV9FTEVNRU5ULCBXZWJLaXRET01IVE1MQm9keUVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JP
RFlfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfSFRNTF9CT0RZX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQk9EWV9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0JPRFlfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9CT0RZX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9I
VE1MX0JPRFlfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50Q2xhc3MpKQorCitzdHJ1
Y3QgX1dlYktpdERPTUhUTUxCb2R5RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQg
cGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MQm9keUVsZW1lbnRD
bGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2FfbGlu
azoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2JvZHlf
ZWxlbWVudF9nZXRfYV9saW5rKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfYV9saW5rOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9hX2xp
bmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2JhY2tncm91bmQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1l
bnRfZ2V0X2JhY2tncm91bmQoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9iYWNrZ3JvdW5kOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxCb2R5RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9i
YWNrZ3JvdW5kKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF9iZ19jb2xv
cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2JvZHlf
ZWxlbWVudF9nZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9iZ19jb2xvcjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRf
YmdfY29sb3IoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2xpbms6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1l
bnRfZ2V0X2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9saW5rOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxCb2R5RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9saW5rKFdlYktpdERP
TUhUTUxCb2R5RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF90ZXh0OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxCb2R5RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF90ZXh0KFdlYktp
dERPTUhUTUxCb2R5RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Jv
ZHlfZWxlbWVudF9zZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQm9keUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfdGV4dChXZWJLaXRET01IVE1MQm9keUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Jv
ZHlfZWxlbWVudF9nZXRfdl9saW5rOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCb2R5RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X2dldF92X2xpbmsoV2ViS2l0RE9NSFRNTEJvZHlF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3Nl
dF92X2xpbms6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9i
b2R5X2VsZW1lbnRfc2V0X3ZfbGluayhXZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MQm9keUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9keUVsZW1lbnRQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxCb2R5RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44ZGQ1NzRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQm9k
eUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MQm9keUVsZW1lbnRQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxCb2R5RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
Qm9keUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MQm9keUVs
ZW1lbnQqIHdyYXBIVE1MQm9keUVsZW1lbnQoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50Kik7CitX
ZWJLaXRET01IVE1MQm9keUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxCb2R5RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MQm9keUVsZW1lbnQq
KTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEJvZHlF
bGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdhMWYyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50LmNwcApAQCAtMCwwICsxLDYzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQq
IGtpdChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJL
SVRfRE9NX0hUTUxfQlVUVE9OX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUq
PihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxCdXR0b25FbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVu
dCogd3JhcEhUTUxCdXR0b25FbGVtZW50KFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX0JVVFRPTl9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9C
VVRUT05fRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9idXR0b25fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29y
ZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9idXR0b25fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRU
YXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwg
Z2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6
R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwg
Y29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1l
LCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3Jl
OjpIVE1MQnV0dG9uRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxCdXR0b25FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7
CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9idXR0b25f
ZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50LCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1M
X0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFS
R0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8w
LAorICAgIFBST1BfQVVUT0ZPQ1VTLAorICAgIFBST1BfRElTQUJMRUQsCisgICAgUFJPUF9GT1JN
LAorICAgIFBST1BfRk9STV9BQ1RJT04sCisgICAgUFJPUF9GT1JNX0VOQ1RZUEUsCisgICAgUFJP
UF9GT1JNX01FVEhPRCwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9GT1JNX05PX1ZBTElEQVRF
LAorICAgIFBST1BfRk9STV9UQVJHRVQsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfVkFMVUUs
CisgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgIFBST1BfVkFMSURJVFksCisgICAgUFJPUF9W
QUxJREFUSU9OX01FU1NBR0UsCisgICAgUFJPUF9MQUJFTFMsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9N
X0hUTUxfQlVUVE9OX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkg
eworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9zZXRfYXV0b2ZvY3VzKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fQUNU
SU9OOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fYWN0
aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfRk9STV9FTkNUWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfc2V0X2Zvcm1fZW5jdHlwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1fTUVUSE9EOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fbWV0aG9kKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQ
RToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9idXR0b25fdHlw
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0ZPUk1fTk9fVkFMSURBVEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9zZXRfZm9ybV9ub192YWxpZGF0ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFu
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX1RBUkdFVDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX3RhcmdldChzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX05BTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfbmFt
ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
c2V0X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX0JVVFRPTl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQVVUT0ZPQ1VTOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2F1dG9m
b2N1cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9l
bGVtZW50X2dldF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9GT1JNOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9idXR0b25fZWxlbWVudF9nZXRfZm9ybShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9GT1JNX0FDVElPTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX2FjdGlvbihzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX0VOQ1RZUEU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRf
Zm9ybV9lbmN0eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk1f
TUVUSE9EOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fbWV0aG9kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfYnV0dG9uX3R5cGUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9OT19WQUxJREFURToKKyAgICAgICAg
Z192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X2dldF9mb3JtX25vX3ZhbGlkYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0ZPUk1fVEFSR0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fdGFyZ2V0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfbmFtZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF92YWx1
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSUxMX1ZBTElEQVRFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVkFMSURJVFk6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF92YWxpZGl0eShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJREFUSU9OX01FU1NBR0U6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRf
dmFsaWRhdGlvbl9tZXNzYWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0xBQkVMUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2xhYmVscyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QVVUT0ZPQ1VTLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJh
dXRvZm9jdXMiLAorICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50OmF1dG9mb2N1cyIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MQnV0dG9uRWxlbWVudDphdXRvZm9j
dXMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAgICAgICJIVE1MQnV0
dG9uRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBI
VE1MQnV0dG9uRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZvcm0iLAorICAgICAg
ICAgICAgIkhUTUxCdXR0b25FbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgInJlYWQtb25seSBX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxCdXR0b25FbGVtZW50OmZvcm0iLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRk9STV9BQ1RJT04sCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZm9ybS1hY3Rpb24iLAor
ICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50OmZvcm0tYWN0aW9uIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MQnV0dG9uRWxlbWVudDpmb3JtLWFjdGlvbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9GT1JNX0VOQ1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiZm9ybS1lbmN0eXBlIiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxl
bWVudDpmb3JtLWVuY3R5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxC
dXR0b25FbGVtZW50OmZvcm0tZW5jdHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNX01FVEhP
RCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmb3JtLW1ldGhv
ZCIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6Zm9ybS1tZXRob2QiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxCdXR0b25FbGVtZW50OmZvcm0tbWV0aG9kIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTEJ1dHRvbkVsZW1lbnQ6dHlwZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEJ1dHRvbkVsZW1lbnQ6dHlwZSIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9GT1JNX05PX1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJmb3JtLW5vLXZhbGlkYXRlIiwKKyAgICAgICAgICAg
ICJIVE1MQnV0dG9uRWxlbWVudDpmb3JtLW5vLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdib29sZWFuIEhUTUxCdXR0b25FbGVtZW50OmZvcm0tbm8tdmFsaWRhdGUiLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfRk9STV9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiZm9ybS10YXJnZXQiLAorICAgICAgICAgICAgIkhUTUxCdXR0b25F
bGVtZW50OmZvcm0tdGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
QnV0dG9uRWxlbWVudDpmb3JtLXRhcmdldCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAg
ICAgIkhUTUxCdXR0b25FbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxCdXR0b25FbGVtZW50Om5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsdWUiLAorICAgICAg
ICAgICAgIkhUTUxCdXR0b25FbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MQnV0dG9uRWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSUxM
X1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3
aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJIVE1MQnV0dG9uRWxlbWVudDp3aWxsLXZhbGlk
YXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTEJ1dHRvbkVsZW1lbnQ6
d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElESVRZLAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZhbGlkaXR5IiwKKyAgICAgICAgICAg
ICJIVE1MQnV0dG9uRWxlbWVudDp2YWxpZGl0eSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTVZhbGlkaXR5U3RhdGUqIEhUTUxCdXR0b25FbGVtZW50OnZhbGlkaXR5IiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FH
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWxpZGF0aW9u
LW1lc3NhZ2UiLAorICAgICAgICAgICAgIkhUTUxCdXR0b25FbGVtZW50OnZhbGlkYXRpb24tbWVz
c2FnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MQnV0dG9uRWxlbWVudDp2
YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQUJFTFMsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFiZWxzIiwKKyAgICAgICAgICAgICJI
VE1MQnV0dG9uRWxlbWVudDpsYWJlbHMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01Ob2RlTGlzdCogSFRNTEJ1dHRvbkVsZW1lbnQ6bGFiZWxzIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9OT0RFX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfaW5p
dChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hlY2tWYWxpZGl0eSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3Nl
dF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZXJyb3IpOworICAgIFdlYkNvcmU6OkhU
TUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZEVycm9yID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVycm9yKTsKKyAgICBp
dGVtLT5zZXRDdXN0b21WYWxpZGl0eShjb252ZXJ0ZWRFcnJvcik7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2NsaWNrKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+Y2xpY2soKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X2J1dHRvbl9lbGVtZW50X2dldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphdXRvZm9jdXNBdHRy
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25f
ZWxlbWVudF9zZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBn
Ym9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjphdXRvZm9jdXNBdHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVO
VChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0
dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6ZGlzYWJsZWRBdHRyLCB2YWx1ZSk7Cit9CisKK1dlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhU
TUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QlVUVE9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV9hY3Rpb24oV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9C
VVRUT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+Zm9ybUFjdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9hY3Rpb24oV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRGb3JtQWN0aW9uKGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVu
dF9nZXRfZm9ybV9lbmN0eXBlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmZvcm1FbmN0
eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50X3NldF9mb3JtX2VuY3R5cGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
QlVUVE9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRGb3JtRW5jdHlwZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Zvcm1fbWV0aG9kKFdlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25F
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmZvcm1NZXRob2QoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fbWV0
aG9kKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0Rm9ybU1l
dGhvZChjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfZ2V0X2J1dHRvbl90eXBlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5
cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfYnV0
dG9uX2VsZW1lbnRfc2V0X2J1dHRvbl90eXBlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JV
VFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0VHlwZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEJ1dHRv
bkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmZvcm1ub3ZhbGlkYXRlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fbm9fdmFsaWRhdGUoV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6
SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmZvcm1ub3ZhbGlkYXRlQXR0
ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dl
dF9mb3JtX3RhcmdldChXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Zm9ybXRhcmdldEF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxl
bWVudF9zZXRfZm9ybV90YXJnZXQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Zm9ybXRhcmdldEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MQnV0dG9uRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25F
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjp2YWx1ZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsdWVBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfd2ls
bF92YWxpZGF0ZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAg
V2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2lsbFZhbGlkYXRlKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogd2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmFsaWRpdHlTdGF0ZT4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPnZhbGlkaXR5KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9idXR0b25f
ZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQlVUVE9OX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPnZhbGlkYXRpb25NZXNzYWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktp
dERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2xhYmVscyhX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQnV0
dG9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6Tm9kZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sYWJlbHMoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1ZDNlNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaApAQCAtMCwwICsxLDE2MiBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9CVVRUT05fRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfYnV0
dG9uX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0JVVFRPTl9F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX0JVVFRPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9CVVRUT05fRUxFTUVOVF9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9CVVRUT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5UKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0JV
VFRPTl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0JVVFRPTl9FTEVNRU5U
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX0JVVFRPTl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0JV
VFRPTl9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0JVVFRPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1M
QnV0dG9uRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVu
dCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1M
RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2F1dG9mb2N1czoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9n
ZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2F1dG9mb2N1czoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
c2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZGlz
YWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0
X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKiBA
dmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0
dG9uX2VsZW1lbnRfZ2V0X2Zvcm06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxG
b3JtRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCoKK3dl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MQnV0dG9u
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X2dldF9idXR0b25fdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2J1dHRvbl90eXBlKFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfc2V0X2J1dHRvbl90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25F
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfYnV0dG9uX3R5cGUoV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfbmFtZShX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2J1dHRvbl9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1M
QnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfdmFsdWUo
V2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9zZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01I
VE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTA1Zjk1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MQnV0dG9uRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxCdXR0b25F
bGVtZW50KiB3cmFwSFRNTEJ1dHRvbkVsZW1lbnQoV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQq
KTsKK1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEJ1dHRvbkVs
ZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxCdXR0b25FbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxC
dXR0b25FbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRVbnN0YWJsZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MWMwMDgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDIwMiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1M
QnV0dG9uRWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1l
bnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5f
REVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfY2hlY2tfdmFs
aWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2NoZWNrX3Zh
bGlkaXR5KFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudAorICogQGVycm9yOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfY2xpY2s6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2NsaWNrKFdlYktpdERPTUhU
TUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0
b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2Vs
ZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fYWN0aW9u
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9hY3Rpb24oV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX2VuY3R5cGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV9lbmN0eXBlKFdlYktpdERPTUhU
TUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9u
X2VsZW1lbnRfc2V0X2Zvcm1fZW5jdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0
dG9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
c2V0X2Zvcm1fZW5jdHlwZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRf
Z2V0X2Zvcm1fbWV0aG9kOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0
X2Zvcm1fbWV0aG9kKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2Zvcm1fbWV0aG9kOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV9tZXRob2QoV2ViS2l0RE9NSFRNTEJ1dHRv
bkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3JtX25vX3ZhbGlkYXRlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2J1
dHRvbl9lbGVtZW50X3NldF9mb3JtX25vX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxCdXR0b25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9zZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRET01IVE1MQnV0dG9uRWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0
b25fZWxlbWVudF9nZXRfZm9ybV90YXJnZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1
dHRvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9idXR0b25f
ZWxlbWVudF9nZXRfZm9ybV90YXJnZXQoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9zZXRfZm9ybV90YXJn
ZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF9mb3JtX3RhcmdldChXZWJLaXRE
T01IVE1MQnV0dG9uRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbGlkaXR5OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVZhbGlkaXR5U3RhdGUqCit3ZWJraXRfZG9t
X2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0
X3ZhbGlkYXRpb25fbWVzc2FnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQnV0dG9uRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50
X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfbGFiZWxzOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlzdCoKK3dlYmtpdF9kb21f
aHRtbF9idXR0b25fZWxlbWVudF9nZXRfbGFiZWxzKFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50
KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRVbnN0YWJs
ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TENhbnZhc0VsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNh
N2QyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LmNwcApAQCAt
MCwwICsxLDIwMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LmgiCisKKyNp
bmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNo
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
bi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxDYW52YXNFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTENhbnZhc0Vs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCogb2JqKQoreworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6
Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50KiBjb3JlKFdl
YktpdERPTUhUTUxDYW52YXNFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MQ2FudmFz
RWxlbWVudCogd3JhcEhUTUxDYW52YXNFbGVtZW50KFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX0NBTlZBU19FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
SFRNTF9DQU5WQVNfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF9jYW52YXNfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlm
ICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29y
ZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5u
YW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MQ2FudmFzRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+
ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9j
YW52YXNfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9yZW1vdmVfZXZlbnRf
bGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxDYW52
YXNFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZF
TlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfV0lEVEgsCisgICAgUFJPUF9IRUlHSFQsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Nh
bnZhc19lbGVtZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9jYW52YXNfZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9jYW52YXNf
ZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MQ2Fu
dmFzRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9DQU5WQVNfRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1l
bnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdI
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2NhbnZh
c19lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTENh
bnZhc0VsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
Y2FudmFzX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAor
ICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAg
ICAgICAiSFRNTENhbnZhc0VsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2xvbmcgSFRNTENhbnZhc0VsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfSEVJR0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAg
ICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAgIkhUTUxDYW52YXNFbGVtZW50OmhlaWdodCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MQ2FudmFzRWxlbWVudDpoZWlnaHQi
LAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X2NhbnZhc19lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHJlcXVlc3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0
bWxfY2FudmFzX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQ0FOVkFTX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndpZHRoKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X3dp
ZHRoKFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQ0FOVkFTX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkhUTUxDYW52YXNFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNldFdpZHRoKHZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2NhbnZhc19l
bGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9DQU5WQVNfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+aGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X2hlaWdodChXZWJL
aXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0NBTlZBU19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRI
ZWlnaHQodmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxDYW52YXNFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2FkNTY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQu
aApAQCAtMCwwICsxLDkwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VC
S0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRl
ZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVu
dF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50X2gKKworI2luY2x1ZGUgPGds
aWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNM
UworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0NBTlZBU19FTEVNRU5UICAgICAgICAg
ICAgKHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFTX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1M
X0NBTlZBU19FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NBTlZBU19FTEVNRU5ULCBXZWJLaXRET01I
VE1MQ2FudmFzRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfQ0FOVkFT
X0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFTX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX0hUTUxfQ0FOVkFTX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFTX0VMRU1FTlQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFT
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTUhUTUxDYW52YXNFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJl
bnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Q2xh
c3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRfd2lk
dGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfY2Fu
dmFzX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X3dpZHRoOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25n
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVu
dF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X2hlaWdodDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9jYW52YXNf
ZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfc2V0X2hlaWdodDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZwor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRf
c2V0X2hlaWdodChXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZmUxYTk4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MQ2FudmFzRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQ2Fu
dmFzRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxDYW52YXNF
bGVtZW50KiB3cmFwSFRNTENhbnZhc0VsZW1lbnQoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQq
KTsKK1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxD
YW52YXNFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxDYW52YXNFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxD
b2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjI2OGNkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxD
b2xsZWN0aW9uLmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xs
ZWN0aW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0
YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1M
X0NPTExFQ1RJT05fR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLCBXZWJLaXRET01IVE1MQ29sbGVj
dGlvblByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQ29sbGVjdGlvblBy
aXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gY29yZU9iamVjdDsK
K30gV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIGtpdChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiog
b2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9p
bnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJL
SVRfRE9NX0hUTUxfQ09MTEVDVElPTihyZXQpOworCisgICAgcmV0dXJuIHdyYXAob2JqKTsKK30K
KworV2ViQ29yZTo6SFRNTENvbGxlY3Rpb24qIGNvcmUoV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MQ29sbGVjdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3cmFwSFRNTENvbGxlY3Rpb24oV2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfQ09MTEVDVElPTihnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01IVE1MQ29sbGVjdGlvbiwgd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb24sIFdF
QktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xF
TkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvblByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX0hUTUxfQ09MTEVDVElPTl9HRVRfUFJJVkFURShvYmplY3Qp
OworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9j
b2xsZWN0aW9uX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxD
b2xsZWN0aW9uKiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0NPTExFQ1RJT04ob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAg
IGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRf
bGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9t
X2h0bWxfY29sbGVjdGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGll
cykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX2h0
bWxfY29sbGVjdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9IVE1MX0NPTExFQ1RJT05fR0VU
X1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2Jq
ZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTENvbGxlY3Rp
b25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRl
KSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21faHRtbF9jb2xs
ZWN0aW9uX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZG9tX2h0bWxfY29sbGVjdGlvbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9wcm9wZXJ0eTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAg
ICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIkhUTUxDb2xsZWN0aW9uOmxlbmd0aCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBIVE1MQ29sbGVjdGlvbjpsZW5ndGgiLAorICAgICAg
ICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2luaXQo
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9IVE1MX0NPTExFQ1RJT05fR0VUX1BS
SVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01IVE1MQ29sbGVjdGlvblBy
aXZhdGUoKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25f
aXRlbShXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVt
KGluZGV4KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwor
fQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVt
KFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0NPTExFQ1RJT04oc2VsZiksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKG5hbWUsIDApOworICAgIFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9u
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5h
bWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5uYW1lZEl0ZW0oY29udmVydGVk
TmFtZSkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgoV2ViS2l0RE9N
SFRNTENvbGxlY3Rpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9D
T0xMRUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MQ29sbGVjdGlv
bi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MQ29sbGVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJhOGQ0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uLmgK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFk
ZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJ
VCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25faAor
I2RlZmluZSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0
bWxfY29sbGVjdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfQ09MTEVD
VElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLCBXZWJLaXRET01IVE1MQ29sbGVjdGlvbikp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9DT0xMRUNUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExF
Q1RJT04sIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9DT0xMRUNUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX0NPTExFQ1RJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwg
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb25DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24geworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxDb2xsZWN0aW9uQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVj
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
aHRtbF9jb2xsZWN0aW9uX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9jb2xsZWN0aW9uX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24K
KyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9k
b21faHRtbF9jb2xsZWN0aW9uX2l0ZW0oV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHNlbGYsIGd1
bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fbmFtZWRf
aXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorICogQG5hbWU6IEEg
I2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2Rl
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21faHRtbF9jb2xsZWN0
aW9uX25hbWVkX2l0ZW0oV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfY29sbGVjdGlvbl9nZXRfbGVuZ3Ro
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgorICogUmV0dXJuczog
QSAjZ3Vsb25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfY29sbGVj
dGlvbl9nZXRfbGVuZ3RoKFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKiBzZWxmKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYTg5NjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TENvbGxlY3Rpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2
YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTENvbGxlY3Rpb24uaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24uaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd3JhcEhUTUxDb2xsZWN0aW9uKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uKik7CitXZWJLaXRET01IVE1MQ29sbGVjdGlvbioga2l0KFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uKik7CitXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbiogY29yZShXZWJLaXRET01I
VE1MQ29sbGVjdGlvbiopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MQ29sbGVjdGlvblByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExp
c3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4MWJiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TERMaXN0RWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
RExpc3RFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTERMaXN0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9V
VEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQq
IGtpdChXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fSFRNTF9EX0xJU1RfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+
KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCogY29yZShXZWJLaXRET01I
VE1MRExpc3RFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqIHdy
YXBIVE1MRExpc3RFbGVtZW50KFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqIGNvcmVPYmplY3Qp
Cit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
RF9MSVNUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0RfTElTVF9F
TEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RfbGlz
dF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZl
bnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0
Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9k
X2xpc3RfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQs
IGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTERMaXN0
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxETGlzdEVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2
ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdl
YmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2FkZF9l
dmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCwgd2Via2l0X2Rv
bV9odG1sX2RfbGlzdF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NP
TVBBQ1QsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRf
c2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTERMaXN0
RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9EX0xJU1RfRUxFTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NPTVBBQ1Q6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdChzZWxmLCBnX3Zh
bHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9EX0xJ
U1RfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtp
dF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfY2xhc3NfaW5p
dChXZWJLaXRET01IVE1MRExpc3RFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZF9saXN0
X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9DT01QQUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAg
ICAgICJjb21wYWN0IiwKKyAgICAgICAgICAgICJIVE1MRExpc3RFbGVtZW50OmNvbXBhY3QiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTERMaXN0RWxlbWVudDpjb21wYWN0
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9p
bml0KFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1l
bnRfZ2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RfTElTVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SFRNTERMaXN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X3NldF9jb21wYWN0
KFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9EX0xJU1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTERMaXN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29tcGFjdEF0dHIsIHZh
bHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxETGlzdEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjVh
NzJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50LmgKQEAgLTAsMCAr
MSw3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9f
V0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJv
ciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHku
IgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudF9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRF9MSVNUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2Rv
bV9odG1sX2RfbGlzdF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRN
TF9EX0xJU1RfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9EX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTERMaXN0RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9EX0xJU1RfRUxFTUVO
VF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9EX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVu
dENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRF9MSVNUX0VMRU1FTlQob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfRF9MSVNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRF9MSVNU
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRF9MSVNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfRF9MSVNUX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRF9MSVNUX0VMRU1FTlQsIFdlYktp
dERPTUhUTUxETGlzdEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTERMaXN0
RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsK
Kworc3RydWN0IF9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERP
TUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQor
d2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRExpc3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50
X2dldF9jb21wYWN0KFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRExpc3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9zZXRf
Y29tcGFjdChXZWJLaXRET01IVE1MRExpc3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRExpc3RFbGVtZW50X2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TERMaXN0RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4wNWNmZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50UHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MRExpc3RFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxETGlz
dEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVu
dC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqIHdy
YXBIVE1MRExpc3RFbGVtZW50KFdlYkNvcmU6OkhUTUxETGlzdEVsZW1lbnQqKTsKK1dlYktpdERP
TUhUTUxETGlzdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50Kik7CitXZWJD
b3JlOjpIVE1MRExpc3RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxETGlzdEVsZW1lbnQqKTsK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTERMaXN0RWxl
bWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjc0MDM2YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEZXRhaWxzRWxl
bWVudC5jcHAKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRGV0YWlsc0Vs
ZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRGV0
YWlsc0VsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKKyNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTERldGFpbHNFbGVt
ZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9ERVRBSUxTX0VMRU1FTlQo
a2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhU
TUxEZXRhaWxzRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGV0
YWlsc0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQqIHdyYXBIVE1MRGV0YWlsc0VsZW1l
bnQoV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0RFVEFJTFNfRUxFTUVO
VChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfREVUQUlMU19FTEVNRU5ULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyNpZiBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorICAgIFdlYkNvcmU6OkV2ZW50
KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAg
ICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiRGV0YWlscyBFbGVtZW50IikKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKERF
VEFJTFNfRUxFTUVOVCkKKyAgICBXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGV0YWlsc0VsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURf
UEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkRldGFpbHMgRWxlbWVudCIpCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShE
RVRBSUxTX0VMRU1FTlQpCisgICAgV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVj
dEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5V
U0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJEZXRhaWxzIEVsZW1lbnQiKQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoREVUQUlMU19FTEVNRU5UKQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
aHRtbF9kZXRhaWxzX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9kZXRhaWxzX2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0
bWxfZGV0YWlsc19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50LCB3ZWJraXRfZG9tX2h0
bWxfZGV0YWlsc19lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExF
TUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX09QRU4s
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X3NldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxEZXRhaWxzRWxl
bWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9ERVRBSUxTX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9PUEVOOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X3NldF9vcGVuKHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NSFRNTERldGFpbHNFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RFVEFJTFNf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX09QRU46CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9kZXRhaWxzX2VsZW1lbnRfZ2V0X29wZW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9jbGFzc19pbml0KFdlYktp
dERPTUhUTUxEZXRhaWxzRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxl
bWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9PUEVOLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJv
cGVuIiwKKyAgICAgICAgICAgICJIVE1MRGV0YWlsc0VsZW1lbnQ6b3BlbiIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRGV0YWlsc0VsZW1lbnQ6b3BlbiIsCisgICAgICAg
ICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2luaXQoV2ViS2l0
RE9NSFRNTERldGFpbHNFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9nZXRf
b3BlbihXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKERF
VEFJTFNfRUxFTUVOVCkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0RFVEFJTFNfRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6b3BlbkF0
dHIpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJEZXRhaWxzIEVsZW1lbnQiKQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKERF
VEFJTFNfRUxFTUVOVCkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVt
ZW50X3NldF9vcGVuKFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpCit7CisjaWYgRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfREVUQUlMU19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRGV0YWls
c0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVh
bkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6Om9wZW5BdHRyLCB2YWx1ZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkRldGFpbHMgRWxlbWVudCIpCisjZW5kaWYg
LyogRU5BQkxFKERFVEFJTFNfRUxFTUVOVCkgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
RGV0YWlsc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyMTY5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTERldGFpbHNFbGVtZW50LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRfaAorI2Rl
ZmluZSBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9ERVRBSUxTX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9o
dG1sX2RldGFpbHNfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxf
REVUQUlMU19FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RFVEFJTFNfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTERldGFpbHNFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RFVEFJTFNfRUxF
TUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9ERVRBSUxTX0VMRU1FTlQsIFdlYktpdERPTUhUTUxEZXRhaWxz
RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfREVUQUlMU19FTEVNRU5U
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9IVE1MX0RFVEFJTFNfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9ERVRBSUxTX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfREVUQUlMU19FTEVNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9IVE1MX0RFVEFJTFNfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ERVRBSUxTX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJL
aXRET01IVE1MRGV0YWlsc0VsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVu
dF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50Q2xh
c3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2RldGFpbHNfZWxlbWVudF9nZXRfdHlw
ZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2dldF9v
cGVuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZGV0YWlsc19lbGVtZW50X2dldF9vcGVu
KFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2RldGFpbHNfZWxlbWVudF9zZXRfb3BlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRGV0YWlsc0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RldGFp
bHNfZWxlbWVudF9zZXRfb3BlbihXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNF
X1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTERldGFpbHNFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQxMDE5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVu
dFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudFByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTERldGFpbHNFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhU
TUxEZXRhaWxzRWxlbWVudC5oPgorI2lmIEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50KiB3cmFwSFRNTERldGFp
bHNFbGVtZW50KFdlYkNvcmU6OkhUTUxEZXRhaWxzRWxlbWVudCopOworV2ViS2l0RE9NSFRNTERl
dGFpbHNFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTERldGFpbHNFbGVtZW50Kik7CitXZWJDb3Jl
OjpIVE1MRGV0YWlsc0VsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50Kik7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShERVRBSUxTX0VMRU1F
TlQpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRGV0YWlsc0VsZW1lbnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
RGlyZWN0b3J5RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGU1MWQ4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuY3Bw
CkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQu
aCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9i
amVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRGlyZWN0b3J5
RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50KiBraXQo
V2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2Rl
Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MRGlyZWN0b3J5RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTERp
cmVjdG9yeUVsZW1lbnQqIHdyYXBIVE1MRGlyZWN0b3J5RWxlbWVudChXZWJDb3JlOjpIVE1MRGly
ZWN0b3J5RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9ESVJFQ1RPUllfRUxFTUVOVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0
Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5k
aW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVz
Y3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1l
bnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUp
Cit7CisgICAgV2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGlyZWN0b3J5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExp
c3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2
ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktp
dERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUq
IGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTERpcmVj
dG9yeUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGlyZWN0
b3J5RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAg
IHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2
ZW50ID0gd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50Owor
ICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5
X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlz
dGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MRGlyZWN0
b3J5RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50LCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBF
X0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0gewor
ICAgIFBST1BfMCwKKyAgICBQUk9QX0NPTVBBQ1QsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9N
X0hUTUxfRElSRUNUT1JZX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZGly
ZWN0b3J5X2VsZW1lbnRfc2V0X2NvbXBhY3Qoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RpcmVjdG9y
eV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxE
aXJlY3RvcnlFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RJUkVDVE9SWV9FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09N
UEFDVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2RpcmVjdG9yeV9lbGVtZW50X2dldF9jb21wYWN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kaXJlY3RvcnlfZWxlbWVudF9jbGFzc19pbml0KFdl
YktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0
b3J5X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DT01QQUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJjb21wYWN0IiwKKyAgICAgICAgICAgICJIVE1MRGlyZWN0b3J5RWxlbWVudDpj
b21wYWN0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxEaXJlY3RvcnlF
bGVtZW50OmNvbXBhY3QiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2Rp
cmVjdG9yeV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTERpcmVj
dG9yeUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ESVJF
Q1RPUllfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxEaXJlY3RvcnlF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9
IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpjb21wYWN0QXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfc2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTERpcmVj
dG9yeUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTERpcmVj
dG9yeUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9v
bGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmNvbXBhY3RBdHRyLCB2YWx1ZSk7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERp
cmVjdG9yeUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzdh
YzlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5oCkBAIC0w
LDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5l
ZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVj
dGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50X2gK
KyNkZWZpbmUgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQgICAgICAg
ICAgICAod2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9ESVJFQ1RPUllfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVJF
Q1RPUllfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfRElSRUNUT1JZX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElSRUNUT1JZ
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVJFQ1RPUllf
RUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9E
SVJFQ1RPUllfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTERp
cmVjdG9yeUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2VsZW1lbnRfZ2V0X3R5cGUodm9p
ZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2dldF9jb21w
YWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2dldF9jb21wYWN0KFdlYktpdERPTUhUTUxEaXJlY3Rv
cnlFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZGlyZWN0b3J5X2Vs
ZW1lbnRfc2V0X2NvbXBhY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X3NldF9jb21wYWN0KFdlYktpdERPTUhU
TUxEaXJlY3RvcnlFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1l
bnRQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRQcml2YXRl
LmgKaW5kZXggMjY4ZWJmYS4uZjcwMWQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudFByaXZhdGUuaApAQCAtMTgs
MTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGVfaAotI2RlZmluZSBXZWJL
aXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01IVE1M
RGlyZWN0b3J5RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRGlyZWN0b3J5
RWxlbWVudFByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdEV2ZW50Q29uc3RydWN0b3IuaCIKLSNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxEaXJlY3RvcnlFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewot
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHdyYXBUZXN0RXZlbnRDb25zdHJ1Y3RvcihX
ZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciopOwotV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciopOwotV2ViQ29yZTo6VGVz
dEV2ZW50Q29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsK
K1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50KiB3cmFwSFRNTERpcmVjdG9yeUVsZW1lbnQo
V2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxEaXJlY3RvcnlF
bGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhU
TUxEaXJlY3RvcnlFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50Kik7
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yUHJpdmF0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVs
ZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRGl2RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMmU5OGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuY3BwCkBA
IC0wLDAgKzEsMTcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRGl2RWxlbWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1dlYktpdERPTUhUTUxEaXZFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTERpdkVsZW1l
bnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0RJVl9FTEVNRU5UKGtpdChz
dGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MRGl2
RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRGl2RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9N
SFRNTERpdkVsZW1lbnQqIHdyYXBIVE1MRGl2RWxlbWVudChXZWJDb3JlOjpIVE1MRGl2RWxlbWVu
dCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9ESVZfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hU
TUxfRElWX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfZGl2X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVF
dmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3Bh
dGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
ZGl2X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3Rl
bmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50
TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfZGl2X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNv
cmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1s
X2Rpdl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAg
IGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShX
ZWJLaXRET01IVE1MRGl2RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50LCBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RP
TV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2Vu
dW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdOLAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTUhUTUxEaXZFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RJ
Vl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9zZXRfYWxp
Z24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hU
TUxfRElWX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfY2xhc3NfaW5pdChXZWJL
aXRET01IVE1MRGl2RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
aHRtbF9kaXZfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04s
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAorICAg
ICAgICAgICAgIkhUTUxEaXZFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MRGl2RWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZGl2X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MRGl2RWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfZGl2X2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxEaXZFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRElWX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVu
dF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRElWX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxEaXZFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTERpdkVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45MTI5NjdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5oCkBAIC0w
LDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5l
ZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVj
dGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxEaXZFbGVtZW50X2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRElWX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9o
dG1sX2Rpdl9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9ESVZf
RUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVZfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTERpdkVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRElWX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
RElWX0VMRU1FTlQsIFdlYktpdERPTUhUTUxEaXZFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfSFRNTF9ESVZfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVZfRUxFTUVOVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9ESVZfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ESVZfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9ESVZfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9E
SVZfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTERpdkVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTERpdkVsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MRGl2RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZGl2X2VsZW1lbnRfZ2V0X2Fs
aWduKFdlYktpdERPTUhUTUxEaXZFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZGl2X2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxE
aXZFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTERpdkVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXZWJLaXRET01IVE1MRGl2RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxE
aXZFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRGl2RWxlbWVudFByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTdmMTM5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRGl2RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxEaXZFbGVtZW50UHJp
dmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxEaXZFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxEaXZFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTUhUTUxEaXZFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRN
TERpdkVsZW1lbnQqIHdyYXBIVE1MRGl2RWxlbWVudChXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCop
OworV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRGl2RWxlbWVudCop
OworV2ViQ29yZTo6SFRNTERpdkVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQq
KTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTERpdkVs
ZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTERvY3VtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
NTQ0ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnQuY3BwCkBAIC0wLDAg
KzEsNDI5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTERvY3VtZW50LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxE
b2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxEb2N1bWVudCoga2l0KFdlYkNvcmU6
OkhUTUxEb2N1bWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRE9DVU1F
TlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6
OkhUTUxEb2N1bWVudCogY29yZShXZWJLaXRET01IVE1MRG9jdW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRG9jdW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRE
T01IVE1MRG9jdW1lbnQqIHdyYXBIVE1MRG9jdW1lbnQoV2ViQ29yZTo6SFRNTERvY3VtZW50KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX0RPQ1VNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NV
TUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9kb2N1bWVu
dF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01F
dmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3Jl
RXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTERvY3VtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkhUTUxEb2N1bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxEb2N1bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAg
IHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdf
T0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisg
ICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTERvY3VtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAg
aWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9hZGRf
ZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtp
dF9kb21faHRtbF9kb2N1bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5F
X1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxEb2N1bWVudCwgd2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50LCBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfV0lEVEgsCisgICAgUFJPUF9IRUlH
SFQsCisgICAgUFJPUF9ESVIsCisgICAgUFJPUF9CR19DT0xPUiwKKyAgICBQUk9QX0ZHX0NPTE9S
LAorICAgIFBST1BfQUxJTktfQ09MT1IsCisgICAgUFJPUF9MSU5LX0NPTE9SLAorICAgIFBST1Bf
VkxJTktfQ09MT1IsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRf
c2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTERvY3Vt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0RPQ1VNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElSOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfc2V0X2RpcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JHX0NPTE9SOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2JnX2NvbG9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRkdfQ09MT1I6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfZmdfY29sb3Ioc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElOS19DT0xP
UjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9hbGlua19jb2xvcihzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0xJTktfQ09MT1I6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfbGlu
a19jb2xvcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1ZMSU5LX0NPTE9SOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfc2V0X3ZsaW5rX2NvbG9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiA9
IFdFQktJVF9ET01fSFRNTF9ET0NVTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0
eUlkKSB7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfRElSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2RpcihzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9iZ19jb2xvcihzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GR19DT0xPUjoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9mZ19jb2xv
cihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElOS19DT0xPUjoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50
X2dldF9hbGlua19jb2xvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9M
SU5LX0NPTE9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfZ2V0X2xpbmtfY29sb3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVkxJTktfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfdmxpbmtfY29sb3Ioc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2NsYXNzX2lu
aXQoV2ViS2l0RE9NSFRNTERvY3VtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRf
c2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9odG1sX2RvY3VtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAg
ICAgICAgIkhUTUxEb2N1bWVudDp3aWR0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25n
IEhUTUxEb2N1bWVudDp3aWR0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiaGVp
Z2h0IiwKKyAgICAgICAgICAgICJIVE1MRG9jdW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2xvbmcgSFRNTERvY3VtZW50OmhlaWdodCIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0RJUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJkaXIiLAorICAgICAgICAgICAgIkhUTUxEb2N1bWVudDpkaXIiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxEb2N1bWVudDpkaXIiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQkdfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiYmctY29sb3IiLAorICAgICAgICAgICAgIkhUTUxEb2N1bWVudDpiZy1jb2xvciIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTERvY3VtZW50OmJnLWNvbG9yIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0ZHX0NPTE9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImZnLWNvbG9yIiwKKyAgICAgICAgICAgICJIVE1MRG9jdW1lbnQ6ZmctY29sb3Ii
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxEb2N1bWVudDpmZy1jb2xvciIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9BTElOS19DT0xPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJhbGluay1jb2xvciIsCisgICAgICAgICAgICAiSFRNTERvY3Vt
ZW50OmFsaW5rLWNvbG9yIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRG9j
dW1lbnQ6YWxpbmstY29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTElOS19DT0xPUiwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsaW5rLWNvbG9yIiwKKyAgICAg
ICAgICAgICJIVE1MRG9jdW1lbnQ6bGluay1jb2xvciIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTERvY3VtZW50OmxpbmstY29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkxJ
TktfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmxp
bmstY29sb3IiLAorICAgICAgICAgICAgIkhUTUxEb2N1bWVudDp2bGluay1jb2xvciIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTERvY3VtZW50OnZsaW5rLWNvbG9yIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9pbml0KFdlYktpdERPTUhU
TUxEb2N1bWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2Nsb3NlKFdlYktpdERPTUhUTUxEb2N1bWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZikpOwor
ICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5jbG9zZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jbGVh
cihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2xlYXIoKTsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZG9jdW1lbnRfY2FwdHVyZV9ldmVudHMoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPmNhcHR1cmVFdmVudHMoKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRf
cmVsZWFzZV9ldmVudHMoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTERvY3Vt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnJlbGVhc2VFdmVudHMo
KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF93aWR0aChXZWJLaXRE
T01IVE1MRG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9E
T0NVTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndpZHRoKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9o
ZWlnaHQoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5o
ZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X2RvY3VtZW50X2dldF9kaXIoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5kaXIoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2RpcihXZWJLaXRET01I
VE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0RGlyKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5iZ0NvbG9y
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3Vt
ZW50X3NldF9iZ19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QmdDb2xvcihj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0
X2ZnX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRG9j
dW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZmdDb2xvcigpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfZmdfY29sb3IoV2ViS2l0RE9N
SFRNTERvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0RPQ1VNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MRG9jdW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEZnQ29sb3IoY29udmVydGVkVmFsdWUpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9hbGlua19jb2xvcihXZWJLaXRET01IVE1M
RG9jdW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmFsaW5rQ29sb3IoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfc2V0X2FsaW5rX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NV
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBbGlua0NvbG9yKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF9kb2N1bWVudF9nZXRfbGlua19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9ET0NVTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTERvY3VtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxpbmtDb2xvcigpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9z
ZXRfbGlua19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0TGlua0NvbG9yKGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRf
dmxpbmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxE
b2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52bGlua0NvbG9yKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF92bGlua19jb2xvcihX
ZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxEb2N1bWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VmxpbmtDb2xvcihjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTERvY3VtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEb2N1bWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjdlYjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxEb2N1bWVudC5oCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJ
REVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRk
b20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lm
bmRlZiBXZWJLaXRET01IVE1MRG9jdW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRG9jdW1l
bnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRE9DVU1F
TlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9ET0NVTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NVTUVOVCwgV2Vi
S2l0RE9NSFRNTERvY3VtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RPQ1VNRU5UX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX0RPQ1VNRU5ULCBXZWJLaXRET01IVE1MRG9jdW1lbnRDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0RPQ1VNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RPQ1VNRU5UKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0RPQ1VNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0RPQ1VNRU5U
LCBXZWJLaXRET01IVE1MRG9jdW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTERv
Y3VtZW50IHsKKyAgICBXZWJLaXRET01Eb2N1bWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxEb2N1bWVudENsYXNzIHsKKyAgICBXZWJLaXRET01Eb2N1bWVu
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
aHRtbF9kb2N1bWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
ZG9jdW1lbnRfY2xvc2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jbG9zZShXZWJL
aXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1
bWVudF9jbGVhcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2NsZWFyKFdlYktpdERP
TUhUTUxEb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50
X2NhcHR1cmVfZXZlbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2FwdHVyZV9l
dmVudHMoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZG9jdW1lbnRfcmVsZWFzZV9ldmVudHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TERvY3VtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kb2N1
bWVudF9yZWxlYXNlX2V2ZW50cyhXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTERvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lU
X0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF93aWR0aChXZWJLaXRET01I
VE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9n
ZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9k
b2N1bWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9kaXI6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTERvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZGlyKFdlYktpdERPTUhUTUxE
b2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9k
aXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9z
ZXRfZGlyKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2JnX2NvbG9yOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2JnX2Nv
bG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X3NldF9iZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9j
dW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9iZ19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Rv
Y3VtZW50X2dldF9mZ19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0
X2RvbV9odG1sX2RvY3VtZW50X2dldF9mZ19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfZmdfY29sb3I6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfZmdf
Y29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfYWxpbmtfY29sb3I6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTERvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfYWxp
bmtfY29sb3IoV2ViS2l0RE9NSFRNTERvY3VtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2FsaW5rX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxEb2N1bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2FsaW5rX2NvbG9yKFdlYktpdERPTUhU
TUxEb2N1bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X2xpbmtfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTERvY3VtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfbGlua19jb2xvcihXZWJLaXRET01I
VE1MRG9jdW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9kb2N1bWVudF9z
ZXRfbGlua19jb2xvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2RvY3VtZW50X3NldF9saW5rX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0
X3ZsaW5rX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxEb2N1bWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfZG9jdW1lbnRfZ2V0X3ZsaW5rX2NvbG9yKFdlYktpdERPTUhUTUxEb2N1bWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF92bGlua19jb2xvcjoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MRG9jdW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF92bGlu
a19jb2xvcihXZWJLaXRET01IVE1MRG9jdW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRG9jdW1lbnRfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxEb2N1bWVu
dFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjFjM2M4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRG9jdW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MRG9jdW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTERvY3VtZW50UHJpdmF0
ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxEb2N1bWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01IVE1MRG9jdW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01IVE1MRG9jdW1lbnQqIHdyYXBIVE1MRG9jdW1lbnQoV2ViQ29yZTo6SFRNTERvY3VtZW50
Kik7CitXZWJLaXRET01IVE1MRG9jdW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRG9jdW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxEb2N1bWVudCogY29yZShXZWJLaXRET01IVE1MRG9jdW1lbnQqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTERvY3VtZW50UHJp
dmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVs
ZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzg4YjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50LmNwcApAQCAtMCwwICsxLDY0NCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0lt
cG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmpl
Y3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50VW5z
dGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGtpdChXZWJD
b3JlOjpIVE1MRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRUxF
TUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29y
ZTo6SFRNTEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TUhUTUxFbGVtZW50KiB3cmFwSFRNTEVsZW1lbnQoV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvcmVP
YmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9N
X0hUTUxfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwg
ImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9
IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVF
dmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNv
ZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJL
aXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBH
Q2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpI
VE1MRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVu
dFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOwor
ICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdl
YktpdERPTUhUTUxFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudCwgV0VCS0lUX0RPTV9U
WVBFX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRf
VEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfVElUTEUsCisgICAgUFJPUF9MQU5HLAorICAgIFBST1BfVFJBTlNMQVRF
LAorICAgIFBST1BfRElSLAorICAgIFBST1BfVEFCX0lOREVYLAorICAgIFBST1BfRFJBR0dBQkxF
LAorICAgIFBST1BfV0VCS0lURFJPUFpPTkUsCisgICAgUFJPUF9ISURERU4sCisgICAgUFJPUF9B
Q0NFU1NfS0VZLAorICAgIFBST1BfSU5ORVJfVEVYVCwKKyAgICBQUk9QX09VVEVSX1RFWFQsCisg
ICAgUFJPUF9DT05URU5UX0VESVRBQkxFLAorICAgIFBST1BfSVNfQ09OVEVOVF9FRElUQUJMRSwK
KyAgICBQUk9QX1NQRUxMQ0hFQ0ssCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9FTEVNRU5UKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVElUTEU6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90aXRsZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBTkc6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9sYW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFJBTlNMQVRFOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdHJhbnNsYXRlKHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJUjoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2RpcihzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RBQl9JTkRFWDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3RhYl9pbmRleChzZWxmLCBnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EUkFH
R0FCTEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9kcmFnZ2FibGUoc2Vs
ZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfV0VCS0lURFJPUFpPTkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3Nl
dF93ZWJraXRkcm9wem9uZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hJRERFTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfc2V0X2hpZGRlbihzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BQ0NFU1NfS0VZOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9zZXRfYWNjZXNzX2tleShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOTkVSX1RFWFQ6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9pbm5lcl90ZXh0KHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfT1VURVJfVEVYVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X291dGVy
X3RleHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05URU5UX0VESVRBQkxFOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9zZXRfY29udGVudF9lZGl0YWJsZShzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NQ
RUxMQ0hFQ0s6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9zcGVsbGNoZWNr
KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0VMRU1F
TlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9U
SVRMRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfZ2V0X3RpdGxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0xBTkc6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9sYW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1RSQU5TTEFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2VsZW1lbnRfZ2V0X3RyYW5zbGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9ESVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF9kaXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfVEFCX0lOREVYOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdGFiX2luZGV4KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RSQUdHQUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2RyYWdnYWJsZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVREUk9QWk9ORToKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3dlYmtpdGRy
b3B6b25lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hJRERFTjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
Z2V0X2hpZGRlbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BQ0NFU1Nf
S0VZOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfYWNjZXNzX2tleShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9JTk5FUl9URVhUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9PVVRFUl9URVhUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfb3V0ZXJfdGV4dChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05URU5UX0VESVRBQkxFOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfY29u
dGVudF9lZGl0YWJsZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19D
T05URU5UX0VESVRBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaXNfY29udGVudF9lZGl0YWJsZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUEVMTENIRUNLOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfc3BlbGxjaGVjayhz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
VElUTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGl0bGUi
LAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OnRpdGxlIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MRWxlbWVudDp0aXRsZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQU5HLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxhbmciLAorICAgICAg
ICAgICAgIkhUTUxFbGVtZW50OmxhbmciLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxFbGVtZW50OmxhbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFJBTlNMQVRFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ0cmFuc2xhdGUiLAorICAgICAg
ICAgICAgIkhUTUxFbGVtZW50OnRyYW5zbGF0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Ym9vbGVhbiBIVE1MRWxlbWVudDp0cmFuc2xhdGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElS
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRpciIsCisgICAg
ICAgICAgICAiSFRNTEVsZW1lbnQ6ZGlyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MRWxlbWVudDpkaXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEFCX0lOREVYLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ0YWItaW5kZXgiLAorICAgICAgICAg
ICAgIkhUTUxFbGVtZW50OnRhYi1pbmRleCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9u
ZyBIVE1MRWxlbWVudDp0YWItaW5kZXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfRFJBR0dBQkxFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJkcmFnZ2FibGUiLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OmRyYWdnYWJsZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MRWxlbWVudDpkcmFnZ2FibGUi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lURFJPUFpPTkUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAid2Via2l0ZHJvcHpvbmUiLAorICAgICAgICAgICAg
IkhUTUxFbGVtZW50OndlYmtpdGRyb3B6b25lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MRWxlbWVudDp3ZWJraXRkcm9wem9uZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ISURE
RU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImhpZGRlbiIs
CisgICAgICAgICAgICAiSFRNTEVsZW1lbnQ6aGlkZGVuIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdib29sZWFuIEhUTUxFbGVtZW50OmhpZGRlbiIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9B
Q0NFU1NfS0VZLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFj
Y2Vzcy1rZXkiLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OmFjY2Vzcy1rZXkiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxFbGVtZW50OmFjY2Vzcy1rZXkiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfSU5ORVJfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJpbm5lci10ZXh0IiwKKyAgICAgICAgICAgICJIVE1MRWxlbWVudDppbm5lci10
ZXh0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRWxlbWVudDppbm5lci10
ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX09VVEVSX1RFWFQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAib3V0ZXItdGV4dCIsCisgICAgICAgICAgICAiSFRNTEVs
ZW1lbnQ6b3V0ZXItdGV4dCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVs
ZW1lbnQ6b3V0ZXItdGV4dCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05URU5UX0VESVRBQkxFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvbnRlbnQtZWRpdGFi
bGUiLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50OmNvbnRlbnQtZWRpdGFibGUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxFbGVtZW50OmNvbnRlbnQtZWRpdGFibGUiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSVNfQ09OVEVOVF9FRElUQUJMRSwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtY29udGVudC1lZGl0YWJsZSIsCisgICAgICAg
ICAgICAiSFRNTEVsZW1lbnQ6aXMtY29udGVudC1lZGl0YWJsZSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIEhUTUxFbGVtZW50OmlzLWNvbnRlbnQtZWRpdGFibGUiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9TUEVMTENIRUNLLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigK
KyAgICAgICAgICAgICJzcGVsbGNoZWNrIiwKKyAgICAgICAgICAgICJIVE1MRWxlbWVudDpzcGVs
bGNoZWNrIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxFbGVtZW50OnNw
ZWxsY2hlY2siLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
aW5pdChXZWJLaXRET01IVE1MRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
cmVxdWVzdCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfY2xpY2soV2ViS2l0
RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPmNsaWNrKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfdGl0bGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dGl0bGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdGl0bGUoV2ViS2l0RE9NSFRN
TEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjp0aXRsZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF9sYW5nKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmxhbmdBdHRyKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfbGFuZyhXZWJL
aXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmxhbmdBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90cmFuc2xhdGUoV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dHJhbnNsYXRlKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdHJh
bnNsYXRlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRN
TEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VHJhbnNs
YXRlKHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9kaXIo
V2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5kaXIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9zZXRfZGlyKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXREaXIo
Y29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRf
dGFiX2luZGV4KFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+
dGFiSW5kZXgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9lbGVtZW50X3NldF90YWJfaW5kZXgoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGdsb25n
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5zZXRUYWJJbmRleCh2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9l
bGVtZW50X2dldF9kcmFnZ2FibGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+ZHJhZ2dhYmxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfZHJhZ2dhYmxlKFdlYktpdERPTUhUTUxF
bGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0RHJhZ2dhYmxlKHZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF93ZWJraXRkcm9wem9uZShXZWJLaXRET01I
VE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3ZWJr
aXRkcm9wem9uZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9lbGVtZW50X3NldF93ZWJraXRkcm9wem9uZShXZWJLaXRET01IVE1MRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9F
TEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OndlYmtpdGRyb3B6b25lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaGlkZGVuKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpoaWRkZW5BdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9oaWRkZW4oV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6aGlkZGVuQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX2VsZW1lbnRfZ2V0X2FjY2Vzc19rZXkoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWNjZXNza2V5QXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2Fj
Y2Vzc19rZXkoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphY2Nlc3NrZXlBdHRyLCBjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4
dChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmlubmVyVGV4dCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9pbm5lcl90ZXh0KFdlYktpdERPTUhUTUxFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0SW5uZXJUZXh0
KGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfZ2V0X291dGVyX3RleHQoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5vdXRlclRleHQoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfb3V0ZXJfdGV4
dChXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGl0ZW0tPnNldE91dGVyVGV4dChjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9jb250ZW50X2VkaXRhYmxlKFdlYktpdERPTUhU
TUxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
Y29udGVudEVkaXRhYmxlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfc2V0X2NvbnRlbnRfZWRpdGFibGUoV2ViS2l0RE9NSFRNTEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdl
YkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRDb250ZW50RWRp
dGFibGUoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21f
aHRtbF9lbGVtZW50X2dldF9pc19jb250ZW50X2VkaXRhYmxlKFdlYktpdERPTUhUTUxFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChzZWxmKSwg
RkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmlzQ29udGVudEVkaXRhYmxlKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
Z2V0X3NwZWxsY2hlY2soV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
SFRNTEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+c3BlbGxjaGVjaygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X3NwZWxsY2hlY2soV2ViS2l0RE9NSFRNTEVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTcGVsbGNoZWNrKHZhbHVlKTsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRWxlbWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzI1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MRWxlbWVudC5oCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01I
VE1MRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxFbGVtZW50X2gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCAgICAgICAgICAgICh3ZWJr
aXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxf
RUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRWxlbWVudCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSFRNTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9FTEVN
RU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRUxF
TUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcykpCisK
K3N0cnVjdCBfV2ViS2l0RE9NSFRNTEVsZW1lbnQgeworICAgIFdlYktpdERPTUVsZW1lbnQgcGFy
ZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHsK
KyAgICBXZWJLaXRET01FbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfY2xpY2s6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfY2xpY2soV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9lbGVtZW50X2dldF90aXRsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdGl0bGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF90aXRsZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdGl0bGUo
V2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2xhbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2xhbmcoV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9sYW5n
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9s
YW5nKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9kaXI6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2RpcihXZWJLaXRET01IVE1M
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2Rp
cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRf
ZGlyKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90YWJfaW5kZXg6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitX
RUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfdGFiX2luZGV4KFdl
YktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxl
bWVudF9zZXRfdGFiX2luZGV4OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9lbGVtZW50X3NldF90YWJfaW5kZXgoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGds
b25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfYWNjZXNz
X2tleToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9nZXRfYWNjZXNzX2tleShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2FjY2Vzc19rZXk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2FjY2Vzc19rZXkoV2ViS2l0RE9N
SFRNTEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoV2ViS2l0RE9NSFRN
TEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9p
bm5lcl90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX3RleHQoV2ViS2l0RE9NSFRNTEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9vdXRlcl90ZXh0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9vdXRlcl90ZXh0KFdlYktp
dERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVu
dF9zZXRfb3V0ZXJfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9vdXRlcl90ZXh0KFdlYktpdERPTUhU
TUxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfY29udGVudF9lZGl0YWJsZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfY29u
dGVudF9lZGl0YWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2NvbnRlbnRfZWRpdGFibGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9z
ZXRfY29udGVudF9lZGl0YWJsZShXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfZ2V0X2lzX2NvbnRlbnRfZWRpdGFibGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaXNfY29udGVudF9lZGl0YWJsZShX
ZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
ZWJLaXRET01IVE1MRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbGVtZW50UHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MDJiMTZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRWxlbWVu
dFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHdyYXBIVE1MRWxlbWVudChXZWJD
b3JlOjpIVE1MRWxlbWVudCopOworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnRVbnN0YWJs
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MRWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDAxZGE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVsZW1lbnRV
bnN0YWJsZS5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJL
aXRET01IVE1MRWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUu
aD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dl
dF90cmFuc2xhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RyYW5zbGF0ZShX
ZWJLaXRET01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfc2V0X3RyYW5zbGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAor
ICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdHJhbnNsYXRlKFdl
YktpdERPTUhUTUxFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2RyYWdnYWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxf
ZWxlbWVudF9nZXRfZHJhZ2dhYmxlKFdlYktpdERPTUhUTUxFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfZHJhZ2dhYmxlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9l
bGVtZW50X3NldF9kcmFnZ2FibGUoV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfd2Via2l0ZHJv
cHpvbmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF93ZWJraXRkcm9wem9uZShXZWJLaXRE
T01IVE1MRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
c2V0X3dlYmtpdGRyb3B6b25lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF93ZWJraXRkcm9wem9uZShX
ZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaGlkZGVuOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9oaWRkZW4oV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9oaWRkZW46CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2VsZW1l
bnRfc2V0X2hpZGRlbihXZWJLaXRET01IVE1MRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9zcGVsbGNoZWNrOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9zcGVsbGNoZWNrKFdlYktpdERPTUhUTUxFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfc3BlbGxj
aGVjazoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorICogQHZhbHVlOiBBICNn
Ym9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfc3BlbGxjaGVjayhXZWJLaXRET01IVE1MRWxl
bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1M
RWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdjMTAwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbWJlZEVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsMzQ4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbWJlZEVs
ZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTEVtYmVkRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxf
RU1CRURfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30K
KworV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRW1iZWRFbGVt
ZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTEVtYmVkRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHdyYXBIVE1MRW1iZWRF
bGVtZW50KFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNT
RVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRU1CRURfRUxFTUVO
VChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfRU1CRURfRUxFTUVOVCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9
IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRh
cmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRp
bmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNj
cmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2Fk
ZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
ICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9l
bWJlZF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRh
cmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBp
ZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfZW1i
ZWRfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVy
ID0gd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAg
IGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxl
bWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VC
S0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkp
CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdOLAorICAgIFBST1BfSEVJR0hU
LAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1NSQywKKyAgICBQUk9QX1RZUEUsCisgICAgUFJP
UF9XSURUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50
X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxFbWJl
ZEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRU1CRURfRUxFTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9oZWlnaHQoc2VsZiwg
Z192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X25hbWUoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9TUkM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9zcmMo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRf
dHlwZV9hdHRyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9lbWJlZF9l
bGVtZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxm
ID0gV0VCS0lUX0RPTV9IVE1MX0VNQkVEX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X2FsaWduKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X2hl
aWdodChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVu
dF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9lbWJlZF9l
bGVtZW50X2dldF9zcmMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQ
RToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2Vt
YmVkX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0
RE9NSFRNTEVtYmVkRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
c2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FM
SUdOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwK
KyAgICAgICAgICAgICJIVE1MRW1iZWRFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MRW1iZWRFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiaGVpZ2h0
IiwKKyAgICAgICAgICAgICJIVE1MRW1iZWRFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnbG9uZyBIVE1MRW1iZWRFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICBH
X01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxFbWJlZEVsZW1lbnQ6
bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVtYmVkRWxlbWVudDpu
YW1lIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NSQywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJzcmMiLAorICAgICAgICAgICAgIkhUTUxFbWJlZEVsZW1lbnQ6c3Jj
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRW1iZWRFbGVtZW50OnNyYyIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxFbWJlZEVsZW1lbnQ6dHlwZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEVtYmVkRWxlbWVudDp0eXBlIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAg
ICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTEVtYmVkRWxlbWVudDp3aWR0aCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MRW1iZWRFbGVtZW50OndpZHRoIiwK
KyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9l
bWJlZF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2VtYmVkX2Vs
ZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEVt
YmVkRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFs
aWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfZW1i
ZWRfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6aGVpZ2h0QXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxFbWJl
ZEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9FTUJFRF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6aGVpZ2h0QXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTEVtYmVkRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxFbWJl
ZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxF
bWJlZEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJF
RF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbWJlZF9l
bGVtZW50X3NldF9zcmMoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRW1i
ZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3Jj
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2VtYmVk
X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVt
ZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
RW1iZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
dHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2Vt
YmVkX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6d2lkdGhBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MRW1iZWRF
bGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
RU1CRURfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0ciwgdmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjBkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYm
ICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtp
dGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTEVtYmVkRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxFbWJlZEVsZW1l
bnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5l
cy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRU1C
RURfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRU1CRURfRUxFTUVOVChvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9FTUJFRF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9IVE1MX0VNQkVEX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRU1CRURfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0hUTUxfRU1CRURfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTUJFRF9FTEVNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19IVE1MX0VNQkVEX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRU1CRURfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9FTUJFRF9FTEVNRU5UX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0VNQkVEX0VMRU1FTlQsIFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRDbGFzcykpCisKK3N0cnVj
dCBfV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQg
cGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50
Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X2Fs
aWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Vt
YmVkX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3Nl
dF9hbGlnbihXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9oZWlnaHQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9l
bGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X2hlaWdodDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9o
ZWlnaHQoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0
X25hbWUoV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEVtYmVkRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01I
VE1MRW1iZWRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEVtYmVkRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfc3JjKFdlYktp
dERPTUhUTUxFbWJlZEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9l
bWJlZF9lbGVtZW50X3NldF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVtYmVkRWxl
bWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxFbWJlZEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2VtYmVkX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
RW1iZWRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0
RE9NSFRNTEVtYmVkRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Vt
YmVkX2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRW1i
ZWRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRN
TEVtYmVkRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEVtYmVkRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJ
VF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF93aWR0aChXZWJL
aXRET01IVE1MRW1iZWRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
ZW1iZWRfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEVtYmVk
RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEVtYmVk
RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbWJl
ZEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiOGRiMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEVtYmVkRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxFbWJlZEVsZW1l
bnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRW1iZWRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxFbWJlZEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitX
ZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiB3cmFwSFRNTEVtYmVkRWxlbWVudChXZWJDb3JlOjpI
VE1MRW1iZWRFbGVtZW50Kik7CitXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTEVtYmVkRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudCogY29yZShX
ZWJLaXRET01IVE1MRW1iZWRFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxFbWJlZEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNzgzZWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMzY3IEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdl
dC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxDb2xsZWN0aW9uUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVZhbGlkaXR5U3RhdGVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRVbnN0YWJsZS5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfRklFTERfU0VUX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmop
KSk7Cit9CisKK1dlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRN
TEZpZWxkU2V0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MRmllbGRTZXRFbGVt
ZW50KiB3cmFwSFRNTEZpZWxkU2V0RWxlbWVudChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50
KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVs
bHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQp
OworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxGaWVsZFNldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29y
ZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxGaWVsZFNldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZpZWxk
X3NldF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwg
Y29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElm
YWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0
bWxfZmllbGRfc2V0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
aHRtbF9maWVsZF9zZXRfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVG
SU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQsIHdlYmtpdF9k
b21faHRtbF9maWVsZF9zZXRfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwg
R19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9ESVNBQkxFRCwKKyAgICBQUk9QX0ZPUk0sCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfVFlQ
RSwKKyAgICBQUk9QX0VMRU1FTlRTLAorICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICBQUk9Q
X1ZBTElESVRZLAorICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorfTsKKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfRklFTERfU0VUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X3NldF9kaXNhYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9i
b29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRN
TF9GSUVMRF9TRVRfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7
CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk06CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9m
b3JtKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxl
bWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBF
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZmll
bGRfc2V0X2VsZW1lbnRfZ2V0X3NldF90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0VMRU1FTlRTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZWxlbWVudHMoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lMTF9WQUxJREFURToKKyAgICAgICAgZ192YWx1
ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dl
dF93aWxsX3ZhbGlkYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZB
TElESVRZOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9maWVsZF9zZXRfZWxlbWVudF9nZXRfdmFsaWRpdHkoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfVkFMSURBVElPTl9NRVNTQUdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3ZhbGlk
YXRpb25fbWVzc2FnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MRmllbGRT
ZXRFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfc2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X2ZpZWxkX3NldF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNB
QkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGlzYWJs
ZWQiLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNldEVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEZpZWxkU2V0RWxlbWVudDpkaXNhYmxlZCIs
CisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgImZvcm0iLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNldEVsZW1lbnQ6
Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCog
SFRNTEZpZWxkU2V0RWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9I
VE1MX0ZPUk1fRUxFTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudDpuYW1l
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRmllbGRTZXRFbGVtZW50Om5h
bWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MRmllbGRTZXRFbGVtZW50
OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTEZpZWxkU2V0RWxlbWVu
dDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRUxFTUVOVFMsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAiZWxlbWVudHMiLAorICAgICAgICAgICAgIkhUTUxGaWVs
ZFNldEVsZW1lbnQ6ZWxlbWVudHMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01I
VE1MQ29sbGVjdGlvbiogSFRNTEZpZWxkU2V0RWxlbWVudDplbGVtZW50cyIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lMTF9WQUxJREFURSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAid2lsbC12YWxpZGF0ZSIsCisg
ICAgICAgICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudDp3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTEZpZWxkU2V0RWxlbWVudDp3aWxsLXZhbGlkYXRl
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMSURJVFksCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAidmFsaWRpdHkiLAorICAgICAgICAgICAgIkhUTUxGaWVsZFNl
dEVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01WYWxp
ZGl0eVN0YXRlKiBIVE1MRmllbGRTZXRFbGVtZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWxpZGF0aW9uLW1lc3NhZ2Ui
LAorICAgICAgICAgICAgIkhUTUxGaWVsZFNldEVsZW1lbnQ6dmFsaWRhdGlvbi1tZXNzYWdlIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxGaWVsZFNldEVsZW1lbnQ6dmFsaWRh
dGlvbi1tZXNzYWdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3Nl
dF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRt
bF9maWVsZF9zZXRfZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MRmllbGRTZXRF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VU
X0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PmNoZWNrVmFsaWRpdHkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhU
TUxGaWVsZFNldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRXJyb3IgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoZXJyb3IpOworICAgIGl0ZW0tPnNldEN1c3RvbVZhbGlkaXR5
KGNvbnZlcnRlZEVycm9yKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ZpZWxkX3Nl
dF9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VUX0VMRU1FTlQoc2Vs
ZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3Nl
dF9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VU
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0ciwgdmFsdWUpOworfQorCitXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZm9ybShX
ZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfRklFTERfU0VUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmZvcm0oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9uYW1l
KFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZpZWxkX3Nl
dF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VU
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9zZXRfdHlwZShXZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklF
TERfU0VUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitX
ZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50
X2dldF9lbGVtZW50cyhXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VUX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+ZWxlbWVudHNGb3JOYXRpdmVCaW5kaW5ncygpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfRklFTERfU0VUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRmll
bGRTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPndpbGxWYWxpZGF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dl
YktpdERPTVZhbGlkaXR5U3RhdGUqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9n
ZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpWYWxpZGl0eVN0YXRlPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+dmFsaWRpdHkoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9l
bGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnZhbGlkYXRpb25NZXNzYWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRmllbGRT
ZXRFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjZjFmZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3Ig
Ik9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UICAgICAgICAgICAgKHdl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfRklFTERfU0VUX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRklFTERfU0VUX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfRklFTERfU0VUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRklFTERfU0VUX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0ZJRUxEX1NFVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZJRUxEX1NFVF9F
TEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Zvcm06CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50
X2dldF9mb3JtKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVs
ZFNldEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OGU1ZWIzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFByaXZh
dGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MRmllbGRTZXRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxG
aWVsZFNldEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50KiB3cmFwSFRNTEZpZWxkU2V0RWxlbWVudChXZWJDb3JlOjpIVE1MRmllbGRT
ZXRFbGVtZW50Kik7CitXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudCopOworV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudCogY29y
ZShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxG
aWVsZFNldEVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjEzOWYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRV
bnN0YWJsZS5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRVbnN0YWJsZV9oCisjZGVm
aW5lIFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfY2hlY2tfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfY2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9NSFRN
TEZpZWxkU2V0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZpZWxk
X3NldF9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZpZWxkU2V0RWxlbWVudAorICogQGVycm9yOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZmllbGRf
c2V0X2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9maWVsZF9zZXRfZWxlbWVudF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZpZWxkU2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxGaWVsZFNl
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxl
bWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxl
bWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRf
c2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0
X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9uYW1l
KFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRmllbGRTZXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9maWVs
ZF9zZXRfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9maWVsZF9z
ZXRfZWxlbWVudF9nZXRfc2V0X3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZpZWxk
U2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3Nl
dF9lbGVtZW50X2dldF9zZXRfdHlwZShXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X2VsZW1l
bnRzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhUTUxDb2xsZWN0aW9uCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xs
ZWN0aW9uKgord2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dldF9lbGVtZW50cyhX
ZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFu
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0
RE9NSFRNTEZpZWxkU2V0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2ZpZWxkX3NldF9lbGVtZW50X2dldF92YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRmllbGRTZXRFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIFdlYktpdERPTVZhbGlkaXR5U3RhdGUqCit3ZWJraXRfZG9tX2h0bWxfZmllbGRf
c2V0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVudF9nZXRfdmFs
aWRhdGlvbl9tZXNzYWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGaWVsZFNldEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9maWVsZF9zZXRfZWxlbWVu
dF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERPTUhUTUxGaWVsZFNldEVsZW1lbnQqIHNl
bGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50VW5zdGFibGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9u
dEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2EwNDIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudC5jcHAKQEAgLTAsMCArMSwy
NDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9udEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1l
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9udEVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIG9i
aikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxFTUVOVChraXQoc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEZvbnRFbGVt
ZW50KiBjb3JlKFdlYktpdERPTUhUTUxGb250RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhU
TUxGb250RWxlbWVudCogd3JhcEhUTUxGb250RWxlbWVudChXZWJDb3JlOjpIVE1MRm9udEVsZW1l
bnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX0hUTUxfRk9OVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
SFRNTF9GT05UX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfZm9udF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFj
b3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRm9udEVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQt
PmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfZm9udF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9v
bGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxGb250
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGb250RWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZl
bnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Vi
a2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRk
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
aHRtbF9mb250X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MRm9udEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9m
b250X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ09MT1IsCisgICAg
UFJPUF9GQUNFLAorICAgIFBST1BfU0laRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9mb250X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZPTlRfRUxF
TUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X0NPTE9SOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3NldF9jb2xvcihz
ZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0ZBQ0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X2Zh
Y2Uoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9TSVpFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X3Nl
dF9zaXplKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfRk9OVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2NvbG9yKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZBQ0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2ZhY2Uoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfc2l6ZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVt
ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFz
cykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJl
cXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X2h0bWxfZm9udF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0NPTE9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImNvbG9yIiwKKyAgICAgICAgICAgICJIVE1MRm9udEVsZW1lbnQ6Y29sb3IiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb250RWxlbWVudDpjb2xvciIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9GQUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImZhY2UiLAorICAgICAgICAgICAgIkhUTUxGb250RWxlbWVudDpmYWNlIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRm9udEVsZW1lbnQ6ZmFjZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9TSVpFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgInNpemUiLAorICAgICAgICAgICAgIkhUTUxGb250RWxlbWVudDpzaXplIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRm9udEVsZW1lbnQ6c2l6ZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRN
TEZvbnRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2NvbG9yKFdlYktpdERP
TUhUTUxGb250RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0ZPTlRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvbnRFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpjb2xvckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X2NvbG9yKFdlYktpdERPTUhUTUxGb250RWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9GT05UX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmNvbG9yQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfZmFjZShXZWJLaXRET01IVE1MRm9udEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGb250RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
ZmFjZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9mb250X2VsZW1lbnRfc2V0X2ZhY2UoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPTlRfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTEZvbnRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6ZmFjZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRt
bF9mb250X2VsZW1lbnRfZ2V0X3NpemUoV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNpemVBdHRyKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50
X3NldF9zaXplKFdlYktpdERPTUhUTUxGb250RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT05UX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGb250RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNpemVBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxGb250RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjM5MDg3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb250RWxlbWVudC5oCkBA
IC0wLDAgKzEsMTA4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MRm9udEVsZW1lbnRfaAor
I2RlZmluZSBXZWJLaXRET01IVE1MRm9udEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9OVF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtp
dF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX0ZPTlRfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT05UX0VMRU1FTlQsIFdlYktpdERPTUhU
TUxGb250RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GT05UX0VMRU1FTlRfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfRk9OVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRm9udEVsZW1lbnRDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0ZPTlRfRUxFTUVOVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT05U
X0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0ZPTlRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GT05UX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfRk9OVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRm9udEVsZW1lbnRD
bGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50IHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxGb250RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVu
dF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9mb250X2Vs
ZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxl
bWVudF9nZXRfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2NvbG9yKFdlYktpdERPTUhUTUxGb250RWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfY29sb3I6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb250X2VsZW1l
bnRfc2V0X2NvbG9yKFdlYktpdERPTUhUTUxGb250RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9mYWNl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb250RWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZm9udF9l
bGVtZW50X2dldF9mYWNlKFdlYktpdERPTUhUTUxGb250RWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfZmFjZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MRm9udEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9zZXRfZmFjZShXZWJL
aXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfc2l6ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MRm9udEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfc2l6ZShX
ZWJLaXRET01IVE1MRm9udEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9mb250X2VsZW1lbnRfc2V0X3NpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvbnRF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X3NpemUoV2ViS2l0RE9NSFRNTEZvbnRFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYg
LyogV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZv
bnRFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9udEVsZW1lbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5NWFmZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEZvbnRFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxGb250RWxlbWVudFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9udEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NSFRNTEZvbnRFbGVtZW50KiB3cmFwSFRNTEZvbnRFbGVtZW50KFdlYkNvcmU6OkhUTUxGb250
RWxlbWVudCopOworV2ViS2l0RE9NSFRNTEZvbnRFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEZv
bnRFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MRm9udEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRN
TEZvbnRFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxGb250RWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjAyNDJjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxG
b3JtRWxlbWVudC5jcHAKQEAgLTAsMCArMSw2MzggQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
Q29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTUhUTUxGb3JtRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRk9STV9FTEVNRU5UKGtpdChz
dGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Kj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50KiB3cmFwSFRNTEZvcm1FbGVtZW50KFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9GT1JNX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9IVE1MX0ZPUk1fRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBp
ZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxG
b3JtRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09i
amVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29y
ZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TEZvcm1FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19P
QkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJl
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRE
T01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQg
PSB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNl
LT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2FkZF9l
dmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVG
SU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCwgd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1F
TlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BQ0NFUFRf
Q0hBUlNFVCwKKyAgICBQUk9QX0FDVElPTiwKKyAgICBQUk9QX0FVVE9DT01QTEVURSwKKyAgICBQ
Uk9QX0VOQ1RZUEUsCisgICAgUFJPUF9FTkNPRElORywKKyAgICBQUk9QX01FVEhPRCwKKyAgICBQ
Uk9QX05BTUUsCisgICAgUFJPUF9OT19WQUxJREFURSwKKyAgICBQUk9QX1RBUkdFVCwKKyAgICBQ
Uk9QX0VMRU1FTlRTLAorICAgIFBST1BfTEVOR1RILAorICAgIFBST1BfQVVUT0NPUlJFQ1QsCisg
ICAgUFJPUF9BVVRPQ0FQSVRBTElaRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVO
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FD
Q0VQVF9DSEFSU0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9h
Y2NlcHRfY2hhcnNldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0FDVElPTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9zZXRfYWN0aW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NPTVBMRVRFOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkNUWVBF
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9lbmN0eXBlKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfRU5DT0RJTkc6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2Vu
Y29kaW5nKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTUVUSE9EOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X3NldF9tZXRob2Qoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZm9y
bV9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9fVkFMSURBVEU6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X25vX3ZhbGlkYXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jv
b2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RBUkdFVDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfdGFyZ2V0KHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVU
T0NPUlJFQ1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9j
b3JyZWN0KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FVVE9DQVBJVEFMSVpFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X3NldF9hdXRvY2FwaXRhbGl6ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FDQ0VQVF9DSEFSU0VU
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9y
bV9lbGVtZW50X2dldF9hY2NlcHRfY2hhcnNldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9BQ1RJT046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2FjdGlvbihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09NUExFVEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2F1dG9jb21wbGV0
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkNUWVBFOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2dldF9lbmN0eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VOQ09E
SU5HOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X2dldF9lbmNvZGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NRVRIT0Q6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X21ldGhvZChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX05PX1ZBTElEQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9ub192YWxpZGF0
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRf
Z2V0X3RhcmdldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTEVNRU5U
UzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZm9y
bV9lbGVtZW50X2dldF9lbGVtZW50cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9MRU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9BVVRPQ09SUkVDVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYXV0b2NvcnJlY3Qoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NBUElUQUxJWkU6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0
X2F1dG9jYXBpdGFsaXplKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAg
IGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVu
dF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUNDRVBUX0NIQVJTRVQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWNjZXB0LWNoYXJzZXQiLAor
ICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDphY2NlcHQtY2hhcnNldCIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZvcm1FbGVtZW50OmFjY2VwdC1jaGFyc2V0IiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0FDVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJhY3Rpb24iLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDphY3Rpb24i
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb3JtRWxlbWVudDphY3Rpb24i
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT0NPTVBMRVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAiSFRNTEZv
cm1FbGVtZW50OmF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTEZvcm1FbGVtZW50OmF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9FTkNUWVBF
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImVuY3R5cGUiLAor
ICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDplbmN0eXBlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MRm9ybUVsZW1lbnQ6ZW5jdHlwZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9FTkNPRElORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJl
bmNvZGluZyIsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50OmVuY29kaW5nIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRm9ybUVsZW1lbnQ6ZW5jb2RpbmciLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTUVUSE9ELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgIm1ldGhvZCIsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50Om1ldGhvZCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZvcm1FbGVtZW50Om1ldGhvZCIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDpuYW1lIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRm9ybUVsZW1lbnQ6bmFtZSIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9OT19WQUxJREFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAibm8tdmFsaWRhdGUiLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxl
bWVudDpuby12YWxpZGF0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1M
Rm9ybUVsZW1lbnQ6bm8tdmFsaWRhdGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEFSR0VULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRhcmdldCIsCisgICAg
ICAgICAgICAiSFRNTEZvcm1FbGVtZW50OnRhcmdldCIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnY2hhciogSFRNTEZvcm1FbGVtZW50OnRhcmdldCIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9FTEVN
RU5UUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJlbGVtZW50
cyIsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50OmVsZW1lbnRzIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIEhUTUxGb3JtRWxlbWVudDplbGVt
ZW50cyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVO
R1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAor
ICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnbG9uZyBIVE1MRm9ybUVsZW1lbnQ6bGVuZ3RoIiwKKyAgICAgICAgICAgIEdfTUlOTE9O
RywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQVVUT0NPUlJFQ1QsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImF1dG9jb3JyZWN0IiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVs
ZW1lbnQ6YXV0b2NvcnJlY3QiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRN
TEZvcm1FbGVtZW50OmF1dG9jb3JyZWN0IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9DQVBJ
VEFMSVpFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImF1dG9j
YXBpdGFsaXplIiwKKyAgICAgICAgICAgICJIVE1MRm9ybUVsZW1lbnQ6YXV0b2NhcGl0YWxpemUi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxGb3JtRWxlbWVudDphdXRvY2Fw
aXRhbGl6ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2luaXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3N1
Ym1pdChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnN1Ym1pdCgpOworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfcmVzZXQoV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5yZXNldCgpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jaGVja1ZhbGlkaXR5
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X3JlcXVlc3RfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoUkVRVUVTVF9BVVRPQ09NUExFVEUpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnJlcXVlc3RBdXRvY29t
cGxldGUoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlJlcXVlc3QgQXV0b2NvbXBsZXRlIikKKyNlbmRpZiAvKiBF
TkFCTEUoUkVRVUVTVF9BVVRPQ09NUExFVEUpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X2dldF9hY2NlcHRfY2hhcnNldChXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWNj
ZXB0X2NoYXJzZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hY2NlcHRfY2hhcnNldChXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjphY2NlcHRfY2hhcnNldEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2FjdGlvbihXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjph
Y3Rpb25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfZm9ybV9lbGVtZW50X3NldF9hY3Rpb24oV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1f
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6YWN0aW9uQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF1dG9jb21wbGV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF1dG9jb21wbGV0ZShjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbmN0eXBlKFdlYktp
dERPTUhUTUxGb3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0ZPUk1fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmVuY3R5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9lbmN0eXBlKFdlYktpdERPTUhU
TUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0RW5jdHlwZShjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbmNvZGluZyhXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5lbmN0eXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jb2RpbmcoV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRFbmN0eXBlKGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X21ldGhvZChXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5tZXRob2QoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9tZXRob2QoV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRNZXRob2QoY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9G
T1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9ub192YWxpZGF0ZShX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6Om5vdmFsaWRhdGVBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X25vX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxG
b3JtRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0ZPUk1fRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpub3ZhbGlkYXRlQXR0ciwgdmFsdWUpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxG
b3JtRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZPUk1f
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjp0YXJnZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0ZPUk1fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6dGFyZ2V0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01I
VE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZWxlbWVudHMo
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZWxlbWVudHNG
b3JOYXRpdmVCaW5kaW5ncygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2xl
bmd0aChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxG
b3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQg
PSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY29ycmVjdChXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NB
UElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlQoc2Vs
ZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+YXV0b2NvcnJlY3QoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFuZCBBdXRv
Y2FwaXRhbGl6ZSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkgKi8KK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hdXRvY29ycmVjdChXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShJ
T1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9GT1JNX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRBdXRvY29ycmVjdCh2YWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVj
dCBBbmQgQXV0b2NhcGl0YWxpemUiKQorI2VuZGlmIC8qIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1Rf
QU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9nZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxm
KQoreworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXV0b2NhcGl0YWxpemUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQg
QXV0b2NhcGl0YWxpemUiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShJT1NfQVVU
T0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJF
Q1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXV0b2NhcGl0YWxpemUoY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFsaXpl
IikKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkg
Ki8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkMzQ0Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50LmgKQEAgLTAsMCArMSwyMTQg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJ
VERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9u
bHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNl
bmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudF9oCisjZGVmaW5lIFdlYktp
dERPTUhUTUxGb3JtRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2Zv
cm1fZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRk9STV9FTEVN
RU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9G
T1JNX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfRk9STV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9F
TEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZPUk1fRUxFTUVOVF9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9GT1JNX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudENsYXNzKSkKKworc3Ry
dWN0IF9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50
Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfdHlw
ZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3N1Ym1pdDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zdWJtaXQoV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X3Jlc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3Jlc2V0KFdl
YktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2Zvcm1fZWxlbWVudF9nZXRfYWNjZXB0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2FjY2VwdF9jaGFyc2V0
KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9zZXRfYWNjZXB0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2FjY2VwdF9jaGFyc2V0
KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hY3Rpb246CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0
X2FjdGlvbihXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2FjdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYWN0aW9uKFdlYktpdERP
TUhUTUxGb3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbmN0eXBlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbmN0eXBl
KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jdHlwZShXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZW5jb2Rpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2VuY29kaW5nKFdl
YktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2Zvcm1fZWxlbWVudF9zZXRfZW5jb2Rpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X2VuY29kaW5nKFdlYktpdERPTUhUTUxG
b3JtRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9tZXRob2Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X21ldGhvZChXZWJLaXRE
T01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3Jt
X2VsZW1lbnRfc2V0X21ldGhvZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfbWV0aG9kKFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxGb3JtRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRf
bmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRf
dGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X2dldF90YXJnZXQoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF90YXJnZXQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0
X3RhcmdldChXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZWxlbWVudHM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVu
dF9nZXRfZWxlbWVudHMoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLwor
V0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfbGVuZ3Ro
KFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODI5Y2Q1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01IVE1MRm9ybUVsZW1lbnQqIHdyYXBIVE1MRm9ybUVsZW1lbnQoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50Kik7CitXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxGb3JtRWxlbWVudCogY29yZShXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxG
b3JtRWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGb3JtRWxlbWVudFVuc3RhYmxlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkNjI0ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDEzOCBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudFVuc3RhYmxl
X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfY2hlY2tfdmFsaWRpdHk6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfY2hlY2tfdmFsaWRpdHkoV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X3JlcXVlc3RfYXV0b2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxG
b3JtRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3JlcXVlc3RfYXV0b2NvbXBsZXRlKFdl
YktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2Zvcm1fZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxGb3JtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2Zvcm1f
ZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X25vX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxGb3JtRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9ub192YWxpZGF0ZShXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0
X25vX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3NldF9ub192YWxpZGF0
ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY29ycmVjdDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9v
bGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9N
SFRNTEZvcm1FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X3NldF9hdXRvY29ycmVjdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRf
YXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfYXV0b2NhcGl0
YWxpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9hdXRvY2FwaXRhbGl6
ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9mb3JtX2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxGb3JtRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9l
bGVtZW50X3NldF9hdXRvY2FwaXRhbGl6ZShXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxGb3JtRWxl
bWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjcyNmFkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsNTE2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NRG9jdW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5v
ZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNv
bnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEZyYW1l
RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6
Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MRnJhbWVFbGVt
ZW50KiB3cmFwSFRNTEZyYW1lRWxlbWVudChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9IVE1MX0ZSQU1FX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0ZS
QU1FX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
ZnJhbWVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRp
c3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7
CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRnJh
bWVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZyYW1lRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2FkZF9l
dmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50LCB3ZWJraXRfZG9t
X2h0bWxfZnJhbWVfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBM
RU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9GUkFN
RV9CT1JERVIsCisgICAgUFJPUF9MT05HX0RFU0MsCisgICAgUFJPUF9NQVJHSU5fSEVJR0hULAor
ICAgIFBST1BfTUFSR0lOX1dJRFRILAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX05PX1JFU0la
RSwKKyAgICBQUk9QX1NDUk9MTElORywKKyAgICBQUk9QX1NSQywKKyAgICBQUk9QX0NPTlRFTlRf
RE9DVU1FTlQsCisgICAgUFJPUF9DT05URU5UX1dJTkRPVywKKyAgICBQUk9QX1dJRFRILAorICAg
IFBST1BfSEVJR0hULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2Vs
ZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRN
TEZyYW1lRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9GUkFNRV9FTEVNRU5UKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRlJBTUVfQk9S
REVSOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfZnJhbWVfYm9y
ZGVyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfTE9OR19ERVNDOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxl
bWVudF9zZXRfbG9uZ19kZXNjKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFSR0lOX0hFSUdIVDoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl9oZWlnaHQoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVJHSU5f
V0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9tYXJnaW5f
d2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVu
dF9zZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX05PX1JFU0laRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2Zy
YW1lX2VsZW1lbnRfc2V0X25vX3Jlc2l6ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JPTExJTkc6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9zY3JvbGxpbmcoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9zcmMoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VM
RU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9GUkFNRV9CT1JERVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9mcmFtZV9ib3JkZXIoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9OR19ERVNDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19kZXNj
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BUkdJTl9IRUlHSFQ6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X2dldF9tYXJnaW5faGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX01BUkdJTl9XSURUSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbmFtZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT19SRVNJWkU6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dl
dF9ub19yZXNpemUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xM
SU5HOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
ZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xsaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NSQzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DT05URU5UX0RPQ1VNRU5UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50X2RvY3Vt
ZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRFTlRfV0lORE9X
OgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFt
ZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRvdyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9jbGFzc19p
bml0KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9mcmFt
ZV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9GUkFNRV9CT1JERVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiZnJhbWUtYm9yZGVyIiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVtZW50OmZy
YW1lLWJvcmRlciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEZyYW1lRWxl
bWVudDpmcmFtZS1ib3JkZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTE9OR19ERVNDLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxvbmctZGVzYyIsCisgICAgICAg
ICAgICAiSFRNTEZyYW1lRWxlbWVudDpsb25nLWRlc2MiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxGcmFtZUVsZW1lbnQ6bG9uZy1kZXNjIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X01BUkdJTl9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAibWFyZ2luLWhlaWdodCIsCisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVudDptYXJnaW4t
aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRnJhbWVFbGVtZW50
Om1hcmdpbi1oZWlnaHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUFSR0lOX1dJRFRILAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1hcmdpbi13aWR0aCIsCisgICAg
ICAgICAgICAiSFRNTEZyYW1lRWxlbWVudDptYXJnaW4td2lkdGgiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxGcmFtZUVsZW1lbnQ6bWFyZ2luLXdpZHRoIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTEZyYW1lRWxlbWVudDpuYW1lIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MRnJhbWVFbGVtZW50Om5hbWUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTk9fUkVTSVpFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAg
ICAgICAgICJuby1yZXNpemUiLAorICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQ6bm8tcmVz
aXplIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxGcmFtZUVsZW1lbnQ6
bm8tcmVzaXplIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTElORywKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzY3JvbGxpbmciLAorICAgICAgICAgICAg
IkhUTUxGcmFtZUVsZW1lbnQ6c2Nyb2xsaW5nIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MRnJhbWVFbGVtZW50OnNjcm9sbGluZyIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TUkMs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3JjIiwKKyAgICAg
ICAgICAgICJIVE1MRnJhbWVFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTEZyYW1lRWxlbWVudDpzcmMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OVEVOVF9E
T0NVTUVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJjb250
ZW50LWRvY3VtZW50IiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVtZW50OmNvbnRlbnQtZG9j
dW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Eb2N1bWVudCogSFRNTEZy
YW1lRWxlbWVudDpjb250ZW50LWRvY3VtZW50IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9ET0NVTUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0NPTlRFTlRfV0lORE9XLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgImNvbnRlbnQtd2luZG93IiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVF
bGVtZW50OmNvbnRlbnQtd2luZG93IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
RE9NV2luZG93KiBIVE1MRnJhbWVFbGVtZW50OmNvbnRlbnQtd2luZG93IiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9ET01fV0lORE9XLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKAorICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MRnJhbWVFbGVt
ZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTEZyYW1lRWxlbWVu
dDp3aWR0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAg
ICAgICAgICJIVE1MRnJhbWVFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdsb25nIEhUTUxGcmFtZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywg
R19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfaW5pdChXZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9mcmFtZV9i
b3JkZXIoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZyYW1lYm9yZGVyQXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X2Zy
YW1lX2JvcmRlcihXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpmcmFtZWJv
cmRlckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2MoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmxvbmdkZXNj
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2Zy
YW1lX2VsZW1lbnRfc2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1F
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpsb25nZGVzY0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9tYXJnaW5faGVpZ2h0KFdlYktpdERPTUhUTUxG
cmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFN
RV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjptYXJnaW5oZWlnaHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX2hlaWdodChXZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptYXJnaW5oZWlnaHRBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRf
bWFyZ2luX3dpZHRoKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptYXJnaW53aWR0aEF0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X3NldF9tYXJnaW5fd2lkdGgoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
RnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
bWFyZ2lud2lkdGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5n
ZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9GUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X25vX3Jlc2l6ZShXZWJLaXRET01IVE1M
RnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJB
TUVfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5v
cmVzaXplQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9zZXRfbm9fcmVzaXplKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFN
RV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpub3Jlc2l6ZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9zY3JvbGxpbmcoV2ViS2l0RE9NSFRNTEZyYW1lRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnNjcm9sbGluZ0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9zY3JvbGxpbmcoV2ViS2l0RE9NSFRNTEZyYW1lRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6c2Nyb2xsaW5nQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1M
RnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJB
TUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRy
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChz
ZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEZy
YW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNy
Y0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0RE9NRG9jdW1lbnQqIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50X2RvY3VtZW50KFdlYktpdERPTUhUTUxG
cmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFN
RV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRlbnREb2N1bWVudCgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURP
TVdpbmRvdyogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfd2luZG93
KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9GUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJh
bWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpET01XaW5kb3c+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jb250ZW50V2lu
ZG93KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERP
TUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9GUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPndp
ZHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2Zy
YW1lX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5oZWlnaHQoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZy
YW1lRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMDJkYzQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQuaApAQCAtMCwwICsxLDIz
NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VC
S0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAi
T25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudF9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0
bWxfZnJhbWVfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRlJB
TUVfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFNRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MRnJh
bWVFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VMRU1FTlRfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRlJBTUVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudENsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfRUxFTUVOVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GUkFN
RV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlRfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfRlJBTUVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9GUkFNRV9F
TEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX0VMRU1FTlQsIFdlYktpdERPTUhUTUxGcmFtZUVs
ZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCB7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJL
aXRET01IVE1MRnJhbWVFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9mcmFtZV9ib3JkZXIo
V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2ZyYW1lX2VsZW1lbnRfc2V0X2ZyYW1lX2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9mcmFtZV9ib3JkZXIo
V2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbG9uZ19kZXNjOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1l
bnRfZ2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19kZXNjOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0
X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9tYXJn
aW5faGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl9oZWlnaHQoV2ViS2l0RE9NSFRNTEZyYW1lRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0
X21hcmdpbl9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX2hlaWdodChXZWJLaXRET01IVE1MRnJhbWVF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9mcmFtZV9lbGVtZW50X2dldF9tYXJnaW5fd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX3dp
ZHRoKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9tYXJnaW5fd2lkdGg6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX3dp
ZHRoKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X25hbWU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVu
dF9nZXRfbmFtZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9uYW1lKFdlYktp
dERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X25vX3Jlc2l6ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1l
bnRfZ2V0X25vX3Jlc2l6ZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfbm9fcmVzaXplOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4K
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRf
c2V0X25vX3Jlc2l6ZShXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3Njcm9s
bGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50X2dldF9zY3JvbGxpbmcoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X3Njcm9sbGlu
ZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9l
bGVtZW50X3NldF9zY3JvbGxpbmcoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVu
dF9nZXRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9zZXRfc3JjOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRf
c2V0X3NyYyhXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50
X2RvY3VtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50CisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVu
dF9nZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93aW5k
b3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRE9NV2luZG93CisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NRE9NV2luZG93Kgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0
X2NvbnRlbnRfd2luZG93KFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoq
LworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X3dp
ZHRoKFdlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTEZyYW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9B
UEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0
RE9NSFRNTEZyYW1lRWxlbWVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
ZWJLaXRET01IVE1MRnJhbWVFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1l
RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudFByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU4MjQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVu
dFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MRnJhbWVFbGVtZW50UHJpdmF0ZV9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGcmFtZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIHdyYXBIVE1MRnJhbWVFbGVtZW50KFdlYkNvcmU6OkhU
TUxGcmFtZUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQqIGtpdChXZWJDb3Jl
OjpIVE1MRnJhbWVFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50KiBjb3JlKFdl
YktpdERPTUhUTUxGcmFtZUVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MRnJhbWVTZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhNzFlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAKQEAgLTAsMCArMSwyMDggQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MRnJhbWVTZXRF
bGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9GUkFNRV9TRVRfRUxF
TUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29y
ZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTEZyYW1lU2V0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHdyYXBIVE1MRnJh
bWVTZXRFbGVtZW50KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfRlJB
TUVfU0VUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX1NF
VF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2Zy
YW1lX3NldF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3Jl
RXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVTZXRF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVTZXRF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQorewor
ICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxl
bWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBp
ZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NP
REUoV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2ZyYW1lX3Nl
dF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRF
UkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NPTFMsCisgICAgUFJP
UF9ST1dTLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVt
ZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxG
cmFtZVNldEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DT0xT
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X2NvbHMoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9ST1dTOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0
X3Jvd3Moc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogc2VsZiA9
IFdFQktJVF9ET01fSFRNTF9GUkFNRV9TRVRfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NPTFM6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfY29s
cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ST1dTOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1l
bnRfZ2V0X3Jvd3Moc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTEZyYW1lU2V0
RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9m
cmFtZV9zZXRfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09MUywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjb2xzIiwKKyAgICAg
ICAgICAgICJIVE1MRnJhbWVTZXRFbGVtZW50OmNvbHMiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxGcmFtZVNldEVsZW1lbnQ6Y29scyIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9S
T1dTLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInJvd3MiLAor
ICAgICAgICAgICAgIkhUTUxGcmFtZVNldEVsZW1lbnQ6cm93cyIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEZyYW1lU2V0RWxlbWVudDpyb3dzIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxG
cmFtZVNldEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2dldF9jb2xzKFdl
YktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9GUkFNRV9TRVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TEZyYW1lU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29sc0F0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfY29s
cyhXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVTZXRF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29sc0F0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9z
ZXRfZWxlbWVudF9nZXRfcm93cyhXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJvd3NB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfZnJh
bWVfc2V0X2VsZW1lbnRfc2V0X3Jvd3MoV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9GUkFN
RV9TRVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnJvd3NBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0YjUyNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9I
X0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdl
YmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MRnJhbWVTZXRFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21f
aHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfRlJBTUVfU0VUX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfRlJB
TUVfU0VUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxGcmFtZVNldEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0ZS
QU1FX1NFVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX1NF
VF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVt
ZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVu
dENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21f
aHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X2NvbHM6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEZyYW1lU2V0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X2Nv
bHMoV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9jb2xzOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxGcmFtZVNldEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X3NldF9jb2xz
KFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9lbGVtZW50X2dldF9yb3dzOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ZyYW1l
X3NldF9lbGVtZW50X2dldF9yb3dzKFdlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfcm93czoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9z
ZXRfZWxlbWVudF9zZXRfcm93cyhXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjM2YzYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxGcmFtZVNl
dEVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudFBy
aXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVTZXRFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxGcmFtZVNldEVsZW1lbnQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50KiB3cmFwSFRNTEZyYW1l
U2V0RWxlbWVudChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50Kik7CitXZWJLaXRET01IVE1M
RnJhbWVTZXRFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCopOworV2Vi
Q29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVt
ZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxG
cmFtZVNldEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxIUkVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjIwNThjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIUkVsZW1lbnQu
Y3BwCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxIUkVsZW1lbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01IVE1MSFJFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEhSRWxl
bWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSFJfRUxFTUVOVChraXQo
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTEhS
RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSFJFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJl
dHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhSRWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhU
TUxIUkVsZW1lbnQqIHdyYXBIVE1MSFJFbGVtZW50KFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGNv
cmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRf
RE9NX0hUTUxfSFJfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFJf
RUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9ocl9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MSFJFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhSRWxlbWVudCo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZv
ckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MSFJFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9ocl9l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VD
YXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MSFJFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9l
dmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAg
ICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9kaXNw
YXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9o
dG1sX2hyX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxIUkVsZW1l
bnQsIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVN
RU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0FMSUdOLAorICAgIFBST1BfTk9fU0hBREUsCisgICAgUFJPUF9TSVpFLAorICAgIFBS
T1BfV0lEVEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9z
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MSFJFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9fU0hBREU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9ub19zaGFkZShzZWxmLCBnX3ZhbHVlX2dl
dF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfc2l6ZShzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRI
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElH
TjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2hy
X2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X05PX1NIQURFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfaHJfZWxlbWVudF9nZXRfbm9fc2hhZGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3NpemUoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9jbGFzc19pbml0KFdl
YktpdERPTUhUTUxIUkVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3Nl
dF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
aHRtbF9ocl9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAg
ICAgICAgICAiSFRNTEhSRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTEhSRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OT19TSEFERSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibm8tc2hhZGUiLAor
ICAgICAgICAgICAgIkhUTUxIUkVsZW1lbnQ6bm8tc2hhZGUiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2Jvb2xlYW4gSFRNTEhSRWxlbWVudDpuby1zaGFkZSIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9TSVpFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNp
emUiLAorICAgICAgICAgICAgIkhUTUxIUkVsZW1lbnQ6c2l6ZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTEhSRWxlbWVudDpzaXplIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJ
RFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIndpZHRoIiwK
KyAgICAgICAgICAgICJIVE1MSFJFbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MSFJFbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9ocl9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfaHJfZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0hSX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0
X2FsaWduKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfbm9f
c2hhZGUoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0hSX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1M
SFJFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpub3NoYWRlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfbm9fc2hhZGUoV2ViS2l0RE9NSFRNTEhSRWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0hS
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6Om5vc2hhZGVBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfaHJfZWxlbWVudF9nZXRfc2l6ZShXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2l6ZUF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9zaXpl
KFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNpemVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0
RE9NSFRNTEhSRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0hSX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxIUkVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OndpZHRoQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxIUkVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFJf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTEhSRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OndpZHRoQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxIUkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJiMTdlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIUkVs
ZW1lbnQuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxE
SU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUg
aW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEhSRWxl
bWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIUkVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFJfRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfSFJfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IUl9FTEVNRU5ULCBXZWJLaXRET01IVE1M
SFJFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hSX0VMRU1FTlRfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfSFJfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEhSRWxlbWVudENsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfSFJfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IUl9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0hSX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFJfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9IUl9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hS
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxIUkVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0
RE9NSFRNTEhSRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MSFJFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxIUkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X2FsaWduKFdlYktp
dERPTUhUTUxIUkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ocl9l
bGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSFJFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9ocl9lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50
X2dldF9ub19zaGFkZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSFJFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X25vX3NoYWRlKFdlYktpdERPTUhUTUxIUkVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9ub19zaGFk
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSFJFbGVtZW50CisgKiBAdmFsdWU6IEEgI2di
b29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9ocl9lbGVt
ZW50X3NldF9ub19zaGFkZShXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3NpemU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEhSRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9n
ZXRfc2l6ZShXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaHJfZWxlbWVudF9zZXRfc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SFJFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9zaXplKFdlYktpdERPTUhUTUxIUkVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2hyX2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxIUkVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxIUkVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF93aWR0aDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSFJFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3Nl
dF93aWR0aChXZWJLaXRET01IVE1MSFJFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEhSRWxlbWVudF9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxIUkVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIUkVs
ZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1ZGUx
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhSRWxlbWVudFByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTUhUTUxIUkVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEhSRWxlbWVu
dFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSFJFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxIUkVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitXZWJLaXRET01IVE1MSFJFbGVtZW50KiB3cmFwSFRNTEhSRWxlbWVudChXZWJDb3JlOjpI
VE1MSFJFbGVtZW50Kik7CitXZWJLaXRET01IVE1MSFJFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TEhSRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEhSRWxlbWVudCogY29yZShXZWJLaXRET01IVE1M
SFJFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERP
TUhUTUxIUkVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kM2JkMWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZEVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEhlYWRFbGVt
ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTEhlYWRFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9I
RUFEX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisK
K1dlYkNvcmU6OkhUTUxIZWFkRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MSGVhZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIHdyYXBIVE1MSGVhZEVsZW1lbnQo
V2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxFTUVOVChnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTEhlYWRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVu
dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUs
IGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBH
Q2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpI
VE1MSGVhZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSGVh
ZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9yZW1v
dmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sK
KyAgICBXZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rh
cmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNl
LT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9o
ZWFkX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRf
bGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0
ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEhlYWRFbGVt
ZW50LCB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9F
TEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdF
VCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX1BST0ZJTEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaGVh
ZF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxIZWFkRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9IRUFEX0VMRU1FTlQob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9QUk9GSUxF
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X3NldF9wcm9maWxlKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSEVB
RF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfUFJPRklMRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2hlYWRfZWxlbWVudF9nZXRfcHJvZmlsZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2NsYXNzX2luaXQoV2Vi
S2l0RE9NSFRNTEhlYWRFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50
X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21faHRtbF9oZWFkX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BS
T0ZJTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicHJvZmls
ZSIsCisgICAgICAgICAgICAiSFRNTEhlYWRFbGVtZW50OnByb2ZpbGUiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxIZWFkRWxlbWVudDpwcm9maWxlIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MSGVh
ZEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX2hlYWRfZWxlbWVudF9nZXRfcHJvZmlsZShXZWJLaXRET01I
VE1MSGVhZEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9I
RUFEX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxIZWFkRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6cHJvZmlsZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfc2V0X3Byb2ZpbGUoV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0hFQURfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6cHJvZmlsZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3ZjJkOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9t
L3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEhlYWRF
bGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1M
X0hFQURfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9IRUFEX0VMRU1FTlQob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfSEVBRF9FTEVNRU5ULCBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9IRUFEX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFEX0VMRU1FTlQpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfSEVBRF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hFQURfRUxF
TUVOVCwgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TUhUTUxIZWFkRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MSGVhZEVsZW1lbnRDbGFzcyB7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfZ2V0X3Byb2ZpbGU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9oZWFkX2VsZW1lbnRfZ2V0
X3Byb2ZpbGUoV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X3NldF9wcm9maWxlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxIZWFkRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X3NldF9wcm9maWxlKFdlYktp
dERPTUhUTUxIZWFkRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxIZWFkRWxlbWVudF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxIZWFkRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjJmNTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUhUTUxIZWFkRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSGVhZEVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEhlYWRFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxIZWFkRWxlbWVudC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTUhUTUxIZWFkRWxlbWVudCogd3JhcEhUTUxIZWFkRWxlbWVudChX
ZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxIZWFkRWxlbWVudCoga2l0
KFdlYkNvcmU6OkhUTUxIZWFkRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEhlYWRFbGVtZW50KiBj
b3JlKFdlYktpdERPTUhUTUxIZWFkRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzIyNDljCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTcyIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVt
ZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9IRUFESU5HX0VMRU1FTlQo
a2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhU
TUxIZWFkaW5nRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSGVh
ZGluZ0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHdyYXBIVE1MSGVhZGluZ0VsZW1l
bnQoV2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0hFQURJTkdfRUxFTUVO
VChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRElOR19FTEVNRU5ULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9k
aXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVu
dCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZl
bnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEhlYWRpbmdFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50
Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2hlYWRpbmdf
ZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2Fw
dHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MSGVhZGlu
Z0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSGVhZGluZ0Vs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERP
TUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9
IHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZh
Y2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRf
YWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30K
KworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50LCB3
ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVN
RU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0FMSUdOLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2hlYWRpbmdf
ZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01I
VE1MSGVhZGluZ0VsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSEVBRElOR19FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJ
R046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfc2V0X2FsaWduKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9N
X0hUTUxfSEVBRElOR19FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1lbnRf
Y2xhc3NfaW5pdChXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNz
KQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVx
dWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
aHRtbF9oZWFkaW5nX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxIZWFkaW5nRWxlbWVudDph
bGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEhlYWRpbmdFbGVtZW50
OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9oZWFkaW5nX2VsZW1l
bnRfaW5pdChXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2hlYWRpbmdf
ZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRElOR19FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2hlYWRpbmdf
ZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURJTkdfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTEhlYWRpbmdFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEhlYWRpbmdFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzY4YWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxIZWFkaW5nRWxlbWVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAm
JiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJr
aXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdl
YktpdERPTUhUTUxIZWFkaW5nRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxIZWFkaW5n
RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9IRUFESU5HX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxl
bWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSEVBRElOR19FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0hFQURJTkdfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVt
ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0hFQURJTkdfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9IRUFESU5HX0VMRU1FTlQsIFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudENsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfSEVBRElOR19FTEVNRU5UKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0hF
QURJTkdfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9IRUFESU5HX0VMRU1F
TlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfSEVBRElOR19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1M
X0hFQURJTkdfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IRUFESU5HX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxIZWFkaW5nRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MSGVhZGlu
Z0VsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307
CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50Q2xhc3MgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVu
dF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9zZXRf
YWxpZ24oV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVt
ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MSGVhZGluZ0VsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMGViZTI0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEhlYWRpbmdF
bGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9IVE1MSGVhZGluZ0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTEhlYWRpbmdFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
SFRNTEhlYWRpbmdFbGVtZW50KiB3cmFwSFRNTEhlYWRpbmdFbGVtZW50KFdlYkNvcmU6OkhUTUxI
ZWFkaW5nRWxlbWVudCopOworV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTEhlYWRpbmdFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MSGVhZGluZ0VsZW1lbnQqIGNv
cmUoV2ViS2l0RE9NSFRNTEhlYWRpbmdFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudFByaXZhdGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OWI4NzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudC5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09i
amVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MSHRtbEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5j
bHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxIdG1s
RWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxIdG1sRWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBX
RUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2Rl
Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9N
SFRNTEh0bWxFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiB3cmFw
SFRNTEh0bWxFbGVtZW50KFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogY29yZU9iamVjdCkKK3sK
KyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9IVE1M
X0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0hUTUxfRUxFTUVOVCwg
ImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRf
ZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZl
bnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2
ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNU
KHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJp
bmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBk
ZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRf
YWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9o
dG1sX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfaHRtbF9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFj
ZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9y
ZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktp
dERPTUhUTUxIdG1sRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudCwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9WRVJTSU9OLAorICAgIFBST1BfTUFOSUZFU1QsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3NldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9IVE1MX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9WRVJTSU9OOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfaHRtbF9lbGVtZW50X3NldF92ZXJzaW9uKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFOSUZFU1Q6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfc2V0X21hbmlmZXN0KHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9odG1sX2h0bWxfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MSHRtbEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVkVS
U0lPTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2h0bWxfZWxlbWVudF9nZXRfdmVyc2lvbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NQU5JRkVTVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfbWFuaWZlc3Qoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9jbGFzc19pbml0
KFdlYktpdERPTUhUTUxIdG1sRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2h0bWxfZWxl
bWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9WRVJTSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZl
cnNpb24iLAorICAgICAgICAgICAgIkhUTUxIdG1sRWxlbWVudDp2ZXJzaW9uIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSHRtbEVsZW1lbnQ6dmVyc2lvbiIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9NQU5JRkVTVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJtYW5pZmVzdCIsCisgICAgICAgICAgICAiSFRNTEh0bWxFbGVtZW50Om1hbmlmZXN0
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSHRtbEVsZW1lbnQ6bWFuaWZl
c3QiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9pbml0
KFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
cmVxdWVzdCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2dldF92
ZXJzaW9uKFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0hUTUxfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TEh0bWxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2ZXJzaW9uQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9zZXRfdmVyc2lvbihX
ZWJLaXRET01IVE1MSHRtbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2ZXJzaW9uQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2h0bWxfZWxlbWVudF9nZXRfbWFu
aWZlc3QoV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfSFRNTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SHRtbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6bWFuaWZlc3RBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3NldF9tYW5pZmVzdChXZWJLaXRET01IVE1MSHRt
bEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSFRNTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjptYW5pZmVzdEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ZWQyYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0
ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEh0
bWxFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9I
VE1MX0hUTUxfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9IVE1MX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfSFRNTF9FTEVNRU5ULCBXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hUTUxfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9IVE1MX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFRNTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX0hUTUxfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9IVE1MX0VMRU1FTlQpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0hUTUxf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTUhUTUxIdG1sRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2dldF90eXBlKHZvaWQpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X3ZlcnNpb246CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRf
Z2V0X3ZlcnNpb24oV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3NldF92ZXJzaW9uOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxIdG1sRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X3NldF92ZXJzaW9uKFdl
YktpdERPTUhUTUxIdG1sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxIdG1sRWxlbWVudF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVt
ZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTA5MjMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudFByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTUhUTUxIdG1sRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSHRtbEVs
ZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEh0bWxFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxIdG1sRWxlbWVudC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxIdG1sRWxlbWVudCogd3JhcEhUTUxIdG1sRWxlbWVu
dChXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxIdG1sRWxlbWVudCog
a2l0KFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEh0bWxFbGVtZW50
KiBjb3JlKFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSHRtbEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEh0bWxFbGVt
ZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk4Nzg3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnRVbnN0YWJsZS5oCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTEh0bWxFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSHRt
bEVsZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
KworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0df
QkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaHRtbF9lbGVtZW50X2dldF9t
YW5pZmVzdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSHRtbEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X21hbmlmZXN0KFdl
YktpdERPTUhUTUxIdG1sRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2h0bWxfZWxlbWVudF9zZXRfbWFuaWZlc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEh0
bWxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfc2V0
X21hbmlmZXN0KFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFC
TEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50VW5zdGFibGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJh
bWVFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2QxZWM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5jcHAKQEAgLTAsMCAr
MSw2MTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RG9jdW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
SUZyYW1lRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4
U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRVbnN0YWJsZS5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxJRnJhbWVFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRN
TF9JRlJBTUVfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsK
K30KKworV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiB3cmFwSFRN
TElGcmFtZUVsZW1lbnQoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfSUZS
QU1FX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0lGUkFNRV9FTEVN
RU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktp
dERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogY29y
ZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRj
aEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lm
cmFtZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxJRnJh
bWVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTElGcmFtZUVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERP
TUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9
IHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFj
ZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2Fk
ZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKwor
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQsIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwg
R19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9BTElHTiwKKyAgICBQUk9QX0ZSQU1FX0JPUkRFUiwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQ
Uk9QX0xPTkdfREVTQywKKyAgICBQUk9QX01BUkdJTl9IRUlHSFQsCisgICAgUFJPUF9NQVJHSU5f
V0lEVEgsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfU0FOREJPWCwKKyAgICBQUk9QX1NDUk9M
TElORywKKyAgICBQUk9QX1NSQywKKyAgICBQUk9QX1NSQ0RPQywKKyAgICBQUk9QX1dJRFRILAor
ICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKKyAgICBQUk9QX0NPTlRFTlRfV0lORE9XLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX0lGUkFNRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkFNRV9CT1JERVI6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfZnJhbWVfYm9yZGVyKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0
X2hlaWdodChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0xPTkdfREVTQzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9sb25nX2Rlc2Moc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVJHSU5fSEVJR0hUOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl9oZWlnaHQoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9N
QVJHSU5fV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRf
bWFyZ2luX3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0FOREJPWDoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X3NldF9zYW5kYm94KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMSU5HOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3Njcm9sbGluZyhzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NS
QzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmMoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TUkNET0M6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc3Jj
ZG9jKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVu
dF9zZXRfd2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYg
PSBXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9hbGlnbihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkFNRV9CT1JERVI6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9nZXRfZnJhbWVfYm9yZGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTE9OR19ERVNDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYyhzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVJHSU5fSEVJR0hUOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
Z2V0X21hcmdpbl9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TUFSR0lOX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X25hbWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0FOREJPWDoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9zYW5k
Ym94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTElORzoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X2dldF9zY3JvbGxpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU1JDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TUkNET0M6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc3JjZG9jKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTlRFTlRfRE9DVU1FTlQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dl
dF9jb250ZW50X2RvY3VtZW50KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NPTlRFTlRfV0lORE9XOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93aW5kb3coc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2Ns
YXNzX2luaXQoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRt
bF9pZnJhbWVfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAgICJIVE1MSUZyYW1lRWxlbWVudDphbGlnbiIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElGcmFtZUVsZW1lbnQ6YWxpZ24i
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfRlJBTUVfQk9SREVSLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImZyYW1lLWJvcmRlciIsCisgICAgICAgICAgICAiSFRNTElG
cmFtZUVsZW1lbnQ6ZnJhbWUtYm9yZGVyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MSUZyYW1lRWxlbWVudDpmcmFtZS1ib3JkZXIiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEVJ
R0hULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhlaWdodCIs
CisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTE9OR19ERVNDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgImxvbmctZGVzYyIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6bG9uZy1kZXNj
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDpsb25n
LWRlc2MiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTUFSR0lOX0hFSUdIVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJtYXJnaW4taGVpZ2h0IiwKKyAgICAgICAgICAg
ICJIVE1MSUZyYW1lRWxlbWVudDptYXJnaW4taGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDptYXJnaW4taGVpZ2h0IiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX01BUkdJTl9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJtYXJnaW4td2lkdGgiLAorICAgICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50Om1h
cmdpbi13aWR0aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElGcmFtZUVs
ZW1lbnQ6bWFyZ2luLXdpZHRoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAiSFRN
TElGcmFtZUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TElGcmFtZUVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQU5EQk9YLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNhbmRib3giLAorICAgICAgICAg
ICAgIkhUTUxJRnJhbWVFbGVtZW50OnNhbmRib3giLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxJRnJhbWVFbGVtZW50OnNhbmRib3giLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NS
T0xMSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNjcm9s
bGluZyIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6c2Nyb2xsaW5nIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDpzY3JvbGxpbmciLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU1JDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInNyYyIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6c3JjIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDpzcmMiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfU1JDRE9DLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInNyY2RvYyIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6c3JjZG9j
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVudDpzcmNk
b2MiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50
OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSUZyYW1lRWxlbWVu
dDp3aWR0aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbnRlbnQtZG9jdW1lbnQiLAorICAg
ICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50OmNvbnRlbnQtZG9jdW1lbnQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01Eb2N1bWVudCogSFRNTElGcmFtZUVsZW1lbnQ6Y29udGVu
dC1kb2N1bWVudCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05U
RU5UX1dJTkRPVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJj
b250ZW50LXdpbmRvdyIsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQ6Y29udGVudC13
aW5kb3ciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01XaW5kb3cqIEhUTUxJ
RnJhbWVFbGVtZW50OmNvbnRlbnQtd2luZG93IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9ET01fV0lORE9XLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2luaXQoV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVl
c3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9hbGln
bihXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2FsaWduKFdl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dl
dF9mcmFtZV9ib3JkZXIoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZyYW1lYm9yZGVyQXR0cikp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9l
bGVtZW50X3NldF9mcmFtZV9ib3JkZXIoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1F
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6ZnJhbWVib3JkZXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MSUZy
YW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFN
RV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6aGVpZ2h0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVpZ2h0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2MoV2Vi
S2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFt
ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmxvbmdkZXNjQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9sb25nX2Rlc2Mo
V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bG9uZ2Rlc2NBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1l
bnRfZ2V0X21hcmdpbl9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1hcmdpbmhlaWdo
dEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9p
ZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX2hlaWdodChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjptYXJnaW5oZWlnaHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aChX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZy
YW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWFyZ2lud2lkdGhBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdp
bl93aWR0aChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptYXJnaW53
aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9p
ZnJhbWVfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRO
YW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NhbmRib3goV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJB
TUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnNhbmRib3hBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NhbmRib3goV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2FuZGJveEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc2Nyb2xsaW5n
KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJ
RnJhbWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzY3JvbGxpbmdBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3Njcm9s
bGluZyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzY3JvbGxpbmdB
dHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1l
X2VsZW1lbnRfZ2V0X3NyYyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRE
T01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JRlJBTUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3NyY2Rv
YyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjZG9jQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmNkb2Mo
V2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjZG9jQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF93aWR0aChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MSUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0
X3dpZHRoKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSUZyYW1lRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitXZWJLaXRET01Eb2N1bWVudCogd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X2dldF9jb250ZW50X2RvY3VtZW50KFdlYktpdERPTUhUTUxJRnJh
bWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1F
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRlbnREb2N1bWVudCgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURP
TVdpbmRvdyogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9jb250ZW50X3dpbmRv
dyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lGUkFNRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SUZyYW1lRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVu
dFdpbmRvdygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmZkMjFl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5oCkBAIC0wLDAgKzEs
MjUyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudF9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9IVE1MX0lGUkFNRV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfSUZSQU1FX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxJRnJhbWVFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0lGUkFNRV9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9IVE1MX0lGUkFNRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfSUZSQU1FX0VMRU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfSUZS
QU1FX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfSUZSQU1FX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxJ
RnJhbWVFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF9hbGlnbihXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2FsaWdu
KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfZnJhbWVfYm9yZGVy
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pZnJh
bWVfZWxlbWVudF9nZXRfZnJhbWVfYm9yZGVyKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2ZyYW1l
X2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfc2V0X2ZyYW1lX2JvcmRlcihXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZy
YW1lRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01I
VE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9sb25nX2Rlc2M6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9sb25nX2Rl
c2MoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19kZXNjOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbG9uZ19kZXNj
KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX2hlaWdo
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZy
YW1lX2VsZW1lbnRfZ2V0X21hcmdpbl9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbWFy
Z2luX2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfc2V0X21hcmdpbl9oZWlnaHQoV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5fd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9tYXJnaW5f
d2lkdGgoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbWFyZ2luX3dpZHRoOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbWFy
Z2luX3dpZHRoKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbmFt
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZy
YW1lX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
c2V0X25hbWUoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9zY3Jv
bGxpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X2dldF9zY3JvbGxpbmcoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9zZXRfc2Ny
b2xsaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9p
ZnJhbWVfZWxlbWVudF9zZXRfc2Nyb2xsaW5nKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJh
bWVfZWxlbWVudF9nZXRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxJRnJhbWVF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRf
c2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
aWZyYW1lX2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2Vs
ZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9z
ZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1l
X2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElGcmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTURvY3VtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnQqCit3ZWJraXRf
ZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9NSFRN
TElGcmFtZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9nZXRfY29udGVudF93aW5kb3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERP
TURPTVdpbmRvdworKiovCitXRUJLSVRfQVBJIFdlYktpdERPTURPTVdpbmRvdyoKK3dlYmtpdF9k
b21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93aW5kb3coV2ViS2l0RE9NSFRNTElG
cmFtZUVsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9N
SFRNTElGcmFtZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVu
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMzZmFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTElGcmFtZUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudFBy
aXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MSUZyYW1lRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiB3cmFwSFRNTElGcmFtZUVsZW1lbnQoV2ViQ29yZTo6
SFRNTElGcmFtZUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBraXQoV2Vi
Q29yZTo6SFRNTElGcmFtZUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50KiBj
b3JlKFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnRVbnN0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVk
Y2E5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50VW5zdGFibGUu
aApAQCAtMCwwICsxLDc2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MSUZyYW1lRWxlbWVudFVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFi
bGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pZnJhbWVf
ZWxlbWVudF9nZXRfc2FuZGJveDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSUZyYW1lRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50
X2dldF9zYW5kYm94KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NhbmRib3g6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2lmcmFtZV9lbGVtZW50X3NldF9zYW5kYm94KFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
ZnJhbWVfZWxlbWVudF9nZXRfc3JjZG9jOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJRnJh
bWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2Vs
ZW1lbnRfZ2V0X3NyY2RvYyhXZWJLaXRET01IVE1MSUZyYW1lRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmNkb2M6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9zcmNkb2MoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxJRnJhbWVFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZGY5ZDgyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudC5jcHAKQEAgLTAsMCArMSw4NDEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MSW1h
Z2VFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TEltYWdlRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4
U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFVuc3RhYmxlLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIGtpdChXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9J
TUFHRV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQor
CitXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogd3JhcEhUTUxJbWFnZUVs
ZW1lbnQoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9JTUFHRV9FTEVNRU5U
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTUFHRV9FTEVNRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZGlzcGF0
Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2
ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0g
V2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfYWRk
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisg
ICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZl
bnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlm
YWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIg
PSB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAg
aWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnQs
IFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX0FMSUdOLAor
ICAgIFBST1BfQUxULAorICAgIFBST1BfQk9SREVSLAorICAgIFBST1BfQ1JPU1NfT1JJR0lOLAor
ICAgIFBST1BfSEVJR0hULAorICAgIFBST1BfSFNQQUNFLAorICAgIFBST1BfSVNfTUFQLAorICAg
IFBST1BfTE9OR19ERVNDLAorICAgIFBST1BfU1JDLAorICAgIFBST1BfU1JDU0VULAorICAgIFBS
T1BfU0laRVMsCisgICAgUFJPUF9DVVJSRU5UX1NSQywKKyAgICBQUk9QX1VTRV9NQVAsCisgICAg
UFJPUF9WU1BBQ0UsCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0NPTVBMRVRFLAorICAgIFBS
T1BfTE9XU1JDLAorICAgIFBST1BfTkFUVVJBTF9IRUlHSFQsCisgICAgUFJPUF9OQVRVUkFMX1dJ
RFRILAorICAgIFBST1BfWCwKKyAgICBQUk9QX1ksCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sK
KyAgICBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0lN
QUdFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRf
bmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9BTFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X3NldF9hbHQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9CT1JERVI6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF9ib3JkZXIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DUk9TU19PUklHSU46CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9jcm9zc19vcmlnaW4oc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlH
SFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9oZWlnaHQoc2Vs
ZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSFNQQUNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaHNw
YWNlKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0lTX01BUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
c2V0X2lzX21hcChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9MT05HX0RFU0M6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF9sb25nX2Rlc2Moc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9zcmMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkNTRVQ6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9zcmNzZXQoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFUzoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3NpemVzKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNF
X01BUDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3VzZV9tYXAo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9WU1BBQ0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3Nl
dF92c3BhY2Uoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9MT1dTUkM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X3NldF9sb3dzcmMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9n
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0lNQUdFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmFt
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
Z2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMVDoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X2FsdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CT1JE
RVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X2dldF9ib3JkZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ1JPU1NfT1JJR0lOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2luKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2hlaWdodChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IU1BBQ0U6CisgICAgICAgIGdfdmFs
dWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9oc3Bh
Y2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSVNfTUFQOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9nZXRfaXNfbWFwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPTkdf
REVTQzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9TUkM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9zcmMoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU1JDU0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc3Jjc2V0KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJWkVTOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc2l6ZXMoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VSUkVOVF9TUkM6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF9jdXJyZW50X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0Vf
TUFQOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfdXNlX21hcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9WU1BBQ0U6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X2dldF92c3BhY2Uoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF93aWR0aChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DT01QTEVURToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2NvbXBsZXRlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPV1NSQzoKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2xv
d3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQVRVUkFMX0hFSUdI
VDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfZ2V0X25hdHVyYWxfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX05BVFVSQUxfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1cmFsX3dpZHRoKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF94KHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF95KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2NsYXNz
X2luaXQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpuYW1lIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW1hZ2VFbGVtZW50Om5hbWUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6YWxpZ24iLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6YWxpZ24iLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfQUxULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgImFsdCIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDphbHQiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6YWx0IiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0JPUkRFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJib3JkZXIiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6Ym9yZGVyIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW1hZ2VFbGVtZW50OmJvcmRlciIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiY3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVt
ZW50OmNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElt
YWdlRWxlbWVudDpjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEVJR0hULAorICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAg
ICAgIkhUTUxJbWFnZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGds
b25nIEhUTUxJbWFnZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19N
QVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0hTUEFDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAg
ICAgICAiaHNwYWNlIiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50OmhzcGFjZSIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MSW1hZ2VFbGVtZW50OmhzcGFjZSIsCisg
ICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JU19NQVAsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImlzLW1hcCIsCisgICAgICAgICAgICAi
SFRNTEltYWdlRWxlbWVudDppcy1tYXAiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xl
YW4gSFRNTEltYWdlRWxlbWVudDppcy1tYXAiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTE9OR19E
RVNDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxvbmctZGVz
YyIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpsb25nLWRlc2MiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6bG9uZy1kZXNjIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NSQywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJzcmMiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6c3JjIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW1hZ2VFbGVtZW50OnNyYyIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9TUkNTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAic3Jjc2V0IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50OnNyY3NldCIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEltYWdlRWxlbWVudDpzcmNzZXQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfU0laRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAic2l6ZXMiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6c2l6ZXMiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbWFnZUVsZW1lbnQ6c2l6ZXMiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQ1VSUkVOVF9TUkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiY3VycmVudC1zcmMiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVs
ZW1lbnQ6Y3VycmVudC1zcmMiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTElt
YWdlRWxlbWVudDpjdXJyZW50LXNyYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1VTRV9NQVAsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidXNlLW1hcCIsCisgICAgICAg
ICAgICAiSFRNTEltYWdlRWxlbWVudDp1c2UtbWFwIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MSW1hZ2VFbGVtZW50OnVzZS1tYXAiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVlNQ
QUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ2c3BhY2UiLAor
ICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6dnNwYWNlIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdsb25nIEhUTUxJbWFnZUVsZW1lbnQ6dnNwYWNlIiwKKyAgICAgICAgICAgIEdfTUlO
TE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1dJRFRILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygK
KyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTEltYWdlRWxlbWVudDp3aWR0
aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MSW1hZ2VFbGVtZW50OndpZHRo
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTVBMRVRFLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjb21wbGV0ZSIsCisgICAg
ICAgICAgICAiSFRNTEltYWdlRWxlbWVudDpjb21wbGV0ZSIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdib29sZWFuIEhUTUxJbWFnZUVsZW1lbnQ6Y29tcGxldGUiLAorICAgICAgICAgICAgRkFM
U0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9MT1dTUkMsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
bG93c3JjIiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVtZW50Omxvd3NyYyIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEltYWdlRWxlbWVudDpsb3dzcmMiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfTkFUVVJBTF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgIm5hdHVyYWwtaGVpZ2h0IiwKKyAgICAgICAgICAgICJIVE1MSW1hZ2VFbGVt
ZW50Om5hdHVyYWwtaGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTElt
YWdlRWxlbWVudDpuYXR1cmFsLWhlaWdodCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFY
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX05BVFVSQUxfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAg
ICAgICAgICAgIm5hdHVyYWwtd2lkdGgiLAorICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6
bmF0dXJhbC13aWR0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIEhUTUxJbWFnZUVs
ZW1lbnQ6bmF0dXJhbC13aWR0aCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgIngiLAorICAg
ICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6eCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGds
b25nIEhUTUxJbWFnZUVsZW1lbnQ6eCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9O
RywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInkiLAor
ICAgICAgICAgICAgIkhUTUxJbWFnZUVsZW1lbnQ6eSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdsb25nIEhUTUxJbWFnZUVsZW1lbnQ6eSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFY
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRN
TEltYWdlRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRE
T01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X25hbWUoV2Vi
S2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbGln
bihXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYWx0KFdl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjphbHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfYWx0KFdlYktpdERPTUhUTUxJ
bWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsdEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9ib3JkZXIoV2ViS2l0RE9N
SFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmJvcmRlckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9ib3JkZXIoV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ym9yZGVyQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbihX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jcm9zc09yaWdpbigpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9jcm9zc19v
cmlnaW4oV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRDcm9zc09y
aWdpbihjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9pbWFnZV9l
bGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+aGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEhlaWdodCh2
YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9oc3Bh
Y2UoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJ
bWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0
ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpoc3BhY2VB
dHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X3NldF9oc3BhY2UoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgZ2xv
bmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2Vs
ZikpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
Ojpoc3BhY2VBdHRyLCB2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2dldF9pc19tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIEZBTFNF
KTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjppc21hcEF0dHIpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2lzX21h
cChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6aXNtYXBBdHRyLCB2YWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbG9uZ19k
ZXNjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmxvbmdkZXNjQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1M
SW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsb25nZGVzY0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9zcmMoV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
c3JjQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpzcmNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfc3Jjc2V0KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzcmNzZXRB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1h
Z2VfZWxlbWVudF9zZXRfc3Jjc2V0KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnNyY3NldEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X2dldF9zaXplcyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2l6ZXNB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW1h
Z2VfZWxlbWVudF9zZXRfc2l6ZXMoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTUFHRV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MSW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6c2l6ZXNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3VycmVudF9zcmMoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+Y3VycmVudFNyYygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3VzZV9tYXAoV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnVzZW1hcEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X3NldF91c2VfbWFwKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnVzZW1hcEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3ZzcGFjZShXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZzcGFjZUF0dHIpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3ZzcGFjZShX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZzcGFjZUF0dHIsIHZhbHVlKTsK
K30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktp
dERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0t
PndpZHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwg
Z2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0V2lkdGgodmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY29tcGxldGUoV2ViS2l0RE9NSFRNTEltYWdl
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VM
RU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNvbXBs
ZXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X2dldF9sb3dzcmMoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6bG93c3JjQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2xvd3Ny
YyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsb3dzcmNBdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF9uYXR1cmFsX2hlaWdodChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU1BR0VfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnbG9uZyByZXN1bHQgPSBpdGVtLT5uYXR1cmFsSGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hdHVyYWxf
d2lkdGgoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVz
dWx0ID0gaXRlbS0+bmF0dXJhbFdpZHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xv
bmcgd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3goV2ViS2l0RE9NSFRNTEltYWdl
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lNQUdFX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+eCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dl
dF95KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3Vs
dCA9IGl0ZW0tPnkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDMxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQuaApAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRv
bS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU1BR0Vf
RUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfSU1BR0VfRUxFTUVOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9JTUFHRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX0lNQUdFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU1BR0VfRUxFTUVOVCwg
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hU
TUxfSU1BR0VfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTUFHRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19IVE1MX0lNQUdFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU1BR0VfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9JTUFHRV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0lN
QUdFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFy
ZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50Q2xh
c3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X25hbWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2Vf
ZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbmFtZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9uYW1l
KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2FsaWduOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
Z2V0X2FsaWduKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbGlnbihXZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9hbHQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYWx0
KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElt
YWdlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfYWx0KFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9ib3JkZXIoV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9ib3JkZXIoV2ViS2l0RE9NSFRNTEltYWdl
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJ
IGdsb25nCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X3NldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxl
bWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1h
Z2VfZWxlbWVudF9nZXRfaHNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaHNwYWNlKFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X3NldF9oc3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICog
QHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9zZXRfaHNwYWNlKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9nZXRfaXNfbWFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfaXNfbWFwKFdlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3Nl
dF9pc19tYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZh
bHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9zZXRfaXNfbWFwKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9nZXRfbG9uZ19kZXNjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MSW1h
Z2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVu
dF9zZXRfbG9uZ19kZXNjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2xvbmdfZGVzYyhXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X2dldF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdl
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxJbWFn
ZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X3NldF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfZ2V0X3VzZV9tYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfdXNlX21hcChXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRf
dXNlX21hcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF91c2VfbWFwKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3ZzcGFjZShXZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRf
dnNwYWNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X3ZzcGFjZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBn
bG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0
X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3dpZHRoOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRf
c2V0X3dpZHRoKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY29tcGxldGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbWFn
ZV9lbGVtZW50X2dldF9jb21wbGV0ZShXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbG93c3JjOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1l
bnRfZ2V0X2xvd3NyYyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfbG93c3JjOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2xvd3Ny
YyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1cmFsX2hlaWdo
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfZ2V0X25hdHVyYWxfaGVpZ2h0KFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1cmFs
X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9nZXRfbmF0dXJhbF93aWR0aChXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfeDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X3goV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3k6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJ
VF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF95KFdlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTEltYWdlRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1MzNmMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudFByaXZhdGVfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MSW1hZ2VFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50KiB3cmFwSFRNTEltYWdlRWxlbWVudChXZWJDb3JlOjpIVE1M
SW1hZ2VFbGVtZW50Kik7CitXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTEltYWdlRWxlbWVudCopOworV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogY29yZShXZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8qIFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRVbnN0
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZjVhMTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEs
MTA4IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUhUTUxJbWFnZUVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKwor
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVH
SU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3Jv
c3Nfb3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9jcm9zc19v
cmlnaW4oV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1h
Z2VfZWxlbWVudF9nZXRfc3Jjc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbWFnZUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X2dldF9zcmNzZXQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3NyY3NldDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9p
bWFnZV9lbGVtZW50X3NldF9zcmNzZXQoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxl
bWVudF9nZXRfc2l6ZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3Np
emVzKFdlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9zaXplczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MSW1hZ2VFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X3NldF9zaXplcyhXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9j
dXJyZW50X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfY3VycmVu
dF9zcmMoV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudCogc2VsZik7CisKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTUhUTUxJbWFnZUVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzhhYjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMCwwICsxLDE3OTIgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUu
aD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NRmlsZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9JTlBVVF9FTEVN
RU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogd3JhcEhUTUxJbnB1dEVsZW1lbnQoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9JTlBVVF9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTlBVVF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVF
dmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNv
ZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFt
ZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVu
dE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQorewor
ICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJl
bW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnQsIFdFQktJVF9E
T01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZ
UEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7
CisgICAgUFJPUF8wLAorICAgIFBST1BfQUNDRVBULAorICAgIFBST1BfQUxULAorICAgIFBST1Bf
QVVUT0NPTVBMRVRFLAorICAgIFBST1BfQVVUT0ZPQ1VTLAorICAgIFBST1BfREVGQVVMVF9DSEVD
S0VELAorICAgIFBST1BfQ0hFQ0tFRCwKKyAgICBQUk9QX0RJUl9OQU1FLAorICAgIFBST1BfRElT
QUJMRUQsCisgICAgUFJPUF9GT1JNLAorICAgIFBST1BfRklMRVMsCisgICAgUFJPUF9GT1JNX0FD
VElPTiwKKyAgICBQUk9QX0ZPUk1fRU5DVFlQRSwKKyAgICBQUk9QX0ZPUk1fTUVUSE9ELAorICAg
IFBST1BfRk9STV9OT19WQUxJREFURSwKKyAgICBQUk9QX0ZPUk1fVEFSR0VULAorICAgIFBST1Bf
SEVJR0hULAorICAgIFBST1BfSU5ERVRFUk1JTkFURSwKKyAgICBQUk9QX0xJU1QsCisgICAgUFJP
UF9NQVgsCisgICAgUFJPUF9NQVhfTEVOR1RILAorICAgIFBST1BfTUlOLAorICAgIFBST1BfTVVM
VElQTEUsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfUEFUVEVSTiwKKyAgICBQUk9QX1BMQUNF
SE9MREVSLAorICAgIFBST1BfUkVBRF9PTkxZLAorICAgIFBST1BfUkVRVUlSRUQsCisgICAgUFJP
UF9TSVpFLAorICAgIFBST1BfU1JDLAorICAgIFBST1BfU1RFUCwKKyAgICBQUk9QX1RZUEUsCisg
ICAgUFJPUF9ERUZBVUxUX1ZBTFVFLAorICAgIFBST1BfVkFMVUUsCisgICAgUFJPUF9WQUxVRV9B
U19OVU1CRVIsCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAg
UFJPUF9WQUxJRElUWSwKKyAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICBQUk9QX0xB
QkVMUywKKyAgICBQUk9QX0FMSUdOLAorICAgIFBST1BfVVNFX01BUCwKKyAgICBQUk9QX0lOQ1JF
TUVOVEFMLAorICAgIFBST1BfQVVUT0NPUlJFQ1QsCisgICAgUFJPUF9BVVRPQ0FQSVRBTElaRSwK
KyAgICBQUk9QX0NBUFRVUkUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BQ0NF
UFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hY2NlcHQoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9BTFQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hbHQo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9BVVRPQ09NUExFVEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9hdXRvY29tcGxldGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvZm9jdXMoc2VsZiwgZ192YWx1ZV9nZXRfYm9v
bGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9DSEVD
S0VEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGVmYXVsdF9j
aGVja2VkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NIRUNLRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9jaGVja2VkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJUl9OQU1FOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGlyX25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFs
dWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZP
Uk1fQUNUSU9OOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9y
bV9hY3Rpb24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9GT1JNX0VOQ1RZUEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9mb3JtX2VuY3R5cGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNX01FVEhPRDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fbWV0aG9kKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Rk9STV9OT19WQUxJREFURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2Zvcm1fbm9fdmFsaWRhdGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9UQVJHRVQ6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX3RhcmdldChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2hlaWdodChzZWxmLCBn
X3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SU5ERVRFUk1JTkFURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X2luZGV0ZXJtaW5hdGUoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfbWF4KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX0xFTkdUSDoKKyAgICAgICAgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X21heF9sZW5ndGgoc2VsZiwgZ192YWx1ZV9nZXRfbG9u
Zyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUlOOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbWluKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTVVM
VElQTEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tdWx0aXBs
ZShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfbmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1BBVFRFUk46CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9wYXR0ZXJuKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExBQ0VIT0xERVI6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9wbGFjZWhvbGRlcihzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFQURfT05MWToK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3JlYWRfb25seShzZWxm
LCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9SRVFVSVJFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X3JlcXVpcmVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9zaXplKHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVlKSwgbnVsbHB0cik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUkM6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9zcmMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEVQOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc3RlcChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbnB1dF90eXBlKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVM
VF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2RlZmF1
bHRfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMVUVfQVNfTlVNQkVSOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfdmFsdWVfYXNfbnVtYmVyKHNlbGYsIGdfdmFsdWVf
Z2V0X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF93aWR0
aChzZWxmLCBnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1VTRV9NQVA6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF91c2VfbWFwKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5DUkVNRU5UQUw6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbmNyZW1lbnRhbChzZWxmLCBnX3ZhbHVlX2dldF9i
b29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09SUkVD
VDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jb3JyZWN0
KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0FVVE9DQVBJVEFMSVpFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfYXV0b2NhcGl0YWxpemUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVl
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DQVBUVVJFOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY2FwdHVyZShzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfSU5QVVRfRUxFTUVOVChv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FDQ0VQ
VDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X2FjY2VwdChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9BTFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9hbHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQVVUT0NPTVBMRVRFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9GT0NVUzoKKyAgICAgICAgZ192YWx1
ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1
dG9mb2N1cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZBVUxUX0NI
RUNLRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9kZWZhdWx0X2NoZWNrZWQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQ0hFQ0tFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NoZWNrZWQoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElSX05BTUU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kaXJf
bmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2Rpc2FibGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0ZPUk06CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm0oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfRklMRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2ZpbGVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0ZPUk1fQUNUSU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9hY3Rpb24oc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9FTkNUWVBFOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfZm9ybV9lbmN0eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZP
Uk1fTUVUSE9EOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9tZXRob2Qoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRk9STV9OT19WQUxJREFURToKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fbm9f
dmFsaWRhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRk9STV9UQVJH
RVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9mb3JtX3RhcmdldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0lOREVURVJNSU5BVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbmRldGVybWlu
YXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xJU1Q6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
Z2V0X2xpc3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfbWF4KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9M
RU5HVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9tYXhfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX01JTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21pbihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9NVUxUSVBMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X211bHRpcGxlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9uYW1lKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVFRFUk46CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9w
YXR0ZXJuKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BMQUNFSE9MREVS
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfcGxhY2Vob2xkZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUkVBRF9PTkxZOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcmVhZF9vbmx5KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFUVVJUkVEOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcmVxdWlyZWQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0laRToKKyAgICAgICAgZ192
YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9z
aXplKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NSQzoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
Z2V0X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVEVQOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfc3RlcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBF
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfaW5wdXRfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9ERUZBVUxUX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF92YWx1ZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVl
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFX0FTX05VTUJFUjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfdmFsdWVfYXNfbnVtYmVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1dJTExfVkFMSURBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xl
YW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRl
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElESVRZOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF92YWxpZGl0eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJ
REFUSU9OX01FU1NBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2Uoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFCRUxTOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9sYWJlbHMo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfTUFQOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfdXNlX21hcChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9JTkNSRU1FTlRBTDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2luY3JlbWVudGFsKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9DT1JSRUNUOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2NvcnJl
Y3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NBUElUQUxJWkU6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF9hdXRvY2FwaXRhbGl6ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9DQVBUVVJFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVyZV90eXBlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2Ns
YXNzX2luaXQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0FDQ0VQVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJhY2NlcHQiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6YWNjZXB0IiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmFjY2VwdCIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9BTFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiYWx0IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmFsdCIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDphbHQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQVVUT0NPTVBMRVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KAorICAgICAgICAgICAgImF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxl
bWVudDphdXRvY29tcGxldGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJ
bnB1dEVsZW1lbnQ6YXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9GT0NVUywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYXV0b2ZvY3VzIiwK
KyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmF1dG9mb2N1cyIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MSW5wdXRFbGVtZW50OmF1dG9mb2N1cyIsCisgICAgICAg
ICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9ERUZBVUxUX0NIRUNLRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImRlZmF1bHQtY2hlY2tlZCIsCisgICAgICAgICAgICAiSFRNTElu
cHV0RWxlbWVudDpkZWZhdWx0LWNoZWNrZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jv
b2xlYW4gSFRNTElucHV0RWxlbWVudDpkZWZhdWx0LWNoZWNrZWQiLAorICAgICAgICAgICAgRkFM
U0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ0hFQ0tFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAiY2hlY2tlZCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpjaGVja2VkIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6Y2hlY2tlZCIs
CisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVJfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJkaXItbmFtZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxl
bWVudDpkaXItbmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0
RWxlbWVudDpkaXItbmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNBQkxFRCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGlzYWJsZWQiLAorICAgICAgICAg
ICAgIkhUTUxJbnB1dEVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9GT1JNLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZvcm0i
LAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogSFRNTElucHV0RWxlbWVudDpmb3JtIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVOVCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZJTEVTLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZpbGVzIiwKKyAgICAg
ICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmZpbGVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
V2ViS2l0RE9NRmlsZUxpc3QqIEhUTUxJbnB1dEVsZW1lbnQ6ZmlsZXMiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX0ZJTEVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk1fQUNUSU9OLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImZvcm0tYWN0aW9uIiwKKyAgICAgICAgICAgICJI
VE1MSW5wdXRFbGVtZW50OmZvcm0tYWN0aW9uIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdj
aGFyKiBIVE1MSW5wdXRFbGVtZW50OmZvcm0tYWN0aW9uIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZP
Uk1fRU5DVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJm
b3JtLWVuY3R5cGUiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6Zm9ybS1lbmN0eXBl
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmZvcm0t
ZW5jdHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNX01FVEhPRCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJmb3JtLW1ldGhvZCIsCisgICAgICAgICAgICAi
SFRNTElucHV0RWxlbWVudDpmb3JtLW1ldGhvZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTElucHV0RWxlbWVudDpmb3JtLW1ldGhvZCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9G
T1JNX05PX1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAg
ICAgICJmb3JtLW5vLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmZv
cm0tbm8tdmFsaWRhdGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTElu
cHV0RWxlbWVudDpmb3JtLW5vLXZhbGlkYXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk1f
VEFSR0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImZvcm0t
dGFyZ2V0IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmZvcm0tdGFyZ2V0IiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmZvcm0tdGFyZ2V0
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25n
KAorICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpo
ZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxJbnB1dEVsZW1lbnQ6
aGVpZ2h0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSU5ERVRFUk1JTkFURSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaW5kZXRlcm1pbmF0
ZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDppbmRldGVybWluYXRlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6aW5kZXRlcm1pbmF0
ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MSVNULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KAorICAgICAgICAgICAgImxpc3QiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6
bGlzdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxFbGVtZW50KiBIVE1M
SW5wdXRFbGVtZW50Omxpc3QiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxF
TUVOVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX01BWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJt
YXgiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6bWF4IiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50Om1heCIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9NQVhfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJt
YXgtbGVuZ3RoIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50Om1heC1sZW5ndGgiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTElucHV0RWxlbWVudDptYXgtbGVuZ3Ro
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01JTiwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJtaW4iLAorICAgICAgICAgICAgIkhU
TUxJbnB1dEVsZW1lbnQ6bWluIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
SW5wdXRFbGVtZW50Om1pbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NVUxUSVBMRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibXVsdGlwbGUiLAorICAgICAgICAg
ICAgIkhUTUxJbnB1dEVsZW1lbnQ6bXVsdGlwbGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2Jvb2xlYW4gSFRNTElucHV0RWxlbWVudDptdWx0aXBsZSIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm5hbWUi
LAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1BBVFRFUk4sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicGF0
dGVybiIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpwYXR0ZXJuIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OnBhdHRlcm4iLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfUExBQ0VIT0xERVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAicGxhY2Vob2xkZXIiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6
cGxhY2Vob2xkZXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVs
ZW1lbnQ6cGxhY2Vob2xkZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVBRF9PTkxZLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJyZWFkLW9ubHkiLAorICAgICAg
ICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6cmVhZC1vbmx5IiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6cmVhZC1vbmx5IiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1JFUVVJUkVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAg
ICAgICJyZXF1aXJlZCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpyZXF1aXJlZCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MSW5wdXRFbGVtZW50OnJlcXVp
cmVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NJWkUsCisgICAgICAgIGdfcGFyYW1fc3BlY191
bG9uZygKKyAgICAgICAgICAgICJzaXplIiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50
OnNpemUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxJbnB1dEVsZW1lbnQ6
c2l6ZSIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NSQywKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJzcmMiLAorICAgICAgICAgICAgIkhUTUxJ
bnB1dEVsZW1lbnQ6c3JjIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5w
dXRFbGVtZW50OnNyYyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVEVQLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInN0ZXAiLAorICAgICAgICAgICAgIkhUTUxJbnB1
dEVsZW1lbnQ6c3RlcCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0
RWxlbWVudDpzdGVwIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTElucHV0
RWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRF
bGVtZW50OnR5cGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVF9WQUxVRSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkZWZhdWx0LXZhbHVlIiwKKyAgICAg
ICAgICAgICJIVE1MSW5wdXRFbGVtZW50OmRlZmF1bHQtdmFsdWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxJbnB1dEVsZW1lbnQ6ZGVmYXVsdC12YWx1ZSIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJ2YWx1ZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDp2YWx1ZSIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDp2YWx1ZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9WQUxVRV9BU19OVU1CRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3Vi
bGUoCisgICAgICAgICAgICAidmFsdWUtYXMtbnVtYmVyIiwKKyAgICAgICAgICAgICJIVE1MSW5w
dXRFbGVtZW50OnZhbHVlLWFzLW51bWJlciIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZG91
YmxlIEhUTUxJbnB1dEVsZW1lbnQ6dmFsdWUtYXMtbnVtYmVyIiwKKyAgICAgICAgICAgIC1HX01B
WERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191
bG9uZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVu
dDp3aWR0aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBndWxvbmcgSFRNTElucHV0RWxlbWVu
dDp3aWR0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dJTExfVkFMSURBVEUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndpbGwtdmFsaWRh
dGUiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxJbnB1dEVsZW1lbnQ6d2lsbC12YWxpZGF0
ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElESVRZLAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgInZhbGlkaXR5IiwKKyAgICAgICAgICAgICJIVE1MSW5wdXRF
bGVtZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZSogSFRNTElucHV0RWxlbWVudDp2YWxpZGl0eSIsCisgICAgICAgICAgICBXRUJLSVRf
RE9NX1RZUEVfVkFMSURJVFlfU1RBVEUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsaWRhdGlvbi1tZXNzYWdlIiwKKyAg
ICAgICAgICAgICJIVE1MSW5wdXRFbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OnZhbGlkYXRpb24tbWVzc2Fn
ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0xBQkVMUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgKKyAgICAgICAgICAgICJsYWJlbHMiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6
bGFiZWxzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZUxpc3QqIEhUTUxJ
bnB1dEVsZW1lbnQ6bGFiZWxzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFX0xJ
U1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9BTElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJh
bGlnbiIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDphbGlnbiIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDphbGlnbiIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9VU0VfTUFQLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInVzZS1tYXAiLAorICAgICAgICAgICAgIkhUTUxJbnB1dEVsZW1lbnQ6dXNlLW1hcCIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTElucHV0RWxlbWVudDp1c2UtbWFwIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0lOQ1JFTUVOVEFMLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICJpbmNyZW1lbnRhbCIsCisgICAgICAgICAgICAiSFRNTElucHV0
RWxlbWVudDppbmNyZW1lbnRhbCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBI
VE1MSW5wdXRFbGVtZW50OmluY3JlbWVudGFsIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9D
T1JSRUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJhdXRv
Y29ycmVjdCIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDphdXRvY29ycmVjdCIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MSW5wdXRFbGVtZW50OmF1dG9jb3Jy
ZWN0IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FVVE9DQVBJVEFMSVpFLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImF1dG9jYXBpdGFsaXplIiwKKyAgICAgICAg
ICAgICJIVE1MSW5wdXRFbGVtZW50OmF1dG9jYXBpdGFsaXplIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmF1dG9jYXBpdGFsaXplIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0NBUFRVUkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAiY2FwdHVyZSIsCisgICAgICAgICAgICAiSFRNTElucHV0RWxlbWVudDpjYXB0dXJlIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MSW5wdXRFbGVtZW50OmNhcHR1cmUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfaW5pdChX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShy
ZXF1ZXN0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zdGVwX3Vw
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdsb25nIG4sIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnN0ZXBVcChuLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2
b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3N0ZXBfZG93bihXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmLCBnbG9uZyBuLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5zdGVwRG93bihuLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRf
RUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hl
Y2tWYWxpZGl0eSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZXJyb3Ip
OworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRXJyb3IgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgoZXJyb3IpOworICAgIGl0ZW0tPnNldEN1c3RvbVZhbGlkaXR5KGNvbnZlcnRlZEVycm9yKTsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZWxlY3QoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5Q
VVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZWxlY3QoKTsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcmFuZ2VfdGV4dChXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogcmVwbGFjZW1lbnQsIGd1bG9uZyBzdGFydCwg
Z3Vsb25nIGVuZCwgY29uc3QgZ2NoYXIqIHNlbGVjdGlvbk1vZGUsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHJlcGxhY2VtZW50KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGVj
dGlvbk1vZGUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkUmVwbGFjZW1lbnQgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgocmVwbGFjZW1lbnQpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNlbGVjdGlvbk1vZGUg
PSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2VsZWN0aW9uTW9kZSk7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0UmFuZ2VUZXh0KGNvbnZlcnRlZFJlcGxh
Y2VtZW50LCBzdGFydCwgZW5kLCBjb252ZXJ0ZWRTZWxlY3Rpb25Nb2RlLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZV9mb3JfdXNlcihX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFZhbHVlRm9yVXNlcihj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfYWNjZXB0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphY2NlcHRBdHRyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRf
YWNjZXB0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFjY2VwdEF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9hbHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsdEF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hbHQo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWx0QXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1
dG9jb21wbGV0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdXRvY29tcGxldGUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9zZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXV0b2NvbXBsZXRlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1
c0F0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxF
TUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6YXV0b2ZvY3VzQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9F
TEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hlY2tl
ZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X2RlZmF1bHRfY2hlY2tlZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5Q
VVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y2hlY2tlZEF0dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NoZWNrZWQoV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1F
TlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNoZWNrZWQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9jaGVja2VkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNl
bGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldENoZWNrZWQodmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rpcl9uYW1lKFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpkaXJuYW1lQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Rpcl9uYW1lKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmRpcm5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
SU5QVVRfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmRpc2FibGVkQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lO
UFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0ciwgdmFsdWUpOworfQorCitXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtKFdlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NRmlsZUxpc3QqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9maWxlcyhXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Rmls
ZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5maWxlcygpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2ZpbGVzKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIFdlYktpdERPTUZpbGVMaXN0KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0ZJTEVfTElTVCh2YWx1ZSkpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RmlsZUxpc3QqIGNv
bnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICBpdGVtLT5zZXRGaWxlcyhj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfZm9ybV9hY3Rpb24oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Zm9ybUFjdGlvbigp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9mb3JtX2FjdGlvbihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEZvcm1BY3Rpb24oY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fZW5jdHlwZShXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5mb3JtRW5jdHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX2VuY3R5cGUoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRGb3JtRW5jdHlwZShjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9y
bV9tZXRob2QoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Zm9ybU1ldGhvZCgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF9mb3JtX21ldGhvZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEZvcm1NZXRob2QoY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxF
TUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZvcm1ub3Zh
bGlkYXRlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Zm9ybW5vdmFsaWRhdGVBdHRyLCB2YWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV90YXJnZXQoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmZvcm10YXJnZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV90YXJnZXQoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Zm9ybXRhcmdldEF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9oZWlnaHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25n
IHJlc3VsdCA9IGl0ZW0tPmhlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SGVpZ2h0KHZhbHVlKTsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2luZGV0ZXJt
aW5hdGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmluZGV0ZXJtaW5hdGUoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9pbmRldGVybWluYXRl
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldEluZGV0ZXJtaW5hdGUodmFsdWUpOworfQorCitXZWJLaXRET01IVE1MRWxlbWVudCogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2xpc3QoV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
bGlzdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJEYXRhbGlzdCBFbGVtZW50IikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBF
TkFCTEUoREFUQUxJU1RfRUxFTUVOVCkgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9tYXgoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1heEF0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9tYXgoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWF4QXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfbWF4X2xlbmd0aChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnbG9uZyByZXN1bHQgPSBpdGVtLT5tYXhMZW5ndGhGb3JCaW5kaW5ncygpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X21h
eF9sZW5ndGgoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUsIEdF
cnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldE1heExlbmd0aEZv
ckJpbmRpbmdzKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5j
b2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X21pbihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWluQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X21pbihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptaW5BdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF9tdWx0aXBsZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om11bHRpcGxlQXR0cik7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbXVsdGlw
bGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6Om11bHRpcGxlQXR0ciwg
dmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X25h
bWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF9uYW1lKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfcGF0dGVybihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cGF0dGVybkF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3Nl
dF9wYXR0ZXJuKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnBhdHRlcm5B
dHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfcGxhY2Vob2xkZXIoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnBsYWNlaG9sZGVy
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X3BsYWNlaG9sZGVyKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5Q
VVRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnBsYWNlaG9sZGVyQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcmVhZF9vbmx5KFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9J
TlBVVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVhZG9ubHlBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9yZWFkX29ubHkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lO
UFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlYWRvbmx5QXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VM
RU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZXF1aXJl
ZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfc2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYs
IGdib29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZXF1aXJlZEF0dHIsIHZhbHVlKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9zaXplKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5zaXplKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2l6ZShXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFNpemUodmFsdWUsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfc3JjKFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNy
Y0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9zcmMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6c3JjQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfZ2V0X3N0ZXAoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnN0ZXBBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfc3RlcChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpzdGVw
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X2lucHV0X3R5cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9pbnB1dF90eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0VHlwZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5kZWZhdWx0VmFsdWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldERlZmF1bHRWYWx1ZShjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsdWUo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRWYWx1ZShjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVl
X2FzX251bWJlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91
YmxlIHJlc3VsdCA9IGl0ZW0tPnZhbHVlQXNOdW1iZXIoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZV9hc19udW1i
ZXIoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0VmFsdWVBc051bWJlcih2
YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF93aWR0aChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxv
bmcgcmVzdWx0ID0gaXRlbS0+d2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0V2lkdGgodmFsdWUpOwor
fQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lsbF92YWxp
ZGF0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+d2lsbFZhbGlkYXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
Z2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpWYWxpZGl0eVN0YXRlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+dmFsaWRpdHkoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3Zh
bGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWxpZGF0aW9uTWVz
c2FnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlTGlzdCogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2xhYmVscyhXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+IGdvYmplY3RS
ZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5sYWJlbHMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X2FsaWduKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGln
bkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X2dldF91c2VfbWFwKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp1c2VtYXBBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9zZXRfdXNlX21hcChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp1
c2VtYXBBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9pbmNyZW1lbnRhbChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfSU5QVVRfRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmluY3JlbWVudGFsQXR0
cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfaW5jcmVtZW50YWwoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmluY3JlbWVudGFsQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2NvcnJlY3QoV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRB
TElaRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmF1dG9jb3JyZWN0KCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVjdCBBbmQgQXV0b2Nh
cGl0YWxpemUiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpICovCit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jb3JyZWN0KFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShJ
T1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9JTlBVVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEF1dG9jb3JyZWN0KHZh
bHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3Jy
ZWN0IEFuZCBBdXRvY2FwaXRhbGl6ZSIpCisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09SUkVD
VF9BTkRfQVVUT0NBUElUQUxJWkUpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfYXV0b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZikKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXV0b2NhcGl0
YWxpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIklvcyBBdXRvY29ycmVj
dCBBbmQgQXV0b2NhcGl0YWxpemUiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShJ
T1NfQVVUT0NPUlJFQ1RfQU5EX0FVVE9DQVBJVEFMSVpFKSAqLworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvY2FwaXRhbGl6ZShXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYgRU5BQkxFKElPU19B
VVRPQ09SUkVDVF9BTkRfQVVUT0NBUElUQUxJWkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF1dG9jYXBpdGFsaXplKGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFuZCBBdXRv
Y2FwaXRhbGl6ZSIpCisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NB
UElUQUxJWkUpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfY2FwdHVyZV90eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpCit7CisjaWYg
RU5BQkxFKE1FRElBX0NBUFRVUkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9JTlBV
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpjYXB0dXJlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJN
ZWRpYSBDYXB0dXJlIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfQ0FQ
VFVSRSkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY2Fw
dHVyZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisjaWYgRU5BQkxFKE1FRElBX0NBUFRVUkUpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0lOUFVUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjYXB0dXJlQXR0ciwgY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJNZWRpYSBDYXB0dXJlIikKKyNlbmRpZiAvKiBFTkFC
TEUoTUVESUFfQ0FQVFVSRSkgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45YTlkODY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50LmgKQEAgLTAsMCArMSw0NTMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElO
R19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGlu
Y2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50X2gKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0lOUFVUX0VMRU1FTlQgICAgICAg
ICAgICAod2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfSU5QVVRfRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9J
TlBVVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0lOUFVUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1F
TlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfSU5QVVRfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRN
TF9JTlBVVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0lOUFVUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfSU5QVVRfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9JTlBVVF9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudENsYXNzIHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NlbGVjdDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NlbGVjdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYWNj
ZXB0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X2FjY2VwdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWNjZXB0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2FjY2VwdChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9hbHQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfYWx0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hbHQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWx0KFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9mb2N1czoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2ZvY3VzOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xl
YW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9vbGVh
biB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Rl
ZmF1bHRfY2hlY2tlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2RlZmF1bHRfY2hlY2tlZChXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfY2hlY2tlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NoZWNrZWQoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X2NoZWNrZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY2hlY2tlZChXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNX
ZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfZmlsZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NRmlsZUxp
c3QKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01GaWxlTGlzdCoKK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9maWxlcyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZmlsZXM6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNXZWJLaXRE
T01GaWxlTGlzdAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfZmlsZXMoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgV2Vi
S2l0RE9NRmlsZUxpc3QqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
c2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2d1bG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYsIGd1bG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2luZGV0ZXJtaW5hdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbmRldGVybWluYXRlKFdlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X3NldF9pbmRldGVybWluYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2luZGV0ZXJtaW5hdGUo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9tYXhfbGVuZ3RoOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9n
ZXRfbWF4X2xlbmd0aChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbWF4X2xlbmd0aDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X21heF9sZW5ndGgoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbXVsdGlwbGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9tdWx0aXBs
ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbXVsdGlwbGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbXVsdGlwbGUoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X25hbWUo
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9yZWFkX29ubHk6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcmVhZF9vbmx5
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfc2l6ZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisq
Ki8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRf
c2l6ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2d1bG9uZworICogQGVycm9yOiAjR0Vycm9y
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9zaXplKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9zcmM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9zcmM6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfc3JjKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2lucHV0X3R5
cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfaW5wdXRfdHlwZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5wdXRfdHlw
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9pbnB1dF90eXBlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X2RlZmF1bHRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF92YWx1ZShXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9zZXRfZGVmYXVsdF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVlKFdlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbHVl
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisqKi8KK1dFQktJ
VF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lkdGgoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfd2lsbF92
YWxpZGF0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYWxpZ24oV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3VzZV9tYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdXNlX21hcChXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9zZXRfdXNlX21hcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF91c2VfbWFwKFdlYktpdERPTUhUTUxJ
bnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2NhcHR1cmVfdHlwZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTaW5jZTogMi4xNAorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lu
cHV0X2VsZW1lbnRfZ2V0X2NhcHR1cmVfdHlwZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBz
ZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjcxZjlkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRQ
cml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TElucHV0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogd3JhcEhUTUxJbnB1dEVsZW1lbnQoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCopOworV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRV
bnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGY2NjA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDUzNCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50VW5z
dGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50VW5zdGFibGVfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc3RlcF91cDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAbjogQSAjZ2xvbmcKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zdGVwX3VwKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGdsb25nIG4sIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zdGVwX2Rvd246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudAorICogQG46IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc3RlcF9kb3duKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYsIGdsb25nIG4sIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9jaGVja192YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9jdXN0b21f
dmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQGVy
cm9yOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5
KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3JhbmdlX3RleHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHJlcGxhY2VtZW50OiBB
ICNnY2hhcgorICogQHN0YXJ0OiBBICNndWxvbmcKKyAqIEBlbmQ6IEEgI2d1bG9uZworICogQHNl
bGVjdGlvbk1vZGU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfc2V0X3JhbmdlX3RleHQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHJlcGxhY2VtZW50LCBndWxvbmcgc3RhcnQsIGd1bG9uZyBlbmQsIGNvbnN0
IGdjaGFyKiBzZWxlY3Rpb25Nb2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlX2Zvcl91c2VyOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X3ZhbHVlX2Zvcl91c2VyKFdlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfZ2V0X2F1dG9jb21wbGV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvY29t
cGxldGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlKFdlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2RlZmF1bHRfY2hlY2tlZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29s
ZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9kZWZhdWx0X2NoZWNrZWQoV2ViS2l0RE9N
SFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kaXJfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9nZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Rpcl9u
YW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Rpcl9uYW1lKFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fYWN0aW9uOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX2FjdGlvbihXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfZm9ybV9hY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV9hY3Rp
b24oV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybV9lbmN0eXBl
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX2VuY3R5cGUoV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2Zvcm1fZW5jdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X3NldF9mb3JtX2VuY3R5cGUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfZm9ybV9tZXRob2Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X2Zvcm1fbWV0aG9kKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX21ldGhvZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9mb3JtX21ldGhvZChXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9mb3JtX25vX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2Zvcm1fbm9fdmFsaWRhdGUoV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfc2V0X2Zvcm1fbm9fdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9z
ZXRfZm9ybV9ub192YWxpZGF0ZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBnYm9v
bGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0
X2Zvcm1fdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9mb3Jt
X3RhcmdldChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZm9ybV90YXJnZXQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9zZXRfZm9ybV90YXJnZXQoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfbGlzdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRWxl
bWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01IVE1MRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9saXN0KFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9tYXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1l
bnRfZ2V0X21heChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfbWF4OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfc2V0X21heChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dl
dF9taW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21pbihXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfbWluOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X21pbihX
ZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9wYXR0ZXJuOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9wYXR0ZXJuKFdlYktpdERPTUhUTUxJbnB1
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X3NldF9wYXR0ZXJuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3BhdHRlcm4oV2Vi
S2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcGxhY2Vob2xkZXI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3BsYWNlaG9sZGVyKFdlYktpdERPTUhU
TUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9wbGFjZWhvbGRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9w
bGFjZWhvbGRlcihXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZWFk
X29ubHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfcmVhZF9v
bmx5KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZXF1aXJlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MSW5wdXRFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X2dldF9yZXF1aXJlZChXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcmVx
dWlyZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICogQHZhbHVl
OiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfcmVxdWlyZWQoV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9zdGVwOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF9zdGVwKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9zdGVwOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3N0ZXAoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
aW5wdXRfZWxlbWVudF9nZXRfdmFsdWVfYXNfbnVtYmVyOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X2dldF92YWx1ZV9hc19udW1iZXIoV2ViS2l0RE9NSFRNTElucHV0RWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X3ZhbHVlX2FzX251bWJlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfdmFsdWVfYXNfbnVtYmVyKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAj
V2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01WYWxpZGl0eVN0YXRlKgord2Via2l0X2RvbV9odG1sX2lucHV0
X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21l
c3NhZ2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25f
bWVzc2FnZShXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbGFiZWxzOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTU5vZGVMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRf
Z2V0X2xhYmVscyhXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5jcmVtZW50YWw6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFu
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfaW5jcmVtZW50YWwoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X2luY3JlbWVudGFsOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxJbnB1dEVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0
X2luY3JlbWVudGFsKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2Nv
cnJlY3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0b2Nv
cnJlY3QoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jb3JyZWN0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2lucHV0X2VsZW1lbnRfc2V0X2F1dG9jb3JyZWN0KFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfaW5wdXRf
ZWxlbWVudF9nZXRfYXV0b2NhcGl0YWxpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvY2FwaXRh
bGl6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hdXRvY2FwaXRhbGl6ZShXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9jYXB0dXJlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX2lucHV0X2VsZW1lbnRfc2V0X2NhcHR1cmUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTElu
cHV0RWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzk5NzkxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEtleWdl
bkVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEtleWdl
bkVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIG9iaikKK3sKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0tFWUdFTl9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCog
Y29yZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
cmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnQqIHdyYXBIVE1MS2V5Z2VuRWxlbWVudChXZWJDb3JlOjpIVE1MS2V5Z2Vu
RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9LRVlHRU5fRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RP
TV9UWVBFX0hUTUxfS0VZR0VOX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZl
bnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsK
KyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6
OkhUTUxLZXlnZW5FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TEtleWdlbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3Jp
cHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTEtl
eWdlbkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MS2V5Z2Vu
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfcmVt
b3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7
CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCkt
PmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpy
ZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAg
aWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9t
X2h0bWxfa2V5Z2VuX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1v
dmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01I
VE1MS2V5Z2VuRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50LCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9U
WVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX0FVVE9GT0NVUywKKyAgICBQUk9QX0NIQUxMRU5HRSwK
KyAgICBQUk9QX0RJU0FCTEVELAorICAgIFBST1BfRk9STSwKKyAgICBQUk9QX0tFWVRZUEUsCisg
ICAgUFJPUF9OQU1FLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX1dJTExfVkFMSURBVEUsCisg
ICAgUFJPUF9WQUxJRElUWSwKKyAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICBQUk9Q
X0xBQkVMUywKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVu
dF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MS2V5
Z2VuRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9LRVlHRU5fRUxFTUVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FVVE9GT0NVUzoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9hdXRvZm9jdXMoc2Vs
ZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ0hBTExFTkdFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRf
c2V0X2NoYWxsZW5nZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
a2V5Z2VuX2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0tFWVRZUEU6CisgICAgICAgIHdl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfa2V5dHlwZShzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6Cisg
ICAgICAgIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfbmFtZShzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9LRVlH
RU5fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0FVVE9GT0NVUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9hdXRvZm9jdXMoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hBTExFTkdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2NoYWxsZW5n
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVt
ZW50X2dldF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9G
T1JNOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9r
ZXlnZW5fZWxlbWVudF9nZXRfZm9ybShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9LRVlUWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2tleXR5cGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfa2V5Z2VuX3R5cGUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lMTF9WQUxJREFURToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2tleWdlbl9l
bGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1ZBTElESVRZOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfdmFsaWRpdHkoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURBVElPTl9NRVNTQUdFOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3Zh
bGlkYXRpb25fbWVzc2FnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9M
QUJFTFM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2tleWdlbl9lbGVtZW50X2dldF9sYWJlbHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9N
SFRNTEtleWdlbkVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9z
ZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FV
VE9GT0NVUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYXV0
b2ZvY3VzIiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDphdXRvZm9jdXMiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEtleWdlbkVsZW1lbnQ6YXV0b2ZvY3Vz
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0NIQUxMRU5HRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJjaGFsbGVuZ2UiLAorICAgICAgICAgICAgIkhUTUxLZXln
ZW5FbGVtZW50OmNoYWxsZW5nZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRN
TEtleWdlbkVsZW1lbnQ6Y2hhbGxlbmdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJU0FCTEVELAor
ICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkaXNhYmxlZCIsCisg
ICAgICAgICAgICAiSFRNTEtleWdlbkVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTEtleWdlbkVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAg
ICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAg
ICAgICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDpmb3JtIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1MS2V5Z2VuRWxl
bWVudDpmb3JtIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0ZPUk1fRUxFTUVO
VCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0tFWVRZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
a2V5dHlwZSIsCisgICAgICAgICAgICAiSFRNTEtleWdlbkVsZW1lbnQ6a2V5dHlwZSIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTEtleWdlbkVsZW1lbnQ6a2V5dHlwZSIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxLZXlnZW5FbGVtZW50Om5hbWUiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxLZXlnZW5FbGVtZW50Om5hbWUiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDp0eXBlIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxLZXlnZW5FbGVtZW50OnR5cGUiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICJ3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJIVE1MS2V5
Z2VuRWxlbWVudDp3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xl
YW4gSFRNTEtleWdlbkVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1ZBTElESVRZLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZh
bGlkaXR5IiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDp2YWxpZGl0eSIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIEhUTUxLZXlnZW5FbGVt
ZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFU
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgIkhUTUxLZXlnZW5F
bGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFy
KiBIVE1MS2V5Z2VuRWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9MQUJFTFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFi
ZWxzIiwKKyAgICAgICAgICAgICJIVE1MS2V5Z2VuRWxlbWVudDpsYWJlbHMiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlTGlzdCogSFRNTEtleWdlbkVsZW1lbnQ6bGFiZWxz
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFX0xJU1QsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfa2V5Z2VuX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21faHRtbF9rZXlnZW5fZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MS2V5Z2Vu
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9F
TEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hl
Y2tWYWxpZGl0eSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2tleWdlbl9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTEtleWdl
bkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZXJy
b3IpOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEVycm9yID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGVycm9yKTsKKyAgICBpdGVtLT5zZXRDdXN0b21WYWxpZGl0eShjb252ZXJ0ZWRFcnJv
cik7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfYXV0
b2ZvY3VzKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhX
ZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0ciwg
dmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9j
aGFsbGVuZ2UoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYWxsZW5nZUF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9z
ZXRfY2hhbGxlbmdlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5
Z2VuRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNo
YWxsZW5nZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX2tleWdlbl9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5U
KHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0
cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfa2V5Z2Vu
X2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBn
Ym9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpkaXNhYmxlZEF0dHIsIHZhbHVlKTsKK30KKworV2ViS2l0RE9NSFRNTEZvcm1FbGVt
ZW50KiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9L
RVlHRU5fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZvcm0oKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9rZXl0eXBlKFdlYktpdERPTUhUTUxLZXln
ZW5FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VO
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmtleXR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2tleXR5cGUoV2ViS2l0RE9NSFRNTEtl
eWdlbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRLZXl0eXBlKGNvbnZlcnRlZFZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfbmFtZShXZWJL
aXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2Vu
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9u
YW1lKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1l
bnRfZ2V0X2tleWdlbl90eXBlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2tleWdl
bl9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2Vs
ZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53aWxsVmFsaWRhdGUo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiB3ZWJr
aXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxLZXln
ZW5FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VO
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpWYWxpZGl0eVN0YXRl
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dmFsaWRpdHkoKSk7CisgICAgcmV0
dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9N
SFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9LRVlHRU5fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsaWRhdGlvbk1lc3NhZ2UoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxl
bWVudF9nZXRfbGFiZWxzKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfS0VZR0VOX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmxhYmVscygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTEtleWdlbkVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
NDJhMTNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudC5oCkBAIC0w
LDAgKzEsMjQ1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTUhUTUxLZXlnZW5FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnRfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9LRVlHRU5fRUxF
TUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0tFWUdFTl9FTEVNRU5UKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1M
X0tFWUdFTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9LRVlHRU5fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9LRVlHRU5fRUxFTUVO
VCwgV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19IVE1MX0tFWUdFTl9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0tFWUdFTl9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19IVE1MX0tFWUdFTl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0tFWUdFTl9F
TEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0tFWUdFTl9FTEVNRU5UX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX0tFWUdFTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudENsYXNzKSkK
Kworc3RydWN0IF9XZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MS2V5
Z2VuRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxl
bWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2Vs
ZW1lbnRfY2hlY2tfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2tleWdlbl9l
bGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2N1c3RvbV92YWxp
ZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICogQGVycm9y
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2N1c3RvbV92YWxpZGl0eShX
ZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGVycm9yKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2F1dG9mb2N1czoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2F1dG9mb2N1cyhXZWJL
aXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2tleWdlbl9lbGVtZW50X3NldF9hdXRvZm9jdXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TEtleWdlbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2tleWdlbl9l
bGVtZW50X3NldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRf
Z2V0X2NoYWxsZW5nZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9j
aGFsbGVuZ2UoV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRfY2hhbGxlbmdlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF9rZXlnZW5fZWxlbWVudF9zZXRfY2hhbGxlbmdlKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9r
ZXlnZW5fZWxlbWVudF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtl
eWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX2tl
eWdlbl9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X3NldF9kaXNhYmxl
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICogQHZhbHVlOiBB
ICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERP
TUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF9mb3JtOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1s
X2tleWdlbl9lbGVtZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2tleXR5cGU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfa2V5dHlwZShXZWJLaXRE
T01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2tl
eWdlbl9lbGVtZW50X3NldF9rZXl0eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXln
ZW5FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9z
ZXRfa2V5dHlwZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X25h
bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfbmFtZShXZWJLaXRE
T01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2tl
eWdlbl9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5F
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9zZXRf
bmFtZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2tleWdlbl90
eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X2tleWdlbl90eXBl
KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTEtleWdlbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2Vs
ZW1lbnRfZ2V0X3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxLZXlnZW5FbGVt
ZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01WYWxpZGl0
eVN0YXRlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTVZhbGlkaXR5U3RhdGUqCit3ZWJraXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3Zh
bGlkaXR5KFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfa2V5Z2VuX2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX2tleWdlbl9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2Vi
S2l0RE9NSFRNTEtleWdlbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9rZXlnZW5fZWxlbWVudF9nZXRfbGFiZWxzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxL
ZXlnZW5FbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01Ob2RlTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01Ob2RlTGlzdCoKK3dlYmtpdF9kb21faHRtbF9rZXlnZW5fZWxlbWVudF9nZXRfbGFi
ZWxzKFdlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxLZXlnZW5FbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTEtleWdlbkVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxLZXlnZW5FbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOWRkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxLZXlnZW5FbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1l
bnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnRQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEtleWdlbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCogd3JhcEhUTUxLZXlnZW5FbGVtZW50KFdlYkNv
cmU6OkhUTUxLZXlnZW5FbGVtZW50Kik7CitXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCoga2l0
KFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MS2V5Z2VuRWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVudFByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTElFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlN2U3MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTExJRWxlbWVudC5jcHAKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MTElFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTExJRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01O
b2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxMSUVs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTElFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9MSV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4o
b2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MTElFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxM
SUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpIVE1MTElFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTExJRWxlbWVudCogd3JhcEhUTUxMSUVsZW1l
bnQoV2ViQ29yZTo6SFRNTExJRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9MSV9FTEVNRU5UKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3Jl
T2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2
ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdl
YkNvcmU6OkhUTUxMSUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MTElFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0
aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERP
TUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhh
bmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTExJRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TExJRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMSUVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2
ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdl
YmtpdF9kb21faHRtbF9saV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRf
ZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9hZGRfZXZlbnRfbGlz
dGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRt
bF9saV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NSFRNTExJRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1l
bnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShX
RUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX1ZBTFVF
LAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTExJRWxlbWVudCogc2Vs
ZiA9IFdFQktJVF9ET01fSFRNTF9MSV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2xpX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfbGlfZWxlbWVudF9zZXRfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1l
bnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTExJRWxlbWVu
dCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9MSV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3R5cGVfYXR0
cihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3Zh
bHVlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9s
aV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTExJRWxlbWVudENsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX2xpX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTExJRWxlbWVudDp0eXBlIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTElFbGVtZW50OnR5cGUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVkFMVUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
InZhbHVlIiwKKyAgICAgICAgICAgICJIVE1MTElFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdsb25nIEhUTUxMSUVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgR19N
SU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfaW5pdChX
ZWJLaXRET01IVE1MTElFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1
ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF90eXBlX2F0
dHIoV2ViS2l0RE9NSFRNTExJRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX0xJX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMSUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxM
SUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfTElfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6SFRNTExJRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdl
YmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRET01IVE1MTElFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExJRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OnZhbHVlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0RE9NSFRNTExJRWxl
bWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJ
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjp2YWx1ZUF0dHIsIHZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TElFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi41MDA2Zjg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTElFbGVt
ZW50LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5H
X1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTExJRWxlbWVu
dF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxMSUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTElfRUxFTUVOVCAgICAgICAgICAgICh3ZWJr
aXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hU
TUxfTElfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSV9FTEVNRU5ULCBXZWJLaXRET01IVE1MTElF
bGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0xJX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfTElfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExJRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfTElfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSV9FTEVNRU5UKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19IVE1MX0xJX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTElfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MSV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxMSUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTExJRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNl
OworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTElFbGVtZW50Q2xhc3MgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX2xpX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTElFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF90eXBlX2F0dHIo
V2ViS2l0RE9NSFRNTExJRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X2xpX2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTElF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9saV9lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTExJRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfbGlfZWxlbWVudF9nZXRfdmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExJRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dl
YmtpdF9kb21faHRtbF9saV9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRET01IVE1MTElFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9zZXRfdmFsdWU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExJRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9u
ZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9z
ZXRfdmFsdWUoV2ViS2l0RE9NSFRNTExJRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTExJRWxlbWVudF9oICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxMSUVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMSUVsZW1lbnRQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlYjI3YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExJRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhU
TUxMSUVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTExJRWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTElFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTUhUTUxMSUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitX
ZWJLaXRET01IVE1MTElFbGVtZW50KiB3cmFwSFRNTExJRWxlbWVudChXZWJDb3JlOjpIVE1MTElF
bGVtZW50Kik7CitXZWJLaXRET01IVE1MTElFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTExJRWxl
bWVudCopOworV2ViQ29yZTo6SFRNTExJRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTElFbGVt
ZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxM
SUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjMwN2U0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1l
bnQuY3BwCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVu
dC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxFbGVtZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
TGFiZWxFbGVtZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTExh
YmVsRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqIG9iaikKK3sKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9IVE1MX0xBQkVMX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNv
cmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqIGNvcmUo
V2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MTGFiZWxF
bGVtZW50KiB3cmFwSFRNTExhYmVsRWxlbWVudChXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX0xBQkVMX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1M
X0xBQkVMX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfbGFiZWxfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29y
ZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTExhYmVsRWxl
bWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQt
PmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfbGFiZWxfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmpl
Y3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVU
YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1M
TGFiZWxFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExhYmVs
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdf
T0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0
RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50
ID0gd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZh
Y2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2Fk
ZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitH
X0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LCB3ZWJraXRf
ZG9tX2h0bWxfbGFiZWxfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19J
TVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9k
b21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9G
T1JNLAorICAgIFBST1BfSFRNTF9GT1IsCisgICAgUFJPUF9DT05UUk9MLAorfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogc2VsZiA9IFdFQktJ
VF9ET01fSFRNTF9MQUJFTF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfSFRNTF9GT1I6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9s
YWJlbF9lbGVtZW50X3NldF9odG1sX2ZvcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVt
ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxMYWJlbEVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVOVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0ZPUk06CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0
X2Zvcm0oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFRNTF9GT1I6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9sYWJlbF9l
bGVtZW50X2dldF9odG1sX2ZvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9DT05UUk9MOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9sYWJlbF9lbGVtZW50X2dldF9jb250cm9sKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0
RE9NSFRNTExhYmVsRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdv
YmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRf
c2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZP
Uk0sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisg
ICAgICAgICAgICAiSFRNTExhYmVsRWxlbWVudDpmb3JtIiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50KiBIVE1MTGFiZWxFbGVtZW50OmZvcm0iLAorICAg
ICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFRNTF9GT1IsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHRtbC1mb3IiLAorICAg
ICAgICAgICAgIkhUTUxMYWJlbEVsZW1lbnQ6aHRtbC1mb3IiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIEhUTUxMYWJlbEVsZW1lbnQ6aHRtbC1mb3IiLAorICAgICAgICAgICAgIiIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQ09OVFJPTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJj
b250cm9sIiwKKyAgICAgICAgICAgICJIVE1MTGFiZWxFbGVtZW50OmNvbnRyb2wiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MRWxlbWVudCogSFRNTExhYmVsRWxlbWVudDpj
b250cm9sIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQq
IHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dldF9mb3JtKFdl
YktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9MQUJFTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGFiZWxF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpI
VE1MRm9ybUVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5mb3JtKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dldF9odG1sX2ZvcihXZWJLaXRET01I
VE1MTGFiZWxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
TEFCRUxfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6Zm9yQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfc2V0X2h0bWxfZm9yKFdlYktpdERPTUhUTUxMYWJl
bEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfTEFCRUxfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmZvckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dldF9jb250
cm9sKFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9MQUJFTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
TGFiZWxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpIVE1MRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRy
b2woKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxl
bWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTY5M2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQuaApAQCAtMCwwICsxLDgxIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01f
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3
ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTExhYmVsRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9MQUJFTF9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9sYWJl
bF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MQUJFTF9FTEVN
RU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9IVE1MX0xBQkVMX0VMRU1FTlQsIFdlYktpdERPTUhUTUxMYWJlbEVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVOVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9MQUJFTF9FTEVNRU5ULCBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9MQUJFTF9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0xBQkVMX0VMRU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTEFCRUxfRUxFTUVOVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9MQUJFTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX0xBQkVMX0VMRU1FTlRf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfTEFCRUxfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudENs
YXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50IHsKKyAgICBXZWJLaXRE
T01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhU
TUxMYWJlbEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfbGFiZWxf
ZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGFiZWxf
ZWxlbWVudF9nZXRfZm9ybToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqCit3ZWJraXRf
ZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfaHRt
bF9mb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
bGFiZWxfZWxlbWVudF9nZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfc2V0X2h0bWxfZm9y
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2xhYmVsX2Vs
ZW1lbnRfc2V0X2h0bWxfZm9yKFdlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1M
TGFiZWxFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43ZWJlYTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFi
ZWxFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxMYWJlbEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTExhYmVsRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxM
YWJlbEVsZW1lbnQqIHdyYXBIVE1MTGFiZWxFbGVtZW50KFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1l
bnQqKTsKK1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTGFiZWxF
bGVtZW50Kik7CitXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxM
YWJlbEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0
RE9NSFRNTExhYmVsRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGFi
ZWxFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyNmUzYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MTGFiZWxF
bGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50VW5zdGFi
bGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX2xhYmVsX2VsZW1lbnRfZ2V0X2NvbnRyb2w6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEVsZW1lbnQqCit3ZWJraXRfZG9t
X2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfY29udHJvbChXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50
KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5T
VEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudFVuc3RhYmxl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TGVnZW5kRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZi
NDYzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuY3BwCkBAIC0w
LDAgKzEsMTk2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRm9ybUVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50
KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxFTUVOVChraXQo
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTExl
Z2VuZEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQqIHJlcXVlc3QpCit7
CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGVnZW5kRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50KiB3cmFwSFRNTExlZ2VuZEVsZW1lbnQoV2ViQ29y
ZTo6SFRNTExlZ2VuZEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTEVHRU5EX0VMRU1FTlQoZ19vYmplY3Rf
bmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6
Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNv
cmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6SFRNTExlZ2VuZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX2xlZ2Vu
ZF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqPihXRUJLSVRfRE9NX09C
SkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZl
bnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlm
YWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9sZWdl
bmRfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVy
ID0gd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAg
ICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9l
bGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NP
REUoV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxl
bWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNF
KFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9GT1JNLAorICAgIFBST1BfQUxJ
R04sCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfc2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTExlZ2VuZEVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTEVHRU5EX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MTGVnZW5kRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxF
TUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X0ZPUk06CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X2xlZ2VuZF9lbGVtZW50X2dldF9mb3JtKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9jbGFzc19pbml0KFdl
YktpdERPTUhUTUxMZWdlbmRFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2Vs
ZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9GT1JNLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZv
cm0iLAorICAgICAgICAgICAgIkhUTUxMZWdlbmRFbGVtZW50OmZvcm0iLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW50OmZv
cm0iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUxJ
R04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYWxpZ24iLAor
ICAgICAgICAgICAgIkhUTUxMZWdlbmRFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MTGVnZW5kRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MTGVnZW5k
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK1dl
YktpdERPTUhUTUxGb3JtRWxlbWVudCogd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dl
dF9mb3JtKFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfTEVHRU5EX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxMZWdlbmRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5mb3JtKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfYWxpZ24o
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9MRUdFTkRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExl
Z2VuZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X3NldF9hbGlnbihXZWJL
aXRET01IVE1MTGVnZW5kRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9MRUdFTkRfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MTGVnZW5kRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmRlZWRlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50LmgKQEAg
LTAsMCArMSw4MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZp
bmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkK
KyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGly
ZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRfaAor
I2RlZmluZSBXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MRUdFTkRfRUxFTUVOVCAgICAgICAgICAgICh3
ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9MRUdF
TkRfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MRUdFTkRfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExl
Z2VuZEVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0xFR0VORF9FTEVN
RU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19I
VE1MX0xFR0VORF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVNRU5UKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xFR0VORF9FTEVN
RU5ULCBXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRE
T01IVE1MTGVnZW5kRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudENsYXNzIHsK
KyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X2Zvcm06Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxl
bWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0
X2FsaWduKFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxMZWdlbmRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9sZWdlbmRfZWxlbWVudF9zZXRfYWxpZ24oV2Vi
S2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudF9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVn
ZW5kRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
OGVhYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudFByaXZhdGUu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUhUTUxMZWdlbmRFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERP
TUhUTUxMZWdlbmRFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxMZWdl
bmRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxMZWdlbmRFbGVt
ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQq
IHdyYXBIVE1MTGVnZW5kRWxlbWVudChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudCopOworV2Vi
S2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudCop
OworV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTExlZ2VuZEVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TExlZ2VuZEVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45ZTYwMGQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsNjAyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTExpbmtFbGVt
ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTVRva2VuTGlzdFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxMaW5rRWxlbWVudFByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTGlu
a0VsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9k
ZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxMaW5rRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxMaW5rRWxlbWVudCogd3Jh
cEhUTUxMaW5rRWxlbWVudChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGNvcmVPYmplY3QpCit7
CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTElO
S19FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSU5LX0VMRU1FTlQs
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2
ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVF
dmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRF
dmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZh
Y2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX2xpbmtf
ZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRf
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJL
aXRET01IVE1MTGlua0VsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnQsIFdFQktJ
VF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRElTQUJMRUQsCisgICAgUFJPUF9DSEFSU0VULAor
ICAgIFBST1BfSFJFRiwKKyAgICBQUk9QX0hSRUZMQU5HLAorICAgIFBST1BfTUVESUEsCisgICAg
UFJPUF9SRUwsCisgICAgUFJPUF9SRVYsCisgICAgUFJPUF9TSVpFUywKKyAgICBQUk9QX1RBUkdF
VCwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9BUywKKyAgICBQUk9QX0NST1NTX09SSUdJTiwK
KyAgICBQUk9QX1NIRUVULAorICAgIFBST1BfUkVMX0xJU1QsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRN
TF9MSU5LX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAg
IGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVu
dF9zZXRfZGlzYWJsZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hBUlNFVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9zZXRfY2hhcnNldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hSRUY6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2hyZWYoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IUkVGTEFORzoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfaHJlZmxhbmcoc2VsZiwgZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRURJQToK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfbWVkaWEoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9S
RUw6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3JlbChzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1JFVjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfcmV2KHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfVEFSR0VUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF90YXJn
ZXQoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3Nl
dF90eXBlX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9BUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxl
bWVudF9zZXRfYXMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DUk9TU19PUklHSU46CisgICAgICAgIHdlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVt
ZW50X2dldF9kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
SEFSU0VUOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfbGlua19lbGVtZW50X2dldF9jaGFyc2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0hSRUY6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hyZWYoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSFJFRkxBTkc6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hyZWZsYW5nKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FRElBOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9tZWRpYShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUw6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3JlbChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVY6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3Jl
dihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSVpFUzoKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dl
dF9zaXplcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UQVJHRVQ6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfZ2V0X3RhcmdldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9U
WVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X2dldF90eXBlX2F0dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQVM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2FzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0NST1NTX09SSUdJTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2luKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NIRUVUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3NoZWV0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFTF9MSVNUOgorICAgICAgICBn
X3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0
X3JlbF9saXN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9saW5rX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MTGlua0VsZW1lbnRDbGFz
cyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRf
cHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKAorICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAgICAgICJIVE1M
TGlua0VsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4g
SFRNTExpbmtFbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NIQVJTRVQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2hhcnNldCIsCisg
ICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50OmNoYXJzZXQiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIEhUTUxMaW5rRWxlbWVudDpjaGFyc2V0IiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0hSRUYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHJlZiIs
CisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50OmhyZWYiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIEhUTUxMaW5rRWxlbWVudDpocmVmIiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hS
RUZMQU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImhyZWZs
YW5nIiwKKyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQ6aHJlZmxhbmciLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxMaW5rRWxlbWVudDpocmVmbGFuZyIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9NRURJQSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJtZWRpYSIsCisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50Om1lZGlhIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTGlua0VsZW1lbnQ6bWVkaWEiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfUkVMLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInJlbCIsCisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50OnJlbCIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTExpbmtFbGVtZW50OnJlbCIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9SRVYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicmV2
IiwKKyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQ6cmV2IiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MTGlua0VsZW1lbnQ6cmV2IiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NJ
WkVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInNpemVzIiwK
KyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQ6c2l6ZXMiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01ET01Ub2tlbkxpc3QqIEhUTUxMaW5rRWxlbWVudDpzaXplcyIsCisgICAg
ICAgICAgICBXRUJLSVRfRE9NX1RZUEVfRE9NX1RPS0VOX0xJU1QsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UQVJHRVQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGFyZ2V0IiwKKyAgICAgICAgICAg
ICJIVE1MTGlua0VsZW1lbnQ6dGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFy
KiBIVE1MTGlua0VsZW1lbnQ6dGFyZ2V0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAg
ICAiSFRNTExpbmtFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxMaW5rRWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FTLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFzIiwKKyAgICAgICAgICAgICJIVE1M
TGlua0VsZW1lbnQ6YXMiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxMaW5r
RWxlbWVudDphcyIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAg
ICAgICJIVE1MTGlua0VsZW1lbnQ6Y3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MTGlua0VsZW1lbnQ6Y3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1NIRUVULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInNo
ZWV0IiwKKyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQ6c2hlZXQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBXZWJLaXRET01TdHlsZVNoZWV0KiBIVE1MTGlua0VsZW1lbnQ6c2hlZXQiLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVULAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVMX0xJU1QsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicmVsLWxpc3QiLAorICAgICAg
ICAgICAgIkhUTUxMaW5rRWxlbWVudDpyZWwtbGlzdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IFdlYktpdERPTURPTVRva2VuTGlzdCogSFRNTExpbmtFbGVtZW50OnJlbC1saXN0IiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9ET01fVE9LRU5fTElTVCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9s
aW5rX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHJlcXVlc3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0cik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9k
aXNhYmxlZChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikpOworICAgIFdl
YkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRy
LCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9j
aGFyc2V0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyc2V0QXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfY2hhcnNldChX
ZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyc2V0QXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfaHJl
ZihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpocmVmQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX2xpbmtfZWxlbWVudF9zZXRfaHJlZihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElO
S19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpocmVmQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX2xpbmtfZWxlbWVudF9nZXRfaHJlZmxhbmcoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhyZWZs
YW5nQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9zZXRfaHJlZmxhbmcoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6aHJlZmxhbmdBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9tZWRpYShXZWJLaXRET01IVE1MTGlua0VsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bWVkaWFB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X3NldF9tZWRpYShXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
TGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpt
ZWRpYUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9s
aW5rX2VsZW1lbnRfZ2V0X3JlbChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVsQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRf
cmVsKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlbEF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3Jl
dihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6cmV2QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfcmV2KFdlYktpdERPTUhUTUxM
aW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OnJldkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2Vi
S2l0RE9NRE9NVG9rZW5MaXN0KiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9zaXpl
cyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RE9NVG9rZW5MaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2l6ZXMoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxM
aW5rRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjp0YXJnZXRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X0xJTktfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6dGFyZ2V0QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxMaW5r
RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
Ojp0eXBlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9M
SU5LX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9hcyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXNBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVt
ZW50X3NldF9hcyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVk
VmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphc0F0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRf
Z2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxMaW5rRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jcm9zc09yaWdpbigpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfc2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
TGlua0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldENyb3NzT3JpZ2luKGNvbnZlcnRlZFZhbHVlKTsKK30KKworV2ViS2l0RE9NU3R5bGVTaGVl
dCogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfc2hlZXQoV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0eWxlU2hlZXQ+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zaGVldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0
OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURPTVRva2VuTGlzdCog
d2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmVsX2xpc3QoV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTElOS19F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkRPTVRva2VuTGlzdD4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlbExpc3QoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxMaW5rRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zZGI4ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TGlua0VsZW1lbnQuaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50X2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxF
bGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJTktfRUxFTUVOVCAg
ICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9MSU5LX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTElOS19FTEVN
RU5ULCBXZWJLaXRET01IVE1MTGlua0VsZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxf
TElOS19FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJTktfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTExp
bmtFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9MSU5LX0VMRU1FTlQo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfTElOS19FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX0xJ
TktfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9MSU5LX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0hUTUxfTElOS19FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX0xJTktfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTExpbmtFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxMaW5rRWxlbWVu
dCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01IVE1MTGlua0VsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVs
ZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2Rpc2FibGVk
KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2Rpc2FibGVkKFdlYktpdERP
TUhUTUxMaW5rRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2NoYXJzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTExpbmtFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2NoYXJzZXQoV2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X3NldF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5r
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9jaGFyc2V0KFdlYktpdERPTUhUTUxMaW5r
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X2dldF9ocmVmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxM
aW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2No
YXIqCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9ocmVmKFdlYktpdERPTUhUTUxM
aW5rRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVu
dF9zZXRfaHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9zZXRfaHJlZihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVu
dF9nZXRfaHJlZmxhbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2hyZWZsYW5nKFdlYktpdERPTUhUTUxMaW5rRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfaHJl
Zmxhbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9saW5r
X2VsZW1lbnRfc2V0X2hyZWZsYW5nKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2dldF9tZWRpYToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX2xpbmtfZWxlbWVudF9nZXRfbWVkaWEoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9tZWRpYToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9z
ZXRfbWVkaWEoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3JlbDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVu
dF9nZXRfcmVsKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfcmVsOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9yZWwoV2ViS2l0RE9NSFRN
TExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3JldjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MTGlua0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfcmV2KFdlYktpdERPTUhU
TUxMaW5rRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxl
bWVudF9zZXRfcmV2OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbGlua19lbGVtZW50X3NldF9yZXYoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1l
bnRfZ2V0X3RhcmdldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX2xpbmtfZWxlbWVudF9nZXRfdGFyZ2V0KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfdGFyZ2V0
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVt
ZW50X3NldF90YXJnZXQoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3R5
cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X2xpbmtfZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfdHlwZV9hdHRy
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVt
ZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0
X3NoZWV0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NU3R5bGVTaGVldAorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTVN0eWxlU2hlZXQqCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2dldF9zaGVldChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnRQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlMGRmN2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhU
TUxMaW5rRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTGlua0VsZW1lbnRQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTExpbmtFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxMaW5rRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTUhUTUxMaW5rRWxlbWVudCogd3JhcEhUTUxMaW5rRWxlbWVudChXZWJD
b3JlOjpIVE1MTGlua0VsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxMaW5rRWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxMaW5rRWxlbWVudCopOworV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxMaW5rRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MTGlua0VsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTExpbmtFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50VW5z
dGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY3MDY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTGlua0VsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
SFRNTExpbmtFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTGlua0VsZW1l
bnRVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DdXN0b21VbnN0YWJsZS5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9zaXplczoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTURPTVRva2VuTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01ET01Ub2tlbkxpc3QqCit3ZWJraXRfZG9tX2h0
bWxfbGlua19lbGVtZW50X2dldF9zaXplcyhXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X2FzOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxMaW5rRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfYXMoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9hczoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfYXMoV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9s
aW5rX2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
TGlua0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9saW5rX2Vs
ZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbihXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2Nyb3NzX29yaWdpbjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTGlua0VsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxM
aW5rRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9yZWxfbGlzdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MTGlua0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dl
YktpdERPTURPTVRva2VuTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01ET01Ub2tlbkxpc3QqCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVt
ZW50X2dldF9yZWxfbGlzdChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQqIHNlbGYpOworCisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MTGlua0VsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmJkNmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxNYXBFbGVtZW50LmNwcApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTUhUTUxNYXBFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUu
aD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1h
cEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MTWFwRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxNYXBFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9N
QVBfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKwor
V2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQqIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
TWFwRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Cit9CisKK1dlYktpdERPTUhUTUxNYXBFbGVtZW50KiB3cmFwSFRNTE1hcEVsZW1lbnQoV2ViQ29y
ZTo6SFRNTE1hcEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdF
QktJVF9ET01fVFlQRV9IVE1MX01BUF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0
LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7
CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3Jl
OjpIVE1MTWFwRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxN
YXBFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBj
b3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9u
Lm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5l
cihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdD
bG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhU
TUxNYXBFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1hcEVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERP
TUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9
IHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+
YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2Rv
bV9odG1sX21hcF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9t
YXBfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BUkVBUywKKyAgICBQ
Uk9QX05BTUUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRf
c2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1hcEVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlQob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfc2V0X25hbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFw
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1h
cEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BUkVBUzoKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0
X2FyZWFzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVu
dF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfbWFwX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MTWFwRWxlbWVudENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVJFQVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAiYXJlYXMiLAorICAgICAgICAgICAgIkhUTUxNYXBFbGVtZW50
OmFyZWFzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24q
IEhUTUxNYXBFbGVtZW50OmFyZWFzIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9IVE1M
X0NPTExFQ1RJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxNYXBFbGVtZW50Om5hbWUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNYXBFbGVtZW50Om5hbWUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTE1h
cEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitX
ZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9h
cmVhcyhXZWJLaXRET01IVE1MTWFwRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX01BUF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFw
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SFRNTENvbGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5hcmVhcygp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTE1h
cEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVBfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MTWFwRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9NQVBfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpuYW1lQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxNYXBFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXBFbGVtZW50LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmMDkyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxNYXBFbGVtZW50LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRv
bS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
RE9NSFRNTE1hcEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWFwRWxlbWVudF9oCisK
KyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVBfRUxFTUVO
VCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01BUF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX01BUF9FTEVN
RU5ULCBXZWJLaXRET01IVE1MTWFwRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9N
QVBfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVBfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1hcEVs
ZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01BUF9FTEVNRU5UKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9IVE1MX01BUF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX01BUF9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX01BUF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01B
UF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX01BUF9FTEVNRU5ULCBXZWJLaXRET01IVE1MTWFwRWxl
bWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MTWFwRWxlbWVudCB7CisgICAgV2Vi
S2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01IVE1MTWFwRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9tYXBf
ZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFwX2Vs
ZW1lbnRfZ2V0X2FyZWFzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXBFbGVtZW50Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01IVE1MQ29sbGVjdGlv
bgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9o
dG1sX21hcF9lbGVtZW50X2dldF9hcmVhcyhXZWJLaXRET01IVE1MTWFwRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcF9lbGVtZW50X2dldF9uYW1lOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNYXBFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRf
bmFtZShXZWJLaXRET01IVE1MTWFwRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21hcF9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxN
YXBFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MTWFwRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdlYktpdERPTUhUTUxNYXBFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1h
cEVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXBFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNDQyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxNYXBFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRQcml2
YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE1hcEVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTE1hcEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NSFRNTE1hcEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1M
TWFwRWxlbWVudCogd3JhcEhUTUxNYXBFbGVtZW50KFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50Kik7
CitXZWJLaXRET01IVE1MTWFwRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50Kik7
CitXZWJDb3JlOjpIVE1MTWFwRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWFwRWxlbWVudCop
OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTWFwRWxl
bWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk2ZjI0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxl
bWVudC5jcHAKQEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUg
IkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFVuc3RhYmxlLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxNYXJxdWVlRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfTUFSUVVFRV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkp
OworfQorCitXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1h
cnF1ZWVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiB3
cmFwSFRNTE1hcnF1ZWVFbGVtZW50KFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
SFRNTF9NQVJRVUVFX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX01B
UlFVRUVfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9tYXJxdWVlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJD
b3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNv
cmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVl
RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFy
Z2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92
ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBo
YW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFj
ZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2Rpc3Bh
dGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3Zl
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudCwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9CRUhBVklPUiwKKyAgICBQUk9QX0JHX0NPTE9SLAor
ICAgIFBST1BfRElSRUNUSU9OLAorICAgIFBST1BfSEVJR0hULAorICAgIFBST1BfSFNQQUNFLAor
ICAgIFBST1BfTE9PUCwKKyAgICBQUk9QX1NDUk9MTF9BTU9VTlQsCisgICAgUFJPUF9TQ1JPTExf
REVMQVksCisgICAgUFJPUF9UUlVFX1NQRUVELAorICAgIFBST1BfVlNQQUNFLAorICAgIFBST1Bf
V0lEVEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50
X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNYXJx
dWVlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9NQVJRVUVFX0VMRU1FTlQob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9CRUhBVklPUjoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfYmVoYXZpb3Ioc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9CR19DT0xPUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9z
ZXRfYmdfY29sb3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9ESVJFQ1RJT046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9t
YXJxdWVlX2VsZW1lbnRfc2V0X2RpcmVjdGlvbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFNQQUNFOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9oc3BhY2Uoc2VsZiwg
Z192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0xPT1A6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2xvb3Ao
c2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU0NST0xMX0FNT1VOVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9zZXRfc2Nyb2xsX2Ftb3VudChzZWxmLCBnX3ZhbHVlX2dldF91bG9uZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX0RFTEFZOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9zY3JvbGxfZGVsYXkoc2Vs
ZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1RSVUVfU1BFRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
c2V0X3RydWVfc3BlZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQQUNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
bWFycXVlZV9lbGVtZW50X3NldF92c3BhY2Uoc2VsZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9zdHJp
bmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9t
YXJxdWVlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9N
SFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX01BUlFVRUVfRUxFTUVO
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0JF
SEFWSU9SOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X2dldF9iZWhhdmlvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfYmdfY29sb3Ioc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRElSRUNUSU9OOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9k
aXJlY3Rpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVJR0hUOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFycXVl
ZV9lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSFNQQUNFOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfaHNwYWNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0xPT1A6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2xvb3Aoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU0NST0xMX0FNT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxv
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3Njcm9sbF9hbW91
bnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMX0RFTEFZOgor
ICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVf
ZWxlbWVudF9nZXRfc2Nyb2xsX2RlbGF5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1RSVUVfU1BFRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3RydWVfc3BlZWQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVlNQQUNFOgorICAgICAgICBnX3ZhbHVlX3NldF91
bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfdnNwYWNlKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dl
dF93aWR0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2Vs
ZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JFSEFWSU9SLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImJlaGF2aW9yIiwKKyAgICAgICAg
ICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6YmVoYXZpb3IiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxNYXJxdWVlRWxlbWVudDpiZWhhdmlvciIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9CR19DT0xPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJi
Zy1jb2xvciIsCisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVFbGVtZW50OmJnLWNvbG9yIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTWFycXVlZUVsZW1lbnQ6YmctY29sb3Ii
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfRElSRUNUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImRpcmVjdGlvbiIsCisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVF
bGVtZW50OmRpcmVjdGlvbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE1h
cnF1ZWVFbGVtZW50OmRpcmVjdGlvbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAgICAg
ICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MTWFycXVlZUVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICIiLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hT
UEFDRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImhzcGFjZSIs
CisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVFbGVtZW50OmhzcGFjZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBndWxvbmcgSFRNTE1hcnF1ZWVFbGVtZW50OmhzcGFjZSIsCisgICAgICAgICAg
ICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0xPT1AsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgImxvb3AiLAorICAgICAgICAgICAgIkhUTUxNYXJxdWVlRWxlbWVudDpsb29w
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxNYXJxdWVlRWxlbWVudDpsb29w
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUk9MTF9BTU9VTlQs
CisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJzY3JvbGwtYW1vdW50
IiwKKyAgICAgICAgICAgICJIVE1MTWFycXVlZUVsZW1lbnQ6c2Nyb2xsLWFtb3VudCIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBndWxvbmcgSFRNTE1hcnF1ZWVFbGVtZW50OnNjcm9sbC1hbW91
bnQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JPTExfREVMQVksCisgICAg
ICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJzY3JvbGwtZGVsYXkiLAorICAg
ICAgICAgICAgIkhUTUxNYXJxdWVlRWxlbWVudDpzY3JvbGwtZGVsYXkiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxNYXJxdWVlRWxlbWVudDpzY3JvbGwtZGVsYXkiLAorICAg
ICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UUlVFX1NQRUVELAorICAgICAgICBnX3BhcmFt
X3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ0cnVlLXNwZWVkIiwKKyAgICAgICAgICAgICJI
VE1MTWFycXVlZUVsZW1lbnQ6dHJ1ZS1zcGVlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Ym9vbGVhbiBIVE1MTWFycXVlZUVsZW1lbnQ6dHJ1ZS1zcGVlZCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9WU1BBQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJ2
c3BhY2UiLAorICAgICAgICAgICAgIkhUTUxNYXJxdWVlRWxlbWVudDp2c3BhY2UiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ3Vsb25nIEhUTUxNYXJxdWVlRWxlbWVudDp2c3BhY2UiLAorICAg
ICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTE1hcnF1ZWVF
bGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MTWFycXVl
ZUVsZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1
ZWVfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9zdGFydChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnN0YXJ0KCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxl
bWVudF9zdG9wKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpI
VE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c3RvcCgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRf
YmVoYXZpb3IoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJlaGF2aW9yQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVu
dF9zZXRfYmVoYXZpb3IoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3Ry
aW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBp
dGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6YmVoYXZpb3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Ymdjb2xvckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxNYXJx
dWVlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmJnY29sb3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9kaXJlY3Rp
b24oV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRpcmVjdGlvbkF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0
X2RpcmVjdGlvbihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNl
bGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFy
cXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpk
aXJlY3Rpb25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmhlaWdodEF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2d1
bG9uZyB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9oc3BhY2UoV2ViS2l0RE9N
SFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfTUFSUVVFRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpoc3Bh
Y2VBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9t
YXJxdWVlX2VsZW1lbnRfc2V0X2hzcGFjZShXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNl
bGYsIGd1bG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmhzcGFjZUF0dHIsIHZhbHVlKTsKK30KKworZ2xvbmcgd2Vi
a2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfbG9vcChXZWJLaXRET01IVE1MTWFycXVl
ZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVF
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5sb29wKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X3NldF9sb29wKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ2xvbmcg
dmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJR
VUVFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5z
ZXRMb29wKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitndWxvbmcgd2Via2l0X2RvbV9odG1sX21hcnF1
ZWVfZWxlbWVudF9nZXRfc2Nyb2xsX2Ftb3VudChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+c2Nyb2xsQW1vdW50KCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X3NldF9zY3JvbGxfYW1vdW50KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2Vs
ZiwgZ3Vsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VM
RU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTY3JvbGxBbW91bnQodmFsdWUpOworfQor
CitndWxvbmcgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfc2Nyb2xsX2RlbGF5
KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX01BUlFVRUVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyBy
ZXN1bHQgPSBpdGVtLT5zY3JvbGxEZWxheSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfc2Nyb2xsX2RlbGF5KFdlYktp
dERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhU
TUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5z
ZXRTY3JvbGxEZWxheSh2YWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tYXJx
dWVlX2VsZW1lbnRfZ2V0X3RydWVfc3BlZWQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0cnVlc3BlZWRBdHRy
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tYXJxdWVl
X2VsZW1lbnRfc2V0X3RydWVfc3BlZWQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnRydWVzcGVlZEF0dHIsIHZhbHVlKTsKK30KKworZ3Vsb25nIHdlYmtpdF9k
b21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3ZzcGFjZShXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0VW5zaWdu
ZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnZzcGFjZUF0dHIpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVu
dF9zZXRfdnNwYWNlKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlQoc2VsZikp
OworICAgIFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6dnNwYWNlQXR0ciwgdmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Ondp
ZHRoQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01B
UlFVRUVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NGE2MDAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lO
U0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtp
dGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisj
aWZuZGVmIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9NQVJRVUVFX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUFSUVVF
RV9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX01BUlFVRUVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1h
cnF1ZWVFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01BUlFVRUVfRUxFTUVOVF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9NQVJRVUVFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVu
dENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfTUFSUVVFRV9FTEVNRU5UKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9IVE1MX01BUlFVRUVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9NQVJR
VUVFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUFSUVVFRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX01BUlFVRUVfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVJRVUVFX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01I
VE1MTWFycXVlZUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0
YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50Q2xhc3Mgewor
ICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfdHlwZSh2b2lk
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3N0YXJ0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3N0YXJ0KFdlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1
ZWVfZWxlbWVudF9zdG9wOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVu
dAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVt
ZW50X3N0b3AoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudF9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVF
bGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDlj
NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFByaXZhdGUuaApA
QCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01I
VE1MTWFycXVlZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1hcnF1
ZWVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNYXJxdWVlRWxl
bWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVu
dCogd3JhcEhUTUxNYXJxdWVlRWxlbWVudChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQqKTsK
K1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxl
bWVudCopOworV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxN
YXJxdWVlRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TE1hcnF1ZWVFbGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50VW5zdGFi
bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTgyMzAwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEs
MjY2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUhUTUxNYXJxdWVlRWxlbWVudFVuc3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE1hcnF1
ZWVFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
CisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9n
ZXRfYmVoYXZpb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9i
ZWhhdmlvcihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2JlaGF2aW9yOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWFycXVlZV9lbGVtZW50X3NldF9iZWhhdmlvcihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X21hcnF1ZWVfZWxlbWVudF9nZXRfYmdfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWFy
cXVlZV9lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2JnX2Nv
bG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9iZ19jb2xvcihXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfZGlyZWN0aW9uOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfZGlyZWN0aW9uKFdlYktpdERPTUhU
TUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1
ZWVfZWxlbWVudF9zZXRfZGlyZWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJx
dWVlRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50
X3NldF9kaXJlY3Rpb24oV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
Z2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X2hl
aWdodChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21h
cnF1ZWVfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVl
ZV9lbGVtZW50X2dldF9oc3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxl
bWVudF9nZXRfaHNwYWNlKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfaHNwYWNlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICogQHZhbHVlOiBBICNndWxvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfaHNwYWNlKFdlYktpdERPTUhUTUxNYXJxdWVl
RWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
bWFycXVlZV9lbGVtZW50X2dldF9sb29wOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJx
dWVlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9l
bGVtZW50X2dldF9sb29wKFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfbG9vcDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9sb29wKFdlYktp
dERPTUhUTUxNYXJxdWVlRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF9zY3JvbGxf
YW1vdW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3Njcm9s
bF9hbW91bnQoV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF9zY3JvbGxfYW1vdW50OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICogQHZhbHVlOiBBICNndWxvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9zZXRfc2Nyb2xsX2Ftb3VudChXZWJLaXRET01IVE1M
TWFycXVlZUVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfc2Nyb2xsX2RlbGF5OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9k
b21faHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3Njcm9sbF9kZWxheShXZWJLaXRET01IVE1MTWFy
cXVlZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2Vs
ZW1lbnRfc2V0X3Njcm9sbF9kZWxheToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVl
ZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
c2V0X3Njcm9sbF9kZWxheShXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGd1bG9u
ZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRf
dHJ1ZV9zcGVlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9n
ZXRfdHJ1ZV9zcGVlZChXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3RydWVfc3BlZWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29s
ZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3RydWVfc3BlZWQoV2ViS2l0RE9NSFRN
TE1hcnF1ZWVFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfdnNwYWNlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxNYXJxdWVlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21f
aHRtbF9tYXJxdWVlX2VsZW1lbnRfZ2V0X3ZzcGFjZShXZWJLaXRET01IVE1MTWFycXVlZUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0
X3ZzcGFjZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc2V0X3ZzcGFjZShXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX21hcnF1ZWVfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MTWFycXVlZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRf
c2V0X3dpZHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X3NldF93aWR0aChXZWJL
aXRET01IVE1MTWFycXVlZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwor
I2VuZGlmIC8qIFdlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MGRkMDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTUxMCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAi
R09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1l
bnRNZWRpYVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTU1lZGlhQ29udHJvbGxlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYUVy
cm9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRpbWVSYW5nZXNQcml2
YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoVklERU8pCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBraXQoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hU
TUxfTUVESUFfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsK
K30KKworV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHdyYXBIVE1MTWVk
aWFFbGVtZW50KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAg
QVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxF
TUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVESUFfRUxFTUVOVCwgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7Cisj
aWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6
OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29y
ZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24u
Y29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2FkZF9l
dmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBl
dmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lm
IEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCo+KFdFQktJVF9ET01fT0JK
RUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVu
dExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQs
IGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJB
TShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZl
bnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVz
ZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZh
Y2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlz
dGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7
CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRI
X0NPREUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRVJST1IsCisgICAgUFJPUF9T
UkMsCisgICAgUFJPUF9DVVJSRU5UX1NSQywKKyAgICBQUk9QX0NST1NTX09SSUdJTiwKKyAgICBQ
Uk9QX05FVFdPUktfU1RBVEUsCisgICAgUFJPUF9QUkVMT0FELAorICAgIFBST1BfQlVGRkVSRUQs
CisgICAgUFJPUF9SRUFEWV9TVEFURSwKKyAgICBQUk9QX1NFRUtJTkcsCisgICAgUFJPUF9DVVJS
RU5UX1RJTUUsCisgICAgUFJPUF9EVVJBVElPTiwKKyAgICBQUk9QX1BBVVNFRCwKKyAgICBQUk9Q
X0RFRkFVTFRfUExBWUJBQ0tfUkFURSwKKyAgICBQUk9QX1BMQVlCQUNLX1JBVEUsCisgICAgUFJP
UF9QTEFZRUQsCisgICAgUFJPUF9TRUVLQUJMRSwKKyAgICBQUk9QX0VOREVELAorICAgIFBST1Bf
QVVUT1BMQVksCisgICAgUFJPUF9MT09QLAorICAgIFBST1BfQ09OVFJPTFMsCisgICAgUFJPUF9W
T0xVTUUsCisgICAgUFJPUF9NVVRFRCwKKyAgICBQUk9QX0RFRkFVTFRfTVVURUQsCisgICAgUFJP
UF9XRUJLSVRfUFJFU0VSVkVTX1BJVENILAorICAgIFBST1BfV0VCS0lUX0hBU19DTE9TRURfQ0FQ
VElPTlMsCisgICAgUFJPUF9XRUJLSVRfQ0xPU0VEX0NBUFRJT05TX1ZJU0lCTEUsCisgICAgUFJP
UF9XRUJLSVRfQVVESU9fREVDT0RFRF9CWVRFX0NPVU5ULAorICAgIFBST1BfV0VCS0lUX1ZJREVP
X0RFQ09ERURfQllURV9DT1VOVCwKKyAgICBQUk9QX01FRElBX0dST1VQLAorICAgIFBST1BfQ09O
VFJPTExFUiwKKyAgICBQUk9QX1dFQktJVF9DVVJSRU5UX1BMQVlCQUNLX1RBUkdFVF9JU19XSVJF
TEVTUywKKyAgICBQUk9QX0tJTkQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1F
TlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9T
UkM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9zcmMoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9DUk9TU19PUklHSU46CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3Nl
dF9jcm9zc19vcmlnaW4oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9QUkVMT0FEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9zZXRfcHJlbG9hZChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NVUlJFTlRfVElNRToKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2N1cnJlbnRfdGltZShzZWxmLCBnX3Zh
bHVlX2dldF9kb3VibGUodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0RFRkFVTFRfUExBWUJBQ0tfUkFURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfc2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShzZWxmLCBnX3ZhbHVlX2dldF9k
b3VibGUodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BMQVlCQUNLX1JB
VEU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9wbGF5YmFja19y
YXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQVVUT1BMQVk6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X3NldF9hdXRvcGxheShzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT09QOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9zZXRfbG9vcChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05UUk9MUzoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2NvbnRyb2xzKHNlbGYsIGdfdmFsdWVfZ2V0X2Jv
b2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZPTFVNRToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3ZvbHVtZShzZWxmLCBnX3Zh
bHVlX2dldF9kb3VibGUodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX01VVEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRf
bXV0ZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfREVGQVVMVF9NVVRFRDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21l
ZGlhX2VsZW1lbnRfc2V0X2RlZmF1bHRfbXV0ZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX1BSRVNFUlZFU19Q
SVRDSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3dlYmtpdF9w
cmVzZXJ2ZXNfcGl0Y2goc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0NMT1NFRF9DQVBUSU9OU19WSVNJQkxFOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfd2Via2l0X2Nsb3NlZF9j
YXB0aW9uc192aXNpYmxlKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FRElBX0dST1VQOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfbWVkaWFfZ3JvdXAoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9LSU5EOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfa2luZChzZWxmLCBnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9tZWRpYV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVO
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0VS
Uk9SOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X2dldF9lcnJvcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9TUkM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF9tZWRpYV9lbGVtZW50X2dldF9zcmMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ1VSUkVOVF9TUkM6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jdXJyZW50X3NyYyhzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DUk9TU19PUklHSU46CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9j
cm9zc19vcmlnaW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkVUV09S
S19TVEFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfZ2V0X25ldHdvcmtfc3RhdGUoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUFJFTE9BRDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3ByZWxvYWQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQlVGRkVSRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2J1ZmZlcmVk
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFQURZX1NUQVRFOgorICAg
ICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9nZXRfcmVhZHlfc3RhdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
U0VFS0lORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X3NlZWtpbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQ1VSUkVOVF9USU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jdXJyZW50X3RpbWUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRFVSQVRJT046CisgICAgICAgIGdfdmFs
dWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2R1
cmF0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVVNFRDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZ2V0X3BhdXNlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9E
RUZBVUxUX1BMQVlCQUNLX1JBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QTEFZQkFDS19SQVRFOgorICAg
ICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X2dldF9wbGF5YmFja19yYXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1BMQVlFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxheWVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NFRUtBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9zZWVrYWJsZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkRFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2VuZGVkKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9QTEFZOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRf
YXV0b3BsYXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9PUDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZ2V0X2xvb3Aoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09O
VFJPTFM6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF9jb250cm9scyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9WT0xVTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3ZvbHVtZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9NVVRFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X211dGVkKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfTVVURUQ6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9k
ZWZhdWx0X211dGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJ
VF9QUkVTRVJWRVNfUElUQ0g6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfcHJlc2VydmVzX3BpdGNoKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9IQVNfQ0xPU0VEX0NB
UFRJT05TOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X2hhc19jbG9zZWRfY2FwdGlvbnMoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0NMT1NFRF9DQVBUSU9OU19WSVNJ
QkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X2Nsb3NlZF9jYXB0aW9uc192aXNpYmxlKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9BVURJT19ERUNPREVEX0JZVEVf
Q09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X2F1ZGlvX2RlY29kZWRfYnl0ZV9jb3VudChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfVklERU9fREVDT0RFRF9CWVRF
X0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF92aWRlb19kZWNvZGVkX2J5dGVfY291bnQoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVESUFfR1JPVVA6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dl
dF9tZWRpYV9ncm91cChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DT05U
Uk9MTEVSOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF9jb250cm9sbGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1dFQktJVF9DVVJSRU5UX1BMQVlCQUNLX1RBUkdFVF9JU19XSVJFTEVTUzoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21lZGlh
X2VsZW1lbnRfZ2V0X3dlYmtpdF9jdXJyZW50X3BsYXliYWNrX3RhcmdldF9pc193aXJlbGVzcyhz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9LSU5EOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRf
a2luZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxf
bWVkaWFfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRDbGFzcyog
cmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9FUlJPUiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgKKyAgICAgICAgICAgICJlcnJvciIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxl
bWVudDplcnJvciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU1lZGlhRXJyb3Iq
IEhUTUxNZWRpYUVsZW1lbnQ6ZXJyb3IiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX01F
RElBX0VSUk9SLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfU1JDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgInNyYyIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpzcmMiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNZWRpYUVsZW1lbnQ6c3JjIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0NVUlJFTlRfU1JDLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImN1cnJlbnQtc3JjIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmN1cnJl
bnQtc3JjIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxNZWRpYUVsZW1lbnQ6
Y3VycmVudC1zcmMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DUk9TU19PUklHSU4sCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY3Jvc3Mtb3JpZ2luIiwKKyAgICAgICAg
ICAgICJIVE1MTWVkaWFFbGVtZW50OmNyb3NzLW9yaWdpbiIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTE1lZGlhRWxlbWVudDpjcm9zcy1vcmlnaW4iLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTkVUV09SS19TVEFURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAg
ICAgICAibmV0d29yay1zdGF0ZSIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpuZXR3
b3JrLXN0YXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VzaG9ydCBIVE1MTWVkaWFFbGVt
ZW50Om5ldHdvcmstc3RhdGUiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUFJFTE9B
RCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwcmVsb2FkIiwK
KyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OnByZWxvYWQiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxNZWRpYUVsZW1lbnQ6cHJlbG9hZCIsCisgICAgICAgICAgICAi
IiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9CVUZGRVJFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAg
ICJidWZmZXJlZCIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpidWZmZXJlZCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRpbWVSYW5nZXMqIEhUTUxNZWRpYUVsZW1l
bnQ6YnVmZmVyZWQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VTLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
UkVBRFlfU1RBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgInJl
YWR5LXN0YXRlIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OnJlYWR5LXN0YXRlIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VzaG9ydCBIVE1MTWVkaWFFbGVtZW50OnJlYWR5LXN0
YXRlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NFRUtJTkcsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInNlZWtpbmciLAorICAgICAgICAgICAg
IkhUTUxNZWRpYUVsZW1lbnQ6c2Vla2luZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29s
ZWFuIEhUTUxNZWRpYUVsZW1lbnQ6c2Vla2luZyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NVUlJF
TlRfVElNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJjdXJy
ZW50LXRpbWUiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6Y3VycmVudC10aW1lIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgSFRNTE1lZGlhRWxlbWVudDpjdXJyZW50
LXRpbWUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9EVVJB
VElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJkdXJhdGlv
biIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpkdXJhdGlvbiIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdkb3VibGUgSFRNTE1lZGlhRWxlbWVudDpkdXJhdGlvbiIsCisgICAgICAg
ICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFVU0VELAorICAgICAgICBnX3Bh
cmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJwYXVzZWQiLAorICAgICAgICAgICAgIkhU
TUxNZWRpYUVsZW1lbnQ6cGF1c2VkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4g
SFRNTE1lZGlhRWxlbWVudDpwYXVzZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX1BM
QVlCQUNLX1JBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAi
ZGVmYXVsdC1wbGF5YmFjay1yYXRlIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OmRl
ZmF1bHQtcGxheWJhY2stcmF0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZG91YmxlIEhU
TUxNZWRpYUVsZW1lbnQ6ZGVmYXVsdC1wbGF5YmFjay1yYXRlIiwKKyAgICAgICAgICAgIC1HX01B
WERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUExBWUJBQ0tfUkFURSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJwbGF5YmFjay1yYXRlIiwKKyAgICAgICAgICAg
ICJIVE1MTWVkaWFFbGVtZW50OnBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2RvdWJsZSBIVE1MTWVkaWFFbGVtZW50OnBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAg
LUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QTEFZRUQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAicGxheWVkIiwKKyAgICAgICAgICAgICJIVE1MTWVk
aWFFbGVtZW50OnBsYXllZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRpbWVS
YW5nZXMqIEhUTUxNZWRpYUVsZW1lbnQ6cGxheWVkIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01f
VFlQRV9USU1FX1JBTkdFUywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1NFRUtBQkxFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KAorICAgICAgICAgICAgInNlZWthYmxlIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50
OnNlZWthYmxlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVGltZVJhbmdlcyog
SFRNTE1lZGlhRWxlbWVudDpzZWVrYWJsZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
VElNRV9SQU5HRVMsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9FTkRFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAg
ICAgICAgICAiZW5kZWQiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6ZW5kZWQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBIVE1MTWVkaWFFbGVtZW50OmVuZGVkIiwK
KyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQVVUT1BMQVksCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImF1dG9wbGF5IiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVt
ZW50OmF1dG9wbGF5IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxNZWRp
YUVsZW1lbnQ6YXV0b3BsYXkiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTE9PUCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAibG9vcCIsCisgICAgICAgICAgICAi
SFRNTE1lZGlhRWxlbWVudDpsb29wIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFu
IEhUTUxNZWRpYUVsZW1lbnQ6bG9vcCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT05UUk9MUywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY29udHJvbHMiLAor
ICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6Y29udHJvbHMiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE1lZGlhRWxlbWVudDpjb250cm9scyIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9WT0xVTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAg
ICAgICAidm9sdW1lIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OnZvbHVtZSIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnZG91YmxlIEhUTUxNZWRpYUVsZW1lbnQ6dm9sdW1lIiwK
KyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTVVURUQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIm11dGVkIiwKKyAgICAgICAg
ICAgICJIVE1MTWVkaWFFbGVtZW50Om11dGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdi
b29sZWFuIEhUTUxNZWRpYUVsZW1lbnQ6bXV0ZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVG
QVVMVF9NVVRFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAi
ZGVmYXVsdC1tdXRlZCIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDpkZWZhdWx0LW11
dGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxNZWRpYUVsZW1lbnQ6
ZGVmYXVsdC1tdXRlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfUFJFU0VSVkVTX1BJ
VENILAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3ZWJraXQt
cHJlc2VydmVzLXBpdGNoIiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVtZW50OndlYmtpdC1w
cmVzZXJ2ZXMtcGl0Y2giLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE1l
ZGlhRWxlbWVudDp3ZWJraXQtcHJlc2VydmVzLXBpdGNoIiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1dFQktJVF9IQVNfQ0xPU0VEX0NBUFRJT05TLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJ3ZWJraXQtaGFzLWNsb3NlZC1jYXB0aW9ucyIsCisgICAgICAgICAg
ICAiSFRNTE1lZGlhRWxlbWVudDp3ZWJraXQtaGFzLWNsb3NlZC1jYXB0aW9ucyIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxNZWRpYUVsZW1lbnQ6d2Via2l0LWhhcy1jbG9z
ZWQtY2FwdGlvbnMiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfQ0xPU0VEX0NBUFRJT05T
X1ZJU0lCTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndl
YmtpdC1jbG9zZWQtY2FwdGlvbnMtdmlzaWJsZSIsCisgICAgICAgICAgICAiSFRNTE1lZGlhRWxl
bWVudDp3ZWJraXQtY2xvc2VkLWNhcHRpb25zLXZpc2libGUiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2Jvb2xlYW4gSFRNTE1lZGlhRWxlbWVudDp3ZWJraXQtY2xvc2VkLWNhcHRpb25zLXZp
c2libGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0FVRElPX0RFQ09ERURfQllURV9D
T1VOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgIndlYmtpdC1h
dWRpby1kZWNvZGVkLWJ5dGUtY291bnQiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6
d2Via2l0LWF1ZGlvLWRlY29kZWQtYnl0ZS1jb3VudCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGd1bG9uZyBIVE1MTWVkaWFFbGVtZW50OndlYmtpdC1hdWRpby1kZWNvZGVkLWJ5dGUtY291bnQi
LAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9WSURFT19ERUNPREVEX0JZ
VEVfQ09VTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJ3ZWJr
aXQtdmlkZW8tZGVjb2RlZC1ieXRlLWNvdW50IiwKKyAgICAgICAgICAgICJIVE1MTWVkaWFFbGVt
ZW50OndlYmtpdC12aWRlby1kZWNvZGVkLWJ5dGUtY291bnQiLAorICAgICAgICAgICAgInJlYWQt
b25seSBndWxvbmcgSFRNTE1lZGlhRWxlbWVudDp3ZWJraXQtdmlkZW8tZGVjb2RlZC1ieXRlLWNv
dW50IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NRURJQV9HUk9VUCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJtZWRpYS1ncm91cCIsCisgICAg
ICAgICAgICAiSFRNTE1lZGlhRWxlbWVudDptZWRpYS1ncm91cCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnY2hhciogSFRNTE1lZGlhRWxlbWVudDptZWRpYS1ncm91cCIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9DT05UUk9MTEVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAg
ICAgICAgImNvbnRyb2xsZXIiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6Y29udHJv
bGxlciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU1lZGlhQ29udHJvbGxlciog
SFRNTE1lZGlhRWxlbWVudDpjb250cm9sbGVyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9NRURJQV9DT05UUk9MTEVSLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX0NVUlJFTlRfUExBWUJBQ0tfVEFSR0VUX0lTX1dJ
UkVMRVNTLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3ZWJr
aXQtY3VycmVudC1wbGF5YmFjay10YXJnZXQtaXMtd2lyZWxlc3MiLAorICAgICAgICAgICAgIkhU
TUxNZWRpYUVsZW1lbnQ6d2Via2l0LWN1cnJlbnQtcGxheWJhY2stdGFyZ2V0LWlzLXdpcmVsZXNz
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTE1lZGlhRWxlbWVudDp3ZWJr
aXQtY3VycmVudC1wbGF5YmFjay10YXJnZXQtaXMtd2lyZWxlc3MiLAorICAgICAgICAgICAgRkFM
U0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9LSU5ELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImtp
bmQiLAorICAgICAgICAgICAgIkhUTUxNZWRpYUVsZW1lbnQ6a2luZCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTE1lZGlhRWxlbWVudDpraW5kIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTE1lZGlh
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK3Zv
aWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfbG9hZChXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5sb2FkKCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfY2FuX3BsYXlfdHlwZShXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdHlwZSkKK3sKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh0eXBlLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFR5cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodHlwZSk7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y2FuUGxheVR5cGUoY29udmVydGVkVHlw
ZSkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8K
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9wYXVzZShXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5wYXVzZSgp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9mYXN0X3NlZWsoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZiwgZ2RvdWJsZSB0aW1lKQoreworI2lmIEVOQUJMRShWSURFTykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5mYXN0U2Vlayh0aW1lKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFVOVVNFRF9QQVJBTSh0aW1lKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9tZWRpYV9lbGVtZW50X3dlYmtpdF9zaG93X3BsYXliYWNrX3RhcmdldF9waWNrZXIo
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisj
aWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT53ZWJraXRTaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXIoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldpcmVsZXNzIFBsYXliYWNrIFRhcmdldCIp
CisjZW5kaWYgLyogRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgKi8KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK1dlYktpdERPTU1l
ZGlhRXJyb3IqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9lcnJvcihXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok1lZGlhRXJyb3I+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVt
LT5lcnJvcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3Ny
YyhXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c3JjQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9zcmMo
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnNyY0F0dHIsIGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jdXJyZW50X3NyYyhXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y3VycmVudFNyYygpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOworI2VuZGlm
IC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9l
bGVtZW50X2dldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJ
QV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmNyb3NzT3JpZ2luKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9jcm9zc19vcmlnaW4o
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0Q3Jvc3NPcmlnaW4oY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQor
CitndXNob3J0IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9uZXR3b3JrX3N0YXRl
KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPm5ldHdvcmtTdGF0ZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1c2hv
cnQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9k
b21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9wcmVsb2FkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5wcmVsb2FkKCkpOworICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVP
KSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9wcmVsb2Fk
KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1F
TlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0
ZW0tPnNldFByZWxvYWQoY29udmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitX
ZWJLaXRET01UaW1lUmFuZ2VzKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfYnVm
ZmVyZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+YnVmZmVyZWQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmpl
Y3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOworI2Vu
ZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9nZXRfcmVhZHlfc3RhdGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+cmVh
ZHlTdGF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGd1c2hvcnQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykg
Ki8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3NlZWtp
bmcoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zZWVraW5nKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2RvdWJsZSB3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3VycmVudF90aW1lKFdlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJl
c3VsdCA9IGl0ZW0tPmN1cnJlbnRUaW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X3NldF9jdXJyZW50X3RpbWUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Rv
dWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGl0ZW0tPnNldEN1cnJlbnRUaW1lKHZhbHVlLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2R1cmF0aW9uKFdlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9
IGl0ZW0tPmR1cmF0aW9uKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxF
KFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9n
ZXRfcGF1c2VkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxm
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cGF1c2VkKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2RvdWJs
ZSB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRl
KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmRlZmF1bHRQbGF5YmFja1JhdGUoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlKQoreworI2lmIEVOQUJM
RShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7
CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXREZWZhdWx0UGxheWJhY2tSYXRlKHZhbHVlKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURF
TykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxh
eWJhY2tfcmF0ZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJM
RShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5wbGF5YmFja1JhdGUoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9N
SFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2RvdWJsZSB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAg
IFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+c2V0UGxheWJhY2tSYXRlKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwor
V2ViS2l0RE9NVGltZVJhbmdlcyogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3Bs
YXllZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWVSYW5nZXM+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5wbGF5ZWQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RS
ZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOworI2VuZGlm
IC8qIEVOQUJMRShWSURFTykgKi8KK30KKworV2ViS2l0RE9NVGltZVJhbmdlcyogd2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3NlZWthYmxlKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGlt
ZVJhbmdlcz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlZWthYmxlKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9lbmRlZChXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmVuZGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfZ2V0X2F1dG9wbGF5KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
TUVESUFfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmF1dG9wbGF5QXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShW
SURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfYXV0
b3BsYXkoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVN
RU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjphdXRvcGxheUF0dHIsIHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2xvb3AoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6bG9vcEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfc2V0X2xvb3AoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9N
RURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpsb29wQXR0ciwgdmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY29udHJvbHMoV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jb250cm9scygpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFu
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfc2V0X2NvbnRyb2xzKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRDb250
cm9scyh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X3ZvbHVtZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT52
b2x1bWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICov
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3ZvbHVtZShXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElB
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Ip
OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0Vm9s
dW1lKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9t
dXRlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm11dGVkKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jv
b2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfbXV0ZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldE11
dGVkKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8i
KQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfbXV0ZWQoV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6bXV0ZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5B
QkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3Nl
dF9kZWZhdWx0X211dGVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
TUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6bXV0ZWRBdHRyLCB2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9
CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfcHJl
c2VydmVzX3BpdGNoKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5B
QkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2Via2l0UHJlc2Vy
dmVzUGl0Y2goKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVP
KSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF93ZWJraXRf
cHJlc2VydmVzX3BpdGNoKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
TUVESUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRXZWJraXRQcmVzZXJ2ZXNQaXRj
aCh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikK
KyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRt
bF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfaGFzX2Nsb3NlZF9jYXB0aW9ucyhXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdEhhc0Nsb3NlZENhcHRpb25zKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9jbG9zZWRfY2FwdGlvbnNf
dmlzaWJsZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdENsb3NlZENhcHRp
b25zVmlzaWJsZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3dlYmtp
dF9jbG9zZWRfY2FwdGlvbnNfdmlzaWJsZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0V2Via2l0Q2xv
c2VkQ2FwdGlvbnNWaXNpYmxlKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vsb25n
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfYXVkaW9fZGVjb2RlZF9i
eXRlX2NvdW50KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFZJREVPKQorI2lmIEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0
ID0gaXRlbS0+d2Via2l0QXVkaW9EZWNvZGVkQnl0ZUNvdW50KCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIk1lZGlhIFN0YXRpc3RpY3MiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKSAqLworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2Vu
ZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2dldF93ZWJraXRfdmlkZW9fZGVjb2RlZF9ieXRlX2NvdW50KFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorI2lmIEVOQUJMRShN
RURJQV9TVEFUSVNUSUNTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+d2Via2l0VmlkZW9E
ZWNvZGVkQnl0ZUNvdW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlh
IFN0YXRpc3RpY3MiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlm
IC8qIEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKSAqLworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykg
Ki8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9tZWRpYV9n
cm91cChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om1lZGlhZ3JvdXBB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfc2V0X21lZGlhX2dyb3VwKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX01FRElBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjptZWRpYWdyb3VwQXR0ciwgY29udmVy
dGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIp
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitXZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXIqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jb250cm9sbGVyKFdlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6TWVkaWFDb250cm9sbGVyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIo
aXRlbS0+Y29udHJvbGxlcigpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfd2Via2l0X2N1cnJlbnRfcGxheWJhY2tfdGFyZ2V0X2lzX3dpcmVsZXNzKFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorI2lmIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9NRURJQV9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT53ZWJraXRDdXJyZW50UGxheWJhY2tUYXJnZXRJc1dpcmVsZXNzKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldpcmVsZXNzIFBsYXliYWNrIFRhcmdldCIpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKSAqLworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2tpbmQoV2ViS2l0RE9N
SFRNTE1lZGlhRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxF
KE1FRElBX1NFU1NJT04pICYmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX01FRElBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudE1lZGlhU2Vzc2lvbjo6
a2luZChpdGVtKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworI2lmICFFTkFCTEUoVklERU8pCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmCisjaWYgIUVOQUJMRShNRURJQV9TRVNTSU9OKQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFNlc3Npb24iKQorI2VuZGlm
CisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NFU1NJT04pICYmIEVOQUJM
RShWSURFTykgKi8KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAv
KiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfc2V0X2tpbmQoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikg
JiYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRURJQV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50TWVkaWFTZXNzaW9uOjpzZXRLaW5kKCppdGVtLCBjb252ZXJ0
ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworI2lmICFFTkFCTEUoVklERU8pCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmCisjaWYgIUVOQUJMRShNRURJQV9TRVNTSU9OKQor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFNlc3Npb24iKQorI2Vu
ZGlmCisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NFU1NJT04pICYmIEVOQUJMRShWSURFTykgKi8K
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8q
IEVOQUJMRShWSURFTykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40ZDZkYjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50
LmgKQEAgLTAsMCArMSw2NjEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnRfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJ
QV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF90
eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9I
VE1MX01FRElBX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJQV9FTEVNRU5U
LCBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNf
SFRNTF9NRURJQV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX01FRElBX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfTUVESUFfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRURJQV9FTEVNRU5U
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TUVESUFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudENsYXNzKSkKKworLyoqCisg
KiBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9ORVRXT1JLX0VNUFRZOgorICovCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfRU1QVFkgMAorCisvKioK
KyAqIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfSURMRToKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9ORVRXT1JLX0lETEUgMQorCisvKioK
KyAqIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfTE9BRElORzoKKyAqLwor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9ORVRXT1JLX0xPQURJTkcgMgor
CisvKioKKyAqIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfTk9fU09VUkNF
OgorICovCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX05FVFdPUktfTk9f
U09VUkNFIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX05P
VEhJTkc6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FRElBX0VMRU1FTlRfSEFWRV9O
T1RISU5HIDAKKworLyoqCisgKiBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxFTUVOVF9IQVZFX01F
VEFEQVRBOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX0hBVkVf
TUVUQURBVEEgMQorCisvKioKKyAqIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5UX0hBVkVf
Q1VSUkVOVF9EQVRBOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRURJQV9FTEVNRU5U
X0hBVkVfQ1VSUkVOVF9EQVRBIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX0hUTUxfTUVESUFfRUxF
TUVOVF9IQVZFX0ZVVFVSRV9EQVRBOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NRURJ
QV9FTEVNRU5UX0hBVkVfRlVUVVJFX0RBVEEgMworCisvKioKKyAqIFdFQktJVF9ET01fSFRNTF9N
RURJQV9FTEVNRU5UX0hBVkVfRU5PVUdIX0RBVEE6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX01FRElBX0VMRU1FTlRfSEFWRV9FTk9VR0hfREFUQSA0CisKK3N0cnVjdCBfV2ViS2l0RE9N
SFRNTE1lZGlhRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3MgeworICAg
IFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfbG9hZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2xvYWQo
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfY2FuX3BsYXlfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50CisgKiBAdHlwZTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2Nhbl9wbGF5X3R5cGUoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHR5cGUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3BhdXNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfcGF1c2UoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZmFzdF9zZWVrOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQK
KyAqIEB0aW1lOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2Zhc3Rfc2VlayhX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHRpbWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3dlYmtpdF9zaG93X3BsYXliYWNrX3Rhcmdl
dF9waWNrZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF93ZWJraXRfc2hvd19wbGF5YmFja190YXJnZXRfcGlja2VyKFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X2dldF9lcnJvcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01NZWRp
YUVycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTU1lZGlhRXJyb3IqCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZXJyb3Io
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21lZGlhX2VsZW1lbnRfZ2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9zcmM6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVk
aWFfZWxlbWVudF9zZXRfc3JjKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X2N1cnJlbnRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9j
dXJyZW50X3NyYyhXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2luOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTE1l
ZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfc2V0X2Nyb3NzX29yaWdpbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9jcm9z
c19vcmlnaW4oV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbmV0d29y
a19zdGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICog
UmV0dXJuczogQSAjZ3VzaG9ydAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbmV0d29y
a19zdGF0ZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcHJlbG9hZDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfbWVkaWFfZWxlbWVudF9nZXRfcHJlbG9hZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfcHJlbG9h
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9wcmVsb2FkKFdlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2J1ZmZlcmVkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTVRpbWVSYW5nZXMKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dF
QktJVF9BUEkgV2ViS2l0RE9NVGltZVJhbmdlcyoKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVt
ZW50X2dldF9idWZmZXJlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcmVhZHlfc3RhdGU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1
c2hvcnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VzaG9y
dAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3JlYWR5X3N0YXRlKFdlYktpdERP
TUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X2dldF9zZWVraW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZ2V0X3NlZWtpbmcoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2N1cnJlbnRfdGltZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAj
Z2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91
YmxlCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY3VycmVudF90aW1lKFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X3NldF9jdXJyZW50X3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudAorICogQHZhbHVlOiBBICNnZG91YmxlCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2N1cnJlbnRfdGltZShXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2R1cmF0aW9uOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91Ymxl
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9kdXJhdGlvbihXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9nZXRfcGF1c2VkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X3BhdXNlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
ZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3Vi
bGUKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9kZWZhdWx0X3BsYXliYWNrX3Jh
dGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVu
dF9zZXRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3Bs
YXliYWNrX3JhdGUoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2RvdWJsZSB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3BsYXllZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRpbWVSYW5nZXMqCit3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfcGxheWVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9z
ZWVrYWJsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRpbWVSYW5nZXMq
Cit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfc2Vla2FibGUoV2ViS2l0RE9NSFRN
TE1lZGlhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2Vs
ZW1lbnRfZ2V0X2VuZGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
Z2V0X2VuZGVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9hdXRvcGxheToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9hdXRvcGxheShXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9z
ZXRfYXV0b3BsYXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfYXV0b3BsYXko
V2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF9sb29wOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2xvb3AoV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0
X2xvb3A6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVl
OiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfbG9vcChXZWJLaXRET01I
VE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2NvbnRyb2xzOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X2NvbnRyb2xzKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9j
b250cm9sczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9jb250cm9scyhXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X3ZvbHVtZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfdm9sdW1lKFdlYktpdERPTUhUTUxNZWRpYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF92
b2x1bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICogQHZhbHVl
OiBBICNnZG91YmxlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRf
c2V0X3ZvbHVtZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnZG91YmxlIHZhbHVl
LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfZ2V0X211dGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X211dGVkKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9tdXRlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRp
YV9lbGVtZW50X3NldF9tdXRlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBnYm9v
bGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X2RlZmF1bHRfbXV0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9n
ZXRfZGVmYXVsdF9tdXRlZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfZGVmYXVsdF9tdXRlZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29s
ZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X3NldF9kZWZhdWx0X211dGVkKFdlYktpdERPTUhU
TUxNZWRpYUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X3ByZXNlcnZlc19waXRjaDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jv
b2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfcHJlc2VydmVzX3Bp
dGNoKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9tZWRpYV9lbGVtZW50X3NldF93ZWJraXRfcHJlc2VydmVzX3BpdGNoOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4K
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfc2V0X3dlYmtpdF9wcmVzZXJ2ZXNfcGl0Y2goV2ViS2l0
RE9NSFRNTE1lZGlhRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfaGFzX2Nsb3NlZF9jYXB0aW9u
czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfaGFz
X2Nsb3NlZF9jYXB0aW9ucyhXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X2Nsb3NlZF9jYXB0
aW9uc192aXNpYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X3dlYmtpdF9jbG9zZWRfY2FwdGlvbnNfdmlzaWJsZShXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfd2Vi
a2l0X2Nsb3NlZF9jYXB0aW9uc192aXNpYmxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxN
ZWRpYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1l
bnRfc2V0X3dlYmtpdF9jbG9zZWRfY2FwdGlvbnNfdmlzaWJsZShXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X21lZGlhX2VsZW1lbnRfZ2V0X3dlYmtpdF9hdWRpb19kZWNvZGVkX2J5dGVfY291bnQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1
bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcK
K3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfYXVkaW9fZGVjb2RlZF9i
eXRlX2NvdW50KFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dldF93ZWJraXRfdmlkZW9fZGVjb2RlZF9ieXRl
X2NvdW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X3Zp
ZGVvX2RlY29kZWRfYnl0ZV9jb3VudChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfbWVkaWFfZ3JvdXA6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0X21lZGlhX2dyb3VwKFdlYktp
dERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9t
ZWRpYV9lbGVtZW50X3NldF9tZWRpYV9ncm91cDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X3NldF9tZWRpYV9ncm91cChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50X2dl
dF9jb250cm9sbGVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxl
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01N
ZWRpYUNvbnRyb2xsZXIqCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfY29udHJv
bGxlcihXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfd2Via2l0X2N1cnJlbnRfcGxheWJhY2tfdGFyZ2V0
X2lzX3dpcmVsZXNzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX21lZGlhX2VsZW1lbnRfZ2V0
X3dlYmtpdF9jdXJyZW50X3BsYXliYWNrX3RhcmdldF9pc193aXJlbGVzcyhXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxl
bWVudF9nZXRfa2luZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfbWVkaWFfZWxlbWVudF9nZXRfa2lu
ZChXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfbWVkaWFfZWxlbWVudF9zZXRfa2luZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZWRpYV9lbGVtZW50
X3NldF9raW5kKFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50X2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lZGlhRWxl
bWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2Q3Yjgz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVkaWFFbGVtZW50UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NSFRNTE1lZGlhRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWVk
aWFFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZWRpYUVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudC5oPgorI2lm
IEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50KiB3cmFwSFRNTE1lZGlhRWxlbWVudChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Kik7
CitXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dCopOworV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTWVkaWFF
bGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShWSURF
TykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRQcml2YXRlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZThmNDE5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMTcwIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUg
IkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NSFRNTE1lbnVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50KiBvYmopCit7
CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9NRU5VX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0
PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxNZW51RWxlbWVudCog
Y29yZShXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MTWVu
dUVsZW1lbnQqIHdyYXBIVE1MTWVudUVsZW1lbnQoV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX01FTlVfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TUVOVV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X21lbnVfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0
LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50
KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X21lbnVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MTWVudUVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJn
ZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9k
b21faHRtbF9tZW51X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3Rl
bmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxf
bWVudV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfbWVudV9l
bGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZB
Q0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRf
aW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NPTVBBQ1QsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNZW51RWxlbWVudCogc2VsZiA9IFdF
QktJVF9ET01fSFRNTF9NRU5VX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9DT01QQUNUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
bWVudV9lbGVtZW50X3NldF9jb21wYWN0KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1l
bnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE1lbnVFbGVt
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVChvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfZ2V0
X2NvbXBhY3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX21lbnVfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxNZW51RWxlbWVudENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5
ID0gd2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT01QQUNULAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjb21wYWN0IiwKKyAgICAgICAgICAgICJIVE1MTWVu
dUVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1M
TWVudUVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfbWVudV9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50KiByZXF1ZXN0KQor
eworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX21lbnVfZWxlbWVudF9nZXRfY29tcGFjdChXZWJLaXRET01IVE1MTWVudUVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRU5VX0VMRU1FTlQoc2VsZiks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvbXBhY3RBdHRyKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZW51X2VsZW1lbnRfc2V0
X2NvbXBhY3QoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTUVOVV9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmNvbXBhY3RBdHRy
LCB2YWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxNZW51RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBk
MTI1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZW51RWxlbWVudC5oCkBAIC0wLDAg
KzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxNZW51RWxlbWVudF9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxNZW51RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9NRU5VX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9o
dG1sX21lbnVfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVO
VV9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9IVE1MX01FTlVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1lbnVF
bGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9NRU5VX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNZW51RWxlbWVudENsYXNzKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0lTX0hUTUxfTUVOVV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX01FTlVfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9NRU5VX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TUVOVV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FTlVfRUxFTUVOVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9NRU5VX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNZW51RWxlbWVudENsYXNzKSkK
Kworc3RydWN0IF9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxF
bGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE1lbnVF
bGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X2dl
dF9jb21wYWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZW51RWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21faHRtbF9tZW51X2VsZW1lbnRfZ2V0X2NvbXBhY3QoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWVudV9lbGVtZW50X3NldF9jb21w
YWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZW51RWxlbWVudAorICogQHZhbHVlOiBB
ICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWVu
dV9lbGVtZW50X3NldF9jb21wYWN0KFdlYktpdERPTUhUTUxNZW51RWxlbWVudCogc2VsZiwgZ2Jv
b2xlYW4gdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1l
bnVFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50UHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MTWVudUVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZThmMWIyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1lbnVFbGVt
ZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTUhUTUxNZW51RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MTWVudUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1lbnVF
bGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50
KiB3cmFwSFRNTE1lbnVFbGVtZW50KFdlYkNvcmU6OkhUTUxNZW51RWxlbWVudCopOworV2ViS2l0
RE9NSFRNTE1lbnVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50Kik7CitXZWJD
b3JlOjpIVE1MTWVudUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxNZW51RWxlbWVu
dFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MTWV0YUVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhiMmYxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5jcHAKQEAg
LTAsMCArMSwyODAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
RXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MTWV0YUVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTWV0YUVs
ZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX01FVEFfRUxFTUVOVChr
aXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRN
TE1ldGFFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dl
YktpdERPTUhUTUxNZXRhRWxlbWVudCogd3JhcEhUTUxNZXRhRWxlbWVudChXZWJDb3JlOjpIVE1M
TWV0YUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfSFRNTF9NRVRBX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51
bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Cisg
ICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpI
VE1MTWV0YUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTWV0
YUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNv
cmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24u
bmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVu
dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6
OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCks
IGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6
OkhUTUxNZXRhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxN
ZXRhRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAg
IHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2
ZW50ID0gd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBp
ZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9h
ZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitH
X0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQsIHdlYmtpdF9k
b21faHRtbF9tZXRhX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1Q
TEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9t
X2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ09O
VEVOVCwKKyAgICBQUk9QX0hUVFBfRVFVSVYsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfU0NI
RU1FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MTWV0YUVsZW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09OVEVOVDoKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfY29udGVudChzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hUVFBfRVFVSVY6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X2h0dHBfZXF1aXYoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9uYW1l
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0NIRU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3Nl
dF9zY2hlbWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZiA9IFdFQktJ
VF9ET01fSFRNTF9NRVRBX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9DT05URU5UOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9jb250ZW50KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hUVFBfRVFVSVY6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0X2h0
dHBfZXF1aXYoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX21ldGFfZWxl
bWVudF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ0hF
TUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9t
ZXRhX2VsZW1lbnRfZ2V0X3NjaGVtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTE1l
dGFFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9wcm9wZXJ0
eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9tZXRh
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTlRFTlQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY29udGVudCIsCisgICAgICAg
ICAgICAiSFRNTE1ldGFFbGVtZW50OmNvbnRlbnQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIEhUTUxNZXRhRWxlbWVudDpjb250ZW50IiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hUVFBf
RVFVSVYsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHR0cC1l
cXVpdiIsCisgICAgICAgICAgICAiSFRNTE1ldGFFbGVtZW50Omh0dHAtZXF1aXYiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNZXRhRWxlbWVudDpodHRwLWVxdWl2IiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAiSFRNTE1ldGFFbGVtZW50Om5hbWUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNZXRhRWxlbWVudDpuYW1lIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NDSEVNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJzY2hlbWUiLAorICAgICAgICAgICAgIkhUTUxNZXRhRWxlbWVudDpzY2hlbWUiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNZXRhRWxlbWVudDpzY2hlbWUiLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9pbml0KFdlYktp
dERPTUhUTUxNZXRhRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVz
dCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9jb250ZW50
KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX01FVEFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpjb250ZW50QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfY29udGVudChXZWJLaXRE
T01IVE1MTWV0YUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfTUVUQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb250ZW50QXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfaHR0cF9lcXVp
dihXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9NRVRBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxNZXRh
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6aHR0cF9lcXVpdkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X2h0dHBfZXF1aXYo
V2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FVEFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aHR0cF9lcXVpdkF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0
X25hbWUoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfTUVUQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
TWV0YUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0
X25hbWUoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX01FVEFfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0dHIsIGNvbnZl
cnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0
X3NjaGVtZShXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9NRVRBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxNZXRhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c2NoZW1lQXR0cikpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfc2NoZW1lKFdl
YktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9NRVRBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNjaGVtZUF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TE1ldGFFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4ODc2
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LmgKQEAgLTAsMCArMSwx
MjYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3Ig
Ik9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudF9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxNZXRhRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9NRVRBX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1s
X21ldGFfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTUVUQV9F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX01FVEFfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1ldGFFbGVt
ZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FVEFfRUxFTUVOVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9NRVRBX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudENsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX0hUTUxfTUVUQV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX01FVEFfRUxFTUVOVCkp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9NRVRBX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVU
QV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX01FVEFfRUxFTUVOVF9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9NRVRBX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudENsYXNzKSkKKwor
c3RydWN0IF9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE1ldGFFbGVt
ZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRf
dHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9j
b250ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNZXRhRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
bWV0YV9lbGVtZW50X2dldF9jb250ZW50KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfY29udGVudDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9z
ZXRfY29udGVudChXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfaHR0cF9l
cXVpdjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX21l
dGFfZWxlbWVudF9nZXRfaHR0cF9lcXVpdihXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X2h0dHBfZXF1aXY6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1l
bnRfc2V0X2h0dHBfZXF1aXYoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0
X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9t
ZXRhX2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNZXRhRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X3NldF9uYW1l
KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfbWV0YV9lbGVtZW50X2dldF9zY2hlbWU6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tZXRhX2VsZW1lbnRfZ2V0
X3NjaGVtZShXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9tZXRhX2VsZW1lbnRfc2V0X3NjaGVtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MTWV0YUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfc2NoZW1lKFdlYktpdERP
TUhUTUxNZXRhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxNZXRhRWxlbWVudF9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxNZXRhRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50UHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZDEzMGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhU
TUxNZXRhRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MTWV0YUVsZW1lbnRQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE1ldGFFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK1dlYktpdERPTUhUTUxNZXRhRWxlbWVudCogd3JhcEhUTUxNZXRhRWxlbWVudChXZWJD
b3JlOjpIVE1MTWV0YUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxNZXRhRWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxNZXRhRWxlbWVudCopOworV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxNZXRhRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MTWV0YUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE1vZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTW9kRWxlbWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyMDU0YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE1vZEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTE1vZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01IVE1MTW9kRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0
VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxNb2RFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX01PRF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2Jq
KSkpOworfQorCitXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MTW9k
RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkhUTUxNb2RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHdyYXBIVE1MTW9kRWxl
bWVudChXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVChnX29i
amVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfTU9EX0VMRU1FTlQsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpj
b3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTE1vZEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TE1vZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MTW9kRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpIVE1MTW9kRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50Owor
ICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1l
bnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIg
PSB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQor
CitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MTW9kRWxlbWVudCwgd2Via2l0
X2RvbV9odG1sX21vZF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NJ
VEUsCisgICAgUFJPUF9EQVRFX1RJTUUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfbW9kX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfTU9EX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9DSVRF
OgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfc2V0X2NpdGUoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9E
QVRFX1RJTUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfZGF0ZV90
aW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTUhUTUxNb2RFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX01PRF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfQ0lURToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dldF9jaXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0RBVEVfVElNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dldF9kYXRlX3RpbWUoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2Ns
YXNzX2luaXQoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9t
b2RfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0NJVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
Y2l0ZSIsCisgICAgICAgICAgICAiSFRNTE1vZEVsZW1lbnQ6Y2l0ZSIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogSFRNTE1vZEVsZW1lbnQ6Y2l0ZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9EQVRFX1RJTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAi
ZGF0ZS10aW1lIiwKKyAgICAgICAgICAgICJIVE1MTW9kRWxlbWVudDpkYXRlLXRpbWUiLAorICAg
ICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxNb2RFbGVtZW50OmRhdGUtdGltZSIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfaW5pdChXZWJLaXRE
T01IVE1MTW9kRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2NpdGUoV2ViS2l0
RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9NT0RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2l0ZUF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9tb2Rf
ZWxlbWVudF9zZXRfY2l0ZShXZWJLaXRET01IVE1MTW9kRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NT0RfRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE1vZEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaXRlQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX21vZF9lbGVt
ZW50X2dldF9kYXRlX3RpbWUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9NT0RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTE1vZEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRhdGV0aW1lQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X3NldF9k
YXRlX3RpbWUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfTU9EX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGF0ZXRpbWVBdHRyLCBj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE1vZEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jYzA4MDE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MTW9kRWxlbWVudC5oCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5l
ZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVj
dGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxNb2RFbGVtZW50X2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfTU9EX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9o
dG1sX21vZF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NT0Rf
RUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NT0RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1vZEVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfTU9EX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
TU9EX0VMRU1FTlQsIFdlYktpdERPTUhUTUxNb2RFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfSFRNTF9NT0RfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NT0RfRUxFTUVOVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9NT0RfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9NT0RfRUxFTUVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9N
T0RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NSFRNTE1vZEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRf
QVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X2dldF9jaXRlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxNb2RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9nZXRfY2l0
ZShXZWJLaXRET01IVE1MTW9kRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX21vZF9lbGVtZW50X3NldF9jaXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxNb2RF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9tb2RfZWxlbWVudF9zZXRfY2l0ZShXZWJLaXRET01IVE1MTW9kRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
bW9kX2VsZW1lbnRfZ2V0X2RhdGVfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MTW9k
RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIq
Cit3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2RhdGVfdGltZShXZWJLaXRET01IVE1M
TW9kRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50
X3NldF9kYXRlX3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9o
dG1sX21vZF9lbGVtZW50X3NldF9kYXRlX3RpbWUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MTW9kRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxNb2RFbGVtZW50
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MTW9kRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xNjVhNGZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
TW9kRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxNb2RFbGVtZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxNb2RFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxNb2RFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxN
b2RFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE1vZEVsZW1l
bnQqIHdyYXBIVE1MTW9kRWxlbWVudChXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCopOworV2ViS2l0
RE9NSFRNTE1vZEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MTW9kRWxlbWVudCopOworV2ViQ29y
ZTo6SFRNTE1vZEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQqKTsKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRQcml2
YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxPTGlzdEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQz
YzYyMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQuY3BwCkBAIC0w
LDAgKzEsMjc1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4K
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVudCog
b2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VMRU1FTlQoa2l0KHN0
YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxPTGlz
dEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01IVE1MT0xpc3RFbGVtZW50KiB3cmFwSFRNTE9MaXN0RWxlbWVudChXZWJDb3JlOjpIVE1M
T0xpc3RFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX09fTElTVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfSFRNTF9PX0xJU1RfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRE
T01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZl
bnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2Vi
Q29yZTo6SFRNTE9MaXN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxPTGlzdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0
KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVz
Y3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TE9MaXN0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPTGlz
dEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1l
LCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBp
ZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZGlz
cGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
aHRtbF9vX2xpc3RfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92
ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhU
TUxPTGlzdEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudCwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQ
RV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9DT01QQUNULAorICAgIFBST1BfU1RBUlQsCisgICAgUFJP
UF9SRVZFUlNFRCwKKyAgICBQUk9QX1RZUEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9PX0xJ
U1RfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0NPTVBBQ1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9z
ZXRfY29tcGFjdChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TVEFSVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29fbGlz
dF9lbGVtZW50X3NldF9zdGFydChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVZFUlNFRDoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX29fbGlzdF9lbGVtZW50X3NldF9yZXZlcnNlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFu
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihzZWxmLCBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX09fTElTVF9F
TEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBS
T1BfQ09NUEFDVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9jb21wYWN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3N0YXJ0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1JFVkVSU0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfZ2V0X3JldmVyc2VkKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRf
dHlwZV9hdHRyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF9vX2xpc3RfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAg
Z29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1l
bnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTVBBQ1QsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNvbXBhY3QiLAorICAgICAgICAgICAg
IkhUTUxPTGlzdEVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9v
bGVhbiBIVE1MT0xpc3RFbGVtZW50OmNvbXBhY3QiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RB
UlQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInN0YXJ0IiwKKyAg
ICAgICAgICAgICJIVE1MT0xpc3RFbGVtZW50OnN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdsb25nIEhUTUxPTGlzdEVsZW1lbnQ6c3RhcnQiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfUkVWRVJTRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFu
KAorICAgICAgICAgICAgInJldmVyc2VkIiwKKyAgICAgICAgICAgICJIVE1MT0xpc3RFbGVtZW50
OnJldmVyc2VkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxPTGlzdEVs
ZW1lbnQ6cmV2ZXJzZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1M
T0xpc3RFbGVtZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxP
TGlzdEVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb19s
aXN0X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiByZXF1ZXN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X29fbGlzdF9lbGVtZW50X2dldF9jb21wYWN0KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PX0xJU1RfRUxFTUVOVChzZWxm
KSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNvbXBhY3RBdHRyKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVu
dF9zZXRfY29tcGFjdChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1FTlQoc2VsZikp
OworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmNv
bXBhY3RBdHRyLCB2YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxl
bWVudF9nZXRfc3RhcnQoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdsb25nIHJlc3VsdCA9IGl0ZW0tPnN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3N0YXJ0KFdlYktpdERPTUhU
TUxPTGlzdEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9PX0xJU1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTE9MaXN0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTdGFydCh2YWx1
ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfcmV2
ZXJzZWQoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6SFRNTE9MaXN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmV2ZXJzZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfcmV2ZXJzZWQoV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX09fTElTVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
T0xpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJv
b2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZXZlcnNlZEF0dHIsIHZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfdHlwZV9hdHRy
KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9PX0xJU1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9M
aXN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0ciwgY29udmVydGVk
VmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE9MaXN0RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJh
ZjE2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQuaApAQCAtMCww
ICsxLDEwOCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNl
cnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudF9oCisjZGVm
aW5lIFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT19MSVNUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0
X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9PX0xJU1RfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PX0xJU1RfRUxFTUVOVCwgV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9PX0xJU1RfRUxF
TUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9PX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE9MaXN0RWxl
bWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1FTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfT19MSVNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfT19M
SVNUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT19MSVNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfT19MSVNUX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT19MSVNUX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxPTGlzdEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9M
aXN0RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50Q2xhc3MgeworICAgIFdlYktp
dERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVt
ZW50X2dldF9jb21wYWN0KFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9z
ZXRfY29tcGFjdChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9zdGFydDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX29fbGlzdF9l
bGVtZW50X2dldF9zdGFydChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3N0YXJ0OgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X3NldF9z
dGFydChXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF90eXBlX2F0dHI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1l
bnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9z
ZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT0xpc3RF
bGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE9MaXN0RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yZjAwZmZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxPTGlzdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE9M
aXN0RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxPTGlzdEVs
ZW1lbnQqIHdyYXBIVE1MT0xpc3RFbGVtZW50KFdlYkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQqKTsK
K1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50
Kik7CitXZWJDb3JlOjpIVE1MT0xpc3RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxPTGlzdEVs
ZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRN
TE9MaXN0RWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3Y2Q0NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTE9MaXN0RWxlbWVudFVuc3RhYmxlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50
VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50VW5zdGFibGVfaAor
CisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRk
b20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9yZXZlcnNlZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9nZXRfcmV2ZXJzZWQoV2ViS2l0RE9NSFRN
TE9MaXN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29fbGlzdF9l
bGVtZW50X3NldF9yZXZlcnNlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT0xpc3RFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRf
cmV2ZXJzZWQoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUp
OworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT0xpc3RFbGVtZW50VW5zdGFibGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJlMjRlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTAsMCArMSw4
NDQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25D
b2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNp
bmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5h
bWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01Eb2N1bWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxGb3JtRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MT2JqZWN0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01W
YWxpZGl0eVN0YXRlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFVuc3RhYmxlLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX09CSkVDVF9F
TEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJD
b3JlOjpIVE1MT2JqZWN0RWxlbWVudCogY29yZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxPYmplY3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHdyYXBIVE1MT2JqZWN0RWxl
bWVudChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NF
UlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9PQkpFQ1RfRUxFTUVO
VChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfT0JKRUNUX0VMRU1FTlQsICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZGlz
cGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQq
IGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50
ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JC
aW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1l
bnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUp
Cit7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVy
OjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFt
ZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6
OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdl
dCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJn
ZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZl
bnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfYWRkX2V2ZW50X2xp
c3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCwgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0ZPUk0sCisg
ICAgUFJPUF9DT0RFLAorICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9BUkNISVZFLAorICAgIFBS
T1BfQk9SREVSLAorICAgIFBST1BfQ09ERV9CQVNFLAorICAgIFBST1BfQ09ERV9UWVBFLAorICAg
IFBST1BfREFUQSwKKyAgICBQUk9QX0RFQ0xBUkUsCisgICAgUFJPUF9IRUlHSFQsCisgICAgUFJP
UF9IU1BBQ0UsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfU1RBTkRCWSwKKyAgICBQUk9QX1RZ
UEUsCisgICAgUFJPUF9VU0VfTUFQLAorICAgIFBST1BfVlNQQUNFLAorICAgIFBST1BfV0lEVEgs
CisgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgIFBST1BfVkFMSURJVFksCisgICAgUFJPUF9W
QUxJREFUSU9OX01FU1NBR0UsCisgICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAorfTsKKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX09CSkVDVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09ERToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X3NldF9jb2RlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYWxpZ24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BUkNISVZFOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2FyY2hpdmUoc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CT1JE
RVI6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYm9yZGVyKHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ09ERV9CQVNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
c2V0X2NvZGVfYmFzZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NPREVfVFlQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X3NldF9jb2RlX3R5cGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRBOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2RhdGEoc2VsZiwgZ192YWx1ZV9nZXRfc3Ry
aW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUNMQVJFOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2RlY2xhcmUoc2VsZiwgZ192
YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SEVJR0hUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hlaWdo
dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0hTUEFDRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X3NldF9oc3BhY2Uoc2VsZiwgZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29iamVjdF9l
bGVtZW50X3NldF9uYW1lKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RBTkRCWToKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X3NldF9zdGFuZGJ5KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF90eXBlX2F0dHIoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VfTUFQOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3VzZV9tYXAoc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9WU1BBQ0U6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdnNw
YWNlKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1dJRFRIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
c2V0X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX09CSkVDVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRk9STToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2Zvcm0oc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09ERToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2Rl
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FSQ0hJVkU6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9nZXRfYXJjaGl2ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9CT1JERVI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYm9yZGVyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NPREVfQkFTRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlX2Jhc2Uoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09ERV9UWVBFOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0
X2NvZGVfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9EQVRBOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0
X2VsZW1lbnRfZ2V0X2RhdGEoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVDTEFSRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X2dldF9kZWNsYXJlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9oZWlnaHQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfSFNQQUNFOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2hzcGFjZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OQU1FOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X25hbWUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU1RBTkRCWToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X2dldF9zdGFuZGJ5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9nZXRfdHlwZV9hdHRyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1VTRV9NQVA6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdXNlX21hcChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9WU1BBQ0U6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdnNwYWNlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpZHRoKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJTExfVkFMSURBVEU6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9nZXRfd2lsbF92YWxpZGF0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9WQUxJRElUWToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92YWxp
ZGF0aW9uX21lc3NhZ2Uoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09O
VEVOVF9ET0NVTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2Ns
YXNzX2luaXQoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0ZPUk0sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAg
ICAgICAgICAiZm9ybSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6Zm9ybSIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCogSFRNTE9iamVj
dEVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VM
RU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9DT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImNvZGUiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OmNvZGUiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OmNvZGUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OmFsaWduIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDphbGlnbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9BUkNISVZFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImFyY2hpdmUiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OmFyY2hp
dmUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50OmFy
Y2hpdmUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQk9SREVSLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgImJvcmRlciIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVs
ZW1lbnQ6Ym9yZGVyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0
RWxlbWVudDpib3JkZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09ERV9CQVNFLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNvZGUtYmFzZSIsCisgICAgICAgICAg
ICAiSFRNTE9iamVjdEVsZW1lbnQ6Y29kZS1iYXNlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDpjb2RlLWJhc2UiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Q09ERV9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNv
ZGUtdHlwZSIsCisgICAgICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6Y29kZS10eXBlIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDpjb2RlLXR5cGUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfREFUQSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJkYXRhIiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDpkYXRh
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDpkYXRh
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0RFQ0xBUkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImRlY2xhcmUiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVt
ZW50OmRlY2xhcmUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTE9iamVj
dEVsZW1lbnQ6ZGVjbGFyZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAgICAgICAg
ICJIVE1MT2JqZWN0RWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxPYmplY3RFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IU1BBQ0Us
CisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImhzcGFjZSIsCisgICAg
ICAgICAgICAiSFRNTE9iamVjdEVsZW1lbnQ6aHNwYWNlIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdsb25nIEhUTUxPYmplY3RFbGVtZW50OmhzcGFjZSIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50Om5hbWUi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPYmplY3RFbGVtZW50Om5hbWUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfU1RBTkRCWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJzdGFuZGJ5IiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVu
dDpzdGFuZGJ5IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxl
bWVudDpzdGFuZGJ5IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTE9iamVj
dEVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTE9iamVj
dEVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9VU0VfTUFQLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInVzZS1tYXAiLAorICAgICAgICAgICAgIkhU
TUxPYmplY3RFbGVtZW50OnVzZS1tYXAiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxPYmplY3RFbGVtZW50OnVzZS1tYXAiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVlNQQUNFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ2c3BhY2UiLAorICAgICAg
ICAgICAgIkhUTUxPYmplY3RFbGVtZW50OnZzcGFjZSIsCisgICAgICAgICAgICAicmVhZC13cml0
ZSBnbG9uZyBIVE1MT2JqZWN0RWxlbWVudDp2c3BhY2UiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RFbGVtZW50OndpZHRo
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDp3aWR0
aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJI
VE1MT2JqZWN0RWxlbWVudDp3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2Jvb2xlYW4gSFRNTE9iamVjdEVsZW1lbnQ6d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1ZBTElESVRZLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAg
ICAgInZhbGlkaXR5IiwKKyAgICAgICAgICAgICJIVE1MT2JqZWN0RWxlbWVudDp2YWxpZGl0eSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIEhUTUxPYmpl
Y3RFbGVtZW50OnZhbGlkaXR5IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9WQUxJRElU
WV9TVEFURSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgIkhUTUxP
YmplY3RFbGVtZW50OnZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBIVE1MT2JqZWN0RWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgImNvbnRlbnQtZG9jdW1lbnQiLAorICAgICAgICAgICAgIkhUTUxPYmplY3RF
bGVtZW50OmNvbnRlbnQtZG9jdW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01Eb2N1bWVudCogSFRNTE9iamVjdEVsZW1lbnQ6Y29udGVudC1kb2N1bWVudCIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfaW5pdChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBV
TlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9vYmpl
Y3RfZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYp
LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y2hlY2tWYWxpZGl0eSgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9l
bGVtZW50X3NldF9jdXN0b21fdmFsaWRpdHkoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JK
RUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZXJyb3IpOworICAgIFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZEVycm9yID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVycm9y
KTsKKyAgICBpdGVtLT5zZXRDdXN0b21WYWxpZGl0eShjb252ZXJ0ZWRFcnJvcik7Cit9CisKK1dl
YktpdERPTUhUTUxGb3JtRWxlbWVudCogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF9mb3JtKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5mb3JtKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgp
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZShX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2Jq
ZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29kZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY29kZShXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2RlQXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9hbGln
bihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2FsaWduKFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVy
dGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF9hcmNoaXZlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphcmNoaXZlQXR0cikpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3Nl
dF9hcmNoaXZlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmFyY2hp
dmVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfZ2V0X2JvcmRlcihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ym9yZGVyQXR0
cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X3NldF9ib3JkZXIoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Ym9yZGVyQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb2RlX2Jhc2UoV2ViS2l0RE9NSFRNTE9iamVjdEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmNvZGViYXNlQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlX2Jhc2UoV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29kZWJhc2VBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGVfdHlwZShX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2Jq
ZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y29kZXR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGVfdHlw
ZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjb2RldHlwZUF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9nZXRfZGF0YShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkYXRhQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9kYXRhKFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6
U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmRhdGFBdHRyLCBjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZGVj
bGFyZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OmRlY2xhcmVBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfZGVjbGFyZShXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRC
b29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGVjbGFyZUF0dHIsIHZhbHVlKTsK
K30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfaGVpZ2h0KFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hlaWdodChXZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpoZWlnaHRBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRf
aHNwYWNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
aHNwYWNlQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hzcGFjZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCog
c2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OmhzcGFjZUF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3N0YW5kYnkoV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnN0YW5kYnlBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3N0YW5kYnkoV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6c3RhbmRieUF0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdHlw
ZV9hdHRyKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF90eXBl
X2F0dHIoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxPYmplY3RFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIs
IGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxl
bWVudF9nZXRfdXNlX21hcChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dXNlbWFwQXR0cikpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X3NldF91c2VfbWFwKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnVzZW1hcEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF92c3BhY2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjp2c3BhY2VBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdnNwYWNlKFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6dnNwYWNlQXR0ciwgdmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF93aWR0aChXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdl
YkNvcmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpbGxf
dmFsaWRhdGUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndpbGxWYWxpZGF0ZSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1dlYktpdERPTVZhbGlkaXR5U3RhdGUqIHdlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlZhbGlkaXR5U3RhdGU+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT52YWxpZGl0eSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09CSkVDVF9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT52YWxpZGF0aW9uTWVzc2FnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRE
T01Eb2N1bWVudCogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9jb250ZW50X2Rv
Y3VtZW50KFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxPYmplY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpEb2N1bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNv
bnRlbnREb2N1bWVudCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
OTNkYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudC5oCkBAIC0w
LDAgKzEsMzYwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmlu
ZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQor
I2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJl
Y3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudF9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX09CSkVDVF9FTEVNRU5UICAgICAgICAgICAgKHdl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0hUTUxfT0JKRUNUX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT0JKRUNUX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09CSkVD
VF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX09CSkVDVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MT2Jq
ZWN0RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1F
TlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfT0JKRUNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hU
TUxfT0JKRUNUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT0JKRUNUX0VMRU1FTlQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfT0JKRUNUX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT0JKRUNUX0VMRU1F
TlQsIFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5z
dGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50Q2xhc3Mgewor
ICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF90eXBlKHZvaWQp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZm9ybToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X2dldF9mb3JtKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9j
b2RlKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlKFdlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9h
bGlnbihXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2FsaWduKFdlYktp
dERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfYXJjaGl2ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X2FyY2hpdmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYXJjaGl2ZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2Fy
Y2hpdmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9ib3JkZXI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X2dldF9ib3JkZXIoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYm9yZGVyOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVu
dF9zZXRfYm9yZGVyKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRf
Y29kZV9iYXNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZV9iYXNlKFdlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0
X2NvZGVfYmFzZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGVfYmFzZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
b2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGVfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
T2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvZGVfdHlwZShXZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X3NldF9jb2RlX3R5cGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlX3R5cGUoV2ViS2l0
RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF9kYXRhOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRf
ZGF0YShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9kYXRhOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxPYmplY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfZGF0YShXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2RlY2xhcmU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVh
bgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1l
bnRfZ2V0X2RlY2xhcmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfZGVjbGFyZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
c2V0X2RlY2xhcmUoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2hlaWdo
dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9oZWlnaHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dl
dF9oc3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2hzcGFjZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9oc3Bh
Y2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVj
dF9lbGVtZW50X3NldF9oc3BhY2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGds
b25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0
X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1s
X29iamVjdF9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X25hbWU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVt
ZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRf
c3RhbmRieToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3N0YW5kYnkoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfc3Rh
bmRieToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfc2V0X3N0YW5kYnkoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9l
bGVtZW50X2dldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRN
TE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9zZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdXNlX21hcDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3VzZV9t
YXAoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfdXNlX21hcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X3VzZV9tYXAoV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X2dldF92c3BhY2U6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRf
Z2V0X3ZzcGFjZShXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF92c3BhY2U6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF92c3Bh
Y2UoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpZHRoOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9n
ZXRfd2lkdGgoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF93aWR0aChX
ZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9jdW1l
bnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50CisqKi8KK1dFQktJVF9B
UEkgV2ViS2l0RE9NRG9jdW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0
X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9i
amVjdEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YzYyMDk1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRQcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MT2Jq
ZWN0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MT2JqZWN0RWxl
bWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50
KiB3cmFwSFRNTE9iamVjdEVsZW1lbnQoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQqKTsKK1dl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQq
KTsKK1dlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxPYmplY3RFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50VW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRVbnN0YWJsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDkzZWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDg4IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxPYmplY3RF
bGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudFVuc3Rh
YmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9jaGVja192YWxpZGl0eToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfY2hlY2tfdmFsaWRpdHko
V2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF9vYmplY3RfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKiBAZXJyb3I6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9vYmplY3RfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoV2ViS2l0RE9NSFRNTE9iamVj
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVu
dF9nZXRfdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVZhbGlkaXR5U3Rh
dGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZSoKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdmFsaWRp
dHkoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZShXZWJLaXRE
T01IVE1MT2JqZWN0RWxlbWVudCogc2VsZik7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxP
YmplY3RFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3JvdXBF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODhlNGNlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxPcHRHcm91cEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTE9wdEdyb3VwRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxl
Lmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRM
aXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MT3B0
R3JvdXBFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCogb2JqKQorewor
ICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQoa2l0KHN0YXRpY19j
YXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxPcHRHcm91cEVs
ZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1l
bnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiB3cmFwSFRNTE9wdEdyb3VwRWxlbWVudChXZWJD
b3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX09QVF9HUk9VUF9FTEVNRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVCwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9k
aXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVu
dCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZl
bnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZl
bnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb3B0X2dy
b3VwX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0
RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFy
Z2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5l
cihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdD
bG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
T3B0R3JvdXBFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9vcHRf
Z3JvdXBfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxP
cHRHcm91cEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudCwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01f
VFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVt
IHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9ESVNBQkxFRCwKKyAgICBQUk9QX0xBQkVMLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3NldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1l
bnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3NldF9kaXNhYmxlZChzZWxmLCBn
X3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9MQUJFTDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3NldF9s
YWJlbChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmID0g
V0VCS0lUX0RPTV9IVE1MX09QVF9HUk9VUF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRf
ZGlzYWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFCRUw6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRfZ3Jv
dXBfZWxlbWVudF9nZXRfbGFiZWwoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRN
TE9wdEdyb3VwRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50
X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAg
ImRpc2FibGVkIiwKKyAgICAgICAgICAgICJIVE1MT3B0R3JvdXBFbGVtZW50OmRpc2FibGVkIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxPcHRHcm91cEVsZW1lbnQ6ZGlz
YWJsZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFCRUwsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAibGFiZWwiLAorICAgICAgICAgICAgIkhUTUxPcHRHcm91
cEVsZW1lbnQ6bGFiZWwiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxPcHRH
cm91cEVsZW1lbnQ6bGFiZWwiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29w
dF9ncm91cF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogcmVxdWVz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9k
b21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTE9wdEdy
b3VwRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVF9H
Uk9VUF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBp
dGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6ZGlzYWJsZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTE9wdEdy
b3VwRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX09QVF9HUk9VUF9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0R3Jv
dXBFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xl
YW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIsIHZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfbGFiZWwoV2Vi
S2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX09QVF9HUk9VUF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
T3B0R3JvdXBFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpsYWJlbEF0dHIpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfbGFi
ZWwoV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdEdyb3Vw
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmxhYmVs
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRHcm91
cEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmJhZWE3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxP
cHRHcm91cEVsZW1lbnQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01I
VE1MT3B0R3JvdXBFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVu
dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVz
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRf
R1JPVVBfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1l
bnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09QVF9HUk9VUF9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX09QVF9HUk9VUF9FTEVNRU5ULCBXZWJLaXRET01IVE1MT3B0R3JvdXBF
bGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09QVF9HUk9VUF9FTEVNRU5UX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9IVE1MX09QVF9HUk9VUF9FTEVNRU5ULCBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50
Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9P
UFRfR1JPVVBfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRfR1JP
VVBfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudENsYXNzKSkKKworc3RydWN0
IF9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVu
dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRHcm91cEVs
ZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfb3B0X2dyb3VwX2VsZW1l
bnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9l
bGVtZW50X2dldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0R3JvdXBF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJL
aXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfb3B0X2dyb3VwX2VsZW1lbnRfc2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxPcHRHcm91cEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3NldF9kaXNh
YmxlZChXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X2dldF9sYWJlbDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9vcHRf
Z3JvdXBfZWxlbWVudF9nZXRfbGFiZWwoV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdF9ncm91cF9lbGVtZW50X3NldF9sYWJl
bDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vcHRf
Z3JvdXBfZWxlbWVudF9zZXRfbGFiZWwoV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxPcHRHcm91cEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3Jv
dXBFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDZjNGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MT3B0
R3JvdXBFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxPcHRHcm91cEVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9wdEdyb3VwRWxlbWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudCogd3JhcEhUTUxP
cHRHcm91cEVsZW1lbnQoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudCopOworV2ViS2l0RE9N
SFRNTE9wdEdyb3VwRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTE9wdEdyb3Vw
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MT3B0R3JvdXBFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOGNmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50LmNwcApAQCAtMCwwICsxLDM4MCBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4K
KyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTEZvcm1FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIGtpdChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9N
X0hUTUxfT1BUSU9OX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmop
KSk7Cit9CisKK1dlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxP
cHRpb25FbGVtZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogd3Jh
cEhUTUxPcHRpb25FbGVtZW50KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBjb3JlT2JqZWN0
KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1M
X09QVElPTl9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05f
RUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9vcHRp
b25fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBX
ZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2
ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlz
cGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF9vcHRpb25fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xl
YW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVj
dEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRh
cmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIo
V2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xv
c3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1M
T3B0aW9uRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
R19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0
dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJL
aXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZl
bnQgPSB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAg
aWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVu
dF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9
CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50LCB3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1F
TlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAg
IFBST1BfRElTQUJMRUQsCisgICAgUFJPUF9GT1JNLAorICAgIFBST1BfTEFCRUwsCisgICAgUFJP
UF9ERUZBVUxUX1NFTEVDVEVELAorICAgIFBST1BfU0VMRUNURUQsCisgICAgUFJPUF9WQUxVRSwK
KyAgICBQUk9QX1RFWFQsCisgICAgUFJPUF9JTkRFWCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBn
dWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRN
TF9PUFRJT05fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2Vs
ZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2xhYmVsKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9TRUxFQ1RFRDoKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9kZWZhdWx0X3NlbGVjdGVk
KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NFTEVDVEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1l
bnRfc2V0X3NlbGVjdGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uX2VsZW1lbnRfc2V0X3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVt
ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX09QVElPTl9FTEVNRU5UKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxl
bWVudF9nZXRfZGlzYWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Rk9STToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uX2VsZW1lbnRfZ2V0X2Zvcm0oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTEFCRUw6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfbGFiZWwoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfREVGQVVMVF9TRUxFQ1RFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9kZWZhdWx0X3Nl
bGVjdGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVEVEOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9u
X2VsZW1lbnRfZ2V0X3NlbGVjdGVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X3ZhbHVlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfdGV4dChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9pbmRleChzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfY2xh
c3NfaW5pdChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X29wdGlvbl9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRElTQUJMRUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAor
ICAgICAgICAgICAgImRpc2FibGVkIiwKKyAgICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudDpk
aXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MT3B0aW9uRWxl
bWVudDpkaXNhYmxlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GT1JNLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZvcm0iLAorICAgICAgICAgICAgIkhUTUxP
cHRpb25FbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1M
Rm9ybUVsZW1lbnQqIEhUTUxPcHRpb25FbGVtZW50OmZvcm0iLAorICAgICAgICAgICAgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfRk9STV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFCRUwsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAibGFiZWwiLAorICAgICAgICAgICAgIkhUTUxPcHRpb25F
bGVtZW50OmxhYmVsIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MT3B0aW9u
RWxlbWVudDpsYWJlbCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUZBVUxUX1NFTEVDVEVELAorICAg
ICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkZWZhdWx0LXNlbGVjdGVk
IiwKKyAgICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudDpkZWZhdWx0LXNlbGVjdGVkIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxPcHRpb25FbGVtZW50OmRlZmF1bHQt
c2VsZWN0ZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VMRUNURUQsCisgICAgICAgIGdfcGFy
YW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInNlbGVjdGVkIiwKKyAgICAgICAgICAgICJI
VE1MT3B0aW9uRWxlbWVudDpzZWxlY3RlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9v
bGVhbiBIVE1MT3B0aW9uRWxlbWVudDpzZWxlY3RlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9W
QUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWx1ZSIs
CisgICAgICAgICAgICAiSFRNTE9wdGlvbkVsZW1lbnQ6dmFsdWUiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2NoYXIqIEhUTUxPcHRpb25FbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1RFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGV4
dCIsCisgICAgICAgICAgICAiSFRNTE9wdGlvbkVsZW1lbnQ6dGV4dCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdjaGFyKiBIVE1MT3B0aW9uRWxlbWVudDp0ZXh0IiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfSU5ERVgsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImluZGV4
IiwKKyAgICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudDppbmRleCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdsb25nIEhUTUxPcHRpb25FbGVtZW50OmluZGV4IiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2lu
aXQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1l
bnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsK
KyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfZGlz
YWJsZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSk7CisgICAg
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVk
QXR0ciwgdmFsdWUpOworfQorCitXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIHdlYmtpdF9kb21f
aHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICByZXR1cm4gV2ViS2l0Ojpr
aXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfb3B0
aW9uX2VsZW1lbnRfZ2V0X2xhYmVsKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxhYmVs
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX29wdGlv
bl9lbGVtZW50X3NldF9sYWJlbChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9PUFRJT05fRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldExhYmVsKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9kZWZhdWx0X3NlbGVjdGVkKFdlYktpdERPTUhUTUxP
cHRpb25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfT1BU
SU9OX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
c2VsZWN0ZWRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF9vcHRpb25fZWxlbWVudF9zZXRfZGVmYXVsdF9zZWxlY3RlZChXZWJLaXRET01IVE1MT3B0
aW9uRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX09QVElPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6c2VsZWN0ZWRBdHRyLCB2YWx1ZSk7Cit9CisKK2di
b29sZWFuIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfc2VsZWN0ZWQoV2ViS2l0
RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGl0ZW0tPnNlbGVjdGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X3NlbGVjdGVkKFdlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNlbGVjdGVkKHZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfdmFs
dWUoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X3ZhbHVl
KFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0VmFsdWUoY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50
X2dldF90ZXh0KFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OkhUTUxPcHRpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRleHQoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dl
dF9pbmRleChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX09QVElPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MT3B0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5pbmRleCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM3N2FiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudC5oCkBAIC0wLDAgKzEsMTcxIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhU
TUxPcHRpb25FbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01f
VFlQRV9IVE1MX09QVElPTl9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9vcHRp
b25fZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OX0VM
RU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX09QVElPTl9FTEVNRU5UX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX09QVElPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudENsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BU
SU9OX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlRf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfT1BUSU9OX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfT1BU
SU9OX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxP
cHRpb25FbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50
IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxF
bGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiov
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0
X2Rpc2FibGVkKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRf
ZGlzYWJsZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVl
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0X2Zvcm06Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxGb3JtRWxlbWVudAorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxl
bWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9sYWJlbDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfZ2V0
X2xhYmVsKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2xhYmVsOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxPcHRpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfbGFiZWwoV2Vi
S2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9kZWZhdWx0X3NlbGVjdGVk
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50CisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1s
X29wdGlvbl9lbGVtZW50X2dldF9kZWZhdWx0X3NlbGVjdGVkKFdlYktpdERPTUhUTUxPcHRpb25F
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRf
c2V0X2RlZmF1bHRfc2VsZWN0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF9kZWZhdWx0X3NlbGVjdGVkKFdlYktp
dERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9zZWxlY3RlZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFu
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVu
dF9nZXRfc2VsZWN0ZWQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfc2VsZWN0ZWQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4K
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50
X3NldF9zZWxlY3RlZChXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfdmFs
dWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX29w
dGlvbl9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X3NldF92YWx1ZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1l
bnRfc2V0X3ZhbHVlKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRf
dGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudAorICoKKyAqIFJl
dHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uX2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfaW5kZXg6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2Vs
ZW1lbnRfZ2V0X2luZGV4KFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50KiBzZWxmKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50X2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRp
b25FbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBh
ODU5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50UHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
SFRNTE9wdGlvbkVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9wdGlv
bkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1l
bnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCog
d3JhcEhUTUxPcHRpb25FbGVtZW50KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Kik7CitXZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Kik7
CitXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MT3B0aW9uRWxl
bWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1M
T3B0aW9uRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDUwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1w
b3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01IVE1MQ29sbGVj
dGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Q
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbioga2l0KFdlYkNvcmU6OkhUTUxPcHRpb25z
Q29sbGVjdGlvbiogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OU19D
T0xMRUNUSU9OKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbio+KG9iaikp
KTsKK30KKworV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBjb3JlKFdlYktpdERPTUhU
TUxPcHRpb25zQ29sbGVjdGlvbiogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbio+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxPcHRpb25z
Q29sbGVjdGlvbiogd3JhcEhUTUxPcHRpb25zQ29sbGVjdGlvbihXZWJDb3JlOjpIVE1MT3B0aW9u
c0NvbGxlY3Rpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04sICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uLCB3ZWJraXRfZG9tX2h0bWxf
b3B0aW9uc19jb2xsZWN0aW9uLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9DT0xMRUNUSU9OKQorCitl
bnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9TRUxFQ1RFRF9JTkRFWCwKKyAgICBQUk9QX0xF
TkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rp
b25fc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3Qg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTE9w
dGlvbnNDb2xsZWN0aW9uKiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX09QVElPTlNfQ09MTEVDVElP
TihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NF
TEVDVEVEX0lOREVYOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9u
X3NldF9zZWxlY3RlZF9pbmRleChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9u
X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxPcHRpb25zQ29s
bGVjdGlvbiogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9PUFRJT05TX0NPTExFQ1RJT04ob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9J
TkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX29w
dGlvbnNfY29sbGVjdGlvbl9nZXRfc2VsZWN0ZWRfaW5kZXgoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxl
Y3Rpb25fY2xhc3NfaW5pdChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fc2V0X3Byb3BlcnR5OworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlv
bl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0VMRUNURURfSU5ERVgsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNlbGVjdGVkLWluZGV4IiwKKyAg
ICAgICAgICAgICJIVE1MT3B0aW9uc0NvbGxlY3Rpb246c2VsZWN0ZWQtaW5kZXgiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTE9wdGlvbnNDb2xsZWN0aW9uOnNlbGVjdGVkLWlu
ZGV4IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdUSCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisgICAgICAg
ICAgICAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uOmxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGd1bG9uZyBIVE1MT3B0aW9uc0NvbGxlY3Rpb246bGVuZ3RoIiwKKyAgICAgICAgICAgIDAs
IEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2luaXQo
V2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9odG1sX29wdGlv
bnNfY29sbGVjdGlvbl9uYW1lZF9pdGVtKFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiog
c2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9PUFRJT05TX0NPTExFQ1RJT04oc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KG5hbWUsIDApOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWROYW1lID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmFtZWRJdGVtKGNvbnZlcnRlZE5hbWUpKTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9hZGQoV2ViS2l0RE9NSFRNTE9wdGlvbnND
b2xsZWN0aW9uKiBzZWxmLCBXZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uLCBndWxv
bmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9P
UFRJT05TX0NPTExFQ1RJT04oc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX09QVElPTl9FTEVNRU5UKG9wdGlvbikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
IWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVu
dCogY29udmVydGVkT3B0aW9uID0gV2ViS2l0Ojpjb3JlKG9wdGlvbik7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+YWRkKCpjb252ZXJ0ZWRPcHRpb24sIGlu
ZGV4LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rp
b25fcmVtb3ZlKFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZiwgZ2xvbmcgaW5k
ZXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTlNfQ09MTEVDVElPTihzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnJlbW92ZShpbmRleCk7Cit9CisKK2dsb25nIHdlYmtpdF9k
b21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X3NlbGVjdGVkX2luZGV4KFdlYktpdERPTUhU
TUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX09QVElPTlNfQ09MTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlv
bnNDb2xsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3Vs
dCA9IGl0ZW0tPnNlbGVjdGVkSW5kZXgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fc2V0X3NlbGVjdGVkX2luZGV4KFdl
YktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElPTlNfQ09MTEVDVElPTihzZWxmKSk7CisgICAgV2Vi
Q29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldFNlbGVjdGVkSW5kZXgodmFsdWUpOworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfbGVuZ3RoKFdlYktpdERPTUhUTUxPcHRpb25z
Q29sbGVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX09QVElP
TlNfQ09MTEVDVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0
aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVt
LT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxPcHRpb25zQ29sbGVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWFiMjY3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaApAQCAtMCwwICsxLDkxIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJ
REVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRk
b20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lm
bmRlZiBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25faAorI2RlZmluZSBXZWJLaXRET01I
VE1MT3B0aW9uc0NvbGxlY3Rpb25faAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OICAgICAgICAgICAgKHdlYmtpdF9k
b21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9IVE1MX09QVElPTlNfQ09MTEVDVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJ
T04sIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbikpCisjZGVmaW5lIFdFQktJVF9ET01f
SFRNTF9PUFRJT05TX0NPTExFQ1RJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9O
LCBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX09QVElPTlNfQ09MTEVDVElPTihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJ
T04pKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX09QVElPTlNfQ09MTEVDVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9PUFRJ
T05TX0NPTExFQ1RJT05fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OLCBXZWJLaXRE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTE9w
dGlvbnNDb2xsZWN0aW9uIHsKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiBwYXJlbnRfaW5z
dGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbkNsYXNz
IHsKKyAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbkNsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fZ2V0
X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlv
bl9uYW1lZF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlv
bgorICogQG5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBB
ICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9k
b21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fbmFtZWRfaXRlbShXZWJLaXRET01IVE1MT3B0aW9u
c0NvbGxlY3Rpb24qIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2dldF9zZWxlY3RlZF9pbmRleDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24KKyAqCisgKiBSZXR1cm5zOiBBICNn
bG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xs
ZWN0aW9uX2dldF9zZWxlY3RlZF9pbmRleChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24q
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fc2V0
X3NlbGVjdGVkX2luZGV4OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVj
dGlvbgorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX3NldF9zZWxlY3RlZF9pbmRleChXZWJLaXRE
T01IVE1MT3B0aW9uc0NvbGxlY3Rpb24qIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2dldF9sZW5ndGg6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uCisgKgorICogUmV0dXJuczogQSAjZ3Vs
b25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xs
ZWN0aW9uX2dldF9sZW5ndGgoV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBzZWxmKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlv
bl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlv
bnNDb2xsZWN0aW9uUHJpdmF0ZS5oCmluZGV4IGVlZjhjYmYuLmVlYjY0YjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVj
dGlvblByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE2IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQ
cml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZV9o
CisjaWZuZGVmIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvblByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2YXRlX2gKIAotI2luY2x1ZGUgIlRl
c3RDdXN0b21OYW1lZEdldHRlci5oIgotI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxPcHRpb25zQ29sbGVj
dGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIqIHdyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0
dGVyKik7Ci1XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGtpdChXZWJDb3JlOjpUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKLVdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogY29y
ZShXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKTsKK1dlYktpdERPTUhUTUxPcHRpb25z
Q29sbGVjdGlvbiogd3JhcEhUTUxPcHRpb25zQ29sbGVjdGlvbihXZWJDb3JlOjpIVE1MT3B0aW9u
c0NvbGxlY3Rpb24qKTsKK1dlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbioga2l0KFdlYkNv
cmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbiopOworV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0
aW9uKiBjb3JlKFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiopOwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2
YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25Qcml2YXRl
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uVW5zdGFibGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uVW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iZmUzNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MT3B0
aW9uc0NvbGxlY3Rpb25VbnN0YWJsZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9u
VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25VbnN0YWJs
ZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2FkZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24KKyAqIEBvcHRpb246IEEgI1dlYktp
dERPTUhUTUxPcHRpb25FbGVtZW50CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICogQGVycm9yOiAj
R0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fYWRkKFdlYktpdERPTUhUTUxPcHRp
b25zQ29sbGVjdGlvbiogc2VsZiwgV2ViS2l0RE9NSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiwg
Z3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X29wdGlvbnNfY29sbGVjdGlvbl9yZW1vdmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTE9w
dGlvbnNDb2xsZWN0aW9uCisgKiBAaW5kZXg6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2Nv
bGxlY3Rpb25fcmVtb3ZlKFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbiogc2VsZiwgZ2xv
bmcgaW5kZXgpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25V
bnN0YWJsZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjIzNDc3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhF
bGVtZW50LmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxQYXJhZ3Jh
cGhFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TFBhcmFncmFwaEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRv
VVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBvYmopCit7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQq
IGNvcmUoV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCo+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KiB3cmFwSFRNTFBhcmFncmFwaEVsZW1lbnQoV2ViQ29y
ZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50
KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVu
dCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCogY29yZVRhcmdl
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2
ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3BhcmFn
cmFwaF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFBhcmFncmFwaEVsZW1lbnQqPihXRUJLSVRf
RE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2Jq
ZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3Jl
VGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6
OkhUTUxQYXJhZ3JhcGhFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTFBhcmFncmFwaEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5k
aXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9kaXNwYXRj
aF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1s
X3BhcmFncmFwaF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3Zl
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9N
SFRNTFBhcmFncmFwaEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudCwg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BTElHTiwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogc2VsZiA9IFdF
QktJVF9ET01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfcGFyYWdyYXBoX2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFn
cmFwaF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhU
TUxQYXJhZ3JhcGhFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1BBUkFHUkFQSF9FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
QUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2NsYXNzX2luaXQoV2Vi
S2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9wYXJhZ3Jh
cGhfZWxlbWVudF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBoX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0FMSUdOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImFsaWduIiwKKyAgICAgICAgICAgICJIVE1MUGFyYWdyYXBoRWxlbWVudDphbGlnbiIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFBhcmFncmFwaEVsZW1lbnQ6YWxp
Z24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50
X2luaXQoV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3BhcmFncmFw
aF9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFHUkFQSF9FTEVNRU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxp
Z25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
cGFyYWdyYXBoX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1BBUkFHUkFQSF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3Jh
cGhFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyMTBkNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQuaApAQCAtMCwwICsx
LDcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudF9oCisjZGVm
aW5lIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UICAgICAgICAgICAg
KHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQUdSQVBI
X0VMRU1FTlQsIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9IVE1MX1BBUkFHUkFQSF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFHUkFQSF9FTEVN
RU5ULCBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQUdSQVBIX0VMRU1F
TlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlRfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfUEFSQUdS
QVBIX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQsIFdlYktpdERPTUhU
TUxQYXJhZ3JhcGhFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxQYXJhZ3Jh
cGhFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X2dldF90eXBlKHZvaWQpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfYWxpZ246Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3BhcmFn
cmFwaF9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3BhcmFncmFwaF9lbGVtZW50X3NldF9hbGln
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfcGFy
YWdyYXBoX2VsZW1lbnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2Vi
S2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50UHJpdmF0ZS5oCnNpbWls
YXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oCnJl
bmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50UHJpdmF0ZS5oCmluZGV4IDIzMzc2MGQu
LjU4OGZkOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRQcml2YXRlLmgKQEAgLTE4LDE2ICsxOCwxNiBAQAogICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3JQcml2YXRlX2gKLSNkZWZpbmUgV2ViS2l0RE9NVGVzdE5hbWVkQ29u
c3RydWN0b3JQcml2YXRlX2gKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnRQcml2YXRlX2gK
IAotI2luY2x1ZGUgIlRlc3ROYW1lZENvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
UGFyYWdyYXBoRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MUGFy
YWdyYXBoRWxlbWVudC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3ROYW1l
ZENvbnN0cnVjdG9yKiB3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdE5hbWVk
Q29uc3RydWN0b3IqKTsKLVdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiBraXQoV2ViQ29y
ZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqKTsKLVdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9y
KiBjb3JlKFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKik7CitXZWJLaXRET01IVE1MUGFy
YWdyYXBoRWxlbWVudCogd3JhcEhUTUxQYXJhZ3JhcGhFbGVtZW50KFdlYkNvcmU6OkhUTUxQYXJh
Z3JhcGhFbGVtZW50Kik7CitXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCoga2l0KFdlYkNv
cmU6OkhUTUxQYXJhZ3JhcGhFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MUGFyYWdyYXBoRWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudCopOwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGVf
aCAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50UHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYW1F
bGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjViYmIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50LmNwcApAQCAtMCwwICsxLDI4
MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1l
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJn
ZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQq
IG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1FTlQoa2l0KHN0
YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxQYXJh
bUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01IVE1MUGFyYW1FbGVtZW50KiB3cmFwSFRNTFBhcmFtRWxlbWVudChXZWJDb3JlOjpIVE1M
UGFyYW1FbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJ
VF9ET01fVFlQRV9IVE1MX1BBUkFNX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQp
OworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29y
ZTo6SFRNTFBhcmFtRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxQYXJhbUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3Jp
cHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MUGFy
YW1FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFBhcmFtRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9yZW1vdmVf
ZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciog
ZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAg
ICBXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTFBhcmFtRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVP
YmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVF
dmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFu
ZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2Ut
PmRpc3BhdGNoX2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9w
YXJhbV9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MUGFyYW1F
bGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9U
QVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9OQU1FLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX1ZBTFVFLAorICAg
IFBST1BfVkFMVUVfVFlQRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9wYXJh
bV9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQs
IGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVChv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6
CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF9uYW1lKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VFlQRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3R5cGVfYXR0
cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9z
ZXRfdmFsdWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WQUxVRV9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfcGFy
YW1fZWxlbWVudF9zZXRfdmFsdWVfdHlwZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVt
ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxQYXJhbUVs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dl
dF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVt
ZW50X2dldF90eXBlX2F0dHIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VkFMVUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9wYXJhbV9lbGVtZW50X2dldF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9WQUxVRV9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfdmFsdWVfdHlwZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9jbGFz
c19pbml0KFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENs
YXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9w
YXJhbV9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9OQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAg
ICAgIm5hbWUiLAorICAgICAgICAgICAgIkhUTUxQYXJhbUVsZW1lbnQ6bmFtZSIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFBhcmFtRWxlbWVudDpuYW1lIiwKKyAgICAgICAg
ICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTFBhcmFtRWxlbWVudDp0eXBlIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MUGFyYW1FbGVtZW50OnR5cGUiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVkFMVUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAidmFsdWUiLAorICAgICAgICAgICAgIkhUTUxQYXJhbUVsZW1lbnQ6dmFsdWUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxQYXJhbUVsZW1lbnQ6dmFsdWUiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfVkFMVUVfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJ2YWx1ZS10eXBlIiwKKyAgICAgICAgICAgICJIVE1MUGFyYW1FbGVtZW50OnZh
bHVlLXR5cGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxQYXJhbUVsZW1l
bnQ6dmFsdWUtdHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfcGFyYW1f
ZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3BhcmFt
X2VsZW1lbnRfZ2V0X25hbWUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJp
YnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9w
YXJhbV9lbGVtZW50X3NldF9uYW1lKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTFBhcmFtRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6Om5hbWVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfcGFyYW1fZWxlbWVudF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBl
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3Bh
cmFtX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFN
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjp0eXBlQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWx1
ZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9w
YXJhbV9lbGVtZW50X3NldF92YWx1ZShXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFNX0VM
RU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6
OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjp2YWx1ZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF9wYXJhbV9lbGVtZW50X2dldF92YWx1ZV90eXBlKFdlYktpdERPTUhUTUxQYXJhbUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MUGFyYW1FbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2
YWx1ZXR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfdmFsdWVfdHlwZShXZWJLaXRET01IVE1MUGFyYW1FbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1BBUkFNX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjp2YWx1ZXR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzMmY2NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRN
TFBhcmFtRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9QQVJBTV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9wYXJhbV9l
bGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1BBUkFNX0VMRU1FTlQsIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfUEFSQU1fRUxFTUVOVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9Q
QVJBTV9FTEVNRU5ULCBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1BBUkFNX0VMRU1FTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVOVF9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9Q
QVJBTV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1FTlRfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfUEFSQU1fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudENsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50IHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxQ
YXJhbUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxl
bWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxl
bWVudF9nZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21faHRtbF9wYXJhbV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF9uYW1l
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3BhcmFtX2Vs
ZW1lbnRfc2V0X25hbWUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRf
dHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX3BhcmFtX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRfdHlw
ZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3Bh
cmFtX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9l
bGVtZW50X2dldF92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF92YWx1ZShXZWJLaXRET01IVE1MUGFyYW1FbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9zZXRf
dmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfcGFy
YW1fZWxlbWVudF9zZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVu
dF9nZXRfdmFsdWVfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF92YWx1ZV90eXBlKFdlYktpdERPTUhUTUxQYXJh
bUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50
X3NldF92YWx1ZV90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3ZhbHVlX3R5cGUoV2ViS2l0RE9NSFRNTFBhcmFtRWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
UGFyYW1FbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjMxODMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MUGFyYW1F
bGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRQcml2YXRl
X2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBhcmFtRWxlbWVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCogd3JhcEhUTUxQYXJhbUVsZW1lbnQoV2ViQ29y
ZTo6SFRNTFBhcmFtRWxlbWVudCopOworV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCoga2l0KFdl
YkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQqIGNv
cmUoV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxQcmVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTJlNGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxQcmVFbGVtZW50LmNwcApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTUhUTUxQcmVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1
bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVu
dExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NSFRNTFByZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9k
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MUHJlRWxl
bWVudCoga2l0KFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+
KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRN
TFByZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpIVE1MUHJlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxQcmVFbGVtZW50KiB3cmFwSFRNTFBy
ZUVsZW1lbnQoV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNT
RVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1FTlQo
Z19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1BSRV9FTEVNRU5ULCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2Rpc3BhdGNoX2V2
ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktp
dDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBXZWJDb3JlOjpIVE1MUHJlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9v
bGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVF
dmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNv
ZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2FkZF9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6
OkhUTUxQcmVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFBy
ZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
ICAgIFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6SFRNTFByZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRs
ZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5k
aXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9kaXNwYXRjaF9ldmVu
dDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3ByZV9l
bGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsK
K30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQsIHdl
YmtpdF9kb21faHRtbF9wcmVfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwg
R19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtp
dF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJP
UF9XSURUSCwKKyAgICBQUk9QX1dSQVAsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfcHJlX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NSFRNTFByZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9XSURU
SDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF93aWR0aChzZWxmLCBn
X3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9X
UkFQOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3dyYXAoc2VsZiwg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTUhUTUxQcmVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1BSRV9F
TEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBS
T1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9wcmVfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfV1JBUDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3ByZV9lbGVtZW50X2dldF93cmFwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhU
TUxQcmVFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3By
ZV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAg
IkhUTUxQcmVFbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhU
TUxQcmVFbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1dSQVAsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndy
YXAiLAorICAgICAgICAgICAgIkhUTUxQcmVFbGVtZW50OndyYXAiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFByZUVsZW1lbnQ6d3JhcCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MUHJlRWxl
bWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dsb25n
IHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFByZUVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QUkVfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFByZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01I
VE1MUHJlRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1BSRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MUHJlRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3
ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3dyYXAoV2ViS2l0RE9NSFRNTFByZUVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QUkVfRUxFTUVOVChz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3cmFwQXR0cik7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0
X3dyYXAoV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9QUkVfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29y
ZTo6SFRNTFByZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OndyYXBBdHRyLCB2YWx1ZSk7
Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVs
ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzhiNmY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9I
X0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdl
YmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxQcmVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRN
TFByZUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfUFJFX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9QUkVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX0hUTUxfUFJFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUFJFX0VMRU1FTlQsIFdl
YktpdERPTUhUTUxQcmVFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9Q
UkVfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9QUkVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfSFRNTF9QUkVfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9QUkVfRUxFTUVOVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9QUkVfRUxFTUVOVCwgV2Vi
S2l0RE9NSFRNTFByZUVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFByZUVs
ZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisK
K3N0cnVjdCBfV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRN
TEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MUHJlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkg
Z2xvbmcKK3dlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRN
TFByZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVu
dF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3ByZV9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MUHJlRWxlbWVudCogc2VsZiwgZ2xv
bmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9nZXRfd3Jh
cDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MUHJlRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9w
cmVfZWxlbWVudF9nZXRfd3JhcChXZWJLaXRET01IVE1MUHJlRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X3NldF93cmFwOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxQcmVFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9wcmVfZWxlbWVudF9zZXRfd3JhcChX
ZWJLaXRET01IVE1MUHJlRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MUHJlRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2MmExZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFByZUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1M
UHJlRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MUHJlRWxlbWVudFByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MUHJlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MUHJlRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K1dlYktpdERPTUhUTUxQcmVFbGVtZW50KiB3cmFwSFRNTFByZUVsZW1lbnQoV2ViQ29yZTo6SFRN
TFByZUVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxQcmVFbGVtZW50KiBraXQoV2ViQ29yZTo6SFRN
TFByZUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxQcmVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhU
TUxQcmVFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxQcmVFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUhUTUxQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFBy
aXZhdGUuY3BwCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NSFRNTFByaXZhdGUuY3BwCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxQcml2YXRlLmNwcAppbmRleCAzZjQ5Mjk2Li5hMmVhODRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUhUTUxQcml2YXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxQcml2YXRlLmNwcApAQCAtMzEsNjQgKzMxLDY0IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFByaXZhdGUuaCIKIAotI2luY2x1ZGUgIkhU
TUxBbmNob3JFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MQXVkaW9FbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxCYXNlRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRExpc3RF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERpcmVjdG9yeUVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MRGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TEVtYmVkRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJIVE1MRnJhbWVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxIUkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSGVhZEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MSGVhZGluZ0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSHRt
bEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTEtleWdlbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTElFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTExhYmVsRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMZWdlbmRFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MTWFycXVlZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWVudUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWV0YUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTW9k
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxPTGlzdEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxP
cHRHcm91cEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxQcmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFF1b3RlRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVj
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxUYWJsZUNvbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhUTUxUaXRsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVUxpc3RFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTEFuY2hvckVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxBcHBsZXRFbGVtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxBdWRpb0VsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCUkVsZW1lbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxCYXNlRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTEJvZHlFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQnV0dG9uRWxlbWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTENhbnZhc0VsZW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxETGlzdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxEaXJlY3Rv
cnlFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRGl2RWxlbWVudC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxFbWJlZEVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGaWVsZFNldEVsZW1lbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxGb250RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZv
cm1FbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVFbGVtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVTZXRFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MSFJFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSGVhZEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxIZWFkaW5nRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SFRNTEh0bWxFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MSUZyYW1lRWxlbWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEltYWdlRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTElucHV0RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEtleWdlbkVsZW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxMSUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxMYWJlbEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxMZWdlbmRFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTGlua0VsZW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxNYXBFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTWFycXVlZUVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxNZW51RWxlbWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTE1ldGFFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTW9kRWxl
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MT0xpc3RFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MT2JqZWN0RWxlbWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE9wdEdyb3VwRWxlbWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTE9wdGlvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxQYXJh
Z3JhcGhFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MUGFyYW1FbGVtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MUHJlRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TFF1b3RlRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFNjcmlwdEVsZW1lbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxTZWxlY3RFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MU3R5bGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFibGVDYXB0aW9u
RWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxUYWJsZUNvbEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxUYWJsZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUYWJsZVJvd0VsZW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MVGV4dEFyZWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MVGl0bGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW5jbHVkZSAiV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFw
cGxldEVsZW1lbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50
UHJpdmF0ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9X
ZWJLaXRET01IVE1MUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MUHJpdmF0ZS5oCnNpbWlsYXJpdHkgaW5k
ZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUhUTUxQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFByaXZhdGUuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MUXVvdGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3MmUxYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0lt
cG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmpl
Y3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNs
dWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhU
TUxRdW90ZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50KiBvYmopCit7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9RVU9URV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50KiBj
b3JlKFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUXVvdGVFbGVtZW50Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFF1
b3RlRWxlbWVudCogd3JhcEhUTUxRdW90ZUVsZW1lbnQoV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVu
dCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdF
QktJVF9ET01fSFRNTF9RVU9URV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
SFRNTF9RVU9URV9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX3F1b3RlX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQq
IHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAo
IWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxRdW90
ZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MUXVvdGVFbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFy
Z2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCog
Y29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
SFRNTFF1b3RlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxR
dW90ZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdl
YktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9l
dmVudCA9IHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAg
IGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVu
dF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30K
KworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudCwgd2Vi
a2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfQ0lURSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50
X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxRdW90
ZUVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfUVVPVEVfRUxFTUVOVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NJVEU6CisgICAgICAg
IHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X3NldF9jaXRlKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX3F1b3RlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NSFRNTFF1b3RlRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9RVU9URV9FTEVNRU5U
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ0lU
RToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3F1
b3RlX2VsZW1lbnRfZ2V0X2NpdGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MUXVv
dGVFbGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9zZXRfcHJvcGVy
dHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfcXVv
dGVfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0lURSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaXRlIiwKKyAgICAgICAgICAg
ICJIVE1MUXVvdGVFbGVtZW50OmNpdGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxRdW90ZUVsZW1lbnQ6Y2l0ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfcXVvdGVfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHJlcXVlc3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9o
dG1sX3F1b3RlX2VsZW1lbnRfZ2V0X2NpdGUoV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1FVT1RFX0VMRU1FTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0
VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2l0ZUF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X3NldF9jaXRl
KFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfUVVPVEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNpdGVBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MUXVvdGVFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWJlNzg4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudC5oCkBAIC0w
LDAgKzEsNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5l
ZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVj
dGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRfaAorI2Rl
ZmluZSBXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX1FVT1RFX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0
X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX1FVT1RFX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfUVVPVEVfRUxFTUVOVCwgV2ViS2l0RE9N
SFRNTFF1b3RlRWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9RVU9URV9FTEVNRU5U
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1FVT1RFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRD
bGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1FVT1RFX0VMRU1FTlQob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfUVVPVEVfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9RVU9URV9FTEVN
RU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1FVT1RFX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxf
UVVPVEVfRUxFTUVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9RVU9URV9FTEVNRU5ULCBXZWJLaXRET01IVE1M
UXVvdGVFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQg
eworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVj
dCBfV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxl
bWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21faHRtbF9xdW90ZV9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9xdW90ZV9lbGVtZW50X2dldF9jaXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxRdW90ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRfZ2V0X2NpdGUoV2ViS2l0RE9N
SFRNTFF1b3RlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3F1b3Rl
X2VsZW1lbnRfc2V0X2NpdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVu
dAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
ZG9tX2h0bWxfcXVvdGVfZWxlbWVudF9zZXRfY2l0ZShXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxRdW90
ZUVsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI3YjQxZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFF1b3RlRWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxRdW90ZUVsZW1l
bnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MUXVvdGVFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitX
ZWJLaXRET01IVE1MUXVvdGVFbGVtZW50KiB3cmFwSFRNTFF1b3RlRWxlbWVudChXZWJDb3JlOjpI
VE1MUXVvdGVFbGVtZW50Kik7CitXZWJLaXRET01IVE1MUXVvdGVFbGVtZW50KiBraXQoV2ViQ29y
ZTo6SFRNTFF1b3RlRWxlbWVudCopOworV2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudCogY29yZShX
ZWJLaXRET01IVE1MUXVvdGVFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyM2IzMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsNDkzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09i
amVjdEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0
RE9NRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MU2Ny
aXB0RWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBvYmopCit7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGNv
cmUoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxT
Y3JpcHRFbGVtZW50KiB3cmFwSFRNTFNjcmlwdEVsZW1lbnQoV2ViQ29yZTo6SFRNTFNjcmlwdEVs
ZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX0hUTUxfU0NSSVBUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9IVE1MX1NDUklQVF9FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxs
cHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7
CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7Cisg
ICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpI
VE1MU2NyaXB0RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxT
Y3JpcHRFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0
aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxTY3Jp
cHRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFNjcmlwdEVs
ZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3JlbW92
ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
ICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5j
b3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUs
IGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlm
YWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9kaXNw
YXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9o
dG1sX3NjcmlwdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3Zl
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3JlbW92ZV9l
dmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRN
TFNjcmlwdEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudCwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQ
RV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9URVhULAorICAgIFBST1BfSFRNTF9GT1IsCisgICAgUFJP
UF9FVkVOVCwKKyAgICBQUk9QX0NIQVJTRVQsCisgICAgUFJPUF9BU1lOQywKKyAgICBQUk9QX0RF
RkVSLAorICAgIFBST1BfU1JDLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX0NST1NTX09SSUdJ
TiwKKyAgICBQUk9QX05PTkNFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3Nj
cmlwdF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktp
dERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1NDUklQVF9FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
VEVYVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF90ZXh0KHNl
bGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSFRNTF9GT1I6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9z
ZXRfaHRtbF9mb3Ioc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9FVkVOVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Njcmlw
dF9lbGVtZW50X3NldF9ldmVudChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIQVJTRVQ6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfY2hhcnNldChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FTWU5DOgorICAgICAgICB3
ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2FzeW5jKHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkVSOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2RlZmVyKHNlbGYsIGdf
dmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NSQzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9zcmMoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3R5
cGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0NST1NTX09SSUdJTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Nj
cmlwdF9lbGVtZW50X3NldF9jcm9zc19vcmlnaW4oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT05DRToKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9ub25jZShzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9zY3JpcHRfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVO
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RF
WFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9z
Y3JpcHRfZWxlbWVudF9nZXRfdGV4dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9IVE1MX0ZPUjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9odG1sX2ZvcihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9FVkVOVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9ldmVudChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSEFSU0VUOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2NoYXJz
ZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVNZTkM6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9nZXRfYXN5bmMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGRVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9zY3Jp
cHRfZWxlbWVudF9nZXRfZGVmZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfU1JDOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3NyYyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9UWVBFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DUk9TU19PUklHSU46CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfY3Jvc3Nfb3Jp
Z2luKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05PTkNFOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1l
bnRfZ2V0X25vbmNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxTY3JpcHRFbGVt
ZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3Byb3BlcnR5Owor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9URVhULAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInRleHQiLAorICAgICAgICAgICAgIkhU
TUxTY3JpcHRFbGVtZW50OnRleHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxTY3JpcHRFbGVtZW50OnRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSFRNTF9GT1IsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHRtbC1mb3IiLAorICAgICAg
ICAgICAgIkhUTUxTY3JpcHRFbGVtZW50Omh0bWwtZm9yIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MU2NyaXB0RWxlbWVudDpodG1sLWZvciIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9FVkVOVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJldmVu
dCIsCisgICAgICAgICAgICAiSFRNTFNjcmlwdEVsZW1lbnQ6ZXZlbnQiLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxTY3JpcHRFbGVtZW50OmV2ZW50IiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0NIQVJTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiY2hhcnNldCIsCisgICAgICAgICAgICAiSFRNTFNjcmlwdEVsZW1lbnQ6Y2hhcnNldCIsCisg
ICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNjcmlwdEVsZW1lbnQ6Y2hhcnNldCIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9BU1lOQywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAiYXN5bmMiLAorICAgICAgICAgICAgIkhUTUxTY3JpcHRFbGVtZW50OmFz
eW5jIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxTY3JpcHRFbGVtZW50
OmFzeW5jIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFRkVSLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJkZWZlciIsCisgICAgICAgICAgICAiSFRNTFNjcmlw
dEVsZW1lbnQ6ZGVmZXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFNj
cmlwdEVsZW1lbnQ6ZGVmZXIiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1JDLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInNyYyIsCisgICAgICAgICAgICAiSFRN
TFNjcmlwdEVsZW1lbnQ6c3JjIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
U2NyaXB0RWxlbWVudDpzcmMiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1M
U2NyaXB0RWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1M
U2NyaXB0RWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NST1NTX09SSUdJTiwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJjcm9zcy1vcmlnaW4iLAor
ICAgICAgICAgICAgIkhUTUxTY3JpcHRFbGVtZW50OmNyb3NzLW9yaWdpbiIsCisgICAgICAgICAg
ICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNjcmlwdEVsZW1lbnQ6Y3Jvc3Mtb3JpZ2luIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX05PTkNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgIm5vbmNlIiwKKyAgICAgICAgICAgICJIVE1MU2NyaXB0RWxlbWVudDpub25jZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFNjcmlwdEVsZW1lbnQ6bm9uY2Ui
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2luaXQo
V2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dl
dF90ZXh0KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRleHQoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3Rl
eHQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRUZXh0KGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9nZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJUFRfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmZvckF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9z
ZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2Vs
ZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTY3Jp
cHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Zm9y
QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3Njcmlw
dF9lbGVtZW50X2dldF9ldmVudChXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZXZlbnRBdHRyKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfc2V0X2V2ZW50KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1M
U2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRl
bS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmV2ZW50QXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X3NjcmlwdF9lbGVtZW50X2dldF9jaGFyc2V0KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFy
c2V0QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1s
X3NjcmlwdF9lbGVtZW50X3NldF9jaGFyc2V0KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ND
UklQVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmNoYXJzZXRBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFu
IHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfYXN5bmMoV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TQ1JJ
UFRfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PmFzeW5jKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfc2V0X2FzeW5jKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxm
LCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VM
RU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEFzeW5jKHZhbHVlKTsKK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9kZWZlcihXZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ND
UklQVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRl
bS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OmRlZmVyQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2RlZmVyKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBU
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpkZWZlckF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRf
c3JjKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NDUklQVF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRW
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnNyY0F0dHIsIGNv
bnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9nZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp0eXBlQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50
X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxT
Y3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVt
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
dHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9z
Y3JpcHRfZWxlbWVudF9nZXRfY3Jvc3Nfb3JpZ2luKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmNyb3NzT3JpZ2luKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRDcm9zc09yaWdpbihjb252ZXJ0ZWRWYWx1
ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X25vbmNl
KFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxT
Y3JpcHRFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpub25jZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfbm9uY2UoV2Vi
S2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bm9uY2VBdHRyLCBjb252ZXJ0
ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFNjcmlwdEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zMTgyNzZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudC5oCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRl
ZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lU
KQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudF9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50X2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxFbGVtZW50Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX1NDUklQVF9FTEVNRU5UICAgICAgICAgICAg
KHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfU0NSSVBUX0VMRU1FTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VMRU1FTlQs
IFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1ND
UklQVF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NDUklQVF9FTEVNRU5ULCBXZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBUX0VM
RU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lT
X0hUTUxfU0NSSVBUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VMRU1FTlQpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX0hUTUxfU0NSSVBUX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0NSSVBUX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTUhUTUxTY3JpcHRFbGVtZW50IHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRf
aW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Q2xhc3Mg
eworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF90eXBlKHZv
aWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfdGV4dDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0
X2VsZW1lbnRfZ2V0X3RleHQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfdGV4dDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0
X3RleHQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9odG1sX2Zv
cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2Ny
aXB0X2VsZW1lbnRfZ2V0X2h0bWxfZm9yKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2h0bWxfZm9y
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRf
ZWxlbWVudF9zZXRfaHRtbF9mb3IoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVt
ZW50X2dldF9ldmVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X2V2ZW50KFdlYktpdERPTUhUTUxTY3JpcHRFbGVt
ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0
X2V2ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9z
Y3JpcHRfZWxlbWVudF9zZXRfZXZlbnQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X2dldF9jaGFyc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfY2hhcnNldChXZWJLaXRET01IVE1MU2Ny
aXB0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVt
ZW50X2dldF9kZWZlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfZGVmZXIoV2ViS2l0RE9NSFRNTFNjcmlw
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9zZXRfZGVmZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9kZWZlcihXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVu
dCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3Jp
cHRfZWxlbWVudF9nZXRfc3JjOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfc3JjKFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRf
c2V0X3NyYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfc2V0X3NyYyhXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfZ2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X3NldF90eXBlX2F0dHI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF90eXBlX2F0dHIoV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA5NGIxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFByaXZhdGUuaApAQCAtMCwwICsx
LDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERP
TUhUTUxTY3JpcHRFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxTY3JpcHRF
bGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxTY3JpcHRFbGVtZW50Lmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHdyYXBIVE1MU2Ny
aXB0RWxlbWVudChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCopOworV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudCopOworV2ViQ29yZTo6
SFRNTFNjcmlwdEVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1l
bnRQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRVbnN0YWJs
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTgwNGExNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNj
cmlwdEVsZW1lbnRVbnN0YWJsZS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50VW5zdGFi
bGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudFVuc3RhYmxlX2gKKworI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfY2hhcnNldDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MU2NyaXB0RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfc2V0X2NoYXJzZXQoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3Njcmlw
dF9lbGVtZW50X2dldF9hc3luYzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2NyaXB0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2Vs
ZW1lbnRfZ2V0X2FzeW5jKFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X2FzeW5jOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfYXN5bmMoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1l
bnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2Ny
aXB0X2VsZW1lbnRfZ2V0X2Nyb3NzX29yaWdpbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3Njcmlw
dF9lbGVtZW50X2dldF9jcm9zc19vcmlnaW4oV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfY3Jvc3Nf
b3JpZ2luOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfY3Jvc3Nfb3JpZ2luKFdl
YktpdERPTUhUTUxTY3JpcHRFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfbm9uY2U6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfbm9uY2UoV2ViS2l0RE9NSFRNTFNjcmlw
dEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVu
dF9zZXRfbm9uY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKyAq
IEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X3NldF9ub25jZShXZWJL
aXRET01IVE1MU2NyaXB0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisj
ZW5kaWYgLyogV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnRVbnN0YWJsZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMmVmNzUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmNwcApAQCAtMCwwICsxLDc0NCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUg
IkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0Lmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxPcHRpb25zQ29sbGVj
dGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFVu
c3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBr
aXQoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9IVE1MX1NFTEVDVF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4o
b2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogY29yZShXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQq
IHdyYXBIVE1MU2VsZWN0RWxlbWVudChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
SFRNTF9TRUxFQ1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfU0VM
RUNUX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxf
c2VsZWN0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVF
dmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQt
PmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdP
YmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNv
cmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
R0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1M
U2VsZWN0RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3Rl
bmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNl
Q2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQo
V2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNo
X2V2ZW50ID0gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50Owor
ICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVu
ZXIgPSB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dCwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9F
TEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdF
VCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwK
KyAgICBQUk9QX0FVVE9GT0NVUywKKyAgICBQUk9QX0RJU0FCTEVELAorICAgIFBST1BfRk9STSwK
KyAgICBQUk9QX01VTFRJUExFLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX1JFUVVJUkVELAor
ICAgIFBST1BfU0laRSwKKyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9PUFRJT05TLAorICAgIFBS
T1BfTEVOR1RILAorICAgIFBST1BfU0VMRUNURURfT1BUSU9OUywKKyAgICBQUk9QX1NFTEVDVEVE
X0lOREVYLAorICAgIFBST1BfVkFMVUUsCisgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgIFBS
T1BfVkFMSURJVFksCisgICAgUFJPUF9WQUxJREFUSU9OX01FU1NBR0UsCisgICAgUFJPUF9MQUJF
TFMsCisgICAgUFJPUF9BVVRPQ09NUExFVEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfU0VM
RUNUX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9BVVRPRk9DVVM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9zZXRfYXV0b2ZvY3VzKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4o
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01VTFRJUExFOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X211bHRpcGxlKHNlbGYsIGdfdmFs
dWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05B
TUU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbmFtZShzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1JFUVVJUkVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0
X3JlcXVpcmVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NJWkU6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9zZXRfc2l6ZShzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9zZXRfbGVuZ3RoKHNlbGYsIGdfdmFsdWVfZ2V0X3Vsb25nKHZhbHVlKSwg
bnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9JTkRFWDoK
KyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9zZWxlY3RlZF9pbmRl
eChzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3Nl
dF92YWx1ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FVVE9DT01QTEVURToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0
X2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfU0VMRUNUX0VMRU1FTlQob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BVVRPRk9DVVM6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9nZXRfYXV0b2ZvY3VzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0ZPUk06CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9mb3JtKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01VTFRJUExFOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X211bHRp
cGxlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9nZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVFVSVJF
RDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X2dldF9yZXF1aXJlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TSVpFOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NpemUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3RfdHlwZShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PUFRJT05TOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfb3B0aW9ucyhz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MRU5HVEg6CisgICAgICAgIGdf
dmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0
X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9P
UFRJT05TOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0ZWRfb3B0aW9ucyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RFRF9JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3RlZF9p
bmRleChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxVRToKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X2dldF92YWx1ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSUxM
X1ZBTElEQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURJVFk6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF92YWxpZGl0eShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJREFUSU9OX01FU1NBR0U6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0xBQkVMUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2xhYmVscyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9BVVRPQ09NUExFVEU6CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfYXV0b2Nv
bXBsZXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRt
bF9zZWxlY3RfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPRk9DVVMsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImF1dG9mb2N1cyIsCisgICAgICAgICAg
ICAiSFRNTFNlbGVjdEVsZW1lbnQ6YXV0b2ZvY3VzIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdib29sZWFuIEhUTUxTZWxlY3RFbGVtZW50OmF1dG9mb2N1cyIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9ESVNBQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAiZGlzYWJsZWQiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OmRpc2FibGVkIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxTZWxlY3RFbGVtZW50OmRpc2Fi
bGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZPUk0sCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAiZm9ybSIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1l
bnQ6Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxGb3JtRWxlbWVu
dCogSFRNTFNlbGVjdEVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9GT1JNX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9NVUxUSVBMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xl
YW4oCisgICAgICAgICAgICAibXVsdGlwbGUiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVt
ZW50Om11bHRpcGxlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFuIEhUTUxTZWxl
Y3RFbGVtZW50Om11bHRpcGxlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05BTUUsCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAi
SFRNTFNlbGVjdEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTFNlbGVjdEVsZW1lbnQ6bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVFVSVJFRCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicmVxdWlyZWQiLAorICAg
ICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OnJlcXVpcmVkIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdib29sZWFuIEhUTUxTZWxlY3RFbGVtZW50OnJlcXVpcmVkIiwKKyAgICAgICAgICAg
IEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1NJWkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAg
InNpemUiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OnNpemUiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFNlbGVjdEVsZW1lbnQ6c2l6ZSIsCisgICAgICAgICAg
ICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVt
ZW50OnR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogSFRNTFNlbGVjdEVsZW1l
bnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09QVElPTlMsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAib3B0aW9ucyIsCisgICAgICAgICAgICAiSFRNTFNlbGVj
dEVsZW1lbnQ6b3B0aW9ucyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxP
cHRpb25zQ29sbGVjdGlvbiogSFRNTFNlbGVjdEVsZW1lbnQ6b3B0aW9ucyIsCisgICAgICAgICAg
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9PUFRJT05TX0NPTExFQ1RJT04sCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAg
ICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAg
ICAgIkhUTUxTZWxlY3RFbGVtZW50Omxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
dWxvbmcgSFRNTFNlbGVjdEVsZW1lbnQ6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfU0VMRUNURURfT1BUSU9OUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgK
KyAgICAgICAgICAgICJzZWxlY3RlZC1vcHRpb25zIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0
RWxlbWVudDpzZWxlY3RlZC1vcHRpb25zIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NSFRNTENvbGxlY3Rpb24qIEhUTUxTZWxlY3RFbGVtZW50OnNlbGVjdGVkLW9wdGlvbnMiLAor
ICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NFTEVDVEVEX0lO
REVYLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzZWxlY3RlZC1p
bmRleCIsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQ6c2VsZWN0ZWQtaW5kZXgiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFNlbGVjdEVsZW1lbnQ6c2VsZWN0ZWQt
aW5kZXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmFsdWUiLAorICAgICAg
ICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OnZhbHVlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRl
IGdjaGFyKiBIVE1MU2VsZWN0RWxlbWVudDp2YWx1ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSUxM
X1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJ3
aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudDp3aWxsLXZhbGlk
YXRlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTFNlbGVjdEVsZW1lbnQ6
d2lsbC12YWxpZGF0ZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElESVRZLAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInZhbGlkaXR5IiwKKyAgICAgICAgICAg
ICJIVE1MU2VsZWN0RWxlbWVudDp2YWxpZGl0eSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTVZhbGlkaXR5U3RhdGUqIEhUTUxTZWxlY3RFbGVtZW50OnZhbGlkaXR5IiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FH
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2YWxpZGF0aW9u
LW1lc3NhZ2UiLAorICAgICAgICAgICAgIkhUTUxTZWxlY3RFbGVtZW50OnZhbGlkYXRpb24tbWVz
c2FnZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBIVE1MU2VsZWN0RWxlbWVudDp2
YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQUJFTFMsCisgICAgICAgIGdf
cGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFiZWxzIiwKKyAgICAgICAgICAgICJI
VE1MU2VsZWN0RWxlbWVudDpsYWJlbHMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01Ob2RlTGlzdCogSFRNTFNlbGVjdEVsZW1lbnQ6bGFiZWxzIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9OT0RFX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPQ09NUExFVEUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiYXV0b2NvbXBsZXRlIiwKKyAgICAgICAgICAgICJIVE1M
U2VsZWN0RWxlbWVudDphdXRvY29tcGxldGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2No
YXIqIEhUTUxTZWxlY3RFbGVtZW50OmF1dG9jb21wbGV0ZSIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK1dlYktp
dERPTU5vZGUqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9pdGVtKFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitX
ZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfbmFtZWRfaXRlbShX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm5hbWVkSXRlbShj
b252ZXJ0ZWROYW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQoV2ViS2l0
RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxFbGVtZW50KiBlbGVtZW50
LCBXZWJLaXRET01IVE1MRWxlbWVudCogYmVmb3JlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoZWxlbWVudCkpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX0VMRU1FTlQoYmVmb3JlKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVj
dEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6SFRNTEVs
ZW1lbnQqIGNvbnZlcnRlZEVsZW1lbnQgPSBXZWJLaXQ6OmNvcmUoZWxlbWVudCk7CisgICAgV2Vi
Q29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEJlZm9yZSA9IFdlYktpdDo6Y29yZShiZWZvcmUp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmFkZCgqY29u
dmVydGVkRWxlbWVudCwgY29udmVydGVkQmVmb3JlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9yZW1vdmUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGYsIGdsb25nIGluZGV4KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxF
Q1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cmVtb3ZlQnlJbmRleChpbmRleCk7Cit9
CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9jaGVja192YWxpZGl0
eShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+Y2hlY2tWYWxpZGl0eSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9jdXN0b21fdmFsaWRp
dHkoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEVy
cm9yID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVycm9yKTsKKyAgICBpdGVtLT5zZXRDdXN0b21W
YWxpZGl0eShjb252ZXJ0ZWRFcnJvcik7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9nZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2Vs
ZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0cik7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfc2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2Jv
b2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5U
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6YXV0b2ZvY3VzQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2Rpc2FibGVkKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlzYWJsZWRBdHRy
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmRpc2FibGVkQXR0ciwgdmFsdWUpOworfQorCitXZWJLaXRET01IVE1MRm9ybUVsZW1l
bnQqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfZm9ybShXZWJLaXRET01IVE1M
U2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NF
TEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9ybSgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbXVsdGlwbGUoV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxF
Q1RfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
Pm11bHRpcGxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfc2V0X211bHRpcGxlKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50
KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VM
RUNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldE11bHRpcGxlKHZhbHVlKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRE
T01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXROYW1lQXR0cmlidXRlKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9uYW1l
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Om5hbWVBdHRyLCBjb252
ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9nZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZXF1aXJlZEF0dHIpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9yZXF1
aXJlZChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVxdWlyZWRB
dHRyLCB2YWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9n
ZXRfc2l6ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5zaXplKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NpemUoV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9TRUxFQ1RfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U2l6ZSh2YWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdF90eXBl
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxT
ZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxf
c2VsZWN0X2VsZW1lbnRfZ2V0X29wdGlvbnMoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRpb25zQ29sbGVjdGlvbj4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9wdGlvbnMoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X2dldF9sZW5ndGgoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3Nl
dF9sZW5ndGgoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVN
RU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAg
ICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRMZW5ndGgo
dmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdGVkX29wdGlvbnMoV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxF
Q1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0
aW9uPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2VsZWN0ZWRPcHRpb25zKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2xv
bmcgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3RlZF9pbmRleChXZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5zZWxlY3RlZEluZGV4KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NlbGVjdGVkX2luZGV4KFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNlbGVjdGVk
SW5kZXgodmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF92YWx1ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT52YWx1ZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9z
ZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1FTlQoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRW
YWx1ZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2lsbFZhbGlkYXRl
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogd2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF92YWxpZGl0eShXZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVD
VF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmFsaWRpdHlTdGF0
ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnZhbGlkaXR5KCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKFdlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfU0VMRUNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZhbGlkYXRpb25NZXNzYWdlKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X2xhYmVscyhXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5sYWJlbHMoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQu
Z2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9h
dXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9TRUxFQ1RfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXV0b2NvbXBsZXRlKCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X3NldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNU
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRBdXRvY29tcGxldGUoY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5NDU3YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuaApAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0
ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1M
U2VsZWN0RWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9TRUxFQ1RfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfc2VsZWN0
X2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1NFTEVDVF9FTEVN
RU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9IVE1MX1NFTEVDVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9TRUxFQ1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRDbGFzcykKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1NFTEVD
VF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1NFTEVDVF9FTEVNRU5UX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9IVE1MX1NFTEVDVF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1NFTEVD
VF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1NFTEVDVF9FTEVNRU5ULCBXZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxl
bWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
U2VsZWN0RWxlbWVudAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01O
b2RlKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2l0ZW0oV2ViS2l0RE9NSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X25hbWVkX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TFNlbGVjdEVsZW1lbnQKKyAqIEBuYW1lOiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5v
ZGUqCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfbmFtZWRfaXRlbShXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFNlbGVjdEVsZW1lbnQKKyAqIEBlbGVtZW50OiBBICNXZWJLaXRET01IVE1MRWxlbWVudAor
ICogQGJlZm9yZTogQSAjV2ViS2l0RE9NSFRNTEVsZW1lbnQKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRf
YWRkKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBXZWJLaXRET01IVE1MRWxlbWVu
dCogZWxlbWVudCwgV2ViS2l0RE9NSFRNTEVsZW1lbnQqIGJlZm9yZSwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9yZW1vdmU6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqIEBpbmRleDogQSAjZ2xvbmcK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X3JlbW92ZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfYXV0b2ZvY3VzOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X2dldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfYXV0b2Zv
Y3VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9zZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X2dldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9N
SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfZm9ybToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAj
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEZv
cm1FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9mb3JtKFdlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
c2VsZWN0X2VsZW1lbnRfZ2V0X211bHRpcGxlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9tdWx0aXBsZShX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X3NldF9tdWx0aXBsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X211bHRpcGxlKFdl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9uYW1lOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRf
bmFtZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRE
T01IVE1MU2VsZWN0RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NpemU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiov
CitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3Np
emUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MU2VsZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NpemUoV2ViS2l0RE9N
SFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdF90eXBlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2Vs
ZWN0X3R5cGUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfb3B0aW9uczoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uCisqKi8KK1dFQktJVF9BUEkgV2Vi
S2l0RE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X2dldF9vcHRpb25zKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X2xlbmd0aDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9u
ZworKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF9sZW5ndGgoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbGVuZ3RoOgorICogQHNlbGY6IEEg
I1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2d1bG9uZworICogQGVy
cm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9zZXRfbGVuZ3RoKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxm
LCBndWxvbmcgdmFsdWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdGVkX2luZGV4OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VC
S0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9zZWxlY3Rl
ZF9pbmRleChXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9zZWxlY3RlZF9pbmRleDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICoK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0
X3NlbGVjdGVkX2luZGV4KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmLCBnbG9uZyB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF92YWx1
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfZ2V0X3ZhbHVlKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3ZhbHVlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFy
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVu
dF9zZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF93
aWxsX3ZhbGlkYXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlKFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVs
ZW1lbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODZjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTUhUTUxTZWxlY3RFbGVtZW50UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFNlbGVjdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCogd3JhcEhUTUxTZWxlY3RFbGVtZW50KFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50Kik7CitXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCoga2l0
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFByaXZhdGVfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFVuc3RhYmxlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li43OTE5YTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFVuc3Rh
YmxlLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdl
YktpdERPTUhUTUxTZWxlY3RFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11
bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3Nl
bGVjdF9lbGVtZW50X2NoZWNrX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF9z
ZWxlY3RfZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9jdXN0
b21fdmFsaWRpdHk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQKKyAq
IEBlcnJvcjogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9jdXN0b21fdmFs
aWRpdHkoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9yZXF1aXJl
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3JlcXVpcmVk
KFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3JlcXVpcmVkOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9zZXRfcmVxdWlyZWQoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYs
IGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfZ2V0X3NlbGVjdGVkX29wdGlvbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFNlbGVj
dEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUhU
TUxDb2xsZWN0aW9uCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUhUTUxDb2xsZWN0aW9uKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF9zZWxlY3RlZF9vcHRpb25zKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVZhbGlkaXR5U3RhdGUqCit3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3ZhbGlkaXR5KFdlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2Vs
ZW1lbnRfZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
U2VsZWN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NlbGVj
dF9lbGVtZW50X2dldF92YWxpZGF0aW9uX21lc3NhZ2UoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRf
bGFiZWxzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlzdCoKK3dl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfbGFiZWxzKFdlYktpdERPTUhUTUxTZWxl
Y3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfZ2V0X2F1dG9jb21wbGV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU2VsZWN0RWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50
X2dldF9hdXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfYXV0b2NvbXBsZXRlKFdlYktpdERPTUhU
TUxTZWxlY3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAv
KiBXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFN0eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzMwMTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTUhUTUxTdHlsZUVsZW1lbnQuY3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTFN0eWxlRWxlbWVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRS
dWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudFVuc3RhYmxlLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MU3R5bGVFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9TVFlM
RV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MU3R5bGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogd3JhcEhUTUxTdHlsZUVsZW1l
bnQoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9TVFlMRV9FTEVNRU5ULCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3Mo
KmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0
aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxTdHlsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3N0eWxl
X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNl
KQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF9zdHlsZV9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50
X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0RE9NSFRNTFN0eWxlRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnQsIFdF
QktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRf
RE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfRElTQUJMRUQsCisgICAgUFJPUF9NRURJQSwK
KyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9TSEVFVCwKKyAgICBQUk9QX05PTkNFLAorfTsKKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCogc2VsZiA9
IFdFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfRElTQUJMRUQ6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF9zdHlsZV9lbGVtZW50X3NldF9kaXNhYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFu
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRURJQToKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X21lZGlhKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X05PTkNFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfbm9uY2Uo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX1NUWUxFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewor
ICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X2Rpc2FibGVkKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FRElBOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfbWVkaWEoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1
ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3R5
cGVfYXR0cihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TSEVFVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxl
bWVudF9nZXRfc2hlZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9O
Q0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF9z
dHlsZV9lbGVtZW50X2dldF9ub25jZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxT
dHlsZUVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF9z
dHlsZV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ESVNBQkxFRCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGlzYWJsZWQiLAor
ICAgICAgICAgICAgIkhUTUxTdHlsZUVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAgICAgICAgInJl
YWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFN0eWxlRWxlbWVudDpkaXNhYmxlZCIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9NRURJQSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJtZWRpYSIsCisgICAgICAgICAgICAiSFRNTFN0eWxlRWxlbWVudDptZWRpYSIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFN0eWxlRWxlbWVudDptZWRpYSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgInR5cGUiLAorICAgICAgICAgICAgIkhUTUxTdHlsZUVsZW1lbnQ6dHlwZSIsCisgICAg
ICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFN0eWxlRWxlbWVudDp0eXBlIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NIRUVULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAg
ICAgICAgInNoZWV0IiwKKyAgICAgICAgICAgICJIVE1MU3R5bGVFbGVtZW50OnNoZWV0IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NU3R5bGVTaGVldCogSFRNTFN0eWxlRWxlbWVu
dDpzaGVldCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9OT05D
RSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJub25jZSIsCisg
ICAgICAgICAgICAiSFRNTFN0eWxlRWxlbWVudDpub25jZSIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBnY2hhciogSFRNTFN0eWxlRWxlbWVudDpub25jZSIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9pbml0KFdlYktpdERPTUhUTUxTdHlsZUVsZW1l
bnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRN
TFN0eWxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NU
WUxFX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PmRpc2FibGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0
bWxfc3R5bGVfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCog
c2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1NUWUxF
X0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0RGlzYWJsZWQodmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X21lZGlhKFdlYktpdERPTUhU
TUxTdHlsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9T
VFlMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjptZWRpYUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3NldF9tZWRpYShXZWJLaXRET01IVE1MU3R5bGVF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1NUWUxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjptZWRpYUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF90eXBlX2F0dHIoV2ViS2l0RE9N
SFRNTFN0eWxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1NUWUxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfdHlwZV9hdHRyKFdlYktpdERPTUhUTUxT
dHlsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX0hUTUxfU1RZTEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnR5cGVBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K1dlYktpdERPTVN0eWxlU2hlZXQqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9z
aGVldChXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfU1RZTEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRN
TFN0eWxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6U3R5bGVTaGVldD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNoZWV0
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9ub25jZShXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
U1RZTEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6bm9uY2VBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfbm9uY2UoV2ViS2l0RE9NSFRNTFN0eWxl
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9TVFlMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6bm9uY2VBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhNzBhZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudC5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRN
TFN0eWxlRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJr
aXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9TVFlMRV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF9zdHlsZV9l
bGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5U
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1NUWUxFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfU1RZTEVfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9T
VFlMRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1NUWUxFX0VMRU1FTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfU1RZTEVfRUxFTUVOVF9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9T
VFlMRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1NUWUxFX0VMRU1FTlRfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfU1RZTEVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudENsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50IHsKKyAgICBXZWJLaXRET01I
VE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhUTUxT
dHlsZUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxl
bWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxl
bWVudF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVu
dAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1M
U3R5bGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxl
bWVudF9zZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVu
dAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFN0eWxl
RWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF9zdHlsZV9lbGVtZW50X2dldF9tZWRpYToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU3R5
bGVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9tZWRpYShXZWJLaXRET01IVE1M
U3R5bGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxl
bWVudF9zZXRfbWVkaWE6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudAor
ICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfbWVkaWEoV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5
bGVfZWxlbWVudF9nZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVf
ZWxlbWVudF9zZXRfdHlwZV9hdHRyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxTdHlsZUVs
ZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MU3R5
bGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9zaGVldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJL
aXRET01TdHlsZVNoZWV0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3R5bGVTaGVldCoKK3dl
YmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9zaGVldChXZWJLaXRET01IVE1MU3R5bGVF
bGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxT
dHlsZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFlMWU0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTFN0eWxlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFN0
eWxlRWxlbWVudCogd3JhcEhUTUxTdHlsZUVsZW1lbnQoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVu
dCopOworV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxTdHlsZUVs
ZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFN0
eWxlRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRE
T01IVE1MU3R5bGVFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTdHls
ZUVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE2MzM3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDU1IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxTdHlsZUVs
ZW1lbnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRVbnN0YWJs
ZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdl
YmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9nZXRfbm9uY2U6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X25vbmNlKFdlYktpdERPTUhUTUxTdHlsZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3Nl
dF9ub25jZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X3NldF9ub25jZShXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAv
KiBXZWJLaXRET01IVE1MU3R5bGVFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2IyYzRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAKQEAgLTAsMCAr
MSwxNzIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIgorCisj
aW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2Fj
aGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGtpdChX
ZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCog
Y29yZShXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKwor
V2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHdyYXBIVE1MVGFibGVDYXB0aW9uRWxl
bWVudChXZWJDb3JlOjpIVE1MVGFibGVDYXB0aW9uRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9D
QVBUSU9OX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NB
UFRJT05fRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRt
bF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBp
ZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxU
YWJsZUNhcHRpb25FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2FkZF9ldmVu
dF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdl
YkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJn
ZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5l
cjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5h
bWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSog
aGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVD
YXB0aW9uRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5p
dChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0
Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2FwdGlvbl9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVu
dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdl
YktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2Fw
dGlvbl9lbGVtZW50LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9J
TlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90
YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0FMSUdOLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGFibGVDYXB0
aW9uRWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElH
TjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9zZXRfYWxp
Z24oc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICBn
X3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9l
bGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2FwdGlvbl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9u
X2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50OmFs
aWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDYXB0aW9uRWxl
bWVudDphbGlnbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2Fw
dGlvbl9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHJlcXVl
c3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitnY2hhciogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9U
QUJMRV9DQVBUSU9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNh
cHRpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfc2V0X2Fs
aWduKFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RG
OjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwor
ICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzJkMmEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
RE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25s
eSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2Vu
ZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQgICAgICAg
ICAgICAod2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9I
VE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9IVE1MX1RBQkxFX0NBUFRJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NBUFRJT05f
RUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NB
UFRJT05fRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DQVBUSU9OX0VM
RU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0FQVElPTl9FTEVNRU5ULCBXZWJLaXRET01IVE1M
VGFibGVDYXB0aW9uRWxlbWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVD
YXB0aW9uRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNl
OworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudENsYXNzIHsK
KyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJ
VF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfZ2V0X3R5
cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVu
dF9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NhcHRpb25fZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jYXB0aW9uX2VsZW1lbnRfc2V0X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUYWJsZUNhcHRpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jYXB0aW9uX2VsZW1lbnRfc2V0X2Fs
aWduKFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3NGFkOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVGFibGVDYXB0
aW9uRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFibGVDYXB0aW9u
RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGFibGVDYXB0aW9u
RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxUYWJsZUNhcHRp
b25FbGVtZW50KiB3cmFwSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoV2ViQ29yZTo6SFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50KiBraXQo
V2ViQ29yZTo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxUYWJsZUNh
cHRpb25FbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJsZUNhcHRp
b25FbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjYxZjlmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50LmNwcApAQCAtMCwwICsxLDY1NyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxUYWJsZUNlbGxFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUu
aD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
Q29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBvYmopCit7
CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoa2l0KHN0YXRp
Y19jYXN0PFdlYkNvcmU6Ok5vZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxUYWJsZUNl
bGxFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOwor
fQorCitXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogd3JhcEhUTUxUYWJsZUNlbGxFbGVt
ZW50KFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExf
RUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0VMTF9FTEVN
RU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nl
bGxfZWxlbWVudF9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBX
ZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2
ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdl
dC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMp
IHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9u
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRs
ZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0
YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0
ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBl
dmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQor
eworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOwor
ICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVN
RU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0VMTF9J
TkRFWCwKKyAgICBQUk9QX0FMSUdOLAorICAgIFBST1BfQVhJUywKKyAgICBQUk9QX0JHX0NPTE9S
LAorICAgIFBST1BfQ0gsCisgICAgUFJPUF9DSF9PRkYsCisgICAgUFJPUF9DT0xfU1BBTiwKKyAg
ICBQUk9QX1JPV19TUEFOLAorICAgIFBST1BfSEVBREVSUywKKyAgICBQUk9QX0hFSUdIVCwKKyAg
ICBQUk9QX05PX1dSQVAsCisgICAgUFJPUF9WX0FMSUdOLAorICAgIFBST1BfV0lEVEgsCisgICAg
UFJPUF9BQkJSLAorICAgIFBST1BfU0NPUEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX1RBQkxFX0NFTExfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FYSVM6CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2F4aXMoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYmdfY29sb3Ioc2VsZiwg
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9DSDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY2go
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9DSF9PRkY6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1l
bnRfc2V0X2NoX29mZihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTF9TUEFOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X3NldF9jb2xfc3BhbihzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ST1dfU1BBTjoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfcm93X3NwYW4oc2VsZiwgZ192
YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSEVB
REVSUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfaGVh
ZGVycyhzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfaGVpZ2h0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9fV1JBUDoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfbm9fd3JhcChzZWxmLCBnX3ZhbHVlX2dldF9ib29s
ZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WX0FMSUdOOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF92X2FsaWduKHNlbGYs
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0
X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQUJCUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfYWJicihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDT1BFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X3NldF9zY29wZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRN
TFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ0VMTF9FTEVN
RU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
Q0VMTF9JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2VsbF9pbmRleChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVhJUzoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRf
YXhpcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nl
bGxfZWxlbWVudF9nZXRfYmdfY29sb3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ0g6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NIX09GRjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2hfb2ZmKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTF9TUEFOOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jb2xf
c3BhbihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ST1dfU1BBTjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9nZXRfcm93X3NwYW4oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSEVBREVSUzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfaGVhZGVycyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2hlaWdodChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT19XUkFQOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2dldF9ub193cmFwKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZfQUxJ
R046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3ZfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FCQlI6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2FiYnIoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NPUEU6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
Z2V0X3Njb3BlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MVGFibGVDZWxs
RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DRUxM
X0lOREVYLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJjZWxsLWlu
ZGV4IiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDpjZWxsLWluZGV4IiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Y2VsbC1pbmRl
eCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAg
ICJIVE1MVGFibGVDZWxsRWxlbWVudDphbGlnbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVhJ
UywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJheGlzIiwKKyAg
ICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDpheGlzIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVudDpheGlzIiwKKyAgICAgICAgICAgICIi
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0JHX0NPTE9SLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAg
ImJnLWNvbG9yIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDpiZy1jb2xvciIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Ymct
Y29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAiY2giLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50
OmNoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVu
dDpjaCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSF9PRkYsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiY2gtb2ZmIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxs
RWxlbWVudDpjaC1vZmYiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJs
ZUNlbGxFbGVtZW50OmNoLW9mZiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT0xfU1BBTiwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiY29sLXNwYW4iLAorICAgICAgICAg
ICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OmNvbC1zcGFuIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdsb25nIEhUTUxUYWJsZUNlbGxFbGVtZW50OmNvbC1zcGFuIiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1JPV19TUEFOLAorICAgICAgICBnX3BhcmFtX3NwZWNf
bG9uZygKKyAgICAgICAgICAgICJyb3ctc3BhbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6cm93LXNwYW4iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFRh
YmxlQ2VsbEVsZW1lbnQ6cm93LXNwYW4iLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExP
TkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfSEVBREVSUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJoZWFkZXJzIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxlbWVudDpoZWFkZXJz
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVudDpo
ZWFkZXJzIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNl
bGxFbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRh
YmxlQ2VsbEVsZW1lbnQ6aGVpZ2h0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05PX1dSQVAsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIm5vLXdyYXAiLAorICAgICAg
ICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50Om5vLXdyYXAiLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2Jvb2xlYW4gSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6bm8td3JhcCIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9WX0FMSUdOLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgInYtYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OnYtYWxp
Z24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNlbGxFbGVtZW50
OnYtYWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNl
bGxFbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFi
bGVDZWxsRWxlbWVudDp3aWR0aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BQkJSLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFiYnIiLAorICAgICAgICAgICAgIkhU
TUxUYWJsZUNlbGxFbGVtZW50OmFiYnIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxUYWJsZUNlbGxFbGVtZW50OmFiYnIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NPUEUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic2NvcGUiLAorICAgICAg
ICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50OnNjb3BlIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MVGFibGVDZWxsRWxlbWVudDpzY29wZSIsCisgICAgICAgICAgICAiIiwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3QpOwor
fQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jZWxsX2lu
ZGV4KFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnbG9uZyByZXN1bHQgPSBpdGVtLT5jZWxsSW5kZXgoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWxpZ24o
V2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRf
c2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2F4aXMoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxM
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpheGlzQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYXhpcyhXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXhpc0F0dHIsIGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0
X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdjb2xvckF0dHIp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RB
QkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpiZ2NvbG9yQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitn
Y2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2goV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY2goV2Vi
S2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxl
bWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJBdHRy
LCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2Vs
bF9lbGVtZW50X2dldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpj
aGFyb2ZmQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyb2ZmQXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jb2xf
c3BhbihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+Y29sU3BhbkZvckJpbmRpbmdzKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3Nl
dF9jb2xfc3BhbihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgZ2xvbmcgdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxm
KSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q29sU3BhbkZvckJpbmRpbmdzKHZhbHVlKTsKK30KKwor
Z2xvbmcgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfcm93X3NwYW4oV2Vi
S2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlc3VsdCA9IGl0ZW0tPnJvd1NwYW5Gb3JCaW5kaW5ncygpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfcm93X3Nw
YW4oV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGl0ZW0tPnNldFJvd1NwYW5Gb3JCaW5kaW5ncyh2YWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWFkZXJzKFdlYktpdERPTUhU
TUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVD
ZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6aGVhZGVyc0F0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlYWRl
cnMoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVD
ZWxsRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6Omhl
YWRlcnNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWlnaHQoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VM
RU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpoZWlnaHRBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9oZWlnaHQoV2ViS2l0RE9NSFRNTFRh
YmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmhlaWdodEF0dHIsIGNvbnZlcnRl
ZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfbm9fd3JhcChXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSwgRkFM
U0UpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpub3dyYXBBdHRyKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1l
bnRfc2V0X25vX3dyYXAoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGdib29s
ZWFuIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpub3dyYXBBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VM
TF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6dmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfdl9hbGlnbihXZWJLaXRET01I
VE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsaWduQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxl
bWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RB
QkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjp3aWR0aEF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2No
YXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2FiYnIoV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJs
ZUNlbGxFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphYmJyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYWJicihX
ZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQoc2VsZikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWJickF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X3Njb3BlKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5zY29wZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3Njb3BlKFdlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFNjb3BlKGNvbnZlcnRlZFZhbHVlKTsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
VGFibGVDZWxsRWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3
NWZjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50LmgKQEAg
LTAsMCArMSwzMTUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVm
aW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQp
CisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRp
cmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
X2gKKyNkZWZpbmUgV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRfaAorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UICAg
ICAgICAgICAgKHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRN
TF9UQUJMRV9DRUxMX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NFTExfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9U
QUJMRV9DRUxMX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Q2xhc3MpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
VEFCTEVfQ0VMTF9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NF
TExfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfQ0VMTF9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NFTExf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBf
V2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVs
ZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfZ2V0X2NlbGxfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGds
b25nCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jZWxsX2luZGV4KFdl
YktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9h
bGlnbihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9z
ZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9n
ZXRfYXhpczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9heGlzKFdlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X3NldF9heGlzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2F4aXMoV2ViS2l0RE9NSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYmdfY29sb3I6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9n
ZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2JnX2NvbG9yOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
ZWxsX2VsZW1lbnRfZ2V0X2NoOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NoKFdlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3NldF9jaDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxs
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jaChXZWJLaXRET01IVE1MVGFi
bGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9jaF9vZmY6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jaF9vZmY6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2No
YXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9zZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfZ2V0X2NvbF9zcGFuOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNl
bGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY29sX3NwYW4oV2ViS2l0
RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NvbF9zcGFuOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2NvbF9z
cGFuKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfcm93X3NwYW46
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X2dldF9yb3dfc3BhbihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9z
ZXRfcm93X3NwYW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfcm93X3NwYW4oV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWFkZXJzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2hl
YWRlcnMoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlYWRlcnM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9zZXRfaGVhZGVycyhXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVt
ZW50X2dldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxU
YWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3NldF9oZWlnaHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfaGVpZ2h0KFdlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X25vX3dyYXA6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X2dldF9ub193cmFwKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3Nl
dF9ub193cmFwOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Cisg
KiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X25vX3dyYXAoV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF92X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0
X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3ZfYWxpZ246CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxl
bWVudF9zZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9l
bGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1M
VGFibGVDZWxsRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NlbGxfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWJicjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9l
bGVtZW50X2dldF9hYmJyKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9hYmJyOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxs
X2VsZW1lbnRfc2V0X2FiYnIoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9nZXRfc2NvcGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfc2NvcGUoV2ViS2l0RE9NSFRN
TFRhYmxlQ2VsbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfc2V0X3Njb3BlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZUNlbGxFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3Njb3BlKFdlYktpdERP
TUhUTUxUYWJsZUNlbGxFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnRfaCAqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFRhYmxlQ2VsbEVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmRjODhlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1l
bnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudFByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9IVE1MVGFibGVDZWxsRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MVGFibGVDZWxsRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTUhUTUxUYWJsZUNlbGxFbGVtZW50KiB3cmFwSFRNTFRhYmxlQ2VsbEVsZW1lbnQoV2ViQ29y
ZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50
KiBraXQoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxUYWJs
ZUNlbGxFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVtZW50Kik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45OTRjZjlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDb2xF
bGVtZW50LmNwcApAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUYWJsZUNv
bEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1M
VGFibGVDb2xFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VU
RjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVu
dCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRN
TFRhYmxlQ29sRWxlbWVudCogd3JhcEhUTUxUYWJsZUNvbEVsZW1lbnQoV2ViQ29yZTo6SFRNTFRh
YmxlQ29sRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChnX29iamVjdF9uZXco
V0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0
Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGlu
Z3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2Ny
aXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBj
aGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQor
eworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFy
Z2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVu
ZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9k
b21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9N
RXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFu
ZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDb2xF
bGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlm
YWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1l
bnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIg
PSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MVGFibGVDb2xFbGVt
ZW50LCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9I
VE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRf
VEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9DSCwKKyAgICBQUk9QX0NIX09GRiwKKyAg
ICBQUk9QX1NQQU4sCisgICAgUFJPUF9WX0FMSUdOLAorICAgIFBST1BfV0lEVEgsCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVChvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FMSUdOOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0g6CisgICAg
ICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2goc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DSF9P
RkY6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2hfb2Zm
KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU1BBTjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50
X3NldF9zcGFuKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1ZfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9j
b2xfZWxlbWVudF9zZXRfdl9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3dpZHRoKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NvbF9lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bl
cnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERP
TUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ09MX0VM
RU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJP
UF9BTElHTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9jaChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DSF9PRkY6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfY2hfb2ZmKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NQQU46CisgICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfc3Bh
bihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WX0FMSUdOOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2Vs
ZW1lbnRfZ2V0X3ZfYWxpZ24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
V0lEVEg6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF90YWJsZV9jb2xfZWxlbWVudF9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2NsYXNzX2luaXQoV2Vi
S2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nv
bF9lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNvbEVsZW1lbnQ6YWxpZ24iLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNvbEVsZW1lbnQ6YWxpZ24i
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQ0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiY2giLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNvbEVsZW1lbnQ6Y2giLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNvbEVsZW1lbnQ6Y2giLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQ0hfT0ZGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAor
ICAgICAgICAgICAgImNoLW9mZiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ29sRWxlbWVudDpj
aC1vZmYiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNvbEVsZW1l
bnQ6Y2gtb2ZmIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NQQU4sCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19sb25nKAorICAgICAgICAgICAgInNwYW4iLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNvbEVs
ZW1lbnQ6c3BhbiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1MVGFibGVDb2xF
bGVtZW50OnNwYW4iLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVl9B
TElHTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2LWFsaWdu
IiwKKyAgICAgICAgICAgICJIVE1MVGFibGVDb2xFbGVtZW50OnYtYWxpZ24iLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUNvbEVsZW1lbnQ6di1hbGlnbiIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ29sRWxlbWVudDp3aWR0aCIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlQ29sRWxlbWVudDp3aWR0
aCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRf
aW5pdChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNF
RF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xf
ZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0
dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9jb2xfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9DT0xfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9jaChXZWJLaXRET01IVE1MVGFi
bGVDb2xFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfQ09MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmNoYXJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2NoKFdlYktpdERPTUhUTUxU
YWJsZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyQXR0ciwgY29udmVydGVkVmFs
dWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9j
aF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjaGFyb2ZmQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVt
ZW50X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlQ29sRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Cisg
ICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmNoYXJvZmZBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9k
b21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfc3BhbihXZWJLaXRET01IVE1MVGFibGVDb2xF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09M
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+c3Bhbigp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nv
bF9lbGVtZW50X3NldF9zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGds
b25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTcGFuKHZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfdl9hbGlnbihXZWJLaXRET01IVE1M
VGFibGVDb2xFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfQ09MX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihX
ZWJDb3JlOjpIVE1MTmFtZXM6OnZhbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfdl9hbGlnbihXZWJL
aXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0NPTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsaWduQXR0ciwg
Y29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9l
bGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0
cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxl
X2NvbF9lbGVtZW50X3NldF93aWR0aChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X0NPTF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6d2lkdGhBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5NmUwMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudC5oCkBAIC0wLDAgKzEsMTYyIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01f
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3
ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTFRhYmxlQ29sRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9I
VE1MX1RBQkxFX0NPTF9FTEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5ULCBX
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RB
QkxFX0NPTF9FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX0NPTF9FTEVNRU5ULCBXZWJLaXRE
T01IVE1MVGFibGVDb2xFbGVtZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9U
QUJMRV9DT0xfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVCkpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9D
T0xfRUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVF9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxl
bWVudENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50IHsKKyAg
ICBXZWJLaXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1l
bnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MVGFibGVDb2xFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X2No
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NvbF9lbGVtZW50X2dldF9jaChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2NoOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqIEB2YWx1ZTogQSAj
Z2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2Nv
bF9lbGVtZW50X3NldF9jaChXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxl
bWVudF9nZXRfY2hfb2ZmOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRh
YmxlQ29sRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Nv
bF9lbGVtZW50X3NldF9jaF9vZmY6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlQ29s
RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X2NoX29mZihXZWJLaXRET01IVE1M
VGFibGVDb2xFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfc3BhbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoq
LworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dl
dF9zcGFuKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfc3BhbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRf
c3BhbihXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF92X2FsaWduOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxl
X2NvbF9lbGVtZW50X2dldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfdl9h
bGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50CisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9jb2xfZWxlbWVudF9zZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9jb2xfZWxlbWVudF9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRh
YmxlQ29sRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktp
dERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9jb2xfZWxlbWVudF9zZXRfd2lkdGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TFRhYmxlQ29sRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktp
dERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50X2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFRhYmxlQ29sRWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44MDExMzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudFByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0hUTUxUYWJsZUNvbEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTFRhYmxlQ29sRWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhU
TUxUYWJsZUNvbEVsZW1lbnQqIHdyYXBIVE1MVGFibGVDb2xFbGVtZW50KFdlYkNvcmU6OkhUTUxU
YWJsZUNvbEVsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqIGtpdChXZWJD
b3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50
KiBjb3JlKFdlYktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudFByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiMTg0Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudC5jcHAKQEAgLTAsMCArMSw3
MTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFt
ZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVTZWN0
aW9uRWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudFVuc3RhYmxlLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIGtpdChXZWJDb3JlOjpI
VE1MVGFibGVFbGVtZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJM
RV9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitX
ZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQq
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpI
VE1MVGFibGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
IDogMDsKK30KKworV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogd3JhcEhUTUxUYWJsZUVsZW1l
bnQoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQo
Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9FTEVNRU5ULCAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3Mo
KmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9s
aXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0
aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfYWRkX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkhUTUxUYWJsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRM
aXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIs
IHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxl
X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVz
ZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogY29yZVRhcmdldCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNl
KQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZh
Y2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0RE9NSFRNTFRhYmxlRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnQsIFdF
QktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRf
RE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0FQVElPTiwKKyAgICBQUk9QX1RfSEVBRCwK
KyAgICBQUk9QX1RfRk9PVCwKKyAgICBQUk9QX1JPV1MsCisgICAgUFJPUF9UX0JPRElFUywKKyAg
ICBQUk9QX0FMSUdOLAorICAgIFBST1BfQkdfQ09MT1IsCisgICAgUFJPUF9CT1JERVIsCisgICAg
UFJPUF9DRUxMX1BBRERJTkcsCisgICAgUFJPUF9DRUxMX1NQQUNJTkcsCisgICAgUFJPUF9GUkFN
RSwKKyAgICBQUk9QX1JVTEVTLAorICAgIFBST1BfU1VNTUFSWSwKKyAgICBQUk9QX1dJRFRILAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCog
c2VsZiA9IFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JHX0NPTE9SOgorICAgICAg
ICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfYmdfY29sb3Ioc2VsZiwgZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CT1JE
RVI6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9ib3JkZXIoc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DRUxMX1BBRERJTkc6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X3NldF9jZWxsX3BhZGRpbmcoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DRUxMX1NQQUNJTkc6CisgICAgICAgIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X3NldF9jZWxsX3NwYWNpbmcoc2VsZiwgZ192YWx1ZV9nZXRf
c3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkFNRToKKyAg
ICAgICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2ZyYW1lKHNlbGYsIGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUlVM
RVM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9ydWxlcyhzZWxm
LCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NVTU1BUlk6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9z
dW1tYXJ5KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X3NldF93aWR0aChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYg
PSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0NBUFRJT046CisgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NhcHRpb24o
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVF9IRUFEOgorICAgICAgICBn
X3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dl
dF90X2hlYWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVF9GT09UOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X2dldF90X2Zvb3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Uk9XUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfcm93cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9UX0JPRElFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9ib2RpZXMoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9hbGlnbihzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CR19DT0xPUjoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2JnX2NvbG9y
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JPUkRFUjoKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
Z2V0X2JvcmRlcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9DRUxMX1BB
RERJTkc6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3BhZGRpbmcoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ0VMTF9TUEFDSU5HOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfY2VsbF9zcGFjaW5nKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZSQU1FOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRf
ZnJhbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUlVMRVM6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X2dldF9ydWxlcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVU1N
QVJZOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfc3VtbWFyeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NsYXNzX2luaXQoV2Vi
S2l0RE9NSFRNTFRhYmxlRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0NBUFRJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY2Fw
dGlvbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDpjYXB0aW9uIiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQqIEhUTUxUYWJs
ZUVsZW1lbnQ6Y2FwdGlvbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJM
RV9DQVBUSU9OX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9UX0hFQUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAidC1oZWFkIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50OnQt
aGVhZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KiBIVE1MVGFibGVFbGVtZW50OnQtaGVhZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UX0ZPT1QsCisgICAgICAgIGdfcGFy
YW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidC1mb290IiwKKyAgICAgICAgICAgICJIVE1M
VGFibGVFbGVtZW50OnQtZm9vdCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTUhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KiBIVE1MVGFibGVFbGVtZW50OnQtZm9vdCIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ST1dTLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInJvd3MiLAorICAgICAg
ICAgICAgIkhUTUxUYWJsZUVsZW1lbnQ6cm93cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdl
YktpdERPTUhUTUxDb2xsZWN0aW9uKiBIVE1MVGFibGVFbGVtZW50OnJvd3MiLAorICAgICAgICAg
ICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RfQk9ESUVTLAorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInQtYm9kaWVzIiwKKyAgICAgICAgICAg
ICJIVE1MVGFibGVFbGVtZW50OnQtYm9kaWVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24qIEhUTUxUYWJsZUVsZW1lbnQ6dC1ib2RpZXMiLAorICAgICAg
ICAgICAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ09MTEVDVElPTiwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FMSUdOLAorICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImFsaWduIiwKKyAgICAgICAgICAgICJI
VE1MVGFibGVFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MVGFibGVFbGVtZW50OmFsaWduIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0JHX0NPTE9SLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImJnLWNvbG9yIiwKKyAgICAg
ICAgICAgICJIVE1MVGFibGVFbGVtZW50OmJnLWNvbG9yIiwKKyAgICAgICAgICAgICJyZWFkLXdy
aXRlIGdjaGFyKiBIVE1MVGFibGVFbGVtZW50OmJnLWNvbG9yIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0JPUkRFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJib3Jk
ZXIiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQ6Ym9yZGVyIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVFbGVtZW50OmJvcmRlciIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9DRUxMX1BBRERJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiY2VsbC1wYWRkaW5nIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50OmNl
bGwtcGFkZGluZyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlRWxl
bWVudDpjZWxsLXBhZGRpbmciLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0VMTF9TUEFDSU5HLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNlbGwtc3BhY2luZyIsCisg
ICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDpjZWxsLXNwYWNpbmciLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUVsZW1lbnQ6Y2VsbC1zcGFjaW5nIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0ZSQU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImZyYW1lIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50OmZyYW1lIiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVFbGVtZW50OmZyYW1lIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1JVTEVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgInJ1bGVzIiwKKyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50OnJ1bGVzIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVFbGVtZW50OnJ1bGVzIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1NVTU1BUlksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAic3VtbWFyeSIsCisgICAgICAgICAgICAiSFRNTFRhYmxlRWxlbWVudDpz
dW1tYXJ5IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVFbGVtZW50
OnN1bW1hcnkiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgIkhUTUxUYWJsZUVs
ZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZUVs
ZW1lbnQ6d2lkdGgiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfaW5pdChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVO
VVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV90X2hlYWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxFbGVtZW50PiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3JlYXRlVEhlYWQoKSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2RlbGV0ZV90X2hlYWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7
CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5kZWxldGVUSGVhZCgpOworfQorCitXZWJLaXRET01IVE1MRWxlbWVudCog
d2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfY3JlYXRlX3RfZm9vdChXZWJLaXRET01IVE1M
VGFibGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jcmVhdGVURm9vdCgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3RfZm9vdChXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5U
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPmRlbGV0ZVRGb290KCk7Cit9CisKK1dlYktpdERPTUhUTUxF
bGVtZW50KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfdF9ib2R5KFdlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1M
RWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZVRCb2R5KCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV9j
YXB0aW9uKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpI
VE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpIVE1MRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNy
ZWF0ZUNhcHRpb24oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV9jYXB0
aW9uKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+ZGVsZXRlQ2FwdGlv
bigpOworfQorCitXZWJLaXRET01IVE1MRWxlbWVudCogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfaW5zZXJ0X3JvdyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBnbG9uZyBp
bmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9U
QUJMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SFRNTEVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5pbnNlcnRSb3coaW5kZXgsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9kZWxldGVfcm93KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGdsb25n
IGluZGV4LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJv
cik7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5kZWxl
dGVSb3coaW5kZXgsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfY2FwdGlvbihXZWJLaXRET01I
VE1MVGFibGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEFCTEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jYXB0aW9u
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2FwdGlvbihXZWJLaXRET01I
VE1MVGFibGVFbGVtZW50KiBzZWxmLCBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCog
dmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJM
RV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQodmFsdWUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFl
cnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50
KiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0Q2FwdGlvbihjb252ZXJ0ZWRWYWx1ZSwg
ZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19x
dWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUp
OworICAgIH0KK30KKworV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2hlYWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dEhlYWQoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90YWJsZV9lbGVtZW50X3NldF90X2hlYWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCog
c2VsZiwgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHZhbHVlLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9F
TEVNRU5UKHZhbHVlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7
CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogY29udmVydGVkVmFsdWUg
PSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGl0ZW0tPnNldFRIZWFkKGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitXZWJL
aXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfZ2V0X3RfZm9vdChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT50Rm9vdCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
c2V0X3RfZm9vdChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudCogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQodmFsdWUpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1M
VGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KiBjb252ZXJ0ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0VEZv
b3QoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTUhUTUxDb2xsZWN0aW9u
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93cyhXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yb3dzKCkpOworICAgIHJldHVybiBX
ZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb24qIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2JvZGllcyhXZWJLaXRE
T01IVE1MVGFibGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENv
bGxlY3Rpb24+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT50Qm9kaWVzKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVf
RUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6YWxpZ25BdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRN
TF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAg
ICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmJnY29sb3JBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdjb2xvckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKwor
Z2NoYXIqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9ib3JkZXIoV2ViS2l0RE9N
SFRNTFRhYmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RBQkxFX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OmJvcmRlckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9ib3JkZXIoV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ym9yZGVyQXR0ciwgY29udmVydGVkVmFsdWUpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxfcGFkZGluZyhX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxl
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y2VsbHBhZGRpbmdBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfY2VsbF9wYWRk
aW5nKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNlbGxwYWRkaW5nQXR0
ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X2NlbGxfc3BhY2luZyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2VsbHNwYWNpbmdB
dHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfZWxlbWVudF9zZXRfY2VsbF9zcGFjaW5nKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFC
TEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmNlbGxzcGFjaW5nQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2ZyYW1lKFdlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9F
TEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpmcmFtZUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X3NldF9mcmFtZShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RBQkxFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpmcmFtZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9ydWxlcyhXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cnVsZXNBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfZWxlbWVudF9zZXRfcnVsZXMoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCog
c2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9U
QUJMRV9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cnVsZXNBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfc3VtbWFyeShXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6c3VtbWFyeUF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X3NldF9zdW1tYXJ5KFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnN1bW1hcnlBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhT
dHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OndpZHRoQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3dpZHRoKFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NTI1Y2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQuaApAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURF
X18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9t
L3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5k
ZWYgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hU
TUxfVEFCTEVfRUxFTUVOVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVu
dF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVChvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfSFRNTF9UQUJMRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVf
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9FTEVNRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlRfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVf
RUxFTUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9IVE1MX1RBQkxFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRDbGFzcykpCisK
K3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVs
ZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVF
bGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
Z2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRf
Y3JlYXRlX3RfaGVhZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3Rh
YmxlX2VsZW1lbnRfY3JlYXRlX3RfaGVhZChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfdF9oZWFk
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3RfaGVhZChX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfdF9mb290OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktp
dERPTUhUTUxFbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTEVsZW1lbnQqCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfdF9mb290KFdlYktpdERPTUhUTUxU
YWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X2RlbGV0ZV90X2Zvb3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dAorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVu
dF9kZWxldGVfdF9mb290KFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV9jYXB0aW9uOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0
RE9NSFRNTEVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfY2Fw
dGlvbihXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfZWxlbWVudF9kZWxldGVfY2FwdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MVGFibGVFbGVtZW50CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV9jYXB0aW9uKFdlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2lu
c2VydF9yb3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQGlu
ZGV4OiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfaW5zZXJ0X3Jv
dyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV9y
b3c6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQGluZGV4OiBB
ICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV9yb3coV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfY2FwdGlvbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudAorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTUhUTUxUYWJsZUNhcHRpb25FbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfZ2V0X2NhcHRpb24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NhcHRpb246CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZhbHVlOiBBICNXZWJLaXRET01I
VE1MVGFibGVDYXB0aW9uRWxlbWVudAorICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9jYXB0aW9uKFdl
YktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIFdlYktpdERPTUhUTUxUYWJsZUNhcHRpb25F
bGVtZW50KiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90YWJsZV9lbGVtZW50X2dldF90X2hlYWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9N
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCoKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2hl
YWQoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3RfaGVhZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3RfaGVhZChXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50KiBzZWxmLCBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogdmFsdWUsIEdF
cnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9n
ZXRfdF9mb290OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9mb290KFdlYktpdERPTUhUTUxU
YWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X3NldF90X2Zvb3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAor
ICogQHZhbHVlOiBBICNXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICogQGVycm9y
OiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X3NldF90X2Zvb3QoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgV2Vi
S2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3M6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBmdWxsKTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01IVE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9y
b3dzKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF90X2JvZGllczoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGFibGVFbGVtZW50CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01IVE1MQ29sbGVjdGlvbgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxDb2xs
ZWN0aW9uKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3RfYm9kaWVzKFdlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVF
bGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVu
dF9zZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICog
QHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9nZXRfYmdfY29sb3I6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRh
YmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfc2V0X2JnX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2JnX2NvbG9yKFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfZ2V0X2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFi
bGVFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9ib3JkZXIoV2ViS2l0RE9NSFRN
TFRhYmxlRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2Vs
ZW1lbnRfc2V0X2JvcmRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X3NldF9ib3JkZXIoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVu
dCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfY2VsbF9wYWRkaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NlbGxfcGFkZGluZyhX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9zZXRfY2VsbF9wYWRkaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X2NlbGxfcGFkZGluZyhX
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisv
KioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3NwYWNpbmc6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxl
bWVudF9nZXRfY2VsbF9zcGFjaW5nKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9jZWxsX3NwYWNpbmc6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxl
bWVudF9zZXRfY2VsbF9zcGFjaW5nKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1l
bnRfZ2V0X3J1bGVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3J1bGVzKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9ydWxl
czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9l
bGVtZW50X3NldF9ydWxlcyhXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dl
dF9zdW1tYXJ5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3N1bW1hcnkoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3N1bW1h
cnk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZhbHVlOiBB
ICNnY2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9zZXRfc3VtbWFyeShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X2dldF93aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisgKgor
ICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9lbGVtZW50X2dldF93aWR0aChXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfd2lkdGg6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxl
bWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50UHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MVGFibGVFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmI1NWEwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50UHJpdmF0ZV9oCisjZGVm
aW5lIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTFRhYmxlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
VGFibGVFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudCogd3JhcEhUTUxUYWJsZUVsZW1lbnQoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudCop
OworV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1l
bnQqKTsKK1dlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRhYmxl
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MVGFibGVFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZUVs
ZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWU5ZDRmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAq
ICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBE
TyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnRVbnN0YWJsZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnRVbnN0YWJsZV9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtp
dGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoq
CisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9jcmVhdGVfdF9ib2R5OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX2VsZW1lbnRfY3JlYXRlX3RfYm9keShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfZnJh
bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudAorICoKKyAqIFJldHVy
bnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2ZyYW1lKFdlYktpdERP
TUhUTUxUYWJsZUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9lbGVtZW50X3NldF9mcmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVFbGVt
ZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9mcmFt
ZShXZWJLaXRET01IVE1MVGFibGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOwor
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkg
Ki8KKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVGFibGVFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlUm93
RWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMzllZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKQEAgLTAsMCAr
MSw0MTYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25Qcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTEVsZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01O
b2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxUYWJs
ZVJvd0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBvYmopCit7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChraXQoc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxl
bWVudCogY29yZShXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVu
dCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dl
YktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHdyYXBIVE1MVGFibGVSb3dFbGVtZW50KFdlYkNv
cmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9IVE1MX1RBQkxFX1JPV19FTEVNRU5ULCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2Rp
c3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50
KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVu
dCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVu
dEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90YWJsZV9y
b3dfZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBjb3JlVGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlUm93RWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVz
ZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0
KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRj
aF9ldmVudCA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9kaXNwYXRjaF9ldmVu
dDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxl
X3Jvd19lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3JlbW92ZV9ldmVu
dF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50LCBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9U
WVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX1JPV19JTkRFWCwKKyAgICBQUk9QX1NFQ1RJT05fUk9X
X0lOREVYLAorICAgIFBST1BfQ0VMTFMsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX0JHX0NP
TE9SLAorICAgIFBST1BfQ0gsCisgICAgUFJPUF9DSF9PRkYsCisgICAgUFJPUF9WX0FMSUdOLAor
fTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUYWJsZVJvd0Vs
ZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9BTElHTjoKKyAgICAg
ICAgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9hbGlnbihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JH
X0NPTE9SOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2Jn
X2NvbG9yKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQ0g6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxl
bWVudF9zZXRfY2goc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DSF9PRkY6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90YWJs
ZV9yb3dfZWxlbWVudF9zZXRfY2hfb2ZmKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVl9BTElHTjoKKyAgICAgICAgd2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF92X2FsaWduKHNlbGYsIGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYgPSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVf
Uk9XX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9ST1dfSU5ERVg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfcm93X2luZGV4KHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NFQ1RJT05fUk9XX0lOREVYOgorICAgICAgICBnX3Zh
bHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0
X3NlY3Rpb25fcm93X2luZGV4KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NFTExTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRt
bF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2VsbHMoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfYWxpZ24oc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQkdfQ09MT1I6CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfYmdfY29s
b3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0g6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVu
dF9nZXRfY2goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0hfT0ZGOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
cm93X2VsZW1lbnRfZ2V0X2NoX29mZihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9WX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3ZfYWxpZ24oc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2NsYXNz
X2luaXQoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfUk9XX0lOREVYLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9u
ZygKKyAgICAgICAgICAgICJyb3ctaW5kZXgiLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6cm93LWluZGV4IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgSFRNTFRhYmxl
Um93RWxlbWVudDpyb3ctaW5kZXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9TRUNUSU9OX1JPV19JTkRFWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAg
ICAgICAgICAic2VjdGlvbi1yb3ctaW5kZXgiLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6c2VjdGlvbi1yb3ctaW5kZXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBI
VE1MVGFibGVSb3dFbGVtZW50OnNlY3Rpb24tcm93LWluZGV4IiwKKyAgICAgICAgICAgIEdfTUlO
TE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQ0VMTFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
CisgICAgICAgICAgICAiY2VsbHMiLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0VsZW1lbnQ6
Y2VsbHMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiog
SFRNTFRhYmxlUm93RWxlbWVudDpjZWxscyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisg
ICAgICAgICAgICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxUYWJsZVJvd0VsZW1lbnQ6YWxp
Z24iLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZVJvd0VsZW1lbnQ6
YWxpZ24iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQkdfQ09MT1IsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiYmctY29sb3IiLAorICAgICAgICAgICAgIkhUTUxUYWJs
ZVJvd0VsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhU
TUxUYWJsZVJvd0VsZW1lbnQ6YmctY29sb3IiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0gsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2giLAorICAgICAgICAgICAg
IkhUTUxUYWJsZVJvd0VsZW1lbnQ6Y2giLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIq
IEhUTUxUYWJsZVJvd0VsZW1lbnQ6Y2giLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hfT0ZGLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNoLW9mZiIsCisgICAgICAg
ICAgICAiSFRNTFRhYmxlUm93RWxlbWVudDpjaC1vZmYiLAorICAgICAgICAgICAgInJlYWQtd3Jp
dGUgZ2NoYXIqIEhUTUxUYWJsZVJvd0VsZW1lbnQ6Y2gtb2ZmIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1ZfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidi1h
bGlnbiIsCisgICAgICAgICAgICAiSFRNTFRhYmxlUm93RWxlbWVudDp2LWFsaWduIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVSb3dFbGVtZW50OnYtYWxpZ24iLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2luaXQo
V2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdCk7Cit9CisKK1dlYktpdERPTUhUTUxFbGVtZW50KiB3ZWJraXRfZG9tX2h0bWxf
dGFibGVfcm93X2VsZW1lbnRfaW5zZXJ0X2NlbGwoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZiksIDApOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MRWxlbWVudD4gZ29i
amVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmluc2VydENlbGwoaW5kZXgsIGVjKSk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBl
Y2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAg
fQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZGVsZXRlX2NlbGwoV2ViS2l0RE9N
SFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5kZWxldGVDZWxsKGluZGV4LCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3Jv
d19pbmRleChXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+cm93SW5kZXgoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3NlY3Rpb25f
cm93X2luZGV4KFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zZWN0aW9uUm93SW5kZXgoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogd2Via2l0X2RvbV9odG1sX3Rh
YmxlX3Jvd19lbGVtZW50X2dldF9jZWxscyhXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2VsbHMoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmFsaWduQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2Rv
bV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVSb3dF
bGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9
CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2JnX2NvbG9y
KFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Ymdjb2xvckF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9z
ZXRfYmdfY29sb3IoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmJnY29sb3JBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1l
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxF
TUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y2hhckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxl
bWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9UQUJMRV9ST1dfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2NoX29mZihXZWJL
aXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmNoYXJvZmZBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2No
X29mZihXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVS
b3dFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hh
cm9mZkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9yb3dfZWxlbWVudF9nZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1F
TlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUYWJsZVJvd0VsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OnZhbGlnbkF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9k
b21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfdl9hbGlnbihXZWJLaXRET01IVE1MVGFibGVS
b3dFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVSb3dFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dmFsaWduQXR0ciwgY29udmVydGVkVmFsdWUp
OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFRhYmxlUm93RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3
ZGI5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQuaApAQCAt
MCwwICsxLDE5MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZp
bmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkK
KyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGly
ZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudF9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQgICAgICAg
ICAgICAod2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJM
RV9ST1dfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCkpCisjZGVmaW5lIFdF
QktJVF9ET01fSFRNTF9UQUJMRV9ST1dfRUxFTUVOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9ST1df
RUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfUk9XX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlRfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFC
TEVfUk9XX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQsIFdlYktpdERP
TUhUTUxUYWJsZVJvd0VsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxl
Um93RWxlbWVudCB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Q2xhc3MgeworICAgIFdl
YktpdERPTUhUTUxFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF90eXBlKHZvaWQpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9pbnNlcnRfY2VsbDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKiBAaW5kZXg6IEEg
I2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTUhUTUxFbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NSFRN
TEVsZW1lbnQqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfaW5zZXJ0X2NlbGwo
V2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZGVs
ZXRlX2NlbGw6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICog
QGluZGV4OiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9kZWxldGVfY2VsbChXZWJL
aXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmLCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfcm93
X2luZGV4OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0
bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3Jvd19pbmRleChXZWJLaXRET01IVE1MVGFibGVSb3dF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1l
bnRfZ2V0X3NlY3Rpb25fcm93X2luZGV4OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJs
ZVJvd0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGds
b25nCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3NlY3Rpb25fcm93X2lu
ZGV4KFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2VsbHM6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01I
VE1MQ29sbGVjdGlvbioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2Vs
bHMoV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRf
YWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2Jn
X2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9iZ19jb2xvcihXZWJLaXRET01IVE1MVGFibGVSb3dF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1l
bnRfc2V0X2JnX2NvbG9yOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9iZ19jb2xvcihXZWJLaXRET01IVE1MVGFi
bGVSb3dFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9nZXRfY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dF
QktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X2No
KFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFRhYmxlUm93RWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2NoKFdlYktp
dERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jaF9vZmY6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93
X2VsZW1lbnRfZ2V0X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfc2V0X2NoX29mZjoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9y
b3dfZWxlbWVudF9zZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3Jv
d19lbGVtZW50X2dldF92X2FsaWduOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVJv
d0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF92X2FsaWduKFdlYktpdERP
TUhUTUxUYWJsZVJvd0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9yb3dfZWxlbWVudF9zZXRfdl9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGFibGVSb3dFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfdl9hbGlnbihXZWJL
aXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudF9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNGIwYTZjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVu
dFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MVGFibGVSb3dFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUhUTUxUYWJsZVJvd0VsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01I
VE1MVGFibGVSb3dFbGVtZW50KiB3cmFwSFRNTFRhYmxlUm93RWxlbWVudChXZWJDb3JlOjpIVE1M
VGFibGVSb3dFbGVtZW50Kik7CitXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50KiBraXQoV2Vi
Q29yZTo6SFRNTFRhYmxlUm93RWxlbWVudCopOworV2ViQ29yZTo6SFRNTFRhYmxlUm93RWxlbWVu
dCogY29yZShXZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODU4M2M4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQuY3BwCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01I
VE1MQ29sbGVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9I
VE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+
KG9iaikpKTsKK30KKworV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiB3cmFwSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQoV2Vi
Q29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9F
TEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9TRUNUSU9OX0VM
RU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3Jl
RXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0
aW9uRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0
aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVu
ZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBH
Q2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpI
VE1MVGFibGVTZWN0aW9uRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29y
ZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2
ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5k
bGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90
YWJsZV9zZWN0aW9uX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50
VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIs
IGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9u
RWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdf
T0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVy
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0
RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50
ID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9kaXNwYXRjaF9ldmVudDsK
KyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX3Nl
Y3Rpb25fZWxlbWVudF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxl
bWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfRUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNF
KFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9BTElHTiwKKyAgICBQUk9QX0NI
LAorICAgIFBST1BfQ0hfT0ZGLAorICAgIFBST1BfVl9BTElHTiwKKyAgICBQUk9QX1JPV1MsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3Nl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVO
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0FM
SUdOOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF9h
bGlnbihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0NIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9l
bGVtZW50X3NldF9jaChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NIX09GRjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3Rh
YmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfY2hfb2ZmKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVl9BTElHTjoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfdl9hbGlnbihzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVy
dHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQUxJR046CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0
X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NIOgorICAgICAg
ICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlv
bl9lbGVtZW50X2dldF9jaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
SF9PRkY6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRt
bF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2NoX29mZihzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9WX0FMSUdOOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF92X2FsaWduKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JPV1M6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVu
dF9nZXRfcm93cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1l
bnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfQUxJR04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAg
ICAiYWxpZ24iLAorICAgICAgICAgICAgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OmFsaWduIiwK
KyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDph
bGlnbiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJjaCIsCisgICAgICAgICAgICAiSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQ6Y2giLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50OmNoIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NIX09GRiwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX3N0cmluZygKKyAgICAgICAgICAgICJjaC1vZmYiLAorICAgICAgICAgICAgIkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OmNoLW9mZiIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciog
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Y2gtb2ZmIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZfQUxJ
R04sCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidi1hbGlnbiIs
CisgICAgICAgICAgICAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6di1hbGlnbiIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6di1hbGlnbiIs
CisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9ST1dTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgInJvd3MiLAorICAgICAgICAgICAgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
OnJvd3MiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiog
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6cm93cyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9DT0xMRUNUSU9OLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVu
dF9pbml0KFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiByZXF1ZXN0KQoreworICAg
IFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworV2ViS2l0RE9NSFRNTEVsZW1lbnQqIHdlYmtp
dF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfaW5zZXJ0X3JvdyhXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7
CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkhUTUxFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+
aW5zZXJ0Um93KGluZGV4LCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2Mu
Y29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25f
ZWxlbWVudF9kZWxldGVfcm93KFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxm
LCBnbG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgaXRlbS0+ZGVsZXRlUm93KGluZGV4LCBlYyk7CisgICAgaWYgKGVjKSB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfYWxpZ24oV2ViS2l0RE9N
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1l
bnRfc2V0X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJ
T05fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
dmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjphbGlnbkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2NoKFdlYktpdERPTUhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
VGFibGVTZWN0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhckF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
c2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxF
TUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6
SFRNTE5hbWVzOjpjaGFyQXR0ciwgY29udmVydGVkVmFsdWUpOworfQorCitnY2hhciogd2Via2l0
X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfY2hfb2ZmKFdlYktpdERPTUhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y2hhcm9mZkF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRf
c2V0X2NoX29mZihXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9O
X0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y2hhcm9mZkF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3ZfYWxpZ24oV2ViS2l0
RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWxpZ25BdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9l
bGVtZW50X3NldF92X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X1NFQ1RJT05fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjp2YWxpZ25BdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisK
K1dlYktpdERPTUhUTUxDb2xsZWN0aW9uKiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9l
bGVtZW50X2dldF9yb3dzKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yb3dzKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjA3ZjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKQEAgLTAsMCArMSwxNTYgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9I
X0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdl
YmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgor
CisjaWZuZGVmIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50X2gKKyNkZWZpbmUgV2Vi
S2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UICAgICAgICAgICAg
KHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9U
QUJMRV9TRUNUSU9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9TRUNUSU9OX0VMRU1F
TlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9TRUNUSU9O
X0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEFCTEVfU0VDVElPTl9FTEVNRU5U
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBhcmVudF9pbnN0YW5jZTsKK307
CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRDbGFzcyB7CisgICAg
V2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF90eXBlKHZv
aWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfaW5z
ZXJ0X3JvdzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAor
ICogQGluZGV4OiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRWxlbWVudAorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTUhUTUxFbGVtZW50Kgord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxl
bWVudF9pbnNlcnRfcm93KFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmLCBn
bG9uZyBpbmRleCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
YWJsZV9zZWN0aW9uX2VsZW1lbnRfZGVsZXRlX3JvdzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudAorICogQGluZGV4OiBBICNnbG9uZworICogQGVycm9yOiAj
R0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9z
ZWN0aW9uX2VsZW1lbnRfZGVsZXRlX3JvdyhXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCogc2VsZiwgZ2xvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9hbGlnbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9l
bGVtZW50X2dldF9hbGlnbihXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfYWxp
Z246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqIEB2
YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVu
dF9nZXRfY2goV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0X2NoOgorICogQHNl
bGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0
aW9uX2VsZW1lbnRfc2V0X2NoKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90YWJsZV9z
ZWN0aW9uX2VsZW1lbnRfZ2V0X2NoX29mZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9jaF9v
ZmYoV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0X2NoX29mZjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hh
cgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlv
bl9lbGVtZW50X3NldF9jaF9vZmYoV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RhYmxl
X3NlY3Rpb25fZWxlbWVudF9nZXRfdl9hbGlnbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1M
VGFibGVTZWN0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF92
X2FsaWduKFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X3NldF92X2FsaWduOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgKiBAdmFsdWU6IEEg
I2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9z
ZWN0aW9uX2VsZW1lbnRfc2V0X3ZfYWxpZ24oV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfcm93czoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudAorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24KKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1M
Q29sbGVjdGlvbioKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3Jv
d3MoV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqIHNlbGYpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjI0ZTA1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudFByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudFByaXZhdGVfaAor
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiB3cmFwSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQqKTsKK1dl
YktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBraXQoV2ViQ29yZTo6SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBjb3JlKFdl
YktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50UHJpdmF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmVh
NzIxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAg
LTAsMCArMSwxMDUwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC5oIgor
CisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3Rh
dGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxGb3JtRWxlbWVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRv
VVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRVbnN0
YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBr
aXQoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJL
SVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5v
ZGUqPihvYmopKSk7Cit9CisKK1dlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGNvcmUoV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVz
dCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiB3cmFwSFRNTFRleHRBcmVhRWxlbWVudChXZWJDb3JlOjpIVE1MVGV4dEFy
ZWFFbGVtZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfSFRNTF9URVhUX0FSRUFfRUxFTUVOVCwgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNv
cmUoZXZlbnQpOworICAgIGlmICghY29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygq
Y29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRp
b24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfYWRk
X2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7Cisg
ICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUs
IGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdl
YktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVu
dFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAgaWZhY2Ut
PmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9h
ZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9
CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQs
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxf
RUxFTUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJH
RVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAs
CisgICAgUFJPUF9BVVRPRk9DVVMsCisgICAgUFJPUF9ESVJfTkFNRSwKKyAgICBQUk9QX0RJU0FC
TEVELAorICAgIFBST1BfRk9STSwKKyAgICBQUk9QX01BWF9MRU5HVEgsCisgICAgUFJPUF9OQU1F
LAorICAgIFBST1BfUExBQ0VIT0xERVIsCisgICAgUFJPUF9SRUFEX09OTFksCisgICAgUFJPUF9S
RVFVSVJFRCwKKyAgICBQUk9QX1JPV1MsCisgICAgUFJPUF9DT0xTLAorICAgIFBST1BfV1JBUCwK
KyAgICBQUk9QX1RZUEUsCisgICAgUFJPUF9ERUZBVUxUX1ZBTFVFLAorICAgIFBST1BfVkFMVUUs
CisgICAgUFJPUF9URVhUX0xFTkdUSCwKKyAgICBQUk9QX1dJTExfVkFMSURBVEUsCisgICAgUFJP
UF9WQUxJRElUWSwKKyAgICBQUk9QX1ZBTElEQVRJT05fTUVTU0FHRSwKKyAgICBQUk9QX0xBQkVM
UywKKyAgICBQUk9QX1NFTEVDVElPTl9TVEFSVCwKKyAgICBQUk9QX1NFTEVDVElPTl9FTkQsCisg
ICAgUFJPUF9TRUxFQ1RJT05fRElSRUNUSU9OLAorICAgIFBST1BfQVVUT0NPUlJFQ1QsCisgICAg
UFJPUF9BVVRPQ0FQSVRBTElaRSwKKyAgICBQUk9QX0FVVE9DT01QTEVURSwKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
ID0gV0VCS0lUX0RPTV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQVVUT0ZPQ1VTOgorICAgICAgICB3ZWJr
aXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhzZWxmLCBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVJf
TkFNRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kaXJf
bmFtZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0RJU0FCTEVEOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfc2V0X2Rpc2FibGVkKHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9MRU5HVEg6CisgICAgICAgIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfbWF4X2xlbmd0aChzZWxmLCBnX3ZhbHVl
X2dldF9sb25nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9OQU1FOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X25h
bWUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9QTEFDRUhPTERFUjoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X3NldF9wbGFjZWhvbGRlcihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFQURfT05MWToKKyAgICAgICAgd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yZWFkX29ubHkoc2VsZiwgZ192YWx1
ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVR
VUlSRUQ6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcmVx
dWlyZWQoc2VsZiwgZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfUk9XUzoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X3NldF9yb3dzKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTFM6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfY29scyhzZWxmLCBnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XUkFQOgorICAgICAgICB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3dyYXAoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUZBVUxUX1ZBTFVFOgorICAg
ICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2RlZmF1bHRfdmFsdWUo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9WQUxVRToKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NldF92YWx1ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVElPTl9TVEFSVDoKKyAgICAgICAgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fc3RhcnQoc2VsZiwgZ192YWx1ZV9n
ZXRfbG9uZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNUSU9O
X0VORDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxl
Y3Rpb25fZW5kKHNlbGYsIGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1NFTEVDVElPTl9ESVJFQ1RJT046CisgICAgICAgIHdlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfc2VsZWN0aW9uX2RpcmVjdGlvbihzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FV
VE9DT1JSRUNUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0
X2F1dG9jb3JyZWN0KHNlbGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0FVVE9DQVBJVEFMSVpFOgorICAgICAgICB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplKHNlbGYsIGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NP
TVBMRVRFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1
dG9jb21wbGV0ZShzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQVVUT0ZPQ1VTOgorICAgICAgICBn
X3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X2F1dG9mb2N1cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9E
SVJfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kaXJfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9ESVNBQkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kaXNhYmxlZChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GT1JNOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRf
Zm9ybShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfTEVOR1RIOgor
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfZ2V0X21heF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9uYW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1BMQUNFSE9MREVSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3BsYWNlaG9sZGVy
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1JFQURfT05MWToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2dldF9yZWFkX29ubHkoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfUkVRVUlSRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcmVxdWlyZWQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfUk9XUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yb3dzKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTFM6CisgICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfY29scyhzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XUkFQOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X3dyYXAoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAg
ICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2dldF9hcmVhX3R5cGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfREVGQVVMVF9WQUxVRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTFVFOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Zh
bHVlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RFWFRfTEVOR1RIOgor
ICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2dldF90ZXh0X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSUxMX1ZBTElEQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSURJVFk6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2dldF92YWxpZGl0eShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WQUxJ
REFUSU9OX01FU1NBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMUzoKKyAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X2xhYmVscyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RJT05f
U1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9uX3N0YXJ0KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NFTEVDVElPTl9FTkQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfc2VsZWN0aW9u
X2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUxFQ1RJT05fRElS
RUNUSU9OOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9kaXJlY3Rpb24oc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NPUlJFQ1Q6CisgICAgICAgIGdfdmFsdWVf
c2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRf
YXV0b2NvcnJlY3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NB
UElUQUxJWkU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0b2NhcGl0YWxpemUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQVVUT0NPTVBMRVRFOgorICAgICAgICBnX3ZhbHVlX3Rh
a2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2F1
dG9jb21wbGV0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfY2xhc3NfaW5pdChXZWJLaXRET01IVE1MVGV4dEFyZWFF
bGVtZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5z
ZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3Byb3Bl
cnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPRk9D
VVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImF1dG9mb2N1
cyIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDphdXRvZm9jdXMiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFRleHRBcmVhRWxlbWVudDphdXRvZm9jdXMi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElSX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiZGlyLW5hbWUiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJl
YUVsZW1lbnQ6ZGlyLW5hbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxU
ZXh0QXJlYUVsZW1lbnQ6ZGlyLW5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTQUJMRUQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImRpc2FibGVkIiwKKyAg
ICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmRpc2FibGVkIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdib29sZWFuIEhUTUxUZXh0QXJlYUVsZW1lbnQ6ZGlzYWJsZWQiLAorICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRk9STSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJmb3JtIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmZvcm0iLAor
ICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqIEhUTUxUZXh0
QXJlYUVsZW1lbnQ6Zm9ybSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JN
X0VMRU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9NQVhfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAg
ICAgICAgICJtYXgtbGVuZ3RoIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50Om1h
eC1sZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2xvbmcgSFRNTFRleHRBcmVhRWxl
bWVudDptYXgtbGVuZ3RoIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibmFtZSIs
CisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpuYW1lIiwKKyAgICAgICAgICAgICJy
ZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50Om5hbWUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfUExBQ0VIT0xERVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAg
ICAgICAicGxhY2Vob2xkZXIiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6cGxh
Y2Vob2xkZXIiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6cGxhY2Vob2xkZXIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVBRF9PTkxZLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJyZWFkLW9ubHkiLAorICAgICAg
ICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6cmVhZC1vbmx5IiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdib29sZWFuIEhUTUxUZXh0QXJlYUVsZW1lbnQ6cmVhZC1vbmx5IiwKKyAgICAgICAg
ICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1JFUVVJUkVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAg
ICAgICAgICAgICJyZXF1aXJlZCIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpy
ZXF1aXJlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MVGV4dEFyZWFF
bGVtZW50OnJlcXVpcmVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JPV1MsCisgICAgICAgIGdf
cGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInJvd3MiLAorICAgICAgICAgICAgIkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6cm93cyIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1M
VGV4dEFyZWFFbGVtZW50OnJvd3MiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ09MUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiY29s
cyIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpjb2xzIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdsb25nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6Y29scyIsCisgICAgICAgICAg
ICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XUkFQLAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgIndyYXAiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVs
ZW1lbnQ6d3JhcCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRleHRBcmVh
RWxlbWVudDp3cmFwIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiSFRNTFRleHRB
cmVhRWxlbWVudDp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIEhUTUxUZXh0
QXJlYUVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RFRkFVTFRfVkFMVUUsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGVmYXVsdC12YWx1ZSIsCisg
ICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDpkZWZhdWx0LXZhbHVlIiwKKyAgICAgICAg
ICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGV4dEFyZWFFbGVtZW50OmRlZmF1bHQtdmFsdWUi
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfVkFMVUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAidmFsdWUiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6
dmFsdWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6dmFsdWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEVYVF9MRU5HVEgsCisgICAgICAgIGdfcGFy
YW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJ0ZXh0LWxlbmd0aCIsCisgICAgICAgICAgICAi
SFRNTFRleHRBcmVhRWxlbWVudDp0ZXh0LWxlbmd0aCIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGd1bG9uZyBIVE1MVGV4dEFyZWFFbGVtZW50OnRleHQtbGVuZ3RoIiwKKyAgICAgICAgICAgIDAs
IEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9XSUxMX1ZBTElEQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICJ3aWxsLXZhbGlkYXRlIiwKKyAgICAgICAgICAgICJIVE1MVGV4
dEFyZWFFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9v
bGVhbiBIVE1MVGV4dEFyZWFFbGVtZW50OndpbGwtdmFsaWRhdGUiLAorICAgICAgICAgICAgRkFM
U0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9WQUxJRElUWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAg
ICJ2YWxpZGl0eSIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudDp2YWxpZGl0eSIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIEhUTUxUZXh0
QXJlYUVsZW1lbnQ6dmFsaWRpdHkiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1ZBTElE
SVRZX1NUQVRFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfVkFMSURBVElPTl9NRVNTQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgInZhbGlkYXRpb24tbWVzc2FnZSIsCisgICAgICAgICAgICAiSFRN
TFRleHRBcmVhRWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogSFRNTFRleHRBcmVhRWxlbWVudDp2YWxpZGF0aW9uLW1lc3NhZ2UiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9MQUJFTFMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAg
ICAgICAgICAibGFiZWxzIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmxhYmVs
cyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGVMaXN0KiBIVE1MVGV4dEFy
ZWFFbGVtZW50OmxhYmVscyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNU
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfU0VMRUNUSU9OX1NUQVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAg
ICAgICJzZWxlY3Rpb24tc3RhcnQiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVsZW1lbnQ6
c2VsZWN0aW9uLXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdsb25nIEhUTUxUZXh0
QXJlYUVsZW1lbnQ6c2VsZWN0aW9uLXN0YXJ0IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19N
QVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NFTEVDVElPTl9FTkQsCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgInNlbGVjdGlvbi1lbmQiLAorICAgICAgICAgICAgIkhUTUxUZXh0QXJlYUVs
ZW1lbnQ6c2VsZWN0aW9uLWVuZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnbG9uZyBIVE1M
VGV4dEFyZWFFbGVtZW50OnNlbGVjdGlvbi1lbmQiLAorICAgICAgICAgICAgR19NSU5MT05HLCBH
X01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfU0VMRUNUSU9OX0RJUkVDVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJzZWxlY3Rpb24tZGlyZWN0aW9uIiwKKyAgICAgICAgICAg
ICJIVE1MVGV4dEFyZWFFbGVtZW50OnNlbGVjdGlvbi1kaXJlY3Rpb24iLAorICAgICAgICAgICAg
InJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxUZXh0QXJlYUVsZW1lbnQ6c2VsZWN0aW9uLWRpcmVjdGlv
biIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPQ09SUkVDVCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oCisgICAgICAgICAgICAiYXV0b2NvcnJlY3QiLAorICAgICAgICAgICAgIkhUTUxU
ZXh0QXJlYUVsZW1lbnQ6YXV0b2NvcnJlY3QiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jv
b2xlYW4gSFRNTFRleHRBcmVhRWxlbWVudDphdXRvY29ycmVjdCIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9BVVRPQ0FQSVRBTElaRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJhdXRvY2FwaXRhbGl6ZSIsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVu
dDphdXRvY2FwaXRhbGl6ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRl
eHRBcmVhRWxlbWVudDphdXRvY2FwaXRhbGl6ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVVRPQ09N
UExFVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiYXV0b2Nv
bXBsZXRlIiwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50OmF1dG9jb21wbGV0ZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogSFRNTFRleHRBcmVhRWxlbWVudDphdXRv
Y29tcGxldGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2luaXQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogcmVxdWVzdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9jaGVja192YWxpZGl0eShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VM
RU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmNo
ZWNrVmFsaWRpdHkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfY3VzdG9tX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiBlcnJvcikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkRXJyb3IgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoZXJyb3IpOworICAgIGl0ZW0tPnNldEN1c3RvbVZhbGlkaXR5KGNv
bnZlcnRlZEVycm9yKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfc2VsZWN0KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNlbGVjdCgpOworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9zZXRfcmFuZ2VfdGV4dChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25z
dCBnY2hhciogcmVwbGFjZW1lbnQsIGd1bG9uZyBzdGFydCwgZ3Vsb25nIGVuZCwgY29uc3QgZ2No
YXIqIHNlbGVjdGlvbk1vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChy
ZXBsYWNlbWVudCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxlY3Rpb25Nb2RlKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFJlcGxhY2VtZW50ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHJlcGxhY2VtZW50
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRTZWxlY3Rpb25Nb2RlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHNlbGVjdGlvbk1vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPnNldFJhbmdlVGV4dChjb252ZXJ0ZWRSZXBsYWNlbWVudCwgc3RhcnQs
IGVuZCwgY29udmVydGVkU2VsZWN0aW9uTW9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9yYW5nZShXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9uZyBzdGFydCwgZ2xvbmcgZW5kLCBjb25zdCBn
Y2hhciogZGlyZWN0aW9uKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChkaXJlY3Rpb24pOworICAgIFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkRGlyZWN0aW9uID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KGRpcmVjdGlvbik7CisgICAgaXRlbS0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCwgY29u
dmVydGVkRGlyZWN0aW9uKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2dldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNl
bGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6YXV0b2ZvY3VzQXR0
cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfc2V0X2F1dG9mb2N1cyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9B
UkVBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmF1dG9mb2N1c0F0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGlyX25hbWUoV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpkaXJuYW1lQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kaXJfbmFtZShX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6ZGlybmFtZUF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X2dldF9kaXNhYmxlZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpkaXNhYmxlZEF0
dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X3NldF9kaXNhYmxlZChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9B
UkVBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmRpc2FibGVkQXR0ciwgdmFsdWUpOworfQorCitXZWJLaXRET01I
VE1MRm9ybUVsZW1lbnQqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZm9y
bShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRy
KGl0ZW0tPmZvcm0oKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X21h
eF9sZW5ndGgoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPm1heExlbmd0aEZvckJpbmRpbmdzKCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X21heF9sZW5ndGgoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2xvbmcg
dmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhU
X0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvcik7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVt
LT5zZXRNYXhMZW5ndGhGb3JCaW5kaW5ncyh2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqIHdl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbmFtZShXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVY
VF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0TmFtZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfbmFt
ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6bmFtZUF0
dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90ZXh0X2Fy
ZWFfZWxlbWVudF9nZXRfcGxhY2Vob2xkZXIoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpwbGFjZWhvbGRlckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcGxhY2Vob2xkZXIoV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnBsYWNlaG9sZGVyQXR0ciwgY29u
dmVydGVkVmFsdWUpOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X3JlYWRfb25seShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWFkb25seUF0dHIpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X3NldF9yZWFkX29ubHkoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwg
Z2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9F
TEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWFkb25seUF0dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9yZXF1aXJlZChXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVY
VF9BUkVBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9
IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZXF1aXJlZEF0dHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yZXF1aXJlZChXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9N
X0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0
QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9v
bGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlcXVpcmVkQXR0ciwgdmFsdWUpOwor
fQorCitnbG9uZyB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Jvd3MoV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1M
VGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJl
c3VsdCA9IGl0ZW0tPnJvd3MoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfcm93cyhXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hU
TUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Um93cyh2YWx1
ZSk7Cit9CisKK2dsb25nIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfY29s
cyhXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xv
bmcgcmVzdWx0ID0gaXRlbS0+Y29scygpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9jb2xzKFdlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRDb2xz
KHZhbHVlKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfd3JhcChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OndyYXBBdHRyKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfc2V0X3dyYXAoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVO
VChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRN
TFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAg
aXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OndyYXBBdHRyLCBjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2FyZWFfdHlwZShXZWJLaXRET01IVE1MVGV4dEFyZWFF
bGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVB
X0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+dHlwZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciog
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9kZWZhdWx0X3ZhbHVlKFdlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRl
eHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5kZWZhdWx0VmFsdWUoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFf
RUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0RGVmYXVsdFZhbHVlKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2NoYXIq
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1M
X1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZhbHVlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF92YWx1ZShXZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRWYWx1ZShj
b252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X3RleHRfbGVuZ3RoKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYp
Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+dGV4dExlbmd0aCgpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndpbGxWYWxp
ZGF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTVZhbGlkaXR5U3RhdGUq
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRpdHkoV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19I
VE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFy
ZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpWYWxpZGl0eVN0YXRlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dmFsaWRp
dHkoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWxpZGF0aW9u
X21lc3NhZ2UoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZhbGlkYXRpb25N
ZXNzYWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2xhYmVscyhXZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEVYVF9BUkVBX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5v
ZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bGFiZWxzKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2xvbmcgd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9zZWxlY3Rpb25fc3RhcnQoV2ViS2l0
RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3Vs
dCA9IGl0ZW0tPnNlbGVjdGlvblN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9zdGFydChX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNv
cmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+c2V0U2VsZWN0aW9uU3RhcnQodmFsdWUpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9lbmQoV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRf
QVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnNl
bGVjdGlvbkVuZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZW5kKFdlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnQqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVh
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTZWxlY3Rp
b25FbmQodmFsdWUpOworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVt
ZW50X2dldF9zZWxlY3Rpb25fZGlyZWN0aW9uKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5zZWxlY3Rpb25EaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9kaXJl
Y3Rpb24oV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxm
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRB
cmVhRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0U2VsZWN0aW9uRGlyZWN0aW9uKGNvbnZlcnRlZFZhbHVlKTsKK30KKworZ2Jvb2xlYW4gd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvY29ycmVjdChXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShJT1NfQVVUT0NPUlJFQ1Rf
QU5EX0FVVE9DQVBJVEFMSVpFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9B
UkVBX0VMRU1FTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0
ZW0tPmF1dG9jb3JyZWN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIklvcyBB
dXRvY29ycmVjdCBBbmQgQXV0b2NhcGl0YWxpemUiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
Ym9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRfQVVUT0NB
UElUQUxJWkUpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NldF9hdXRvY29ycmVjdChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnYm9v
bGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRB
TElaRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQoc2VsZikp
OworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0QXV0b2NvcnJlY3QodmFsdWUpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1dG9jYXBpdGFsaXpl
IikKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkg
Ki8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfYXV0
b2NhcGl0YWxpemUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZikKK3sKKyNpZiBF
TkFCTEUoSU9TX0FVVE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpIVE1MVGV4dEFyZWFFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdj
aGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF1dG9jYXBpdGFsaXplKCkp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJJb3MgQXV0b2NvcnJlY3QgQW5kIEF1
dG9jYXBpdGFsaXplIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoSU9TX0FVVE9D
T1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
dGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoSU9TX0FV
VE9DT1JSRUNUX0FORF9BVVRPQ0FQSVRBTElaRSkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VEVYVF9BUkVBX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF1dG9jYXBpdGFsaXplKGNvbnZlcnRlZFZhbHVlKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiSW9zIEF1dG9jb3JyZWN0IEFu
ZCBBdXRvY2FwaXRhbGl6ZSIpCisjZW5kaWYgLyogRU5BQkxFKElPU19BVVRPQ09SUkVDVF9BTkRf
QVVUT0NBUElUQUxJWkUpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfZ2V0X2F1dG9jb21wbGV0ZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+YXV0b2NvbXBsZXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvY29tcGxldGUoV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfSFRNTF9URVhUX0FSRUFfRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXV0b2NvbXBsZXRl
KGNvbnZlcnRlZFZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iNjE5OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50LmgKQEAgLTAsMCArMSwyODAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTUhUTUxU
ZXh0QXJlYUVsZW1lbnRfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50X2gK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUhUTUxFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1MX1RFWFRfQVJF
QV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlRfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBF
X0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9I
VE1MX1RFWFRfQVJFQV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19IVE1MX1RFWFRf
QVJFQV9FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1RFWFRfQVJFQV9F
TEVNRU5ULCBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxFbGVtZW50IHBh
cmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dENsYXNzIHsKKyAgICBXZWJLaXRET01IVE1MRWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfc2VsZWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X3NlbGVjdChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9yYW5nZToKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAc3RhcnQ6IEEgI2ds
b25nCisgKiBAZW5kOiBBICNnbG9uZworICogQGRpcmVjdGlvbjogQSAjZ2NoYXIKKyAqCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9z
ZWxlY3Rpb25fcmFuZ2UoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2xvbmcg
c3RhcnQsIGdsb25nIGVuZCwgY29uc3QgZ2NoYXIqIGRpcmVjdGlvbik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvZm9jdXM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9nZXRfYXV0b2ZvY3VzKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2Zv
Y3VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvZm9jdXMoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRN
TFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGlz
YWJsZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kaXNhYmxlZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgZ2Jvb2xl
YW4gdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfZm9ybToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01IVE1MRm9ybUVsZW1lbnQqCit3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Zvcm0oV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dl
dF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9uYW1lKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9z
ZXRfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBA
dmFsdWU6IEEgI2djaGFyCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRt
bF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfbmFtZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90
ZXh0X2FyZWFfZWxlbWVudF9nZXRfcmVhZF9vbmx5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3Jl
YWRfb25seShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3JlYWRfb25seToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFu
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9zZXRfcmVhZF9vbmx5KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdi
b29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfZ2V0X3Jvd3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcm93cyhXZWJLaXRET01IVE1MVGV4dEFyZWFF
bGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1l
bnRfc2V0X3Jvd3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAor
ICogQHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3Jvd3MoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudCogc2VsZiwgZ2xvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfY29sczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9u
Zword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9jb2xzKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfY29sczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfY29scyhXZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hcmVhX3R5cGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X2FyZWFfdHlwZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3Nl
dF9kZWZhdWx0X3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVlKFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF92YWx1ZToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9nZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF92YWx1ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisg
KgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVu
dF9zZXRfdmFsdWUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
Z2V0X3dpbGxfdmFsaWRhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfd2lsbF92YWxpZGF0ZShX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3NlbGVjdGlvbl9zdGFydDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcK
KyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2dldF9zZWxlY3Rpb25fc3RhcnQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rp
b25fc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICog
QHZhbHVlOiBBICNnbG9uZworICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9zdGFydChXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9zZWxlY3Rpb25fZW5kOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiov
CitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X3NlbGVjdGlvbl9lbmQoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZW5k
OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTog
QSAjZ2xvbmcKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X3NldF9zZWxlY3Rpb25fZW5kKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQqIHNlbGYsIGdsb25nIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NmVhMzYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFRleHRBcmVhRWxlbWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogd3JhcEhUTUxU
ZXh0QXJlYUVsZW1lbnQoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudCopOworV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqKTsK
K1dlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRNTFRleHRBcmVh
RWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUZXh0
QXJlYUVsZW1lbnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50VW5zdGFibGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2VlNWEyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDMw
MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01I
VE1MVGV4dEFyZWFFbGVtZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
CisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50
X2NoZWNrX3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1l
bnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9l
bGVtZW50X2NoZWNrX3ZhbGlkaXR5KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfY3VzdG9t
X3ZhbGlkaXR5OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAq
IEBlcnJvcjogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9jdXN0b21f
dmFsaWRpdHkoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0
X3JhbmdlX3RleHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAor
ICogQHJlcGxhY2VtZW50OiBBICNnY2hhcgorICogQHN0YXJ0OiBBICNndWxvbmcKKyAqIEBlbmQ6
IEEgI2d1bG9uZworICogQHNlbGVjdGlvbk1vZGU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yYW5nZV90ZXh0KFdlYktpdERPTUhU
TUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiByZXBsYWNlbWVudCwgZ3Vsb25n
IHN0YXJ0LCBndWxvbmcgZW5kLCBjb25zdCBnY2hhciogc2VsZWN0aW9uTW9kZSwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRf
ZGlyX25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9k
aXJfbmFtZShXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2Rpcl9uYW1lOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kaXJfbmFtZShXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbWF4X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbWF4X2xlbmd0aChXZWJLaXRET01IVE1MVGV4
dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVh
X2VsZW1lbnRfc2V0X21heF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRB
cmVhRWxlbWVudAorICogQHZhbHVlOiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
aHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfbWF4X2xlbmd0aChXZWJLaXRET01IVE1MVGV4dEFy
ZWFFbGVtZW50KiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcGxhY2Vob2xkZXI6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9wbGFjZWhvbGRlcihXZWJL
aXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3BsYWNlaG9sZGVyOgorICogQHNlbGY6IEEgI1dlYktp
dERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3Rl
eHRfYXJlYV9lbGVtZW50X3NldF9wbGFjZWhvbGRlcihXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVt
ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRt
bF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcmVxdWlyZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9zZXRfcmVxdWlyZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxl
bWVudAorICogQHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X3JlcXVpcmVkKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGdib29sZWFu
IHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0
X3dyYXA6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF93cmFw
KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfd3JhcDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVGV4dEFyZWFFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfd3JhcChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2Fy
ZWFfZWxlbWVudF9nZXRfdGV4dF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRl
eHRBcmVhRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9nZXRfdGV4dF9sZW5ndGgoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dl
dF92YWxpZGl0eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50Cisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRl
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVZh
bGlkaXR5U3RhdGUqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3ZhbGlk
aXR5KFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNzYWdlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBB
ICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hh
cioKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdmFsaWRhdGlvbl9tZXNz
YWdlKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbGFiZWxzOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVs
bCk6IEEgI1dlYktpdERPTU5vZGVMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV9odG1sX3RleHRfYXJl
YV9lbGVtZW50X2dldF9sYWJlbHMoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9zZWxlY3Rp
b25fZGlyZWN0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9n
ZXRfc2VsZWN0aW9uX2RpcmVjdGlvbihXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVj
dGlvbl9kaXJlY3Rpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3Nl
bGVjdGlvbl9kaXJlY3Rpb24oV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X2F1dG9jb3JyZWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJl
YUVsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3RleHRf
YXJlYV9lbGVtZW50X2dldF9hdXRvY29ycmVjdChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0
X2F1dG9jb3JyZWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQK
KyAqIEB2YWx1ZTogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9h
dXRvY29ycmVjdChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9h
dXRvY2FwaXRhbGl6ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
Z2V0X2F1dG9jYXBpdGFsaXplKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9zZXRfYXV0b2NhcGl0
YWxpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZh
bHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jYXBpdGFs
aXplKFdlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRv
Y29tcGxldGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICoK
KyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9h
dXRvY29tcGxldGUoV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9hdXRvY29tcGxldGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudAorICogQHZhbHVlOiBBICNn
Y2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X2F1dG9jb21wbGV0ZShXZWJLaXRE
T01IVE1MVGV4dEFyZWFFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50VW5zdGFibGVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3YTllOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NT
U0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdP
YmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTUhUTUxUaXRsZUVsZW1l
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50KiBraXQoV2ViQ29yZTo6
SFRNTFRpdGxlRWxlbWVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVElU
TEVfRUxFTUVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKwor
V2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudCogY29yZShXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50
KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
SFRNTFRpdGxlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Cit9CisKK1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIHdyYXBIVE1MVGl0bGVFbGVt
ZW50KFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJU
KGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVChn
X29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfVElUTEVfRUxFTUVOVCwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X2Rpc3BhdGNo
X2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVu
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdl
YktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdl
dCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdz
KCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3Jf
bGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlw
dGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X2FkZF9l
dmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBl
dmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAg
IFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MVGl0bGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9i
amVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50
TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVy
LCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF90aXRs
ZV9lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFy
Z2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1
c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX2h0bWxfdGl0bGVf
ZWxlbWVudF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlm
YWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVu
dF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdl
YktpdERPTUhUTUxUaXRsZUVsZW1lbnQsIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50LCBX
RUJLSVRfRE9NX1RZUEVfSFRNTF9FTEVNRU5ULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lU
X0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisK
K2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1RFWFQsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50KiBzZWxmID0gV0VCS0lUX0RPTV9I
VE1MX1RJVExFX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgewor
ICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVu
dF9zZXRfdGV4dChzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X2dldF9wcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIHNlbGYgPSBX
RUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJp
bmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X2dldF90ZXh0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50
X2NsYXNzX2luaXQoV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudENsYXNzKiByZXF1ZXN0Q2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1
ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9o
dG1sX3RpdGxlX2VsZW1lbnRfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1RFWFQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAidGV4dCIsCisgICAgICAgICAgICAiSFRNTFRpdGxlRWxlbWVudDp0ZXh0IiwKKyAg
ICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBIVE1MVGl0bGVFbGVtZW50OnRleHQiLAorICAg
ICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfaW5pdChXZWJLaXRE
T01IVE1MVGl0bGVFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X2dldF90ZXh0KFdl
YktpdERPTUhUTUxUaXRsZUVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9USVRMRV9FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVGl0bGVF
bGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnRleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9zZXRfdGV4dChXZWJLaXRET01I
VE1MVGl0bGVFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodmFsdWUpOworICAgIFdlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFRleHQoY29udmVydGVkVmFsdWUpOwor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFRpdGxl
RWxlbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmY2Q3YTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuaApAQCAtMCwwICsxLDcyIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRE
T01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5
IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50X2gKKyNkZWZpbmUgV2ViS2l0
RE9NSFRNTFRpdGxlRWxlbWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfSFRNTF9USVRMRV9FTEVNRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21faHRtbF90
aXRsZV9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9USVRMRV9F
TEVNRU5UKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9IVE1MX1RJVExFX0VMRU1FTlQsIFdlYktpdERPTUhUTUxUaXRsZUVs
ZW1lbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9USVRMRV9FTEVNRU5ULCBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50Q2xhc3MpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9USVRMRV9FTEVNRU5UKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9IVE1MX1RJVExFX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVOVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9USVRMRV9FTEVNRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1RJVExFX0VMRU1F
TlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0hUTUxfVElUTEVfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVu
dENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50IHsKKyAgICBXZWJL
aXRET01IVE1MRWxlbWVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TUhUTUxUaXRsZUVsZW1lbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfdGl0
bGVfZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdGl0
bGVfZWxlbWVudF9nZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVGl0bGVFbGVt
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dl
YmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X2dldF90ZXh0KFdlYktpdERPTUhUTUxUaXRsZUVs
ZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X3Nl
dF90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQKKyAqIEB2YWx1
ZTogQSAjZ2NoYXIKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3Rp
dGxlX2VsZW1lbnRfc2V0X3RleHQoV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUhU
TUxUaXRsZUVsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50UHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01IVE1MVGl0bGVFbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjI3Nzc3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxU
aXRsZUVsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MVGl0bGVFbGVtZW50UHJpdmF0ZV9o
CisjZGVmaW5lIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTFRpdGxlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MVGl0bGVFbGVtZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSFRN
TFRpdGxlRWxlbWVudCogd3JhcEhUTUxUaXRsZUVsZW1lbnQoV2ViQ29yZTo6SFRNTFRpdGxlRWxl
bWVudCopOworV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudCoga2l0KFdlYkNvcmU6OkhUTUxUaXRs
ZUVsZW1lbnQqKTsKK1dlYkNvcmU6OkhUTUxUaXRsZUVsZW1lbnQqIGNvcmUoV2ViS2l0RE9NSFRN
TFRpdGxlRWxlbWVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01IVE1MVGl0bGVFbGVtZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzg3YjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01I
VE1MVUxpc3RFbGVtZW50LmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTUhU
TUxVTGlzdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01IVE1MVUxpc3RFbGVtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRU
b1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVu
dCoga2l0KFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqIG9iaikKK3sKKyAgICByZXR1cm4gV0VC
S0lUX0RPTV9IVE1MX1VfTElTVF9FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2Rl
Kj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBjb3JlKFdlYktpdERP
TUhUTUxVTGlzdEVsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCog
d3JhcEhUTUxVTGlzdEVsZW1lbnQoV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudCogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fSFRN
TF9VX0xJU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0hUTUxfVV9MSVNU
X0VMRU1FTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdV9s
aXN0X2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpF
dmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQq
IGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X3VfbGlzdF9lbGVtZW50X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCog
dGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVh
biB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpIVE1MVUxp
c3RFbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFVMaXN0RWxl
bWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVy
biBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9N
RXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0g
d2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNl
LT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfYWRk
X2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitH
X0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LCB3ZWJraXRf
ZG9tX2h0bWxfdV9saXN0X2VsZW1lbnQsIFdFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1FTlQsIEdf
SU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRf
ZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1Bf
Q09NUEFDVCwKKyAgICBQUk9QX1RZUEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0
bWxfdV9saXN0X2VsZW1lbnRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCogc2VsZiA9IFdFQktJVF9ET01fSFRNTF9VX0xJU1Rf
RUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0NPTVBBQ1Q6CisgICAgICAgIHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRf
Y29tcGFjdChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9UWVBFOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2Vs
ZW1lbnRfc2V0X3R5cGVfYXR0cihzZWxmLCBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9n
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50
KiBzZWxmID0gV0VCS0lUX0RPTV9IVE1MX1VfTElTVF9FTEVNRU5UKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfQ09NUEFDVDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dl
dF9jb21wYWN0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RZUEU6Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF91X2xpc3Rf
ZWxlbWVudF9nZXRfdHlwZV9hdHRyKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRfcHJv
cGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2h0bWxf
dV9saXN0X2VsZW1lbnRfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTVBBQ1Qs
CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImNvbXBhY3QiLAor
ICAgICAgICAgICAgIkhUTUxVTGlzdEVsZW1lbnQ6Y29tcGFjdCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnYm9vbGVhbiBIVE1MVUxpc3RFbGVtZW50OmNvbXBhY3QiLAorICAgICAgICAgICAg
RkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJ0eXBlIiwKKyAgICAgICAgICAgICJIVE1MVUxpc3RFbGVtZW50OnR5cGUiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2NoYXIqIEhUTUxVTGlzdEVsZW1lbnQ6dHlwZSIsCisgICAgICAgICAg
ICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1M
VUxpc3RFbGVtZW50KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF9jb21wYWN0KFdl
YktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfSFRNTF9VX0xJU1RfRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxV
TGlzdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVz
dWx0ID0gaXRlbS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmNvbXBhY3RBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdl
YmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdChXZWJLaXRET01IVE1MVUxp
c3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X0hUTUxfVV9MSVNUX0VMRU1FTlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmNvbXBhY3RBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFy
KiB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cihXZWJLaXRET01I
VE1MVUxpc3RFbGVtZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxf
VV9MSVNUX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnR5cGVBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1M
VUxpc3RFbGVtZW50KiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19IVE1MX1VfTElTVF9FTEVNRU5UKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6dHlwZUF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxVTGlzdEVs
ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA4NTQ0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LmgKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9N
X0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8
d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlm
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERP
TUhUTUxVTGlzdEVsZW1lbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
d2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfVV9MSVNUX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3Vf
bGlzdF9lbGVtZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9VX0xJU1Rf
RUxFTUVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfSFRNTF9VX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFVMaXN0
RWxlbWVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fSFRNTF9VX0xJU1RfRUxFTUVOVF9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfSFRNTF9VX0xJU1RfRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudENsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVV9MSVNUX0VMRU1FTlQob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVV9M
SVNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0hUTUxfVV9MSVNUX0VMRU1FTlRf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX0hUTUxfVV9MSVNUX0VMRU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVV9M
SVNUX0VMRU1FTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVV9MSVNUX0VMRU1FTlQsIFdlYktpdERPTUhUTUxV
TGlzdEVsZW1lbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudCB7
CisgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0
IF9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxFbGVt
ZW50Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2Rv
bV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF91X2xpc3RfZWxlbWVudF9nZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVUxpc3RFbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF9jb21w
YWN0KFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01IVE1MVUxpc3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2dib29sZWFuCisgKgorKiovCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdChX
ZWJLaXRET01IVE1MVUxpc3RFbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVtZW50X2dldF90eXBlX2F0dHI6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2djaGFy
CisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRf
Z2V0X3R5cGVfYXR0cihXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50KiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfc2V0X3R5cGVfYXR0cjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRf
dHlwZV9hdHRyKFdlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB2
YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01IVE1MVUxpc3RFbGVt
ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSFRNTFVMaXN0RWxlbWVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43MGQ4MjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01IVE1MVUxpc3RFbGVtZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxVTGlzdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFVMaXN0
RWxlbWVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTUhUTUxVTGlzdEVsZW1l
bnQqIHdyYXBIVE1MVUxpc3RFbGVtZW50KFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQqKTsKK1dl
YktpdERPTUhUTUxVTGlzdEVsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50Kik7
CitXZWJDb3JlOjpIVE1MVUxpc3RFbGVtZW50KiBjb3JlKFdlYktpdERPTUhUTUxVTGlzdEVsZW1l
bnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFVM
aXN0RWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNWM2NTAxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFZpZGVvRWxl
bWVudC5jcHAKQEAgLTAsMCArMSw2NjIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01IVE1MVmlkZW9FbGVt
ZW50LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NSFRNTFZpZGVv
RWxlbWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
I2lmIEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTUhUTUxW
aWRlb0VsZW1lbnQqIGtpdChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBvYmopCit7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fSFRNTF9WSURFT19FTEVNRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOb2RlKj4ob2JqKSkpOworfQorCitXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBjb3Jl
KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVl
c3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NSFRNTFZpZGVv
RWxlbWVudCogd3JhcEhUTUxWaWRlb0VsZW1lbnQoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fSFRNTF9WSURFT19FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSFRN
TF9WSURFT19FTEVNRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZGlzcGF0Y2hfZXZl
bnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6RXZlbnQq
IGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCo+KFdFQktJVF9E
T01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0Y2hF
dmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5V
U0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYgLy8gRU5BQkxFKFZJREVPKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFu
IHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJu
IFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1Qo
dGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFt
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0
dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3JlbW92ZV9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFTykK
KyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwor
ICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsK
KyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2
ZW50ID0gd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZGlzcGF0Y2hfZXZlbnQ7CisgICAg
aWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0g
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQor
CitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50LCB3ZWJr
aXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudCwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVESUFfRUxF
TUVOVCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQs
IHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX1ZJREVPX1dJRFRILAor
ICAgIFBST1BfVklERU9fSEVJR0hULAorICAgIFBST1BfUE9TVEVSLAorICAgIFBST1BfUExBWVNf
SU5MSU5FLAorICAgIFBST1BfV0VCS0lUX1NVUFBPUlRTX0ZVTExTQ1JFRU4sCisgICAgUFJPUF9X
RUJLSVRfRElTUExBWUlOR19GVUxMU0NSRUVOLAorICAgIFBST1BfV0VCS0lUX1dJUkVMRVNTX1ZJ
REVPX1BMQVlCQUNLX0RJU0FCTEVELAorICAgIFBST1BfV0VCS0lUX0RFQ09ERURfRlJBTUVfQ09V
TlQsCisgICAgUFJPUF9XRUJLSVRfRFJPUFBFRF9GUkFNRV9DT1VOVCwKK307CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYgPSBXRUJLSVRf
RE9NX0hUTUxfVklERU9fRUxFTUVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlk
KSB7CisgICAgY2FzZSBQUk9QX1dJRFRIOgorICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9zZXRfd2lkdGgoc2VsZiwgZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgd2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfc2V0X2hlaWdodChzZWxmLCBnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9TVEVSOgorICAgICAgICB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfcG9zdGVyKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUExBWVNfSU5MSU5FOgor
ICAgICAgICB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfcGxheXNfaW5saW5lKHNl
bGYsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1dFQktJVF9XSVJFTEVTU19WSURFT19QTEFZQkFDS19ESVNBQkxFRDoKKyAgICAgICAg
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3dlYmtpdF93aXJlbGVzc192aWRlb19w
bGF5YmFja19kaXNhYmxlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBz
ZWxmID0gV0VCS0lUX0RPTV9IVE1MX1ZJREVPX0VMRU1FTlQob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93aWR0aChz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdf
dmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRf
aGVpZ2h0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZJREVPX1dJRFRI
OgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3ZpZGVv
X2VsZW1lbnRfZ2V0X3ZpZGVvX3dpZHRoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1ZJREVPX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdl
YmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF92aWRlb19oZWlnaHQoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUE9TVEVSOgorICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfcG9zdGVyKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BMQVlTX0lOTElORToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1l
bnRfZ2V0X3BsYXlzX2lubGluZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9XRUJLSVRfU1VQUE9SVFNfRlVMTFNDUkVFTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF9zdXBwb3J0
c19mdWxsc2NyZWVuKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJ
VF9ESVNQTEFZSU5HX0ZVTExTQ1JFRU46CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFs
dWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfZGlzcGxheWluZ19m
dWxsc2NyZWVuKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9X
SVJFTEVTU19WSURFT19QTEFZQkFDS19ESVNBQkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dlYmtpdF93aXJl
bGVzc192aWRlb19wbGF5YmFja19kaXNhYmxlZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9XRUJLSVRfREVDT0RFRF9GUkFNRV9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRf
ZGVjb2RlZF9mcmFtZV9jb3VudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9XRUJLSVRfRFJPUFBFRF9GUkFNRV9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmco
dmFsdWUsIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfZHJvcHBlZF9m
cmFtZV9jb3VudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X2h0bWxfdmlkZW9fZWxlbWVudF9jbGFzc19pbml0KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICJIVE1MVmlk
ZW9FbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1bG9uZyBIVE1MVmlk
ZW9FbGVtZW50OndpZHRoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSEVJR0hU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiaGVpZ2h0IiwKKyAg
ICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OmhlaWdodCIsCisgICAgICAgICAgICAicmVhZC13
cml0ZSBndWxvbmcgSFRNTFZpZGVvRWxlbWVudDpoZWlnaHQiLAorICAgICAgICAgICAgMCwgR19N
QVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9WSURFT19XSURUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAor
ICAgICAgICAgICAgInZpZGVvLXdpZHRoIiwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50
OnZpZGVvLXdpZHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIEhUTUxWaWRlb0Vs
ZW1lbnQ6dmlkZW8td2lkdGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1ZJREVP
X0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgInZpZGVv
LWhlaWdodCIsCisgICAgICAgICAgICAiSFRNTFZpZGVvRWxlbWVudDp2aWRlby1oZWlnaHQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgSFRNTFZpZGVvRWxlbWVudDp2aWRlby1oZWln
aHQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BPU1RFUiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJwb3N0ZXIiLAorICAgICAgICAgICAgIkhU
TUxWaWRlb0VsZW1lbnQ6cG9zdGVyIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBI
VE1MVmlkZW9FbGVtZW50OnBvc3RlciIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QTEFZU19JTkxJTkUs
CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInBsYXlzLWlubGlu
ZSIsCisgICAgICAgICAgICAiSFRNTFZpZGVvRWxlbWVudDpwbGF5cy1pbmxpbmUiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gSFRNTFZpZGVvRWxlbWVudDpwbGF5cy1pbmxpbmUi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX1NVUFBPUlRTX0ZVTExTQ1JFRU4sCisgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndlYmtpdC1zdXBwb3J0cy1m
dWxsc2NyZWVuIiwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OndlYmtpdC1zdXBwb3J0
cy1mdWxsc2NyZWVuIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gSFRNTFZpZGVv
RWxlbWVudDp3ZWJraXQtc3VwcG9ydHMtZnVsbHNjcmVlbiIsCisgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1dFQktJVF9ESVNQTEFZSU5HX0ZVTExTQ1JFRU4sCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgIndlYmtpdC1kaXNwbGF5aW5nLWZ1bGxzY3JlZW4iLAorICAgICAg
ICAgICAgIkhUTUxWaWRlb0VsZW1lbnQ6d2Via2l0LWRpc3BsYXlpbmctZnVsbHNjcmVlbiIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIEhUTUxWaWRlb0VsZW1lbnQ6d2Via2l0LWRp
c3BsYXlpbmctZnVsbHNjcmVlbiIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9XSVJFTEVT
U19WSURFT19QTEFZQkFDS19ESVNBQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAid2Via2l0LXdpcmVsZXNzLXZpZGVvLXBsYXliYWNrLWRpc2FibGVkIiwK
KyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OndlYmtpdC13aXJlbGVzcy12aWRlby1wbGF5
YmFjay1kaXNhYmxlZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBIVE1MVmlk
ZW9FbGVtZW50OndlYmtpdC13aXJlbGVzcy12aWRlby1wbGF5YmFjay1kaXNhYmxlZCIsCisgICAg
ICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9XRUJLSVRfREVDT0RFRF9GUkFNRV9DT1VOVCwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgIndlYmtpdC1kZWNvZGVkLWZyYW1lLWNvdW50
IiwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50OndlYmtpdC1kZWNvZGVkLWZyYW1lLWNv
dW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIEhUTUxWaWRlb0VsZW1lbnQ6d2Vi
a2l0LWRlY29kZWQtZnJhbWUtY291bnQiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1dFQktJVF9EUk9QUEVEX0ZSQU1FX0NPVU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmco
CisgICAgICAgICAgICAid2Via2l0LWRyb3BwZWQtZnJhbWUtY291bnQiLAorICAgICAgICAgICAg
IkhUTUxWaWRlb0VsZW1lbnQ6d2Via2l0LWRyb3BwZWQtZnJhbWUtY291bnQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBndWxvbmcgSFRNTFZpZGVvRWxlbWVudDp3ZWJraXQtZHJvcHBlZC1mcmFt
ZS1jb3VudCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfaW5pdChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiByZXF1ZXN0KQor
eworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxf
dmlkZW9fZWxlbWVudF93ZWJraXRfZW50ZXJfZnVsbHNjcmVlbihXZWJLaXRET01IVE1MVmlkZW9F
bGVtZW50KiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgaXRlbS0+d2Via2l0RW50ZXJGdWxsc2NyZWVuKGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFC
TEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfd2Vi
a2l0X2V4aXRfZnVsbHNjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQorewor
I2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVO
VChzZWxmKSk7CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT53ZWJraXRFeGl0RnVsbHNjcmVlbigpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJraXRfZW50ZXJfZnVsbF9zY3JlZW4oV2ViS2l0RE9N
SFRNTFZpZGVvRWxlbWVudCogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJ
REVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpIVE1M
VmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPndlYmtpdEVudGVyRnVsbFNjcmVlbihlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGVy
cm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5k
aWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19l
bGVtZW50X3dlYmtpdF9leGl0X2Z1bGxfc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9W
SURFT19FTEVNRU5UKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPndlYmtpdEV4aXRGdWxsU2NyZWVuKCk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitn
dWxvbmcgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhU
TUxWaWRlb0VsZW1lbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcg
cmVzdWx0ID0gaXRlbS0+Z2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OndpZHRoQXR0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUo
VklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3dp
ZHRoKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSkKK3sKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQo
c2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OndpZHRoQXR0ciwgdmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitn
dWxvbmcgd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X2hlaWdodChXZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25n
IHJlc3VsdCA9IGl0ZW0tPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpoZWlnaHRBdHRyKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJM
RShWSURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRf
aGVpZ2h0KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYsIGd1bG9uZyB2YWx1ZSkKK3sK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1F
TlQoc2VsZikpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmhlaWdodEF0dHIsIHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30K
KworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF92aWRlb193aWR0aChX
ZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPnZpZGVvV2lkdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDAp
OworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRt
bF92aWRlb19lbGVtZW50X2dldF92aWRlb19oZWlnaHQoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVu
dCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
SFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVt
ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVt
LT52aWRlb0hlaWdodCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJ
REVPKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3Bv
c3RlcihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJM
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cG9zdGVyQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5B
QkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3Nl
dF9wb3N0ZXIoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklE
RU9fRUxFTUVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7
CisgICAgaXRlbS0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnBvc3RlckF0dHIsIGNvbnZlcnRlZFZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8K
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3BsYXlzX2lu
bGluZShXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURF
TykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZiksIEZB
TFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpwbGF5c2lubGluZUF0dHIpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3BsYXlzX2lubGluZShXZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZikpOworICAg
IFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnBsYXlzaW5s
aW5lQXR0ciwgdmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5V
U0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X3N1cHBvcnRzX2Z1bGxzY3JlZW4oV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UKHNlbGYpLCBGQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT53ZWJraXRTdXBwb3J0c0Z1bGxzY3JlZW4oKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X2Rpc3BsYXlp
bmdfZnVsbHNjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQo
c2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPndlYmtpdERpc3Bs
YXlpbmdGdWxsc2NyZWVuKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJM
RShWSURFTykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRf
Z2V0X3dlYmtpdF93aXJlbGVzc192aWRlb19wbGF5YmFja19kaXNhYmxlZChXZWJLaXRET01IVE1M
VmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklE
RU9fRUxFTUVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+
d2Via2l0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiV2lyZWxlc3MgUGxheWJhY2sgVGFyZ2V0IikKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpICovCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3dlYmtpdF93aXJlbGVzc192aWRlb19wbGF5
YmFja19kaXNhYmxlZChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmLCBnYm9vbGVhbiB2
YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU8pCisjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hUTUxfVklERU9fRUxFTUVOVChzZWxmKSk7
CisgICAgV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXRXZWJraXRXaXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCh2YWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldpcmVsZXNzIFBsYXli
YWNrIFRhcmdldCIpCisjZW5kaWYgLyogRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkg
Ki8KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorI2VuZGlm
IC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21faHRtbF92aWRlb19l
bGVtZW50X2dldF93ZWJraXRfZGVjb2RlZF9mcmFtZV9jb3VudChXZWJLaXRET01IVE1MVmlkZW9F
bGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyNpZiBFTkFCTEUoTUVESUFfU1RB
VElTVElDUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPndlYmtpdERlY29kZWRGcmFtZUNv
dW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFN0YXRpc3RpY3Mi
KQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShN
RURJQV9TVEFUSVNUSUNTKSAqLworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworZ3Vs
b25nIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfZHJvcHBlZF9mcmFt
ZV9jb3VudChXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShW
SURFTykKKyNpZiBFTkFCTEUoTUVESUFfU1RBVElTVElDUykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19IVE1MX1ZJREVPX0VMRU1FTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OkhUTUxWaWRl
b0VsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9
IGl0ZW0tPndlYmtpdERyb3BwZWRGcmFtZUNvdW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIk1lZGlhIFN0YXRpc3RpY3MiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxv
bmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKSAqLworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8q
IEVOQUJMRShWSURFTykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi42NjA4MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50
LmgKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudF9oCisjZGVmaW5lIFdlYktpdERPTUhUTUxW
aWRlb0VsZW1lbnRfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
TWVkaWFFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5z
dGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9IVE1M
X1ZJREVPX0VMRU1FTlQgICAgICAgICAgICAod2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9IVE1MX1ZJREVPX0VMRU1FTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX0hUTUxfVklERU9fRUxFTUVOVCwgV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSFRNTF9WSURFT19FTEVNRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1ZJREVPX0VM
RU1FTlQsIFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19IVE1MX1ZJREVPX0VMRU1FTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0hUTUxfVklERU9fRUxFTUVOVCkpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfSFRNTF9WSURFT19FTEVNRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9IVE1MX1ZJREVPX0VM
RU1FTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hUTUxfVklERU9fRUxFTUVOVF9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVf
SFRNTF9WSURFT19FTEVNRU5ULCBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50Q2xhc3MpKQorCitz
dHJ1Y3QgX1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQgeworICAgIFdlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50Q2xhc3MgeworICAgIFdlYktpdERPTUhUTUxNZWRpYUVsZW1lbnRDbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF93ZWJraXRfZW50ZXJfZnVsbHNjcmVlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1l
bnRfd2Via2l0X2VudGVyX2Z1bGxzY3JlZW4oV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2Vs
ZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVt
ZW50X3dlYmtpdF9leGl0X2Z1bGxzY3JlZW46CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZp
ZGVvRWxlbWVudAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF93ZWJraXRfZXhpdF9mdWxsc2NyZWVu
KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
aHRtbF92aWRlb19lbGVtZW50X3dlYmtpdF9lbnRlcl9mdWxsX3NjcmVlbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfd2Via2l0X2VudGVyX2Z1bGxfc2NyZWVuKFdlYktpdERPTUhUTUxWaWRl
b0VsZW1lbnQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0
bWxfdmlkZW9fZWxlbWVudF93ZWJraXRfZXhpdF9mdWxsX3NjcmVlbjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3dlYmtpdF9l
eGl0X2Z1bGxfc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93aWR0aDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0
X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfZ2V0X3dpZHRoKFdlYktpdERPTUhUTUxWaWRlb0VsZW1l
bnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF93
aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKiBAdmFsdWU6
IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfd2lkdGgoV2ViS2l0RE9NSFRN
TFZpZGVvRWxlbWVudCogc2VsZiwgZ3Vsb25nIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTUhU
TUxWaWRlb0VsZW1lbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9nZXRfaGVpZ2h0KFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9oZWlnaHQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICogQHZhbHVlOiBBICNndWxvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X2hlaWdodChXZWJLaXRET01IVE1MVmlkZW9FbGVt
ZW50KiBzZWxmLCBndWxvbmcgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRl
b19lbGVtZW50X2dldF92aWRlb193aWR0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9odG1sX3ZpZGVvX2Vs
ZW1lbnRfZ2V0X3ZpZGVvX3dpZHRoKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF92aWRlb19oZWlnaHQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVybnM6
IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
dWxvbmcKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF92aWRlb19oZWlnaHQoV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1s
X3ZpZGVvX2VsZW1lbnRfZ2V0X3Bvc3RlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxl
bWVudF9nZXRfcG9zdGVyKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9wb3N0ZXI6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0
bWxfdmlkZW9fZWxlbWVudF9zZXRfcG9zdGVyKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVv
X2VsZW1lbnRfZ2V0X3BsYXlzX2lubGluZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlk
ZW9FbGVtZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF92aWRl
b19lbGVtZW50X2dldF9wbGF5c19pbmxpbmUoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9odG1sX3ZpZGVvX2VsZW1lbnRfc2V0X3BsYXlzX2lu
bGluZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKiBAdmFsdWU6
IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF9wbGF5c19pbmxpbmUoV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudCogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCisvKioKKyAq
IHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfc3VwcG9ydHNfZnVsbHNj
cmVlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50CisgKgorICogUmV0
dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRf
c3VwcG9ydHNfZnVsbHNjcmVlbihXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X2Rpc3BsYXlp
bmdfZnVsbHNjcmVlbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dl
dF93ZWJraXRfZGlzcGxheWluZ19mdWxsc2NyZWVuKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJr
aXRfd2lyZWxlc3NfdmlkZW9fcGxheWJhY2tfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X2h0bWxfdmlkZW9fZWxlbWVudF9nZXRfd2Via2l0X3dpcmVsZXNzX3ZpZGVvX3BsYXliYWNrX2Rp
c2FibGVkKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21faHRtbF92aWRlb19lbGVtZW50X3NldF93ZWJraXRfd2lyZWxlc3NfdmlkZW9fcGxheWJh
Y2tfZGlzYWJsZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2h0bWxfdmlkZW9fZWxlbWVudF9zZXRfd2Via2l0X3dp
cmVsZXNzX3ZpZGVvX3BsYXliYWNrX2Rpc2FibGVkKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQq
IHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlkZW9f
ZWxlbWVudF9nZXRfd2Via2l0X2RlY29kZWRfZnJhbWVfY291bnQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21f
aHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfZGVjb2RlZF9mcmFtZV9jb3VudChXZWJLaXRE
T01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2h0bWxfdmlk
ZW9fZWxlbWVudF9nZXRfd2Via2l0X2Ryb3BwZWRfZnJhbWVfY291bnQ6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9k
b21faHRtbF92aWRlb19lbGVtZW50X2dldF93ZWJraXRfZHJvcHBlZF9mcmFtZV9jb3VudChXZWJL
aXRET01IVE1MVmlkZW9FbGVtZW50KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTUhUTUxW
aWRlb0VsZW1lbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjliNzFkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxWaWRl
b0VsZW1lbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01IVE1MVmlkZW9FbGVtZW50UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MVmlkZW9FbGVtZW50Lmg+CisjaWYgRU5BQkxFKFZJREVPKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIHdyYXBIVE1MVmlkZW9FbGVtZW50KFdlYkNv
cmU6OkhUTUxWaWRlb0VsZW1lbnQqKTsKK1dlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqIGtpdChX
ZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Kik7CitXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50KiBj
b3JlKFdlYktpdERPTUhUTUxWaWRlb0VsZW1lbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NSFRNTFZp
ZGVvRWxlbWVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IaXN0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NSGlzdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4Y2M4
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSGlzdG9yeS5jcHAKQEAgLTAsMCArMSwxNjggQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01IaXN0b3J5LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9y
dFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NSGlzdG9yeVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRv
VVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9ISVNUT1JZX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0hJU1RPUlksIFdl
YktpdERPTUhpc3RvcnlQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSGlzdG9y
eVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5PiBjb3JlT2JqZWN0OworfSBX
ZWJLaXRET01IaXN0b3J5UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TUhpc3RvcnkqIGtpdChXZWJDb3JlOjpIaXN0b3J5KiBvYmopCit7CisgICAgaWYgKCFvYmopCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fSElTVE9SWShyZXQpOworCisg
ICAgcmV0dXJuIHdyYXBIaXN0b3J5KG9iaik7Cit9CisKK1dlYkNvcmU6Okhpc3RvcnkqIGNvcmUo
V2ViS2l0RE9NSGlzdG9yeSogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRp
Y19jYXN0PFdlYkNvcmU6Okhpc3RvcnkqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01IaXN0b3J5KiB3cmFwSGlzdG9yeShXZWJDb3Jl
OjpIaXN0b3J5KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9ISVNUT1JZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfSElT
VE9SWSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01IaXN0b3J5LCB3ZWJraXRf
ZG9tX2hpc3RvcnksIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1Bf
MCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21faGlzdG9y
eV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NSGlzdG9yeVByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX0hJU1RPUllfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsK
KworICAgIHByaXYtPn5XZWJLaXRET01IaXN0b3J5UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9kb21faGlzdG9yeV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2hpc3RvcnlfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NSGlzdG9yeSogc2VsZiA9IFdFQktJVF9ET01fSElTVE9SWShv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdU
SDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21faGlzdG9yeV9n
ZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX2hpc3RvcnlfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7
CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9oaXN0b3J5
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01IaXN0b3J5UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fSElTVE9SWV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYt
PmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIaXN0b3J5Kj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2hpc3RvcnlfY2xhc3NfaW5pdChXZWJLaXRE
T01IaXN0b3J5Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTUhpc3RvcnlQcml2YXRl
KSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21faGlzdG9yeV9j
b25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9oaXN0
b3J5X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9oaXN0b3J5X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAg
ICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAg
ICAgIkhpc3Rvcnk6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIEhpc3Rv
cnk6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2hp
c3RvcnlfaW5pdChXZWJLaXRET01IaXN0b3J5KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTUhp
c3RvcnlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9ISVNUT1JZX0dFVF9QUklWQVRFKHJlcXVl
c3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NSGlzdG9yeVByaXZhdGUoKTsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2hpc3RvcnlfYmFjayhXZWJLaXRET01IaXN0b3J5KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfSElTVE9SWShzZWxmKSk7CisgICAgV2ViQ29yZTo6SGlzdG9yeSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5iYWNrKCk7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9oaXN0b3J5X2ZvcndhcmQoV2ViS2l0RE9NSGlzdG9yeSogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX0hJU1RPUlkoc2VsZikpOworICAgIFdlYkNvcmU6Okhpc3Rvcnkq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Zm9yd2FyZCgpOworfQorCit2
b2lkIHdlYmtpdF9kb21faGlzdG9yeV9nbyhXZWJLaXRET01IaXN0b3J5KiBzZWxmLCBnbG9uZyBk
aXN0YW5jZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0hJU1RPUlkoc2VsZikpOworICAgIFdl
YkNvcmU6Okhpc3RvcnkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Z28o
ZGlzdGFuY2UpOworfQorCitndWxvbmcgd2Via2l0X2RvbV9oaXN0b3J5X2dldF9sZW5ndGgoV2Vi
S2l0RE9NSGlzdG9yeSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19ISVNUT1JZ
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpIaXN0b3J5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSGlzdG9yeS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2N2M0M2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTUhpc3RvcnkuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTUhpc3RvcnlfaAorI2RlZmluZSBXZWJLaXRE
T01IaXN0b3J5X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9ISVNUT1JZICAgICAgICAg
ICAgKHdlYmtpdF9kb21faGlzdG9yeV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX0hJ
U1RPUlkob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX0hJU1RPUlksIFdlYktpdERPTUhpc3RvcnkpKQorI2RlZmluZSBXRUJL
SVRfRE9NX0hJU1RPUllfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX0hJU1RPUlksIFdlYktpdERPTUhpc3RvcnlDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19ISVNUT1JZKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9ISVNUT1JZKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19ISVNUT1JZX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9ISVNUT1JZKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9ISVNUT1JZX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9ISVNUT1JZLCBXZWJLaXRET01IaXN0b3J5Q2xhc3MpKQorCitz
dHJ1Y3QgX1dlYktpdERPTUhpc3RvcnkgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5z
dGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUhpc3RvcnlDbGFzcyB7CisgICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2RvbV9oaXN0b3J5X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21faGlz
dG9yeV9iYWNrOgorICogQHNlbGY6IEEgI1dlYktpdERPTUhpc3RvcnkKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9oaXN0b3J5X2Jh
Y2soV2ViS2l0RE9NSGlzdG9yeSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9oaXN0b3J5
X2ZvcndhcmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSGlzdG9yeQorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX2hpc3RvcnlfZm9y
d2FyZChXZWJLaXRET01IaXN0b3J5KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2hpc3Rv
cnlfZ286CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NSGlzdG9yeQorICogQGRpc3RhbmNlOiBBICNn
bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfZG9tX2hpc3RvcnlfZ28oV2ViS2l0RE9NSGlzdG9yeSogc2VsZiwgZ2xvbmcgZGlzdGFu
Y2UpOworCisvKioKKyAqIHdlYmtpdF9kb21faGlzdG9yeV9nZXRfbGVuZ3RoOgorICogQHNlbGY6
IEEgI1dlYktpdERPTUhpc3RvcnkKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX2hp
c3RvcnlfZ2V0X2xlbmd0aChXZWJLaXRET01IaXN0b3J5KiBzZWxmKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTUhpc3RvcnlfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IaXN0b3J5UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IaXN0b3J5UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNjODhhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhpc3RvcnlQcml2YXRlLmgKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01IaXN0b3J5UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUhpc3RvcnlQcml2YXRlX2gK
KworI2luY2x1ZGUgPFdlYkNvcmUvSGlzdG9yeS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IaXN0b3J5Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NSGlzdG9yeSog
d3JhcEhpc3RvcnkoV2ViQ29yZTo6SGlzdG9yeSopOworV2ViS2l0RE9NSGlzdG9yeSoga2l0KFdl
YkNvcmU6Okhpc3RvcnkqKTsKK1dlYkNvcmU6Okhpc3RvcnkqIGNvcmUoV2ViS2l0RE9NSGlzdG9y
eSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01IaXN0b3J5
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZlbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01L
ZXlib2FyZEV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQ3
MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50LmNwcApAQCAtMCwwICsx
LDI3MiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTUtleWJvYXJkRXZlbnQuaCIKKworI2luY2x1ZGUgPFdl
YkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRE
T01ET01XaW5kb3dQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NS2V5Ym9hcmRFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitXZWJLaXRET01LZXlib2FyZEV2ZW50KiBraXQoV2ViQ29yZTo6S2V5Ym9h
cmRFdmVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX0tFWUJPQVJEX0VWRU5UKGtp
dChzdGF0aWNfY2FzdDxXZWJDb3JlOjpFdmVudCo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6S2V5
Ym9hcmRFdmVudCogY29yZShXZWJLaXRET01LZXlib2FyZEV2ZW50KiByZXF1ZXN0KQoreworICAg
IHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6S2V5Ym9hcmRFdmVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TUtleWJvYXJkRXZlbnQqIHdyYXBLZXlib2FyZEV2ZW50KFdlYkNvcmU6OktleWJvYXJkRXZlbnQq
IGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJL
SVRfRE9NX0tFWUJPQVJEX0VWRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfS0VZQk9B
UkRfRVZFTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NS2V5Ym9hcmRFdmVu
dCwgd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudCwgV0VCS0lUX0RPTV9UWVBFX1VJX0VWRU5UKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9LRVlfSURFTlRJRklFUiwKKyAgICBQUk9Q
X0tFWV9MT0NBVElPTiwKKyAgICBQUk9QX0NUUkxfS0VZLAorICAgIFBST1BfU0hJRlRfS0VZLAor
ICAgIFBST1BfQUxUX0tFWSwKKyAgICBQUk9QX01FVEFfS0VZLAorICAgIFBST1BfQUxUX0dSQVBI
X0tFWSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X3By
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZiA9
IFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9LRVlfSURFTlRJRklFUjoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfa2V5X2lkZW50
aWZpZXIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfS0VZX0xPQ0FUSU9O
OgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9rZXlib2FyZF9l
dmVudF9nZXRfa2V5X2xvY2F0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0NUUkxfS0VZOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRf
ZG9tX2tleWJvYXJkX2V2ZW50X2dldF9jdHJsX2tleShzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9TSElGVF9LRVk6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFs
dWUsIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X3NoaWZ0X2tleShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTFRfS0VZOgorICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9hbHRfa2V5KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01FVEFfS0VZOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9tZXRh
X2tleShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BTFRfR1JBUEhfS0VZ
OgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX2tleWJvYXJk
X2V2ZW50X2dldF9hbHRfZ3JhcGhfa2V5KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfY2xhc3NfaW5pdChXZWJLaXRET01LZXlib2Fy
ZEV2ZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9wcm9wZXJ0eTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9LRVlfSURFTlRJRklFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJrZXktaWRlbnRpZmllciIsCisgICAgICAgICAgICAiS2V5Ym9h
cmRFdmVudDprZXktaWRlbnRpZmllciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBL
ZXlib2FyZEV2ZW50OmtleS1pZGVudGlmaWVyIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfS0VZX0xPQ0FU
SU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAia2V5LWxvY2F0
aW9uIiwKKyAgICAgICAgICAgICJLZXlib2FyZEV2ZW50OmtleS1sb2NhdGlvbiIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1bG9uZyBLZXlib2FyZEV2ZW50OmtleS1sb2NhdGlvbiIsCisgICAg
ICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1RSTF9LRVksCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgImN0cmwta2V5IiwKKyAgICAgICAgICAgICJLZXlib2Fy
ZEV2ZW50OmN0cmwta2V5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gS2V5Ym9h
cmRFdmVudDpjdHJsLWtleSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NISUZUX0tFWSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic2hpZnQta2V5IiwKKyAgICAg
ICAgICAgICJLZXlib2FyZEV2ZW50OnNoaWZ0LWtleSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdib29sZWFuIEtleWJvYXJkRXZlbnQ6c2hpZnQta2V5IiwKKyAgICAgICAgICAgIEZBTFNFLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
QUxUX0tFWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYWx0
LWtleSIsCisgICAgICAgICAgICAiS2V5Ym9hcmRFdmVudDphbHQta2V5IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2Jvb2xlYW4gS2V5Ym9hcmRFdmVudDphbHQta2V5IiwKKyAgICAgICAgICAg
IEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTUVUQV9LRVksCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAg
ICAgICAgIm1ldGEta2V5IiwKKyAgICAgICAgICAgICJLZXlib2FyZEV2ZW50Om1ldGEta2V5IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gS2V5Ym9hcmRFdmVudDptZXRhLWtleSIs
CisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0FMVF9HUkFQSF9LRVksCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19ib29sZWFuKAorICAgICAgICAgICAgImFsdC1ncmFwaC1rZXkiLAorICAgICAgICAgICAgIktl
eWJvYXJkRXZlbnQ6YWx0LWdyYXBoLWtleSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29s
ZWFuIEtleWJvYXJkRXZlbnQ6YWx0LWdyYXBoLWtleSIsCisgICAgICAgICAgICBGQUxTRSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfaW5pdChXZWJLaXRET01LZXlib2FyZEV2ZW50KiByZXF1
ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfbW9kaWZpZXJfc3RhdGUoV2ViS2l0RE9NS2V5Ym9hcmRF
dmVudCogc2VsZiwgY29uc3QgZ2NoYXIqIGtleUlkZW50aWZpZXJBcmcpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChrZXlJZGVudGlmaWVyQXJnLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6S2V5
Ym9hcmRFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRLZXlJZGVudGlmaWVyQXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGtleUlkZW50
aWZpZXJBcmcpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmdldE1vZGlmaWVyU3RhdGUo
Y29udmVydGVkS2V5SWRlbnRpZmllckFyZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2luaXRfa2V5Ym9hcmRfZXZlbnQoV2ViS2l0RE9N
S2V5Ym9hcmRFdmVudCogc2VsZiwgY29uc3QgZ2NoYXIqIHR5cGUsIGdib29sZWFuIGNhbkJ1YmJs
ZSwgZ2Jvb2xlYW4gY2FuY2VsYWJsZSwgV2ViS2l0RE9NRE9NV2luZG93KiB2aWV3LCBjb25zdCBn
Y2hhcioga2V5SWRlbnRpZmllciwgZ3Vsb25nIGxvY2F0aW9uLCBnYm9vbGVhbiBjdHJsS2V5LCBn
Ym9vbGVhbiBhbHRLZXksIGdib29sZWFuIHNoaWZ0S2V5LCBnYm9vbGVhbiBtZXRhS2V5LCBnYm9v
bGVhbiBhbHRHcmFwaEtleSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VWRU5U
KHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHR5cGUpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19ET01fV0lORE9XKHZpZXcpKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KGtleUlkZW50aWZpZXIpOworICAgIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVHlwZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh0eXBlKTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGNvbnZlcnRlZFZp
ZXcgPSBXZWJLaXQ6OmNvcmUodmlldyk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkS2V5SWRl
bnRpZmllciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChrZXlJZGVudGlmaWVyKTsKKyAgICBpdGVt
LT5pbml0S2V5Ym9hcmRFdmVudChjb252ZXJ0ZWRUeXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUs
IGNvbnZlcnRlZFZpZXcsIGNvbnZlcnRlZEtleUlkZW50aWZpZXIsIGxvY2F0aW9uLCBjdHJsS2V5
LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBhbHRHcmFwaEtleSk7Cit9CisKK2djaGFyKiB3
ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9rZXlfaWRlbnRpZmllcihXZWJLaXRET01LZXli
b2FyZEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VW
RU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmtleUlkZW50aWZpZXIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ3Vsb25nIHdl
YmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2tleV9sb2NhdGlvbihXZWJLaXRET01LZXlib2Fy
ZEV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VWRU5U
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sb2NhdGlvbigpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0
X2N0cmxfa2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpL
ZXlib2FyZEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJl
c3VsdCA9IGl0ZW0tPmN0cmxLZXkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9zaGlmdF9rZXkoV2ViS2l0RE9NS2V5Ym9h
cmRFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVO
VChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+c2hpZnRLZXkoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2
ZW50X2dldF9hbHRfa2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpLZXlib2FyZEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPmFsdEtleSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2di
b29sZWFuIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X21ldGFfa2V5KFdlYktpdERPTUtl
eWJvYXJkRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfS0VZQk9BUkRf
RVZFTlQoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm1ldGFLZXko
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX2tleWJvYXJk
X2V2ZW50X2dldF9hbHRfZ3JhcGhfa2V5KFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlQoc2VsZiksIEZBTFNFKTsK
KyAgICBXZWJDb3JlOjpLZXlib2FyZEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmFsdEdyYXBoS2V5KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJv
YXJkRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDdkMDU0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50LmgKQEAgLTAsMCArMSwxNjYgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERP
TV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkg
PHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERPTUtleWJvYXJkRXZlbnRfaAorI2RlZmluZSBXZWJLaXRET01L
ZXlib2FyZEV2ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTVVJRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0tF
WUJPQVJEX0VWRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVChvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfS0VZQk9B
UkRfRVZFTlQsIFdlYktpdERPTUtleWJvYXJkRXZlbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0tF
WUJPQVJEX0VWRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9LRVlCT0FSRF9FVkVOVCwgV2ViS2l0RE9NS2V5Ym9hcmRF
dmVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0tFWUJPQVJEX0VWRU5UKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9L
RVlCT0FSRF9FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfS0VZQk9BUkRfRVZFTlRfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX0tFWUJPQVJEX0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRf
RE9NX1RZUEVfS0VZQk9BUkRfRVZFTlQsIFdlYktpdERPTUtleWJvYXJkRXZlbnRDbGFzcykpCisK
Ky8qKgorICogV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlfTE9DQVRJT05fU1RBTkRBUkQ6
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlfTE9DQVRJT05fU1RB
TkRBUkQgMHgwMAorCisvKioKKyAqIFdFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FU
SU9OX0xFRlQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlfTE9D
QVRJT05fTEVGVCAweDAxCisKKy8qKgorICogV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9LRVlf
TE9DQVRJT05fUklHSFQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9L
RVlfTE9DQVRJT05fUklHSFQgMHgwMgorCisvKioKKyAqIFdFQktJVF9ET01fS0VZQk9BUkRfRVZF
TlRfS0VZX0xPQ0FUSU9OX05VTVBBRDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX0tFWUJPQVJE
X0VWRU5UX0tFWV9MT0NBVElPTl9OVU1QQUQgMHgwMworCitzdHJ1Y3QgX1dlYktpdERPTUtleWJv
YXJkRXZlbnQgeworICAgIFdlYktpdERPTVVJRXZlbnQgcGFyZW50X2luc3RhbmNlOworfTsKKwor
c3RydWN0IF9XZWJLaXRET01LZXlib2FyZEV2ZW50Q2xhc3MgeworICAgIFdlYktpdERPTVVJRXZl
bnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X2tleWJvYXJkX2V2ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fa2V5
Ym9hcmRfZXZlbnRfZ2V0X21vZGlmaWVyX3N0YXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTUtl
eWJvYXJkRXZlbnQKKyAqIEBrZXlJZGVudGlmaWVyQXJnOiBBICNnY2hhcgorICoKKyAqIFJldHVy
bnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fa2V5
Ym9hcmRfZXZlbnRfZ2V0X21vZGlmaWVyX3N0YXRlKFdlYktpdERPTUtleWJvYXJkRXZlbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiBrZXlJZGVudGlmaWVyQXJnKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X2tleWJvYXJkX2V2ZW50X2luaXRfa2V5Ym9hcmRfZXZlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NS2V5Ym9hcmRFdmVudAorICogQHR5cGU6IEEgI2djaGFyCisgKiBAY2FuQnViYmxlOiBBICNn
Ym9vbGVhbgorICogQGNhbmNlbGFibGU6IEEgI2dib29sZWFuCisgKiBAdmlldzogQSAjV2ViS2l0
RE9NRE9NV2luZG93CisgKiBAa2V5SWRlbnRpZmllcjogQSAjZ2NoYXIKKyAqIEBsb2NhdGlvbjog
QSAjZ3Vsb25nCisgKiBAY3RybEtleTogQSAjZ2Jvb2xlYW4KKyAqIEBhbHRLZXk6IEEgI2dib29s
ZWFuCisgKiBAc2hpZnRLZXk6IEEgI2dib29sZWFuCisgKiBAbWV0YUtleTogQSAjZ2Jvb2xlYW4K
KyAqIEBhbHRHcmFwaEtleTogQSAjZ2Jvb2xlYW4KKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9pbml0X2tleWJvYXJkX2V2ZW50KFdlYktpdERPTUtl
eWJvYXJkRXZlbnQqIHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlLCBnYm9vbGVhbiBjYW5CdWJibGUs
IGdib29sZWFuIGNhbmNlbGFibGUsIFdlYktpdERPTURPTVdpbmRvdyogdmlldywgY29uc3QgZ2No
YXIqIGtleUlkZW50aWZpZXIsIGd1bG9uZyBsb2NhdGlvbiwgZ2Jvb2xlYW4gY3RybEtleSwgZ2Jv
b2xlYW4gYWx0S2V5LCBnYm9vbGVhbiBzaGlmdEtleSwgZ2Jvb2xlYW4gbWV0YUtleSwgZ2Jvb2xl
YW4gYWx0R3JhcGhLZXkpOworCisvKioKKyAqIHdlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0
X2tleV9pZGVudGlmaWVyOgorICogQHNlbGY6IEEgI1dlYktpdERPTUtleWJvYXJkRXZlbnQKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2Rv
bV9rZXlib2FyZF9ldmVudF9nZXRfa2V5X2lkZW50aWZpZXIoV2ViS2l0RE9NS2V5Ym9hcmRFdmVu
dCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfa2V5X2xv
Y2F0aW9uOgorICogQHNlbGY6IEEgI1dlYktpdERPTUtleWJvYXJkRXZlbnQKKyAqCisgKiBSZXR1
cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fa2V5Ym9h
cmRfZXZlbnRfZ2V0X2tleV9sb2NhdGlvbihXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9jdHJsX2tleToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01LZXlib2FyZEV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9n
ZXRfY3RybF9rZXkoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfc2hpZnRfa2V5OgorICogQHNlbGY6IEEgI1dlYktp
dERPTUtleWJvYXJkRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9zaGlmdF9rZXko
V2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9rZXli
b2FyZF9ldmVudF9nZXRfYWx0X2tleToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01LZXlib2FyZEV2
ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2tleShXZWJLaXRET01LZXlib2Fy
ZEV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2tleWJvYXJkX2V2ZW50X2dldF9t
ZXRhX2tleToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01LZXlib2FyZEV2ZW50CisgKgorICogUmV0
dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9r
ZXlib2FyZF9ldmVudF9nZXRfbWV0YV9rZXkoV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2dyYXBoX2tleToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01LZXlib2FyZEV2ZW50CisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9rZXlib2FyZF9l
dmVudF9nZXRfYWx0X2dyYXBoX2tleShXZWJLaXRET01LZXlib2FyZEV2ZW50KiBzZWxmKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTUtleWJvYXJkRXZlbnRfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlib2FyZEV2ZW50
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZmE2MGQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWJvYXJkRXZlbnRQcml2YXRlLmgKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01L
ZXlib2FyZEV2ZW50UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTUtleWJvYXJkRXZlbnRQcml2
YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01LZXlib2FyZEV2ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
V2ViS2l0RE9NS2V5Ym9hcmRFdmVudCogd3JhcEtleWJvYXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9h
cmRFdmVudCopOworV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCoga2l0KFdlYkNvcmU6OktleWJvYXJk
RXZlbnQqKTsKK1dlYkNvcmU6OktleWJvYXJkRXZlbnQqIGNvcmUoV2ViS2l0RE9NS2V5Ym9hcmRF
dmVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01LZXli
b2FyZEV2ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjhjZmU5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0LmNw
cApAQCAtMCwwICsxLDc3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QuaCIKKwor
I2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENh
Y2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNs
dWRlICJXZWJLaXRET01LZXlmcmFtZUVmZmVjdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoV0VC
X0FOSU1BVElPTlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01LZXlmcmFtZUVm
ZmVjdCoga2l0KFdlYkNvcmU6OktleWZyYW1lRWZmZWN0KiBvYmopCit7CisgICAgaWYgKCFvYmop
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENh
Y2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fS0VZRlJBTUVfRUZGRUNU
KHJldCk7CisKKyAgICByZXR1cm4gd3JhcEtleWZyYW1lRWZmZWN0KG9iaik7Cit9CisKK1dlYkNv
cmU6OktleWZyYW1lRWZmZWN0KiBjb3JlKFdlYktpdERPTUtleWZyYW1lRWZmZWN0KiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6S2V5ZnJhbWVF
ZmZlY3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQor
CitXZWJLaXRET01LZXlmcmFtZUVmZmVjdCogd3JhcEtleWZyYW1lRWZmZWN0KFdlYkNvcmU6Oktl
eWZyYW1lRWZmZWN0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9LRVlGUkFNRV9FRkZFQ1QoZ19vYmplY3RfbmV3KFdFQktJVF9E
T01fVFlQRV9LRVlGUkFNRV9FRkZFQ1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FOSU1BVElPTlMpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QsIHdl
YmtpdF9kb21fa2V5ZnJhbWVfZWZmZWN0LCBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX0VGRkVD
VCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9rZXlmcmFtZV9lZmZlY3RfY2xhc3NfaW5pdChX
ZWJLaXRET01LZXlmcmFtZUVmZmVjdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3RDbGFzcyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fa2V5ZnJh
bWVfZWZmZWN0X2luaXQoV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QqIHJlcXVlc3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUtleWZyYW1lRWZm
ZWN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTUtleWZyYW1lRWZmZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzlkM2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3Qu
aApAQCAtMCwwICsxLDUzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdlYktpdERPTUtleWZyYW1lRWZmZWN0X2gKKyNkZWZpbmUgV2ViS2l0RE9NS2V5ZnJhbWVF
ZmZlY3RfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01BbmltYXRpb25F
ZmZlY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0tFWUZSQU1FX0VG
RkVDVCAgICAgICAgICAgICh3ZWJraXRfZG9tX2tleWZyYW1lX2VmZmVjdF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0tFWUZSQU1FX0VGRkVDVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfS0VZRlJBTUVfRUZG
RUNULCBXZWJLaXRET01LZXlmcmFtZUVmZmVjdCkpCisjZGVmaW5lIFdFQktJVF9ET01fS0VZRlJB
TUVfRUZGRUNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9LRVlGUkFNRV9FRkZFQ1QsIFdlYktpdERPTUtleWZyYW1lRWZm
ZWN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfS0VZRlJBTUVfRUZGRUNUKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9L
RVlGUkFNRV9FRkZFQ1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX0tFWUZSQU1FX0VGRkVDVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9N
X1RZUEVfS0VZRlJBTUVfRUZGRUNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9LRVlGUkFNRV9FRkZF
Q1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VC
S0lUX0RPTV9UWVBFX0tFWUZSQU1FX0VGRkVDVCwgV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RDbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QgeworICAgIFdlYktpdERPTUFu
aW1hdGlvbkVmZmVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUtl
eWZyYW1lRWZmZWN0Q2xhc3MgeworICAgIFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fa2V5ZnJhbWVf
ZWZmZWN0X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NS2V5ZnJhbWVFZmZl
Y3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
S2V5ZnJhbWVFZmZlY3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGM5NmRkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RQcml2YXRl
LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01LZXlmcmFtZUVmZmVjdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01L
ZXlmcmFtZUVmZmVjdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9LZXlmcmFtZUVmZmVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01LZXlmcmFtZUVmZmVjdC5oPgorI2lm
IEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01L
ZXlmcmFtZUVmZmVjdCogd3JhcEtleWZyYW1lRWZmZWN0KFdlYkNvcmU6OktleWZyYW1lRWZmZWN0
Kik7CitXZWJLaXRET01LZXlmcmFtZUVmZmVjdCoga2l0KFdlYkNvcmU6OktleWZyYW1lRWZmZWN0
Kik7CitXZWJDb3JlOjpLZXlmcmFtZUVmZmVjdCogY29yZShXZWJLaXRET01LZXlmcmFtZUVmZmVj
dCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX0FOSU1B
VElPTlMpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01LZXlmcmFtZUVmZmVjdFByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01Mb2NhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0aW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWNiMTQ2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01Mb2NhdGlvbi5jcHAKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01M
b2NhdGlvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUxvY2F0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmlu
ZSBXRUJLSVRfRE9NX0xPQ0FUSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX0xPQ0FUSU9OLCBXZWJLaXRET01Mb2NhdGlv
blByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Mb2NhdGlvblByaXZhdGUgewor
ICAgIFJlZlB0cjxXZWJDb3JlOjpMb2NhdGlvbj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NTG9j
YXRpb25Qcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NTG9jYXRpb24q
IGtpdChXZWJDb3JlOjpMb2NhdGlvbiogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9i
aikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX0xPQ0FUSU9OKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcExvY2F0aW9uKG9iaik7Cit9CisKK1dlYkNvcmU6OkxvY2F0aW9uKiBjb3JlKFdlYktp
dERPTUxvY2F0aW9uKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6TG9jYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9i
amVjdCkgOiAwOworfQorCitXZWJLaXRET01Mb2NhdGlvbiogd3JhcExvY2F0aW9uKFdlYkNvcmU6
OkxvY2F0aW9uKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9MT0NBVElPTihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX0xP
Q0FUSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUxvY2F0aW9uLCB3ZWJr
aXRfZG9tX2xvY2F0aW9uLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQ
Uk9QXzAsCisgICAgUFJPUF9IUkVGLAorICAgIFBST1BfUFJPVE9DT0wsCisgICAgUFJPUF9IT1NU
LAorICAgIFBST1BfSE9TVE5BTUUsCisgICAgUFJPUF9QT1JULAorICAgIFBST1BfUEFUSE5BTUUs
CisgICAgUFJPUF9TRUFSQ0gsCisgICAgUFJPUF9IQVNILAorICAgIFBST1BfT1JJR0lOLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9sb2NhdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9M
T0NBVElPTl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNo
ZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERP
TUxvY2F0aW9uUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbG9jYXRp
b25fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRE
T01Mb2NhdGlvbiogc2VsZiA9IFdFQktJVF9ET01fTE9DQVRJT04ob2JqZWN0KTsKKworICAgIHN3
aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9IUkVGOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ocmVmKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BST1RPQ09MOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wcm90b2NvbChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IT1NUOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ob3N0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hPU1ROQU1FOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ob3N0bmFtZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QT1JUOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wb3J0KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BBVEhOQU1FOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9wYXRobmFtZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRUFSQ0g6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3NlYXJjaChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IQVNIOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9oYXNoKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09SSUdJTjoKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfb3JpZ2luKHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX2xvY2F0aW9uX2NvbnN0
cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVj
dENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9i
amVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbG9jYXRpb25fcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKKworICAgIFdlYktpdERPTUxvY2F0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fTE9DQVRJT05fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6TG9jYXRpb24qPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3Qp
LT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29y
ZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fbG9jYXRpb25fY2xhc3NfaW5pdChXZWJLaXRET01Mb2NhdGlvbkNs
YXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01Mb2NhdGlvblByaXZhdGUpKTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9sb2NhdGlvbl9jb25zdHJ1Y3Rv
cjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9sb2NhdGlvbl9maW5h
bGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbG9jYXRp
b25fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0hSRUYsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaHJlZiIsCisgICAgICAgICAgICAiTG9jYXRp
b246aHJlZiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBMb2NhdGlvbjpocmVmIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfUFJPVE9DT0wsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAicHJvdG9jb2wiLAorICAgICAgICAgICAgIkxvY2F0aW9uOnByb3RvY29s
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIExvY2F0aW9uOnByb3RvY29sIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfSE9TVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJob3N0IiwKKyAgICAgICAgICAgICJMb2NhdGlvbjpob3N0IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2NoYXIqIExvY2F0aW9uOmhvc3QiLAorICAgICAgICAgICAgIiIsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IT1NU
TkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJob3N0bmFt
ZSIsCisgICAgICAgICAgICAiTG9jYXRpb246aG9zdG5hbWUiLAorICAgICAgICAgICAgInJlYWQt
b25seSBnY2hhciogTG9jYXRpb246aG9zdG5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QT1JULAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBvcnQiLAorICAgICAg
ICAgICAgIkxvY2F0aW9uOnBvcnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTG9j
YXRpb246cG9ydCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBVEhOQU1FLAorICAgICAgICBnX3BhcmFt
X3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBhdGhuYW1lIiwKKyAgICAgICAgICAgICJMb2Nh
dGlvbjpwYXRobmFtZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBMb2NhdGlvbjpw
YXRobmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NFQVJDSCwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJzZWFyY2giLAorICAgICAgICAgICAgIkxvY2F0aW9uOnNl
YXJjaCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBMb2NhdGlvbjpzZWFyY2giLAor
ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9IQVNILAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImhhc2giLAorICAgICAgICAgICAgIkxvY2F0aW9uOmhhc2giLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogTG9jYXRpb246aGFzaCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09S
SUdJTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJvcmlnaW4i
LAorICAgICAgICAgICAgIkxvY2F0aW9uOm9yaWdpbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBMb2NhdGlvbjpvcmlnaW4iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2xv
Y2F0aW9uX2luaXQoV2ViS2l0RE9NTG9jYXRpb24qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9N
TG9jYXRpb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9MT0NBVElPTl9HRVRfUFJJVkFURShy
ZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTUxvY2F0aW9uUHJpdmF0ZSgpOworfQor
CitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfaHJlZihXZWJLaXRET01Mb2NhdGlvbiog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19MT0NBVElPTihzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6TG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aHJlZigpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfcHJvdG9jb2wo
V2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTE9D
QVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnByb3RvY29sKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X2xvY2F0aW9uX2dldF9ob3N0KFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpMb2NhdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5ob3N0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ob3N0bmFtZShXZWJLaXRET01Mb2NhdGlvbiog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19MT0NBVElPTihzZWxmKSwgMCk7Cisg
ICAgV2ViQ29yZTo6TG9jYXRpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aG9zdG5hbWUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3BvcnQo
V2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTE9D
QVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnBvcnQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbG9j
YXRpb25fZ2V0X3BhdGhuYW1lKFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpMb2NhdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5wYXRobmFtZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnY2hhciogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfc2VhcmNoKFdlYktpdERPTUxvY2F0aW9u
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0xPQ0FUSU9OKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpMb2NhdGlvbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zZWFyY2goKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hhc2go
V2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTE9D
QVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OkxvY2F0aW9uKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
Pmhhc2goKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbG9j
YXRpb25fZ2V0X29yaWdpbihXZWJLaXRET01Mb2NhdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19MT0NBVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TG9jYXRpb24q
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+b3JpZ2luKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTG9jYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9jYXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzYzYjc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01M
b2NhdGlvbi5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTUxvY2F0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NTG9jYXRp
b25faAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX0xPQ0FUSU9OICAgICAgICAgICAgKHdl
YmtpdF9kb21fbG9jYXRpb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9MT0NBVElP
TihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfTE9DQVRJT04sIFdlYktpdERPTUxvY2F0aW9uKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9MT0NBVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTE9DQVRJT04sIFdlYktpdERPTUxvY2F0aW9uQ2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfTE9DQVRJT04ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX0xPQ0FUSU9OKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19MT0NBVElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTE9DQVRJT04pKQorI2RlZmluZSBXRUJL
SVRfRE9NX0xPQ0FUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9MT0NBVElPTiwgV2ViS2l0RE9NTG9jYXRpb25DbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NTG9jYXRpb24geworICAgIFdlYktpdERPTU9iamVjdCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTUxvY2F0aW9uQ2xhc3Mgewor
ICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkg
R1R5cGUKK3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9sb2NhdGlvbl9nZXRfaHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Mb2NhdGlv
bgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfaHJlZihXZWJL
aXRET01Mb2NhdGlvbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRf
cHJvdG9jb2w6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTG9jYXRpb24KKyAqCisgKiBSZXR1cm5z
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
Y2hhcioKK3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3Byb3RvY29sKFdlYktpdERPTUxvY2F0aW9u
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ob3N0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTUxvY2F0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X2xvY2F0aW9uX2dldF9ob3N0KFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX2xvY2F0aW9uX2dldF9ob3N0bmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01M
b2NhdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfaG9z
dG5hbWUoV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbG9j
YXRpb25fZ2V0X3BvcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTG9jYXRpb24KKyAqCisgKiBS
ZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3BvcnQoV2ViS2l0RE9NTG9jYXRp
b24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X3BhdGhuYW1lOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTUxvY2F0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJr
aXRfZG9tX2xvY2F0aW9uX2dldF9wYXRobmFtZShXZWJLaXRET01Mb2NhdGlvbiogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfc2VhcmNoOgorICogQHNlbGY6IEEgI1dl
YktpdERPTUxvY2F0aW9uCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX2xvY2F0aW9u
X2dldF9zZWFyY2goV2ViS2l0RE9NTG9jYXRpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fbG9jYXRpb25fZ2V0X2hhc2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTG9jYXRpb24KKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbG9jYXRpb25fZ2V0X2hhc2goV2ViS2l0RE9N
TG9jYXRpb24qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbG9jYXRpb25fZ2V0X29yaWdp
bjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Mb2NhdGlvbgorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV9sb2NhdGlvbl9nZXRfb3JpZ2luKFdlYktpdERPTUxvY2F0aW9uKiBzZWxmKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTUxvY2F0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTG9j
YXRpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0aW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjM5ODdkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUxvY2F0
aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTG9jYXRpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NTG9jYXRpb25Qcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvTG9jYXRpb24uaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTG9jYXRpb24uaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitXZWJLaXRET01Mb2NhdGlvbiogd3JhcExvY2F0aW9uKFdlYkNvcmU6OkxvY2F0aW9uKik7
CitXZWJLaXRET01Mb2NhdGlvbioga2l0KFdlYkNvcmU6OkxvY2F0aW9uKik7CitXZWJDb3JlOjpM
b2NhdGlvbiogY29yZShXZWJLaXRET01Mb2NhdGlvbiopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvKiBXZWJLaXRET01Mb2NhdGlvblByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01NZWRpYUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRyb2xsZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzYwYjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU1lZGlhQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw2NTQgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01NZWRpYUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UaW1l
UmFuZ2VzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdF
QktJVF9ET01fTUVESUFfQ09OVFJPTExFUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9NRURJQV9DT05UUk9MTEVSLCBXZWJL
aXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
TWVkaWFDb250cm9sbGVyUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFJlZlB0cjxX
ZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXI+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQorfSBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlOworCisjaWYgRU5BQkxFKFZJ
REVPKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBr
aXQoV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpn
ZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTUVESUFfQ09OVFJPTExFUihyZXQp
OworCisgICAgcmV0dXJuIHdyYXBNZWRpYUNvbnRyb2xsZXIob2JqKTsKK30KKworV2ViQ29yZTo6
TWVkaWFDb250cm9sbGVyKiBjb3JlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhQ29udHJv
bGxlcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisK
K1dlYktpdERPTU1lZGlhQ29udHJvbGxlciogd3JhcE1lZGlhQ29udHJvbGxlcihXZWJDb3JlOjpN
ZWRpYUNvbnRyb2xsZXIqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXRUJLSVRfRE9NX01FRElBX0NPTlRST0xMRVIoZ19vYmplY3RfbmV3KFdFQktJ
VF9ET01fVFlQRV9NRURJQV9DT05UUk9MTEVSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFZJREVPKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2Rp
c3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50
KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29y
ZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9s
bGVyKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5k
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFy
Z2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdi
b29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbGxlciogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhQ29u
dHJvbGxlcio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJl
dHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JK
RUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShldmVu
dE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsKKyAgICBVTlVTRURfUEFSQU0odXNl
Q2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Ns
b3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlcio+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNv
cmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1v
dmVFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwg
aGFuZGxlciwgdXNlQ2FwdHVyZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwor
ICAgIFVOVVNFRF9QQVJBTShldmVudE5hbWUpOworICAgIFVOVVNFRF9QQVJBTShoYW5kbGVyKTsK
KyAgICBVTlVTRURfUEFSQU0odXNlQ2FwdHVyZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2Vi
S2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2
ZW50ID0gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2Rpc3BhdGNoX2V2ZW50OworICAgIGlm
YWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfYWRk
X2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIsIHdlYmtpdF9kb21f
bWVkaWFfY29udHJvbGxlciwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCwgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9CVUZGRVJFRCwKKyAg
ICBQUk9QX1NFRUtBQkxFLAorICAgIFBST1BfRFVSQVRJT04sCisgICAgUFJPUF9DVVJSRU5UX1RJ
TUUsCisgICAgUFJPUF9QQVVTRUQsCisgICAgUFJPUF9QTEFZRUQsCisgICAgUFJPUF9QTEFZQkFD
S19TVEFURSwKKyAgICBQUk9QX0RFRkFVTFRfUExBWUJBQ0tfUkFURSwKKyAgICBQUk9QX1BMQVlC
QUNLX1JBVEUsCisgICAgUFJPUF9WT0xVTUUsCisgICAgUFJPUF9NVVRFRCwKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fTUVESUFfQ09OVFJPTExFUl9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVj
dC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorICAgIHByaXYtPn5XZWJLaXRET01N
ZWRpYUNvbnRyb2xsZXJQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9t
ZWRpYV9jb250cm9sbGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYgPSBXRUJL
SVRfRE9NX01FRElBX0NPTlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9DVVJSRU5UX1RJTUU6CisgICAgICAgIHdlYmtpdF9kb21fbWVk
aWFfY29udHJvbGxlcl9zZXRfY3VycmVudF90aW1lKHNlbGYsIGdfdmFsdWVfZ2V0X2RvdWJsZSh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVGQVVMVF9QTEFZQkFDS19S
QVRFOgorICAgICAgICB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X2RlZmF1bHRfcGxh
eWJhY2tfcmF0ZShzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1BMQVlCQUNLX1JBVEU6CisgICAgICAgIHdlYmtpdF9kb21fbWVk
aWFfY29udHJvbGxlcl9zZXRfcGxheWJhY2tfcmF0ZShzZWxmLCBnX3ZhbHVlX2dldF9kb3VibGUo
dmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZPTFVNRToKKyAgICAgICAg
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF92b2x1bWUoc2VsZiwgZ192YWx1ZV9nZXRf
ZG91YmxlKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9N
VVRFRDoKKyAgICAgICAgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9tdXRlZChzZWxm
LCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmID0gV0VCS0lUX0RPTV9NRURJQV9D
T05UUk9MTEVSKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfQlVGRkVSRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0
X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9idWZmZXJlZChzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9TRUVLQUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3NlZWthYmxlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RVUkFUSU9OOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfZHVyYXRpb24o
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VSUkVOVF9USU1FOgorICAg
ICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxl
cl9nZXRfY3VycmVudF90aW1lKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1BBVVNFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9t
ZWRpYV9jb250cm9sbGVyX2dldF9wYXVzZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfUExBWUVEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGxheWVkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1BMQVlCQUNLX1NUQVRFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXliYWNrX3N0YXRl
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFRkFVTFRfUExBWUJBQ0tf
UkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlh
X2NvbnRyb2xsZXJfZ2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZShzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9QTEFZQkFDS19SQVRFOgorICAgICAgICBnX3ZhbHVlX3NldF9k
b3VibGUodmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGxheWJhY2tfcmF0
ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WT0xVTUU6CisgICAgICAg
IGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dl
dF92b2x1bWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTVVURUQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl9nZXRfbXV0ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdl
YmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0
UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fTUVESUFfQ09OVFJPTExFUl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYt
PmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9tZWRpYV9jb250cm9sbGVyX2NsYXNzX2luaXQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVy
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGUp
KTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9tZWRpYV9jb250
cm9sbGVyX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X3Byb3BlcnR5OworICAgIGdv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dl
dF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CVUZGRVJFRCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJidWZmZXJlZCIsCisgICAgICAgICAgICAiTWVk
aWFDb250cm9sbGVyOmJ1ZmZlcmVkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9N
VGltZVJhbmdlcyogTWVkaWFDb250cm9sbGVyOmJ1ZmZlcmVkIiwKKyAgICAgICAgICAgIFdFQktJ
VF9ET01fVFlQRV9USU1FX1JBTkdFUywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1NFRUtBQkxFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgInNlZWthYmxlIiwKKyAgICAgICAgICAgICJNZWRpYUNvbnRy
b2xsZXI6c2Vla2FibGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01UaW1lUmFu
Z2VzKiBNZWRpYUNvbnRyb2xsZXI6c2Vla2FibGUiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX1RJTUVfUkFOR0VTLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfRFVSQVRJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUo
CisgICAgICAgICAgICAiZHVyYXRpb24iLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpk
dXJhdGlvbiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgTWVkaWFDb250cm9sbGVy
OmR1cmF0aW9uIiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9D
VVJSRU5UX1RJTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAi
Y3VycmVudC10aW1lIiwKKyAgICAgICAgICAgICJNZWRpYUNvbnRyb2xsZXI6Y3VycmVudC10aW1l
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgTWVkaWFDb250cm9sbGVyOmN1cnJl
bnQtdGltZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BB
VVNFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicGF1c2Vk
IiwKKyAgICAgICAgICAgICJNZWRpYUNvbnRyb2xsZXI6cGF1c2VkIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2Jvb2xlYW4gTWVkaWFDb250cm9sbGVyOnBhdXNlZCIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1BMQVlFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAg
ICJwbGF5ZWQiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpwbGF5ZWQiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01UaW1lUmFuZ2VzKiBNZWRpYUNvbnRyb2xsZXI6cGxh
eWVkIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9USU1FX1JBTkdFUywKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BMQVlCQUNL
X1NUQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInBsYXli
YWNrLXN0YXRlIiwKKyAgICAgICAgICAgICJNZWRpYUNvbnRyb2xsZXI6cGxheWJhY2stc3RhdGUi
LAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTWVkaWFDb250cm9sbGVyOnBsYXliYWNr
LXN0YXRlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVF9QTEFZQkFDS19SQVRFLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImRlZmF1bHQtcGxheWJhY2stcmF0
ZSIsCisgICAgICAgICAgICAiTWVkaWFDb250cm9sbGVyOmRlZmF1bHQtcGxheWJhY2stcmF0ZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnZG91YmxlIE1lZGlhQ29udHJvbGxlcjpkZWZhdWx0
LXBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9QTEFZQkFDS19SQVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAg
ICAgICAgInBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgIk1lZGlhQ29udHJvbGxlcjpwbGF5
YmFjay1yYXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgTWVkaWFDb250cm9s
bGVyOnBsYXliYWNrLXJhdGUiLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJM
RSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9WT0xVTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAg
ICAidm9sdW1lIiwKKyAgICAgICAgICAgICJNZWRpYUNvbnRyb2xsZXI6dm9sdW1lIiwKKyAgICAg
ICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgTWVkaWFDb250cm9sbGVyOnZvbHVtZSIsCisgICAg
ICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX01VVEVELAorICAgICAgICBn
X3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJtdXRlZCIsCisgICAgICAgICAgICAi
TWVkaWFDb250cm9sbGVyOm11dGVkIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdib29sZWFu
IE1lZGlhQ29udHJvbGxlcjptdXRlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfaW5pdChXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHJlcXVlc3Qp
Cit7CisgICAgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fTUVESUFfQ09OVFJPTExFUl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYp
IFdlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGUoKTsKK30KKwordm9pZCB3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfcGxheShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExF
UihzZWxmKSk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnBsYXkoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9jb250cm9s
bGVyX3BhdXNlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9DT05UUk9MTEVSKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+cGF1c2UoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUo
VklERU8pICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3VucGF1c2Uo
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZikpOworICAgIFdlYkNvcmU6
Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT51
bnBhdXNlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAq
LworfQorCitXZWJLaXRET01UaW1lUmFuZ2VzKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJf
Z2V0X2J1ZmZlcmVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1lUmFuZ2VzPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+YnVmZmVyZWQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiAwOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKworV2ViS2l0RE9NVGltZVJhbmdlcyogd2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9zZWVrYWJsZShXZWJLaXRET01NZWRpYUNvbnRy
b2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX01FRElBX0NPTlRST0xMRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJv
bGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGlt
ZVJhbmdlcz4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlZWthYmxlKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisK
K2dkb3VibGUgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9kdXJhdGlvbihXZWJLaXRE
T01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6
Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91Ymxl
IHJlc3VsdCA9IGl0ZW0tPmR1cmF0aW9uKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fbWVkaWFfY29udHJv
bGxlcl9nZXRfY3VycmVudF90aW1lKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJP
TExFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+Y3VycmVudFRpbWUo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisK
K3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9jdXJyZW50X3RpbWUoV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmLCBnZG91YmxlIHZhbHVlKQoreworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZikpOworICAg
IFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRDdXJyZW50VGltZSh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2di
b29sZWFuIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGF1c2VkKFdlYktpdERPTU1l
ZGlhQ29udHJvbGxlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6
Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5wYXVzZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCitXZWJLaXRET01UaW1lUmFuZ2VzKiB3ZWJraXRfZG9t
X21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXllZChXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElB
X0NPTlRST0xMRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGltZVJhbmdlcz4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnBsYXllZCgpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisg
ICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnY2hhciogd2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wbGF5YmFja19zdGF0ZShXZWJLaXRET01NZWRp
YUNvbnRyb2xsZXIqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlh
Q29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wbGF5YmFja1N0YXRlKCkpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxl
cl9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFf
Q09OVFJPTExFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+ZGVmYXVs
dFBsYXliYWNrUmF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShW
SURFTykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X2RlZmF1
bHRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYsIGdkb3VibGUg
dmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFf
Q09OVFJPTExFUihzZWxmKSk7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldERlZmF1bHRQbGF5YmFja1JhdGUodmFs
dWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5k
aWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fbWVkaWFfY29u
dHJvbGxlcl9nZXRfcGxheWJhY2tfcmF0ZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NP
TlRST0xMRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnBsYXliYWNr
UmF0ZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8K
K30KKwordm9pZCB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X3BsYXliYWNrX3JhdGUo
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmLCBnZG91YmxlIHZhbHVlKQoreworI2lmIEVO
QUJMRShWSURFTykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZikp
OworICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXRQbGF5YmFja1JhdGUodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLwor
fQorCitnZG91YmxlIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfdm9sdW1lKFdlYktp
dERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3Vi
bGUgcmVzdWx0ID0gaXRlbS0+dm9sdW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxl
cl9zZXRfdm9sdW1lKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZiwgZ2RvdWJsZSB2YWx1
ZSwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTUVESUFfQ09OVFJPTExFUihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJy
b3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6TWVkaWFDb250cm9sbGVyKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGl0ZW0tPnNldFZvbHVtZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9y
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisjZW5kaWYg
LyogRU5BQkxFKFZJREVPKSAqLworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX21lZGlhX2NvbnRy
b2xsZXJfZ2V0X211dGVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfQ09OVFJPTExFUihz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok1lZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tdXRlZCgpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9tdXRlZChXZWJLaXRET01NZWRpYUNvbnRy
b2xsZXIqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJMRShWSURFTykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRST0xMRVIoc2VsZikpOworICAgIFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbGxlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRN
dXRlZCh2YWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVv
IikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjljNDkxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlh
Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTU1lZGlhQ29udHJvbGxlcl9oCisjZGVmaW5lIFdlYktp
dERPTU1lZGlhQ29udHJvbGxlcl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9B
UEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3Rh
YmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTUVESUFf
Q09OVFJPTExFUiAgICAgICAgICAgICh3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9DT05UUk9MTEVSKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJ
QV9DT05UUk9MTEVSLCBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIpKQorI2RlZmluZSBXRUJLSVRf
RE9NX01FRElBX0NPTlRST0xMRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0NPTlRST0xMRVIsIFdlYktpdERP
TU1lZGlhQ29udHJvbGxlckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX0NPTlRS
T0xMRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX01FRElBX0NPTlRST0xMRVIpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01F
RElBX0NPTlRST0xMRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0NPTlRST0xMRVIpKQorI2RlZmluZSBXRUJLSVRf
RE9NX01FRElBX0NPTlRST0xMRVJfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0NPTlRST0xMRVIsIFdlYktpdERP
TU1lZGlhQ29udHJvbGxlckNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXIgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdERPTU1lZGlhQ29udHJvbGxlckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX21lZGlh
X2NvbnRyb2xsZXJfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9j
b250cm9sbGVyX3BsYXk6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fbWVkaWFfY29udHJvbGxlcl9wbGF5KFdlYktpdERPTU1lZGlhQ29udHJvbGxlciogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3BhdXNlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfcGF1c2Uo
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21l
ZGlhX2NvbnRyb2xsZXJfdW5wYXVzZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRy
b2xsZXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3VucGF1c2UoV2ViS2l0RE9NTWVkaWFDb250cm9s
bGVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2J1
ZmZlcmVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NVGltZVJhbmdlcworICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UaW1lUmFuZ2VzKgor
d2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9idWZmZXJlZChXZWJLaXRET01NZWRpYUNv
bnRyb2xsZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9n
ZXRfc2Vla2FibGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UaW1lUmFuZ2VzCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRpbWVSYW5n
ZXMqCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3NlZWthYmxlKFdlYktpdERPTU1l
ZGlhQ29udHJvbGxlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9s
bGVyX2dldF9kdXJhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIK
KyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRf
ZHVyYXRpb24oV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2N1cnJlbnRfdGltZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91YmxlCisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9k
b21fbWVkaWFfY29udHJvbGxlcl9nZXRfY3VycmVudF90aW1lKFdlYktpdERPTU1lZGlhQ29udHJv
bGxlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9j
dXJyZW50X3RpbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKiBA
dmFsdWU6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9jdXJyZW50X3RpbWUo
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmLCBnZG91YmxlIHZhbHVlKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BhdXNlZDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wYXVzZWQoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVy
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X3BsYXll
ZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGltZVJhbmdlcyoKK3dlYmtp
dF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGxheWVkKFdlYktpdERPTU1lZGlhQ29udHJvbGxl
ciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9wbGF5
YmFja19zdGF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfcGxheWJhY2tf
c3RhdGUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX21lZGlhX2NvbnRyb2xsZXJfZ2V0X2RlZmF1bHRfcGxheWJhY2tfcmF0ZToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91Ymxl
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dl
YmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9nZXRfZGVmYXVsdF9wbGF5YmFja19yYXRlKFdlYktp
dERPTU1lZGlhQ29udHJvbGxlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9j
b250cm9sbGVyX3NldF9kZWZhdWx0X3BsYXliYWNrX3JhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyCisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxp
dHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9tZWRpYV9jb250
cm9sbGVyX3NldF9kZWZhdWx0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVy
KiBzZWxmLCBnZG91YmxlIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRy
b2xsZXJfZ2V0X3BsYXliYWNrX3JhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250
cm9sbGVyCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xs
ZXJfZ2V0X3BsYXliYWNrX3JhdGUoV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2NvbnRyb2xsZXJfc2V0X3BsYXliYWNrX3JhdGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKiBAdmFsdWU6IEEgI2dkb3Vi
bGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF9wbGF5YmFja19yYXRlKFdlYktpdERPTU1lZGlh
Q29udHJvbGxlciogc2VsZiwgZ2RvdWJsZSB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9t
ZWRpYV9jb250cm9sbGVyX2dldF92b2x1bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFD
b250cm9sbGVyCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX21lZGlhX2NvbnRy
b2xsZXJfZ2V0X3ZvbHVtZShXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfdm9sdW1lOgorICogQHNlbGY6IEEg
I1dlYktpdERPTU1lZGlhQ29udHJvbGxlcgorICogQHZhbHVlOiBBICNnZG91YmxlCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX3NldF92b2x1bWUoV2ViS2l0RE9NTWVk
aWFDb250cm9sbGVyKiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8q
KgorICogd2Via2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9tdXRlZDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9tZWRpYV9jb250cm9sbGVyX2dldF9tdXRlZChXZWJLaXRET01NZWRpYUNvbnRyb2xs
ZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfbXV0
ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyCisgKiBAdmFsdWU6IEEg
I2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fbWVkaWFfY29udHJvbGxlcl9zZXRfbXV0ZWQoV2ViS2l0RE9NTWVkaWFD
b250cm9sbGVyKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01N
ZWRpYUNvbnRyb2xsZXJfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU1lZGlhQ29udHJvbGxlclByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mMGRhMjdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUNv
bnRyb2xsZXJQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL01lZGlhQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01NZWRp
YUNvbnRyb2xsZXIuaD4KKyNpZiBFTkFCTEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQgewor
V2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiB3cmFwTWVkaWFDb250cm9sbGVyKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbGxlciopOworV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyKiBraXQoV2ViQ29yZTo6
TWVkaWFDb250cm9sbGVyKik7CitXZWJDb3JlOjpNZWRpYUNvbnRyb2xsZXIqIGNvcmUoV2ViS2l0
RE9NTWVkaWFDb250cm9sbGVyKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IEVOQUJMRShWSURFTykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlhQ29udHJvbGxlclBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYURldmljZXMuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YURldmljZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDc3OGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNlcy5jcHAKQEAgLTAsMCArMSwxMjYg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01NZWRpYURldmljZXMuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01NZWRp
YURldmljZXNQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRl
ZENvbnN0cmFpbnRzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0RFVklD
RVNfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJL
SVRfRE9NX1RZUEVfTUVESUFfREVWSUNFUywgV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhRGV2aWNlc1ByaXZhdGUgeworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCisgICAgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhRGV2aWNlcz4gY29y
ZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorfSBXZWJLaXRET01NZWRp
YURldmljZXNQcml2YXRlOworCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1dlYktpdERPTU1lZGlhRGV2aWNlcyoga2l0KFdlYkNvcmU6Ok1lZGlhRGV2
aWNlcyogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
IChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVy
biBXRUJLSVRfRE9NX01FRElBX0RFVklDRVMocmV0KTsKKworICAgIHJldHVybiB3cmFwTWVkaWFE
ZXZpY2VzKG9iaik7Cit9CisKK1dlYkNvcmU6Ok1lZGlhRGV2aWNlcyogY29yZShXZWJLaXRET01N
ZWRpYURldmljZXMqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpNZWRpYURldmljZXMqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01NZWRpYURldmljZXMqIHdyYXBNZWRpYURldmlj
ZXMoV2ViQ29yZTo6TWVkaWFEZXZpY2VzKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9NRURJQV9ERVZJQ0VTKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfTUVESUFfREVWSUNFUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TVFJFQU0pCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTWVkaWFEZXZpY2Vz
LCB3ZWJraXRfZG9tX21lZGlhX2RldmljZXMsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfZGV2aWNlc19maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fTUVESUFfREVWSUNFU19HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgcHJpdi0+fldl
YktpdERPTU1lZGlhRGV2aWNlc1ByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX21lZGlhX2RldmljZXNfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKwor
c3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fbWVkaWFfZGV2aWNlc19jb25zdHJ1Y3RvcihHVHlw
ZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQ
YXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX21lZGlhX2RldmljZXNfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIFdlYktpdERPTU1lZGlhRGV2aWNlc1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX0RFVklDRVNfR0VUX1BSSVZBVEUob2JqZWN0
KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFEZXZp
Y2VzKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7Cisj
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX2RldmljZXNfY2xhc3NfaW5pdChXZWJLaXRET01N
ZWRpYURldmljZXNDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29i
amVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NTWVkaWFEZXZpY2Vz
UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX21l
ZGlhX2RldmljZXNfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9kb21fbWVkaWFfZGV2aWNlc19maW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9tZWRpYV9kZXZpY2VzX2luaXQoV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiByZXF1ZXN0KQor
eworICAgIFdlYktpdERPTU1lZGlhRGV2aWNlc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01F
RElBX0RFVklDRVNfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRE
T01NZWRpYURldmljZXNQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0
ZWRDb25zdHJhaW50cyogd2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX2dldF9zdXBwb3J0ZWRfY29u
c3RyYWludHMoV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiBzZWxmKQoreworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFfREVWSUNFUyhzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6TWVkaWFEZXZpY2VzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHM+IGdv
YmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRTdXBwb3J0ZWRDb25zdHJhaW50cygp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJNZWRpYSBTdHJlYW0iKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShNRURJ
QV9TVFJFQU0pICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YURldmljZXMuaApzaW1pbGFyaXR5IGluZGV4IDUwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQu
aApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01NZWRpYURldmljZXMuaAppbmRleCA4Yzc2NjY4Li5lOTFjNTg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRGV2aWNlcy5oCkBAIC0x
OCw4ICsxOCw4IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRfaAotI2RlZmluZSBXZWJLaXRET01UZXN0RXZl
bnRUYXJnZXRfaAorI2lmbmRlZiBXZWJLaXRET01NZWRpYURldmljZXNfaAorI2RlZmluZSBXZWJL
aXRET01NZWRpYURldmljZXNfaAogCiAjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
CiAKQEAgLTI5LDM3ICsyOSwzNiBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKLSNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX1RFU1RfRVZFTlRfVEFSR0VUICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9l
dmVudF90YXJnZXRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RB
UkdFVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9UQVJHRVQsIFdlYktpdERPTVRlc3RFdmVudFRhcmdl
dCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVRfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1Rf
RVZFTlRfVEFSR0VULCBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRDbGFzcykKLSNkZWZpbmUgV0VC
S0lUX0RPTV9JU19URVNUX0VWRU5UX1RBUkdFVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9FVkVOVF9UQVJHRVQpKQot
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfRVZFTlRfVEFSR0VUX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX0VWRU5U
X1RBUkdFVCkpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVRfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfRVZFTlRfVEFSR0VULCBXZWJLaXRET01UZXN0RXZlbnRUYXJnZXRDbGFzcykpCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9NRURJQV9ERVZJQ0VTICAgICAgICAgICAgKHdlYmtpdF9kb21f
bWVkaWFfZGV2aWNlc19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0RFVklD
RVMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX01FRElBX0RFVklDRVMsIFdlYktpdERPTU1lZGlhRGV2aWNlcykpCisjZGVm
aW5lIFdFQktJVF9ET01fTUVESUFfREVWSUNFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfREVWSUNFUywgV2Vi
S2l0RE9NTWVkaWFEZXZpY2VzQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfREVW
SUNFUyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfTUVESUFfREVWSUNFUykpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFf
REVWSUNFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfRE9NX1RZUEVfTUVESUFfREVWSUNFUykpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFf
REVWSUNFU19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiks
ICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfREVWSUNFUywgV2ViS2l0RE9NTWVkaWFEZXZpY2VzQ2xh
c3MpKQogCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RFdmVudFRhcmdldCB7CitzdHJ1Y3QgX1dlYktp
dERPTU1lZGlhRGV2aWNlcyB7CiAgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
IH07CiAKLXN0cnVjdCBfV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0Q2xhc3Mgeworc3RydWN0IF9X
ZWJLaXRET01NZWRpYURldmljZXNDbGFzcyB7CiAgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X2RvbV90ZXN0X2V2ZW50
X3RhcmdldF9nZXRfdHlwZSh2b2lkKTsKK3dlYmtpdF9kb21fbWVkaWFfZGV2aWNlc19nZXRfdHlw
ZSh2b2lkKTsKIAogLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW06Ci0g
KiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0Ci0gKiBAaW5kZXg6IEEgI2d1bG9u
ZworICogd2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX2dldF9zdXBwb3J0ZWRfY29uc3RyYWludHM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFEZXZpY2VzCiAgKgotICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cwogICoKICAqIFN0
YWJpbGl0eTogVW5zdGFibGUKICoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgotd2Via2l0
X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9pdGVtKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogc2Vs
ZiwgZ3Vsb25nIGluZGV4KTsKK1dFQktJVF9BUEkgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRl
ZENvbnN0cmFpbnRzKgord2Via2l0X2RvbV9tZWRpYV9kZXZpY2VzX2dldF9zdXBwb3J0ZWRfY29u
c3RyYWludHMoV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiBzZWxmKTsKIAogR19FTkRfREVDTFMKIAog
I2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktp
dERPTVRlc3RFdmVudFRhcmdldF9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFEZXZpY2Vz
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRp
YURldmljZXNQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Zj
MTYxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0RE9NTWVkaWFEZXZpY2VzUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU1lZGlhRGV2aWNl
c1ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYURldmljZXMuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NTWVkaWFEZXZpY2VzLmg+CisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01NZWRpYURldmljZXMqIHdyYXBN
ZWRpYURldmljZXMoV2ViQ29yZTo6TWVkaWFEZXZpY2VzKik7CitXZWJLaXRET01NZWRpYURldmlj
ZXMqIGtpdChXZWJDb3JlOjpNZWRpYURldmljZXMqKTsKK1dlYkNvcmU6Ok1lZGlhRGV2aWNlcyog
Y29yZShXZWJLaXRET01NZWRpYURldmljZXMqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLyogRU5BQkxFKE1FRElBX1NUUkVBTSkgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTU1l
ZGlhRGV2aWNlc1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUVycm9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTWVkaWFFcnJvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OWMwZGI3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFFcnJvci5jcHAKQEAgLTAsMCAr
MSwxNTYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYUVycm9yLmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9N
TWVkaWFFcnJvclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5j
bHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9FUlJPUl9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9NRURJQV9FUlJPUiwgV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGUpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIFJlZlB0cjxXZWJDb3JlOjpNZWRpYUVycm9yPiBjb3JlT2JqZWN0OworI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKK30gV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGU7CisKKyNpZiBFTkFC
TEUoVklERU8pCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01NZWRpYUVycm9yKiBr
aXQoV2ViQ29yZTo6TWVkaWFFcnJvciogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9i
aikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX01FRElBX0VSUk9SKHJldCk7CisKKyAgICBy
ZXR1cm4gd3JhcE1lZGlhRXJyb3Iob2JqKTsKK30KKworV2ViQ29yZTo6TWVkaWFFcnJvciogY29y
ZShXZWJLaXRET01NZWRpYUVycm9yKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFFcnJvcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTU1lZGlhRXJyb3IqIHdyYXBNZWRp
YUVycm9yKFdlYkNvcmU6Ok1lZGlhRXJyb3IqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX01FRElBX0VSUk9SKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfTUVESUFfRVJST1IsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoVklERU8pCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTWVkaWFFcnJvciwgd2Via2l0X2Rv
bV9tZWRpYV9lcnJvciwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJP
UF8wLAorICAgIFBST1BfQ09ERSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFf
ZXJyb3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU1lZGlhRXJy
b3JQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9FUlJPUl9HRVRfUFJJVkFURShvYmpl
Y3QpOworI2lmIEVOQUJMRShWSURFTykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3Jn
ZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorICAg
IHByaXYtPn5XZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fbWVkaWFfZXJyb3JfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9lcnJvcl9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01NZWRpYUVycm9yKiBzZWxmID0gV0VCS0lUX0RPTV9N
RURJQV9FUlJPUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX0NPREU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21f
bWVkaWFfZXJyb3JfZ2V0X2NvZGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmpl
Y3QqIHdlYmtpdF9kb21fbWVkaWFfZXJyb3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVj
dFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV9tZWRpYV9lcnJvcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShW
SURFTykKKyAgICBXZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
TUVESUFfRVJST1JfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVkaWFFcnJvcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVj
dCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5j
b3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2Ns
YXNzX2luaXQoV2ViS2l0RE9NTWVkaWFFcnJvckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJL
aXRET01NZWRpYUVycm9yUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3Ig
PSB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfZG9tX21lZGlhX2Vycm9yX2ZpbmFsaXplOworICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9tZWRpYV9lcnJvcl9nZXRfcHJvcGVydHk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfQ09ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisg
ICAgICAgICAgICAiY29kZSIsCisgICAgICAgICAgICAiTWVkaWFFcnJvcjpjb2RlIiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ3VzaG9ydCBNZWRpYUVycm9yOmNvZGUiLAorICAgICAgICAgICAg
MCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV9lcnJvcl9pbml0KFdlYktpdERPTU1l
ZGlhRXJyb3IqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX01FRElBX0VSUk9SX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5l
dyAocHJpdikgV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGUoKTsKK30KKworZ3VzaG9ydCB3ZWJr
aXRfZG9tX21lZGlhX2Vycm9yX2dldF9jb2RlKFdlYktpdERPTU1lZGlhRXJyb3IqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0VSUk9S
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUVycm9yKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+Y29kZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1c2hv
cnQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01NZWRpYUVycm9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlhRXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lZTZlNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUVycm9y
LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01NZWRpYUVycm9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVkaWFFcnJvcl9o
CisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVD
TFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTUVESUFfRVJST1IgICAgICAgICAgICAod2Vi
a2l0X2RvbV9tZWRpYV9lcnJvcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElB
X0VSUk9SKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9NRURJQV9FUlJPUiwgV2ViS2l0RE9NTWVkaWFFcnJvcikpCisjZGVm
aW5lIFdFQktJVF9ET01fTUVESUFfRVJST1JfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX0VSUk9SLCBXZWJLaXRE
T01NZWRpYUVycm9yQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfRVJST1Iob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX01FRElBX0VSUk9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19NRURJQV9FUlJPUl9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfTUVESUFfRVJST1IpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX0VSUk9SX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9NRURJQV9FUlJPUiwgV2ViS2l0RE9NTWVkaWFFcnJvckNsYXNzKSkKKworLyoqCisgKiBXRUJL
SVRfRE9NX01FRElBX0VSUk9SX01FRElBX0VSUl9BQk9SVEVEOgorICovCisjZGVmaW5lIFdFQktJ
VF9ET01fTUVESUFfRVJST1JfTUVESUFfRVJSX0FCT1JURUQgMQorCisvKioKKyAqIFdFQktJVF9E
T01fTUVESUFfRVJST1JfTUVESUFfRVJSX05FVFdPUks6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9NRURJQV9FUlJPUl9NRURJQV9FUlJfTkVUV09SSyAyCisKKy8qKgorICogV0VCS0lUX0RPTV9N
RURJQV9FUlJPUl9NRURJQV9FUlJfREVDT0RFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTUVE
SUFfRVJST1JfTUVESUFfRVJSX0RFQ09ERSAzCisKKy8qKgorICogV0VCS0lUX0RPTV9NRURJQV9F
UlJPUl9NRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURUQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RP
TV9NRURJQV9FUlJPUl9NRURJQV9FUlJfU1JDX05PVF9TVVBQT1JURUQgNAorCitzdHJ1Y3QgX1dl
YktpdERPTU1lZGlhRXJyb3IgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTU1lZGlhRXJyb3JDbGFzcyB7CisgICAgV2ViS2l0RE9N
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2RvbV9tZWRpYV9lcnJvcl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21l
ZGlhX2Vycm9yX2dldF9jb2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhRXJyb3IKKyAq
CisgKiBSZXR1cm5zOiBBICNndXNob3J0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGd1c2hvcnQKK3dlYmtpdF9kb21fbWVkaWFfZXJyb3JfZ2V0X2NvZGUoV2Vi
S2l0RE9NTWVkaWFFcnJvciogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYUVycm9y
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFFcnJvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFF
cnJvclByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGNiZTBi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
TWVkaWFFcnJvclByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01NZWRpYUVycm9yUHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhRXJyb3IuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NTWVkaWFFcnJvci5oPgorI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01NZWRpYUVycm9yKiB3cmFwTWVkaWFFcnJvcihXZWJDb3JlOjpNZWRp
YUVycm9yKik7CitXZWJLaXRET01NZWRpYUVycm9yKiBraXQoV2ViQ29yZTo6TWVkaWFFcnJvciop
OworV2ViQ29yZTo6TWVkaWFFcnJvciogY29yZShXZWJLaXRET01NZWRpYUVycm9yKik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KKworI2VuZGlm
IC8qIFdlYktpdERPTU1lZGlhRXJyb3JQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVk
aWFMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NTWVkaWFMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi44Mzg5Njc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3QuY3Bw
CkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFMaXN0LmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX01FRElB
X0xJU1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfTUVESUFfTElTVCwgV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhTGlzdFByaXZhdGUgeworICAgIFJlZlB0cjxX
ZWJDb3JlOjpNZWRpYUxpc3Q+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTU1lZGlhTGlzdFByaXZh
dGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01NZWRpYUxpc3QqIGtpdChXZWJD
b3JlOjpNZWRpYUxpc3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9NRURJQV9MSVNUKHJldCk7CisKKyAgICByZXR1cm4gd3Jh
cE1lZGlhTGlzdChvYmopOworfQorCitXZWJDb3JlOjpNZWRpYUxpc3QqIGNvcmUoV2ViS2l0RE9N
TWVkaWFMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6TWVkaWFMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpIDogMDsKK30KKworV2ViS2l0RE9NTWVkaWFMaXN0KiB3cmFwTWVkaWFMaXN0KFdlYkNvcmU6
Ok1lZGlhTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fTUVESUFfTElTVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBF
X01FRElBX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NTWVkaWFMaXN0
LCB3ZWJraXRfZG9tX21lZGlhX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX01FRElBX1RFWFQsCisgICAgUFJPUF9MRU5HVEgsCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX2xpc3RfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQoreworICAgIFdlYktpdERPTU1lZGlhTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX01FRElBX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5X
ZWJLaXRET01NZWRpYUxpc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rv
bV9tZWRpYV9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYgPSBXRUJLSVRfRE9NX01FRElBX0xJ
U1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9N
RURJQV9URVhUOgorICAgICAgICB3ZWJraXRfZG9tX21lZGlhX2xpc3Rfc2V0X21lZGlhX3RleHQo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0RE9NTWVkaWFMaXN0KiBzZWxmID0gV0VCS0lUX0RPTV9NRURJQV9M
SVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1Bf
TUVESUFfVEVYVDoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rv
bV9tZWRpYV9saXN0X2dldF9tZWRpYV90ZXh0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtp
dF9kb21fbWVkaWFfbGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyBHT2JqZWN0KiB3ZWJraXRfZG9tX21lZGlhX2xpc3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwg
Z3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNv
bnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV9tZWRpYV9saXN0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUs
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBX
ZWJLaXRET01NZWRpYUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRURJQV9MSVNUX0dF
VF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6Ok1lZGlhTGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9tZWRpYV9saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NTWVkaWFMaXN0Q2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RD
bGFzcywgc2l6ZW9mKFdlYktpdERPTU1lZGlhTGlzdFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9tZWRpYV9saXN0X2NvbnN0cnVjdG9yOworICAg
IGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX21lZGlhX2xpc3RfZmluYWxpemU7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX21lZGlhX2xpc3Rf
c2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV9tZWRpYV9saXN0X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NRURJQV9URVhU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIm1lZGlhLXRleHQi
LAorICAgICAgICAgICAgIk1lZGlhTGlzdDptZWRpYS10ZXh0IiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdjaGFyKiBNZWRpYUxpc3Q6bWVkaWEtdGV4dCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
RU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgi
LAorICAgICAgICAgICAgIk1lZGlhTGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWxvbmcgTWVkaWFMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV9tZWRpYV9saXN0X2luaXQoV2ViS2l0RE9NTWVkaWFMaXN0KiByZXF1ZXN0
KQoreworICAgIFdlYktpdERPTU1lZGlhTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01F
RElBX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01N
ZWRpYUxpc3RQcml2YXRlKCk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX21lZGlhX2xpc3RfaXRl
bShXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19NRURJQV9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYUxp
c3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoaXRlbS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9saXN0X2RlbGV0ZV9tZWRpdW0oV2ViS2l0RE9NTWVk
aWFMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogb2xkTWVkaXVtLCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0xJU1Qoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwob2xkTWVkaXVtKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
KTsKKyAgICBXZWJDb3JlOjpNZWRpYUxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkT2xkTWVkaXVtID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KG9sZE1lZGl1bSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRl
bS0+ZGVsZXRlTWVkaXVtKGNvbnZlcnRlZE9sZE1lZGl1bSwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZCB3
ZWJraXRfZG9tX21lZGlhX2xpc3RfYXBwZW5kX21lZGl1bShXZWJLaXRET01NZWRpYUxpc3QqIHNl
bGYsIGNvbnN0IGdjaGFyKiBuZXdNZWRpdW0sIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTUVESUFfTElTVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChuZXdN
ZWRpdW0pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdl
YkNvcmU6Ok1lZGlhTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWROZXdNZWRpdW0gPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmV3TWVkaXVt
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5hcHBlbmRN
ZWRpdW0oY29udmVydGVkTmV3TWVkaXVtLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhciogd2Via2l0X2Rv
bV9tZWRpYV9saXN0X2dldF9tZWRpYV90ZXh0KFdlYktpdERPTU1lZGlhTGlzdCogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NRURJQV9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpNZWRpYUxpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bWVkaWFUZXh0KCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9tZWRpYV9saXN0X3NldF9tZWRpYV90ZXh0
KFdlYktpdERPTU1lZGlhTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0xJU1Qoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEq
ZXJyb3IpOworICAgIFdlYkNvcmU6Ok1lZGlhTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+
c2V0TWVkaWFUZXh0KGNvbnZlcnRlZFZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitndWxvbmcgd2Via2l0
X2RvbV9tZWRpYV9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NTWVkaWFMaXN0KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01FRElBX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNv
cmU6Ok1lZGlhTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVz
dWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01NZWRpYUxpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2UyOTU4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFM
aXN0LmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElO
R19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGlu
Y2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTU1lZGlhTGlzdF9o
CisjZGVmaW5lIFdlYktpdERPTU1lZGlhTGlzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX01FRElBX0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV9tZWRpYV9saXN0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFfTElTVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTUVE
SUFfTElTVCwgV2ViS2l0RE9NTWVkaWFMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9M
SVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9NRURJQV9MSVNULCBXZWJLaXRET01NZWRpYUxpc3RDbGFzcykKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19NRURJQV9MSVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9MSVNUKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19NRURJQV9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9NRURJQV9MSVNUKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9NRURJQV9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9NRURJQV9MSVNULCBXZWJLaXRET01NZWRpYUxp
c3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFMaXN0IHsKKyAgICBXZWJLaXRET01P
YmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01NZWRpYUxpc3RD
bGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VC
S0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9tZWRpYV9saXN0X2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21fbWVkaWFfbGlzdF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERP
TU1lZGlhTGlzdAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hh
cgorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9tZWRpYV9saXN0X2l0ZW0oV2Vi
S2l0RE9NTWVkaWFMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9k
b21fbWVkaWFfbGlzdF9kZWxldGVfbWVkaXVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlh
TGlzdAorICogQG9sZE1lZGl1bTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX21lZGlhX2xpc3RfZGVsZXRlX21lZGl1bShX
ZWJLaXRET01NZWRpYUxpc3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBvbGRNZWRpdW0sIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2xpc3RfYXBwZW5kX21lZGl1bToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01NZWRpYUxpc3QKKyAqIEBuZXdNZWRpdW06IEEgI2djaGFy
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9tZWRpYV9saXN0X2FwcGVuZF9tZWRpdW0oV2ViS2l0RE9NTWVkaWFMaXN0KiBzZWxmLCBjb25z
dCBnY2hhciogbmV3TWVkaXVtLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9tZWRpYV9saXN0X2dldF9tZWRpYV90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlh
TGlzdAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX21lZGlhX2xpc3RfZ2V0X21lZGlhX3RleHQoV2ViS2l0RE9NTWVkaWFMaXN0KiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX2xpc3Rfc2V0X21lZGlhX3RleHQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFMaXN0CisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBA
ZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9tZWRp
YV9saXN0X3NldF9tZWRpYV90ZXh0KFdlYktpdERPTU1lZGlhTGlzdCogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9tZWRpYV9s
aXN0X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFMaXN0CisgKgorICog
UmV0dXJuczogQSAjZ3Vsb25nCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX21l
ZGlhX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01NZWRpYUxpc3QqIHNlbGYpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NTWVkaWFMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVkaWFMaXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYUxpc3RQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyM2ExYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NTWVkaWFMaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0ZV9oCisjZGVm
aW5lIFdlYktpdERPTU1lZGlhTGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9NZWRp
YUxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTWVkaWFMaXN0Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NTWVkaWFMaXN0KiB3cmFwTWVkaWFMaXN0KFdlYkNv
cmU6Ok1lZGlhTGlzdCopOworV2ViS2l0RE9NTWVkaWFMaXN0KiBraXQoV2ViQ29yZTo6TWVkaWFM
aXN0Kik7CitXZWJDb3JlOjpNZWRpYUxpc3QqIGNvcmUoV2ViS2l0RE9NTWVkaWFMaXN0Kik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlhTGlzdFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlh
UXVlcnlMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDg1MmM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVF1ZXJ5TGlzdC5jcHAKQEAgLTAsMCArMSwx
NjcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdC5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TU1lZGlhUXVlcnlMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX01FRElBX1FV
RVJZX0xJU1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2Jq
LCBXRUJLSVRfRE9NX1RZUEVfTUVESUFfUVVFUllfTElTVCwgV2ViS2l0RE9NTWVkaWFRdWVyeUxp
c3RQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2
YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6TWVkaWFRdWVyeUxpc3Q+IGNvcmVPYmplY3Q7Cit9
IFdlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTU1lZGlhUXVlcnlMaXN0KiBraXQoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqIG9i
aikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50
ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lU
X0RPTV9NRURJQV9RVUVSWV9MSVNUKHJldCk7CisKKyAgICByZXR1cm4gd3JhcE1lZGlhUXVlcnlM
aXN0KG9iaik7Cit9CisKK1dlYkNvcmU6Ok1lZGlhUXVlcnlMaXN0KiBjb3JlKFdlYktpdERPTU1l
ZGlhUXVlcnlMaXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6TWVkaWFRdWVyeUxpc3QqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCogd3JhcE1lZGlh
UXVlcnlMaXN0KFdlYkNvcmU6Ok1lZGlhUXVlcnlMaXN0KiBjb3JlT2JqZWN0KQoreworICAgIEFT
U0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9NRURJQV9RVUVSWV9MSVNU
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTUVESUFfUVVFUllfTElTVCwgImNvcmUtb2Jq
ZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworR19ERUZJTkVfVFlQRShXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCwgd2Via2l0X2RvbV9tZWRp
YV9xdWVyeV9saXN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9NRURJQSwKKyAgICBQUk9QX01BVENIRVMsCit9OworCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
TUVESUFfUVVFUllfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01P
YmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+
fldlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QqIHNlbGYgPSBX
RUJLSVRfRE9NX01FRElBX1FVRVJZX0xJU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9NRURJQToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF9tZWRpYShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRDSEVTOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X21hdGNoZXMo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fbWVkaWFf
cXVlcnlfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sK
KyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX21lZGlhX3F1
ZXJ5X2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTU1lZGlhUXVl
cnlMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVESUFfUVVFUllfTElTVF9HRVRfUFJJ
VkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpNZWRpYVF1ZXJ5TGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3Qp
OworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgp
LCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9tZWRpYV9xdWVyeV9saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RD
bGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlKSk7
CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbWVkaWFfcXVlcnlf
bGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rv
bV9tZWRpYV9xdWVyeV9saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF9wcm9wZXJ0eTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9NRURJQSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJtZWRpYSIsCisgICAgICAgICAgICAiTWVkaWFRdWVyeUxpc3Q6bWVkaWEiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnY2hhciogTWVkaWFRdWVyeUxpc3Q6bWVkaWEiLAorICAgICAgICAg
ICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAg
ICAgUFJPUF9NQVRDSEVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAg
ICAgICJtYXRjaGVzIiwKKyAgICAgICAgICAgICJNZWRpYVF1ZXJ5TGlzdDptYXRjaGVzIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gTWVkaWFRdWVyeUxpc3Q6bWF0Y2hlcyIsCisg
ICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9pbml0KFdlYktp
dERPTU1lZGlhUXVlcnlMaXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTU1lZGlhUXVlcnlM
aXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTUVESUFfUVVFUllfTElTVF9HRVRfUFJJVkFU
RShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0
ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF9tZWRpYShX
ZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19NRURJQV9RVUVSWV9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlz
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5tZWRpYSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Ym9vbGVhbiB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X21hdGNoZXMoV2ViS2l0RE9N
TWVkaWFRdWVyeUxpc3QqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTUVESUFf
UVVFUllfTElTVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok1lZGlhUXVlcnlMaXN0KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPm1h
dGNoZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lZGlh
UXVlcnlMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzQxYjUzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFRdWVy
eUxpc3QuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTU1lZGlhUXVlcnlMaXN0X2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVk
aWFRdWVyeUxpc3RfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX01FRElBX1FVRVJZX0xJ
U1QgICAgICAgICAgICAod2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fTUVESUFfUVVFUllfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTUVESUFfUVVFUllf
TElTVCwgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FRElB
X1FVRVJZX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX0RPTV9UWVBFX01FRElBX1FVRVJZX0xJU1QsIFdlYktpdERPTU1lZGlhUXVl
cnlMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfUVVFUllfTElTVChvYmop
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfTUVESUFfUVVFUllfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVESUFfUVVFUllf
TElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfTUVESUFfUVVFUllfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fTUVESUFf
UVVFUllfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfUVVFUllfTElTVCwgV2ViS2l0RE9NTWVkaWFRdWVy
eUxpc3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QgeworICAgIFdl
YktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTU1l
ZGlhUXVlcnlMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbWVkaWFfcXVlcnlfbGlzdF9n
ZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0
X21lZGlhOgorICogQHNlbGY6IEEgI1dlYktpdERPTU1lZGlhUXVlcnlMaXN0CisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5X2xpc3RfZ2V0X21lZGlhKFdlYktpdERP
TU1lZGlhUXVlcnlMaXN0KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21lZGlhX3F1ZXJ5
X2xpc3RfZ2V0X21hdGNoZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QK
KyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9tZWRpYV9xdWVyeV9saXN0X2dl
dF9tYXRjaGVzKFdlYktpdERPTU1lZGlhUXVlcnlMaXN0KiBzZWxmKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTU1lZGlhUXVlcnlMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFRdWVyeUxp
c3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU1lZGlhUXVlcnlMaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NTM2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1l
ZGlhUXVlcnlMaXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RQcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFRdWVyeUxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTWVk
aWFRdWVyeUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01NZWRpYVF1ZXJ5
TGlzdCogd3JhcE1lZGlhUXVlcnlMaXN0KFdlYkNvcmU6Ok1lZGlhUXVlcnlMaXN0Kik7CitXZWJL
aXRET01NZWRpYVF1ZXJ5TGlzdCoga2l0KFdlYkNvcmU6Ok1lZGlhUXVlcnlMaXN0Kik7CitXZWJD
b3JlOjpNZWRpYVF1ZXJ5TGlzdCogY29yZShXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdCopOworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01NZWRpYVF1ZXJ5TGlzdFBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWlu
dHMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZGNhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKQEAgLTAsMCArMSwxMTAgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
ZGVmaW5lIFdFQktJVF9ET01fTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTX0dFVF9Q
UklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9U
WVBFX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUywgV2ViS2l0RE9NTWVkaWFUcmFj
a1N1cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUgeworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisgICAgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJh
aW50cz4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorfSBXZWJL
aXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQcml2YXRlOworCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTU1lZGlhVHJh
Y2tTdXBwb3J0ZWRDb25zdHJhaW50cyoga2l0KFdlYkNvcmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRD
b25zdHJhaW50cyogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAg
IHJldHVybiBXRUJLSVRfRE9NX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUyhyZXQp
OworCisgICAgcmV0dXJuIHdyYXBNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMob2JqKTsK
K30KKworV2ViQ29yZTo6TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzKiBjb3JlKFdlYktp
dERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRDb25z
dHJhaW50cyo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9
CisKK1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyogd3JhcE1lZGlhVHJh
Y2tTdXBwb3J0ZWRDb25zdHJhaW50cyhXZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3Ry
YWludHMqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVy
biBXRUJLSVRfRE9NX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUyhnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUywgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLCB3ZWJraXRfZG9tX21lZGlh
X3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50cywgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZWRpYV90cmFja19zdXBwb3J0ZWRfY29uc3RyYWludHNf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU1lZGlhVHJhY2tTdXBw
b3J0ZWRDb25zdHJhaW50c1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FRElBX1RSQUNLX1NV
UFBPUlRFRF9DT05TVFJBSU5UU19HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVP
YmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgcHJpdi0+
fldlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUoKTsKKyAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50
c19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgR09iamVjdCog
d2Via2l0X2RvbV9tZWRpYV90cmFja19zdXBwb3J0ZWRfY29uc3RyYWludHNfY29uc3RydWN0b3Io
R1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3Ry
dWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0g
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9tZWRpYV90cmFja19zdXBwb3J0ZWRfY29uc3RyYWlu
dHNfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAg
IFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UU19HRVRfUFJJVkFURShv
YmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNZWRp
YVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5j
b3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAg
IHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbWVkaWFfdHJhY2tf
c3VwcG9ydGVkX2NvbnN0cmFpbnRzX2NsYXNzX2luaXQoV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBv
cnRlZENvbnN0cmFpbnRzQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTU1lZGlhVHJh
Y2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV9tZWRpYV90cmFja19zdXBwb3J0ZWRfY29uc3RyYWludHNfY29u
c3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbWVkaWFf
dHJhY2tfc3VwcG9ydGVkX2NvbnN0cmFpbnRzX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX21lZGlhX3RyYWNrX3N1cHBvcnRlZF9jb25zdHJhaW50c19pbml0KFdlYktpdERP
TU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRE
T01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFNfR0VUX1BSSVZBVEUocmVxdWVzdCk7
CisgICAgbmV3IChwcml2KSBXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHNQ
cml2YXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0
cmFpbnRzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzA0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTWVkaWFUcmFj
a1N1cHBvcnRlZENvbnN0cmFpbnRzX2gKKyNkZWZpbmUgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBv
cnRlZENvbnN0cmFpbnRzX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
T2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9NRURJQV9UUkFD
S19TVVBQT1JURURfQ09OU1RSQUlOVFMgICAgICAgICAgICAod2Via2l0X2RvbV9tZWRpYV90cmFj
a19zdXBwb3J0ZWRfY29uc3RyYWludHNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9N
RURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlOVFMob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX01FRElBX1RSQUNLX1NV
UFBPUlRFRF9DT05TVFJBSU5UUywgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFp
bnRzKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RSQUlO
VFNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUywgV2ViS2l0RE9N
TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNUUkFJTlRTKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NRURJQV9UUkFDS19T
VVBQT1JURURfQ09OU1RSQUlOVFMpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01FRElBX1RSQUNL
X1NVUFBPUlRFRF9DT05TVFJBSU5UU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfVFJBQ0tfU1VQUE9SVEVEX0NPTlNU
UkFJTlRTKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRURJQV9UUkFDS19TVVBQT1JURURfQ09OU1RS
QUlOVFNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX01FRElBX1RSQUNLX1NVUFBPUlRFRF9DT05TVFJBSU5UUywgV2ViS2l0
RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyB7CisgICAgV2ViS2l0RE9NT2JqZWN0
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBv
cnRlZENvbnN0cmFpbnRzQ2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbWVkaWFfdHJhY2tfc3Vw
cG9ydGVkX2NvbnN0cmFpbnRzX2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
TWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVk
aWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZWRpYVRyYWNrU3Vw
cG9ydGVkQ29uc3RyYWludHNQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzQxNmVlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRl
ZENvbnN0cmFpbnRzUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0
cmFpbnRzUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25z
dHJhaW50c1ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTWVkaWFUcmFja1N1
cHBvcnRlZENvbnN0cmFpbnRzLmg+CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMqIHdy
YXBNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMoV2ViQ29yZTo6TWVkaWFUcmFja1N1cHBv
cnRlZENvbnN0cmFpbnRzKik7CitXZWJLaXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWlu
dHMqIGtpdChXZWJDb3JlOjpNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMqKTsKK1dlYkNv
cmU6Ok1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyogY29yZShXZWJLaXRET01NZWRpYVRy
YWNrU3VwcG9ydGVkQ29uc3RyYWludHMqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLyogRU5BQkxFKE1FRElBX1NUUkVBTSkgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTU1lZGlh
VHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50c1ByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01N
ZXNzYWdlUG9ydC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yOWUwN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZXNzYWdl
UG9ydC5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZXNzYWdlUG9ydC5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZl
bnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9N
RVNTQUdFX1BPUlRfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
b2JqLCBXRUJLSVRfRE9NX1RZUEVfTUVTU0FHRV9QT1JULCBXZWJLaXRET01NZXNzYWdlUG9ydFBy
aXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGUgewor
ICAgIFJlZlB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydD4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9N
TWVzc2FnZVBvcnRQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NTWVz
c2FnZVBvcnQqIGtpdChXZWJDb3JlOjpNZXNzYWdlUG9ydCogb2JqKQoreworICAgIGlmICghb2Jq
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RD
YWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVChy
ZXQpOworCisgICAgcmV0dXJuIHdyYXBNZXNzYWdlUG9ydChvYmopOworfQorCitXZWJDb3JlOjpN
ZXNzYWdlUG9ydCogY29yZShXZWJLaXRET01NZXNzYWdlUG9ydCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Kj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NTWVz
c2FnZVBvcnQqIHdyYXBNZXNzYWdlUG9ydChXZWJDb3JlOjpNZXNzYWdlUG9ydCogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fTUVT
U0FHRV9QT1JUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTUVTU0FHRV9QT1JULCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2Vi
S2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFdlYkNvcmU6Ok1lc3NhZ2VQb3J0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6TWVzc2FnZVBvcnQqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2Jq
ZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50
LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwg
ZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpNZXNzYWdl
UG9ydCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Kj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6
R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwg
Y29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X3JlbW92ZV9ldmVudF9saXN0ZW5lcihX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9z
dXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6Ok1lc3Nh
Z2VQb3J0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TWVzc2FnZVBvcnQqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJn
ZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9k
b21fbWVzc2FnZV9wb3J0X2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlz
dGVuZXIgPSB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAg
aWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X3Jl
bW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0
RE9NTWVzc2FnZVBvcnQsIHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0LCBXRUJLSVRfRE9NX1RZUEVf
T0JKRUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdF
VCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fbWVzc2FnZV9wb3J0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRE
T01NZXNzYWdlUG9ydFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVF9HRVRf
UFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHBy
aXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTU1lc3NhZ2VQb3J0
UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJr
aXRfZG9tX21lc3NhZ2VfcG9ydF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVy
dGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X21lc3NhZ2VfcG9ydF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NTWVz
c2FnZVBvcnRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9NRVNTQUdFX1BPUlRfR0VUX1BSSVZB
VEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
TWVzc2FnZVBvcnQqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2Jq
ZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
bWVzc2FnZV9wb3J0X2NsYXNzX2luaXQoV2ViS2l0RE9NTWVzc2FnZVBvcnRDbGFzcyogcmVxdWVz
dENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENs
YXNzLCBzaXplb2YoV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlKSk7CisgICAgZ29iamVjdENs
YXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fbWVzc2FnZV9wb3J0X2NvbnN0cnVjdG9yOwor
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX21lc3NhZ2VfcG9ydF9maW5h
bGl6ZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9tZXNzYWdlX3BvcnRfaW5pdChXZWJL
aXRET01NZXNzYWdlUG9ydCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01NZXNzYWdlUG9ydFBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVF9HRVRfUFJJVkFURShyZXF1ZXN0
KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZSgpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01yZWFkb25seS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZXNzYWdlUG9ydC5oCnNpbWlsYXJpdHkgaW5kZXgg
NTYlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTXJlYWRvbmx5LmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVzc2FnZVBvcnQuaAppbmRl
eCA3NDI4NmI4Li5iMzFjZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01yZWFkb25seS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTWVzc2Fn
ZVBvcnQuaApAQCAtMTgsOCArMTgsOCBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NcmVhZG9ubHlfaAotI2RlZmluZSBXZWJLaXRET01y
ZWFkb25seV9oCisjaWZuZGVmIFdlYktpdERPTU1lc3NhZ2VQb3J0X2gKKyNkZWZpbmUgV2ViS2l0
RE9NTWVzc2FnZVBvcnRfaAogCiAjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCiAK
QEAgLTI5LDI5ICsyOSwyNSBAQAogCiBHX0JFR0lOX0RFQ0xTCiAKLUdfQkVHSU5fREVDTFMKLQot
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfUkVBRE9OTFkgICAgICAgICAgICAod2Via2l0X2RvbV9y
ZWFkb25seV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfRE9NX1JFQURPTkxZKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9SRUFET05MWSwgV2ViS2l0RE9NcmVhZG9ubHkpKQotI2RlZmluZSBXRUJLSVRfRE9NX1JFQURP
TkxZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9ET01fVFlQRV9SRUFET05MWSwgV2ViS2l0RE9NcmVhZG9ubHlDbGFzcykKLSNkZWZpbmUg
V0VCS0lUX0RPTV9JU19SRUFET05MWShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUkVBRE9OTFkpKQotI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1JFQURPTkxZX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9ET01fVFlQRV9SRUFET05MWSkpCi0jZGVmaW5lIFdFQktJVF9ET01fUkVB
RE9OTFlfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX1JFQURPTkxZLCBXZWJLaXRET01yZWFkb25seUNsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9UWVBFX01FU1NBR0VfUE9SVCAgICAgICAgICAgICh3ZWJraXRfZG9tX21l
c3NhZ2VfcG9ydF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX01FU1NBR0VfUE9SVChv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfTUVTU0FHRV9QT1JULCBXZWJLaXRET01NZXNzYWdlUG9ydCkpCisjZGVmaW5lIFdF
QktJVF9ET01fTUVTU0FHRV9QT1JUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9NRVNTQUdFX1BPUlQsIFdlYktpdERPTU1l
c3NhZ2VQb3J0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTUVTU0FHRV9QT1JUKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9NRVNTQUdFX1BPUlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX01FU1NBR0VfUE9SVF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZ
UEVfTUVTU0FHRV9QT1JUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9NRVNTQUdFX1BPUlRfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX01FU1NBR0VfUE9SVCwgV2ViS2l0RE9NTWVzc2FnZVBvcnRDbGFzcykpCiAKLXN0cnVjdCBf
V2ViS2l0RE9NcmVhZG9ubHkgeworc3RydWN0IF9XZWJLaXRET01NZXNzYWdlUG9ydCB7CiAgICAg
V2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKIH07CiAKLXN0cnVjdCBfV2ViS2l0RE9N
cmVhZG9ubHlDbGFzcyB7CitzdHJ1Y3QgX1dlYktpdERPTU1lc3NhZ2VQb3J0Q2xhc3MgewogICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKIH07CiAKIFdFQktJVF9BUEkgR1R5
cGUKLXdlYmtpdF9kb21fcmVhZG9ubHlfZ2V0X3R5cGUodm9pZCk7Cit3ZWJraXRfZG9tX21lc3Nh
Z2VfcG9ydF9nZXRfdHlwZSh2b2lkKTsKIAogR19FTkRfREVDTFMKIAogI2VuZGlmIC8qIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlmIC8qIFdlYktpdERPTVRlc3RJbnRlcmZh
Y2VfaCAqLwotI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLwotI2VuZGlm
IC8qIFdlYktpdERPTXJlYWRvbmx5X2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01NZXNzYWdlUG9y
dF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1lc3NhZ2VQb3J0UHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZXNz
YWdlUG9ydFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmVh
MTRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01NZXNzYWdlUG9ydFByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTU1lc3NhZ2VQb3J0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU1lc3NhZ2VQb3J0UHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL01lc3NhZ2VQb3J0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTU1lc3NhZ2VQb3J0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2Vi
S2l0RE9NTWVzc2FnZVBvcnQqIHdyYXBNZXNzYWdlUG9ydChXZWJDb3JlOjpNZXNzYWdlUG9ydCop
OworV2ViS2l0RE9NTWVzc2FnZVBvcnQqIGtpdChXZWJDb3JlOjpNZXNzYWdlUG9ydCopOworV2Vi
Q29yZTo6TWVzc2FnZVBvcnQqIGNvcmUoV2ViS2l0RE9NTWVzc2FnZVBvcnQqKTsKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NTWVzc2FnZVBvcnRQcml2YXRlX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU1vdXNlRXZlbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzAzZDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU1vdXNlRXZlbnQuY3BwCkBAIC0wLDAgKzEsNTI5IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NTW91c2VFdmVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTURPTVdpbmRvd1ByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01F
dmVudFRhcmdldFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Nb3VzZUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Nb3VzZUV2ZW50VW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NTW91c2VFdmVudCoga2l0KFdlYkNvcmU6Ok1vdXNlRXZlbnQqIG9iaikKK3sKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RXZlbnQq
PihvYmopKSk7Cit9CisKK1dlYkNvcmU6Ok1vdXNlRXZlbnQqIGNvcmUoV2ViS2l0RE9NTW91c2VF
dmVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6Ok1vdXNlRXZlbnQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01Nb3VzZUV2ZW50KiB3cmFwTW91c2VFdmVudChXZWJDb3JlOjpN
b3VzZUV2ZW50KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBF
X01PVVNFX0VWRU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTU1vdXNlRXZl
bnQsIHdlYmtpdF9kb21fbW91c2VfZXZlbnQsIFdFQktJVF9ET01fVFlQRV9VSV9FVkVOVCkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfU0NSRUVOX1gsCisgICAgUFJPUF9TQ1JFRU5f
WSwKKyAgICBQUk9QX0NMSUVOVF9YLAorICAgIFBST1BfQ0xJRU5UX1ksCisgICAgUFJPUF9DVFJM
X0tFWSwKKyAgICBQUk9QX1NISUZUX0tFWSwKKyAgICBQUk9QX0FMVF9LRVksCisgICAgUFJPUF9N
RVRBX0tFWSwKKyAgICBQUk9QX0JVVFRPTiwKKyAgICBQUk9QX1JFTEFURURfVEFSR0VULAorICAg
IFBST1BfTU9WRU1FTlRfWCwKKyAgICBQUk9QX01PVkVNRU5UX1ksCisgICAgUFJPUF9PRkZTRVRf
WCwKKyAgICBQUk9QX09GRlNFVF9ZLAorICAgIFBST1BfWCwKKyAgICBQUk9QX1ksCisgICAgUFJP
UF9GUk9NX0VMRU1FTlQsCisgICAgUFJPUF9UT19FTEVNRU5ULAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9YOgor
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dl
dF9zY3JlZW5feChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TQ1JFRU5f
WToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfc2NyZWVuX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0xJ
RU5UX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fbW91c2Vf
ZXZlbnRfZ2V0X2NsaWVudF94KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NMSUVOVF9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9jbGllbnRfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9DVFJMX0tFWToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0
X2RvbV9tb3VzZV9ldmVudF9nZXRfY3RybF9rZXkoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfU0hJRlRfS0VZOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9zaGlmdF9rZXkoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQUxUX0tFWToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfYWx0X2tleShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NRVRBX0tFWToKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbWV0YV9rZXkoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQlVUVE9OOgorICAgICAgICBnX3ZhbHVl
X3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9idXR0b24oc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVMQVRFRF9UQVJHRVQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfcmVs
YXRlZF90YXJnZXQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTU9WRU1F
TlRfWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9tb3VzZV9l
dmVudF9nZXRfbW92ZW1lbnRfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9NT1ZFTUVOVF9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X21vdXNlX2V2ZW50X2dldF9tb3ZlbWVudF95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX09GRlNFVF9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9PRkZTRVRfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfb2Zmc2V0X3koc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZS
T01fRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X21vdXNlX2V2ZW50X2dldF9mcm9tX2VsZW1lbnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVE9fRUxFTUVOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF90b19lbGVtZW50KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfY2xhc3NfaW5pdChXZWJL
aXRET01Nb3VzZUV2ZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9wcm9wZXJ0
eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9TQ1JFRU5fWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoCisgICAgICAgICAgICAic2NyZWVuLXgiLAorICAgICAgICAgICAgIk1vdXNlRXZlbnQ6c2Ny
ZWVuLXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3VzZUV2ZW50OnNjcmVlbi14
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU0NSRUVOX1ksCisgICAg
ICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInNjcmVlbi15IiwKKyAgICAgICAg
ICAgICJNb3VzZUV2ZW50OnNjcmVlbi15IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcg
TW91c2VFdmVudDpzY3JlZW4teSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0NMSUVOVF9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJj
bGllbnQteCIsCisgICAgICAgICAgICAiTW91c2VFdmVudDpjbGllbnQteCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdsb25nIE1vdXNlRXZlbnQ6Y2xpZW50LXgiLAorICAgICAgICAgICAgR19N
SU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9DTElFTlRfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoCisgICAgICAgICAgICAiY2xpZW50LXkiLAorICAgICAgICAgICAgIk1vdXNlRXZlbnQ6Y2xp
ZW50LXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3VzZUV2ZW50OmNsaWVudC15
IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1RSTF9LRVksCisgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImN0cmwta2V5IiwKKyAgICAg
ICAgICAgICJNb3VzZUV2ZW50OmN0cmwta2V5IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jv
b2xlYW4gTW91c2VFdmVudDpjdHJsLWtleSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NISUZUX0tF
WSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAic2hpZnQta2V5
IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OnNoaWZ0LWtleSIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIE1vdXNlRXZlbnQ6c2hpZnQta2V5IiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfQUxUX0tFWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAi
YWx0LWtleSIsCisgICAgICAgICAgICAiTW91c2VFdmVudDphbHQta2V5IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2Jvb2xlYW4gTW91c2VFdmVudDphbHQta2V5IiwKKyAgICAgICAgICAgIEZB
TFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTUVUQV9LRVksCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAg
ICAgIm1ldGEta2V5IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50Om1ldGEta2V5IiwKKyAgICAg
ICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gTW91c2VFdmVudDptZXRhLWtleSIsCisgICAgICAg
ICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0JVVFRPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAg
ICAgICAiYnV0dG9uIiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OmJ1dHRvbiIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1c2hvcnQgTW91c2VFdmVudDpidXR0b24iLAorICAgICAgICAgICAg
MCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfUkVMQVRFRF9UQVJHRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAicmVsYXRlZC10YXJnZXQiLAorICAgICAgICAgICAgIk1vdXNl
RXZlbnQ6cmVsYXRlZC10YXJnZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01F
dmVudFRhcmdldCogTW91c2VFdmVudDpyZWxhdGVkLXRhcmdldCIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTU9WRU1FTlRfWCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCisgICAgICAgICAgICAibW92ZW1lbnQteCIsCisgICAgICAgICAgICAiTW91c2VF
dmVudDptb3ZlbWVudC14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgTW91c2VFdmVu
dDptb3ZlbWVudC14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTU9W
RU1FTlRfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAibW92ZW1l
bnQteSIsCisgICAgICAgICAgICAiTW91c2VFdmVudDptb3ZlbWVudC15IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgTW91c2VFdmVudDptb3ZlbWVudC15IiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT0ZGU0VUX1gsCisgICAgICAgIGdfcGFyYW1fc3BlY19s
b25nKAorICAgICAgICAgICAgIm9mZnNldC14IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50Om9m
ZnNldC14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgTW91c2VFdmVudDpvZmZzZXQt
eCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX09GRlNFVF9ZLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJvZmZzZXQteSIsCisgICAgICAg
ICAgICAiTW91c2VFdmVudDpvZmZzZXQteSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25n
IE1vdXNlRXZlbnQ6b2Zmc2V0LXkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ4IiwKKyAg
ICAgICAgICAgICJNb3VzZUV2ZW50OngiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBN
b3VzZUV2ZW50OngiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ZLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ5IiwKKyAgICAgICAgICAg
ICJNb3VzZUV2ZW50OnkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBNb3VzZUV2ZW50
OnkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GUk9NX0VMRU1FTlQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZnJvbS1lbGVtZW50
IiwKKyAgICAgICAgICAgICJNb3VzZUV2ZW50OmZyb20tZWxlbWVudCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIE1vdXNlRXZlbnQ6ZnJvbS1lbGVtZW50IiwKKyAgICAg
ICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVE9fRUxFTUVOVCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ0by1lbGVtZW50IiwKKyAgICAgICAgICAgICJN
b3VzZUV2ZW50OnRvLWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01O
b2RlKiBNb3VzZUV2ZW50OnRvLWVsZW1lbnQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBF
X05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXQoV2ViS2l0RE9NTW91c2VFdmVudCog
cmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9tb3VzZV9ldmVudF9pbml0X21vdXNlX2V2ZW50KFdlYktpdERPTU1vdXNlRXZlbnQqIHNl
bGYsIGNvbnN0IGdjaGFyKiB0eXBlLCBnYm9vbGVhbiBjYW5CdWJibGUsIGdib29sZWFuIGNhbmNl
bGFibGUsIFdlYktpdERPTURPTVdpbmRvdyogdmlldywgZ2xvbmcgZGV0YWlsLCBnbG9uZyBzY3Jl
ZW5YLCBnbG9uZyBzY3JlZW5ZLCBnbG9uZyBjbGllbnRYLCBnbG9uZyBjbGllbnRZLCBnYm9vbGVh
biBjdHJsS2V5LCBnYm9vbGVhbiBhbHRLZXksIGdib29sZWFuIHNoaWZ0S2V5LCBnYm9vbGVhbiBt
ZXRhS2V5LCBndXNob3J0IGJ1dHRvbiwgV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJn
ZXQpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh0eXBlKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNf
RE9NX1dJTkRPVyh2aWV3KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0VW
RU5UX1RBUkdFVChyZWxhdGVkVGFyZ2V0KSk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRUeXBlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHR5cGUpOworICAgIFdlYkNvcmU6OkRPTVdpbmRvdyogY29u
dmVydGVkVmlldyA9IFdlYktpdDo6Y29yZSh2aWV3KTsKKyAgICBXZWJDb3JlOjpFdmVudFRhcmdl
dCogY29udmVydGVkUmVsYXRlZFRhcmdldCA9IFdlYktpdDo6Y29yZShyZWxhdGVkVGFyZ2V0KTsK
KyAgICBpdGVtLT5pbml0TW91c2VFdmVudChjb252ZXJ0ZWRUeXBlLCBjYW5CdWJibGUsIGNhbmNl
bGFibGUsIGNvbnZlcnRlZFZpZXcsIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwgY2xpZW50WCwg
Y2xpZW50WSwgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSwgYnV0dG9uLCBjb252
ZXJ0ZWRSZWxhdGVkVGFyZ2V0KTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9n
ZXRfc2NyZWVuX3goV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5z
Y3JlZW5YKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3Vz
ZV9ldmVudF9nZXRfc2NyZWVuX3koV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQg
PSBpdGVtLT5zY3JlZW5ZKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0
X2RvbV9tb3VzZV9ldmVudF9nZXRfY2xpZW50X3goV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT5jbGllbnRYKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xv
bmcgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY2xpZW50X3koV2ViS2l0RE9NTW91c2VFdmVu
dCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5jbGllbnRZKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY3RybF9rZXkoV2ViS2l0
RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9F
VkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y3RybEtleSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fbW91c2VfZXZlbnRf
Z2V0X3NoaWZ0X2tleShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6TW91
c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT5zaGlmdEtleSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdl
YmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2FsdF9rZXkoV2ViS2l0RE9NTW91c2VFdmVudCogc2Vs
ZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgRkFMU0Up
OworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+YWx0S2V5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbWV0YV9rZXkoV2ViS2l0
RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9F
VkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+bWV0YUtleSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9n
ZXRfYnV0dG9uKFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVtLT5i
dXR0b24oKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01FdmVudFRhcmdldCog
d2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfcmVsYXRlZF90YXJnZXQoV2ViS2l0RE9NTW91c2VF
dmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRUYXJnZXQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6
OmdldFB0cihpdGVtLT5yZWxhdGVkVGFyZ2V0KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3VzZV9ldmVudF9n
ZXRfbW92ZW1lbnRfeChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShQ
T0lOVEVSX0xPQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiks
IDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+bW92ZW1lbnRYKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlBvaW50ZXIgTG9jayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGds
b25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoUE9JTlRFUl9MT0NLKSAqLworfQorCitnbG9uZyB3
ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9tb3ZlbWVudF95KFdlYktpdERPTU1vdXNlRXZlbnQq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5tb3ZlbWVu
dFkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiUG9pbnRlciBMb2NrIikKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShQT0lOVEVS
X0xPQ0spICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X29mZnNldF94
KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
TU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+b2Zmc2V0WCgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0
X29mZnNldF95KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTU9VU0VfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok1vdXNlRXZlbnQq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+b2Zm
c2V0WSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fbW91c2Vf
ZXZlbnRfZ2V0X3goV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TW91c2VFdmVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT54
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfeShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX01PVVNFX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnkoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX21vdXNl
X2V2ZW50X2dldF9mcm9tX2VsZW1lbnQoV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6TW91c2VFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZyb21FbGVtZW50
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
V2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfdG9fZWxlbWVudChXZWJL
aXRET01Nb3VzZUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX01PVVNF
X0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpNb3VzZUV2ZW50KiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+dG9FbGVtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU1vdXNlRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
MjQ1N2RmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50LmgKQEAgLTAsMCArMSwy
MjEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dF
QktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3Ig
Ik9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIK
KyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTU1vdXNlRXZlbnRfaAorI2RlZmluZSBXZWJLaXRE
T01Nb3VzZUV2ZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTVVJRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9t
ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX01P
VVNFX0VWRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9NT1VTRV9FVkVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTU9VU0VfRVZFTlQsIFdl
YktpdERPTU1vdXNlRXZlbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX01PVVNFX0VWRU5UX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9NT1VTRV9FVkVOVCwgV2ViS2l0RE9NTW91c2VFdmVudENsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX01PVVNFX0VWRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9NT1VTRV9FVkVOVCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfTU9VU0VfRVZFTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX01PVVNFX0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9NT1VTRV9FVkVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfTU9VU0VfRVZFTlQsIFdlYktpdERPTU1vdXNlRXZl
bnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NTW91c2VFdmVudCB7CisgICAgV2ViS2l0RE9N
VUlFdmVudCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTU1vdXNlRXZl
bnRDbGFzcyB7CisgICAgV2ViS2l0RE9NVUlFdmVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9pbml0X21vdXNlX2V2ZW50OgorICog
QHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqIEB0eXBlOiBBICNnY2hhcgorICogQGNh
bkJ1YmJsZTogQSAjZ2Jvb2xlYW4KKyAqIEBjYW5jZWxhYmxlOiBBICNnYm9vbGVhbgorICogQHZp
ZXc6IEEgI1dlYktpdERPTURPTVdpbmRvdworICogQGRldGFpbDogQSAjZ2xvbmcKKyAqIEBzY3Jl
ZW5YOiBBICNnbG9uZworICogQHNjcmVlblk6IEEgI2dsb25nCisgKiBAY2xpZW50WDogQSAjZ2xv
bmcKKyAqIEBjbGllbnRZOiBBICNnbG9uZworICogQGN0cmxLZXk6IEEgI2dib29sZWFuCisgKiBA
YWx0S2V5OiBBICNnYm9vbGVhbgorICogQHNoaWZ0S2V5OiBBICNnYm9vbGVhbgorICogQG1ldGFL
ZXk6IEEgI2dib29sZWFuCisgKiBAYnV0dG9uOiBBICNndXNob3J0CisgKiBAcmVsYXRlZFRhcmdl
dDogQSAjV2ViS2l0RE9NRXZlbnRUYXJnZXQKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9tb3VzZV9ldmVudF9pbml0X21vdXNlX2V2ZW50KFdlYktpdERPTU1vdXNlRXZlbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlLCBnYm9vbGVhbiBjYW5CdWJibGUsIGdib29sZWFuIGNh
bmNlbGFibGUsIFdlYktpdERPTURPTVdpbmRvdyogdmlldywgZ2xvbmcgZGV0YWlsLCBnbG9uZyBz
Y3JlZW5YLCBnbG9uZyBzY3JlZW5ZLCBnbG9uZyBjbGllbnRYLCBnbG9uZyBjbGllbnRZLCBnYm9v
bGVhbiBjdHJsS2V5LCBnYm9vbGVhbiBhbHRLZXksIGdib29sZWFuIHNoaWZ0S2V5LCBnYm9vbGVh
biBtZXRhS2V5LCBndXNob3J0IGJ1dHRvbiwgV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHJlbGF0ZWRU
YXJnZXQpOworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NjcmVlbl94Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9zY3Jl
ZW5feChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9zY3JlZW5feToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50
CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0
X2RvbV9tb3VzZV9ldmVudF9nZXRfc2NyZWVuX3koV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY2xpZW50X3g6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8K
K1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2NsaWVudF94KFdl
YktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2VfZXZl
bnRfZ2V0X2NsaWVudF95OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9jbGllbnRfeShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9jdHJsX2tleToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfY3RybF9rZXkoV2Vi
S2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfc2hpZnRfa2V5OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRf
ZG9tX21vdXNlX2V2ZW50X2dldF9zaGlmdF9rZXkoV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfYWx0X2tleToKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoq
LworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfYWx0X2tl
eShXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNl
X2V2ZW50X2dldF9tZXRhX2tleToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50Cisg
KgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbWV0YV9rZXkoV2ViS2l0RE9NTW91c2VFdmVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfYnV0dG9uOgorICogQHNl
bGY6IEEgI1dlYktpdERPTU1vdXNlRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0Cisq
Ki8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfYnV0dG9u
KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbW91c2Vf
ZXZlbnRfZ2V0X3JlbGF0ZWRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTU1vdXNlRXZl
bnQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTUV2ZW50VGFy
Z2V0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRXZlbnRUYXJnZXQqCit3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9yZWxhdGVkX3RhcmdldChXZWJLaXRET01Nb3VzZUV2ZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9vZmZzZXRfeDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLwor
V0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfb2Zmc2V0X3goV2Vi
S2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfb2Zmc2V0X3k6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAq
IFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fbW91
c2VfZXZlbnRfZ2V0X29mZnNldF95KFdlYktpdERPTU1vdXNlRXZlbnQqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
TW91c2VFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xv
bmcKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3goV2ViS2l0RE9NTW91c2VFdmVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfeToKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyoqLworV0VC
S0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfeShXZWJLaXRET01Nb3Vz
ZUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9mcm9t
X2VsZW1lbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTW91c2VFdmVudAorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTU5vZGUqCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9mcm9tX2VsZW1lbnQoV2Vi
S2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVu
dF9nZXRfdG9fZWxlbWVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3RvX2VsZW1l
bnQoV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXZWJLaXRET01Nb3VzZUV2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MzcyNWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NTW91c2VFdmVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01Nb3VzZUV2ZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL01vdXNlRXZlbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTW91c2VFdmVudC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTU1vdXNlRXZlbnQqIHdyYXBNb3VzZUV2ZW50KFdlYkNvcmU6Ok1v
dXNlRXZlbnQqKTsKK1dlYktpdERPTU1vdXNlRXZlbnQqIGtpdChXZWJDb3JlOjpNb3VzZUV2ZW50
Kik7CitXZWJDb3JlOjpNb3VzZUV2ZW50KiBjb3JlKFdlYktpdERPTU1vdXNlRXZlbnQqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NTW91c2VFdmVudFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Nb3VzZUV2ZW50VW5zdGFibGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91
c2VFdmVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Vi
MDc2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTW91c2VFdmVudFVuc3RhYmxlLmgKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJL
aXRET01Nb3VzZUV2ZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01Nb3VzZUV2ZW50VW5z
dGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbW92ZW1lbnRfeDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X21vdmVtZW50X3goV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfbW92ZW1lbnRfeToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Nb3VzZUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X21vdmVtZW50X3koV2ViS2l0RE9NTW91c2VFdmVudCogc2VsZik7
CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQ
SSAqLworI2VuZGlmIC8qIFdlYktpdERPTU1vdXNlRXZlbnRVbnN0YWJsZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU5hbWVkTm9kZU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hbWVkTm9kZU1hcC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyYTMwOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NTmFtZWROb2RlTWFwLmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERP
TU5hbWVkTm9kZU1hcC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+Cisj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9N
X05BTUVEX05PREVfTUFQX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX05BTUVEX05PREVfTUFQLCBXZWJLaXRET01OYW1lZE5v
ZGVNYXBQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJp
dmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5hbWVkTm9kZU1hcD4gY29yZU9iamVjdDsKK30g
V2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YktpdERPTU5hbWVkTm9kZU1hcCoga2l0KFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogb2JqKQorewor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX05B
TUVEX05PREVfTUFQKHJldCk7CisKKyAgICByZXR1cm4gd3JhcE5hbWVkTm9kZU1hcChvYmopOwor
fQorCitXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGNvcmUoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBy
ZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6TmFt
ZWROb2RlTWFwKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsK
K30KKworV2ViS2l0RE9NTmFtZWROb2RlTWFwKiB3cmFwTmFtZWROb2RlTWFwKFdlYkNvcmU6Ok5h
bWVkTm9kZU1hcCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fTkFNRURfTk9ERV9NQVAoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9OQU1FRF9OT0RFX01BUCwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01O
YW1lZE5vZGVNYXAsIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXAsIFdFQktJVF9ET01fVFlQRV9P
QkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0xFTkdUSCwKK307CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX05BTUVEX05PREVfTUFQX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRP
TU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2
LT5+V2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYgPSBXRUJLSVRf
RE9NX05BTUVEX05PREVfTUFQKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2NvbnN0cnVjdG9y
KEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0
cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKKworICAgIFdlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX05BTUVEX05PREVfTUFQX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29y
ZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCo+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9jbGFzc19pbml0
KFdlYktpdERPTU5hbWVkTm9kZU1hcENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01O
YW1lZE5vZGVNYXBQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZmluYWxpemU7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191
bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIk5hbWVkTm9kZU1hcDps
ZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgTmFtZWROb2RlTWFwOmxlbmd0
aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9pbml0KFdlYktpdERPTU5hbWVkTm9kZU1hcCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRE
T01OYW1lZE5vZGVNYXBQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9OQU1FRF9OT0RFX01BUF9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU5hbWVkTm9kZU1h
cFByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21h
cF9nZXRfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdjaGFy
KiBuYW1lKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChuYW1lLCAwKTsKKyAgICBXZWJDb3JlOjpO
YW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdldE5hbWVk
SXRlbShjb252ZXJ0ZWROYW1lKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFw
X3NldF9uYW1lZF9pdGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgV2ViS2l0RE9NTm9k
ZSogbm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFN
RURfTk9ERV9NQVAoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTk9ERShub2RlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8
ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWROb2RlID0gV2ViS2l0Ojpj
b3JlKG5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0
cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2V0TmFt
ZWRJdGVtKCpjb252ZXJ0ZWROb2RlLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFt
ZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxm
LCBjb25zdCBnY2hhciogbmFtZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTkFNRURfTk9ERV9NQVAoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKG5hbWUsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9y
LCAwKTsKKyAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChuYW1lKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlbW92ZU5h
bWVkSXRlbShjb252ZXJ0ZWROYW1lLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbmFt
ZWRfbm9kZV9tYXBfaXRlbShXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGd1bG9uZyBpbmRl
eCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQU1FRF9OT0RFX01BUChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRl
bS0+aXRlbShpbmRleCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0Lmdl
dCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9nZXRf
bmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIGNvbnN0IGdjaGFyKiBu
YW1lc3BhY2VVUkksIGNvbnN0IGdjaGFyKiBsb2NhbE5hbWUpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTkFNRURfTk9ERV9NQVAoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKG5hbWVzcGFjZVVSSSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobG9jYWxOYW1l
LCAwKTsKKyAgICBXZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTmFtZXNwYWNlVVJJID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KG5hbWVzcGFjZVVSSSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTG9jYWxO
YW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGxvY2FsTmFtZSk7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXROYW1lZEl0ZW1O
Uyhjb252ZXJ0ZWROYW1lc3BhY2VVUkksIGNvbnZlcnRlZExvY2FsTmFtZSkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSog
d2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbV9ucyhXZWJLaXRET01OYW1l
ZE5vZGVNYXAqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BTUVEX05PREVfTUFQKHNlbGYpLCAwKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUobm9kZSksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpO
YW1lZE5vZGVNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9k
ZSogY29udmVydGVkTm9kZSA9IFdlYktpdDo6Y29yZShub2RlKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNldE5hbWVkSXRlbSgqY29udmVydGVkTm9kZSwgZWMpKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitX
ZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVt
X25zKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVS
SSwgY29uc3QgZ2NoYXIqIGxvY2FsTmFtZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfTkFNRURfTk9ERV9NQVAoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG5hbWVzcGFjZVVSSSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobG9j
YWxOYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwg
MCk7CisgICAgV2ViQ29yZTo6TmFtZWROb2RlTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVzcGFjZVVSSSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZExvY2FsTmFt
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChsb2NhbE5hbWUpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVtb3ZlTmFtZWRJdGVtTlMoY29udmVydGVkTmFtZXNwYWNl
VVJJLCBjb252ZXJ0ZWRMb2NhbE5hbWUsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fbmFtZWRfbm9k
ZV9tYXBfZ2V0X2xlbmd0aChXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTkFNRURfTk9ERV9NQVAoc2VsZiksIDApOworICAgIFdlYkNvcmU6
Ok5hbWVkTm9kZU1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVz
dWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01OYW1lZE5vZGVNYXAuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5NjdiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TmFtZWROb2RlTWFwLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4g
Y2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTU5h
bWVkTm9kZU1hcF9oCisjZGVmaW5lIFdlYktpdERPTU5hbWVkTm9kZU1hcF9oCisKKyNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX05BTUVEX05PREVfTUFQICAgICAgICAgICAgKHdl
YmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9O
QU1FRF9OT0RFX01BUChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVAsIFdlYktpdERPTU5hbWVkTm9k
ZU1hcCkpCisjZGVmaW5lIFdFQktJVF9ET01fTkFNRURfTk9ERV9NQVBfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05BTUVE
X05PREVfTUFQLCBXZWJLaXRET01OYW1lZE5vZGVNYXBDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19OQU1FRF9OT0RFX01BUChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9ERV9NQVApKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX05BTUVEX05PREVfTUFQX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9OQU1FRF9OT0RFX01BUCkpCisjZGVmaW5l
IFdFQktJVF9ET01fTkFNRURfTk9ERV9NQVBfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX05BTUVEX05PREVfTUFQLCBXZWJL
aXRET01OYW1lZE5vZGVNYXBDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NTmFtZWROb2RlTWFw
IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01OYW1lZE5vZGVNYXBDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFy
ZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9uYW1lZF9ub2Rl
X21hcF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFw
X2dldF9uYW1lZF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAorICog
QG5hbWU6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbmFt
ZWRfbm9kZV9tYXBfZ2V0X25hbWVkX2l0ZW0oV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBj
b25zdCBnY2hhciogbmFtZSk7CisKKy8qKgorICogd2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9z
ZXRfbmFtZWRfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyAqIEBu
b2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01Ob2RlKgord2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9zZXRfbmFtZWRfaXRlbShXZWJL
aXRET01OYW1lZE5vZGVNYXAqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5vZGUsIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9p
dGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAorICogQG5hbWU6IEEgI2dj
aGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6
IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0
X2RvbV9uYW1lZF9ub2RlX21hcF9yZW1vdmVfbmFtZWRfaXRlbShXZWJLaXRET01OYW1lZE5vZGVN
YXAqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5h
bWVkTm9kZU1hcAorICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2Rl
Kgord2Via2l0X2RvbV9uYW1lZF9ub2RlX21hcF9pdGVtKFdlYktpdERPTU5hbWVkTm9kZU1hcCog
c2VsZiwgZ3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFw
X2dldF9uYW1lZF9pdGVtX25zOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hbWVkTm9kZU1hcAor
ICogQG5hbWVzcGFjZVVSSTogQSAjZ2NoYXIKKyAqIEBsb2NhbE5hbWU6IEEgI2djaGFyCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X25hbWVk
X2l0ZW1fbnMoV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBzZWxmLCBjb25zdCBnY2hhciogbmFtZXNw
YWNlVVJJLCBjb25zdCBnY2hhciogbG9jYWxOYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25h
bWVkX25vZGVfbWFwX3NldF9uYW1lZF9pdGVtX25zOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5h
bWVkTm9kZU1hcAorICogQG5vZGU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3Nl
dF9uYW1lZF9pdGVtX25zKFdlYktpdERPTU5hbWVkTm9kZU1hcCogc2VsZiwgV2ViS2l0RE9NTm9k
ZSogbm9kZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9k
ZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmFtZWRO
b2RlTWFwCisgKiBAbmFtZXNwYWNlVVJJOiBBICNnY2hhcgorICogQGxvY2FsTmFtZTogQSAjZ2No
YXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
QSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRf
ZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtX25zKFdlYktpdERPTU5hbWVkTm9k
ZU1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSwgY29uc3QgZ2NoYXIqIGxvY2Fs
TmFtZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmFtZWRfbm9kZV9t
YXBfZ2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYW1lZE5vZGVNYXAKKyAqCisg
KiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21f
bmFtZWRfbm9kZV9tYXBfZ2V0X2xlbmd0aChXZWJLaXRET01OYW1lZE5vZGVNYXAqIHNlbGYpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NTmFtZWROb2RlTWFwX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYW1lZE5vZGVNYXBQ
cml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFkNmRiOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NTmFtZWROb2RlTWFwUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTmFt
ZWROb2RlTWFwUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTU5hbWVkTm9kZU1hcFByaXZhdGVf
aAorCisjaW5jbHVkZSA8V2ViQ29yZS9OYW1lZE5vZGVNYXAuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NTmFtZWROb2RlTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NTmFtZWROb2RlTWFwKiB3cmFwTmFtZWROb2RlTWFwKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcCop
OworV2ViS2l0RE9NTmFtZWROb2RlTWFwKiBraXQoV2ViQ29yZTo6TmFtZWROb2RlTWFwKik7CitX
ZWJDb3JlOjpOYW1lZE5vZGVNYXAqIGNvcmUoV2ViS2l0RE9NTmFtZWROb2RlTWFwKik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTU5hbWVkTm9kZU1hcFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3IuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjJmZTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTU5hdmlnYXRvci5jcHAKQEAgLTAsMCArMSw2OTEgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICog
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRET01OYXZpZ2F0b3IuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05hdmlnYXRvckJhdHRlcnkuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL05hdmlnYXRvckNvbnRlbnRVdGlscy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvTmF2aWdhdG9yR2VvbG9jYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05hdmlnYXRv
ck1lZGlhRGV2aWNlcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmF2aWdhdG9yVmlicmF0aW9uLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01E
T01QbHVnaW5BcnJheVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01HZW9sb2NhdGlvblBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01NZWRpYURldmljZXNQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVBy
aXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9N
X05BVklHQVRPUl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShv
YmosIFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IsIFdlYktpdERPTU5hdmlnYXRvclByaXZhdGUp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlIHsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6TmF2aWdhdG9yPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01OYXZpZ2F0b3JQ
cml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NTmF2aWdhdG9yKiBraXQo
V2ViQ29yZTo6TmF2aWdhdG9yKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fTkFWSUdBVE9SKHJldCk7CisKKyAgICByZXR1cm4g
d3JhcE5hdmlnYXRvcihvYmopOworfQorCitXZWJDb3JlOjpOYXZpZ2F0b3IqIGNvcmUoV2ViS2l0
RE9NTmF2aWdhdG9yKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6TmF2aWdhdG9yKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVP
YmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NTmF2aWdhdG9yKiB3cmFwTmF2aWdhdG9yKFdlYkNv
cmU6Ok5hdmlnYXRvciogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7Cisg
ICAgcmV0dXJuIFdFQktJVF9ET01fTkFWSUdBVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfTkFWSUdBVE9SLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTU5hdmlnYXRv
ciwgd2Via2l0X2RvbV9uYXZpZ2F0b3IsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0g
eworICAgIFBST1BfMCwKKyAgICBQUk9QX1BMVUdJTlMsCisgICAgUFJPUF9NSU1FX1RZUEVTLAor
ICAgIFBST1BfQ09PS0lFX0VOQUJMRUQsCisgICAgUFJPUF9XRUJLSVRfQkFUVEVSWSwKKyAgICBQ
Uk9QX0dFT0xPQ0FUSU9OLAorICAgIFBST1BfTUVESUFfREVWSUNFUywKKyAgICBQUk9QX0hBUkRX
QVJFX0NPTkNVUlJFTkNZLAorICAgIFBST1BfQVBQX0NPREVfTkFNRSwKKyAgICBQUk9QX0FQUF9O
QU1FLAorICAgIFBST1BfQVBQX1ZFUlNJT04sCisgICAgUFJPUF9QTEFURk9STSwKKyAgICBQUk9Q
X1BST0RVQ1QsCisgICAgUFJPUF9QUk9EVUNUX1NVQiwKKyAgICBQUk9QX1VTRVJfQUdFTlQsCisg
ICAgUFJPUF9WRU5ET1IsCisgICAgUFJPUF9WRU5ET1JfU1VCLAorICAgIFBST1BfTEFOR1VBR0Us
CisgICAgUFJPUF9PTl9MSU5FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9uYXZpZ2F0
b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTU5hdmlnYXRvclBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05BVklHQVRPUl9HRVRfUFJJVkFURShvYmplY3QpOwor
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTU5hdmlnYXRvclByaXZhdGUoKTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX25hdmlnYXRvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYgPSBXRUJLSVRf
RE9NX05BVklHQVRPUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX1BMVUdJTlM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3BsdWdpbnMoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfTUlNRV9UWVBFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbWltZV90eXBlcyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9DT09LSUVfRU5BQkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2Nvb2tpZV9lbmFibGVkKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQktJVF9CQVRURVJZOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF93
ZWJraXRfYmF0dGVyeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9HRU9M
T0NBVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25h
dmlnYXRvcl9nZXRfZ2VvbG9jYXRpb24oc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTUVESUFfREVWSUNFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbWVkaWFfZGV2aWNlcyhzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9IQVJEV0FSRV9DT05DVVJSRU5DWToKKyAgICAgICAgZ192YWx1
ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfaGFyZHdhcmVfY29u
Y3VycmVuY3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVBQX0NPREVf
TkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9uYXZp
Z2F0b3JfZ2V0X2FwcF9jb2RlX25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQVBQX05BTUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtp
dF9kb21fbmF2aWdhdG9yX2dldF9hcHBfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9BUFBfVkVSU0lPTjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2FwcF92ZXJzaW9uKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BMQVRGT1JNOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcGxhdGZvcm0oc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPRFVDVDoKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Byb2R1Y3Qoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPRFVDVF9TVUI6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wcm9kdWN0X3N1
YihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9VU0VSX0FHRU5UOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRf
dXNlcl9hZ2VudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WRU5ET1I6
CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbmF2aWdhdG9y
X2dldF92ZW5kb3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkVORE9S
X1NVQjoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9uYXZp
Z2F0b3JfZ2V0X3ZlbmRvcl9zdWIoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfTEFOR1VBR0U6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9k
b21fbmF2aWdhdG9yX2dldF9sYW5ndWFnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9PTl9MSU5FOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX25hdmlnYXRvcl9nZXRfb25fbGluZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgR09iamVjdCogd2Via2l0X2RvbV9uYXZpZ2F0b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwg
Z3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNv
bnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV9uYXZpZ2F0b3JfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwg
Y29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdl
YktpdERPTU5hdmlnYXRvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05BVklHQVRPUl9HRVRf
UFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpOYXZpZ2F0b3IqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsK
KyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwg
b2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fbmF2aWdhdG9yX2NsYXNzX2luaXQoV2ViS2l0RE9NTmF2aWdhdG9yQ2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFz
cywgc2l6ZW9mKFdlYktpdERPTU5hdmlnYXRvclByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9uYXZpZ2F0b3JfY29uc3RydWN0b3I7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbmF2aWdhdG9yX2ZpbmFsaXplOworICAg
IGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3By
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BMVUdJTlMsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAicGx1Z2lucyIsCisgICAgICAgICAgICAiTmF2aWdhdG9y
OnBsdWdpbnMiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01ET01QbHVnaW5BcnJh
eSogTmF2aWdhdG9yOnBsdWdpbnMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9Q
TFVHSU5fQVJSQVksCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9NSU1FX1RZUEVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAor
ICAgICAgICAgICAgIm1pbWUtdHlwZXMiLAorICAgICAgICAgICAgIk5hdmlnYXRvcjptaW1lLXR5
cGVzIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSog
TmF2aWdhdG9yOm1pbWUtdHlwZXMiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX0RPTV9N
SU1FX1RZUEVfQVJSQVksCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9DT09LSUVfRU5BQkxFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jv
b2xlYW4oCisgICAgICAgICAgICAiY29va2llLWVuYWJsZWQiLAorICAgICAgICAgICAgIk5hdmln
YXRvcjpjb29raWUtZW5hYmxlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIE5h
dmlnYXRvcjpjb29raWUtZW5hYmxlZCIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dFQktJVF9CQVRU
RVJZLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIndlYmtpdC1i
YXR0ZXJ5IiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6d2Via2l0LWJhdHRlcnkiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBXZWJLaXRET01CYXR0ZXJ5TWFuYWdlciogTmF2aWdhdG9yOndlYmtp
dC1iYXR0ZXJ5IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9CQVRURVJZX01BTkFHRVIs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9HRU9MT0NBVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAg
ICJnZW9sb2NhdGlvbiIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOmdlb2xvY2F0aW9uIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NR2VvbG9jYXRpb24qIE5hdmlnYXRvcjpnZW9s
b2NhdGlvbiIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfR0VPTE9DQVRJT04sCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NRURJ
QV9ERVZJQ0VTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm1l
ZGlhLWRldmljZXMiLAorICAgICAgICAgICAgIk5hdmlnYXRvcjptZWRpYS1kZXZpY2VzIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTWVkaWFEZXZpY2VzKiBOYXZpZ2F0b3I6bWVk
aWEtZGV2aWNlcyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTUVESUFfREVWSUNFUywK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0hBUkRXQVJFX0NPTkNVUlJFTkNZLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAg
ICAgICAgICAgImhhcmR3YXJlLWNvbmN1cnJlbmN5IiwKKyAgICAgICAgICAgICJOYXZpZ2F0b3I6
aGFyZHdhcmUtY29uY3VycmVuY3kiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IE5h
dmlnYXRvcjpoYXJkd2FyZS1jb25jdXJyZW5jeSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQ2
NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0FQUF9DT0RFX05BTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAg
ICAgICAgICAiYXBwLWNvZGUtbmFtZSIsCisgICAgICAgICAgICAiTmF2aWdhdG9yOmFwcC1jb2Rl
LW5hbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdhdG9yOmFwcC1jb2Rl
LW5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BUFBfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJhcHAtbmFtZSIsCisgICAgICAgICAgICAiTmF2aWdhdG9y
OmFwcC1uYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5hdmlnYXRvcjphcHAt
bmFtZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX0FQUF9WRVJTSU9OLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfc3RyaW5nKAorICAgICAgICAgICAgImFwcC12ZXJzaW9uIiwKKyAgICAgICAgICAgICJOYXZp
Z2F0b3I6YXBwLXZlcnNpb24iLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogTmF2aWdh
dG9yOmFwcC12ZXJzaW9uIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUExBVEZPUk0sCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicGxhdGZvcm0iLAorICAgICAgICAgICAg
Ik5hdmlnYXRvcjpwbGF0Zm9ybSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBOYXZp
Z2F0b3I6cGxhdGZvcm0iLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QUk9EVUNULAorICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInByb2R1Y3QiLAorICAgICAgICAgICAgIk5h
dmlnYXRvcjpwcm9kdWN0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5hdmlnYXRv
cjpwcm9kdWN0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUFJPRFVDVF9TVUIsCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAicHJvZHVjdC1zdWIiLAorICAgICAgICAgICAg
Ik5hdmlnYXRvcjpwcm9kdWN0LXN1YiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBO
YXZpZ2F0b3I6cHJvZHVjdC1zdWIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9VU0VSX0FHRU5ULAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInVzZXItYWdlbnQiLAorICAg
ICAgICAgICAgIk5hdmlnYXRvcjp1c2VyLWFnZW50IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2NoYXIqIE5hdmlnYXRvcjp1c2VyLWFnZW50IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkVORE9SLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInZlbmRvciIsCisgICAg
ICAgICAgICAiTmF2aWdhdG9yOnZlbmRvciIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFy
KiBOYXZpZ2F0b3I6dmVuZG9yIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkVORE9SX1NVQiwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ2ZW5kb3Itc3ViIiwKKyAgICAg
ICAgICAgICJOYXZpZ2F0b3I6dmVuZG9yLXN1YiIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdj
aGFyKiBOYXZpZ2F0b3I6dmVuZG9yLXN1YiIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBTkdVQUdFLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxhbmd1YWdlIiwKKyAg
ICAgICAgICAgICJOYXZpZ2F0b3I6bGFuZ3VhZ2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Y2hhciogTmF2aWdhdG9yOmxhbmd1YWdlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT05fTElORSwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAib24tbGluZSIsCisgICAg
ICAgICAgICAiTmF2aWdhdG9yOm9uLWxpbmUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9v
bGVhbiBOYXZpZ2F0b3I6b24tbGluZSIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
bmF2aWdhdG9yX2luaXQoV2ViS2l0RE9NTmF2aWdhdG9yKiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTU5hdmlnYXRvclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05BVklHQVRPUl9HRVRfUFJJ
VkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU5hdmlnYXRvclByaXZhdGUo
KTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9uYXZpZ2F0b3JfamF2YV9lbmFibGVkKFdlYktp
dERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FU
T1Ioc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+amF2YUVuYWJsZWQoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9z
dG9yYWdlX3VwZGF0ZXMoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Z2V0U3RvcmFnZVVwZGF0ZXMoKTsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX25hdmlnYXRvcl9yZWdpc3Rlcl9wcm90b2NvbF9oYW5kbGVyKFdl
YktpdERPTU5hdmlnYXRvciogc2VsZiwgY29uc3QgZ2NoYXIqIHNjaGVtZSwgY29uc3QgZ2NoYXIq
IHVybCwgY29uc3QgZ2NoYXIqIHRpdGxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUo
TkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Io
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2NoZW1lKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHVybCk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh0aXRsZSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNjaGVtZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFVy
bCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh1cmwpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFRpdGxlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRpdGxlKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3JDb250ZW50VXRpbHM6OnJl
Z2lzdGVyUHJvdG9jb2xIYW5kbGVyKCppdGVtLCBjb252ZXJ0ZWRTY2hlbWUsIGNvbnZlcnRlZFVy
bCwgY29udmVydGVkVGl0bGUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0oc2NoZW1lKTsKKyAgICBVTlVTRURfUEFSQU0odXJsKTsKKyAg
ICBVTlVTRURfUEFSQU0odGl0bGUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTmF2aWdhdG9yIENvbnRlbnQgVXRpbHMiKQor
I2VuZGlmIC8qIEVOQUJMRShOQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgKi8KK30KKworZ2NoYXIq
IHdlYmtpdF9kb21fbmF2aWdhdG9yX2lzX3Byb3RvY29sX2hhbmRsZXJfcmVnaXN0ZXJlZChXZWJL
aXRET01OYXZpZ2F0b3IqIHNlbGYsIGNvbnN0IGdjaGFyKiBzY2hlbWUsIGNvbnN0IGdjaGFyKiB1
cmwsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShDVVNUT01fU0NIRU1FX0hBTkRMRVIp
ICYmIEVOQUJMRShOQVZJR0FUT1JfQ09OVEVOVF9VVElMUykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNjaGVt
ZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJsLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9y
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFNj
aGVtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZFVybCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh1cmwpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKFdlYkNvcmU6Ok5hdmlnYXRvckNvbnRlbnRVdGlsczo6aXNQcm90b2NvbEhhbmRsZXJSZWdp
c3RlcmVkKGl0ZW0sIGNvbnZlcnRlZFNjaGVtZSwgY29udmVydGVkVXJsLCBlYykpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0oc2NoZW1lKTsKKyAgICBVTlVTRURfUEFSQU0odXJsKTsKKyAgICBVTlVTRURfUEFSQU0o
ZXJyb3IpOworI2lmICFFTkFCTEUoTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTmF2aWdhdG9yIENvbnRlbnQgVXRpbHMiKQorI2Vu
ZGlmCisjaWYgIUVOQUJMRShDVVNUT01fU0NIRU1FX0hBTkRMRVIpCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ3VzdG9tIFNjaGVtZSBIYW5kbGVyIikKKyNlbmRpZgorICAg
IHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShDVVNUT01fU0NIRU1FX0hBTkRMRVIpICYmIEVO
QUJMRShOQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX25h
dmlnYXRvcl91bnJlZ2lzdGVyX3Byb3RvY29sX2hhbmRsZXIoV2ViS2l0RE9NTmF2aWdhdG9yKiBz
ZWxmLCBjb25zdCBnY2hhciogc2NoZW1lLCBjb25zdCBnY2hhciogdXJsLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyNpZiBFTkFCTEUoQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAmJiBFTkFCTEUoTkFWSUdB
VE9SX0NPTlRFTlRfVVRJTFMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2NoZW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHVy
bCk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29y
ZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZFNjaGVtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZFVybCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh1cmwpOworICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvckNv
bnRlbnRVdGlsczo6dW5yZWdpc3RlclByb3RvY29sSGFuZGxlcigqaXRlbSwgY29udmVydGVkU2No
ZW1lLCBjb252ZXJ0ZWRVcmwsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBVTlVTRURfUEFSQU0oc2NoZW1lKTsKKyAgICBVTlVTRURfUEFSQU0odXJsKTsKKyAg
ICBVTlVTRURfUEFSQU0oZXJyb3IpOworI2lmICFFTkFCTEUoTkFWSUdBVE9SX0NPTlRFTlRfVVRJ
TFMpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTmF2aWdhdG9yIENvbnRl
bnQgVXRpbHMiKQorI2VuZGlmCisjaWYgIUVOQUJMRShDVVNUT01fU0NIRU1FX0hBTkRMRVIpCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ3VzdG9tIFNjaGVtZSBIYW5kbGVy
IikKKyNlbmRpZgorI2VuZGlmIC8qIEVOQUJMRShDVVNUT01fU0NIRU1FX0hBTkRMRVIpICYmIEVO
QUJMRShOQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV9uYXZpZ2F0b3JfdmlicmF0ZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYsIGd1bG9uZyB0aW1l
KQoreworI2lmIEVOQUJMRShWSUJSQVRJT04pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFW
SUdBVE9SKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IFdlYkNvcmU6Ok5hdmlnYXRv
clZpYnJhdGlvbjo6dmlicmF0ZSgqaXRlbSwgdGltZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWJyYXRpb24iKQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJQlJBVElPTikg
Ki8KK30KKworV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXkqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dl
dF9wbHVnaW5zKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RE9NUGx1Z2luQXJy
YXk+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wbHVnaW5zKCkpOworICAgIHJl
dHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NRE9N
TWltZVR5cGVBcnJheSogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X21pbWVfdHlwZXMoV2ViS2l0
RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRP
UihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpET01NaW1lVHlwZUFycmF5PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bWltZVR5cGVzKCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9uYXZp
Z2F0b3JfZ2V0X2Nvb2tpZV9lbmFibGVkKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+Y29va2llRW5hYmxlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfd2Via2l0
X2JhdHRlcnkoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworI2lmIEVOQUJMRShCQVRURVJZ
X1NUQVRVUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6QmF0dGVyeU1hbmFnZXI+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihXZWJDb3JlOjpOYXZpZ2F0b3JCYXR0ZXJ5Ojp3ZWJraXRCYXR0ZXJ5KCppdGVtKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQmF0
dGVyeSBTdGF0dXMiKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShCQVRURVJZX1NU
QVRVUykgKi8KK30KKworV2ViS2l0RE9NR2VvbG9jYXRpb24qIHdlYmtpdF9kb21fbmF2aWdhdG9y
X2dldF9nZW9sb2NhdGlvbihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisjaWYgRU5BQkxF
KEdFT0xPQ0FUSU9OKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwg
MCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFJlZlB0cjxXZWJDb3JlOjpHZW9sb2NhdGlvbj4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKFdlYkNvcmU6Ok5hdmlnYXRvckdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvbigqaXRlbSkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
Ikdlb2xvY2F0aW9uIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoR0VPTE9DQVRJ
T04pICovCit9CisKK1dlYktpdERPTU1lZGlhRGV2aWNlcyogd2Via2l0X2RvbV9uYXZpZ2F0b3Jf
Z2V0X21lZGlhX2RldmljZXMoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhRGV2aWNlcz4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKFdlYkNvcmU6Ok5hdmlnYXRvck1lZGlhRGV2aWNlczo6bWVkaWFEZXZpY2VzKCppdGVt
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiTWVkaWEgU3RyZWFtIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9oYXJk
d2FyZV9jb25jdXJyZW5jeShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisjaWYgRU5BQkxF
KE5BVklHQVRPUl9IV0NPTkNVUlJFTkNZKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklH
QVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+aGFyZHdhcmVDb25jdXJyZW5j
eSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJOYXZpZ2F0b3IgSHdjb25jdXJy
ZW5jeSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVO
QUJMRShOQVZJR0FUT1JfSFdDT05DVVJSRU5DWSkgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
bmF2aWdhdG9yX2dldF9hcHBfY29kZV9uYW1lKFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNv
cmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hcHBDb2RlTmFtZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2FwcF9uYW1l
KFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19O
QVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5hcHBOYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRf
ZG9tX25hdmlnYXRvcl9nZXRfYXBwX3ZlcnNpb24oV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmFwcFZlcnNpb24oKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wbGF0Zm9y
bShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
TkFWSUdBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOYXZpZ2F0b3IqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+cGxhdGZvcm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fbmF2aWdhdG9yX2dldF9wcm9kdWN0KFdlYktpdERPTU5hdmlnYXRvciogc2VsZikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNv
cmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
dWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5wcm9kdWN0KCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvZHVjdF9zdWIo
V2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05B
VklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPnByb2R1Y3RTdWIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtp
dF9kb21fbmF2aWdhdG9yX2dldF91c2VyX2FnZW50KFdlYktpdERPTU5hdmlnYXRvciogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJR0FUT1Ioc2VsZiksIDApOworICAgIFdl
YkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT51c2VyQWdlbnQoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF92ZW5kb3Io
V2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05B
VklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPnZlbmRvcigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2Rv
bV9uYXZpZ2F0b3JfZ2V0X3ZlbmRvcl9zdWIoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05BVklHQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZlbmRvclN1YigpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2xhbmd1YWdlKFdl
YktpdERPTU5hdmlnYXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OQVZJ
R0FUT1Ioc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5hdmlnYXRvciogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5sYW5ndWFnZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRf
ZG9tX25hdmlnYXRvcl9nZXRfb25fbGluZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTkFWSUdBVE9SKHNlbGYpLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6TmF2aWdhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPm9uTGluZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NTmF2aWdhdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzIwMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5h
dmlnYXRvci5oCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdERPTU5hdmlnYXRvcl9oCisjZGVmaW5lIFdlYktpdERPTU5hdmln
YXRvcl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTkFWSUdBVE9SICAgICAgICAgICAg
KHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTkFW
SUdBVE9SKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IsIFdlYktpdERPTU5hdmlnYXRvcikpCisjZGVmaW5l
IFdFQktJVF9ET01fTkFWSUdBVE9SX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IsIFdlYktpdERPTU5hdmln
YXRvckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX05BVklHQVRPUihvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTkFWSUdB
VE9SKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OQVZJR0FUT1JfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05BVklHQVRPUikp
CisjZGVmaW5lIFdFQktJVF9ET01fTkFWSUdBVE9SX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9OQVZJR0FUT1IsIFdlYktp
dERPTU5hdmlnYXRvckNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01OYXZpZ2F0b3IgeworICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TU5hdmlnYXRvckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7
Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdHlwZSh2
b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9qYXZhX2VuYWJsZWQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4K
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21fbmF2aWdhdG9yX2phdmFfZW5hYmxlZChXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9zdG9yYWdlX3VwZGF0ZXM6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9zdG9yYWdl
X3VwZGF0ZXMoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X25hdmlnYXRvcl9yZWdpc3Rlcl9wcm90b2NvbF9oYW5kbGVyOgorICogQHNlbGY6IEEgI1dlYktp
dERPTU5hdmlnYXRvcgorICogQHNjaGVtZTogQSAjZ2NoYXIKKyAqIEB1cmw6IEEgI2djaGFyCisg
KiBAdGl0bGU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9uYXZpZ2F0b3JfcmVn
aXN0ZXJfcHJvdG9jb2xfaGFuZGxlcihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzY2hlbWUsIGNvbnN0IGdjaGFyKiB1cmwsIGNvbnN0IGdjaGFyKiB0aXRsZSwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2lzX3Byb3RvY29sX2hh
bmRsZXJfcmVnaXN0ZXJlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqIEBz
Y2hlbWU6IEEgI2djaGFyCisgKiBAdXJsOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9pc19wcm90b2NvbF9oYW5k
bGVyX3JlZ2lzdGVyZWQoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmLCBjb25zdCBnY2hhciogc2No
ZW1lLCBjb25zdCBnY2hhciogdXJsLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0
X2RvbV9uYXZpZ2F0b3JfdW5yZWdpc3Rlcl9wcm90b2NvbF9oYW5kbGVyOgorICogQHNlbGY6IEEg
I1dlYktpdERPTU5hdmlnYXRvcgorICogQHNjaGVtZTogQSAjZ2NoYXIKKyAqIEB1cmw6IEEgI2dj
aGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9uYXZpZ2F0b3JfdW5yZWdpc3Rlcl9wcm90b2Nv
bF9oYW5kbGVyKFdlYktpdERPTU5hdmlnYXRvciogc2VsZiwgY29uc3QgZ2NoYXIqIHNjaGVtZSwg
Y29uc3QgZ2NoYXIqIHVybCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bmF2aWdhdG9yX3ZpYnJhdGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKiBA
dGltZTogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFi
aWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbmF2
aWdhdG9yX3ZpYnJhdGUoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmLCBndWxvbmcgdGltZSk7CisK
Ky8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3BsdWdpbnM6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRET01ET01QbHVnaW5BcnJheQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01ET01QbHVnaW5BcnJheSoKK3dlYmtpdF9kb21fbmF2aWdhdG9y
X2dldF9wbHVnaW5zKFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9uYXZpZ2F0b3JfZ2V0X21pbWVfdHlwZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2
aWdhdG9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01N
aW1lVHlwZUFycmF5CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTURPTU1pbWVUeXBlQXJyYXkqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfbWlt
ZV90eXBlcyhXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bmF2aWdhdG9yX2dldF9jb29raWVfZW5hYmxlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZp
Z2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0
X2Nvb2tpZV9lbmFibGVkKFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3dlYmtpdF9iYXR0ZXJ5OgorICogQHNlbGY6IEEgI1dlYktp
dERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NQmF0dGVyeU1hbmFnZXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRf
d2Via2l0X2JhdHRlcnkoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX25hdmlnYXRvcl9nZXRfZ2VvbG9jYXRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
TmF2aWdhdG9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01H
ZW9sb2NhdGlvbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01HZW9sb2NhdGlvbioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9nZW9sb2NhdGlv
bihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdh
dG9yX2dldF9tZWRpYV9kZXZpY2VzOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTWVkaWFEZXZpY2Vz
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU1l
ZGlhRGV2aWNlcyoKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9tZWRpYV9kZXZpY2VzKFdlYktp
dERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0
X2hhcmR3YXJlX2NvbmN1cnJlbmN5OgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgor
ICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2hhcmR3YXJl
X2NvbmN1cnJlbmN5KFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9uYXZpZ2F0b3JfZ2V0X2FwcF9jb2RlX25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
TmF2aWdhdG9yCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRf
YXBwX2NvZGVfbmFtZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fbmF2aWdhdG9yX2dldF9hcHBfbmFtZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZp
Z2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9hcHBf
bmFtZShXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2
aWdhdG9yX2dldF9hcHBfdmVyc2lvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9hcHBfdmVyc2lv
bihXZWJLaXRET01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdh
dG9yX2dldF9wbGF0Zm9ybToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9wbGF0Zm9ybShXZWJLaXRE
T01OYXZpZ2F0b3IqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9w
cm9kdWN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmlnYXRvcgorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3Byb2R1Y3QoV2ViS2l0RE9NTmF2aWdhdG9y
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvZHVjdF9zdWI6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgorICogUmV0dXJuczogQSAjZ2No
YXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfcHJvZHVjdF9zdWIoV2ViS2l0RE9NTmF2aWdhdG9yKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdXNlcl9hZ2VudDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fbmF2aWdhdG9yX2dldF91c2VyX2FnZW50KFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X3ZlbmRvcjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2
aWdhdG9yX2dldF92ZW5kb3IoV2ViS2l0RE9NTmF2aWdhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX25hdmlnYXRvcl9nZXRfdmVuZG9yX3N1YjoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01OYXZpZ2F0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dl
dF92ZW5kb3Jfc3ViKFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9uYXZpZ2F0b3JfZ2V0X2xhbmd1YWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5hdmln
YXRvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9uYXZpZ2F0b3JfZ2V0X2xhbmd1
YWdlKFdlYktpdERPTU5hdmlnYXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9uYXZp
Z2F0b3JfZ2V0X29uX2xpbmU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTmF2aWdhdG9yCisgKgor
ICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fbmF2aWdhdG9yX2dldF9vbl9saW5lKFdl
YktpdERPTU5hdmlnYXRvciogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01OYXZpZ2F0b3Jf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01O
YXZpZ2F0b3JNZWRpYURldmljZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJlYTJmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRvck1lZGlhRGV2aWNl
cy5jcHAKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVz
dCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmlj
ZXMuaCBhbmQKKyAgICBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwIGFyZSBjcmVh
dGVkIGZvciBOYXZpZ2F0b3JNZWRpYURldmljZXMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQg
dGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NTmF2aWdh
dG9yTWVkaWFEZXZpY2VzLmggYW5kCisgICAgV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBp
bGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
TmF2aWdhdG9yTWVkaWFEZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMmVhMmYyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2Vz
LmgKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0
byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMu
aCBhbmQKKyAgICBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXMuY3BwIGFyZSBjcmVhdGVk
IGZvciBOYXZpZ2F0b3JNZWRpYURldmljZXMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhl
IGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgV2ViS2l0RE9NTmF2aWdhdG9y
TWVkaWFEZXZpY2VzLmggYW5kCisgICAgV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzLmNw
cCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUu
CisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5hdmlnYXRv
clByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWY2NzllCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01OYXZpZ2F0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01OYXZp
Z2F0b3JQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NTmF2aWdhdG9yUHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL05hdmlnYXRvci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01OYXZpZ2F0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01OYXZpZ2F0b3Iq
IHdyYXBOYXZpZ2F0b3IoV2ViQ29yZTo6TmF2aWdhdG9yKik7CitXZWJLaXRET01OYXZpZ2F0b3Iq
IGtpdChXZWJDb3JlOjpOYXZpZ2F0b3IqKTsKK1dlYkNvcmU6Ok5hdmlnYXRvciogY29yZShXZWJL
aXRET01OYXZpZ2F0b3IqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2Vi
S2l0RE9NTmF2aWdhdG9yUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Ob2RlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzI3MmFm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlLmNwcApAQCAtMCwwICsxLDczMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTU5vZGUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTURvY3VtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUVs
ZW1lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlTGlz
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NTm9kZVVuc3RhYmxlLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfR0VU
X1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9N
X1RZUEVfTk9ERSwgV2ViS2l0RE9NTm9kZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01Ob2RlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGNvcmVPYmplY3Q7
Cit9IFdlYktpdERPTU5vZGVQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NTm9kZSoga2l0KFdlYkNvcmU6Ok5vZGUqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9OT0RFKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcChvYmopOworfQorCitXZWJDb3JlOjpOb2RlKiBjb3JlKFdlYktpdERPTU5vZGUqIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2Rl
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NTm9kZSogd3JhcE5vZGUoV2ViQ29yZTo6Tm9kZSogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERShnX29iamVjdF9u
ZXcoV0VCS0lUX0RPTV9UWVBFX05PREUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX25vZGVfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwg
V2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpF
dmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvcmVUYXJnZXQg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNv
cmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9ub2RlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6Ok5vZGUqIGNv
cmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
dGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlz
dGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZl
bnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fbm9kZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpOb2RlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExp
c3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwg
dXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3Bh
dGNoX2V2ZW50ID0gd2Via2l0X2RvbV9ub2RlX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5h
ZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX25vZGVfYWRkX2V2ZW50X2xpc3RlbmVyOwor
ICAgIGlmYWNlLT5yZW1vdmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX25vZGVfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01O
b2RlLCB3ZWJraXRfZG9tX25vZGUsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5U
X0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50
X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTk9ERV9OQU1F
LAorICAgIFBST1BfTk9ERV9WQUxVRSwKKyAgICBQUk9QX05PREVfVFlQRSwKKyAgICBQUk9QX1BB
UkVOVF9OT0RFLAorICAgIFBST1BfQ0hJTERfTk9ERVMsCisgICAgUFJPUF9GSVJTVF9DSElMRCwK
KyAgICBQUk9QX0xBU1RfQ0hJTEQsCisgICAgUFJPUF9QUkVWSU9VU19TSUJMSU5HLAorICAgIFBS
T1BfTkVYVF9TSUJMSU5HLAorICAgIFBST1BfT1dORVJfRE9DVU1FTlQsCisgICAgUFJPUF9CQVNF
X1VSSSwKKyAgICBQUk9QX1RFWFRfQ09OVEVOVCwKKyAgICBQUk9QX0lTX0NPTk5FQ1RFRCwKKyAg
ICBQUk9QX1BBUkVOVF9FTEVNRU5ULAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ub2Rl
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01Ob2RlUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fTk9ERV9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAg
cHJpdi0+fldlYktpdERPTU5vZGVQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV9ub2RlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fbm9kZV9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAg
ICBXZWJLaXRET01Ob2RlKiBzZWxmID0gV0VCS0lUX0RPTV9OT0RFKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTk9ERV9WQUxVRToKKyAgICAgICAg
d2Via2l0X2RvbV9ub2RlX3NldF9ub2RlX3ZhbHVlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2
YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEVYVF9DT05U
RU5UOgorICAgICAgICB3ZWJraXRfZG9tX25vZGVfc2V0X3RleHRfY29udGVudChzZWxmLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fbm9kZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01Ob2RlKiBzZWxmID0gV0VCS0lUX0RPTV9OT0RFKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTk9ERV9OQU1FOgorICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OT0RFX1ZBTFVFOgorICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfdmFsdWUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTk9ERV9UWVBFOgorICAgICAgICBn
X3ZhbHVlX3NldF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfdHlwZShzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVJFTlRfTk9ERToKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9ub2Rl
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NISUxEX05PREVTOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRf
bm9kZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRklSU1RfQ0hJTEQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9m
aXJzdF9jaGlsZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MQVNUX0NI
SUxEOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9n
ZXRfbGFzdF9jaGlsZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUkVW
SU9VU19TSUJMSU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9k
b21fbm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9ORVhUX1NJQkxJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9uZXh0X3NpYmxpbmcoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfT1dORVJfRE9DVU1FTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9vd25lcl9kb2N1bWVudChzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CQVNFX1VSSToKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9iYXNlX3VyaShzZWxmKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9URVhUX0NPTlRFTlQ6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9nZXRfdGV4dF9jb250ZW50KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lTX0NPTk5FQ1RFRDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dldF9pc19jb25u
ZWN0ZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFSRU5UX0VMRU1F
TlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2RlX2dl
dF9wYXJlbnRfZWxlbWVudChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5
SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCog
d2Via2l0X2RvbV9ub2RlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbm9k
ZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NTm9kZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX05PREVfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9ub2RlX2NsYXNzX2luaXQoV2ViS2l0RE9NTm9kZUNsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01Ob2RlUHJpdmF0ZSkpOworICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX25vZGVfY29uc3RydWN0b3I7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fbm9kZV9maW5hbGl6ZTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fbm9kZV9zZXRfcHJvcGVydHk7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3Byb3Bl
cnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX05PREVfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJub2RlLW5hbWUiLAorICAgICAgICAgICAgIk5vZGU6bm9k
ZS1uYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIE5vZGU6bm9kZS1uYW1lIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfTk9ERV9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJub2RlLXZhbHVlIiwKKyAgICAgICAgICAgICJOb2RlOm5vZGUtdmFs
dWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIE5vZGU6bm9kZS12YWx1ZSIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9OT0RFX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAor
ICAgICAgICAgICAgIm5vZGUtdHlwZSIsCisgICAgICAgICAgICAiTm9kZTpub2RlLXR5cGUiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBndXNob3J0IE5vZGU6bm9kZS10eXBlIiwKKyAgICAgICAg
ICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX1BBUkVOVF9OT0RFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KAorICAgICAgICAgICAgInBhcmVudC1ub2RlIiwKKyAgICAgICAgICAgICJOb2RlOnBh
cmVudC1ub2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogTm9kZTpw
YXJlbnQtbm9kZSIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NISUxEX05P
REVTLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNoaWxkLW5v
ZGVzIiwKKyAgICAgICAgICAgICJOb2RlOmNoaWxkLW5vZGVzIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgV2ViS2l0RE9NTm9kZUxpc3QqIE5vZGU6Y2hpbGQtbm9kZXMiLAorICAgICAgICAgICAg
V0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0ZJUlNUX0NISUxELAorICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImZpcnN0LWNoaWxkIiwKKyAgICAgICAgICAgICJO
b2RlOmZpcnN0LWNoaWxkIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSog
Tm9kZTpmaXJzdC1jaGlsZCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xB
U1RfQ0hJTEQsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibGFz
dC1jaGlsZCIsCisgICAgICAgICAgICAiTm9kZTpsYXN0LWNoaWxkIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogTm9kZTpsYXN0LWNoaWxkIiwKKyAgICAgICAgICAgIFdF
QktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfUFJFVklPVVNfU0lCTElORywKKyAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgKKyAgICAgICAgICAgICJwcmV2aW91cy1zaWJsaW5nIiwKKyAgICAgICAgICAg
ICJOb2RlOnByZXZpb3VzLXNpYmxpbmciLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRE
T01Ob2RlKiBOb2RlOnByZXZpb3VzLXNpYmxpbmciLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9U
WVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9ORVhUX1NJQkxJTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisg
ICAgICAgICAgICAibmV4dC1zaWJsaW5nIiwKKyAgICAgICAgICAgICJOb2RlOm5leHQtc2libGlu
ZyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIE5vZGU6bmV4dC1zaWJs
aW5nIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfT1dORVJfRE9DVU1FTlQs
CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAib3duZXItZG9jdW1l
bnQiLAorICAgICAgICAgICAgIk5vZGU6b3duZXItZG9jdW1lbnQiLAorICAgICAgICAgICAgInJl
YWQtb25seSBXZWJLaXRET01Eb2N1bWVudCogTm9kZTpvd25lci1kb2N1bWVudCIsCisgICAgICAg
ICAgICBXRUJLSVRfRE9NX1RZUEVfRE9DVU1FTlQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9CQVNFX1VSSSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJiYXNlLXVyaSIsCisgICAgICAgICAgICAiTm9k
ZTpiYXNlLXVyaSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBOb2RlOmJhc2UtdXJp
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfVEVYVF9DT05URU5ULAorICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKAorICAgICAgICAgICAgInRleHQtY29udGVudCIsCisgICAgICAgICAgICAiTm9kZTp0
ZXh0LWNvbnRlbnQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIE5vZGU6dGV4dC1j
b250ZW50IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lTX0NPTk5FQ1RFRCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtY29ubmVjdGVkIiwKKyAgICAgICAgICAg
ICJOb2RlOmlzLWNvbm5lY3RlZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIE5v
ZGU6aXMtY29ubmVjdGVkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEFSRU5UX0VMRU1FTlQsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAicGFyZW50LWVsZW1lbnQi
LAorICAgICAgICAgICAgIk5vZGU6cGFyZW50LWVsZW1lbnQiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01FbGVtZW50KiBOb2RlOnBhcmVudC1lbGVtZW50IiwKKyAgICAgICAgICAg
IFdFQktJVF9ET01fVFlQRV9FTEVNRU5ULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ub2RlX2luaXQoV2ViS2l0RE9N
Tm9kZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01Ob2RlUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fTk9ERV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERP
TU5vZGVQcml2YXRlKCk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9pbnNl
cnRfYmVmb3JlKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5ld0NoaWxkLCBX
ZWJLaXRET01Ob2RlKiByZWZDaGlsZCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFKG5ld0NoaWxkKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
IXJlZkNoaWxkIHx8IFdFQktJVF9ET01fSVNfTk9ERShyZWZDaGlsZCksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpOb2Rl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRl
ZE5ld0NoaWxkID0gV2ViS2l0Ojpjb3JlKG5ld0NoaWxkKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBj
b252ZXJ0ZWRSZWZDaGlsZCA9IFdlYktpdDo6Y29yZShyZWZDaGlsZCk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCBvayA9IGl0ZW0tPmluc2VydEJlZm9yZSgq
Y29udmVydGVkTmV3Q2hpbGQsIGNvbnZlcnRlZFJlZkNoaWxkLCBlYyk7CisgICAgaWYgKG9rKQor
ICAgICAgICByZXR1cm4gV2ViS2l0OjpraXQoY29udmVydGVkTmV3Q2hpbGQpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIHJldHVybiAwOworfQorCitXZWJLaXRET01Ob2Rl
KiB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZChXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJL
aXRET01Ob2RlKiBuZXdDaGlsZCwgV2ViS2l0RE9NTm9kZSogb2xkQ2hpbGQsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShuZXdDaGlsZCksIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShvbGRDaGlsZCksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJD
b3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUq
IGNvbnZlcnRlZE5ld0NoaWxkID0gV2ViS2l0Ojpjb3JlKG5ld0NoaWxkKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBjb252ZXJ0ZWRPbGRDaGlsZCA9IFdlYktpdDo6Y29yZShvbGRDaGlsZCk7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCBvayA9IGl0ZW0tPnJlcGxh
Y2VDaGlsZCgqY29udmVydGVkTmV3Q2hpbGQsICpjb252ZXJ0ZWRPbGRDaGlsZCwgZWMpOworICAg
IGlmIChvaykKKyAgICAgICAgcmV0dXJuIFdlYktpdDo6a2l0KGNvbnZlcnRlZE9sZENoaWxkKTsK
KworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworV2Vi
S2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX3JlbW92ZV9jaGlsZChXZWJLaXRET01Ob2RlKiBz
ZWxmLCBXZWJLaXRET01Ob2RlKiBvbGRDaGlsZCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OT0RFKG9sZENoaWxkKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkT2xkQ2hpbGQg
PSBXZWJLaXQ6OmNvcmUob2xkQ2hpbGQpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGJvb2wgb2sgPSBpdGVtLT5yZW1vdmVDaGlsZCgqY29udmVydGVkT2xkQ2hpbGQs
IGVjKTsKKyAgICBpZiAob2spCisgICAgICAgIHJldHVybiBXZWJLaXQ6OmtpdChjb252ZXJ0ZWRP
bGRDaGlsZCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgcmV0dXJuIDA7
Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9hcHBlbmRfY2hpbGQoV2ViS2l0
RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV3Q2hpbGQsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShuZXdDaGlsZCksIDApOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpOb2Rl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRl
ZE5ld0NoaWxkID0gV2ViS2l0Ojpjb3JlKG5ld0NoaWxkKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBib29sIG9rID0gaXRlbS0+YXBwZW5kQ2hpbGQoKmNvbnZlcnRl
ZE5ld0NoaWxkLCBlYyk7CisgICAgaWYgKG9rKQorICAgICAgICByZXR1cm4gV2ViS2l0OjpraXQo
Y29udmVydGVkTmV3Q2hpbGQpOworCisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IHJldHVybiAwOworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX25vZGVfaGFzX2NoaWxkX25vZGVz
KFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aGFzQ2hpbGROb2RlcygpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9jbG9uZV9u
b2RlX3dpdGhfZXJyb3IoV2ViS2l0RE9NTm9kZSogc2VsZiwgZ2Jvb2xlYW4gZGVlcCwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNv
cmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5jbG9uZU5vZGVGb3JCaW5kaW5ncyhkZWVwLCBlYykpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV9ub2RlX25vcm1hbGl6ZShXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5ub3JtYWxpemUoKTsKK30KKworZ2Jvb2xlYW4g
d2Via2l0X2RvbV9ub2RlX2lzX3N1cHBvcnRlZChXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBn
Y2hhciogZmVhdHVyZSwgY29uc3QgZ2NoYXIqIHZlcnNpb24pCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTk9ERShzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGZl
YXR1cmUsIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh2ZXJzaW9uLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRGZWF0dXJlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGZlYXR1cmUp
OworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZlcnNpb24gPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmVyc2lvbik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aXNTdXBwb3J0ZWRGb3JC
aW5kaW5ncyhjb252ZXJ0ZWRGZWF0dXJlLCBjb252ZXJ0ZWRWZXJzaW9uKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdlYktp
dERPTU5vZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG90aGVyKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREUoc2VsZiksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX05PREUob3RoZXIpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRPdGhl
ciA9IFdlYktpdDo6Y29yZShvdGhlcik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aXNT
YW1lTm9kZShjb252ZXJ0ZWRPdGhlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xl
YW4gd2Via2l0X2RvbV9ub2RlX2lzX2VxdWFsX25vZGUoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2Vi
S2l0RE9NTm9kZSogb3RoZXIpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxm
KSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShv
dGhlciksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE90aGVyID0gV2ViS2l0Ojpjb3JlKG90
aGVyKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc0VxdWFsTm9kZShjb252ZXJ0ZWRP
dGhlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9s
b29rdXBfcHJlZml4KFdlYktpdERPTU5vZGUqIHNlbGYsIGNvbnN0IGdjaGFyKiBuYW1lc3BhY2VV
UkkpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwobmFtZXNwYWNlVVJJLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE5hbWVz
cGFjZVVSSSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lc3BhY2VVUkkpOworICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxvb2t1cFByZWZpeChjb252ZXJ0
ZWROYW1lc3BhY2VVUkkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0
X2RvbV9ub2RlX2xvb2t1cF9uYW1lc3BhY2VfdXJpKFdlYktpdERPTU5vZGUqIHNlbGYsIGNvbnN0
IGdjaGFyKiBwcmVmaXgpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocHJlZml4LCAwKTsKKyAgICBXZWJDb3JlOjpO
b2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFByZWZpeCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChwcmVmaXgpOworICAgIGdjaGFyKiByZXN1
bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxvb2t1cE5hbWVzcGFjZVVSSShjb252ZXJ0
ZWRQcmVmaXgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9t
X25vZGVfaXNfZGVmYXVsdF9uYW1lc3BhY2UoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2No
YXIqIG5hbWVzcGFjZVVSSSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYp
LCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobmFtZXNwYWNlVVJJLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWROYW1lc3BhY2VVUkkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFt
ZXNwYWNlVVJJKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pc0RlZmF1bHROYW1lc3Bh
Y2UoY29udmVydGVkTmFtZXNwYWNlVVJJKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndXNo
b3J0IHdlYmtpdF9kb21fbm9kZV9jb21wYXJlX2RvY3VtZW50X3Bvc2l0aW9uKFdlYktpdERPTU5v
ZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG90aGVyKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX05PREUoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTk9ERShvdGhlciksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkT3RoZXIgPSBXZWJLaXQ6OmNv
cmUob3RoZXIpOworICAgIGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+Y29tcGFyZURvY3VtZW50UG9z
aXRpb24oKmNvbnZlcnRlZE90aGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVh
biB3ZWJraXRfZG9tX25vZGVfY29udGFpbnMoV2ViS2l0RE9NTm9kZSogc2VsZiwgV2ViS2l0RE9N
Tm9kZSogb3RoZXIpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgRkFM
U0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShvdGhlciks
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZE90aGVyID0gV2ViS2l0Ojpjb3JlKG90aGVyKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5jb250YWlucyhjb252ZXJ0ZWRPdGhlcik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV9u
YW1lKFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9E
RShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5ub2RlTmFt
ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9ub2RlX2dl
dF9ub2RlX3ZhbHVlKFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5ub2RlVmFsdWUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X25vZGVfc2V0X25vZGVfdmFsdWUoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZh
bHVlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZikp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVy
cm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0
ZW0tPnNldE5vZGVWYWx1ZShjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ3VzaG9ydCB3
ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfdHlwZShXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXN1bHQgPSBpdGVtLT5u
b2RlVHlwZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtp
dF9kb21fbm9kZV9nZXRfcGFyZW50X25vZGUoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0
KiB3ZWJraXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdlYktpdERPTU5vZGUqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9k
ZUxpc3Q+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5jaGlsZE5vZGVzKCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0
RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2dldF9maXJzdF9jaGlsZChXZWJLaXRET01Ob2RlKiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDApOworICAgIFdl
YkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5maXJzdENoaWxkKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2dldF9sYXN0X2NoaWxkKFdlYktpdERPTU5vZGUq
IHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmxhc3RDaGlsZCgp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dl
YktpdERPTU5vZGUqIHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhXZWJLaXRE
T01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoc2VsZiksIDAp
OworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVm
UHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wcmV2
aW91c1NpYmxpbmcoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0
KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGlu
ZyhXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUo
c2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihp
dGVtLT5uZXh0U2libGluZygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3Vs
dC5nZXQoKSk7Cit9CisKK1dlYktpdERPTURvY3VtZW50KiB3ZWJraXRfZG9tX25vZGVfZ2V0X293
bmVyX2RvY3VtZW50KFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5vd25lckRvY3VtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fbm9kZV9n
ZXRfYmFzZV91cmkoV2ViS2l0RE9NTm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19OT0RFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PmJhc2VVUkkoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21f
bm9kZV9nZXRfdGV4dF9jb250ZW50KFdlYktpdERPTU5vZGUqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfTk9ERShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0
cmluZyhpdGVtLT50ZXh0Q29udGVudCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IHdlYmtpdF9kb21fbm9kZV9zZXRfdGV4dF9jb250ZW50KFdlYktpdERPTU5vZGUqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19OT0RFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5zZXRUZXh0Q29udGVudChjb252ZXJ0ZWRWYWx1ZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0K
K30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9ub2RlX2dldF9pc19jb25uZWN0ZWQoV2ViS2l0RE9N
Tm9kZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHNlbGYpLCBGQUxT
RSk7CisgICAgV2ViQ29yZTo6Tm9kZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5pbkRvY3VtZW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworV2ViS2l0RE9NRWxlbWVudCogd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfZWxlbWVu
dChXZWJLaXRET01Ob2RlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUo
c2VsZiksIDApOworICAgIFdlYkNvcmU6Ok5vZGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5wYXJlbnRFbGVtZW50KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJiZWJjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Ob2RlLmgKQEAgLTAsMCArMSw0MzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRk
b20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktp
dERPTU5vZGVfaAorI2RlZmluZSBXZWJLaXRET01Ob2RlX2gKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfRE9NX1RZUEVfTk9ERSAgICAgICAgICAgICh3ZWJraXRfZG9tX25vZGVfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9OT0RFLCBXZWJLaXRET01O
b2RlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9OT0RFLCBXZWJLaXRET01O
b2RlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfTk9ERShvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfTk9ERSkpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfTk9ERV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTk9ERSkpCisjZGVmaW5lIFdFQktJVF9ET01f
Tk9ERV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfRE9NX1RZUEVfTk9ERSwgV2ViS2l0RE9NTm9kZUNsYXNzKSkKKworLyoqCisgKiBXRUJL
SVRfRE9NX05PREVfRUxFTUVOVF9OT0RFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9F
TEVNRU5UX05PREUgMQorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9BVFRSSUJVVEVfTk9ERToK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfQVRUUklCVVRFX05PREUgMgorCisvKioKKyAq
IFdFQktJVF9ET01fTk9ERV9URVhUX05PREU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RF
X1RFWFRfTk9ERSAzCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0NEQVRBX1NFQ1RJT05fTk9E
RToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfQ0RBVEFfU0VDVElPTl9OT0RFIDQKKwor
LyoqCisgKiBXRUJLSVRfRE9NX05PREVfRU5USVRZX1JFRkVSRU5DRV9OT0RFOgorICovCisjZGVm
aW5lIFdFQktJVF9ET01fTk9ERV9FTlRJVFlfUkVGRVJFTkNFX05PREUgNQorCisvKioKKyAqIFdF
QktJVF9ET01fTk9ERV9FTlRJVFlfTk9ERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVf
RU5USVRZX05PREUgNgorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9QUk9DRVNTSU5HX0lOU1RS
VUNUSU9OX05PREU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX1BST0NFU1NJTkdfSU5T
VFJVQ1RJT05fTk9ERSA3CisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0NPTU1FTlRfTk9ERToK
KyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfQ09NTUVOVF9OT0RFIDgKKworLyoqCisgKiBX
RUJLSVRfRE9NX05PREVfRE9DVU1FTlRfTk9ERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05P
REVfRE9DVU1FTlRfTk9ERSA5CisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1RZ
UEVfTk9ERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfVFlQRV9OT0RF
IDEwCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX0ZSQUdNRU5UX05PREU6Cisg
Ki8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX0ZSQUdNRU5UX05PREUgMTEKKwor
LyoqCisgKiBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEOgor
ICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNU
RUQgMHgwMQorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9QT1NJVElPTl9QUkVD
RURJTkc6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX1BS
RUNFRElORyAweDAyCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9O
X0ZPTExPV0lORzoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJ
T05fRk9MTE9XSU5HIDB4MDQKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9T
SVRJT05fQ09OVEFJTlM6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BP
U0lUSU9OX0NPTlRBSU5TIDB4MDgKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRf
UE9TSVRJT05fQ09OVEFJTkVEX0JZOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9ET0NV
TUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkgMHgxMAorCisvKioKKyAqIFdFQktJVF9ET01fTk9E
RV9ET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQzoKKyAqLworI2RlZmlu
ZSBXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lG
SUMgMHgyMAorCitzdHJ1Y3QgX1dlYktpdERPTU5vZGUgeworICAgIFdlYktpdERPTU9iamVjdCBw
YXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTU5vZGVDbGFzcyB7CisgICAg
V2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X2RvbV9ub2RlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21f
bm9kZV9pbnNlcnRfYmVmb3JlOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBuZXdD
aGlsZDogQSAjV2ViS2l0RE9NTm9kZQorICogQHJlZkNoaWxkOiAoYWxsb3ctbm9uZSk6IEEgI1dl
YktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUq
Cit3ZWJraXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJL
aXRET01Ob2RlKiBuZXdDaGlsZCwgV2ViS2l0RE9NTm9kZSogcmVmQ2hpbGQsIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Ob2RlCisgKiBAbmV3Q2hpbGQ6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBv
bGRDaGlsZDogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9kZV9yZXBsYWNlX2NoaWxkKFdlYktpdERPTU5v
ZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5ld0NoaWxkLCBXZWJLaXRET01Ob2RlKiBvbGRDaGls
ZCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9yZW1vdmVfY2hp
bGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG9sZENoaWxkOiBBICNXZWJLaXRE
T01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Vi
a2l0X2RvbV9ub2RlX3JlbW92ZV9jaGlsZChXZWJLaXRET01Ob2RlKiBzZWxmLCBXZWJLaXRET01O
b2RlKiBvbGRDaGlsZCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9k
ZV9hcHBlbmRfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG5ld0NoaWxk
OiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRE
T01Ob2RlKgord2Via2l0X2RvbV9ub2RlX2FwcGVuZF9jaGlsZChXZWJLaXRET01Ob2RlKiBzZWxm
LCBXZWJLaXRET01Ob2RlKiBuZXdDaGlsZCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9k
ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV2ViS2l0RE9NTm9kZSogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9ub2RlX2Nsb25lX25vZGVfd2l0aF9lcnJvcjoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Ob2RlCisgKiBAZGVlcDogQSAjZ2Jvb2xlYW4KKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQor
ICoKKyAqIFNpbmNlOiAyLjE0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtp
dF9kb21fbm9kZV9jbG9uZV9ub2RlX3dpdGhfZXJyb3IoV2ViS2l0RE9NTm9kZSogc2VsZiwgZ2Jv
b2xlYW4gZGVlcCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9u
b3JtYWxpemU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX25vZGVfbm9ybWFsaXplKFdlYktpdERPTU5vZGUqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9pc19zdXBwb3J0ZWQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NTm9kZQorICogQGZlYXR1cmU6IEEgI2djaGFyCisgKiBAdmVyc2lvbjogQSAjZ2NoYXIK
KyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3
ZWJraXRfZG9tX25vZGVfaXNfc3VwcG9ydGVkKFdlYktpdERPTU5vZGUqIHNlbGYsIGNvbnN0IGdj
aGFyKiBmZWF0dXJlLCBjb25zdCBnY2hhciogdmVyc2lvbik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ub2RlX2lzX3NhbWVfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb3Ro
ZXI6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25vZGVfaXNfc2FtZV9ub2RlKFdlYktpdERP
TU5vZGUqIHNlbGYsIFdlYktpdERPTU5vZGUqIG90aGVyKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X25vZGVfaXNfZXF1YWxfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb3Ro
ZXI6IEEgI1dlYktpdERPTU5vZGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitX
RUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25vZGVfaXNfZXF1YWxfbm9kZShXZWJLaXRE
T01Ob2RlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBvdGhlcik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ub2RlX2xvb2t1cF9wcmVmaXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG5h
bWVzcGFjZVVSSTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9ub2RlX2xvb2t1cF9wcmVmaXgoV2ViS2l0RE9NTm9k
ZSogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ub2RlX2xvb2t1cF9uYW1lc3BhY2VfdXJpOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUK
KyAqIEBwcmVmaXg6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbm9kZV9sb29rdXBfbmFtZXNwYWNlX3VyaShXZWJL
aXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogcHJlZml4KTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX25vZGVfaXNfZGVmYXVsdF9uYW1lc3BhY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9k
ZQorICogQG5hbWVzcGFjZVVSSTogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVh
bgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25vZGVfaXNfZGVmYXVsdF9u
YW1lc3BhY2UoV2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIG5hbWVzcGFjZVVSSSk7
CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2NvbXBhcmVfZG9jdW1lbnRfcG9zaXRpb246Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG90aGVyOiBBICNXZWJLaXRET01Ob2RlCisg
KgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorKiovCitXRUJLSVRfQVBJIGd1c2hvcnQKK3dlYmtp
dF9kb21fbm9kZV9jb21wYXJlX2RvY3VtZW50X3Bvc2l0aW9uKFdlYktpdERPTU5vZGUqIHNlbGYs
IFdlYktpdERPTU5vZGUqIG90aGVyKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfY29udGFp
bnM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQG90aGVyOiBBICNXZWJLaXRET01O
b2RlCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2RvbV9ub2RlX2NvbnRhaW5zKFdlYktpdERPTU5vZGUqIHNlbGYsIFdlYktpdERP
TU5vZGUqIG90aGVyKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV9uYW1lKFdlYktp
dERPTU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV92YWx1
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIK
KyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV92YWx1ZShX
ZWJLaXRET01Ob2RlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfc2V0X25vZGVf
dmFsdWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICogQHZhbHVlOiBBICNnY2hhcgor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
bm9kZV9zZXRfbm9kZV92YWx1ZShXZWJLaXRET01Ob2RlKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVf
dHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogQSAjZ3Vz
aG9ydAorKiovCitXRUJLSVRfQVBJIGd1c2hvcnQKK3dlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV90
eXBlKFdlYktpdERPTU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRf
cGFyZW50X25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9ub2RlKFdlYktpdERPTU5vZGUq
IHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXM6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTog
QSAjV2ViS2l0RE9NTm9kZUxpc3QKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlzdCoK
K3dlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV2ViS2l0RE9NTm9kZSogc2VsZik7CisK
Ky8qKgorICogd2Via2l0X2RvbV9ub2RlX2dldF9maXJzdF9jaGlsZDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9kZV9n
ZXRfZmlyc3RfY2hpbGQoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV9ub2RlX2dldF9sYXN0X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGUKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9ub2RlX2dldF9sYXN0X2NoaWxkKFdlYktp
dERPTU5vZGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNf
c2libGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9N
Tm9kZSoKK3dlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhXZWJLaXRET01Ob2Rl
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfZ2V0X25leHRfc2libGluZzoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtp
dF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nKFdlYktpdERPTU5vZGUqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fbm9kZV9nZXRfb3duZXJfZG9jdW1lbnQ6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NTm9kZQorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9N
RG9jdW1lbnQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCoKK3dlYmtpdF9kb21f
bm9kZV9nZXRfb3duZXJfZG9jdW1lbnQoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9ub2RlX2dldF9iYXNlX3VyaToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2Rl
CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtp
dF9kb21fbm9kZV9nZXRfYmFzZV91cmkoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV9ub2RlX2dldF90ZXh0X2NvbnRlbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
Tm9kZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3
ZWJraXRfZG9tX25vZGVfZ2V0X3RleHRfY29udGVudChXZWJLaXRET01Ob2RlKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX25vZGVfc2V0X3RleHRfY29udGVudDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01Ob2RlCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9ub2RlX3NldF90ZXh0X2NvbnRlbnQo
V2ViS2l0RE9NTm9kZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7
CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfZWxlbWVudDoKKyAqIEBzZWxm
OiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNX
ZWJLaXRET01FbGVtZW50CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRWxlbWVudCoKK3dlYmtp
dF9kb21fbm9kZV9nZXRfcGFyZW50X2VsZW1lbnQoV2ViS2l0RE9NTm9kZSogc2VsZik7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01Ob2RlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTU5vZGVGaWx0ZXIuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5jcHAKcmVuYW1l
IHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NTm9kZUZpbHRlci5jcHAKaW5kZXggZDgwZmU3MC4uOGZlNmVjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU5vZGVGaWx0ZXIuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZUZpbHRlci5oIgogCiAjaW5jbHVkZSAiR09iamVjdE5vZGVGaWx0ZXJDb25k
aXRpb24uaCIKLSNpbmNsdWRlICJOYXRpdmVOb2RlRmlsdGVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9OYXRpdmVOb2RlRmlsdGVyLmg+CiAjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZS5oIgogI2luY2x1
ZGUgIldlYktpdERPTU5vZGVGaWx0ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KQEAgLTcyLDcgKzcyLDcgQEAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVGaWx0ZXI+IGNvcmUoV2Vi
S2l0RE9NTm9kZUZpbHRlciogbm9kZUZpbHRlcikKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpOb2Rl
RmlsdGVyPiBjb3JlTm9kZUZpbHRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGVGaWx0ZXIq
PihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChub2RlRmlsdGVyKSwgIndlYmtpdC1jb3JlLW5v
ZGUtZmlsdGVyIikpOwogICAgIGlmICghY29yZU5vZGVGaWx0ZXIpIHsKLSAgICAgICAgY29yZU5v
ZGVGaWx0ZXIgPSBXZWJDb3JlOjpOYXRpdmVOb2RlRmlsdGVyOjpjcmVhdGUoV2ViQ29yZTo6R09i
amVjdE5vZGVGaWx0ZXJDb25kaXRpb246OmNyZWF0ZShub2RlRmlsdGVyKSk7CisgICAgICAgIGNv
cmVOb2RlRmlsdGVyID0gV2ViQ29yZTo6TmF0aXZlTm9kZUZpbHRlcjo6Y3JlYXRlKFdlYktpdDo6
R09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb246OmNyZWF0ZShub2RlRmlsdGVyKSk7CiAgICAgICAg
IG5vZGVGaWx0ZXJNYXAoKS5hZGQoY29yZU5vZGVGaWx0ZXIuZ2V0KCksIG5vZGVGaWx0ZXIpOwog
ICAgICAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChub2RlRmlsdGVyKSwgbm9kZUZpbHRl
ck9iamVjdERlc3Ryb3llZENhbGxiYWNrLCBjb3JlTm9kZUZpbHRlci5nZXQoKSk7CiAgICAgICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG5vZGVGaWx0ZXIpLCAid2Via2l0LWNvcmUtbm9k
ZS1maWx0ZXIiLCBjb3JlTm9kZUZpbHRlci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUZp
bHRlci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuaApyZW5hbWUgdG8gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2Rl
RmlsdGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2Vi
S2l0RE9NTm9kZUZpbHRlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUZpbHRlclByaXZhdGUuaApzaW1p
bGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01Ob2RlRmlsdGVyUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVGaWx0
ZXJQcml2YXRlLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9k
ZUl0ZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMxMmM4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlSXRlcmF0b3IuY3BwCkBAIC0wLDAgKzEsMjY2
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZUl0ZXJhdG9yLmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTm9k
ZUZpbHRlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9OT0RFX0lURVJBVE9SX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX05PREVfSVRFUkFUT1IsIFdlYktpdERPTU5vZGVJ
dGVyYXRvclByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ob2RlSXRlcmF0b3JQ
cml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZUl0ZXJhdG9yPiBjb3JlT2JqZWN0Owor
fSBXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBraXQoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBvYmopCit7
CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJl
dCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01f
Tk9ERV9JVEVSQVRPUihyZXQpOworCisgICAgcmV0dXJuIHdyYXBOb2RlSXRlcmF0b3Iob2JqKTsK
K30KKworV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBjb3JlKFdlYktpdERPTU5vZGVJdGVyYXRvciog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5v
ZGVJdGVyYXRvcio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Cit9CisKK1dlYktpdERPTU5vZGVJdGVyYXRvciogd3JhcE5vZGVJdGVyYXRvcihXZWJDb3JlOjpO
b2RlSXRlcmF0b3IqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX05PREVfSVRFUkFUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9OT0RFX0lURVJBVE9SLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTU5v
ZGVJdGVyYXRvciwgd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yLCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9ST09ULAorICAgIFBST1BfV0hB
VF9UT19TSE9XLAorICAgIFBST1BfRklMVEVSLAorICAgIFBST1BfUkVGRVJFTkNFX05PREUsCisg
ICAgUFJPUF9QT0lOVEVSX0JFRk9SRV9SRUZFUkVOQ0VfTk9ERSwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTk9ERV9J
VEVSQVRPUl9HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNo
ZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERP
TU5vZGVJdGVyYXRvclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX25v
ZGVfaXRlcmF0b3JfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZiA9IFdFQktJVF9ET01fTk9ERV9JVEVS
QVRPUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9Q
X1JPT1Q6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9ub2Rl
X2l0ZXJhdG9yX2dldF9yb290KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1dIQVRfVE9fU0hPVzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9k
b21fbm9kZV9pdGVyYXRvcl9nZXRfd2hhdF90b19zaG93KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0ZJTFRFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X2ZpbHRlcihzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9SRUZFUkVOQ0VfTk9ERToKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3JlZmVyZW5jZV9ub2Rl
KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPSU5URVJfQkVGT1JFX1JF
RkVSRU5DRV9OT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRf
ZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3BvaW50ZXJfYmVmb3JlX3JlZmVyZW5jZV9ub2RlKHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0
b3JfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50
LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09i
amVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX3Bh
cmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwg
Y29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRl
KiBwcml2ID0gV0VCS0lUX0RPTV9OT0RFX0lURVJBVE9SX0dFVF9QUklWQVRFKG9iamVjdCk7Cisg
ICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGVJdGVyYXRvcio+
KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9N
T2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAg
cmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9y
X2NsYXNzX2luaXQoV2ViS2l0RE9NTm9kZUl0ZXJhdG9yQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RD
bGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9m
KFdlYktpdERPTU5vZGVJdGVyYXRvclByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2NvbnN0cnVjdG9yOworICAgIGdvYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZmluYWxpemU7Cisg
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3Jf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JPT1QsCisgICAgICAgIGdfcGFyYW1f
c3BlY19vYmplY3QoCisgICAgICAgICAgICAicm9vdCIsCisgICAgICAgICAgICAiTm9kZUl0ZXJh
dG9yOnJvb3QiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBOb2RlSXRl
cmF0b3I6cm9vdCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1dIQVRfVE9f
U0hPVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgIndoYXQtdG8t
c2hvdyIsCisgICAgICAgICAgICAiTm9kZUl0ZXJhdG9yOndoYXQtdG8tc2hvdyIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGd1bG9uZyBOb2RlSXRlcmF0b3I6d2hhdC10by1zaG93IiwKKyAgICAg
ICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GSUxURVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAiZmlsdGVyIiwKKyAgICAgICAgICAgICJOb2RlSXRlcmF0b3I6
ZmlsdGVyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZUZpbHRlciogTm9k
ZUl0ZXJhdG9yOmZpbHRlciIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9GSUxU
RVIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9SRUZFUkVOQ0VfTk9ERSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAg
ICAgICAgICJyZWZlcmVuY2Utbm9kZSIsCisgICAgICAgICAgICAiTm9kZUl0ZXJhdG9yOnJlZmVy
ZW5jZS1ub2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogTm9kZUl0
ZXJhdG9yOnJlZmVyZW5jZS1ub2RlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfUE9JTlRFUl9CRUZPUkVfUkVGRVJFTkNFX05PREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgInBvaW50ZXItYmVmb3JlLXJlZmVyZW5jZS1ub2RlIiwKKyAg
ICAgICAgICAgICJOb2RlSXRlcmF0b3I6cG9pbnRlci1iZWZvcmUtcmVmZXJlbmNlLW5vZGUiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBOb2RlSXRlcmF0b3I6cG9pbnRlci1iZWZv
cmUtcmVmZXJlbmNlLW5vZGUiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVf
aXRlcmF0b3JfaW5pdChXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHJlcXVlc3QpCit7CisgICAgV2Vi
S2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fTk9ERV9JVEVSQVRP
Ul9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU5vZGVJdGVy
YXRvclByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2l0ZXJh
dG9yX25leHRfbm9kZShXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYsIEdFcnJvcioqIGVycm9y
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREVfSVRFUkFUT1Ioc2VsZiksIDApOwor
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0
UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmV4dE5vZGUoKSk7CisgICAgcmV0dXJuIFdlYktp
dDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRf
ZG9tX25vZGVfaXRlcmF0b3JfcHJldmlvdXNfbm9kZShXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNl
bGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREVfSVRF
UkFUT1Ioc2VsZiksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6
Tm9kZUl0ZXJhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cHJldmlvdXNOb2Rl
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZGV0YWNoKFdlYktpdERPTU5vZGVJdGVyYXRv
ciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREVfSVRFUkFUT1Ioc2VsZikpOwor
ICAgIFdlYkNvcmU6Ok5vZGVJdGVyYXRvciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5kZXRhY2goKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2l0
ZXJhdG9yX2dldF9yb290KFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19OT0RFX0lURVJBVE9SKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpO
b2RlSXRlcmF0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yb290KCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdl
YmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfd2hhdF90b19zaG93KFdlYktpdERPTU5vZGVJdGVy
YXRvciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFX0lURVJBVE9SKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlSXRlcmF0b3IqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPndoYXRUb1Nob3coKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitXZWJLaXRET01Ob2RlRmlsdGVyKiB3ZWJraXRfZG9tX25vZGVfaXRl
cmF0b3JfZ2V0X2ZpbHRlcihXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
Tm9kZUl0ZXJhdG9yKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJD
b3JlOjpOb2RlRmlsdGVyPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZmlsdGVy
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
V2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9yZWZlcmVuY2Vfbm9k
ZShXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTk9ERV9JVEVSQVRPUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVmZXJlbmNlTm9kZSgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcG9pbnRlcl9iZWZvcmVfcmVmZXJlbmNlX25vZGUoV2Vi
S2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05P
REVfSVRFUkFUT1Ioc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpOb2RlSXRlcmF0b3IqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+cG9p
bnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU5vZGVJdGVyYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlSXRlcmF0b3IuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGQ0NzM0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01Ob2RlSXRlcmF0b3IuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRv
bS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
RE9NTm9kZUl0ZXJhdG9yX2gKKyNkZWZpbmUgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yX2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfTk9ERV9JVEVSQVRPUiAgICAgICAgICAg
ICh3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9OT0RFX0lURVJBVE9SKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9OT0RFX0lURVJBVE9SLCBXZWJLaXRET01Ob2RlSXRl
cmF0b3IpKQorI2RlZmluZSBXRUJLSVRfRE9NX05PREVfSVRFUkFUT1JfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05PREVf
SVRFUkFUT1IsIFdlYktpdERPTU5vZGVJdGVyYXRvckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX05PREVfSVRFUkFUT1Iob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX05PREVfSVRFUkFUT1IpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX05PREVfSVRFUkFUT1JfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX05PREVfSVRFUkFUT1IpKQorI2RlZmluZSBXRUJL
SVRfRE9NX05PREVfSVRFUkFUT1JfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX05PREVfSVRFUkFUT1IsIFdlYktpdERPTU5v
ZGVJdGVyYXRvckNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Ob2RlSXRlcmF0b3IgeworICAg
IFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERP
TU5vZGVJdGVyYXRvckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0
X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX25leHRfbm9k
ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRlcmF0b3IKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfbmV4
dF9ub2RlKFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9wcmV2aW91c19ub2RlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTU5vZGVJdGVyYXRvcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9wcmV2aW91c19ub2RlKFdl
YktpdERPTU5vZGVJdGVyYXRvciogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdl
YmtpdF9kb21fbm9kZV9pdGVyYXRvcl9kZXRhY2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9k
ZUl0ZXJhdG9yCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fbm9kZV9pdGVy
YXRvcl9kZXRhY2goV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3Jvb3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9k
ZUl0ZXJhdG9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01O
b2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fbm9kZV9pdGVy
YXRvcl9nZXRfcm9vdChXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfd2hhdF90b19zaG93OgorICogQHNlbGY6IEEgI1dl
YktpdERPTU5vZGVJdGVyYXRvcgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiovCitXRUJL
SVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF93aGF0X3RvX3Nob3co
V2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVf
aXRlcmF0b3JfZ2V0X2ZpbHRlcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRlcmF0b3IK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTU5vZGVGaWx0ZXIK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlRmlsdGVyKgord2Via2l0X2RvbV9ub2RlX2l0
ZXJhdG9yX2dldF9maWx0ZXIoV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBzZWxmKTsKKworLyoqCisg
KiB3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3JlZmVyZW5jZV9ub2RlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTU5vZGVJdGVyYXRvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJr
aXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3JlZmVyZW5jZV9ub2RlKFdlYktpdERPTU5vZGVJdGVy
YXRvciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9wb2lu
dGVyX2JlZm9yZV9yZWZlcmVuY2Vfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ob2RlSXRl
cmF0b3IKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3BvaW50ZXJfYmVmb3JlX3JlZmVyZW5j
ZV9ub2RlKFdlYktpdERPTU5vZGVJdGVyYXRvciogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXZWJLaXRET01Ob2RlSXRlcmF0b3JfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2Rl
SXRlcmF0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVJdGVyYXRvclByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTBhZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Ob2RlSXRlcmF0b3JQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Ob2RlSXRlcmF0b3JQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL05vZGVJdGVyYXRvci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlSXRl
cmF0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01Ob2RlSXRlcmF0b3IqIHdy
YXBOb2RlSXRlcmF0b3IoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yKik7CitXZWJLaXRET01Ob2RlSXRl
cmF0b3IqIGtpdChXZWJDb3JlOjpOb2RlSXRlcmF0b3IqKTsKK1dlYkNvcmU6Ok5vZGVJdGVyYXRv
ciogY29yZShXZWJLaXRET01Ob2RlSXRlcmF0b3IqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLyogV2ViS2l0RE9NTm9kZUl0ZXJhdG9yUHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU5vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2I1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVM
aXN0LmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVMaXN0LmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5j
bHVkZSAiV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9k
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29u
dmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0xJU1RfR0VUX1BSSVZBVEUo
b2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfTk9E
RV9MSVNULCBXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01Ob2RlTGlzdFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gY29y
ZU9iamVjdDsKK30gV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NTm9kZUxpc3QqIGtpdChXZWJDb3JlOjpOb2RlTGlzdCogb2JqKQorewor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX05P
REVfTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBOb2RlTGlzdChvYmopOworfQorCitXZWJD
b3JlOjpOb2RlTGlzdCogY29yZShXZWJLaXRET01Ob2RlTGlzdCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6Ok5vZGVMaXN0Kj4oV0VCS0lUX0RP
TV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NTm9kZUxp
c3QqIHdyYXBOb2RlTGlzdChXZWJDb3JlOjpOb2RlTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fTk9ERV9MSVNUKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNULCAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9U
WVBFKFdlYktpdERPTU5vZGVMaXN0LCB3ZWJraXRfZG9tX25vZGVfbGlzdCwgV0VCS0lUX0RPTV9U
WVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ub2RlX2xpc3RfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTU5vZGVMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
Tk9ERV9MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENh
Y2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0
RE9NTm9kZUxpc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9ub2Rl
X2xpc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NTm9kZUxpc3QqIHNlbGYgPSBXRUJLSVRfRE9NX05PREVfTElTVChvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xFTkdUSDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fbm9kZV9s
aXN0X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdP
YmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fbm9kZV9saXN0X3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29u
c3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX05PREVfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNv
cmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpOb2RlTGlzdCo+KFdFQktJVF9ET01fT0JK
RUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1
dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ub2RlX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRE
T01Ob2RlTGlzdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01Ob2RlTGlzdFByaXZh
dGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21f
bm9kZV9saXN0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV9ub2RlX2xpc3RfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xFTkdU
SCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxlbmd0aCIsCisg
ICAgICAgICAgICAiTm9kZUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vs
b25nIE5vZGVMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ub2RlX2xpc3RfaW5pdChXZWJLaXRET01Ob2RlTGlzdCogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01Ob2RlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX05PREVfTElTVF9H
RVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTU5vZGVMaXN0UHJp
dmF0ZSgpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKFdl
YktpdERPTU5vZGVMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfTk9ERV9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpOb2RlTGlzdCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVj
dFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX25v
ZGVfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTU5vZGVMaXN0KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX05PREVfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Tm9kZUxp
c3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0t
Pmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9k
ZUxpc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTm9kZUxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40ZmIwNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ob2RlTGlzdC5oCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTU5vZGVMaXN0X2gKKyNkZWZpbmUgV2ViS2l0
RE9NTm9kZUxpc3RfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRl
ZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9OT0RF
X0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9OT0RFX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX05PREVfTElTVCwgV2ViS2l0RE9NTm9k
ZUxpc3QpKQorI2RlZmluZSBXRUJLSVRfRE9NX05PREVfTElTVF9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNU
LCBXZWJLaXRET01Ob2RlTGlzdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX05PREVfTElT
VChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfTk9ERV9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OT0RFX0xJU1RfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9U
WVBFX05PREVfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9MSVNUX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9O
T0RFX0xJU1QsIFdlYktpdERPTU5vZGVMaXN0Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTU5v
ZGVMaXN0IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3Ry
dWN0IF9XZWJLaXRET01Ob2RlTGlzdENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX25vZGVfbGlz
dF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTU5vZGVMaXN0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJL
SVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtKFdlYktpdERP
TU5vZGVMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpOworCisvKioKKyAqIHdlYmtpdF9kb21fbm9k
ZV9saXN0X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NTm9kZUxpc3QKKyAqCisg
KiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21f
bm9kZV9saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NTm9kZUxpc3QqIHNlbGYpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NTm9kZUxpc3RfaCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Ob2RlTGlzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NTm9kZUxpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0ODVmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Tm9kZUxpc3RQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Ob2RlTGlzdFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01Ob2RlTGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlTGlzdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlTGlzdC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTU5vZGVMaXN0KiB3cmFwTm9kZUxpc3QoV2ViQ29yZTo6Tm9kZUxp
c3QqKTsKK1dlYktpdERPTU5vZGVMaXN0KiBraXQoV2ViQ29yZTo6Tm9kZUxpc3QqKTsKK1dlYkNv
cmU6Ok5vZGVMaXN0KiBjb3JlKFdlYktpdERPTU5vZGVMaXN0Kik7Cit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTU5vZGVMaXN0UHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTU5vZGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzYTBjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
Tm9kZVByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTU5vZGVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
Tm9kZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Ob2RlLmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTU5vZGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01O
b2RlKiB3cmFwTm9kZShXZWJDb3JlOjpOb2RlKik7CitXZWJLaXRET01Ob2RlKiBraXQoV2ViQ29y
ZTo6Tm9kZSopOworV2ViQ29yZTo6Tm9kZSogY29yZShXZWJLaXRET01Ob2RlKik7Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTU5vZGVQcml2YXRlX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NTm9kZVVuc3RhYmxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU5vZGVVbnN0YWJsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYmJkNmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTU5vZGVVbnN0YWJsZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTm9kZVVuc3RhYmxlX2gKKyNkZWZpbmUg
V2ViS2l0RE9NTm9kZVVuc3RhYmxlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSQorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4K
KworR19CRUdJTl9ERUNMUworCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9OT1RBVElPTl9OT0RF
OgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9OT1RBVElPTl9OT0RFIDEyCisKKy8qKgor
ICogd2Via2l0X2RvbV9ub2RlX2dldF9pc19jb25uZWN0ZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NTm9kZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX25vZGVfZ2V0X2lz
X2Nvbm5lY3RlZChXZWJLaXRET01Ob2RlKiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
Tm9kZVVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dv
YmplY3QvV2ViS2l0RE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NT2JqZWN0LmNwcApzaW1pbGFyaXR5IGlu
ZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJL
aXRET01PYmplY3QuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU9iamVjdC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU9i
amVjdC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU9iamVjdC5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTU9iamVjdC5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTU9iamVjdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NT2JqZWN0UHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjExYTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTU9iamVjdFByaXZhdGUuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKworI2lmbmRlZiBXZWJLaXRET01PYmplY3RQcml2
YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NT2JqZWN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisKK3N0cnVjdCBfV2ViS2l0RE9NT2JqZWN0IHsKKyAg
ICBHT2JqZWN0IHBhcmVudDsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NT2JqZWN0Q2xhc3Mgewor
ICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqIHdyYXApIChXZWJL
aXRET01PYmplY3QqLCB2b2lkKiBjb3JlT2JqZWN0KTsKK307CisKK3ZvaWQgd2Via2l0RE9NT2Jq
ZWN0V3JhcChXZWJLaXRET01PYmplY3QqLCB2b2lkKiBjb3JlT2JqZWN0KTsKKworI2VuZGlmIC8q
IFdlYktpdERPTU9iamVjdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NUGVyZm9ybWFuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjRjM2YyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlLmNwcApAQCAtMCww
ICsxLDM3NyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZvcm1hbmNlLmgiCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2lu
Y2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZv
cm1hbmNlTmF2aWdhdGlvblByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5j
ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9HRVRfUFJJVkFURShvYmopIEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5D
RSwgV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NUGVyZm9ybWFuY2VQcml2YXRlIHsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UGVyZm9ybWFuY2U+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9USU1JTkcpCit9IFdlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZTsKKworI2lmIEVOQUJMRShX
RUJfVElNSU5HKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NUGVyZm9ybWFuY2Uq
IGtpdChXZWJDb3JlOjpQZXJmb3JtYW5jZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0
KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFKHJldCk7CisKKyAg
ICByZXR1cm4gd3JhcFBlcmZvcm1hbmNlKG9iaik7Cit9CisKK1dlYkNvcmU6OlBlcmZvcm1hbmNl
KiBjb3JlKFdlYktpdERPTVBlcmZvcm1hbmNlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1
ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2UqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01QZXJmb3JtYW5jZSog
d3JhcFBlcmZvcm1hbmNlKFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRShn
X29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFLCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdl
YktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVu
dCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJD
b3JlOjpQZXJmb3JtYW5jZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBlcmZv
cm1hbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3Jl
VGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3Jp
cHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zy
b21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJv
cik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9hZGRfZXZlbnRfbGlzdGVuZXIoV2Vi
S2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3Vy
ZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlO
RykKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlBlcmZvcm1hbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlz
dGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1
c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VE
X1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNF
RF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9U
SU1JTkcpCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3JlbW92
ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQorewor
I2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9ybWFuY2UqPihXRUJLSVRfRE9NX09CSkVD
VCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRM
aXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0
LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFS
QU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sK
KyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2Rpc3Bh
dGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xp
c3RlbmVyID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7Cit9
CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVBlcmZvcm1hbmNlLCB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNULCBHX0lNUExFTUVOVF9JTlRF
UkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVudF90YXJn
ZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX05BVklHQVRJT04sCisg
ICAgUFJPUF9USU1JTkcsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZVBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0dFVF9QUklWQVRFKG9iamVjdCk7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9y
Z2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIHByaXYtPn5XZWJLaXRET01QZXJmb3JtYW5jZVByaXZhdGUoKTsKKyAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYgPSBXRUJL
SVRfRE9NX1BFUkZPUk1BTkNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfTkFWSUdBVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZh
bHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF9uYXZpZ2F0aW9uKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RJTUlORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF90aW1pbmcoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfY29uc3Ry
dWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0
Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2Jq
ZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFBy
b3BlcnRpZXMpOworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYktpdERPTVBlcmZvcm1h
bmNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGVyZm9y
bWFuY2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2NsYXNzX2luaXQoV2ViS2l0RE9NUGVy
Zm9ybWFuY2VDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2
YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9OQVZJR0FUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
Im5hdmlnYXRpb24iLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlOm5hdmlnYXRpb24iLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24qIFBlcmZv
cm1hbmNlOm5hdmlnYXRpb24iLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1B
TkNFX05BVklHQVRJT04sCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9USU1JTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisg
ICAgICAgICAgICAidGltaW5nIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZTp0aW1pbmciLAor
ICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogUGVyZm9y
bWFuY2U6dGltaW5nIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9U
SU1JTkcsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2luaXQoV2ViS2l0RE9NUGVyZm9ybWFuY2Uq
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlKiBwcml2ID0gV0VC
S0lUX0RPTV9QRVJGT1JNQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYp
IFdlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfY2xlYXJfcmVzb3VyY2VfdGltaW5ncyhXZWJLaXRET01QZXJmb3JtYW5jZSogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZP
Uk1BTkNFKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jbGVhclJlc291cmNlVGltaW5ncygpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiV2ViIFRpbWluZyIpCisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK3Zv
aWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9zZXRfcmVzb3VyY2VfdGltaW5nX2J1ZmZlcl9zaXpl
KFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmLCBndWxvbmcgbWF4U2l6ZSkKK3sKKyNpZiBFTkFC
TEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFKHNlbGYpKTsK
KyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRSZXNvdXJjZVRpbWluZ0J1ZmZlclNpemUobWF4U2l6ZSk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0obWF4U2l6ZSk7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisjZW5kaWYgLyogRU5B
QkxFKFdFQl9USU1JTkcpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJr
aXRfbWFyayhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiwgY29uc3QgZ2NoYXIqIG1hcmtOYW1l
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1BFUkZPUk1BTkNFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG1hcmtO
YW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJD
b3JlOjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRNYXJrTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtYXJrTmFtZSk7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+d2Via2l0TWFy
ayhjb252ZXJ0ZWRNYXJrTmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFVOVVNFRF9QQVJBTShtYXJrTmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9y
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyNl
bmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX3dlYmtpdF9jbGVhcl9tYXJrcyhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiwgY29u
c3QgZ2NoYXIqIG1hcmtOYW1lKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfUEVSRk9STUFOQ0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobWFy
a05hbWUpOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1hcmtOYW1lID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KG1hcmtOYW1lKTsKKyAgICBpdGVtLT53ZWJraXRDbGVhck1hcmtzKGNvbnZlcnRlZE1h
cmtOYW1lKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJB
TShtYXJrTmFtZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRp
bWluZyIpCisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK3ZvaWQgd2Via2l0
X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfbWVhc3VyZShXZWJLaXRET01QZXJmb3JtYW5jZSogc2Vs
ZiwgY29uc3QgZ2NoYXIqIG1lYXN1cmVOYW1lLCBjb25zdCBnY2hhciogc3RhcnRNYXJrLCBjb25z
dCBnY2hhciogZW5kTWFyaywgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRShzZWxmKSk7CisgICAgZ19yZXR1
cm5faWZfZmFpbChtZWFzdXJlTmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzdGFydE1hcmsp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZW5kTWFyayk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkTWVhc3VyZU5hbWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgobWVhc3VyZU5hbWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZFN0YXJ0TWFyayA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdGFydE1hcmspOworICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZEVuZE1hcmsgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZW5kTWFy
ayk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+d2Via2l0
TWVhc3VyZShjb252ZXJ0ZWRNZWFzdXJlTmFtZSwgY29udmVydGVkU3RhcnRNYXJrLCBjb252ZXJ0
ZWRFbmRNYXJrLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
VU5VU0VEX1BBUkFNKG1lYXN1cmVOYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhcnRNYXJrKTsK
KyAgICBVTlVTRURfUEFSQU0oZW5kTWFyayk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyNlbmRpZiAv
KiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3dlYmtpdF9jbGVhcl9tZWFzdXJlcyhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiwgY29uc3Qg
Z2NoYXIqIG1lYXN1cmVOYW1lKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfUEVSRk9STUFOQ0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobWVh
c3VyZU5hbWUpOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZE1lYXN1cmVOYW1lID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KG1lYXN1cmVOYW1lKTsKKyAgICBpdGVtLT53ZWJraXRDbGVhck1lYXN1cmVz
KGNvbnZlcnRlZE1lYXN1cmVOYW1lKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFVOVVNFRF9QQVJBTShtZWFzdXJlTmFtZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICov
Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9ub3coV2ViS2l0RE9NUGVyZm9y
bWFuY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfUEVSRk9STUFOQ0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+
bm93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJ
TUlORykgKi8KK30KKworV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX2dldF9uYXZpZ2F0aW9uKFdlYktpdERPTVBlcmZvcm1hbmNlKiBzZWxmKQor
eworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZP
Uk1BTkNFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZSogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9u
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+bmF2aWdhdGlvbigpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIg
VGltaW5nIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8K
K30KKworV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
Z2V0X3RpbWluZyhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRShzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nPiBnb2JqZWN0UmVzdWx0ID0gV1RG
OjpnZXRQdHIoaXRlbS0+dGltaW5nKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0
UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiAwOwor
I2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBl
cmZvcm1hbmNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMmQ5ZTEyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2Uu
aApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRET01QZXJmb3JtYW5jZV9oCisjZGVmaW5lIFdlYktpdERPTVBlcmZvcm1hbmNl
X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRSAgICAgICAgICAgICh3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fUEVS
Rk9STUFOQ0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFLCBXZWJLaXRET01QZXJmb3JtYW5jZSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFLCBXZWJL
aXRET01QZXJmb3JtYW5jZUNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNF
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9QRVJGT1JNQU5DRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0Vf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX1BFUkZPUk1BTkNFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfUEVSRk9STUFOQ0UsIFdlYktpdERPTVBlcmZvcm1hbmNlQ2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTVBlcmZvcm1hbmNlIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3Rh
bmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5jZUNsYXNzIHsKKyAgICBXZWJL
aXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfY2xlYXJfcmVzb3VyY2VfdGltaW5nczoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01QZXJmb3JtYW5jZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2NsZWFyX3Jlc291cmNlX3RpbWluZ3Mo
V2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2Vfc2V0X3Jlc291cmNlX3RpbWluZ19idWZmZXJfc2l6ZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01QZXJmb3JtYW5jZQorICogQG1heFNpemU6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3NldF9yZXNvdXJjZV90aW1pbmdfYnVmZmVyX3NpemUoV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNl
bGYsIGd1bG9uZyBtYXhTaXplKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3dl
YmtpdF9tYXJrOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlCisgKiBAbWFya05h
bWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRf
bWFyayhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiwgY29uc3QgZ2NoYXIqIG1hcmtOYW1lLCBH
RXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRf
Y2xlYXJfbWFya3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqIEBtYXJr
TmFtZTogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfY2xlYXJfbWFya3MoV2ViS2l0
RE9NUGVyZm9ybWFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBtYXJrTmFtZSk7CisKKy8qKgorICog
d2Via2l0X2RvbV9wZXJmb3JtYW5jZV93ZWJraXRfbWVhc3VyZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01QZXJmb3JtYW5jZQorICogQG1lYXN1cmVOYW1lOiBBICNnY2hhcgorICogQHN0YXJ0TWFy
azogQSAjZ2NoYXIKKyAqIEBlbmRNYXJrOiBBICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fcGVyZm9ybWFuY2Vfd2Via2l0X21lYXN1cmUoV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYs
IGNvbnN0IGdjaGFyKiBtZWFzdXJlTmFtZSwgY29uc3QgZ2NoYXIqIHN0YXJ0TWFyaywgY29uc3Qg
Z2NoYXIqIGVuZE1hcmssIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3dlYmtpdF9jbGVhcl9tZWFzdXJlczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Q
ZXJmb3JtYW5jZQorICogQG1lYXN1cmVOYW1lOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3dl
YmtpdF9jbGVhcl9tZWFzdXJlcyhXZWJLaXRET01QZXJmb3JtYW5jZSogc2VsZiwgY29uc3QgZ2No
YXIqIG1lYXN1cmVOYW1lKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25vdzoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZQorICoKKyAqIFJldHVybnM6IEEgI2dk
b3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJs
ZQord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9ub3coV2ViS2l0RE9NUGVyZm9ybWFuY2UqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZ2V0X25hdmlnYXRpb246CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRp
b24qCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF9uYXZpZ2F0aW9uKFdlYktpdERPTVBlcmZv
cm1hbmNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2dldF90aW1p
bmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2UKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVBlcmZvcm1hbmNlVGlt
aW5nKgord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9nZXRfdGltaW5nKFdlYktpdERPTVBlcmZvcm1h
bmNlKiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVBlcmZvcm1hbmNlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZjQ2M2EKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkuY3BwCkBAIC0wLDAgKzEsMjQzIEBACisv
KgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9D
U1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZv
cm1hbmNlRW50cnlQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0Vf
RU5UUllfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfRU5UUlksIFdlYktpdERPTVBlcmZvcm1hbmNlRW50
cnlQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVBy
aXZhdGUgeworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFJlZlB0cjxXZWJDb3JlOjpQZXJm
b3JtYW5jZUVudHJ5PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQor
fSBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZTsKKworI2lmIEVOQUJMRShXRUJfVElN
SU5HKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSog
a2l0KFdlYkNvcmU6OlBlcmZvcm1hbmNlRW50cnkqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6
OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWShy
ZXQpOworCisgICAgcmV0dXJuIHdyYXBQZXJmb3JtYW5jZUVudHJ5KG9iaik7Cit9CisKK1dlYkNv
cmU6OlBlcmZvcm1hbmNlRW50cnkqIGNvcmUoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBlcmZv
cm1hbmNlRW50cnkqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiB3cmFwUGVyZm9ybWFuY2VFbnRyeShX
ZWJDb3JlOjpQZXJmb3JtYW5jZUVudHJ5KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWShnX29iamVj
dF9uZXcoV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX0VOVFJZLCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NUGVyZm9y
bWFuY2VFbnRyeSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeSwgV0VCS0lUX0RPTV9UWVBF
X09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9Q
X0VOVFJZX1RZUEUsCisgICAgUFJPUF9TVEFSVF9USU1FLAorICAgIFBST1BfRFVSQVRJT04sCit9
OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfRU5UUllfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3Jn
ZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcp
CisgICAgcHJpdi0+fldlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlKCk7CisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X2VudHJ5X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVBlcmZvcm1h
bmNlRW50cnkqIHNlbGYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX0VOVFJZKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9n
ZXRfbmFtZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTlRSWV9UWVBF
OgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX2VudHJ5X2dldF9lbnRyeV90eXBlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1NUQVJUX1RJTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Vi
a2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfc3RhcnRfdGltZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9EVVJBVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91
YmxlKHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF9kdXJhdGlvbihzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV9lbnRyeV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAg
ICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X2VudHJ5X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisg
ICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1BF
UkZPUk1BTkNFX0VOVFJZX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBlcmZvcm1hbmNlRW50cnkqPihXRUJLSVRfRE9NX09C
SkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpw
dXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X1RJTUlORykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX2VudHJ5X2NsYXNzX2luaXQoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeUNs
YXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5UHJpdmF0ZSkp
OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X2VudHJ5X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfcHJvcGVydHk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAg
ICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZUVudHJ5Om5hbWUiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnY2hhciogUGVyZm9ybWFuY2VFbnRyeTpuYW1lIiwKKyAgICAg
ICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfRU5UUllfVFlQRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJlbnRyeS10eXBlIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZUVudHJ5OmVu
dHJ5LXR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogUGVyZm9ybWFuY2VFbnRy
eTplbnRyeS10eXBlIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RBUlRfVElNRSwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJzdGFydC10aW1lIiwKKyAgICAgICAgICAg
ICJQZXJmb3JtYW5jZUVudHJ5OnN0YXJ0LXRpbWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
ZG91YmxlIFBlcmZvcm1hbmNlRW50cnk6c3RhcnQtdGltZSIsCisgICAgICAgICAgICAtR19NQVhE
T1VCTEUsIEdfTUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRFVSQVRJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19k
b3VibGUoCisgICAgICAgICAgICAiZHVyYXRpb24iLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNl
RW50cnk6ZHVyYXRpb24iLAorICAgICAgICAgICAgInJlYWQtb25seSBnZG91YmxlIFBlcmZvcm1h
bmNlRW50cnk6ZHVyYXRpb24iLAorICAgICAgICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJM
RSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfaW5pdChXZWJLaXRET01QZXJmb3Jt
YW5jZUVudHJ5KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWV9HRVRfUFJJVkFURShyZXF1
ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2YXRlKCk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF9uYW1lKFdlYktp
dERPTVBlcmZvcm1hbmNlRW50cnkqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfRU5UUlkoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlBlcmZvcm1hbmNlRW50cnkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+bmFtZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIDA7
CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX2VudHJ5X2dldF9lbnRyeV90eXBlKFdlYktpdERPTVBlcmZvcm1hbmNlRW50
cnkqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfUEVSRk9STUFOQ0VfRU5UUlkoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1h
bmNlRW50cnkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZW50cnlUeXBlKCkpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBF
TkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X2VudHJ5X2dldF9zdGFydF90aW1lKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9S
TUFOQ0VfRU5UUlkoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlRW50cnkqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5zdGFy
dFRpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Vs
Zik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJf
VElNSU5HKSAqLworfQorCitnZG91YmxlIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0
X2R1cmF0aW9uKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfRU5UUlko
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlRW50cnkqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5kdXJhdGlvbigpOworICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5j
ZUVudHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3OTU5MDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkuaApAQCAtMCwwICsxLDk3IEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVBlcmZv
cm1hbmNlRW50cnlfaAorI2RlZmluZSBXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5X2gKKworI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9FTlRSWSAgICAgICAgICAgICh3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01f
UEVSRk9STUFOQ0VfRU5UUlkob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX0VOVFJZLCBXZWJLaXRET01Q
ZXJmb3JtYW5jZUVudHJ5KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9FTlRSWV9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfUEVSRk9STUFOQ0VfRU5UUlksIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9FTlRSWShvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9S
TUFOQ0VfRU5UUlkpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX0VOVFJZX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9QRVJGT1JNQU5DRV9FTlRSWSkpCisjZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0Vf
RU5UUllfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAg
V0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX0VOVFJZLCBXZWJLaXRET01QZXJmb3JtYW5jZUVu
dHJ5Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkgeworICAgIFdl
YktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVBl
cmZvcm1hbmNlRW50cnlDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRy
eV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2VudHJ5
X2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnkKKyAqCisg
KiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X25hbWUoV2Vi
S2l0RE9NUGVyZm9ybWFuY2VFbnRyeSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV9lbnRyeV9nZXRfZW50cnlfdHlwZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJm
b3JtYW5jZUVudHJ5CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X2VudHJ5X2dldF9lbnRyeV90eXBlKFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnkqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfZW50cnlfZ2V0X3N0YXJ0X3RpbWU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeQorICoKKyAqIFJldHVybnM6IEEg
I2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Rv
dWJsZQord2Via2l0X2RvbV9wZXJmb3JtYW5jZV9lbnRyeV9nZXRfc3RhcnRfdGltZShXZWJLaXRE
T01QZXJmb3JtYW5jZUVudHJ5KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX2VudHJ5X2dldF9kdXJhdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5j
ZUVudHJ5CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX2Vu
dHJ5X2dldF9kdXJhdGlvbihXZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5KiBzZWxmKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2Vu
ZGlmIC8qIFdlYktpdERPTVBlcmZvcm1hbmNlRW50cnlfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVy
ZmFjZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGUuaApzaW1pbGFyaXR5
IGluZGV4IDY3JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVBlcmZvcm1hbmNlRW50cnlQcml2YXRlLmgKaW5kZXggMjgwNTc3NS4uZTFjZGU0YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlRW50cnlQcml2
YXRlLmgKQEAgLTE4LDE5ICsxOCwxOSBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLSNpZm5kZWYgV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGVfaAotI2RlZmlu
ZSBXZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZV9oCisjaWZuZGVmIFdlYktpdERPTVBlcmZv
cm1hbmNlRW50cnlQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVBy
aXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmg+Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQorI2luY2x1ZGUgPFdlYkNvcmUvUGVyZm9ybWFuY2VFbnRyeS5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01QZXJmb3JtYW5jZUVudHJ5Lmg+CisjaWYgRU5B
QkxFKFdFQl9USU1JTkcpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdEludGVy
ZmFjZSogd3JhcFRlc3RJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdEludGVyZmFjZSopOwotV2ViS2l0
RE9NVGVzdEludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqKTsKLVdlYkNvcmU6
OlRlc3RJbnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSopOworV2ViS2l0RE9N
UGVyZm9ybWFuY2VFbnRyeSogd3JhcFBlcmZvcm1hbmNlRW50cnkoV2ViQ29yZTo6UGVyZm9ybWFu
Y2VFbnRyeSopOworV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSoga2l0KFdlYkNvcmU6OlBlcmZv
cm1hbmNlRW50cnkqKTsKK1dlYkNvcmU6OlBlcmZvcm1hbmNlRW50cnkqIGNvcmUoV2ViS2l0RE9N
UGVyZm9ybWFuY2VFbnRyeSopOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCisjZW5kaWYgLyogRU5B
QkxFKFdFQl9USU1JTkcpICovCiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0SW50ZXJmYWNlUHJp
dmF0ZV9oICovCisjZW5kaWYgLyogV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeVByaXZhdGVfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjFlODdlODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbi5j
cHAKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRp
b24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aD4KKyNpbmNsdWRlICJXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CisjZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9HRVRfUFJJVkFURShv
YmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9QRVJG
T1JNQU5DRV9OQVZJR0FUSU9OLCBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRl
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0
ZSB7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgUmVmUHRyPFdlYkNvcmU6OlBlcmZvcm1h
bmNlTmF2aWdhdGlvbj4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykK
K30gV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZTsKKworI2lmIEVOQUJMRShX
RUJfVElNSU5HKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NUGVyZm9ybWFuY2VO
YXZpZ2F0aW9uKiBraXQoV2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBvYmopCit7Cisg
ICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9
IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fUEVS
Rk9STUFOQ0VfTkFWSUdBVElPTihyZXQpOworCisgICAgcmV0dXJuIHdyYXBQZXJmb3JtYW5jZU5h
dmlnYXRpb24ob2JqKTsKK30KKworV2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBjb3Jl
KFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4g
cmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbio+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogd3JhcFBlcmZvcm1hbmNlTmF2aWdhdGlvbihXZWJDb3Jl
OjpQZXJmb3JtYW5jZU5hdmlnYXRpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVP
YmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT04oZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OLCAiY29yZS1v
YmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRp
b24sIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX1RZUEUsCisgICAgUFJPUF9SRURJUkVDVF9DT1VOVCwKK307CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9HRVRfUFJJVkFURShvYmplY3QpOworI2lm
IEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChw
cml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKyAg
ICBwcml2LT5+V2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZSgpOworICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX25hdmlnYXRpb25fZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0
RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBzZWxmID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9O
QVZJR0FUSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVESVJFQ1RfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfcmVk
aXJlY3RfY291bnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBw
c3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtp
dF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRp
b25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2
aWdhdGlvbl9jbGFzc19pbml0KFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbkNsYXNzKiBy
ZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2Jq
ZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlKSk7
CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fcGVyZm9ybWFuY2Vf
bmF2aWdhdGlvbl9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Vi
a2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9w
cm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNf
dWludCgKKyAgICAgICAgICAgICJ0eXBlIiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZU5hdmln
YXRpb246dHlwZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1c2hvcnQgUGVyZm9ybWFuY2VO
YXZpZ2F0aW9uOnR5cGUiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVESVJFQ1Rf
Q09VTlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAgICAgICAgInJlZGlyZWN0
LWNvdW50IiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZU5hdmlnYXRpb246cmVkaXJlY3QtY291
bnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndXNob3J0IFBlcmZvcm1hbmNlTmF2aWdhdGlv
bjpyZWRpcmVjdC1jb3VudCIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25faW5pdChXZWJLaXRET01QZXJmb3JtYW5jZU5hdmln
YXRpb24qIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9HRVRfUFJJVkFU
RShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlv
blByaXZhdGUoKTsKK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRp
b25fZ2V0X25hdmlnYXRpb25fdHlwZShXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24qIHNl
bGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
UEVSRk9STUFOQ0VfTkFWSUdBVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFu
Y2VOYXZpZ2F0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1c2hvcnQgcmVz
dWx0ID0gaXRlbS0+dHlwZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIg
VGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VzaG9ydD4oMCk7CisjZW5kaWYgLyog
RU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV9wZXJmb3JtYW5j
ZV9uYXZpZ2F0aW9uX2dldF9yZWRpcmVjdF9jb3VudChXZWJLaXRET01QZXJmb3JtYW5jZU5hdmln
YXRpb24qIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfUEVSRk9STUFOQ0VfTkFWSUdBVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
UGVyZm9ybWFuY2VOYXZpZ2F0aW9uKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1
c2hvcnQgcmVzdWx0ID0gaXRlbS0+cmVkaXJlY3RDb3VudCgpOworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VzaG9y
dD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzQxMzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbi5oCkBAIC0wLDAgKzEsOTUgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9u
X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OICAg
ICAgICAgICAgKHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT04ob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1BFUkZP
Uk1BTkNFX05BVklHQVRJT04sIFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbikpCisjZGVm
aW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFO
Q0VfTkFWSUdBVElPTiwgV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uQ2xhc3MpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfTkFWSUdBVElPTihvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFO
Q0VfTkFWSUdBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfTkFWSUdB
VElPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfTkFWSUdBVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01f
UEVSRk9STUFOQ0VfTkFWSUdBVElPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfTkFWSUdBVElPTiwg
V2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uQ2xhc3MpKQorCisvKioKKyAqIFdFQktJVF9E
T01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9UWVBFX05BVklHQVRFOgorICovCisjZGVmaW5lIFdF
QktJVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9UWVBFX05BVklHQVRFIDAKKworLyoqCisg
KiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT05fVFlQRV9SRUxPQUQ6CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX1RZUEVfUkVMT0FEIDEKKwor
LyoqCisgKiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT05fVFlQRV9CQUNLX0ZPUldB
UkQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9OQVZJR0FUSU9OX1RZUEVf
QkFDS19GT1JXQVJEIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJ
T05fVFlQRV9SRVNFUlZFRDoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX05B
VklHQVRJT05fVFlQRV9SRVNFUlZFRCAyNTUKKworc3RydWN0IF9XZWJLaXRET01QZXJmb3JtYW5j
ZU5hdmlnYXRpb24geworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbkNsYXNzIHsKKyAgICBXZWJL
aXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX2dldF9uYXZpZ2F0aW9uX3R5cGU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uCisgKgorICogUmV0
dXJuczogQSAjZ3VzaG9ydAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fZ2V0X25hdmln
YXRpb25fdHlwZShXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24qIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl9nZXRfcmVkaXJlY3RfY291bnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uCisgKgorICogUmV0
dXJuczogQSAjZ3VzaG9ydAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX25hdmlnYXRpb25fZ2V0X3JlZGly
ZWN0X2NvdW50KFdlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbiogc2VsZik7CisKK0dfRU5E
X0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25faCAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlTmF2aWdh
dGlvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzRiYjc4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlLmgK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25Qcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Bl
cmZvcm1hbmNlTmF2aWdhdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb24uaD4KKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb24qIHdyYXBQZXJmb3JtYW5j
ZU5hdmlnYXRpb24oV2ViQ29yZTo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9uKik7CitXZWJLaXRET01Q
ZXJmb3JtYW5jZU5hdmlnYXRpb24qIGtpdChXZWJDb3JlOjpQZXJmb3JtYW5jZU5hdmlnYXRpb24q
KTsKK1dlYkNvcmU6OlBlcmZvcm1hbmNlTmF2aWdhdGlvbiogY29yZShXZWJLaXRET01QZXJmb3Jt
YW5jZU5hdmlnYXRpb24qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5B
QkxFKFdFQl9USU1JTkcpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmln
YXRpb25Qcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVBlcmZvcm1hbmNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmYxMDFhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlUHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NUGVyZm9ybWFuY2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NUGVy
Zm9ybWFuY2VQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvUGVyZm9ybWFuY2UuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NUGVyZm9ybWFuY2UuaD4KKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01QZXJmb3JtYW5jZSogd3Jh
cFBlcmZvcm1hbmNlKFdlYkNvcmU6OlBlcmZvcm1hbmNlKik7CitXZWJLaXRET01QZXJmb3JtYW5j
ZSoga2l0KFdlYkNvcmU6OlBlcmZvcm1hbmNlKik7CitXZWJDb3JlOjpQZXJmb3JtYW5jZSogY29y
ZShXZWJLaXRET01QZXJmb3JtYW5jZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVBlcmZvcm1h
bmNlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjk2NjExYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5n
LmNwcApAQCAtMCwwICsxLDczNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVBlcmZvcm1hbmNlVGltaW5n
LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+
CisjaW5jbHVkZSAiV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVm
aW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HX0dFVF9QUklWQVRFKG9iaikgR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJ
TUlORywgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlKQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlIHsKKyNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmc+IGNvcmVPYmplY3Q7
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCit9IFdlYktpdERPTVBlcmZvcm1hbmNlVGlt
aW5nUHJpdmF0ZTsKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIGtpdChXZWJDb3JlOjpQZXJmb3JtYW5j
ZVRpbWluZyogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJl
dHVybiBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX1RJTUlORyhyZXQpOworCisgICAgcmV0dXJuIHdy
YXBQZXJmb3JtYW5jZVRpbWluZyhvYmopOworfQorCitXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWlu
ZyogY29yZShXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqIHdyYXBQZXJmb3JtYW5jZVRpbWluZyhXZWJDb3JlOjpQZXJmb3Jt
YW5jZVRpbWluZyogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HKGdfb2JqZWN0X25ldyhXRUJLSVRf
RE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5HLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBu
dWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9USU1JTkcpCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcs
IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OQVZJR0FUSU9OX1NUQVJULAorICAgIFBS
T1BfVU5MT0FEX0VWRU5UX1NUQVJULAorICAgIFBST1BfVU5MT0FEX0VWRU5UX0VORCwKKyAgICBQ
Uk9QX1JFRElSRUNUX1NUQVJULAorICAgIFBST1BfUkVESVJFQ1RfRU5ELAorICAgIFBST1BfRkVU
Q0hfU1RBUlQsCisgICAgUFJPUF9ET01BSU5fTE9PS1VQX1NUQVJULAorICAgIFBST1BfRE9NQUlO
X0xPT0tVUF9FTkQsCisgICAgUFJPUF9DT05ORUNUX1NUQVJULAorICAgIFBST1BfQ09OTkVDVF9F
TkQsCisgICAgUFJPUF9TRUNVUkVfQ09OTkVDVElPTl9TVEFSVCwKKyAgICBQUk9QX1JFUVVFU1Rf
U1RBUlQsCisgICAgUFJPUF9SRVNQT05TRV9TVEFSVCwKKyAgICBQUk9QX1JFU1BPTlNFX0VORCwK
KyAgICBQUk9QX0RPTV9MT0FESU5HLAorICAgIFBST1BfRE9NX0lOVEVSQUNUSVZFLAorICAgIFBS
T1BfRE9NX0NPTlRFTlRfTE9BREVEX0VWRU5UX1NUQVJULAorICAgIFBST1BfRE9NX0NPTlRFTlRf
TE9BREVEX0VWRU5UX0VORCwKKyAgICBQUk9QX0RPTV9DT01QTEVURSwKKyAgICBQUk9QX0xPQURf
RVZFTlRfU1RBUlQsCisgICAgUFJPUF9MT0FEX0VWRU5UX0VORCwKK307CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1BFUkZPUk1BTkNFX1RJTUlOR19HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShX
RUJfVElNSU5HKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3Jl
T2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBwcml2LT5+
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcq
IHNlbGYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX1RJTUlORyhvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BVklHQVRJT05fU1RBUlQ6CisgICAg
ICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1p
bmdfZ2V0X25hdmlnYXRpb25fc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfVU5MT0FEX0VWRU5UX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFs
dWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF91bmxvYWRfZXZlbnRfc3RhcnQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVU5MT0FEX0VWRU5UX0VORDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3RpbWluZ19nZXRfdW5sb2FkX2V2ZW50X2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9SRURJUkVDVF9TVEFSVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZh
bHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVkaXJlY3Rfc3RhcnQoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVESVJFQ1RfRU5EOgorICAgICAg
ICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5n
X2dldF9yZWRpcmVjdF9lbmQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RkVUQ0hfU1RBUlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2ZldGNoX3N0YXJ0KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0RPTUFJTl9MT09LVVBfU1RBUlQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbWFp
bl9sb29rdXBfc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9N
QUlOX0xPT0tVUF9FTkQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0
X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbWFpbl9sb29rdXBfZW5kKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NPTk5FQ1RfU1RBUlQ6CisgICAgICAgIGdfdmFs
dWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2Nv
bm5lY3Rfc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ09OTkVD
VF9FTkQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV90aW1pbmdfZ2V0X2Nvbm5lY3RfZW5kKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1NFQ1VSRV9DT05ORUNUSU9OX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9zZWN1cmVf
Y29ubmVjdGlvbl9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9S
RVFVRVNUX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXF1ZXN0X3N0YXJ0KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1JFU1BPTlNFX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZXNwb25z
ZV9zdGFydChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRVNQT05TRV9F
TkQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9wZXJmb3Jt
YW5jZV90aW1pbmdfZ2V0X3Jlc3BvbnNlX2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9ET01fTE9BRElORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVl
LCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2xvYWRpbmcoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRE9NX0lOVEVSQUNUSVZFOgorICAgICAgICBn
X3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dl
dF9kb21faW50ZXJhY3RpdmUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RE9NX0NPTlRFTlRfTE9BREVEX0VWRU5UX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50
NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29udGVudF9s
b2FkZWRfZXZlbnRfc3RhcnQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
RE9NX0NPTlRFTlRfTE9BREVEX0VWRU5UX0VORDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0
KHZhbHVlLCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbnRlbnRfbG9h
ZGVkX2V2ZW50X2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ET01f
Q09NUExFVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgd2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb21wbGV0ZShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9MT0FEX0VWRU5UX1NUQVJUOgorICAgICAgICBnX3ZhbHVlX3NldF91
aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9sb2FkX2V2ZW50
X3N0YXJ0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xPQURfRVZFTlRf
RU5EOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIHdlYmtpdF9kb21fcGVyZm9y
bWFuY2VfdGltaW5nX2dldF9sb2FkX2V2ZW50X2VuZChzZWxmKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitz
dGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfY29uc3RydWN0b3Io
R1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3Ry
dWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0g
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQ
cm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJLaXRET01QZXJmb3Jt
YW5jZVRpbWluZ1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX1RJTUlOR19H
RVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHJl
dHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGlt
aW5nX2NsYXNzX2luaXQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNz
LCBzaXplb2YoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlKSk7CisgICAgZ29iamVj
dENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2NvbnN0
cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3BlcmZvcm1h
bmNlX3RpbWluZ19maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9OQVZJR0FUSU9OX1NUQVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAg
ICAgICAgICAgIm5hdmlnYXRpb24tc3RhcnQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGlt
aW5nOm5hdmlnYXRpb24tc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBl
cmZvcm1hbmNlVGltaW5nOm5hdmlnYXRpb24tc3RhcnQiLAorICAgICAgICAgICAgMCwgR19NQVhV
SU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9VTkxPQURfRVZFTlRfU1RBUlQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50
NjQoCisgICAgICAgICAgICAidW5sb2FkLWV2ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgICJQZXJm
b3JtYW5jZVRpbWluZzp1bmxvYWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOnVubG9hZC1ldmVudC1zdGFydCIsCisgICAgICAg
ICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1VOTE9BRF9FVkVOVF9FTkQsCisgICAgICAgIGdfcGFy
YW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAidW5sb2FkLWV2ZW50LWVuZCIsCisgICAgICAg
ICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6dW5sb2FkLWV2ZW50LWVuZCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6dW5sb2FkLWV2ZW50LWVuZCIsCisg
ICAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JFRElSRUNUX1NUQVJULAorICAgICAgICBn
X3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgInJlZGlyZWN0LXN0YXJ0IiwKKyAgICAg
ICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpyZWRpcmVjdC1zdGFydCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6cmVkaXJlY3Qtc3RhcnQiLAorICAg
ICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRURJUkVDVF9FTkQsCisgICAgICAgIGdfcGFy
YW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAicmVkaXJlY3QtZW5kIiwKKyAgICAgICAgICAg
ICJQZXJmb3JtYW5jZVRpbWluZzpyZWRpcmVjdC1lbmQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOnJlZGlyZWN0LWVuZCIsCisgICAgICAgICAgICAw
LCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0ZFVENIX1NUQVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWlu
dDY0KAorICAgICAgICAgICAgImZldGNoLXN0YXJ0IiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5j
ZVRpbWluZzpmZXRjaC1zdGFydCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVy
Zm9ybWFuY2VUaW1pbmc6ZmV0Y2gtc3RhcnQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAg
UFJPUF9ET01BSU5fTE9PS1VQX1NUQVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAor
ICAgICAgICAgICAgImRvbWFpbi1sb29rdXAtc3RhcnQiLAorICAgICAgICAgICAgIlBlcmZvcm1h
bmNlVGltaW5nOmRvbWFpbi1sb29rdXAtc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
dWludDY0IFBlcmZvcm1hbmNlVGltaW5nOmRvbWFpbi1sb29rdXAtc3RhcnQiLAorICAgICAgICAg
ICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9ET01BSU5fTE9PS1VQX0VORCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJkb21haW4tbG9va3VwLWVuZCIsCisgICAgICAg
ICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6ZG9tYWluLWxvb2t1cC1lbmQiLAorICAgICAgICAgICAg
InJlYWQtb25seSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOmRvbWFpbi1sb29rdXAtZW5kIiwK
KyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OTkVDVF9TVEFSVCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJjb25uZWN0LXN0YXJ0IiwKKyAgICAg
ICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpjb25uZWN0LXN0YXJ0IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpjb25uZWN0LXN0YXJ0IiwKKyAgICAg
ICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ09OTkVDVF9FTkQsCisgICAgICAgIGdfcGFyYW1f
c3BlY191aW50NjQoCisgICAgICAgICAgICAiY29ubmVjdC1lbmQiLAorICAgICAgICAgICAgIlBl
cmZvcm1hbmNlVGltaW5nOmNvbm5lY3QtZW5kIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vp
bnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpjb25uZWN0LWVuZCIsCisgICAgICAgICAgICAwLCBHX01B
WFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NFQ1VSRV9DT05ORUNUSU9OX1NUQVJULAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfdWludDY0KAorICAgICAgICAgICAgInNlY3VyZS1jb25uZWN0aW9uLXN0YXJ0IiwKKyAgICAg
ICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpzZWN1cmUtY29ubmVjdGlvbi1zdGFydCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9ybWFuY2VUaW1pbmc6c2VjdXJlLWNvbm5l
Y3Rpb24tc3RhcnQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVFVRVNUX1NU
QVJULAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgInJlcXVlc3Qt
c3RhcnQiLAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGltaW5nOnJlcXVlc3Qtc3RhcnQiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOnJlcXVlc3Qt
c3RhcnQiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9SRVNQT05TRV9TVEFSVCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJyZXNwb25zZS1zdGFy
dCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6cmVzcG9uc2Utc3RhcnQiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZvcm1hbmNlVGltaW5nOnJlc3BvbnNlLXN0
YXJ0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkVTUE9OU0VfRU5ELAorICAg
ICAgICBnX3BhcmFtX3NwZWNfdWludDY0KAorICAgICAgICAgICAgInJlc3BvbnNlLWVuZCIsCisg
ICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6cmVzcG9uc2UtZW5kIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ3VpbnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpyZXNwb25zZS1lbmQiLAorICAg
ICAgICAgICAgMCwgR19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAg
IGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ET01fTE9BRElORywKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQ2NCgKKyAgICAgICAgICAgICJkb20tbG9hZGluZyIsCisgICAgICAgICAgICAi
UGVyZm9ybWFuY2VUaW1pbmc6ZG9tLWxvYWRpbmciLAorICAgICAgICAgICAgInJlYWQtb25seSBn
dWludDY0IFBlcmZvcm1hbmNlVGltaW5nOmRvbS1sb2FkaW5nIiwKKyAgICAgICAgICAgIDAsIEdf
TUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRE9NX0lOVEVSQUNUSVZFLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWlu
dDY0KAorICAgICAgICAgICAgImRvbS1pbnRlcmFjdGl2ZSIsCisgICAgICAgICAgICAiUGVyZm9y
bWFuY2VUaW1pbmc6ZG9tLWludGVyYWN0aXZlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vp
bnQ2NCBQZXJmb3JtYW5jZVRpbWluZzpkb20taW50ZXJhY3RpdmUiLAorICAgICAgICAgICAgMCwg
R19NQVhVSU5UNjQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9ET01fQ09OVEVOVF9MT0FERURfRVZFTlRfU1RBUlQsCisgICAgICAg
IGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAiZG9tLWNvbnRlbnQtbG9hZGVkLWV2
ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5jZVRpbWluZzpkb20tY29udGVudC1s
b2FkZWQtZXZlbnQtc3RhcnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWludDY0IFBlcmZv
cm1hbmNlVGltaW5nOmRvbS1jb250ZW50LWxvYWRlZC1ldmVudC1zdGFydCIsCisgICAgICAgICAg
ICAwLCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0RPTV9DT05URU5UX0xPQURFRF9FVkVOVF9FTkQsCisgICAg
ICAgIGdfcGFyYW1fc3BlY191aW50NjQoCisgICAgICAgICAgICAiZG9tLWNvbnRlbnQtbG9hZGVk
LWV2ZW50LWVuZCIsCisgICAgICAgICAgICAiUGVyZm9ybWFuY2VUaW1pbmc6ZG9tLWNvbnRlbnQt
bG9hZGVkLWV2ZW50LWVuZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQgUGVyZm9y
bWFuY2VUaW1pbmc6ZG9tLWNvbnRlbnQtbG9hZGVkLWV2ZW50LWVuZCIsCisgICAgICAgICAgICAw
LCBHX01BWFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0RPTV9DT01QTEVURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vp
bnQ2NCgKKyAgICAgICAgICAgICJkb20tY29tcGxldGUiLAorICAgICAgICAgICAgIlBlcmZvcm1h
bmNlVGltaW5nOmRvbS1jb21wbGV0ZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1aW50NjQg
UGVyZm9ybWFuY2VUaW1pbmc6ZG9tLWNvbXBsZXRlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlO
VDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTE9BRF9FVkVOVF9TVEFSVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCgK
KyAgICAgICAgICAgICJsb2FkLWV2ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgICJQZXJmb3JtYW5j
ZVRpbWluZzpsb2FkLWV2ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2
NCBQZXJmb3JtYW5jZVRpbWluZzpsb2FkLWV2ZW50LXN0YXJ0IiwKKyAgICAgICAgICAgIDAsIEdf
TUFYVUlOVDY0LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfTE9BRF9FVkVOVF9FTkQsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50
NjQoCisgICAgICAgICAgICAibG9hZC1ldmVudC1lbmQiLAorICAgICAgICAgICAgIlBlcmZvcm1h
bmNlVGltaW5nOmxvYWQtZXZlbnQtZW5kIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3VpbnQ2
NCBQZXJmb3JtYW5jZVRpbWluZzpsb2FkLWV2ZW50LWVuZCIsCisgICAgICAgICAgICAwLCBHX01B
WFVJTlQ2NCwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2luaXQoV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NUGVyZm9ybWFuY2VU
aW1pbmdQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9QRVJGT1JNQU5DRV9USU1JTkdfR0VUX1BS
SVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
Z1ByaXZhdGUoKTsKK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19n
ZXRfbmF2aWdhdGlvbl9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZikKK3sK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JN
QU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+bmF2
aWdhdGlvblN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1p
bmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3Rp
bWluZ19nZXRfdW5sb2FkX2V2ZW50X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBz
ZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VU
aW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBp
dGVtLT51bmxvYWRFdmVudFN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX3RpbWluZ19nZXRfdW5sb2FkX2V2ZW50X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRp
bWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZv
cm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVz
dWx0ID0gaXRlbS0+dW5sb2FkRXZlbnRFbmQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfdGltaW5nX2dldF9yZWRpcmVjdF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5j
ZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBl
cmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQg
cmVzdWx0ID0gaXRlbS0+cmVkaXJlY3RTdGFydCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2Rv
bV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3JlZGlyZWN0X2VuZChXZWJLaXRET01QZXJmb3JtYW5j
ZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBl
cmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQg
cmVzdWx0ID0gaXRlbS0+cmVkaXJlY3RFbmQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOwor
I2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfdGltaW5nX2dldF9mZXRjaF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRp
bWluZyogc2VsZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19QRVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZv
cm1hbmNlVGltaW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVz
dWx0ID0gaXRlbS0+ZmV0Y2hTdGFydCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5k
aWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJm
b3JtYW5jZV90aW1pbmdfZ2V0X2RvbWFpbl9sb29rdXBfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFu
Y2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQ
ZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0
IHJlc3VsdCA9IGl0ZW0tPmRvbWFpbkxvb2t1cFN0YXJ0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0
PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3ZWJr
aXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tYWluX2xvb2t1cF9lbmQoV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmRvbWFpbkxvb2t1cEVuZCgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50
NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2Nvbm5lY3Rfc3RhcnQoV2ViS2l0
RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAwKTsKKyAg
ICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmNvbm5lY3RTdGFydCgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcpICovCit9CisKK2d1aW50
NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2Nvbm5lY3RfZW5kKFdlYktpdERP
TVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5jb25uZWN0RW5kKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWlu
dDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8KK30KKworZ3VpbnQ2NCB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfc2VjdXJlX2Nvbm5lY3Rpb25fc3RhcnQo
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5HKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnNlY3VyZUNvbm5lY3Rpb25TdGFydCgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcp
ICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3JlcXVl
c3Rfc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5H
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPnJlcXVlc3RTdGFydCgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcp
ICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Jlc3Bv
bnNlX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJM
RShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlO
RyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5yZXNwb25zZVN0YXJ0
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlO
RykgKi8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVz
cG9uc2VfZW5kKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJM
RShXRUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlO
RyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5yZXNwb25zZUVuZCgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcp
ICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9s
b2FkaW5nKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShX
RUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5kb21Mb2FkaW5nKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykgKi8K
K30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2ludGVy
YWN0aXZlKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShX
RUJfVElNSU5HKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5kb21JbnRlcmFjdGl2ZSgp
OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJXZWIgVGltaW5nIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFdFQl9USU1JTkcp
ICovCit9CisKK2d1aW50NjQgd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9j
b250ZW50X2xvYWRlZF9ldmVudF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19Q
RVJGT1JNQU5DRV9USU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGlt
aW5nKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRl
bS0+ZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDAp
OworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9k
b21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29udGVudF9sb2FkZWRfZXZlbnRfZW5kKFdl
YktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKQoreworI2lmIEVOQUJMRShXRUJfVElNSU5H
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BFUkZPUk1BTkNFX1RJTUlORyhzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6UGVyZm9ybWFuY2VUaW1pbmcqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ3VpbnQ2NCByZXN1bHQgPSBpdGVtLT5kb21Db250ZW50TG9hZGVkRXZlbnRFbmQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElNSU5H
KSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21f
Y29tcGxldGUoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpCit7CisjaWYgRU5BQkxF
KFdFQl9USU1JTkcpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUEVSRk9STUFOQ0VfVElNSU5H
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpQZXJmb3JtYW5jZVRpbWluZyogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlc3VsdCA9IGl0ZW0tPmRvbUNvbXBsZXRlKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJTUlORykg
Ki8KK30KKworZ3VpbnQ2NCB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfbG9hZF9l
dmVudF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBFTkFC
TEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9USU1J
Tkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+bG9hZEV2ZW50U3Rh
cnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiV2ViIFRpbWluZyIpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGd1aW50NjQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShXRUJfVElN
SU5HKSAqLworfQorCitndWludDY0IHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9s
b2FkX2V2ZW50X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZikKK3sKKyNpZiBF
TkFCTEUoV0VCX1RJTUlORykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19QRVJGT1JNQU5DRV9U
SU1JTkcoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzdWx0ID0gaXRlbS0+bG9hZEV2ZW50
RW5kKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldlYiBUaW1pbmciKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxndWludDY0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX1RJ
TUlORykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZy5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjMwYzVlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nLmgKQEAg
LTAsMCArMSwyODQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdfaAorI2RlZmluZSBXZWJLaXRET01QZXJmb3JtYW5j
ZVRpbWluZ19oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0VfVElNSU5H
ICAgICAgICAgICAgKHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fUEVSRk9STUFOQ0VfVElNSU5HKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5D
RV9USU1JTkcsIFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9QRVJGT1JNQU5DRV9USU1JTkdfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJTUlORywgV2ViS2l0
RE9NUGVyZm9ybWFuY2VUaW1pbmdDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19QRVJGT1JN
QU5DRV9USU1JTkcob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1BFUkZPUk1BTkNFX1RJTUlORykpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfUEVSRk9STUFOQ0VfVElNSU5HX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9QRVJGT1JNQU5DRV9USU1JTkcpKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX1BFUkZPUk1BTkNFX1RJTUlOR19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfUEVSRk9STUFOQ0Vf
VElNSU5HLCBXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ0NsYXNzKSkKKworc3RydWN0IF9XZWJL
aXRET01QZXJmb3JtYW5jZVRpbWluZyB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3R5cGUodm9pZCk7CisKKy8q
KgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X25hdmlnYXRpb25fc3RhcnQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5z
OiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9uYXZpZ2F0aW9uX3N0
YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfdW5sb2FkX2V2ZW50X3N0YXJ0OgorICogQHNlbGY6
IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2
NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfdW5sb2FkX2V2ZW50X3N0YXJ0KFdlYktp
dERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX3RpbWluZ19nZXRfdW5sb2FkX2V2ZW50X2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9w
ZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3VubG9hZF9ldmVudF9lbmQoV2ViS2l0RE9NUGVyZm9ybWFu
Y2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5n
X2dldF9yZWRpcmVjdF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRp
bWluZworICoKKyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1p
bmdfZ2V0X3JlZGlyZWN0X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVkaXJlY3RfZW5k
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJu
czogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVkaXJlY3RfZW5k
KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZmV0Y2hfc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICog
U3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21f
cGVyZm9ybWFuY2VfdGltaW5nX2dldF9mZXRjaF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRp
bWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0
X2RvbWFpbl9sb29rdXBfc3RhcnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VU
aW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGlt
aW5nX2dldF9kb21haW5fbG9va3VwX3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tYWlu
X2xvb2t1cF9lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAq
CisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9k
b21haW5fbG9va3VwX2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2Nvbm5lY3Rfc3RhcnQ6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBB
ICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1
aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9jb25uZWN0X3N0YXJ0KFdl
YktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Bl
cmZvcm1hbmNlX3RpbWluZ19nZXRfY29ubmVjdF9lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfdGltaW5nX2dldF9jb25uZWN0X2VuZChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWlu
Zyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Nl
Y3VyZV9jb25uZWN0aW9uX3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNl
VGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3Rp
bWluZ19nZXRfc2VjdXJlX2Nvbm5lY3Rpb25fc3RhcnQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1p
bmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9y
ZXF1ZXN0X3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisg
KgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRf
cmVxdWVzdF9zdGFydChXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X3Jlc3BvbnNlX3N0YXJ0OgorICog
QHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAj
Z3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWlu
dDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfcmVzcG9uc2Vfc3RhcnQoV2Vi
S2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfdGltaW5nX2dldF9yZXNwb25zZV9lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
UGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5zOiBBICNndWludDY0CisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1aW50NjQKK3dlYmtpdF9kb21fcGVy
Zm9ybWFuY2VfdGltaW5nX2dldF9yZXNwb25zZV9lbmQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1p
bmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9k
b21fbG9hZGluZzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoK
KyAqIFJldHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2Rv
bV9sb2FkaW5nKFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2ludGVyYWN0aXZlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3Vp
bnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0
Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2ludGVyYWN0aXZlKFdlYktp
dERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3BlcmZv
cm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbnRlbnRfbG9hZGVkX2V2ZW50X3N0YXJ0OgorICogQHNl
bGY6IEEgI1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3Vp
bnQ2NAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0
Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbnRlbnRfbG9hZGVkX2V2
ZW50X3N0YXJ0KFdlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfZG9tX2NvbnRlbnRfbG9hZGVkX2V2ZW50
X2VuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZworICoKKyAqIFJl
dHVybnM6IEEgI2d1aW50NjQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ3VpbnQ2NAord2Via2l0X2RvbV9wZXJmb3JtYW5jZV90aW1pbmdfZ2V0X2RvbV9jb250
ZW50X2xvYWRlZF9ldmVudF9lbmQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29tcGxldGU6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcKKyAqCisgKiBSZXR1cm5z
OiBBICNndWludDY0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IGd1aW50NjQKK3dlYmtpdF9kb21fcGVyZm9ybWFuY2VfdGltaW5nX2dldF9kb21fY29tcGxldGUo
V2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
cGVyZm9ybWFuY2VfdGltaW5nX2dldF9sb2FkX2V2ZW50X3N0YXJ0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTVBlcmZvcm1hbmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRf
ZG9tX3BlcmZvcm1hbmNlX3RpbWluZ19nZXRfbG9hZF9ldmVudF9zdGFydChXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wZXJmb3JtYW5jZV90
aW1pbmdfZ2V0X2xvYWRfZXZlbnRfZW5kOgorICogQHNlbGY6IEEgI1dlYktpdERPTVBlcmZvcm1h
bmNlVGltaW5nCisgKgorICogUmV0dXJuczogQSAjZ3VpbnQ2NAorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWludDY0Cit3ZWJraXRfZG9tX3BlcmZvcm1hbmNl
X3RpbWluZ19nZXRfbG9hZF9ldmVudF9lbmQoV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmcqIHNl
bGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVf
QVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VU
aW1pbmdQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhYTg5
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdQcml2YXRlLmgKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZ1ByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01QZXJm
b3JtYW5jZVRpbWluZ1ByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9QZXJmb3JtYW5jZVRp
bWluZy5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01QZXJmb3JtYW5jZVRpbWluZy5o
PgorI2lmIEVOQUJMRShXRUJfVElNSU5HKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERP
TVBlcmZvcm1hbmNlVGltaW5nKiB3cmFwUGVyZm9ybWFuY2VUaW1pbmcoV2ViQ29yZTo6UGVyZm9y
bWFuY2VUaW1pbmcqKTsKK1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nKiBraXQoV2ViQ29yZTo6
UGVyZm9ybWFuY2VUaW1pbmcqKTsKK1dlYkNvcmU6OlBlcmZvcm1hbmNlVGltaW5nKiBjb3JlKFdl
YktpdERPTVBlcmZvcm1hbmNlVGltaW5nKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8qIEVOQUJMRShXRUJfVElNSU5HKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NUGVyZm9y
bWFuY2VUaW1pbmdQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByaXZhdGUuY3BwCnNpbWls
YXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvV2ViS2l0RE9NUHJpdmF0ZS5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJpdmF0ZS5jcHAKaW5kZXgg
MjFkZmIzNi4uMzI2NmMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01Qcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVByaXZhdGUuY3BwCkBAIC0yNCwx
OCArMjQsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9CbG9iLmg+CiAj
aW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIkZpbGUuaCIK
LSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAi
U3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIlVJRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Vs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
dmVudFRhcmdldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTW91c2VFdmVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3R5bGVTaGVldC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VUlFdmVudC5oPgogI2luY2x1ZGUgIldlYktpdERPTUF0dHJQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0RE9NQmxvYlByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRET01DREFUQVNlY3Rpb25Q
cml2YXRlLmgiCkBAIC02Myw4ICs2Myw4IEBACiAjaW5jbHVkZSAiV2ViS2l0RE9NV2hlZWxFdmVu
dFByaXZhdGUuaCIKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSNpbmNsdWRlICJEYXRhQ3Vl
LmgiCi0jaW5jbHVkZSAiVlRUQ3VlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EYXRhQ3VlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9WVFRDdWUuaD4KICNpbmNsdWRlICJXZWJLaXRET01EYXRhQ3VlUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRET01WVFRDdWVQcml2YXRlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJpdmF0ZS5oCnNp
bWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTVByaXZhdGUuaApyZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcml2YXRlLmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWMzMGM4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCkBAIC0w
LDAgKzEsMTcwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RD
YWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldl
YktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9u
KiBraXQoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKiBvYmopCit7CisgICAgcmV0dXJu
IFdFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTihraXQoc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKiBj
b3JlKFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbio+
KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktp
dERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogd3JhcFByb2Nlc3NpbmdJbnN0cnVjdGlvbihXZWJD
b3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04o
Z19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OLCAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9u
X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2
ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVF
dmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQtPmRpc3Bh
dGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3Byb2Nl
c3NpbmdfaW5zdHJ1Y3Rpb25fYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29s
ZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKiBj
b3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4o
V0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktp
dDo6R09iamVjdEV2ZW50TGlzdGVuZXI6OmFkZEV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9yZW1vdmVfZXZl
bnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZl
bnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyAgICBX
ZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5h
bWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2
ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAg
IGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlv
bl9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFj
ZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0
aW9uX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUo
V2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLCB3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5z
dHJ1Y3Rpb24sIFdFQktJVF9ET01fVFlQRV9DSEFSQUNURVJfREFUQSwgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9UQVJHRVQsCisgICAg
UFJPUF9TSEVFVCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0
cnVjdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24qIHNlbGYgPSBXRUJLSVRfRE9NX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04o
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9UQVJH
RVQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fcHJvY2Vz
c2luZ19pbnN0cnVjdGlvbl9nZXRfdGFyZ2V0KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NIRUVUOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtp
dF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfc2hlZXQoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2NsYXNz
X2luaXQoV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVl
c3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3By
b2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RB
UkdFVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJ0YXJnZXQi
LAorICAgICAgICAgICAgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbjp0YXJnZXQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBnY2hhciogUHJvY2Vzc2luZ0luc3RydWN0aW9uOnRhcmdldCIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX1NIRUVULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAg
ICAgICAgInNoZWV0IiwKKyAgICAgICAgICAgICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246c2hlZXQi
LAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01TdHlsZVNoZWV0KiBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb246c2hlZXQiLAorICAgICAgICAgICAgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NI
RUVULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2luaXQoV2ViS2l0RE9NUHJv
Y2Vzc2luZ0luc3RydWN0aW9uKiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0
KTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfdGFy
Z2V0KFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKHNlbGYpLCAwKTsKKyAgICBXZWJD
b3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGFyZ2V0KCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYktpdERPTVN0eWxlU2hlZXQqIHdlYmtpdF9kb21f
cHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfc2hlZXQoV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1BST0NFU1NJTkdfSU5T
VFJVQ1RJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3R5bGVTaGVl
dD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNoZWV0KCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMwYTMxZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Vi
a2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uX2gKKyNkZWZpbmUgV2ViS2l0
RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNoYXJhY3RlckRhdGEuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9UWVBFX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04gICAgICAgICAgICAod2Via2l0
X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9E
T01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUFJPQ0VTU0lOR19JTlNUUlVDVElP
TiwgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9Q
Uk9DRVNTSU5HX0lOU1RSVUNUSU9OX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OLCBX
ZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9QUk9D
RVNTSU5HX0lOU1RSVUNUSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9QUk9DRVNTSU5HX0lOU1RS
VUNUSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OLCBXZWJLaXRET01Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb25DbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uIHsKKyAgICBXZWJLaXRET01DaGFyYWN0ZXJEYXRhIHBhcmVudF9pbnN0YW5jZTsKK307
CisKK3N0cnVjdCBfV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2xhc3MgeworICAgIFdl
YktpdERPTUNoYXJhY3RlckRhdGFDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfZG9tX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2dldF90YXJnZXQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uCisgKgorICogUmV0
dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fcHJvY2Vz
c2luZ19pbnN0cnVjdGlvbl9nZXRfdGFyZ2V0KFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
biogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2dl
dF9zaGVldDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVN0eWxlU2hlZXQKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01TdHlsZVNoZWV0Kgord2Via2l0X2RvbV9wcm9jZXNzaW5n
X2luc3RydWN0aW9uX2dldF9zaGVldChXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHNl
bGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uUHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzZWRiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NUHJv
Y2Vzc2luZ0luc3RydWN0aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0
aW9uUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZh
dGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKiB3cmFwUHJvY2Vz
c2luZ0luc3RydWN0aW9uKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbiopOworV2ViS2l0
RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBraXQoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0
aW9uKik7CitXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGNvcmUoV2ViS2l0RE9NUHJv
Y2Vzc2luZ0luc3RydWN0aW9uKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvblByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01SYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iMDAzODliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5jcHAKQEAg
LTAsMCArMSw2NTEgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01SYW5nZS5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERP
TURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UmFuZ2VQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTVJhbmdlVW5zdGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0VfR0VUX1BS
SVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZ
UEVfUkFOR0UsIFdlYktpdERPTVJhbmdlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTVJhbmdlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBjb3JlT2JqZWN0
OworfSBXZWJLaXRET01SYW5nZVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJL
aXRET01SYW5nZSoga2l0KFdlYkNvcmU6OlJhbmdlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fUkFOR0UocmV0KTsKKworICAg
IHJldHVybiB3cmFwUmFuZ2Uob2JqKTsKK30KKworV2ViQ29yZTo6UmFuZ2UqIGNvcmUoV2ViS2l0
RE9NUmFuZ2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpSYW5nZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6
IDA7Cit9CisKK1dlYktpdERPTVJhbmdlKiB3cmFwUmFuZ2UoV2ViQ29yZTo6UmFuZ2UqIGNvcmVP
YmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9N
X1JBTkdFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfUkFOR0UsICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0df
REVGSU5FX1RZUEUoV2ViS2l0RE9NUmFuZ2UsIHdlYmtpdF9kb21fcmFuZ2UsIFdFQktJVF9ET01f
VFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1NUQVJUX0NPTlRB
SU5FUiwKKyAgICBQUk9QX1NUQVJUX09GRlNFVCwKKyAgICBQUk9QX0VORF9DT05UQUlORVIsCisg
ICAgUFJPUF9FTkRfT0ZGU0VULAorICAgIFBST1BfQ09MTEFQU0VELAorICAgIFBST1BfQ09NTU9O
X0FOQ0VTVE9SX0NPTlRBSU5FUiwKKyAgICBQUk9QX1RFWFQsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3JhbmdlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRE
T01SYW5nZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1JBTkdFX0dFVF9QUklWQVRFKG9iamVj
dCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVj
dC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NUmFuZ2VQcml2YXRlKCk7CisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9yYW5nZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3JhbmdlX2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTVJhbmdlKiBzZWxmID0gV0VCS0lUX0RPTV9SQU5HRShv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NUQVJU
X0NPTlRBSU5FUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9t
X3JhbmdlX2dldF9zdGFydF9jb250YWluZXIoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfU1RBUlRfT0ZGU0VUOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25n
KHZhbHVlLCB3ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9vZmZzZXQoc2VsZiwgbnVsbHB0cikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRU5EX0NPTlRBSU5FUjoKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfY29udGFp
bmVyKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VORF9P
RkZTRVQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fcmFuZ2Vf
Z2V0X2VuZF9vZmZzZXQoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ09MTEFQU0VEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJr
aXRfZG9tX3JhbmdlX2dldF9jb2xsYXBzZWQoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQ09NTU9OX0FOQ0VTVE9SX0NPTlRBSU5FUjoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3JhbmdlX2dldF9jb21tb25fYW5jZXN0
b3JfY29udGFpbmVyKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
cmFuZ2VfZ2V0X3RleHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlk
LCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdl
YmtpdF9kb21fcmFuZ2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Cit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9yYW5n
ZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291
bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NUmFuZ2VQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9SQU5HRV9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNv
cmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpSYW5nZSo+KFdFQktJVF9ET01fT0JKRUNU
KG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChw
cml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9yYW5nZV9jbGFzc19pbml0KFdlYktpdERPTVJhbmdl
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVJhbmdlUHJpdmF0ZSkpOworICAgIGdv
YmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3JhbmdlX2NvbnN0cnVjdG9yOwor
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3JhbmdlX2ZpbmFsaXplOwor
ICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV9yYW5nZV9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU1RBUlRfQ09OVEFJTkVSLAorICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInN0YXJ0LWNvbnRhaW5lciIsCisgICAgICAg
ICAgICAiUmFuZ2U6c3RhcnQtY29udGFpbmVyIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2Vi
S2l0RE9NTm9kZSogUmFuZ2U6c3RhcnQtY29udGFpbmVyIiwKKyAgICAgICAgICAgIFdFQktJVF9E
T01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfU1RBUlRfT0ZGU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygK
KyAgICAgICAgICAgICJzdGFydC1vZmZzZXQiLAorICAgICAgICAgICAgIlJhbmdlOnN0YXJ0LW9m
ZnNldCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFJhbmdlOnN0YXJ0LW9mZnNldCIs
CisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0VORF9DT05UQUlORVIsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiZW5kLWNvbnRhaW5lciIs
CisgICAgICAgICAgICAiUmFuZ2U6ZW5kLWNvbnRhaW5lciIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IFdlYktpdERPTU5vZGUqIFJhbmdlOmVuZC1jb250YWluZXIiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX05PREUsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9FTkRfT0ZGU0VULAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9u
ZygKKyAgICAgICAgICAgICJlbmQtb2Zmc2V0IiwKKyAgICAgICAgICAgICJSYW5nZTplbmQtb2Zm
c2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgUmFuZ2U6ZW5kLW9mZnNldCIsCisg
ICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NPTExBUFNFRCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiY29sbGFwc2VkIiwKKyAgICAgICAg
ICAgICJSYW5nZTpjb2xsYXBzZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBS
YW5nZTpjb2xsYXBzZWQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DT01NT05fQU5DRVNUT1JfQ09O
VEFJTkVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImNvbW1v
bi1hbmNlc3Rvci1jb250YWluZXIiLAorICAgICAgICAgICAgIlJhbmdlOmNvbW1vbi1hbmNlc3Rv
ci1jb250YWluZXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlKiBSYW5n
ZTpjb21tb24tYW5jZXN0b3ItY29udGFpbmVyIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJ0ZXh0IiwKKyAgICAgICAgICAgICJSYW5nZTp0ZXh0IiwKKyAgICAgICAgICAgICJyZWFkLW9u
bHkgZ2NoYXIqIFJhbmdlOnRleHQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Jhbmdl
X2luaXQoV2ViS2l0RE9NUmFuZ2UqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NUmFuZ2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9SQU5HRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBu
ZXcgKHByaXYpIFdlYktpdERPTVJhbmdlUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21f
cmFuZ2Vfc2V0X3N0YXJ0KFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZO
b2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RF
KHJlZk5vZGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAg
ICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFN0YXJ0KCpjb252ZXJ0
ZWRSZWZOb2RlLCBvZmZzZXQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9z
ZXRfZW5kKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9u
ZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uo
c2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHJlZk5vZGUp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBj
b252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldEVuZCgqY29udmVydGVkUmVmTm9kZSwg
b2Zmc2V0LCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0X2Jl
Zm9yZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9kZSkpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFJlZk5vZGUg
PSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaXRlbS0+c2V0U3RhcnRCZWZvcmUoKmNvbnZlcnRlZFJlZk5vZGUsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9
Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9zZXRfc3RhcnRfYWZ0ZXIoV2ViS2l0RE9NUmFu
Z2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19OT0RFKHJlZk5vZGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJl
Zk5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNl
dFN0YXJ0QWZ0ZXIoKmNvbnZlcnRlZFJlZk5vZGUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0
X2RvbV9yYW5nZV9zZXRfZW5kX2JlZm9yZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9N
Tm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19S
QU5HRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVm
Tm9kZSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdl
YkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5v
ZGUqIGNvbnZlcnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0RW5kQmVmb3JlKCpjb252ZXJ0
ZWRSZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZF9h
ZnRlcihXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9y
KiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9kZSkpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFJlZk5vZGUg
PSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaXRlbS0+c2V0RW5kQWZ0ZXIoKmNvbnZlcnRlZFJlZk5vZGUsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9jb2xsYXBzZShXZWJLaXRET01SYW5nZSogc2VsZiwg
Z2Jvb2xlYW4gdG9TdGFydCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19SQU5HRShzZWxmKSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpS
YW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jb2xsYXBzZSh0b1N0
YXJ0KTsKK30KKwordm9pZCB3ZWJraXRfZG9tX3JhbmdlX3NlbGVjdF9ub2RlKFdlYktpdERPTVJh
bmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShy
ZWZOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5z
ZWxlY3ROb2RlKCpjb252ZXJ0ZWRSZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lkIHdlYmtpdF9k
b21fcmFuZ2Vfc2VsZWN0X25vZGVfY29udGVudHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktp
dERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01f
SVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RF
KHJlZk5vZGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAg
ICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3Jl
OjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNlbGVjdE5vZGVDb250ZW50
cygqY29udmVydGVkUmVmTm9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ3Nob3J0IHdlYmtpdF9kb21fcmFu
Z2VfY29tcGFyZV9ib3VuZGFyeV9wb2ludHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIGd1c2hvcnQg
aG93LCBXZWJLaXRET01SYW5nZSogc291cmNlUmFuZ2UsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNvdXJjZVJhbmdlKSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlJhbmdl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OlJhbmdlKiBjb252ZXJ0
ZWRTb3VyY2VSYW5nZSA9IFdlYktpdDo6Y29yZShzb3VyY2VSYW5nZSk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ3Nob3J0IHJlc3VsdCA9IGl0ZW0tPmNvbXBhcmVC
b3VuZGFyeVBvaW50c0ZvckJpbmRpbmdzKGhvdywgKmNvbnZlcnRlZFNvdXJjZVJhbmdlLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9yYW5nZV9kZWxl
dGVfY29udGVudHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVy
cm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPmRl
bGV0ZUNvbnRlbnRzKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHdl
YmtpdF9kb21fcmFuZ2VfZXh0cmFjdF9jb250ZW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBX
ZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVu
dD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmV4dHJhY3RDb250ZW50cyhlYykp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFy
a19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwor
ICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisK
K1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQqIHdlYmtpdF9kb21fcmFuZ2VfY2xvbmVfY29udGVu
dHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVm
UHRyPFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5jbG9uZUNvbnRlbnRzKGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXRfZG9tX3JhbmdlX2luc2VydF9u
b2RlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiBuZXdOb2RlLCBHRXJyb3Iq
KiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShuZXdOb2RlKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbCghZXJyb3IgfHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTmV3Tm9kZSA9
IFdlYktpdDo6Y29yZShuZXdOb2RlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpdGVtLT5pbnNlcnROb2RlKCpjb252ZXJ0ZWROZXdOb2RlLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQor
Cit2b2lkIHdlYmtpdF9kb21fcmFuZ2Vfc3Vycm91bmRfY29udGVudHMoV2ViS2l0RE9NUmFuZ2Uq
IHNlbGYsIFdlYktpdERPTU5vZGUqIG5ld1BhcmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX05PREUobmV3UGFyZW50KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3Ig
fHwgISplcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkTmV3UGFyZW50ID0gV2ViS2l0Ojpjb3Jl
KG5ld1BhcmVudCk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRl
bS0+c3Vycm91bmRDb250ZW50cygqY29udmVydGVkTmV3UGFyZW50LCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitX
ZWJLaXRET01SYW5nZSogd2Via2l0X2RvbV9yYW5nZV9jbG9uZV9yYW5nZShXZWJLaXRET01SYW5n
ZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFO
R0Uoc2VsZiksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFu
Z2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2xvbmVSYW5nZSgpKTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX3JhbmdlX3RvX3N0cmluZyhXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJy
b3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDApOworICAgIFVO
VVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
dG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX3Jh
bmdlX2RldGFjaChXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsK
KyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5kZXRhY2goKTsKK30KKworV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCogd2Via2l0X2RvbV9y
YW5nZV9jcmVhdGVfY29udGV4dHVhbF9mcmFnbWVudChXZWJLaXRET01SYW5nZSogc2VsZiwgY29u
c3QgZ2NoYXIqIGh0bWwsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChodG1sLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2Vi
Q29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkSHRtbCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChodG1sKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRGcmFn
bWVudD4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudChjb252ZXJ0ZWRIdG1sLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2dzaG9ydCB3ZWJraXRfZG9tX3JhbmdlX2NvbXBh
cmVfbm9kZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDAp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSwg
MCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAg
IFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6
Ok5vZGUqIGNvbnZlcnRlZFJlZk5vZGUgPSBXZWJLaXQ6OmNvcmUocmVmTm9kZSk7CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ3Nob3J0IHJlc3VsdCA9IGl0ZW0tPmNv
bXBhcmVOb2RlKCpjb252ZXJ0ZWRSZWZOb2RlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fcmFuZ2VfaW50ZXJzZWN0c19ub2RlKFdlYktpdERP
TVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBHRXJyb3IqKiBlcnJvcikKK3sK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgRkFMU0UpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfTk9ERShyZWZOb2RlKSwgRkFMU0UpOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCBGQUxTRSk7CisgICAgV2Vi
Q29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9k
ZSogY29udmVydGVkUmVmTm9kZSA9IFdlYktpdDo6Y29yZShyZWZOb2RlKTsKKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5pbnRl
cnNlY3RzTm9kZSgqY29udmVydGVkUmVmTm9kZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitnc2hvcnQgd2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX3BvaW50KFdlYktpdERPTVJh
bmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUocmVmTm9kZSksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJD
b3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2Rl
KiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJlZk5vZGUpOworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdzaG9ydCByZXN1bHQgPSBpdGVtLT5jb21wYXJl
UG9pbnQoKmNvbnZlcnRlZFJlZk5vZGUsIG9mZnNldCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3JhbmdlX2lzX3BvaW50X2luX3JhbmdlKFdl
YktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1JBTkdFKHNlbGYp
LCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHJl
Zk5vZGUpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJy
b3IsIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRSZWZOb2RlID0gV2ViS2l0Ojpjb3JlKHJl
Zk5vZGUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPmlzUG9pbnRJblJhbmdlKCpjb252ZXJ0ZWRSZWZOb2RlLCBvZmZzZXQs
IGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX3Jhbmdl
X2V4cGFuZChXZWJLaXRET01SYW5nZSogc2VsZiwgY29uc3QgZ2NoYXIqIHVuaXQsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodW5pdCk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwgISplcnJv
cik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVW5pdCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh1bml0KTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5leHBhbmQoY29u
dmVydGVkVW5pdCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9yYW5n
ZV9nZXRfc3RhcnRfY29udGFpbmVyKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CisgICAgVU5V
U0VEX1BBUkFNKGVycm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnN0YXJ0Q29udGFpbmVyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2xvbmcgd2Via2l0X2RvbV9yYW5nZV9nZXRfc3Rh
cnRfb2Zmc2V0KFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgMCk7CisgICAgVU5VU0VEX1BBUkFNKGVy
cm9yKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zdGFydE9mZnNldCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2VuZF9jb250YWluZXIo
V2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAg
IFdlYkNvcmU6OlJhbmdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZW5kQ29udGFp
bmVyKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30K
KworZ2xvbmcgd2Via2l0X2RvbV9yYW5nZV9nZXRfZW5kX29mZnNldChXZWJLaXRET01SYW5nZSog
c2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uo
c2VsZiksIDApOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2Uq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+ZW5k
T2Zmc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9y
YW5nZV9nZXRfY29sbGFwc2VkKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19SQU5HRShzZWxmKSwgRkFMU0UpOworICAgIFVO
VVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+Y29sbGFwc2VkKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV9yYW5nZV9nZXRf
Y29tbW9uX2FuY2VzdG9yX2NvbnRhaW5lcihXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfUkFOR0Uoc2VsZiksIDApOworICAg
IFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV2ViQ29yZTo6UmFuZ2UqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBX
VEY6OmdldFB0cihpdGVtLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKKyAgICByZXR1cm4g
V2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2djaGFyKiB3ZWJraXRfZG9t
X3JhbmdlX2dldF90ZXh0KFdlYktpdERPTVJhbmdlKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1JBTkdFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpSYW5nZSogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT50ZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NUmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42YjYyYmM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZS5oCkBAIC0wLDAgKzEs
NDAyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVRET01fSF9JTlNJREVfXykgJiYgIWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXRkb20vd2Via2l0ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRET01SYW5nZV9oCisjZGVmaW5lIFdlYktpdERPTVJh
bmdlX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfUkFOR0UgICAgICAg
ICAgICAod2Via2l0X2RvbV9yYW5nZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1JB
TkdFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9ET01fVFlQRV9SQU5HRSwgV2ViS2l0RE9NUmFuZ2UpKQorI2RlZmluZSBXRUJLSVRfRE9N
X1JBTkdFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9SQU5HRSwgV2ViS2l0RE9NUmFuZ2VDbGFzcykKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19SQU5HRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfRE9NX1RZUEVfUkFOR0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1JB
TkdFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9SQU5HRSkpCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0VfR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1JB
TkdFLCBXZWJLaXRET01SYW5nZUNsYXNzKSkKKworLyoqCisgKiBXRUJLSVRfRE9NX1JBTkdFX1NU
QVJUX1RPX1NUQVJUOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fUkFOR0VfU1RBUlRfVE9fU1RB
UlQgMAorCisvKioKKyAqIFdFQktJVF9ET01fUkFOR0VfU1RBUlRfVE9fRU5EOgorICovCisjZGVm
aW5lIFdFQktJVF9ET01fUkFOR0VfU1RBUlRfVE9fRU5EIDEKKworLyoqCisgKiBXRUJLSVRfRE9N
X1JBTkdFX0VORF9UT19FTkQ6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9FTkRfVE9f
RU5EIDIKKworLyoqCisgKiBXRUJLSVRfRE9NX1JBTkdFX0VORF9UT19TVEFSVDoKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX1JBTkdFX0VORF9UT19TVEFSVCAzCisKKy8qKgorICogV0VCS0lUX0RP
TV9SQU5HRV9OT0RFX0JFRk9SRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1JBTkdFX05PREVf
QkVGT1JFIDAKKworLyoqCisgKiBXRUJLSVRfRE9NX1JBTkdFX05PREVfQUZURVI6CisgKi8KKyNk
ZWZpbmUgV0VCS0lUX0RPTV9SQU5HRV9OT0RFX0FGVEVSIDEKKworLyoqCisgKiBXRUJLSVRfRE9N
X1JBTkdFX05PREVfQkVGT1JFX0FORF9BRlRFUjoKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1JB
TkdFX05PREVfQkVGT1JFX0FORF9BRlRFUiAyCisKKy8qKgorICogV0VCS0lUX0RPTV9SQU5HRV9O
T0RFX0lOU0lERToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1JBTkdFX05PREVfSU5TSURFIDMK
Kworc3RydWN0IF9XZWJLaXRET01SYW5nZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9p
bnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NUmFuZ2VDbGFzcyB7CisgICAgV2ViS2l0
RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2RvbV9yYW5nZV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Jhbmdl
X3NldF9zdGFydDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHJlZk5vZGU6IEEg
I1dlYktpdERPTU5vZGUKKyAqIEBvZmZzZXQ6IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9zZXRfc3RhcnQoV2Vi
S2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIGdsb25nIG9mZnNldCwg
R0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZDoKKyAq
IEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHJlZk5vZGU6IEEgI1dlYktpdERPTU5vZGUK
KyAqIEBvZmZzZXQ6IEEgI2dsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9zZXRfZW5kKFdlYktpdERPTVJhbmdlKiBzZWxm
LCBXZWJLaXRET01Ob2RlKiByZWZOb2RlLCBnbG9uZyBvZmZzZXQsIEdFcnJvcioqIGVycm9yKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydF9iZWZvcmU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9z
ZXRfc3RhcnRfYmVmb3JlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZO
b2RlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9zZXRfc3Rh
cnRfYWZ0ZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNX
ZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV9yYW5nZV9zZXRfc3RhcnRfYWZ0ZXIoV2ViS2l0RE9NUmFuZ2UqIHNlbGYs
IFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3JhbmdlX3NldF9lbmRfYmVmb3JlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdl
CisgKiBAcmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fcmFuZ2Vfc2V0X2VuZF9iZWZvcmUoV2Vi
S2l0RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmRfYWZ0ZXI6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJy
b3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9z
ZXRfZW5kX2FmdGVyKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2RlKiByZWZOb2Rl
LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9jb2xsYXBzZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHRvU3RhcnQ6IEEgI2dib29sZWFuCisg
KiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9y
YW5nZV9jb2xsYXBzZShXZWJLaXRET01SYW5nZSogc2VsZiwgZ2Jvb2xlYW4gdG9TdGFydCwgR0Vy
cm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vfc2VsZWN0X25vZGU6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2Rl
CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV9yYW5nZV9zZWxlY3Rfbm9kZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSog
cmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vfc2Vs
ZWN0X25vZGVfY29udGVudHM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZO
b2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9zZWxlY3Rfbm9kZV9jb250ZW50cyhXZWJLaXRE
T01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3IpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9ib3VuZGFyeV9wb2ludHM6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBob3c6IEEgI2d1c2hvcnQKKyAqIEBzb3VyY2VS
YW5nZTogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVy
bnM6IEEgI2dzaG9ydAorKiovCitXRUJLSVRfQVBJIGdzaG9ydAord2Via2l0X2RvbV9yYW5nZV9j
b21wYXJlX2JvdW5kYXJ5X3BvaW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgZ3VzaG9ydCBob3cs
IFdlYktpdERPTVJhbmdlKiBzb3VyY2VSYW5nZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fcmFuZ2VfZGVsZXRlX2NvbnRlbnRzOgorICogQHNlbGY6IEEgI1dlYktpdERP
TVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV9yYW5nZV9kZWxldGVfY29udGVudHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJv
cioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2V4dHJhY3RfY29udGVudHM6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqCit3ZWJraXRfZG9tX3Jh
bmdlX2V4dHJhY3RfY29udGVudHMoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioqIGVycm9y
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2Nsb25lX2NvbnRlbnRzOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQKKyoqLworV0VCS0lU
X0FQSSBXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50Kgord2Via2l0X2RvbV9yYW5nZV9jbG9uZV9j
b250ZW50cyhXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fcmFuZ2VfaW5zZXJ0X25vZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFu
Z2UKKyAqIEBuZXdOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAq
CisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9pbnNlcnRfbm9kZShXZWJL
aXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogbmV3Tm9kZSwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2Vfc3Vycm91bmRfY29udGVudHM6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBuZXdQYXJlbnQ6IEEgI1dlYktpdERPTU5vZGUKKyAq
IEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Jh
bmdlX3N1cnJvdW5kX2NvbnRlbnRzKFdlYktpdERPTVJhbmdlKiBzZWxmLCBXZWJLaXRET01Ob2Rl
KiBuZXdQYXJlbnQsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Jhbmdl
X2Nsb25lX3JhbmdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVJhbmdl
CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NUmFuZ2UqCit3ZWJraXRfZG9tX3JhbmdlX2Nsb25l
X3JhbmdlKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9yYW5nZV90b19zdHJpbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UK
KyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3JhbmdlX3RvX3N0cmluZyhXZWJLaXRET01SYW5nZSog
c2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfZGV0YWNo
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9kZXRhY2goV2ViS2l0RE9NUmFu
Z2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2Ny
ZWF0ZV9jb250ZXh0dWFsX2ZyYWdtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisg
KiBAaHRtbDogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudAorKiovCitXRUJLSVRf
QVBJIFdlYktpdERPTURvY3VtZW50RnJhZ21lbnQqCit3ZWJraXRfZG9tX3JhbmdlX2NyZWF0ZV9j
b250ZXh0dWFsX2ZyYWdtZW50KFdlYktpdERPTVJhbmdlKiBzZWxmLCBjb25zdCBnY2hhciogaHRt
bCwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9u
b2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0
RE9NTm9kZQorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ3Nob3J0Cisq
Ki8KK1dFQktJVF9BUEkgZ3Nob3J0Cit3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfbm9kZShXZWJL
aXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogcmVmTm9kZSwgR0Vycm9yKiogZXJyb3Ip
OworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfaW50ZXJzZWN0c19ub2RlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVJhbmdlCisgKiBAcmVmTm9kZTogQSAjV2ViS2l0RE9NTm9kZQorICogQGVy
cm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2RvbV9yYW5nZV9pbnRlcnNlY3RzX25vZGUoV2ViS2l0RE9NUmFu
Z2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIEdFcnJvcioqIGVycm9yKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfcG9pbnQ6CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKiBAb2Zmc2V0OiBBICNn
bG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ3Nob3J0CisqKi8K
K1dFQktJVF9BUEkgZ3Nob3J0Cit3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfcG9pbnQoV2ViS2l0
RE9NUmFuZ2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHJlZk5vZGUsIGdsb25nIG9mZnNldCwgR0Vy
cm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfaXNfcG9pbnRfaW5fcmFu
Z2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEByZWZOb2RlOiBBICNXZWJLaXRE
T01Ob2RlCisgKiBAb2Zmc2V0OiBBICNnbG9uZworICogQGVycm9yOiAjR0Vycm9yCisgKgorICog
UmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9yYW5nZV9pc19wb2ludF9pbl9yYW5nZShXZWJLaXRET01SYW5nZSogc2VsZiwgV2ViS2l0RE9N
Tm9kZSogcmVmTm9kZSwgZ2xvbmcgb2Zmc2V0LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICog
d2Via2l0X2RvbV9yYW5nZV9nZXRfc3RhcnRfY29udGFpbmVyOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgor
d2Via2l0X2RvbV9yYW5nZV9nZXRfc3RhcnRfY29udGFpbmVyKFdlYktpdERPTVJhbmdlKiBzZWxm
LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9nZXRfc3RhcnRf
b2Zmc2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRf
ZG9tX3JhbmdlX2dldF9zdGFydF9vZmZzZXQoV2ViS2l0RE9NUmFuZ2UqIHNlbGYsIEdFcnJvcioq
IGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRfY29udGFpbmVyOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVJhbmdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV9yYW5nZV9nZXRfZW5kX2NvbnRhaW5lcihXZWJL
aXRET01SYW5nZSogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21f
cmFuZ2VfZ2V0X2VuZF9vZmZzZXQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBl
cnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkg
Z2xvbmcKK3dlYmtpdF9kb21fcmFuZ2VfZ2V0X2VuZF9vZmZzZXQoV2ViS2l0RE9NUmFuZ2UqIHNl
bGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3JhbmdlX2dldF9jb2xs
YXBzZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dFcnJvcgor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9kb21fcmFuZ2VfZ2V0X2NvbGxhcHNlZChXZWJLaXRET01SYW5nZSogc2VsZiwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2NvbW1vbl9hbmNlc3Rv
cl9jb250YWluZXI6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NUmFuZ2UKKyAqIEBlcnJvcjogI0dF
cnJvcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3JhbmdlX2dldF9jb21t
b25fYW5jZXN0b3JfY29udGFpbmVyKFdlYktpdERPTVJhbmdlKiBzZWxmLCBHRXJyb3IqKiBlcnJv
cik7CisKKy8qKgorICogd2Via2l0X2RvbV9yYW5nZV9nZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01SYW5nZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX3JhbmdlX2dldF90ZXh0KFdlYktpdERPTVJhbmdlKiBzZWxmKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVJhbmdlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NUmFuZ2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdlUHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODlkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVJhbmdlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NUmFuZ2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
RE9NUmFuZ2VQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NUmFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01SYW5nZSogd3JhcFJhbmdlKFdlYkNvcmU6OlJhbmdlKik7CitXZWJLaXRET01SYW5nZSog
a2l0KFdlYkNvcmU6OlJhbmdlKik7CitXZWJDb3JlOjpSYW5nZSogY29yZShXZWJLaXRET01SYW5n
ZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01SYW5nZVBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZVVuc3RhYmxlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVJhbmdl
VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzEwOWVhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01SYW5nZVVuc3RhYmxlLmgKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01SYW5nZVVu
c3RhYmxlX2gKKyNkZWZpbmUgV2ViS2l0RE9NUmFuZ2VVbnN0YWJsZV9oCisKKyNpZmRlZiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21k
ZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworLyoqCisgKiB3ZWJraXRfZG9t
X3JhbmdlX2V4cGFuZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01SYW5nZQorICogQHVuaXQ6IEEg
I2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9yYW5nZV9leHBhbmQoV2ViS2l0RE9NUmFu
Z2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB1bml0LCBHRXJyb3IqKiBlcnJvcik7CisKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlm
IC8qIFdlYktpdERPTVJhbmdlVW5zdGFibGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TY3JlZW4u
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TY3JlZW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFjNzNjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNjcmVlbi5jcHAKQEAgLTAsMCArMSwz
MDUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01TY3JlZW4uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU2NyZWVuUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZl
cnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fU0NSRUVOX0dFVF9QUklWQVRFKG9iaikg
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1NDUkVFTiwg
V2ViS2l0RE9NU2NyZWVuUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNjcmVl
blByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JlZW4+IGNvcmVPYmplY3Q7Cit9IFdl
YktpdERPTVNjcmVlblByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01T
Y3JlZW4qIGtpdChXZWJDb3JlOjpTY3JlZW4qIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6Omdl
dChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9TQ1JFRU4ocmV0KTsKKworICAgIHJl
dHVybiB3cmFwU2NyZWVuKG9iaik7Cit9CisKK1dlYkNvcmU6OlNjcmVlbiogY29yZShXZWJLaXRE
T01TY3JlZW4qIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpTY3JlZW4qPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01TY3JlZW4qIHdyYXBTY3JlZW4oV2ViQ29yZTo6U2NyZWVuKiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9TQ1JFRU4oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9TQ1JFRU4sICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NU2NyZWVuLCB3ZWJraXRfZG9tX3NjcmVlbiwgV0VC
S0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfSEVJ
R0hULAorICAgIFBST1BfV0lEVEgsCisgICAgUFJPUF9DT0xPUl9ERVBUSCwKKyAgICBQUk9QX1BJ
WEVMX0RFUFRILAorICAgIFBST1BfQVZBSUxfTEVGVCwKKyAgICBQUk9QX0FWQUlMX1RPUCwKKyAg
ICBQUk9QX0FWQUlMX0hFSUdIVCwKKyAgICBQUk9QX0FWQUlMX1dJRFRILAorfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9zY3JlZW5fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTVNjcmVlblByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NDUkVFTl9HRVRfUFJJ
VkFURShvYmplY3QpOworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYt
PmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVNjcmVlblByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3NjcmVlbl9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NjcmVlbl9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01TY3JlZW4qIHNlbGYgPSBXRUJL
SVRfRE9NX1NDUkVFTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAg
Y2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtp
dF9kb21fc2NyZWVuX2dldF9oZWlnaHQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9t
X3NjcmVlbl9nZXRfd2lkdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Q09MT1JfREVQVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9t
X3NjcmVlbl9nZXRfY29sb3JfZGVwdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfUElYRUxfREVQVEg6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX3NjcmVlbl9nZXRfcGl4ZWxfZGVwdGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQVZBSUxfTEVGVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV9zY3JlZW5fZ2V0X2F2YWlsX2xlZnQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQVZBSUxfVE9QOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVl
LCB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfdG9wKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FWQUlMX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmco
dmFsdWUsIHdlYmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF9oZWlnaHQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQVZBSUxfV0lEVEg6CisgICAgICAgIGdfdmFsdWVfc2V0
X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfd2lkdGgoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fc2NyZWVuX2NvbnN0cnVj
dG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENv
bnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVj
dCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fc2NyZWVuX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisKKyAgICBXZWJLaXRET01TY3JlZW5Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TQ1JF
RU5fR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6U2NyZWVuKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVj
dCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3NjcmVlbl9jbGFzc19pbml0KFdlYktpdERPTVNjcmVlbkNsYXNzKiByZXF1ZXN0Q2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhy
ZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3Ms
IHNpemVvZihXZWJLaXRET01TY3JlZW5Qcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25z
dHJ1Y3RvciA9IHdlYmtpdF9kb21fc2NyZWVuX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3NjcmVlbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc2NyZWVuX2dldF9wcm9wZXJ0eTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAg
ICAgICAgICJoZWlnaHQiLAorICAgICAgICAgICAgIlNjcmVlbjpoZWlnaHQiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBndWxvbmcgU2NyZWVuOmhlaWdodCIsCisgICAgICAgICAgICAwLCBHX01B
WFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisg
ICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAg
ICAgICJ3aWR0aCIsCisgICAgICAgICAgICAiU2NyZWVuOndpZHRoIiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ3Vsb25nIFNjcmVlbjp3aWR0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05H
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfQ09MT1JfREVQVEgsCisgICAgICAgIGdfcGFyYW1fc3BlY191bG9uZygKKyAgICAgICAg
ICAgICJjb2xvci1kZXB0aCIsCisgICAgICAgICAgICAiU2NyZWVuOmNvbG9yLWRlcHRoIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFNjcmVlbjpjb2xvci1kZXB0aCIsCisgICAgICAg
ICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUElYRUxfREVQVEgsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y191bG9uZygKKyAgICAgICAgICAgICJwaXhlbC1kZXB0aCIsCisgICAgICAgICAgICAiU2NyZWVu
OnBpeGVsLWRlcHRoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFNjcmVlbjpwaXhl
bC1kZXB0aCIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQVZBSUxfTEVGVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiYXZhaWwtbGVmdCIsCisgICAg
ICAgICAgICAiU2NyZWVuOmF2YWlsLWxlZnQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9u
ZyBTY3JlZW46YXZhaWwtbGVmdCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0FWQUlMX1RPUCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAi
YXZhaWwtdG9wIiwKKyAgICAgICAgICAgICJTY3JlZW46YXZhaWwtdG9wIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgU2NyZWVuOmF2YWlsLXRvcCIsCisgICAgICAgICAgICBHX01JTkxP
TkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0FWQUlMX0hFSUdIVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vs
b25nKAorICAgICAgICAgICAgImF2YWlsLWhlaWdodCIsCisgICAgICAgICAgICAiU2NyZWVuOmF2
YWlsLWhlaWdodCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBTY3JlZW46YXZhaWwt
aGVpZ2h0IiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BVkFJTF9XSURUSCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImF2YWlsLXdpZHRoIiwKKyAg
ICAgICAgICAgICJTY3JlZW46YXZhaWwtd2lkdGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
dWxvbmcgU2NyZWVuOmF2YWlsLXdpZHRoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAs
CisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3NjcmVlbl9pbml0KFdlYktpdERPTVNjcmVlbiogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRET01TY3JlZW5Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TQ1JFRU5fR0VUX1BS
SVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01TY3JlZW5Qcml2YXRlKCk7
Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfaGVpZ2h0KFdlYktpdERPTVNjcmVl
biogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOwor
ICAgIFdlYkNvcmU6OlNjcmVlbiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxv
bmcgcmVzdWx0ID0gaXRlbS0+aGVpZ2h0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ3Vs
b25nIHdlYmtpdF9kb21fc2NyZWVuX2dldF93aWR0aChXZWJLaXRET01TY3JlZW4qIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU0NSRUVOKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpTY3JlZW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9
IGl0ZW0tPndpZHRoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ3Vsb25nIHdlYmtpdF9k
b21fc2NyZWVuX2dldF9jb2xvcl9kZXB0aChXZWJLaXRET01TY3JlZW4qIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfU0NSRUVOKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTY3Jl
ZW4qIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0t
PmNvbG9yRGVwdGgoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2Rv
bV9zY3JlZW5fZ2V0X3BpeGVsX2RlcHRoKFdlYktpdERPTVNjcmVlbiogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNjcmVl
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+
cGl4ZWxEZXB0aCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21f
c2NyZWVuX2dldF9hdmFpbF9sZWZ0KFdlYktpdERPTVNjcmVlbiogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNjcmVlbiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5hdmFp
bExlZnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3NjcmVl
bl9nZXRfYXZhaWxfdG9wKFdlYktpdERPTVNjcmVlbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNjcmVlbiogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5hdmFpbFRvcCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3NjcmVlbl9nZXRf
YXZhaWxfaGVpZ2h0KFdlYktpdERPTVNjcmVlbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNjcmVlbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+YXZhaWxIZWlnaHQo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2RvbV9zY3JlZW5fZ2V0
X2F2YWlsX3dpZHRoKFdlYktpdERPTVNjcmVlbiogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19TQ1JFRU4oc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNjcmVlbiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+YXZhaWxXaWR0aCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2NyZWVuLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVNjcmVlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZGNmZWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNjcmVlbi5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVNjcmVlbl9oCisj
ZGVmaW5lIFdlYktpdERPTVNjcmVlbl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVu
c3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfU0NS
RUVOICAgICAgICAgICAgKHdlYmtpdF9kb21fc2NyZWVuX2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9ET01fU0NSRUVOKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TQ1JFRU4sIFdlYktpdERPTVNjcmVlbikpCisjZGVm
aW5lIFdFQktJVF9ET01fU0NSRUVOX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TQ1JFRU4sIFdlYktpdERPTVNjcmVlbkNs
YXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NDUkVFTihvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfU0NSRUVOKSkKKyNkZWZp
bmUgV0VCS0lUX0RPTV9JU19TQ1JFRU5fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NDUkVFTikpCisjZGVmaW5lIFdFQktJVF9E
T01fU0NSRUVOX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9TQ1JFRU4sIFdlYktpdERPTVNjcmVlbkNsYXNzKSkKKworc3Ry
dWN0IF9XZWJLaXRET01TY3JlZW4geworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFu
Y2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVNjcmVlbkNsYXNzIHsKKyAgICBXZWJLaXRET01P
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX3NjcmVlbl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NjcmVlbl9n
ZXRfaGVpZ2h0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVNjcmVlbgorICoKKyAqIFJldHVybnM6
IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
dWxvbmcKK3dlYmtpdF9kb21fc2NyZWVuX2dldF9oZWlnaHQoV2ViS2l0RE9NU2NyZWVuKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfd2lkdGg6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NU2NyZWVuCisgKgorICogUmV0dXJuczogQSAjZ3Vsb25nCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV9zY3JlZW5f
Z2V0X3dpZHRoKFdlYktpdERPTVNjcmVlbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9z
Y3JlZW5fZ2V0X2NvbG9yX2RlcHRoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNjcmVlbgorICoK
KyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fc2NyZWVuX2dldF9jb2xvcl9kZXB0aChXZWJL
aXRET01TY3JlZW4qIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fc2NyZWVuX2dldF9waXhl
bF9kZXB0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TY3JlZW4KKyAqCisgKiBSZXR1cm5zOiBB
ICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vs
b25nCit3ZWJraXRfZG9tX3NjcmVlbl9nZXRfcGl4ZWxfZGVwdGgoV2ViS2l0RE9NU2NyZWVuKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfbGVmdDoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01TY3JlZW4KKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV9z
Y3JlZW5fZ2V0X2F2YWlsX2xlZnQoV2ViS2l0RE9NU2NyZWVuKiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfdG9wOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNj
cmVlbgorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfdG9w
KFdlYktpdERPTVNjcmVlbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zY3JlZW5fZ2V0
X2F2YWlsX2hlaWdodDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TY3JlZW4KKyAqCisgKiBSZXR1
cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ3Vsb25nCit3ZWJraXRfZG9tX3NjcmVlbl9nZXRfYXZhaWxfaGVpZ2h0KFdlYktpdERPTVNj
cmVlbiogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zY3JlZW5fZ2V0X2F2YWlsX3dpZHRo
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVNjcmVlbgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9u
ZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dl
YmtpdF9kb21fc2NyZWVuX2dldF9hdmFpbF93aWR0aChXZWJLaXRET01TY3JlZW4qIHNlbGYpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICov
CisjZW5kaWYgLyogV2ViS2l0RE9NU2NyZWVuX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2NyZWVu
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TY3JlZW5Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjQ2MWZjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU2NyZWVuUHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NU2NyZWVuUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVNjcmVlblBy
aXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9TY3JlZW4uaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NU2NyZWVuLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NU2Ny
ZWVuKiB3cmFwU2NyZWVuKFdlYkNvcmU6OlNjcmVlbiopOworV2ViS2l0RE9NU2NyZWVuKiBraXQo
V2ViQ29yZTo6U2NyZWVuKik7CitXZWJDb3JlOjpTY3JlZW4qIGNvcmUoV2ViS2l0RE9NU2NyZWVu
Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVNjcmVlblBy
aXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXMuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01T
cGVlY2hTeW50aGVzaXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQw
NzgzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcy5jcHAKQEAgLTAs
MCArMSwyNzAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXMuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1NQ
RUVDSF9TWU5USEVTSVNfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUywgV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc1ByaXZhdGUgeworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFJlZlB0cjxX
ZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpCit9IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGU7CisKKyNp
ZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTVNwZWVjaFN5bnRoZXNpcyoga2l0KFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpcyogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X1NQRUVDSF9TWU5USEVTSVMocmV0KTsKKworICAgIHJldHVybiB3cmFwU3BlZWNoU3ludGhlc2lz
KG9iaik7Cit9CisKK1dlYkNvcmU6OlNwZWVjaFN5bnRoZXNpcyogY29yZShXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXMqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHdyYXBTcGVl
Y2hTeW50aGVzaXMoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhF
U0lTKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJUywgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCitHX0RFRklORV9UWVBF
KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcywgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9Q
RU5ESU5HLAorICAgIFBST1BfU1BFQUtJTkcsCisgICAgUFJPUF9QQVVTRUQsCit9OworCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
CisgICAgcHJpdi0+fldlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUoKTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhl
c2lzX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVNwZWVjaFN5bnRo
ZXNpcyogc2VsZiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJUyhvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1BFTkRJTkc6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19nZXRf
cGVuZGluZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TUEVBS0lORzoK
KyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3lu
dGhlc2lzX2dldF9zcGVha2luZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9QQVVTRUQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc19nZXRfcGF1c2VkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRp
YyBHT2JqZWN0KiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfY29uc3RydWN0b3IoR1R5cGUg
dHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFy
YW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19HRVRfUFJJ
VkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpTcGVlY2hTeW50aGVzaXMqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICByZXR1
cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNf
Y2xhc3NfaW5pdChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNDbGFzcyogcmVxdWVzdENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVz
dENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXpl
b2YoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+
Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfY29uc3RydWN0b3I7Cisg
ICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19m
aW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc19nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUEVORElORywK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAicGVuZGluZyIsCisg
ICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzOnBlbmRpbmciLAorICAgICAgICAgICAgInJlYWQt
b25seSBnYm9vbGVhbiBTcGVlY2hTeW50aGVzaXM6cGVuZGluZyIsCisgICAgICAgICAgICBGQUxT
RSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX1NQRUFLSU5HLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAg
ICJzcGVha2luZyIsCisgICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzOnNwZWFraW5nIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gU3BlZWNoU3ludGhlc2lzOnNwZWFraW5nIiwK
KyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfUEFVU0VELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVh
bigKKyAgICAgICAgICAgICJwYXVzZWQiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpczpw
YXVzZWQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBTcGVlY2hTeW50aGVzaXM6
cGF1c2VkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X2luaXQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiByZXF1ZXN0KQoreworICAgIFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVT
SVNfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNQcml2YXRlKCk7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3NwZWFrKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZiwgV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlKiB1dHRlcmFuY2UpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTKHNlbGYpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uo
dXR0ZXJhbmNlKSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogY29u
dmVydGVkVXR0ZXJhbmNlID0gV2ViS2l0Ojpjb3JlKHV0dGVyYW5jZSk7CisgICAgaXRlbS0+c3Bl
YWsoKmNvbnZlcnRlZFV0dGVyYW5jZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsK
KyAgICBVTlVTRURfUEFSQU0odXR0ZXJhbmNlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfY2FuY2Vs
KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVMoc2VsZikpOwor
ICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpcyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5jYW5jZWwoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorI2Vu
ZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc19wYXVzZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYpCit7
CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVF
Q0hfU1lOVEhFU0lTKHNlbGYpKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+cGF1c2UoKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNw
ZWVjaCBTeW50aGVzaXMiKQorI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwor
fQorCit2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19yZXN1bWUoV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJUyhzZWxmKSk7CisgICAgV2ViQ29yZTo6
U3BlZWNoU3ludGhlc2lzKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnJl
c3VtZSgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisjZW5kaWYgLyogRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc19nZXRfcGVuZGluZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqIHNlbGYpCit7Cisj
aWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BF
RUNIX1NZTlRIRVNJUyhzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNp
cyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVt
LT5wZW5kaW5nKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50
aGVzaXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyog
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc19nZXRfc3BlYWtpbmcoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxm
KQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1NQRUVDSF9TWU5USEVTSVMoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hT
eW50aGVzaXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+c3BlYWtpbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3Bl
ZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNl
bmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX2dldF9wYXVzZWQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
KiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVMoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpT
cGVlY2hTeW50aGVzaXMqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gaXRlbS0+cGF1c2VkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZWI3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVNwZWVjaFN5bnRoZXNpcy5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc19oCisjZGVm
aW5lIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc19oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfU1BFRUNIX1NZTlRIRVNJUyAgICAgICAgICAgICh3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9TUEVFQ0hfU1lOVEhFU0lTLCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXMpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVMs
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0NsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1NQ
RUVDSF9TWU5USEVTSVMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVMpKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVMpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVMs
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0NsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01TcGVl
Y2hTeW50aGVzaXMgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0NsYXNzIHsKKyAgICBXZWJLaXRET01P
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX3NwZWFrOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5
bnRoZXNpcworICogQHV0dGVyYW5jZTogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19zcGVhayhXZWJLaXRET01TcGVlY2hTeW50aGVzaXMq
IHNlbGYsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogdXR0ZXJhbmNlKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfY2FuY2VsOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfY2FuY2VsKFdl
YktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX3BhdXNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
cworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfcGF1c2UoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBz
ZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfcmVzdW1lOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNf
cmVzdW1lKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZik7CisKKy8qKgorICogd2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX2dldF9wZW5kaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERP
TVNwZWVjaFN5bnRoZXNpcworICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfZ2V0X3BlbmRpbmcoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3NwZWFraW5nOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpcworICoKKyAqIFJldHVybnM6IEEg
I2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdi
b29sZWFuCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZ2V0X3NwZWFraW5nKFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpcyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3lu
dGhlc2lzX2dldF9wYXVzZWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19n
ZXRfcGF1c2VkKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpcyogc2VsZik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50
aGVzaXNFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQyNjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNFdmVudC5jcHAKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNFdmVudC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBv
cnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNFdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3Ry
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIGtpdChXZWJDb3JlOjpTcGVlY2hTeW50aGVz
aXNFdmVudCogb2JqKQoreworICAgIHJldHVybiBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNf
RVZFTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50Kj4ob2JqKSkpOworfQorCitXZWJD
b3JlOjpTcGVlY2hTeW50aGVzaXNFdmVudCogY29yZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNF
dmVudCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpc0V2ZW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQqIHdyYXBT
cGVlY2hTeW50aGVzaXNFdmVudChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNFdmVudCogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
U1BFRUNIX1NZTlRIRVNJU19FVkVOVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1NQRUVD
SF9TWU5USEVTSVNfRVZFTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCwg
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50LCBXRUJLSVRfRE9NX1RZUEVfRVZFTlQp
CisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0NIQVJfSU5ERVgsCisgICAgUFJPUF9F
TEFQU0VEX1RJTUUsCisgICAgUFJPUF9OQU1FLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9TUEVFQ0hf
U1lOVEhFU0lTX0VWRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfQ0hBUl9JTkRFWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUs
IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19ldmVudF9nZXRfY2hhcl9pbmRleChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9FTEFQU0VEX1RJTUU6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRf
Z2V0X2VsYXBzZWRfdGltZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9O
QU1FOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfZXZlbnRfZ2V0X25hbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2NsYXNzX2luaXQoV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmpl
Y3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c19ldmVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ0hBUl9JTkRFWCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImNoYXItaW5kZXgiLAorICAg
ICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc0V2ZW50OmNoYXItaW5kZXgiLAorICAgICAgICAgICAg
InJlYWQtb25seSBndWxvbmcgU3BlZWNoU3ludGhlc2lzRXZlbnQ6Y2hhci1pbmRleCIsCisgICAg
ICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRUxBUFNFRF9USU1FLAorICAgICAgICBnX3BhcmFt
X3NwZWNfZmxvYXQoCisgICAgICAgICAgICAiZWxhcHNlZC10aW1lIiwKKyAgICAgICAgICAgICJT
cGVlY2hTeW50aGVzaXNFdmVudDplbGFwc2VkLXRpbWUiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnZmxvYXQgU3BlZWNoU3ludGhlc2lzRXZlbnQ6ZWxhcHNlZC10aW1lIiwKKyAgICAgICAgICAg
IC1HX01BWEZMT0FULCBHX01BWEZMT0FULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVz
aXNFdmVudDpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFNwZWVjaFN5bnRo
ZXNpc0V2ZW50Om5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfZXZlbnRfaW5pdChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCogcmVxdWVzdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3Nw
ZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X2NoYXJfaW5kZXgoV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzRXZlbnQqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19FVkVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmNoYXJJbmRleCgpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30K
KworZ2Zsb2F0IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19ldmVudF9nZXRfZWxhcHNlZF90
aW1lKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBzZWxmKQoreworI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVT
SVNfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc0V2ZW50KiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCByZXN1bHQgPSBpdGVtLT5lbGFw
c2VkVGltZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhl
c2lzIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Zsb2F0PigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc19ldmVudF9nZXRfbmFtZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RP
TV9JU19TUEVFQ0hfU1lOVEhFU0lTX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTcGVl
Y2hTeW50aGVzaXNFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5uYW1lKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gMDsKKyNl
bmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNFdmVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYTdmMTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50LmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNFdmVudF9oCisjZGVmaW5lIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50X2gKKworI2lm
ZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfRVZFTlQgICAgICAgICAgICAo
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19FVkVOVChvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJ
U19FVkVOVCwgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX1NQRUVDSF9TWU5USEVTSVNfRVZFTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfRVZF
TlQsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfU1BFRUNIX1NZTlRIRVNJU19FVkVOVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19FVkVO
VCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19FVkVOVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVf
U1BFRUNIX1NZTlRIRVNJU19FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRI
RVNJU19FVkVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19FVkVOVCwgV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzRXZlbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzRXZlbnQgeworICAgIFdlYktpdERPTUV2ZW50IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRDbGFzcyB7CisgICAgV2ViS2l0RE9N
RXZlbnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfZXZlbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9jaGFyX2luZGV4OgorICogQHNlbGY6
IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50CisgKgorICogUmV0dXJuczogQSAjZ3Vs
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZwor
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX2V2ZW50X2dldF9jaGFyX2luZGV4KFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfZXZlbnRfZ2V0X2VsYXBzZWRfdGltZToKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dmbG9hdAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc19ldmVudF9nZXRfZWxhcHNlZF90aW1lKFdlYktpdERPTVNwZWVjaFN5
bnRoZXNpc0V2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfZXZlbnRfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lz
RXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc19l
dmVudF9nZXRfbmFtZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudCogc2VsZik7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNl
bmRpZiAvKiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudF9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2FsbGJhY2tGdW5jdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRQcml2
YXRlLmgKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25Q
cml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRQcml2YXRlLmgKaW5k
ZXggOTg5MGE5Mi4uMWMzMzZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb25Qcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVudFByaXZhdGUuaApAQCAtMTgsMTkgKzE4
LDE5IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBX
ZWJLaXRET01UZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRET01U
ZXN0Q2FsbGJhY2tGdW5jdGlvblByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNFdmVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNFdmVu
dFByaXZhdGVfaAogCi0jaW5jbHVkZSAiVGVzdENhbGxiYWNrRnVuY3Rpb24uaCIKLSNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NwZWVjaFN5bnRoZXNpc0V2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50Lmg+CiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24qIHdy
YXBUZXN0Q2FsbGJhY2tGdW5jdGlvbihXZWJDb3JlOjpUZXN0Q2FsbGJhY2tGdW5jdGlvbiopOwot
V2ViS2l0RE9NVGVzdENhbGxiYWNrRnVuY3Rpb24qIGtpdChXZWJDb3JlOjpUZXN0Q2FsbGJhY2tG
dW5jdGlvbiopOwotV2ViQ29yZTo6VGVzdENhbGxiYWNrRnVuY3Rpb24qIGNvcmUoV2ViS2l0RE9N
VGVzdENhbGxiYWNrRnVuY3Rpb24qKTsKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiB3
cmFwU3BlZWNoU3ludGhlc2lzRXZlbnQoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzRXZlbnQqKTsK
K1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0V2ZW50KiBraXQoV2ViQ29yZTo6U3BlZWNoU3ludGhl
c2lzRXZlbnQqKTsKK1dlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc0V2ZW50KiBjb3JlKFdlYktpdERP
TVNwZWVjaFN5bnRoZXNpc0V2ZW50Kik7CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlm
IC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLwogCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dENhbGxiYWNrRnVuY3Rpb25Qcml2YXRlX2ggKi8KKyNlbmRpZiAvKiBXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNFdmVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVu
YW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ByaXZhdGUuaAppbmRleCAwOTcyMzg4Li42MTNiZDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlLmgKQEAgLTE4LDE5ICsx
OCwxOSBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYg
V2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZV9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RDYWxs
YmFja1ByaXZhdGVfaAorI2lmbmRlZiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzUHJpdmF0ZV9oCiAKLSNpbmNsdWRlICJU
ZXN0Q2FsbGJhY2suaCIKLSNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdENhbGxiYWNr
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TcGVlY2hTeW50aGVzaXMuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzLmg+CiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5U
SEVTSVMpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdENhbGxiYWNrKiB3cmFw
VGVzdENhbGxiYWNrKFdlYkNvcmU6OlRlc3RDYWxsYmFjayopOwotV2ViS2l0RE9NVGVzdENhbGxi
YWNrKiBraXQoV2ViQ29yZTo6VGVzdENhbGxiYWNrKik7Ci1XZWJDb3JlOjpUZXN0Q2FsbGJhY2sq
IGNvcmUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKik7CitXZWJLaXRET01TcGVlY2hTeW50aGVzaXMq
IHdyYXBTcGVlY2hTeW50aGVzaXMoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzKik7CitXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXMqIGtpdChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXMqKTsKK1dlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpcyogY29yZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXMqKTsKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
ICovCiAKLSNlbmRpZiAvKiBXZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlX2ggKi8KKyNlbmRp
ZiAvKiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE0ZTgzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwCkBAIC0w
LDAgKzEsNDgzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVu
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9p
Y2VQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRV9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lT
X1VUVEVSQU5DRSwgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlUHJpdmF0ZSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUg
eworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpTcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2U+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCit9IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGU7
CisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSoga2l0KFdlYkNvcmU6OlNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZSogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisg
ICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHJldCk7
CisKKyAgICByZXR1cm4gd3JhcFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZShvYmopOworfQorCitX
ZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGNvcmUoV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKj4oV0VCS0lUX0RPTV9PQkpF
Q1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlKiB3cmFwU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKFdlYkNvcmU6OlNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVj
dCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0UoZ19v
YmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRSwgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9kaXNwYXRjaF9ldmVu
dChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdF
cnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNv
cmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICghY29y
ZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7
CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMp
OworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2Ny
aXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9Q
QVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNo
IFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hf
U1lOVEhFU0lTKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhl
c2lzX3V0dGVyYW5jZV9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRh
cmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4g
dXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3Jl
OjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQp
LT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6
YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUs
IGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7
CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1
cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYgRU5BQkxFKFNQRUVDSF9T
WU5USEVTSVMpCisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBjb3JlVGFy
Z2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6
R09iamVjdEV2ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0
KSwgY29yZVRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZl
bnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9kaXNwYXRjaF9ldmVudDsKKyAgICBp
ZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0
dGVyYW5jZV9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyOworfQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2UsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Us
IFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9N
X1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVEVYVCwKKyAgICBQUk9QX0xBTkcsCisgICAgUFJP
UF9WT0lDRSwKKyAgICBQUk9QX1ZPTFVNRSwKKyAgICBQUk9QX1JBVEUsCisgICAgUFJPUF9QSVRD
SCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFu
Y2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNf
VVRURVJBTkNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIHByaXYtPn5X
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlKCk7CisgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdXR0ZXJhbmNlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiA9IFdFQktJVF9ET01fU1BF
RUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJ
ZCkgeworICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfdXR0ZXJhbmNlX3NldF90ZXh0KHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFORzoKKyAgICAgICAgd2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfbGFuZyhzZWxmLCBnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZPTFVNRToKKyAg
ICAgICAgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdm9sdW1lKHNl
bGYsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9SQVRFOgorICAgICAgICB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNl
X3NldF9yYXRlKHNlbGYsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9QSVRDSDoKKyAgICAgICAgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhl
c2lzX3V0dGVyYW5jZV9zZXRfcGl0Y2goc2VsZiwgZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191
dHRlcmFuY2VfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VU
VEVSQU5DRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3RleHQoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfTEFORzoKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfbGFuZyhzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WT0lDRToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dl
dF92b2ljZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WT0xVTUU6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdXR0ZXJhbmNlX2dldF92b2x1bWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfUkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHdlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3JhdGUoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUElUQ0g6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVl
LCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9waXRjaChzZWxmKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhl
c2lzX3V0dGVyYW5jZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykK
K3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdXR0ZXJhbmNlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNv
bnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0VfR0VU
X1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0
KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNv
cmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVl
Y2hfc3ludGhlc2lzX3V0dGVyYW5jZV9jbGFzc19pbml0KFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2VQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfY29uc3RydWN0b3I7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFu
Y2VfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vf
Z2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAg
ICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RFWFQsCisgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoCisgICAgICAgICAgICAidGV4dCIsCisgICAgICAgICAgICAiU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlOnRleHQiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTp0ZXh0IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xBTkcsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAibGFuZyIsCisgICAgICAg
ICAgICAiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOmxhbmciLAorICAgICAgICAgICAgInJlYWQt
d3JpdGUgZ2NoYXIqIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTpsYW5nIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX1ZPSUNFLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAg
InZvaWNlIiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6dm9pY2UiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlOnZvaWNlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQ
RV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVk9MVU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNf
ZmxvYXQoCisgICAgICAgICAgICAidm9sdW1lIiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2U6dm9sdW1lIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdmbG9hdCBTcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2U6dm9sdW1lIiwKKyAgICAgICAgICAgIC1HX01BWEZMT0FULCBH
X01BWEZMT0FULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1JBVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAg
ICAgICAgICJyYXRlIiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6cmF0
ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnZmxvYXQgU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlOnJhdGUiLAorICAgICAgICAgICAgLUdfTUFYRkxPQVQsIEdfTUFYRkxPQVQsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUElU
Q0gsCisgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICJwaXRjaCIsCisg
ICAgICAgICAgICAiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOnBpdGNoIiwKKyAgICAgICAgICAg
ICJyZWFkLXdyaXRlIGdmbG9hdCBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6cGl0Y2giLAorICAg
ICAgICAgICAgLUdfTUFYRkxPQVQsIEdfTUFYRkxPQVQsIDAsCisgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3V0dGVyYW5jZV9pbml0KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRV9HRVRfUFJJ
VkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZVByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNp
c191dHRlcmFuY2VfZ2V0X3RleHQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBz
ZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dGV4dCgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0
dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfdGV4dChXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNp
ZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9T
WU5USEVTSVNfVVRURVJBTkNFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
KyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFRleHQoY29udmVydGVkVmFsdWUpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyNl
bmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9k
b21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X2xhbmcoV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+bGFuZygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5
bnRoZXNpcyIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVT
SVMpICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9z
ZXRfbGFuZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Uq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldExhbmcoY29u
dmVydGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVl
Y2ggU3ludGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30K
KworV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRo
ZXNpc191dHRlcmFuY2VfZ2V0X3ZvaWNlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZT4gZ29iamVjdFJlc3Vs
dCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnZvaWNlKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChn
b2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAg
IHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCit2
b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3ZvaWNlKFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwgV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVm9pY2UqIHZhbHVlKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFKHZhbHVl
KSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBjb252ZXJ0
ZWRWYWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgaXRlbS0+c2V0Vm9pY2UoY29udmVy
dGVkVmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2gg
U3ludGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwor
Z2Zsb2F0IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3ZvbHVtZShX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJ
U19VVFRFUkFOQ0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzdWx0ID0gaXRl
bS0+dm9sdW1lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50
aGVzaXMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnZmxvYXQ+KDApOworI2VuZGlmIC8qIEVO
QUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc191dHRlcmFuY2Vfc2V0X3ZvbHVtZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UqIHNlbGYsIGdmbG9hdCB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJ
UykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYp
KTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Vm9sdW1lKHZhbHVlKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisjZW5kaWYgLyogRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpICovCit9CisKK2dmbG9hdCB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdXR0ZXJhbmNlX2dldF9yYXRlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRShzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdmbG9hdCByZXN1bHQgPSBpdGVtLT5yYXRlKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlNwZWVjaCBTeW50aGVzaXMiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnZmxvYXQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKSAqLworfQor
Cit2b2lkIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3JhdGUoV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBnZmxvYXQgdmFsdWUpCit7Cisj
aWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hf
U1lOVEhFU0lTX1VUVEVSQU5DRShzZWxmKSk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFJhdGUo
dmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3lu
dGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKworZ2Zs
b2F0IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3BpdGNoKFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VU
VEVSQU5DRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCByZXN1bHQgPSBpdGVtLT5w
aXRjaCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxm
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lz
IikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Zsb2F0PigwKTsKKyNlbmRpZiAvKiBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVz
aXNfdXR0ZXJhbmNlX3NldF9waXRjaChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Uq
IHNlbGYsIGdmbG9hdCB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKHNlbGYpKTsKKyAg
ICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0UGl0Y2godmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyNlbmRpZiAvKiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkZTMzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlX2gKKyNkZWZpbmUgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlX2gKKwor
I2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRSAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fU1BFRUNIX1NZTlRIRVNJU19VVFRFUkFOQ0Uob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFLCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9E
T01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRSwgV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1BFRUNIX1NZTlRIRVNJ
U19VVFRFUkFOQ0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVVRURVJBTkNFKSkKKyNkZWZpbmUg
V0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRV9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZ
TlRIRVNJU19VVFRFUkFOQ0UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNf
VVRURVJBTkNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1VUVEVSQU5DRSwgV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5j
ZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xhc3Mg
eworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9n
ZXRfdGV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFu
Y2VfZ2V0X3RleHQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF90ZXh0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICogQHZhbHVl
OiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX3NldF90ZXh0KFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9sYW5n
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICoKKyAq
IFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRf
bGFuZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X2xhbmc6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlCisgKiBAdmFsdWU6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X2xhbmcoV2ViS2l0RE9NU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioK
KyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3ZvaWNlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NU3BlZWNo
U3ludGhlc2lzVm9pY2UqCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dl
dF92b2ljZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3ZvaWNlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICogQHZhbHVlOiBB
ICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0
ZXJhbmNlX3NldF92b2ljZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYs
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0
X2RvbV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfdm9sdW1lOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZQorICoKKyAqIFJldHVybnM6IEEgI2dm
bG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZmxvYXQK
K3dlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3ZvbHVtZShXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3ZvbHVtZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqIEB2YWx1ZTogQSAjZ2Zsb2F0CisgKgor
ICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
c3BlZWNoX3N5bnRoZXNpc191dHRlcmFuY2Vfc2V0X3ZvbHVtZShXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UqIHNlbGYsIGdmbG9hdCB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZV9nZXRfcmF0ZToKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnZmxvYXQK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJr
aXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlX2dldF9yYXRlKFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3V0dGVyYW5jZV9zZXRfcmF0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2UKKyAqIEB2YWx1ZTogQSAjZ2Zsb2F0CisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc191dHRlcmFuY2Vfc2V0X3JhdGUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlKiBzZWxmLCBnZmxvYXQgdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5
bnRoZXNpc191dHRlcmFuY2VfZ2V0X3BpdGNoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZQorICoKKyAqIFJldHVybnM6IEEgI2dmbG9hdAorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc191dHRlcmFuY2VfZ2V0X3BpdGNoKFdlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3V0dGVyYW5jZV9zZXRfcGl0Y2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlCisgKiBAdmFsdWU6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNf
dXR0ZXJhbmNlX3NldF9waXRjaChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHNl
bGYsIGdmbG9hdCB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDU1ZWFjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1NwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZS5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UuaD4KKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHdyYXBTcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2UoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKik7CitX
ZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIGtpdChXZWJDb3JlOjpTcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UqKTsKK1dlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSogY29y
ZShXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqKTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLyogRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpICovCisKKyNlbmRpZiAv
KiBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VQcml2YXRlX2ggKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNW
b2ljZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwNjE3NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwCkBAIC0wLDAgKzEs
MjcyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuaCIKKworI2luY2x1
ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJX
ZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9p
Y2VQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1NQRUVDSF9TWU5USEVTSVNfVk9J
Q0UsIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpCisgICAgUmVmUHRyPFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNl
PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorfSBXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNWb2ljZVByaXZhdGU7CisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlKiBraXQoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UqIG9iaikKK3sKKyAgICBp
ZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9N
T2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9TUEVFQ0hf
U1lOVEhFU0lTX1ZPSUNFKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFNwZWVjaFN5bnRoZXNpc1Zv
aWNlKG9iaik7Cit9CisKK1dlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBjb3JlKFdlYktp
dERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNWb2ljZSogd3JhcFNwZWVjaFN5bnRoZXNpc1ZvaWNlKFdlYkNvcmU6OlNwZWVjaFN5
bnRoZXNpc1ZvaWNlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAg
ICByZXR1cm4gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFKGdfb2JqZWN0X25ldyhX
RUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlLCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2UsIFdF
QktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1ZP
SUNFX1VSSSwKKyAgICBQUk9QX05BTUUsCisgICAgUFJPUF9MQU5HLAorICAgIFBST1BfTE9DQUxf
U0VSVklDRSwKKyAgICBQUk9QX0RFRkFVTFQsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01f
U1BFRUNIX1NZTlRIRVNJU19WT0lDRV9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2
LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykK
KyAgICBwcml2LT5+V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlKCk7CisgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3Bl
ZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZiA9IFdFQktJVF9ET01fU1BFRUNIX1NZTlRI
RVNJU19WT0lDRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2Fz
ZSBQUk9QX1ZPSUNFX1VSSToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Vi
a2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF92b2ljZV91cmkoc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTkFNRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0
cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9uYW1lKHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xBTkc6CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9n
ZXRfbGFuZyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT0NBTF9TRVJW
SUNFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3NwZWVj
aF9zeW50aGVzaXNfdm9pY2VfZ2V0X2xvY2FsX3NlcnZpY2Uoc2VsZikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfREVGQVVMVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9kZWZhdWx0KHNlbGYp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfdm9pY2VfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7
CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3ZvaWNlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVj
dFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFNQRUVD
SF9TWU5USEVTSVMpCisgICAgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFX0dFVF9QUklWQVRFKG9iamVj
dCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNwZWVjaFN5
bnRoZXNpc1ZvaWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7Cisg
ICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9i
amVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisgICAgcmV0dXJuIG9i
amVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNl
X2NsYXNzX2luaXQoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyogcmVxdWVzdENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
cmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNz
LCBzaXplb2YoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlKSk7CisgICAgZ29i
amVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2lj
ZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV9z
cGVlY2hfc3ludGhlc2lzX3ZvaWNlX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9wcm9wZXJ0eTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9WT0lDRV9VUkksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJp
bmcoCisgICAgICAgICAgICAidm9pY2UtdXJpIiwKKyAgICAgICAgICAgICJTcGVlY2hTeW50aGVz
aXNWb2ljZTp2b2ljZS11cmkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogU3BlZWNo
U3ludGhlc2lzVm9pY2U6dm9pY2UtdXJpIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAg
ICJTcGVlY2hTeW50aGVzaXNWb2ljZTpuYW1lIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2No
YXIqIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOm5hbWUiLAorICAgICAgICAgICAgIiIsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQU5HLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxhbmciLAorICAgICAg
ICAgICAgIlNwZWVjaFN5bnRoZXNpc1ZvaWNlOmxhbmciLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnY2hhciogU3BlZWNoU3ludGhlc2lzVm9pY2U6bGFuZyIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xP
Q0FMX1NFUlZJQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAg
ImxvY2FsLXNlcnZpY2UiLAorICAgICAgICAgICAgIlNwZWVjaFN5bnRoZXNpc1ZvaWNlOmxvY2Fs
LXNlcnZpY2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBTcGVlY2hTeW50aGVz
aXNWb2ljZTpsb2NhbC1zZXJ2aWNlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfREVGQVVMVCwKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiZGVmYXVsdCIsCisgICAg
ICAgICAgICAiU3BlZWNoU3ludGhlc2lzVm9pY2U6ZGVmYXVsdCIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGdib29sZWFuIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOmRlZmF1bHQiLAorICAgICAgICAg
ICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfaW5pdChXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNWb2ljZSogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNWb2ljZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NQRUVDSF9TWU5USEVTSVNf
Vk9JQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01TcGVl
Y2hTeW50aGVzaXNWb2ljZVByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3BlZWNo
X3N5bnRoZXNpc192b2ljZV9nZXRfdm9pY2VfdXJpKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1Zv
aWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0Uoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnZvaWNlVVJJKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhlc2lzIikKKyAgICBy
ZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKworZ2No
YXIqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfbmFtZShXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJ
UykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5uYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
ZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTcGVlY2ggU3ludGhl
c2lzIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykg
Ki8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfbGFu
ZyhXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lT
X1ZPSUNFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5sYW5nKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJT
cGVlY2ggU3ludGhlc2lzIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNI
X1NZTlRIRVNJUykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lz
X3ZvaWNlX2dldF9sb2NhbF9zZXJ2aWNlKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBz
ZWxmKQoreworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1NQRUVDSF9TWU5USEVTSVNfVk9JQ0Uoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpTcGVlY2hTeW50aGVzaXNWb2ljZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBpdGVtLT5sb2NhbFNlcnZpY2UoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRoZXNpcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30K
KworZ2Jvb2xlYW4gd2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9kZWZhdWx0
KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NQRUVDSF9TWU5USEVTSVNf
Vk9JQ0Uoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5p
c0RlZmF1bHQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU3BlZWNoIFN5bnRo
ZXNpcyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hT
eW50aGVzaXNWb2ljZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZDdlODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2Vf
aAorI2RlZmluZSBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZV9oCisKKyNpZmRlZiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93
ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSAgICAgICAgICAgICh3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNF
LCBXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSkpCisjZGVmaW5lIFdFQktJVF9ET01fU1BF
RUNIX1NZTlRIRVNJU19WT0lDRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1BFRUNIX1NZTlRIRVNJU19WT0lDRSwgV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19T
UEVFQ0hfU1lOVEhFU0lTX1ZPSUNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9JU19TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TUEVFQ0hf
U1lOVEhFU0lTX1ZPSUNFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TUEVFQ0hfU1lOVEhFU0lTX1ZP
SUNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9TUEVFQ0hfU1lOVEhFU0lTX1ZPSUNFLCBXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNWb2ljZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2lj
ZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0
Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV9z
cGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9k
b21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfdm9pY2VfdXJpOgorICogQHNlbGY6IEEgI1dl
YktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRf
ZG9tX3NwZWVjaF9zeW50aGVzaXNfdm9pY2VfZ2V0X3ZvaWNlX3VyaShXZWJLaXRET01TcGVlY2hT
eW50aGVzaXNWb2ljZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9zcGVlY2hfc3ludGhl
c2lzX3ZvaWNlX2dldF9uYW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVNwZWVjaFN5bnRoZXNp
c1ZvaWNlCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3NwZWVjaF9zeW50aGVzaXNf
dm9pY2VfZ2V0X25hbWUoV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fc3BlZWNoX3N5bnRoZXNpc192b2ljZV9nZXRfbGFuZzoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZQorICoKKyAqIFJldHVybnM6IEEg
I2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFy
Kgord2Via2l0X2RvbV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9sYW5nKFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9z
eW50aGVzaXNfdm9pY2VfZ2V0X2xvY2FsX3NlcnZpY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzVm9pY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Rv
bV9zcGVlY2hfc3ludGhlc2lzX3ZvaWNlX2dldF9sb2NhbF9zZXJ2aWNlKFdlYktpdERPTVNwZWVj
aFN5bnRoZXNpc1ZvaWNlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3NwZWVjaF9zeW50
aGVzaXNfdm9pY2VfZ2V0X2RlZmF1bHQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzVm9pY2UKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV9zcGVlY2hf
c3ludGhlc2lzX3ZvaWNlX2dldF9kZWZhdWx0KFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNl
KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjAyMzk0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1Zv
aWNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2VQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvU3BlZWNoU3ludGhlc2lzVm9pY2UuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NU3BlZWNoU3ludGhlc2lzVm9pY2UuaD4KKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJ
UykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSog
d3JhcFNwZWVjaFN5bnRoZXNpc1ZvaWNlKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKik7
CitXZWJLaXRET01TcGVlY2hTeW50aGVzaXNWb2ljZSoga2l0KFdlYkNvcmU6OlNwZWVjaFN5bnRo
ZXNpc1ZvaWNlKik7CitXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZSogY29yZShXZWJLaXRE
T01TcGVlY2hTeW50aGVzaXNWb2ljZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc1ZvaWNlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TdG9yYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lNjU5YTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlLmNwcApAQCAtMCwwICsx
LDIyMiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0b3JhZ2UuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUv
Q1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUuaCIKKyNpbmNsdWRlICJD
b252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1NUT1JBR0VfR0VUX1BSSVZBVEUo
b2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfU1RP
UkFHRSwgV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01TdG9yYWdlUHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OlN0b3JhZ2U+IGNvcmVPYmpl
Y3Q7Cit9IFdlYktpdERPTVN0b3JhZ2VQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViS2l0RE9NU3RvcmFnZSoga2l0KFdlYkNvcmU6OlN0b3JhZ2UqIG9iaikKK3sKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2Jq
ZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9TVE9SQUdFKHJl
dCk7CisKKyAgICByZXR1cm4gd3JhcFN0b3JhZ2Uob2JqKTsKK30KKworV2ViQ29yZTo6U3RvcmFn
ZSogY29yZShXZWJLaXRET01TdG9yYWdlKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0
ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3RvcmFnZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVl
c3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVN0b3JhZ2UqIHdyYXBTdG9yYWdl
KFdlYkNvcmU6OlN0b3JhZ2UqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3Qp
OworICAgIHJldHVybiBXRUJLSVRfRE9NX1NUT1JBR0UoZ19vYmplY3RfbmV3KFdFQktJVF9ET01f
VFlQRV9TVE9SQUdFLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVN0b3JhZ2Us
IHdlYmtpdF9kb21fc3RvcmFnZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7Cisg
ICAgUFJPUF8wLAorICAgIFBST1BfTEVOR1RILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV9zdG9yYWdlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01TdG9y
YWdlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1RPUkFHRV9HRVRfUFJJVkFURShvYmplY3Qp
OworCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3Qu
Z2V0KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVN0b3JhZ2VQcml2YXRlKCk7CisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zdG9yYWdlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3RvcmFnZV9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01TdG9yYWdlKiBzZWxmID0gV0VCS0lUX0RPTV9T
VE9SQUdFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBS
T1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV9z
dG9yYWdlX2dldF9sZW5ndGgoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IEdPYmplY3QqIHdlYmtpdF9kb21fc3RvcmFnZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3N0b3JhZ2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3Ry
dWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERP
TVN0b3JhZ2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVE9SQUdFX0dFVF9QUklWQVRFKG9i
amVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlN0b3Jh
Z2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3RvcmFnZV9j
bGFzc19pbml0KFdlYktpdERPTVN0b3JhZ2VDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NU3RvcmFnZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Vi
a2l0X2RvbV9zdG9yYWdlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfZG9tX3N0b3JhZ2VfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0xFTkdUSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImxl
bmd0aCIsCisgICAgICAgICAgICAiU3RvcmFnZTpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQt
b25seSBndWxvbmcgU3RvcmFnZTpsZW5ndGgiLAorICAgICAgICAgICAgMCwgR19NQVhVTE9ORywg
MCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fc3RvcmFnZV9pbml0KFdlYktpdERPTVN0b3JhZ2UqIHJlcXVlc3QpCit7
CisgICAgV2ViS2l0RE9NU3RvcmFnZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NUT1JBR0Vf
R0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01TdG9yYWdlUHJp
dmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV9zdG9yYWdlX2tleShXZWJLaXRET01TdG9y
YWdlKiBzZWxmLCBndWxvbmcgaW5kZXgsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1NUT1JBR0Uoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpTdG9yYWdlKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmtleShpbmRleCwgZWMp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9zdG9yYWdlX2dl
dF9pdGVtKFdlYktpdERPTVN0b3JhZ2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBrZXksIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUT1JBR0Uoc2VsZiksIDApOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGtleSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlN0b3JhZ2UqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkS2V5ID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KGtleSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0SXRlbShj
b252ZXJ0ZWRLZXksIGVjKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRf
ZG9tX3N0b3JhZ2Vfc2V0X2l0ZW0oV2ViS2l0RE9NU3RvcmFnZSogc2VsZiwgY29uc3QgZ2NoYXIq
IGtleSwgY29uc3QgZ2NoYXIqIGRhdGEsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfU1RPUkFHRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChrZXkpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoZGF0YSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghZXJyb3IgfHwg
ISplcnJvcik7CisgICAgV2ViQ29yZTo6U3RvcmFnZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRLZXkgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
a2V5KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWREYXRhID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KGRhdGEpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0t
PnNldEl0ZW0oY29udmVydGVkS2V5LCBjb252ZXJ0ZWREYXRhLCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2b2lk
IHdlYmtpdF9kb21fc3RvcmFnZV9yZW1vdmVfaXRlbShXZWJLaXRET01TdG9yYWdlKiBzZWxmLCBj
b25zdCBnY2hhcioga2V5LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1NUT1JBR0Uoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoa2V5KTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpTdG9yYWdlKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZEtleSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChrZXkpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPnJlbW92ZUl0ZW0oY29udmVydGVkS2V5LCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCit2
b2lkIHdlYmtpdF9kb21fc3RvcmFnZV9jbGVhcihXZWJLaXRET01TdG9yYWdlKiBzZWxmLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUT1JBR0Uoc2VsZikpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlN0b3Jh
Z2UqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgaXRlbS0+Y2xlYXIoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ3Vsb25nIHdlYmtpdF9k
b21fc3RvcmFnZV9nZXRfbGVuZ3RoKFdlYktpdERPTVN0b3JhZ2UqIHNlbGYsIEdFcnJvcioqIGVy
cm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUT1JBR0Uoc2VsZiksIDApOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3Jl
OjpTdG9yYWdlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoZWMpOwor
ICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2UuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NU3RvcmFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWYx
MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2UuaApAQCAtMCwwICsxLDEyNCBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01TdG9yYWdl
X2gKKyNkZWZpbmUgV2ViS2l0RE9NU3RvcmFnZV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfU1RPUkFHRSAgICAgICAgICAgICh3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9TVE9SQUdFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TVE9SQUdFLCBXZWJLaXRET01TdG9y
YWdlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVE9SQUdFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9TVE9SQUdFLCBXZWJL
aXRET01TdG9yYWdlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1RPUkFHRShvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
U1RPUkFHRSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1RPUkFHRV9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1RPUkFHRSkp
CisjZGVmaW5lIFdFQktJVF9ET01fU1RPUkFHRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfU1RPUkFHRSwgV2ViS2l0RE9N
U3RvcmFnZUNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01TdG9yYWdlIHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01TdG9yYWdl
Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fc3RvcmFnZV9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3N0b3JhZ2Vfa2V5OgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0b3Jh
Z2UKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1
cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBnY2hhcioKK3dlYmtpdF9kb21fc3RvcmFnZV9rZXkoV2ViS2l0RE9NU3RvcmFnZSogc2VsZiwg
Z3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9zdG9y
YWdlX2dldF9pdGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0b3JhZ2UKKyAqIEBrZXk6IEEg
I2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fc3RvcmFnZV9nZXRfaXRlbShXZWJLaXRET01TdG9yYWdlKiBzZWxmLCBjb25zdCBnY2hhciog
a2V5LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV9zdG9yYWdlX3NldF9p
dGVtOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0b3JhZ2UKKyAqIEBrZXk6IEEgI2djaGFyCisg
KiBAZGF0YTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTog
VW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3N0b3JhZ2Vfc2V0X2l0
ZW0oV2ViS2l0RE9NU3RvcmFnZSogc2VsZiwgY29uc3QgZ2NoYXIqIGtleSwgY29uc3QgZ2NoYXIq
IGRhdGEsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0b3JhZ2VfcmVt
b3ZlX2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3RvcmFnZQorICogQGtleTogQSAjZ2No
YXIKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3N0b3JhZ2VfcmVtb3ZlX2l0ZW0oV2ViS2l0RE9N
U3RvcmFnZSogc2VsZiwgY29uc3QgZ2NoYXIqIGtleSwgR0Vycm9yKiogZXJyb3IpOworCisvKioK
KyAqIHdlYmtpdF9kb21fc3RvcmFnZV9jbGVhcjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdG9y
YWdlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV9zdG9yYWdlX2NsZWFyKFdlYktpdERPTVN0b3Jh
Z2UqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0b3JhZ2Vf
Z2V0X2xlbmd0aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdG9yYWdlCisgKiBAZXJyb3I6ICNH
RXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3Rh
YmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3N0b3JhZ2VfZ2V0X2xlbmd0
aChXZWJLaXRET01TdG9yYWdlKiBzZWxmLCBHRXJyb3IqKiBlcnJvcik7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBX
ZWJLaXRET01TdG9yYWdlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZUluZm8uY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01TdG9yYWdlSW5mby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTBjYTBiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZUluZm8uY3BwCkBAIC0wLDAg
KzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWls
ZCBzY3JpcHRzIHRoYXQgV2ViS2l0RE9NU3RvcmFnZUluZm8uaCBhbmQKKyAgICBXZWJLaXRET01T
dG9yYWdlSW5mby5jcHAgYXJlIGNyZWF0ZWQgZm9yIFN0b3JhZ2VJbmZvLmlkbCwgYW5kIHRodXMK
KyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIFdl
YktpdERPTVN0b3JhZ2VJbmZvLmggYW5kCisgICAgV2ViS2l0RE9NU3RvcmFnZUluZm8uY3BwIGF0
IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VJbmZvLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjYTBiOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00v
V2ViS2l0RE9NU3RvcmFnZUluZm8uaApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxl
IGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTVN0
b3JhZ2VJbmZvLmggYW5kCisgICAgV2ViS2l0RE9NU3RvcmFnZUluZm8uY3BwIGFyZSBjcmVhdGVk
IGZvciBTdG9yYWdlSW5mby5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2Ny
aXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01TdG9yYWdlSW5mby5oIGFuZAor
ICAgIFdlYktpdERPTVN0b3JhZ2VJbmZvLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11
c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdl
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjFjMmJmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VQcml2
YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXRET01TdG9yYWdlUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVN0b3Jh
Z2VQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmFnZS5oPgorI2luY2x1ZGUgPHdl
YmtpdGRvbS9XZWJLaXRET01TdG9yYWdlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0
RE9NU3RvcmFnZSogd3JhcFN0b3JhZ2UoV2ViQ29yZTo6U3RvcmFnZSopOworV2ViS2l0RE9NU3Rv
cmFnZSoga2l0KFdlYkNvcmU6OlN0b3JhZ2UqKTsKK1dlYkNvcmU6OlN0b3JhZ2UqIGNvcmUoV2Vi
S2l0RE9NU3RvcmFnZSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJL
aXRET01TdG9yYWdlUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VRdW90YS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVN0b3JhZ2VRdW90YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2RiNTYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3RvcmFnZVF1b3RhLmNwcApA
QCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRl
bGwgYnVpbGQgc2NyaXB0cyB0aGF0IFdlYktpdERPTVN0b3JhZ2VRdW90YS5oIGFuZAorICAgIFdl
YktpdERPTVN0b3JhZ2VRdW90YS5jcHAgYXJlIGNyZWF0ZWQgZm9yIFN0b3JhZ2VRdW90YS5pZGws
IGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBn
ZW5lcmF0ZSBXZWJLaXRET01TdG9yYWdlUXVvdGEuaCBhbmQKKyAgICBXZWJLaXRET01TdG9yYWdl
UXVvdGEuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8g
Y29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0b3JhZ2VRdW90YS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9y
YWdlUXVvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGI1NjIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdG9yYWdlUXVvdGEuaApAQCAtMCwwICsxLDYgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0
aGF0IFdlYktpdERPTVN0b3JhZ2VRdW90YS5oIGFuZAorICAgIFdlYktpdERPTVN0b3JhZ2VRdW90
YS5jcHAgYXJlIGNyZWF0ZWQgZm9yIFN0b3JhZ2VRdW90YS5pZGwsIGFuZCB0aHVzCisgICAgcHJl
dmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBXZWJLaXRET01T
dG9yYWdlUXVvdGEuaCBhbmQKKyAgICBXZWJLaXRET01TdG9yYWdlUXVvdGEuY3BwIGF0IGV2ZXJ5
IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVN0eWxlTWVkaWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZU1lZGlhLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU0MTFmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01TdHlsZU1lZGlhLmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0
eWxlTWVkaWEuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NU3R5bGVNZWRpYVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2Rl
ZmluZSBXRUJLSVRfRE9NX1NUWUxFX01FRElBX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX01FRElBLCBXZWJLaXRE
T01TdHlsZU1lZGlhUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxlTWVk
aWFQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3R5bGVNZWRpYT4gY29yZU9iamVjdDsK
K30gV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01TdHlsZU1lZGlhKiBraXQoV2ViQ29yZTo6U3R5bGVNZWRpYSogb2JqKQoreworICAg
IGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBE
T01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1NUWUxF
X01FRElBKHJldCk7CisKKyAgICByZXR1cm4gd3JhcFN0eWxlTWVkaWEob2JqKTsKK30KKworV2Vi
Q29yZTo6U3R5bGVNZWRpYSogY29yZShXZWJLaXRET01TdHlsZU1lZGlhKiByZXF1ZXN0KQorewor
ICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3R5bGVNZWRpYSo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TVN0eWxlTWVkaWEqIHdyYXBTdHlsZU1lZGlhKFdlYkNvcmU6OlN0eWxlTWVkaWEqIGNvcmVPYmpl
Y3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1NU
WUxFX01FRElBKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfU1RZTEVfTUVESUEsICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NU3R5bGVNZWRpYSwgd2Via2l0X2RvbV9zdHls
ZV9tZWRpYSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfVFlQRSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVfbWVkaWFf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVN0eWxlTWVkaWFQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlMRV9NRURJQV9HRVRfUFJJVkFURShvYmplY3QpOwor
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVN0eWxlTWVkaWFQcml2YXRlKCk7CisgICAgR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zdHlsZV9tZWRpYV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0eWxlX21lZGlhX2dldF9w
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVN0eWxlTWVkaWEqIHNlbGYgPSBX
RUJLSVRfRE9NX1NUWUxFX01FRElBKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQp
IHsKKyAgICBjYXNlIFBST1BfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9nZXRfbWVkaWFfdHlwZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9jb25zdHJ1Y3Rv
cihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25z
dHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3Qg
PSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3N0eWxlX21lZGlhX3BhcmVudF9jbGFzcyktPmNv
bnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVy
dGllcyk7CisKKyAgICBXZWJLaXRET01TdHlsZU1lZGlhUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fU1RZTEVfTUVESUFfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3R5bGVNZWRpYSo+KFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2
LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9jbGFzc19pbml0KFdlYktpdERPTVN0
eWxlTWVkaWFDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZh
dGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV9zdHlsZV9t
ZWRpYV9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rv
bV9zdHlsZV9tZWRpYV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIs
CisgICAgICAgICAgICAiU3R5bGVNZWRpYTp0eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2NoYXIqIFN0eWxlTWVkaWE6dHlwZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5
bGVfbWVkaWFfaW5pdChXZWJLaXRET01TdHlsZU1lZGlhKiByZXF1ZXN0KQoreworICAgIFdlYktp
dERPTVN0eWxlTWVkaWFQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlMRV9NRURJQV9HRVRf
UFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVN0eWxlTWVkaWFQcml2
YXRlKCk7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fc3R5bGVfbWVkaWFfbWF0Y2hfbWVkaXVt
KFdlYktpdERPTVN0eWxlTWVkaWEqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZWRpYXF1ZXJ5KQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX01FRElBKHNlbGYpLCBGQUxTRSk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwobWVkaWFxdWVyeSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlN0
eWxlTWVkaWEqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkTWVkaWFxdWVyeSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZWRpYXF1ZXJ5KTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5tYXRjaE1lZGl1bShjb252ZXJ0ZWRNZWRpYXF1ZXJ5
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9zdHlsZV9tZWRp
YV9nZXRfbWVkaWFfdHlwZShXZWJLaXRET01TdHlsZU1lZGlhKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1NUWUxFX01FRElBKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTdHls
ZU1lZGlhKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnR5cGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZU1lZGlhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlTWVkaWEuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2E3YjM1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01TdHlsZU1lZGlhLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01TdHlsZU1lZGlhX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NU3R5bGVNZWRpYV9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxl
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfTUVE
SUEgICAgICAgICAgICAod2Via2l0X2RvbV9zdHlsZV9tZWRpYV9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1NUWUxFX01FRElBKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TVFlMRV9NRURJQSwgV2ViS2l0RE9N
U3R5bGVNZWRpYSkpCisjZGVmaW5lIFdFQktJVF9ET01fU1RZTEVfTUVESUFfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NU
WUxFX01FRElBLCBXZWJLaXRET01TdHlsZU1lZGlhQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfU1RZTEVfTUVESUEob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX01FRElBKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9J
U19TVFlMRV9NRURJQV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfTUVESUEpKQorI2RlZmluZSBXRUJLSVRfRE9NX1NU
WUxFX01FRElBX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9NRURJQSwgV2ViS2l0RE9NU3R5bGVNZWRpYUNsYXNz
KSkKKworc3RydWN0IF9XZWJLaXRET01TdHlsZU1lZGlhIHsKKyAgICBXZWJLaXRET01PYmplY3Qg
cGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01TdHlsZU1lZGlhQ2xhc3Mg
eworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9kb21fc3R5bGVfbWVkaWFfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV9zdHlsZV9tZWRpYV9tYXRjaF9tZWRpdW06CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NU3R5bGVNZWRpYQorICogQG1lZGlhcXVlcnk6IEEgI2djaGFyCisgKgorICogUmV0dXJu
czogQSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF9kb21fc3R5bGVfbWVkaWFfbWF0Y2hfbWVkaXVtKFdlYktpdERP
TVN0eWxlTWVkaWEqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZWRpYXF1ZXJ5KTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3N0eWxlX21lZGlhX2dldF9tZWRpYV90eXBlOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVN0eWxlTWVkaWEKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fc3R5bGVfbWVk
aWFfZ2V0X21lZGlhX3R5cGUoV2ViS2l0RE9NU3R5bGVNZWRpYSogc2VsZik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAv
KiBXZWJLaXRET01TdHlsZU1lZGlhX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVNZWRpYVBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4wOTRiYzI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZU1lZGlh
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
T01TdHlsZU1lZGlhUHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1N0eWxlTWVkaWEuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NU3R5bGVNZWRpYS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1dlYktpdERPTVN0eWxlTWVkaWEqIHdyYXBTdHlsZU1lZGlhKFdlYkNvcmU6OlN0
eWxlTWVkaWEqKTsKK1dlYktpdERPTVN0eWxlTWVkaWEqIGtpdChXZWJDb3JlOjpTdHlsZU1lZGlh
Kik7CitXZWJDb3JlOjpTdHlsZU1lZGlhKiBjb3JlKFdlYktpdERPTVN0eWxlTWVkaWEqKTsKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NU3R5bGVNZWRpYVByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVl
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZDBlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldC5jcHAKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisg
KiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01TdHlsZVNoZWV0LmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1
bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NTWVkaWFMaXN0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlLmgiCisj
aW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9TVFlMRV9TSEVF
VF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJ
VF9ET01fVFlQRV9TVFlMRV9TSEVFVCwgV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlN0eWxlU2hlZXQ+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVN0eWxlU2hlZXRQcml2
YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NU3R5bGVTaGVldCoga2l0KFdl
YkNvcmU6OlN0eWxlU2hlZXQqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQor
ICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVChyZXQpOworCisgICAgcmV0dXJu
IHdyYXAob2JqKTsKK30KKworV2ViQ29yZTo6U3R5bGVTaGVldCogY29yZShXZWJLaXRET01TdHls
ZVNoZWV0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6U3R5bGVTaGVldCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KSA6IDA7Cit9CisKK1dlYktpdERPTVN0eWxlU2hlZXQqIHdyYXBTdHlsZVNoZWV0KFdlYkNvcmU6
OlN0eWxlU2hlZXQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfU1RZTEVfU0hFRVQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NU3R5bGVT
aGVldCwgd2Via2l0X2RvbV9zdHlsZV9zaGVldCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKwor
ZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfVFlQRSwKKyAgICBQUk9QX0RJU0FCTEVELAor
ICAgIFBST1BfT1dORVJfTk9ERSwKKyAgICBQUk9QX1BBUkVOVF9TVFlMRV9TSEVFVCwKKyAgICBQ
Uk9QX0hSRUYsCisgICAgUFJPUF9USVRMRSwKKyAgICBQUk9QX01FRElBLAorfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NUWUxF
X1NIRUVUX0dFVF9QUklWQVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
Ojpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9N
U3R5bGVTaGVldFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3N0eWxl
X3NoZWV0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZiA9IFdFQktJVF9ET01fU1RZTEVfU0hFRVQo
b2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ESVNB
QkxFRDoKKyAgICAgICAgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9zZXRfZGlzYWJsZWQoc2VsZiwg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
ZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVChvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RZUEU6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0
X2NvbnRlbnRfdHlwZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNB
QkxFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV9zdHls
ZV9zaGVldF9nZXRfZGlzYWJsZWQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfT1dORVJfTk9ERToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRf
ZG9tX3N0eWxlX3NoZWV0X2dldF9vd25lcl9ub2RlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX1BBUkVOVF9TVFlMRV9TSEVFVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9wYXJlbnRfc3R5bGVfc2hlZXQo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSFJFRjoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfaHJlZihz
ZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9USVRMRToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfdGl0bGUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVESUE6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfbWVkaWEo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fc3R5bGVf
c2hlZXRfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0Nv
dW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAg
R09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zdHlsZV9zaGVldF9w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IGNvbnN0cnVjdFByb3BlcnRpZXMpOworCisgICAgV2ViS2l0RE9NU3R5bGVTaGVldFByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAg
cHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlN0eWxlU2hlZXQqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVy
biBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfY2xhc3Nf
aW5pdChXZWJLaXRET01TdHlsZVNoZWV0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Cisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERP
TVN0eWxlU2hlZXRQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdl
YmtpdF9kb21fc3R5bGVfc2hlZXRfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNz
LT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X3NldF9wcm9wZXJ0eTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0
X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RZUEUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAidHlwZSIsCisgICAgICAgICAgICAiU3R5bGVTaGVldDp0
eXBlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFN0eWxlU2hlZXQ6dHlwZSIsCisg
ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX0RJU0FCTEVELAorICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigK
KyAgICAgICAgICAgICJkaXNhYmxlZCIsCisgICAgICAgICAgICAiU3R5bGVTaGVldDpkaXNhYmxl
ZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnYm9vbGVhbiBTdHlsZVNoZWV0OmRpc2FibGVk
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX09XTkVSX05PREUsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAib3duZXItbm9kZSIsCisgICAgICAgICAgICAiU3R5bGVT
aGVldDpvd25lci1ub2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSog
U3R5bGVTaGVldDpvd25lci1ub2RlIiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfUEFSRU5UX1NUWUxFX1NIRUVULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgInBhcmVudC1zdHlsZS1zaGVldCIsCisgICAgICAgICAgICAiU3R5bGVTaGVldDpw
YXJlbnQtc3R5bGUtc2hlZXQiLAorICAgICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01TdHls
ZVNoZWV0KiBTdHlsZVNoZWV0OnBhcmVudC1zdHlsZS1zaGVldCIsCisgICAgICAgICAgICBXRUJL
SVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9IUkVGLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImhyZWYiLAorICAgICAgICAgICAgIlN0eWxlU2hlZXQ6aHJlZiIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBTdHlsZVNoZWV0OmhyZWYiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9USVRMRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAg
ICAgICJ0aXRsZSIsCisgICAgICAgICAgICAiU3R5bGVTaGVldDp0aXRsZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGdjaGFyKiBTdHlsZVNoZWV0OnRpdGxlIiwKKyAgICAgICAgICAgICIiLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
TUVESUEsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibWVkaWEi
LAorICAgICAgICAgICAgIlN0eWxlU2hlZXQ6bWVkaWEiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBXZWJLaXRET01NZWRpYUxpc3QqIFN0eWxlU2hlZXQ6bWVkaWEiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX01FRElBX0xJU1QsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2luaXQoV2Vi
S2l0RE9NU3R5bGVTaGVldCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01TdHlsZVNoZWV0UHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9ET01fU1RZTEVfU0hFRVRfR0VUX1BSSVZBVEUocmVxdWVzdCk7
CisgICAgbmV3IChwcml2KSBXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZSgpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfY29udGVudF90eXBlKFdlYktpdERPTVN0eWxl
U2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RZTEVfU0hFRVQoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+dHlwZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3N0eWxlX3No
ZWV0X2dldF9kaXNhYmxlZChXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6
U3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1
bHQgPSBpdGVtLT5kaXNhYmxlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgd2Vi
a2l0X2RvbV9zdHlsZV9zaGVldF9zZXRfZGlzYWJsZWQoV2ViS2l0RE9NU3R5bGVTaGVldCogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVChz
ZWxmKSk7CisgICAgV2ViQ29yZTo6U3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT5zZXREaXNhYmxlZCh2YWx1ZSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdl
YmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X293bmVyX25vZGUoV2ViS2l0RE9NU3R5bGVTaGVldCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVChzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6U3R5bGVTaGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0t
Pm93bmVyTm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQo
KSk7Cit9CisKK1dlYktpdERPTVN0eWxlU2hlZXQqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0
X3BhcmVudF9zdHlsZV9zaGVldChXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpT
dHlsZVNoZWV0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpTdHlsZVNoZWV0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cGFyZW50U3R5
bGVTaGVldCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7
Cit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9ocmVmKFdlYktpdERPTVN0
eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RZTEVfU0hFRVQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlU2hlZXQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+aHJl
ZigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnY2hhciogd2Via2l0X2RvbV9zdHlsZV9z
aGVldF9nZXRfdGl0bGUoV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZikKK3sKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6U3R5bGVT
aGVldCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT50aXRsZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXZWJLaXRET01NZWRpYUxpc3QqIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X21lZGlhKFdl
YktpdERPTVN0eWxlU2hlZXQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfU1RZ
TEVfU0hFRVQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlN0eWxlU2hlZXQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhTGlzdD4gZ29iamVjdFJl
c3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1lZGlhKCkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVN0eWxlU2hlZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45MjdmNzkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0LmgKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJy
b3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVN0eWxlU2hlZXRfaAorI2RlZmluZSBXZWJL
aXRET01TdHlsZVNoZWV0X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVf
U1RZTEVfU0hFRVQgICAgICAgICAgICAod2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVCwg
V2ViS2l0RE9NU3R5bGVTaGVldCkpCisjZGVmaW5lIFdFQktJVF9ET01fU1RZTEVfU0hFRVRfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RP
TV9UWVBFX1NUWUxFX1NIRUVULCBXZWJLaXRET01TdHlsZVNoZWV0Q2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfU1RZTEVfU0hFRVQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVUKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9JU19TVFlMRV9TSEVFVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVQpKQorI2RlZmluZSBXRUJL
SVRfRE9NX1NUWUxFX1NIRUVUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVCwgV2ViS2l0RE9NU3R5bGVT
aGVldENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01TdHlsZVNoZWV0IHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01TdHlsZVNo
ZWV0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3R5cGUodm9pZCk7
CisKKy8qKgorICogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfY29udGVudF90eXBlOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVN0eWxlU2hlZXQKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfY29udGVu
dF90eXBlKFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
c3R5bGVfc2hlZXRfZ2V0X2Rpc2FibGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVN0eWxlU2hl
ZXQKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9kaXNhYmxlZChXZWJLaXRET01TdHlsZVNoZWV0
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X3NldF9kaXNhYmxlZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0CisgKiBAdmFsdWU6IEEgI2dib29sZWFu
CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfc2V0X2Rp
c2FibGVkKFdlYktpdERPTVN0eWxlU2hlZXQqIHNlbGYsIGdib29sZWFuIHZhbHVlKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9vd25lcl9ub2RlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVN0eWxlU2hlZXQKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEg
I1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2Rv
bV9zdHlsZV9zaGVldF9nZXRfb3duZXJfbm9kZShXZWJLaXRET01TdHlsZVNoZWV0KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9wYXJlbnRfc3R5bGVfc2hlZXQ6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NU3R5bGVTaGVldAorKiovCitXRUJLSVRfQVBJIFdlYktp
dERPTVN0eWxlU2hlZXQqCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9wYXJlbnRfc3R5bGVf
c2hlZXQoV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV9z
dHlsZV9zaGVldF9nZXRfaHJlZjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0Cisg
KgorICogUmV0dXJuczogQSAjZ2NoYXIKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9k
b21fc3R5bGVfc2hlZXRfZ2V0X2hyZWYoV2ViS2l0RE9NU3R5bGVTaGVldCogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9nZXRfdGl0bGU6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NU3R5bGVTaGVldAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJVF9B
UEkgZ2NoYXIqCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF90aXRsZShXZWJLaXRET01TdHls
ZVNoZWV0KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9tZWRp
YToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01NZWRpYUxpc3QKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01NZWRpYUxpc3QqCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9tZWRpYShXZWJLaXRE
T01TdHlsZVNoZWV0KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERP
TVN0eWxlU2hlZXRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVN0eWxlU2hlZXRMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41NTY2YjBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5jcHAKQEAg
LTAsMCArMSwxNTQgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHlsZVNoZWV0TGlzdC5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHlsZVNoZWV0TGlzdFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fU1RZTEVfU0hFRVRfTElT
VF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJ
VF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNULCBXZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZh
dGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUgewor
ICAgIFJlZlB0cjxXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdD4gY29yZU9iamVjdDsKK30gV2ViS2l0
RE9NU3R5bGVTaGVldExpc3RQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NU3R5bGVTaGVldExpc3QqIGtpdChXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCogb2JqKQorewor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1NU
WUxFX1NIRUVUX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwU3R5bGVTaGVldExpc3Qob2Jq
KTsKK30KKworV2ViQ29yZTo6U3R5bGVTaGVldExpc3QqIGNvcmUoV2ViS2l0RE9NU3R5bGVTaGVl
dExpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpTdHlsZVNoZWV0TGlzdCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVN0eWxlU2hlZXRMaXN0KiB3cmFwU3R5bGVTaGVldExp
c3QoV2ViQ29yZTo6U3R5bGVTaGVldExpc3QqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNv
cmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJU1QoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNULCAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RF
RklORV9UWVBFKFdlYktpdERPTVN0eWxlU2hlZXRMaXN0LCB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0
X2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRf
bGlzdF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NU3R5bGVTaGVl
dExpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9TVFlMRV9TSEVFVF9MSVNUX0dFVF9QUklW
QVRFKG9iamVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NU3R5bGVTaGVldExpc3RQ
cml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fc3R5bGVfc2hlZXRfbGlzdF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01TdHlsZVNoZWV0TGlzdCogc2VsZiA9IFdFQktJVF9ET01fU1RZTEVfU0hFRVRfTElT
VChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0xF
TkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fc3R5bGVf
c2hlZXRfbGlzdF9nZXRfbGVuZ3RoKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2Jq
ZWN0KiB3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwg
Z3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNv
bnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9y
KHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisK
KyAgICBXZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1NU
WUxFX1NIRUVUX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3R5bGVTaGVldExpc3QqPihXRUJLSVRfRE9NX09CSkVD
VChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQo
cHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9jbGFzc19pbml0KFdl
YktpdERPTVN0eWxlU2hlZXRMaXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVN0
eWxlU2hlZXRMaXN0UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3
ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9maW5hbGl6ZTsKKyAgICBn
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9n
ZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJTdHlsZVNo
ZWV0TGlzdDpsZW5ndGgiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgU3R5bGVTaGVl
dExpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3N0eWxlX3NoZWV0X2xpc3RfaW5pdChXZWJLaXRET01TdHlsZVNoZWV0TGlzdCogcmVxdWVzdCkK
K3sKKyAgICBXZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9N
X1NUWUxFX1NIRUVUX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NU3R5bGVTaGVl
dCogd2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2l0ZW0oV2ViS2l0RE9NU3R5bGVTaGVldExp
c3QqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlM
RV9TSEVFVF9MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U3R5bGVTaGVldD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2d1bG9uZyB3ZWJraXRf
ZG9tX3N0eWxlX3NoZWV0X2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01TdHlsZVNoZWV0TGlzdCog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19TVFlMRV9TSEVFVF9MSVNUKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpTdHlsZVNoZWV0TGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHls
ZVNoZWV0TGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzY3MTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0LmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
RE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25s
eSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2Vu
ZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NU3R5bGVTaGVldExpc3RfaAorI2RlZmluZSBXZWJLaXRE
T01TdHlsZVNoZWV0TGlzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBF
X1NUWUxFX1NIRUVUX0xJU1QgICAgICAgICAgICAod2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fU1RZTEVfU0hFRVRfTElTVChvYmopICAg
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZ
UEVfU1RZTEVfU0hFRVRfTElTVCwgV2ViS2l0RE9NU3R5bGVTaGVldExpc3QpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1NUWUxFX1NIRUVUX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVUX0xJU1QsIFdl
YktpdERPTVN0eWxlU2hlZXRMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfU1RZTEVf
U0hFRVRfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVRfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfU1RZTEVfU0hFRVRfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVRfTElTVCkpCisjZGVmaW5lIFdF
QktJVF9ET01fU1RZTEVfU0hFRVRfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfU1RZTEVfU0hFRVRfTElTVCwgV2Vi
S2l0RE9NU3R5bGVTaGVldExpc3RDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NU3R5bGVTaGVl
dExpc3QgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTVN0eWxlU2hlZXRMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fc3R5
bGVfc2hlZXRfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3N0eWxl
X3NoZWV0X2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01TdHlsZVNoZWV0TGlzdAor
ICogQGluZGV4OiBBICNndWxvbmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTVN0eWxlU2hlZXQKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01TdHlsZVNoZWV0
Kgord2Via2l0X2RvbV9zdHlsZV9zaGVldF9saXN0X2l0ZW0oV2ViS2l0RE9NU3R5bGVTaGVldExp
c3QqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV9zdHlsZV9zaGVl
dF9saXN0X2dldF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NU3R5bGVTaGVldExpc3QK
KyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtp
dF9kb21fc3R5bGVfc2hlZXRfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTVN0eWxlU2hlZXRMaXN0
KiBzZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVN0eWxlU2hlZXRM
aXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NU3R5bGVTaGVldExpc3RQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVN0eWxlU2hlZXRMaXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmEwZGJiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVN0eWxlU2hlZXRMaXN0UHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RE9NU3R5bGVTaGVldExpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9N
U3R5bGVTaGVldExpc3RQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvU3R5bGVTaGVldExp
c3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NU3R5bGVTaGVldExpc3QuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01TdHlsZVNoZWV0TGlzdCogd3JhcFN0eWxlU2hl
ZXRMaXN0KFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0Kik7CitXZWJLaXRET01TdHlsZVNoZWV0TGlz
dCoga2l0KFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0Kik7CitXZWJDb3JlOjpTdHlsZVNoZWV0TGlz
dCogY29yZShXZWJLaXRET01TdHlsZVNoZWV0TGlzdCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvKiBXZWJLaXRET01TdHlsZVNoZWV0TGlzdFByaXZhdGVfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmIyMzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01TdHlsZVNoZWV0UHJp
dmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVN0eWxlU2hlZXRQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvU3R5bGVTaGVldC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TdHls
ZVNoZWV0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NU3R5bGVTaGVldCogd3Jh
cFN0eWxlU2hlZXQoV2ViQ29yZTo6U3R5bGVTaGVldCopOworV2ViS2l0RE9NU3R5bGVTaGVldCog
a2l0KFdlYkNvcmU6OlN0eWxlU2hlZXQqKTsKK1dlYkNvcmU6OlN0eWxlU2hlZXQqIGNvcmUoV2Vi
S2l0RE9NU3R5bGVTaGVldCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBX
ZWJLaXRET01TdHlsZVNoZWV0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDcy
OTY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0LmNwcApAQCAtMCwwICsxLDE2MSBAQAor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVRleHQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50
TGlzdGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFByaXZhdGUuaCIK
KyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTVRleHQqIGtpdChXZWJDb3JlOjpUZXh0KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fVEVYVChraXQoc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZSo+KG9iaikpKTsKK30KKworV2Vi
Q29yZTo6VGV4dCogY29yZShXZWJLaXRET01UZXh0KiByZXF1ZXN0KQoreworICAgIHJldHVybiBy
ZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dCo+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRleHQqIHdyYXBUZXh0KFdl
YkNvcmU6OlRleHQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX1RFWFQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVhU
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X2Rpc3BhdGNoX2V2
ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktp
dDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBXZWJDb3JlOjpUZXh0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
VGV4dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRh
cmdldC0+ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1l
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9kb21fdGV4dF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdl
dCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNl
Q2FwdHVyZSkKK3sKKyAgICBXZWJDb3JlOjpUZXh0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGV4dCo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOwor
ICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVy
KEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2Fw
dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfcmVtb3ZlX2V2ZW50
X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisgICAgV2Vi
Q29yZTo6VGV4dCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHQqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0
SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21f
dGV4dF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Vi
a2l0X2RvbV90ZXh0X2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50
X2xpc3RlbmVyID0gd2Via2l0X2RvbV90ZXh0X3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKwor
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVGV4dCwgd2Via2l0X2RvbV90ZXh0LCBX
RUJLSVRfRE9NX1RZUEVfQ0hBUkFDVEVSX0RBVEEsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJL
SVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfV0hPTEVfVEVYVCwKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGV4dF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBX
ZWJLaXRET01UZXh0KiBzZWxmID0gV0VCS0lUX0RPTV9URVhUKG9iamVjdCk7CisKKyAgICBzd2l0
Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfV0hPTEVfVEVYVDoKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X2dldF93aG9sZV90ZXh0KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF9jbGFzc19p
bml0KFdlYktpdERPTVRleHRDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGV4dF9nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfV0hPTEVfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygKKyAgICAgICAgICAgICJ3aG9sZS10ZXh0IiwKKyAgICAgICAgICAgICJUZXh0Ondob2xlLXRl
eHQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGV4dDp3aG9sZS10ZXh0IiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X2luaXQoV2ViS2l0RE9NVGV4dCogcmVxdWVz
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisKK1dlYktpdERPTVRleHQqIHdl
YmtpdF9kb21fdGV4dF9zcGxpdF90ZXh0KFdlYktpdERPTVRleHQqIHNlbGYsIGd1bG9uZyBvZmZz
ZXQsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFQoc2Vs
ZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsK
KyAgICBXZWJDb3JlOjpUZXh0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0PiBnb2Jq
ZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+c3BsaXRUZXh0KG9mZnNldCwgZWMpKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hh
ciogd2Via2l0X2RvbV90ZXh0X2dldF93aG9sZV90ZXh0KFdlYktpdERPTVRleHQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
VGV4dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT53aG9sZVRleHQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjc0MjEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01U
ZXh0LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJVSUxESU5H
X1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NVGV4dF9oCisjZGVm
aW5lIFdlYktpdERPTVRleHRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfVEVYVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3RleHRfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9URVhUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVhULCBXZWJLaXRET01UZXh0KSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9URVhUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVhULCBXZWJLaXRET01UZXh0Q2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVYVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVYVCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fSVNfVEVYVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVEVYVCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9N
X1RZUEVfVEVYVCwgV2ViS2l0RE9NVGV4dENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXh0
IHsKKyAgICBXZWJLaXRET01DaGFyYWN0ZXJEYXRhIHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NVGV4dENsYXNzIHsKKyAgICBXZWJLaXRET01DaGFyYWN0ZXJEYXRhQ2xh
c3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXh0
X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF9zcGxpdF90ZXh0Ogor
ICogQHNlbGY6IEEgI1dlYktpdERPTVRleHQKKyAqIEBvZmZzZXQ6IEEgI2d1bG9uZworICogQGVy
cm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRE
T01UZXh0CisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NVGV4dCoKK3dlYmtpdF9kb21fdGV4dF9z
cGxpdF90ZXh0KFdlYktpdERPTVRleHQqIHNlbGYsIGd1bG9uZyBvZmZzZXQsIEdFcnJvcioqIGVy
cm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfZ2V0X3dob2xlX3RleHQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGV4dAorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3RleHRfZ2V0X3dob2xlX3RleHQoV2ViS2l0RE9NVGV4
dCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXZWJLaXRET01UZXh0X2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWQ0Nzc4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UZXh0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGV4dFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRET01UZXh0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1RleHQuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGV4dC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTVRleHQqIHdyYXBUZXh0KFdlYkNvcmU6OlRleHQqKTsKK1dlYktpdERPTVRleHQqIGtp
dChXZWJDb3JlOjpUZXh0Kik7CitXZWJDb3JlOjpUZXh0KiBjb3JlKFdlYktpdERPTVRleHQqKTsK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFByaXZhdGVf
aCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2suY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2suY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyM2I1NzIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVRleHRUcmFjay5jcHAKQEAgLTAsMCArMSw0MTMgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01UZXh0VHJhY2suaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1
ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFy
Z2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERP
TVRleHRUcmFja0N1ZUxpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja1ByaXZhdGUuaCIKKyNp
bmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tf
R0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRf
RE9NX1RZUEVfVEVYVF9UUkFDSywgV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRUcmFja1ByaXZhdGUgeworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dFRyYWNrPiBjb3JlT2JqZWN0OworI2VuZGlm
IC8vIEVOQUJMRShWSURFT19UUkFDSykKK30gV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZTsKKwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERP
TVRleHRUcmFjayoga2l0KFdlYkNvcmU6OlRleHRUcmFjayogb2JqKQoreworICAgIGlmICghb2Jq
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RD
YWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFWFRfVFJBQ0socmV0
KTsKKworICAgIHJldHVybiB3cmFwVGV4dFRyYWNrKG9iaik7Cit9CisKK1dlYkNvcmU6OlRleHRU
cmFjayogY29yZShXZWJLaXRET01UZXh0VHJhY2sqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2sqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01UZXh0VHJhY2sqIHdy
YXBUZXh0VHJhY2soV2ViQ29yZTo6VGV4dFRyYWNrKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVhUX1RSQUNLKGdfb2JqZWN0
X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDSywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVj
dCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdGV4dF90cmFj
a19kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01F
dmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAg
ICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OlRl
eHRUcmFjayogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFjayo+KFdF
QktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlz
cGF0Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVu
dFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVy
LCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBX
ZWJDb3JlOjpUZXh0VHJhY2sqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0
VHJhY2sqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnRO
YW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNh
cHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNr
IikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X3RyYWNrX3JlbW92ZV9ldmVudF9saXN0
ZW5lcihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUs
IEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGNvcmVUYXJnZXQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpUZXh0VHJhY2sqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3Jl
T2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhh
bmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAg
ICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7Cisg
ICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3Rhcmdl
dF9pbml0KFdlYktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5k
aXNwYXRjaF9ldmVudCA9IHdlYmtpdF9kb21fdGV4dF90cmFja19kaXNwYXRjaF9ldmVudDsKKyAg
ICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2FkZF9l
dmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV90ZXh0X3RyYWNrX3JlbW92ZV9ldmVudF9saXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQ
RV9XSVRIX0NPREUoV2ViS2l0RE9NVGV4dFRyYWNrLCB3ZWJraXRfZG9tX3RleHRfdHJhY2ssIFdF
QktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZ
UEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7
CisgICAgUFJPUF8wLAorICAgIFBST1BfSUQsCisgICAgUFJPUF9MQUJFTCwKKyAgICBQUk9QX0xB
TkdVQUdFLAorICAgIFBST1BfSU5fQkFORF9NRVRBREFUQV9UUkFDS19ESVNQQVRDSF9UWVBFLAor
ICAgIFBST1BfQ1VFUywKKyAgICBQUk9QX0FDVElWRV9DVUVTLAorfTsKKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBX
ZWJLaXRET01UZXh0VHJhY2tQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0dF
VF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAv
LyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcHJpdi0+fldlYktpdERPTVRleHRUcmFja1ByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RleHRfdHJhY2tfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVRleHRUcmFj
ayogc2VsZiA9IFdFQktJVF9ET01fVEVYVF9UUkFDSyhvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX0lEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2lkKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0xBQkVMOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2xhYmVsKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0xBTkdVQUdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2xhbmd1YWdlKHNlbGYpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOX0JBTkRfTUVUQURBVEFfVFJBQ0tfRElTUEFU
Q0hfVFlQRToKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90
ZXh0X3RyYWNrX2dldF9pbl9iYW5kX21ldGFkYXRhX3RyYWNrX2Rpc3BhdGNoX3R5cGUoc2VsZikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VFUzoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2N1ZXMoc2VsZikpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQUNUSVZFX0NVRVM6CisgICAgICAgIGdfdmFs
dWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9hY3RpdmVfY3Vl
cyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXND
b3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAg
IEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGV4dF90cmFja19w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQs
IGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJL
aXRET01UZXh0VHJhY2tQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0dFVF9Q
UklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlRleHRUcmFjayo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOwor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBv
YmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY2xhc3NfaW5pdChXZWJL
aXRET01UZXh0VHJhY2tDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGV4dFRyYWNr
UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9kb21fdGV4dF90cmFja19maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfSUQsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaWQiLAor
ICAgICAgICAgICAgIlRleHRUcmFjazppZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFy
KiBUZXh0VHJhY2s6aWQiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MQUJFTCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJsYWJlbCIsCisgICAgICAgICAgICAiVGV4dFRy
YWNrOmxhYmVsIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFRleHRUcmFjazpsYWJl
bCIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0xBTkdVQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKAorICAgICAgICAgICAgImxhbmd1YWdlIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2s6bGFu
Z3VhZ2UiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVGV4dFRyYWNrOmxhbmd1YWdl
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfSU5fQkFORF9NRVRBREFUQV9UUkFDS19ESVNQQVRDSF9UWVBF
LAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImluLWJhbmQtbWV0
YWRhdGEtdHJhY2stZGlzcGF0Y2gtdHlwZSIsCisgICAgICAgICAgICAiVGV4dFRyYWNrOmluLWJh
bmQtbWV0YWRhdGEtdHJhY2stZGlzcGF0Y2gtdHlwZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdjaGFyKiBUZXh0VHJhY2s6aW4tYmFuZC1tZXRhZGF0YS10cmFjay1kaXNwYXRjaC10eXBlIiwK
KyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfQ1VFUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAg
ICAgICAgICAgICJjdWVzIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2s6Y3VlcyIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIFRleHRUcmFjazpjdWVz
IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRV9MSVNULAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQUNU
SVZFX0NVRVMsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiYWN0
aXZlLWN1ZXMiLAorICAgICAgICAgICAgIlRleHRUcmFjazphY3RpdmUtY3VlcyIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIFRleHRUcmFjazphY3Rp
dmUtY3VlcyIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUVfTElT
VCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19pbml0KFdlYktpdERPTVRleHRUcmFjayogcmVxdWVz
dCkKK3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2tQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9U
RVhUX1RSQUNLX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9N
VGV4dFRyYWNrUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19hZGRf
Y3VlKFdlYktpdERPTVRleHRUcmFjayogc2VsZiwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBjdWUs
IEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFWFRfVFJBQ0soc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVhUX1RSQUNLX0NVRShjdWUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJv
ciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBjb252ZXJ0ZWRDdWUgPSBXZWJL
aXQ6OmNvcmUoY3VlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBp
dGVtLT5hZGRDdWUoY29udmVydGVkQ3VlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGN1ZSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9y
KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisj
ZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdGV4
dF90cmFja19yZW1vdmVfY3VlKFdlYktpdERPTVRleHRUcmFjayogc2VsZiwgV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlKiBjdWUsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0soc2VsZikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShjdWUpKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBjb252
ZXJ0ZWRDdWUgPSBXZWJLaXQ6OmNvcmUoY3VlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpdGVtLT5yZW1vdmVDdWUoY29udmVydGVkQ3VlLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGN1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitn
Y2hhciogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9pZChXZWJLaXRET01UZXh0VHJhY2sqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFWFRfVFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFjayogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5pZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJh
Y2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfbGFiZWwoV2ViS2l0RE9NVGV4dFRy
YWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVhUX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+bGFiZWwoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJB
Q0spICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2xhbmd1YWdlKFdl
YktpdERPTVRleHRUcmFjayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDSyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
VGV4dFRyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxhbmd1YWdlKCkpOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyog
RU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV90ZXh0X3RyYWNr
X2dldF9pbl9iYW5kX21ldGFkYXRhX3RyYWNrX2Rpc3BhdGNoX3R5cGUoV2ViS2l0RE9NVGV4dFRy
YWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19URVhUX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2sqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+aW5CYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOwor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlTGlzdCogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9jdWVzKFdlYktpdERPTVRleHRUcmFj
ayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVYVF9UUkFDSyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0VHJhY2tDdWVM
aXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Y3VlcygpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBU
cmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLwor
fQorCitXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0KiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0
X2FjdGl2ZV9jdWVzKFdlYktpdERPTVRleHRUcmFjayogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDSyhzZWxmKSwgMCk7
CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFJlZlB0cjxXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpn
ZXRQdHIoaXRlbS0+YWN0aXZlQ3VlcygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVj
dFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFjay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42NDEzYTNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2suaApA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRET01UZXh0VHJhY2tfaAorI2RlZmluZSBXZWJLaXRET01UZXh0VHJhY2tfaAorCisj
aWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0sgICAgICAgICAgICAod2Via2l0X2Rv
bV90ZXh0X3RyYWNrX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDSyhv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfVEVYVF9UUkFDSywgV2ViS2l0RE9NVGV4dFRyYWNrKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9URVhUX1RSQUNLX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLLCBXZWJLaXRET01UZXh0VHJhY2tD
bGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNL
KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLKSkK
KyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLLCBXZWJL
aXRET01UZXh0VHJhY2tDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrIHsKKyAg
ICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01UZXh0VHJhY2tDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19hZGRfY3VlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVRleHRUcmFjaworICogQGN1ZTogQSAjV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXh0X3RyYWNrX2FkZF9jdWUoV2ViS2l0RE9N
VGV4dFRyYWNrKiBzZWxmLCBXZWJLaXRET01UZXh0VHJhY2tDdWUqIGN1ZSwgR0Vycm9yKiogZXJy
b3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19yZW1vdmVfY3VlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVRleHRUcmFjaworICogQGN1ZTogQSAjV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXh0X3RyYWNrX3JlbW92ZV9jdWUoV2ViS2l0
RE9NVGV4dFRyYWNrKiBzZWxmLCBXZWJLaXRET01UZXh0VHJhY2tDdWUqIGN1ZSwgR0Vycm9yKiog
ZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19nZXRfaWQ6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9t
X3RleHRfdHJhY2tfZ2V0X2lkKFdlYktpdERPTVRleHRUcmFjayogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9sYWJlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXh0VHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGV4dF90cmFja19nZXRf
bGFiZWwoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfZ2V0X2xhbmd1YWdlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFjawor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2dldF9sYW5ndWFnZShX
ZWJLaXRET01UZXh0VHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFj
a19nZXRfaW5fYmFuZF9tZXRhZGF0YV90cmFja19kaXNwYXRjaF90eXBlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVRleHRUcmFjaworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXh0
X3RyYWNrX2dldF9pbl9iYW5kX21ldGFkYXRhX3RyYWNrX2Rpc3BhdGNoX3R5cGUoV2ViS2l0RE9N
VGV4dFRyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2N1
ZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrCisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0CisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3Qq
Cit3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2N1ZXMoV2ViS2l0RE9NVGV4dFRyYWNrKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfZ2V0X2FjdGl2ZV9jdWVzOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFjaworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0Kgord2Via2l0
X2RvbV90ZXh0X3RyYWNrX2dldF9hY3RpdmVfY3VlcyhXZWJLaXRET01UZXh0VHJhY2sqIHNlbGYp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJ
ICovCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFRyYWNrX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VGV4dFRyYWNrQ3VlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zNTJkNjgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0
VHJhY2tDdWUuY3BwCkBAIC0wLDAgKzEsNDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRE
T01FdmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2lu
Y2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXh0VHJhY2tD
dWVQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19D
VUVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJL
SVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUUsIFdlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlIHsKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRUcmFja0N1ZT4gY29y
ZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9IFdlYktpdERPTVRleHRU
cmFja0N1ZVByaXZhdGU7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitXZWJLaXRET01UZXh0VHJhY2tDdWUqIGtpdChXZWJDb3JlOjpUZXh0VHJhY2tD
dWUqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
Z3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4g
V0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRShyZXQpOworCisgICAgcmV0dXJuIHdyYXAob2JqKTsK
K30KKworV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBjb3JlKFdlYktpdERPTVRleHRUcmFja0N1ZSog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRl
eHRUcmFja0N1ZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7
Cit9CisKK1dlYktpdERPTVRleHRUcmFja0N1ZSogd3JhcFRleHRUcmFja0N1ZShXZWJDb3JlOjpU
ZXh0VHJhY2tDdWUqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAg
IHJldHVybiBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9N
X1RZUEVfVEVYVF9UUkFDS19DVUUsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9f
VFJBQ0spCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2Rpc3Bh
dGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBl
dmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdl
YkNvcmU6OkV2ZW50KiBjb3JlRXZlbnQgPSBXZWJLaXQ6OmNvcmUoZXZlbnQpOworICAgIGlmICgh
Y29yZUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlKiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlKj4oV0VC
S0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNw
YXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAg
ICBVTlVTRURfUEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXh0VHJhY2tDdWUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsK
KyAgICByZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5l
cihHX09CSkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNh
cHR1cmUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZXZlbnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BB
UkFNKHVzZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RS
QUNLKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9yZW1v
dmVfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgY29uc3QgY2hh
ciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jvb2xlYW4gdXNlQ2FwdHVyZSkKK3sK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBjb3Jl
VGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlKj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2
ZW50TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRh
cmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKK3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tf
Y3VlX2Rpc3BhdGNoX2V2ZW50OworICAgIGlmYWNlLT5hZGRfZXZlbnRfbGlzdGVuZXIgPSB3ZWJr
aXRfZG9tX3RleHRfdHJhY2tfY3VlX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+cmVt
b3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9yZW1vdmVfZXZl
bnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVRleHRU
cmFja0N1ZSwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZSwgV0VCS0lUX0RPTV9UWVBFX09CSkVD
VCwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdl
YmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAg
UFJPUF9UUkFDSywKKyAgICBQUk9QX0lELAorICAgIFBST1BfU1RBUlRfVElNRSwKKyAgICBQUk9Q
X0VORF9USU1FLAorICAgIFBST1BfUEFVU0VfT05fRVhJVCwKK307CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGV4dF90cmFja19jdWVfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFWFRfVFJB
Q0tfQ1VFX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsK
KyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcHJpdi0+fldlYktpdERPTVRleHRU
cmFja0N1ZVByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfY3VlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBzZWxmID0gV0VCS0lUX0RPTV9URVhUX1RS
QUNLX0NVRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQ
Uk9QX0lEOgorICAgICAgICB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9pZChzZWxmLCBn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1NUQVJUX1RJTUU6CisgICAgICAgIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X3N0YXJ0
X3RpbWUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9FTkRfVElNRToKKyAgICAgICAgd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2N1ZV9zZXRfZW5kX3RpbWUoc2VsZiwgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSwg
bnVsbHB0cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QQVVTRV9PTl9FWElUOgor
ICAgICAgICB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9wYXVzZV9vbl9leGl0KHNlbGYs
IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBzZWxmID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NV
RShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1RS
QUNLOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdGV4dF90
cmFja19jdWVfZ2V0X3RyYWNrKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0lEOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX2dldF9pZChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9T
VEFSVF9USU1FOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21f
dGV4dF90cmFja19jdWVfZ2V0X3N0YXJ0X3RpbWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfRU5EX1RJTUU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwg
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfZW5kX3RpbWUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfUEFVU0VfT05fRVhJVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfcGF1c2Vfb25fZXhp
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2N1ZV9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sK
KyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfY3VlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFdlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFWFRf
VFJBQ0tfQ1VFX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0N1ZSo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVj
dCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5j
b3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJh
Y2tfY3VlX2NsYXNzX2luaXQoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlQ2xhc3MqIHJlcXVlc3RDbGFz
cykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJl
cXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywg
c2l6ZW9mKFdlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9jb25zdHJ1Y3RvcjsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9maW5h
bGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGV4dF90
cmFja19jdWVfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0g
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfVFJBQ0ssCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAidHJh
Y2siLAorICAgICAgICAgICAgIlRleHRUcmFja0N1ZTp0cmFjayIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IFdlYktpdERPTVRleHRUcmFjayogVGV4dFRyYWNrQ3VlOnRyYWNrIiwKKyAgICAgICAg
ICAgIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSUQsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoCisgICAgICAgICAgICAiaWQiLAorICAgICAgICAgICAgIlRleHRUcmFja0N1ZTpp
ZCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGV4dFRyYWNrQ3VlOmlkIiwKKyAg
ICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1NUQVJUX1RJTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUo
CisgICAgICAgICAgICAic3RhcnQtdGltZSIsCisgICAgICAgICAgICAiVGV4dFRyYWNrQ3VlOnN0
YXJ0LXRpbWUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBUZXh0VHJhY2tDdWU6
c3RhcnQtdGltZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X0VORF9USU1FLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImVu
ZC10aW1lIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2tDdWU6ZW5kLXRpbWUiLAorICAgICAgICAg
ICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBUZXh0VHJhY2tDdWU6ZW5kLXRpbWUiLAorICAgICAgICAg
ICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQVVTRV9PTl9FWElULAorICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJwYXVzZS1vbi1leGl0IiwKKyAg
ICAgICAgICAgICJUZXh0VHJhY2tDdWU6cGF1c2Utb24tZXhpdCIsCisgICAgICAgICAgICAicmVh
ZC13cml0ZSBnYm9vbGVhbiBUZXh0VHJhY2tDdWU6cGF1c2Utb24tZXhpdCIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2luaXQoV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAg
IG5ldyAocHJpdikgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZSgpOworfQorCitXZWJLaXRE
T01UZXh0VHJhY2sqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3RyYWNrKFdlYktpdERP
TVRleHRUcmFja0N1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OlRleHRUcmFja0N1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6VGV4dFRyYWNrPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dHJhY2so
KSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJMRShWSURF
T19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X2lk
KFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUoc2VsZiksIDApOworICAg
IFdlYkNvcmU6OlRleHRUcmFja0N1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5pZCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2Vu
ZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX3NldF9pZChXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYsIGNvbnN0IGdjaGFy
KiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVhUX1RSQUNLX0NVRShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRJZChjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfc3Rh
cnRfdGltZShXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5zdGFydFRpbWUoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
ZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQg
d2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9zZXRfc3RhcnRfdGltZShXZWJLaXRET01UZXh0VHJh
Y2tDdWUqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFKHNlbGYp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3Jl
OjpUZXh0VHJhY2tDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0U3RhcnRUaW1lKHZhbHVlLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0sp
ICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfZW5kX3RpbWUo
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdk
b3VibGUgcmVzdWx0ID0gaXRlbS0+ZW5kVGltZSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KDAp
OworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwordm9pZCB3ZWJraXRfZG9t
X3RleHRfdHJhY2tfY3VlX3NldF9lbmRfdGltZShXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYs
IGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tfQ1VFKHNlbGYpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tD
dWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0RW5kVGltZSh2YWx1ZSwgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGVycm9yKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJW
aWRlbyBUcmFjayIpCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnYm9v
bGVhbiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF9wYXVzZV9vbl9leGl0KFdlYktpdERP
TVRleHRUcmFja0N1ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJD
b3JlOjpUZXh0VHJhY2tDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xl
YW4gcmVzdWx0ID0gaXRlbS0+cGF1c2VPbkV4aXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9k
b21fdGV4dF90cmFja19jdWVfc2V0X3BhdXNlX29uX2V4aXQoV2ViS2l0RE9NVGV4dFRyYWNrQ3Vl
KiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRShzZWxmKSk7CisgICAgV2ViQ29yZTo6VGV4
dFRyYWNrQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFBhdXNl
T25FeGl0KHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlk
ZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01UZXh0VHJhY2tDdWUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0OGRjNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVGV4dFRyYWNrQ3VlLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlX2gKKyNkZWZpbmUgV2Vi
S2l0RE9NVGV4dFRyYWNrQ3VlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQ
SQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFi
bGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9URVhUX1RS
QUNLX0NVRSAgICAgICAgICAgICh3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19DVUUob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tf
Q1VFLCBXZWJLaXRET01UZXh0VHJhY2tDdWUpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJB
Q0tfQ1VFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRSwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlQ2xh
c3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUUob2JqKSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJB
Q0tfQ1VFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRV9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVY
VF9UUkFDS19DVUUpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLX0NVRSwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlQ2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTVRleHRUcmFja0N1ZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0
YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrQ3VlQ2xhc3MgeworICAgIFdl
YktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfdHJhY2s6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGV4dFRyYWNrQ3VlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01UZXh0VHJhY2sKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NVGV4dFRyYWNrKgord2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9nZXRfdHJhY2so
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX2dldF9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAq
CisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X2lkKFdlYktp
dERPTVRleHRUcmFja0N1ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNr
X2N1ZV9zZXRfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlCisgKiBAdmFs
dWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X2lkKFdlYktpdERPTVRleHRUcmFj
a0N1ZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rl
eHRfdHJhY2tfY3VlX2dldF9zdGFydF90aW1lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRU
cmFja0N1ZQorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVu
c3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1
ZV9nZXRfc3RhcnRfdGltZShXZWJLaXRET01UZXh0VHJhY2tDdWUqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X3N0YXJ0X3RpbWU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlCisgKiBAdmFsdWU6IEEgI2dkb3VibGUKKyAqIEBlcnJvcjog
I0dFcnJvcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9zdGFydF90aW1lKFdlYktpdERPTVRleHRU
cmFja0N1ZSogc2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X2VuZF90aW1lOgorICogQHNlbGY6IEEgI1dl
YktpdERPTVRleHRUcmFja0N1ZQorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV90
ZXh0X3RyYWNrX2N1ZV9nZXRfZW5kX3RpbWUoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9lbmRfdGltZToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWUKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfc2V0X2VuZF90aW1lKFdlYktpdERP
TVRleHRUcmFja0N1ZSogc2VsZiwgZ2RvdWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3BhdXNlX29uX2V4aXQ6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xl
YW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3BhdXNlX29uX2V4aXQoV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3Nl
dF9wYXVzZV9vbl9leGl0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFja0N1ZQorICog
QHZhbHVlOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX3NldF9wYXVzZV9vbl9leGl0
KFdlYktpdERPTVRleHRUcmFja0N1ZSogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYg
LyogV2ViS2l0RE9NVGV4dFRyYWNrQ3VlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk2ODQ0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRU
cmFja0N1ZUxpc3QuY3BwCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlTGlzdC5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJL
aXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRU
cmFja0N1ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBX
RUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJU1RfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUVfTElT
VCwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0PiBjb3JlT2JqZWN0OworI2Vu
ZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30gV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFBy
aXZhdGU7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0KiBraXQoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlz
dCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChn
cG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBX
RUJLSVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJU1QocmV0KTsKKworICAgIHJldHVybiB3cmFwVGV4
dFRyYWNrQ3VlTGlzdChvYmopOworfQorCitXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0KiBjb3Jl
KFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVl
c3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlTGlzdCogd3JhcFRleHRUcmFja0N1ZUxpc3QoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdCog
Y29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJ
VF9ET01fVEVYVF9UUkFDS19DVUVfTElTVChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RF
WFRfVFJBQ0tfQ1VFX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJB
Q0spCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCwgd2Via2l0X2Rv
bV90ZXh0X3RyYWNrX2N1ZV9saXN0LCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5HVEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhU
X1RSQUNLX0NVRV9MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0
LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgcHJpdi0+fldlYktp
dERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0KiBzZWxm
ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9MSVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9sZW5ndGgo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGV4dF90
cmFja19jdWVfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykK
K3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisgICAgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGUqIHByaXYgPSBXRUJL
SVRfRE9NX1RFWFRfVFJBQ0tfQ1VFX0xJU1RfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2
LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdCo+KFdF
QktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8v
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRET01UZXh0
VHJhY2tDdWVMaXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRleHRUcmFja0N1
ZUxpc3RQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RvciA9IHdlYmtpdF9k
b21fdGV4dF90cmFja19jdWVfbGlzdF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2ZpbmFsaXplOworICAgIGdv
YmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0
X2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisg
ICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9MRU5HVEgsCisgICAgICAgIGdfcGFy
YW1fc3BlY191bG9uZygKKyAgICAgICAgICAgICJsZW5ndGgiLAorICAgICAgICAgICAgIlRleHRU
cmFja0N1ZUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ3Vsb25nIFRleHRU
cmFja0N1ZUxpc3Q6bGVuZ3RoIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfaW5pdChXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0
KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9MSVNUX0dFVF9QUklWQVRFKHJlcXVlc3QpOwor
ICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGUoKTsKK30KKwor
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfaXRl
bShXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0KiBzZWxmLCBndWxvbmcgaW5kZXgpCit7CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFWFRfVFJBQ0tf
Q1VFX0xJU1Qoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRUcmFja0N1ZT4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1
cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAv
KiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK1dlYktpdERPTVRleHRUcmFja0N1ZSogd2Vi
a2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9jdWVfYnlfaWQoV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlTGlzdCogc2VsZiwgY29uc3QgZ2NoYXIqIGlkKQoreworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRV9MSVNUKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChpZCwgMCk7CisgICAgV2ViQ29yZTo6VGV4
dFRyYWNrQ3VlTGlzdCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRJZCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChpZCk7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlRleHRUcmFja0N1ZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmdl
dEN1ZUJ5SWQoY29udmVydGVkSWQpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0oaWQpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9
CisKK2d1bG9uZyB3ZWJraXRfZG9tX3RleHRfdHJhY2tfY3VlX2xpc3RfZ2V0X2xlbmd0aChXZWJL
aXRET01UZXh0VHJhY2tDdWVMaXN0KiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0NVRV9MSVNUKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpUZXh0VHJhY2tDdWVMaXN0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxndWxv
bmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmY4MmY3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0X2gK
KyNkZWZpbmUgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdF9oCisKKyNpZmRlZiBXRUJLSVRfRE9N
X1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRk
b21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
RE9NX1RZUEVfVEVYVF9UUkFDS19DVUVfTElTVCAgICAgICAgICAgICh3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNL
X0NVRV9MSVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9i
aiksIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRV9MSVNULCBXZWJLaXRET01UZXh0VHJh
Y2tDdWVMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVhUX1RSQUNLX0NVRV9MSVNUX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9URVhUX1RSQUNLX0NVRV9MSVNULCBXZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0Q2xhc3Mp
CisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUVfTElTVChvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVYVF9U
UkFDS19DVUVfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19DVUVfTElT
VF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVEVYVF9UUkFDS19DVUVfTElTVCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9U
UkFDS19DVUVfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19DVUVfTElTVCwgV2ViS2l0RE9NVGV4
dFRyYWNrQ3VlTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0
IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9X
ZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGV4dF90
cmFja19jdWVfbGlzdF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRf
dHJhY2tfY3VlX2xpc3RfaXRlbToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXh0VHJhY2tDdWVM
aXN0CisgKiBAaW5kZXg6IEEgI2d1bG9uZworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIFdlYktpdERPTVRleHRUcmFja0N1ZSoKK3dlYmtpdF9kb21fdGV4dF90
cmFja19jdWVfbGlzdF9pdGVtKFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHNlbGYsIGd1bG9u
ZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9j
dWVfYnlfaWQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdAorICogQGlk
OiBBICNnY2hhcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9N
VGV4dFRyYWNrQ3VlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTVRleHRUcmFja0N1ZSoKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9n
ZXRfY3VlX2J5X2lkKFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3QqIHNlbGYsIGNvbnN0IGdjaGFy
KiBpZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2N1ZV9saXN0X2dldF9sZW5n
dGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdAorICoKKyAqIFJldHVy
bnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSBndWxvbmcKK3dlYmtpdF9kb21fdGV4dF90cmFja19jdWVfbGlzdF9nZXRfbGVuZ3RoKFdlYktp
dERPTVRleHRUcmFja0N1ZUxpc3QqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
V0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFRy
YWNrQ3VlTGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMmQ4NzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RQcml2YXRlX2gKKyNk
ZWZpbmUgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0VHJhY2tDdWVMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRl
eHRUcmFja0N1ZUxpc3QuaD4KKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCogd3JhcFRleHRUcmFja0N1ZUxpc3Qo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlTGlzdCopOworV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCog
a2l0KFdlYkNvcmU6OlRleHRUcmFja0N1ZUxpc3QqKTsKK1dlYkNvcmU6OlRleHRUcmFja0N1ZUxp
c3QqIGNvcmUoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCopOworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCisKKyNlbmRpZiAvKiBXZWJL
aXRET01UZXh0VHJhY2tDdWVMaXN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRU
cmFja0N1ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMDYzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRleHRUcmFja0N1ZVByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01UZXh0VHJhY2tDdWVQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dFRyYWNrQ3VlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRleHRUcmFj
a0N1ZS5oPgorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CitX
ZWJLaXRET01UZXh0VHJhY2tDdWUqIHdyYXBUZXh0VHJhY2tDdWUoV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlKik7CitXZWJLaXRET01UZXh0VHJhY2tDdWUqIGtpdChXZWJDb3JlOjpUZXh0VHJhY2tDdWUq
KTsKK1dlYkNvcmU6OlRleHRUcmFja0N1ZSogY29yZShXZWJLaXRET01UZXh0VHJhY2tDdWUqKTsK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAq
LworCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFRyYWNrQ3VlUHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVRleHRUcmFja0xpc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTVjMmRlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UZXh0VHJhY2tMaXN0LmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTVRleHRUcmFja0xpc3QuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSAiR09iamVjdEV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2lu
Y2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVRleHRUcmFja0xpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVGV4dFRyYWNr
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9E
T01fVEVYVF9UUkFDS19MSVNUX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfTElTVCwgV2ViS2l0RE9NVGV4
dFRyYWNrTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tM
aXN0UHJpdmF0ZSB7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFJlZlB0cjxXZWJDb3Jl
OjpUZXh0VHJhY2tMaXN0PiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFD
SykKK30gV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGU7CisKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01UZXh0VHJhY2tMaXN0KiBr
aXQoV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0
KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RFWFRfVFJBQ0tfTElTVChyZXQpOwor
CisgICAgcmV0dXJuIHdyYXBUZXh0VHJhY2tMaXN0KG9iaik7Cit9CisKK1dlYkNvcmU6OlRleHRU
cmFja0xpc3QqIGNvcmUoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRUcmFja0xpc3QqPihXRUJL
SVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01U
ZXh0VHJhY2tMaXN0KiB3cmFwVGV4dFRyYWNrTGlzdChXZWJDb3JlOjpUZXh0VHJhY2tMaXN0KiBj
b3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9URVhUX1RSQUNLX0xJU1QoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVhUX1RS
QUNLX0xJU1QsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9kaXNwYXRjaF9ldmVudChX
ZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRET01FdmVudCogZXZlbnQsIEdFcnJv
cioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpFdmVu
dCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsKKyAgICBpZiAoIWNvcmVFdmVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6OlRleHRUcmFja0xpc3QqIGNvcmVU
YXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50
Rm9yQmluZGluZ3MoKmNvcmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGRlc2NyaXB0aW9uLmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURf
UEFSQU0oZXZlbnQpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
ZG9tX3RleHRfdHJhY2tfbGlzdF9hZGRfZXZlbnRfbGlzdGVuZXIoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgY29uc3QgY2hhciogZXZlbnROYW1lLCBHQ2xvc3VyZSogaGFuZGxlciwgZ2Jv
b2xlYW4gdXNlQ2FwdHVyZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29y
ZTo6VGV4dFRyYWNrTGlzdCogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRleHRU
cmFja0xpc3QqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICBy
ZXR1cm4gV2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09C
SkVDVCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZl
bnROYW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVz
ZUNhcHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfcmVtb3ZlX2V2
ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1cmUpCit7CisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OlRleHRUcmFja0xpc3QqIGNvcmVUYXJn
ZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpF
Q1QodGFyZ2V0KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50
TGlzdGVuZXI6OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdl
dCwgZXZlbnROYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BB
UkFNKGhhbmRsZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkK
K3sKKyAgICBpZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlz
dF9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0
X2RvbV90ZXh0X3RyYWNrX2xpc3RfYWRkX2V2ZW50X2xpc3RlbmVyOworICAgIGlmYWNlLT5yZW1v
dmVfZXZlbnRfbGlzdGVuZXIgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9yZW1vdmVfZXZl
bnRfbGlzdGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVRleHRU
cmFja0xpc3QsIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0LCBXRUJLSVRfRE9NX1RZUEVfT0JK
RUNULCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVCwg
d2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpCisKK2VudW0geworICAgIFBST1BfMCwKKyAg
ICBQUk9QX0xFTkdUSCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGV4dF90cmFja19s
aXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UZXh0VHJhY2tM
aXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19MSVNUX0dFVF9QUklWQVRF
KG9iamVjdCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgcHJpdi0+fldlYktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2xpc3RfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGV4
dFRyYWNrTGlzdCogc2VsZiA9IFdFQktJVF9ET01fVEVYVF9UUkFDS19MSVNUKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAg
ICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfZ2V0
X2xlbmd0aChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2Rv
bV90ZXh0X3RyYWNrX2xpc3RfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRp
ZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90
ZXh0X3RyYWNrX2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisgICAgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RFWFRfVFJBQ0tfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGV4dF90cmFja19saXN0X2NsYXNzX2luaXQoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdENsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZSkpOworICAg
IGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9j
b25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2xpc3RfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAibGVu
Z3RoIiwKKyAgICAgICAgICAgICJUZXh0VHJhY2tMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGd1bG9uZyBUZXh0VHJhY2tMaXN0Omxlbmd0aCIsCisgICAgICAgICAgICAwLCBH
X01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xpc3RfaW5pdChXZWJLaXRET01U
ZXh0VHJhY2tMaXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVRleHRUcmFja0xpc3RQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVhUX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUocmVxdWVz
dCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZSgpOworfQor
CitXZWJLaXRET01UZXh0VHJhY2sqIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2l0ZW0oV2Vi
S2l0RE9NVGV4dFRyYWNrTGlzdCogc2VsZiwgZ3Vsb25nIGluZGV4KQoreworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVhUX1RSQUNLX0xJU1Qoc2Vs
ZiksIDApOworICAgIFdlYkNvcmU6OlRleHRUcmFja0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRUcmFjaz4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5kZXgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBV
TlVTRURfUEFSQU0oaW5kZXgpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJB
Q0spICovCit9CisKK1dlYktpdERPTVRleHRUcmFjayogd2Via2l0X2RvbV90ZXh0X3RyYWNrX2xp
c3RfZ2V0X3RyYWNrX2J5X2lkKFdlYktpdERPTVRleHRUcmFja0xpc3QqIHNlbGYsIGNvbnN0IGdj
aGFyKiBpZCkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVEVYVF9UUkFDS19MSVNUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChpZCwgMCk7CisgICAgV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRJZCA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChpZCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHRUcmFjaz4gZ29iamVjdFJlc3VsdCA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmdldFRyYWNrQnlJZChjb252ZXJ0ZWRJZCkpOworICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTShpZCk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVO
QUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ3Vsb25nIHdlYmtpdF9kb21fdGV4dF90cmFja19s
aXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCogc2VsZikKK3sKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19MSVNU
KHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXh0VHJhY2tMaXN0KiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1bHQgPSBpdGVtLT5sZW5ndGgoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01UZXh0VHJhY2tMaXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0xpc3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjFkMWQ5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01UZXh0VHJhY2tMaXN0LmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXh0VHJhY2tMaXN0X2gKKyNk
ZWZpbmUgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdF9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfVEVYVF9UUkFDS19MSVNUICAgICAgICAgICAgKHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVYVF9UUkFDS19MSVNUKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9URVhUX1RSQUNLX0xJU1QsIFdlYktpdERPTVRleHRUcmFja0xpc3QpKQorI2RlZmluZSBXRUJL
SVRfRE9NX1RFWFRfVFJBQ0tfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19MSVNULCBXZWJLaXRE
T01UZXh0VHJhY2tMaXN0Q2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVYVF9UUkFDS19M
SVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9ET01fVFlQRV9URVhUX1RSQUNLX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFWFRf
VFJBQ0tfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfRE9NX1RZUEVfVEVYVF9UUkFDS19MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9U
RVhUX1RSQUNLX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNT
KChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RFWFRfVFJBQ0tfTElTVCwgV2ViS2l0RE9NVGV4dFRy
YWNrTGlzdENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tMaXN0IHsKKyAgICBX
ZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01U
ZXh0VHJhY2tMaXN0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2dl
dF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGV4dF90cmFja19saXN0X2l0ZW06
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGV4dFRyYWNrTGlzdAorICogQGluZGV4OiBBICNndWxv
bmcKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdERPTVRleHRUcmFj
aworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01U
ZXh0VHJhY2sqCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9pdGVtKFdlYktpdERPTVRleHRU
cmFja0xpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXh0
X3RyYWNrX2xpc3RfZ2V0X3RyYWNrX2J5X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRU
cmFja0xpc3QKKyAqIEBpZDogQSAjZ2NoYXIKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVs
bCk6IEEgI1dlYktpdERPTVRleHRUcmFjaworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01UZXh0VHJhY2sqCit3ZWJraXRfZG9tX3RleHRfdHJhY2tf
bGlzdF9nZXRfdHJhY2tfYnlfaWQoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCogc2VsZiwgY29uc3Qg
Z2NoYXIqIGlkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRfbGVu
Z3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRleHRUcmFja0xpc3QKKyAqCisgKiBSZXR1cm5z
OiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z3Vsb25nCit3ZWJraXRfZG9tX3RleHRfdHJhY2tfbGlzdF9nZXRfbGVuZ3RoKFdlYktpdERPTVRl
eHRUcmFja0xpc3QqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RP
TV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFRyYWNrTGlzdF9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRU
cmFja0xpc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4
ZTdmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrTGlzdFByaXZhdGUuaApAQCAt
MCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTVRleHRUcmFja0xpc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGV4dFRyYWNr
TGlzdFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0VHJhY2tMaXN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRleHRUcmFja0xpc3QuaD4KKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCog
d3JhcFRleHRUcmFja0xpc3QoV2ViQ29yZTo6VGV4dFRyYWNrTGlzdCopOworV2ViS2l0RE9NVGV4
dFRyYWNrTGlzdCoga2l0KFdlYkNvcmU6OlRleHRUcmFja0xpc3QqKTsKK1dlYkNvcmU6OlRleHRU
cmFja0xpc3QqIGNvcmUoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCopOworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCisKKyNlbmRpZiAvKiBX
ZWJLaXRET01UZXh0VHJhY2tMaXN0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRU
cmFja1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjc2ZDgzOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRleHRU
cmFja1ByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdERPTVRleHRUcmFja1ByaXZhdGVfaAorI2RlZmluZSBXZWJL
aXRET01UZXh0VHJhY2tQcml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvVGV4dFRyYWNrLmg+
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRleHRUcmFjay5oPgorI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01UZXh0VHJhY2sqIHdy
YXBUZXh0VHJhY2soV2ViQ29yZTo6VGV4dFRyYWNrKik7CitXZWJLaXRET01UZXh0VHJhY2sqIGtp
dChXZWJDb3JlOjpUZXh0VHJhY2sqKTsKK1dlYkNvcmU6OlRleHRUcmFjayogY29yZShXZWJLaXRE
T01UZXh0VHJhY2sqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxF
KFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NVGV4dFRyYWNrUHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVRpbWVSYW5nZXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjE3MzFkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTVRpbWVSYW5nZXMuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5o
PgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1RJTUVfUkFOR0VTX0dFVF9QUklWQVRFKG9iaikgR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VT
LCBXZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVRpbWVSYW5nZXNQcml2YXRlIHsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgUmVmUHRyPFdlYkNv
cmU6OlRpbWVSYW5nZXM+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorfSBX
ZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZTsKKworI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYktpdERPTVRpbWVSYW5nZXMqIGtpdChXZWJDb3JlOjpUaW1lUmFu
Z2VzKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fVElNRV9SQU5HRVMocmV0KTsKKworICAgIHJldHVybiB3cmFwVGltZVJhbmdl
cyhvYmopOworfQorCitXZWJDb3JlOjpUaW1lUmFuZ2VzKiBjb3JlKFdlYktpdERPTVRpbWVSYW5n
ZXMqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUaW1lUmFuZ2VzKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NVGltZVJhbmdlcyogd3JhcFRpbWVSYW5nZXMoV2ViQ29yZTo6VGlt
ZVJhbmdlcyogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0
dXJuIFdFQktJVF9ET01fVElNRV9SQU5HRVMoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9U
SU1FX1JBTkdFUywgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKworR19ERUZJ
TkVfVFlQRShXZWJLaXRET01UaW1lUmFuZ2VzLCB3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzLCBXRUJL
SVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MRU5H
VEgsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9ET01fVElNRV9SQU5HRVNfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmpl
Y3QuZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKyAgICBwcml2LT5+V2ViS2l0RE9N
VGltZVJhbmdlc1ByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RpbWVf
cmFuZ2VzX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGltZV9yYW5nZXNfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAg
V2ViS2l0RE9NVGltZVJhbmdlcyogc2VsZiA9IFdFQktJVF9ET01fVElNRV9SQU5HRVMob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9MRU5HVEg6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2dl
dF9sZW5ndGgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3Bl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9k
b21fdGltZV9yYW5nZXNfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMp
Cit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90aW1l
X3Jhbmdlc19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShWSURFTykKKyAgICBX
ZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVElNRV9SQU5HRVNf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGltZVJhbmdlcyo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmpl
Y3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0Lmdl
dCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKyAgICByZXR1cm4gb2JqZWN0
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2NsYXNzX2luaXQoV2Vi
S2l0RE9NVGltZVJhbmdlc0NsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNz
KiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01UaW1lUmFu
Z2VzUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9t
X3RpbWVfcmFuZ2VzX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV90aW1lX3Jhbmdlc19nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAg
ICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJUaW1lUmFuZ2VzOmxlbmd0aCIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IGd1bG9uZyBUaW1lUmFuZ2VzOmxlbmd0aCIsCisgICAgICAgICAgICAwLCBH
X01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90aW1lX3Jhbmdlc19pbml0KFdlYktpdERPTVRpbWVS
YW5nZXMqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUqIHByaXYg
PSBXRUJLSVRfRE9NX1RJTUVfUkFOR0VTX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAo
cHJpdikgV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUoKTsKK30KKworZ2RvdWJsZSB3ZWJraXRf
ZG9tX3RpbWVfcmFuZ2VzX3N0YXJ0KFdlYktpdERPTVRpbWVSYW5nZXMqIHNlbGYsIGd1bG9uZyBp
bmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1RJTUVfUkFOR0VTKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6VGltZVJhbmdlcyogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPnN0YXJ0KGluZGV4LCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
ZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2dkb3VibGUgd2Vi
a2l0X2RvbV90aW1lX3Jhbmdlc19lbmQoV2ViS2l0RE9NVGltZVJhbmdlcyogc2VsZiwgZ3Vsb25n
IGluZGV4LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVElNRV9SQU5HRVMoc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKCFlcnJvciB8fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpUaW1lUmFuZ2VzKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+ZW5kKGluZGV4LCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVT
RURfUEFSQU0oaW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8iKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
ZG91YmxlPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU8pICovCit9CisKK2d1bG9uZyB3ZWJr
aXRfZG9tX3RpbWVfcmFuZ2VzX2dldF9sZW5ndGgoV2ViS2l0RE9NVGltZVJhbmdlcyogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU8pCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVElNRV9SQU5H
RVMoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRpbWVSYW5nZXMqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmxlbmd0aCgpOworICAgIHJldHVy
biByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1
bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPKSAqLworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktp
dERPTVRpbWVSYW5nZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJhbmdlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjMyODRkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRpbWVSYW5n
ZXMuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdlYktpdERPTVRpbWVSYW5nZXNfaAorI2RlZmluZSBXZWJLaXRET01UaW1lUmFuZ2Vz
X2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9USU1FX1JBTkdFUyAgICAgICAgICAgICh3
ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVElN
RV9SQU5HRVMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX0RPTV9UWVBFX1RJTUVfUkFOR0VTLCBXZWJLaXRET01UaW1lUmFuZ2VzKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9USU1FX1JBTkdFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVElNRV9SQU5HRVMsIFdlYktp
dERPTVRpbWVSYW5nZXNDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19USU1FX1JBTkdFUyhv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfVElNRV9SQU5HRVMpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RJTUVfUkFOR0VTX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01f
VFlQRV9USU1FX1JBTkdFUykpCisjZGVmaW5lIFdFQktJVF9ET01fVElNRV9SQU5HRVNfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9U
WVBFX1RJTUVfUkFOR0VTLCBXZWJLaXRET01UaW1lUmFuZ2VzQ2xhc3MpKQorCitzdHJ1Y3QgX1dl
YktpdERPTVRpbWVSYW5nZXMgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRpbWVSYW5nZXNDbGFzcyB7CisgICAgV2ViS2l0RE9N
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2RvbV90aW1lX3Jhbmdlc19nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rp
bWVfcmFuZ2VzX3N0YXJ0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAqIEBp
bmRleDogQSAjZ3Vsb25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNn
ZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3Vi
bGUKK3dlYmtpdF9kb21fdGltZV9yYW5nZXNfc3RhcnQoV2ViS2l0RE9NVGltZVJhbmdlcyogc2Vs
ZiwgZ3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV90
aW1lX3Jhbmdlc19lbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGltZVJhbmdlcworICogQGlu
ZGV4OiBBICNndWxvbmcKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2dk
b3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJs
ZQord2Via2l0X2RvbV90aW1lX3Jhbmdlc19lbmQoV2ViS2l0RE9NVGltZVJhbmdlcyogc2VsZiwg
Z3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV90aW1l
X3Jhbmdlc19nZXRfbGVuZ3RoOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRpbWVSYW5nZXMKKyAq
CisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8K
K1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3RpbWVfcmFuZ2VzX2dldF9sZW5ndGgoV2Vi
S2l0RE9NVGltZVJhbmdlcyogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJL
SVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UaW1lUmFuZ2Vz
X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJhbmdlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVGltZVJh
bmdlc1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjgxYjI2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9N
VGltZVJhbmdlc1ByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01UaW1lUmFuZ2VzUHJpdmF0ZV9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVSYW5nZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NVGltZVJhbmdlcy5oPgorI2lmIEVOQUJMRShWSURFTykKKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01UaW1lUmFuZ2VzKiB3cmFwVGltZVJhbmdlcyhXZWJDb3JlOjpUaW1l
UmFuZ2VzKik7CitXZWJLaXRET01UaW1lUmFuZ2VzKiBraXQoV2ViQ29yZTo6VGltZVJhbmdlcyop
OworV2ViQ29yZTo6VGltZVJhbmdlcyogY29yZShXZWJLaXRET01UaW1lUmFuZ2VzKik7Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShWSURFTykgKi8KKworI2VuZGlm
IC8qIFdlYktpdERPTVRpbWVSYW5nZXNQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVG91
Y2guY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01Ub3VjaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDFjMjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVG91Y2guY3BwCkBAIC0wLDAgKzEs
NDc2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVG91Y2guaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFRh
cmdldFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViS2l0RE9NVG91Y2hQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UT1VDSF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9UT1VDSCwgV2ViS2l0RE9NVG91Y2hQcml2
YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVG91Y2hQcml2YXRlIHsKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpUb3VjaD4gY29yZU9iamVjdDsK
KyNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorfSBXZWJLaXRET01Ub3VjaFByaXZhdGU7
CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
S2l0RE9NVG91Y2gqIGtpdChXZWJDb3JlOjpUb3VjaCogb2JqKQoreworICAgIGlmICghb2JqKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNo
ZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9NX1RPVUNIKHJldCk7CisKKyAg
ICByZXR1cm4gd3JhcFRvdWNoKG9iaik7Cit9CisKK1dlYkNvcmU6OlRvdWNoKiBjb3JlKFdlYktp
dERPTVRvdWNoKiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VG91Y2gqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01Ub3VjaCogd3JhcFRvdWNoKFdlYkNvcmU6OlRvdWNoKiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9UT1VDSChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RPVUNILCAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01U
b3VjaCwgd2Via2l0X2RvbV90b3VjaCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7
CisgICAgUFJPUF8wLAorICAgIFBST1BfQ0xJRU5UX1gsCisgICAgUFJPUF9DTElFTlRfWSwKKyAg
ICBQUk9QX1NDUkVFTl9YLAorICAgIFBST1BfU0NSRUVOX1ksCisgICAgUFJPUF9QQUdFX1gsCisg
ICAgUFJPUF9QQUdFX1ksCisgICAgUFJPUF9UQVJHRVQsCisgICAgUFJPUF9JREVOVElGSUVSLAor
ICAgIFBST1BfV0VCS0lUX1JBRElVU19YLAorICAgIFBST1BfV0VCS0lUX1JBRElVU19ZLAorICAg
IFBST1BfV0VCS0lUX1JPVEFUSU9OX0FOR0xFLAorICAgIFBST1BfV0VCS0lUX0ZPUkNFLAorfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90b3VjaF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RE9NVG91Y2hQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9UT1VDSF9H
RVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworI2VuZGlm
IC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgcHJpdi0+fldlYktpdERPTVRvdWNoUHJpdmF0
ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdG91Y2hfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90b3VjaF9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01Ub3VjaCogc2VsZiA9IFdFQktJ
VF9ET01fVE9VQ0gob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNh
c2UgUFJPUF9DTElFTlRfWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0
X2RvbV90b3VjaF9nZXRfY2xpZW50X3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQ0xJRU5UX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9k
b21fdG91Y2hfZ2V0X2NsaWVudF95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1NDUkVFTl9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9t
X3RvdWNoX2dldF9zY3JlZW5feChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9TQ1JFRU5fWToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90
b3VjaF9nZXRfc2NyZWVuX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
UEFHRV9YOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNo
X2dldF9wYWdlX3goc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFHRV9Z
OgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF9w
YWdlX3koc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVEFSR0VUOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3Rhcmdl
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JREVOVElGSUVSOgorICAg
ICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90b3VjaF9nZXRfaWRlbnRp
ZmllcihzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XRUJLSVRfUkFESVVT
X1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdG91Y2hfZ2V0
X3dlYmtpdF9yYWRpdXNfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9X
RUJLSVRfUkFESVVTX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtpdF9k
b21fdG91Y2hfZ2V0X3dlYmtpdF9yYWRpdXNfeShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9XRUJLSVRfUk9UQVRJT05fQU5HTEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zs
b2F0KHZhbHVlLCB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcm90YXRpb25fYW5nbGUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCS0lUX0ZPUkNFOgorICAgICAg
ICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgd2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0X2Zv
cmNlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rv
dWNoX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdP
YmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdG91Y2hfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYktpdERPTVRv
dWNoUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVE9VQ0hfR0VUX1BSSVZBVEUob2JqZWN0KTsK
KyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VG91Y2gqPihXRUJL
SVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVj
dENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdG91Y2hfY2xhc3NfaW5pdChXZWJLaXRET01Ub3VjaENsYXNzKiByZXF1ZXN0
Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xh
c3MsIHNpemVvZihXZWJLaXRET01Ub3VjaFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdG9yID0gd2Via2l0X2RvbV90b3VjaF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90b3VjaF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xh
c3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdG91Y2hfZ2V0X3Byb3BlcnR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX0NMSUVOVF9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAg
ICAgICAgICJjbGllbnQteCIsCisgICAgICAgICAgICAiVG91Y2g6Y2xpZW50LXgiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBnbG9uZyBUb3VjaDpjbGllbnQteCIsCisgICAgICAgICAgICBHX01J
TkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVj
dENsYXNzLAorICAgICAgICBQUk9QX0NMSUVOVF9ZLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9u
ZygKKyAgICAgICAgICAgICJjbGllbnQteSIsCisgICAgICAgICAgICAiVG91Y2g6Y2xpZW50LXki
LAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUb3VjaDpjbGllbnQteSIsCisgICAgICAg
ICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUkVFTl9YLAorICAgICAgICBnX3BhcmFt
X3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JlZW4teCIsCisgICAgICAgICAgICAiVG91Y2g6
c2NyZWVuLXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUb3VjaDpzY3JlZW4teCIs
CisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NDUkVFTl9ZLAorICAgICAg
ICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJzY3JlZW4teSIsCisgICAgICAgICAg
ICAiVG91Y2g6c2NyZWVuLXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUb3VjaDpz
Y3JlZW4teSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1BBR0VfWCwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAicGFnZS14IiwKKyAgICAg
ICAgICAgICJUb3VjaDpwYWdlLXgiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUb3Vj
aDpwYWdlLXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9QQUdFX1ks
CisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgInBhZ2UteSIsCisgICAg
ICAgICAgICAiVG91Y2g6cGFnZS15IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVG91
Y2g6cGFnZS15IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVEFSR0VU
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInRhcmdldCIsCisg
ICAgICAgICAgICAiVG91Y2g6dGFyZ2V0IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0
RE9NRXZlbnRUYXJnZXQqIFRvdWNoOnRhcmdldCIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZ
UEVfRVZFTlRfVEFSR0VULAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfSURFTlRJRklFUiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25n
KAorICAgICAgICAgICAgImlkZW50aWZpZXIiLAorICAgICAgICAgICAgIlRvdWNoOmlkZW50aWZp
ZXIiLAorICAgICAgICAgICAgInJlYWQtb25seSBndWxvbmcgVG91Y2g6aWRlbnRpZmllciIsCisg
ICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAg
ICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0VCS0lUX1JBRElVU19YLAorICAgICAgICBn
X3BhcmFtX3NwZWNfbG9uZygKKyAgICAgICAgICAgICJ3ZWJraXQtcmFkaXVzLXgiLAorICAgICAg
ICAgICAgIlRvdWNoOndlYmtpdC1yYWRpdXMteCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGds
b25nIFRvdWNoOndlYmtpdC1yYWRpdXMteCIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFY
TE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1dFQktJVF9SQURJVVNfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisg
ICAgICAgICAgICAid2Via2l0LXJhZGl1cy15IiwKKyAgICAgICAgICAgICJUb3VjaDp3ZWJraXQt
cmFkaXVzLXkiLAorICAgICAgICAgICAgInJlYWQtb25seSBnbG9uZyBUb3VjaDp3ZWJraXQtcmFk
aXVzLXkiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJLSVRfUk9U
QVRJT05fQU5HTEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICJ3
ZWJraXQtcm90YXRpb24tYW5nbGUiLAorICAgICAgICAgICAgIlRvdWNoOndlYmtpdC1yb3RhdGlv
bi1hbmdsZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdmbG9hdCBUb3VjaDp3ZWJraXQtcm90
YXRpb24tYW5nbGUiLAorICAgICAgICAgICAgLUdfTUFYRkxPQVQsIEdfTUFYRkxPQVQsIDAsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9X
RUJLSVRfRk9SQ0UsCisgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICJ3
ZWJraXQtZm9yY2UiLAorICAgICAgICAgICAgIlRvdWNoOndlYmtpdC1mb3JjZSIsCisgICAgICAg
ICAgICAicmVhZC1vbmx5IGdmbG9hdCBUb3VjaDp3ZWJraXQtZm9yY2UiLAorICAgICAgICAgICAg
LUdfTUFYRkxPQVQsIEdfTUFYRkxPQVQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3RvdWNoX2luaXQoV2ViS2l0
RE9NVG91Y2gqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVG91Y2hQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9UT1VDSF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdl
YktpdERPTVRvdWNoUHJpdmF0ZSgpOworfQorCitnbG9uZyB3ZWJraXRfZG9tX3RvdWNoX2dldF9j
bGllbnRfeChXZWJLaXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpUb3VjaCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBp
dGVtLT5jbGllbnRYKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2
ZW50cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKSAqLworfQorCitnbG9uZyB3ZWJraXRfZG9tX3RvdWNoX2dldF9jbGll
bnRfeShXZWJLaXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpU
b3VjaCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVt
LT5jbGllbnRZKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50
cyIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKSAqLworfQorCitnbG9uZyB3ZWJraXRfZG9tX3RvdWNoX2dldF9zY3JlZW5f
eChXZWJLaXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3Vj
aCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5z
Y3JlZW5YKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKSAqLworfQorCitnbG9uZyB3ZWJraXRfZG9tX3RvdWNoX2dldF9zY3JlZW5feShX
ZWJLaXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zY3Jl
ZW5ZKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIpCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKSAqLworfQorCitnbG9uZyB3ZWJraXRfZG9tX3RvdWNoX2dldF9wYWdlX3goV2ViS2l0
RE9NVG91Y2gqIHNlbGYpCit7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19UT1VDSChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+cGFnZVgoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZlbnRzIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMp
ICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3BhZ2VfeShXZWJLaXRET01Ub3Vj
aCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5wYWdlWSgpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30K
KworV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3RhcmdldChXZWJL
aXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRUYXJnZXQ+
IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT50YXJnZXQoKSk7CisgICAgcmV0dXJu
IFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVG91Y2ggRXZl
bnRzIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAqLwor
fQorCitndWxvbmcgd2Via2l0X2RvbV90b3VjaF9nZXRfaWRlbnRpZmllcihXZWJLaXRET01Ub3Vj
aCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBndWxvbmcgcmVzdWx0ID0gaXRlbS0+aWRlbnRpZmllcigpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxndWxvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMp
ICovCit9CisKK2dsb25nIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9yYWRpdXNfeChXZWJL
aXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUb3VjaCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT53ZWJraXRS
YWRpdXNYKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKSAqLworfQorCitnbG9uZyB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcmFk
aXVzX3koV2ViS2l0RE9NVG91Y2gqIHNlbGYpCit7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UT1VDSChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRl
bS0+d2Via2l0UmFkaXVzWSgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJUb3Vj
aCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyog
RU5BQkxFKFRPVUNIX0VWRU5UUykgKi8KK30KKworZ2Zsb2F0IHdlYmtpdF9kb21fdG91Y2hfZ2V0
X3dlYmtpdF9yb3RhdGlvbl9hbmdsZShXZWJLaXRET01Ub3VjaCogc2VsZikKK3sKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RPVUNIKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpUb3VjaCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
ZmxvYXQgcmVzdWx0ID0gaXRlbS0+d2Via2l0Um90YXRpb25BbmdsZSgpOworICAgIHJldHVybiBy
ZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJUb3VjaCBFdmVudHMiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnZmxvYXQ+KDApOworI2VuZGlmIC8qIEVOQUJMRShUT1VDSF9FVkVOVFMpICovCit9CisKK2dm
bG9hdCB3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfZm9yY2UoV2ViS2l0RE9NVG91Y2gqIHNl
bGYpCit7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19UT1VDSChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VG91Y2gqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2Zsb2F0IHJlc3VsdCA9IGl0ZW0tPndlYmtpdEZvcmNlKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlRvdWNoIEV2ZW50cyIpCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGdmbG9hdD4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgKi8K
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Ub3VjaC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NDlkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVRvdWNoLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV2ViS2l0RE9NVG91Y2hfaAorI2RlZmluZSBXZWJLaXRET01Ub3VjaF9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVE9VQ0ggICAgICAgICAgICAod2Via2l0X2RvbV90
b3VjaF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RPVUNIKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9UT1VD
SCwgV2ViS2l0RE9NVG91Y2gpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RPVUNIX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9U
T1VDSCwgV2ViS2l0RE9NVG91Y2hDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19UT1VDSChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfVE9VQ0gpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RPVUNIX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9UT1VDSCkp
CisjZGVmaW5lIFdFQktJVF9ET01fVE9VQ0hfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RPVUNILCBXZWJLaXRET01Ub3Vj
aENsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01Ub3VjaCB7CisgICAgV2ViS2l0RE9NT2JqZWN0
IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVG91Y2hDbGFzcyB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2RvbV90b3VjaF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRf
ZG9tX3RvdWNoX2dldF9jbGllbnRfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoK
KyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3RvdWNoX2dldF9jbGllbnRfeChXZWJLaXRET01U
b3VjaCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90b3VjaF9nZXRfY2xpZW50X3k6Cisg
KiBAc2VsZjogQSAjV2ViS2l0RE9NVG91Y2gKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2Rv
bV90b3VjaF9nZXRfY2xpZW50X3koV2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdG91Y2hfZ2V0X3NjcmVlbl94OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNo
CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisq
Ki8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X3NjcmVlbl94KFdlYktp
dERPTVRvdWNoKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RvdWNoX2dldF9zY3JlZW5f
eToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEgI2dsb25n
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJr
aXRfZG9tX3RvdWNoX2dldF9zY3JlZW5feShXZWJLaXRET01Ub3VjaCogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV90b3VjaF9nZXRfcGFnZV94OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRv
dWNoCisgKgorICogUmV0dXJuczogQSAjZ2xvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X3BhZ2VfeChXZWJL
aXRET01Ub3VjaCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90b3VjaF9nZXRfcGFnZV95
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNoCisgKgorICogUmV0dXJuczogQSAjZ2xvbmcK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtp
dF9kb21fdG91Y2hfZ2V0X3BhZ2VfeShXZWJLaXRET01Ub3VjaCogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV90b3VjaF9nZXRfdGFyZ2V0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNo
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01FdmVudFRhcmdl
dAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01F
dmVudFRhcmdldCoKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X3RhcmdldChXZWJLaXRET01Ub3VjaCog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90b3VjaF9nZXRfaWRlbnRpZmllcjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21f
dG91Y2hfZ2V0X2lkZW50aWZpZXIoV2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9yYWRpdXNfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRE
T01Ub3VjaAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0
YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRf
cmFkaXVzX3goV2ViS2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdG91
Y2hfZ2V0X3dlYmtpdF9yYWRpdXNfeToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoK
KyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitX
RUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3RvdWNoX2dldF93ZWJraXRfcmFkaXVzX3koV2Vi
S2l0RE9NVG91Y2gqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtp
dF9yb3RhdGlvbl9hbmdsZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01Ub3VjaAorICoKKyAqIFJl
dHVybnM6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fdG91Y2hfZ2V0X3dlYmtpdF9yb3RhdGlvbl9hbmdsZShX
ZWJLaXRET01Ub3VjaCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90b3VjaF9nZXRfd2Vi
a2l0X2ZvcmNlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRvdWNoCisgKgorICogUmV0dXJuczog
QSAjZ2Zsb2F0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdm
bG9hdAord2Via2l0X2RvbV90b3VjaF9nZXRfd2Via2l0X2ZvcmNlKFdlYktpdERPTVRvdWNoKiBz
ZWxmKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxF
X0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVRvdWNoX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VG91Y2hQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVRvdWNoUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjhmYzBmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRvdWNoUHJp
dmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgV2ViS2l0RE9NVG91Y2hQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVG91Y2hQ
cml2YXRlX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvVG91Y2guaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NVG91Y2guaD4KKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK1dlYktpdERPTVRvdWNoKiB3cmFwVG91Y2goV2ViQ29yZTo6VG91Y2gqKTsK
K1dlYktpdERPTVRvdWNoKiBraXQoV2ViQ29yZTo6VG91Y2gqKTsKK1dlYkNvcmU6OlRvdWNoKiBj
b3JlKFdlYktpdERPTVRvdWNoKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IEVOQUJMRShUT1VDSF9FVkVOVFMpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01Ub3VjaFByaXZh
dGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmFja0V2ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJhY2tFdmVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjNGJlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVHJhY2tFdmVudC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTVRyYWNrRXZlbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVs
ZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01h
aW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVHJhY2tF
dmVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVRyYWNrRXZlbnQq
IGtpdChXZWJDb3JlOjpUcmFja0V2ZW50KiBvYmopCit7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
VFJBQ0tfRVZFTlQoa2l0KHN0YXRpY19jYXN0PFdlYkNvcmU6OkV2ZW50Kj4ob2JqKSkpOworfQor
CitXZWJDb3JlOjpUcmFja0V2ZW50KiBjb3JlKFdlYktpdERPTVRyYWNrRXZlbnQqIHJlcXVlc3Qp
Cit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUcmFja0V2ZW50
Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2Vi
S2l0RE9NVHJhY2tFdmVudCogd3JhcFRyYWNrRXZlbnQoV2ViQ29yZTo6VHJhY2tFdmVudCogY29y
ZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9E
T01fVFJBQ0tfRVZFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9UUkFDS19FVkVOVCwg
ImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKworR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UcmFja0V2ZW50LCB3ZWJraXRfZG9tX3RyYWNrX2V2ZW50LCBXRUJLSVRfRE9N
X1RZUEVfRVZFTlQpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdHJhY2tfZXZlbnRfY2xhc3Nf
aW5pdChXZWJLaXRET01UcmFja0V2ZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBVTlVT
RURfUEFSQU0ocmVxdWVzdENsYXNzKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90cmFj
a19ldmVudF9pbml0KFdlYktpdERPTVRyYWNrRXZlbnQqIHJlcXVlc3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVlc3QpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVHJhY2tFdmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjg3
MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRyYWNrRXZlbnQuaApAQCAtMCwwICsxLDUzIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRyYWNr
RXZlbnRfaAorI2RlZmluZSBXZWJLaXRET01UcmFja0V2ZW50X2gKKworI2lmZGVmIFdFQktJVF9E
T01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0
ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UWVBFX1RSQUNLX0VWRU5UICAgICAgICAgICAgKHdlYmtpdF9kb21fdHJhY2tfZXZlbnRf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9UUkFDS19FVkVOVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVFJB
Q0tfRVZFTlQsIFdlYktpdERPTVRyYWNrRXZlbnQpKQorI2RlZmluZSBXRUJLSVRfRE9NX1RSQUNL
X0VWRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9ET01fVFlQRV9UUkFDS19FVkVOVCwgV2ViS2l0RE9NVHJhY2tFdmVudENsYXNzKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1RSQUNLX0VWRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9UUkFDS19FVkVOVCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fSVNfVFJBQ0tfRVZFTlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RSQUNLX0VWRU5UKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9UUkFDS19FVkVOVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVFJBQ0tfRVZFTlQsIFdlYktp
dERPTVRyYWNrRXZlbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVHJhY2tFdmVudCB7Cisg
ICAgV2ViS2l0RE9NRXZlbnQgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01UcmFja0V2ZW50Q2xhc3MgeworICAgIFdlYktpdERPTUV2ZW50Q2xhc3MgcGFyZW50X2NsYXNz
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90cmFja19ldmVudF9nZXRfdHlw
ZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RB
QkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVRyYWNrRXZlbnRfaCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01UcmFja0V2ZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmFja0V2ZW50UHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZTlmYzgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVRyYWNrRXZlbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UcmFja0V2ZW50UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTVRyYWNrRXZlbnRQcml2YXRlX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvVHJhY2tFdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UcmFja0V2
ZW50Lmg+CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dl
YktpdERPTVRyYWNrRXZlbnQqIHdyYXBUcmFja0V2ZW50KFdlYkNvcmU6OlRyYWNrRXZlbnQqKTsK
K1dlYktpdERPTVRyYWNrRXZlbnQqIGtpdChXZWJDb3JlOjpUcmFja0V2ZW50Kik7CitXZWJDb3Jl
OjpUcmFja0V2ZW50KiBjb3JlKFdlYktpdERPTVRyYWNrRXZlbnQqKTsKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworCisjZW5kaWYgLyog
V2ViS2l0RE9NVHJhY2tFdmVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fs
a2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGI3Yjg1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtlci5jcHAK
QEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UcmVlV2Fsa2VyLmgiCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAi
V2ViS2l0RE9NTm9kZUZpbHRlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01UcmVlV2Fsa2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVm
aW5lIFdFQktJVF9ET01fVFJFRV9XQUxLRVJfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVFJFRV9XQUxLRVIsIFdlYktpdERP
TVRyZWVXYWxrZXJQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVHJlZVdhbGtl
clByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUcmVlV2Fsa2VyPiBjb3JlT2JqZWN0Owor
fSBXZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YktpdERPTVRyZWVXYWxrZXIqIGtpdChXZWJDb3JlOjpUcmVlV2Fsa2VyKiBvYmopCit7CisgICAg
aWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERP
TU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVFJFRV9X
QUxLRVIocmV0KTsKKworICAgIHJldHVybiB3cmFwVHJlZVdhbGtlcihvYmopOworfQorCitXZWJD
b3JlOjpUcmVlV2Fsa2VyKiBjb3JlKFdlYktpdERPTVRyZWVXYWxrZXIqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUcmVlV2Fsa2VyKj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9N
VHJlZVdhbGtlciogd3JhcFRyZWVXYWxrZXIoV2ViQ29yZTo6VHJlZVdhbGtlciogY29yZU9iamVj
dCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVFJF
RV9XQUxLRVIoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUiwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UcmVlV2Fsa2VyLCB3ZWJraXRfZG9tX3RyZWVf
d2Fsa2VyLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9ST09ULAorICAgIFBST1BfV0hBVF9UT19TSE9XLAorICAgIFBST1BfRklMVEVSLAor
ICAgIFBST1BfQ1VSUkVOVF9OT0RFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90cmVl
X3dhbGtlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVHJlZVdh
bGtlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RSRUVfV0FMS0VSX0dFVF9QUklWQVRFKG9i
amVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGUoKTsK
KyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdHJlZV93YWxr
ZXJfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVHJlZVdhbGtlciog
c2VsZiA9IFdFQktJVF9ET01fVFJFRV9XQUxLRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJv
cGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9ST09UOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X3Jvb3Qoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfV0hBVF9UT19TSE9XOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfd2hhdF90b19zaG93KHNl
bGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZJTFRFUjoKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9maWx0ZXIo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VSUkVOVF9OT0RFOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0
X2N1cnJlbnRfbm9kZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Vi
a2l0X2RvbV90cmVlX3dhbGtlcl9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1
Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVy
dGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X3RyZWVfd2Fsa2VyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01UcmVl
V2Fsa2VyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVFJFRV9XQUxLRVJfR0VUX1BSSVZBVEUo
b2JqZWN0KTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VHJl
ZVdhbGtlcio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdl
YktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3Qp
OworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90cmVl
X3dhbGtlcl9jbGFzc19pbml0KFdlYktpdERPTVRyZWVXYWxrZXJDbGFzcyogcmVxdWVzdENsYXNz
KQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVx
dWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBz
aXplb2YoV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdG9yID0gd2Via2l0X2RvbV90cmVlX3dhbGtlcl9jb25zdHJ1Y3RvcjsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90cmVlX3dhbGtlcl9maW5hbGl6ZTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0
X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1JPT1QsCisgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoCisgICAgICAgICAgICAicm9vdCIsCisgICAgICAgICAgICAiVHJlZVdhbGtlcjpy
b290IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NTm9kZSogVHJlZVdhbGtlcjpy
b290IiwKKyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0hBVF9UT19TSE9XLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAid2hhdC10by1zaG93IiwK
KyAgICAgICAgICAgICJUcmVlV2Fsa2VyOndoYXQtdG8tc2hvdyIsCisgICAgICAgICAgICAicmVh
ZC1vbmx5IGd1bG9uZyBUcmVlV2Fsa2VyOndoYXQtdG8tc2hvdyIsCisgICAgICAgICAgICAwLCBH
X01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfRklMVEVSLAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAg
ICAgICAgICAgImZpbHRlciIsCisgICAgICAgICAgICAiVHJlZVdhbGtlcjpmaWx0ZXIiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBXZWJLaXRET01Ob2RlRmlsdGVyKiBUcmVlV2Fsa2VyOmZpbHRl
ciIsCisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERV9GSUxURVIsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9DVVJSRU5UX05P
REUsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAiY3VycmVudC1u
b2RlIiwKKyAgICAgICAgICAgICJUcmVlV2Fsa2VyOmN1cnJlbnQtbm9kZSIsCisgICAgICAgICAg
ICAicmVhZC1vbmx5IFdlYktpdERPTU5vZGUqIFRyZWVXYWxrZXI6Y3VycmVudC1ub2RlIiwKKyAg
ICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9OT0RFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90cmVlX3dhbGtlcl9p
bml0KFdlYktpdERPTVRyZWVXYWxrZXIqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVHJlZVdh
bGtlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RSRUVfV0FMS0VSX0dFVF9QUklWQVRFKHJl
cXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVHJlZVdhbGtlclByaXZhdGUoKTsKK30K
KworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9wYXJlbnRfbm9kZShXZWJL
aXRET01UcmVlV2Fsa2VyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVf
V0FMS0VSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+cGFyZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdHJl
ZV93YWxrZXJfZmlyc3RfY2hpbGQoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6
VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmZpcnN0Q2hpbGQoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2xhc3RfY2hpbGQoV2ViS2l0RE9NVHJl
ZVdhbGtlciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0
UHRyKGl0ZW0tPmxhc3RDaGlsZCgpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJl
c3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJf
cHJldmlvdXNfc2libGluZyhXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUcmVl
V2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpO
b2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+cHJldmlvdXNTaWJsaW5nKCkp
OworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2Vi
S2l0RE9NTm9kZSogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9uZXh0X3NpYmxpbmcoV2ViS2l0RE9N
VHJlZVdhbGtlciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtF
UihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6
Z2V0UHRyKGl0ZW0tPm5leHRTaWJsaW5nKCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2Jq
ZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZSogd2Via2l0X2RvbV90cmVlX3dh
bGtlcl9wcmV2aW91c19ub2RlKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRy
ZWVXYWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6
Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5wcmV2aW91c05vZGUoKSk7
CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJL
aXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX25leHRfbm9kZShXZWJLaXRET01UcmVl
V2Fsa2VyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+bmV4dE5vZGUoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdvYmplY3RSZXN1
bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dl
dF9yb290KFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVFJFRV9XQUxLRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRyZWVXYWxrZXIqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5yb290KCkpOworICAgIHJldHVybiBXZWJLaXQ6
OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ3Vsb25nIHdlYmtpdF9kb21fdHJlZV93
YWxrZXJfZ2V0X3doYXRfdG9fc2hvdyhXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1
bHQgPSBpdGVtLT53aGF0VG9TaG93KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViS2l0
RE9NTm9kZUZpbHRlciogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfZmlsdGVyKFdlYktpdERP
TVRyZWVXYWxrZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVFJFRV9XQUxL
RVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRyZWVXYWxrZXIqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVGaWx0ZXI+IGdvYmplY3RSZXN1bHQg
PSBXVEY6OmdldFB0cihpdGVtLT5maWx0ZXIoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3RyZWVf
d2Fsa2VyX2dldF9jdXJyZW50X25vZGUoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZikKK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6VHJlZVdhbGtlciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmN1cnJlbnROb2Rl
KCkpOworICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKwor
dm9pZCB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3NldF9jdXJyZW50X25vZGUoV2ViS2l0RE9NVHJl
ZVdhbGtlciogc2VsZiwgV2ViS2l0RE9NTm9kZSogdmFsdWUsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIoc2VsZikpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKHZhbHVlKSk7CisgICAgVU5VU0VEX1BBUkFNKGVycm9y
KTsKKyAgICBXZWJDb3JlOjpUcmVlV2Fsa2VyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6Ok5vZGUqIGNvbnZlcnRlZFZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsK
KyAgICBpdGVtLT5zZXRDdXJyZW50Tm9kZSgqY29udmVydGVkVmFsdWUpOworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVRyZWVXYWxrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVHJlZVdhbGtlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzVhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVRy
ZWVXYWxrZXIuaApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lURE9NX0hfSU5TSURFX18pICYmICFkZWZpbmVkKEJV
SUxESU5HX1dFQktJVCkKKyNlcnJvciAiT25seSA8d2Via2l0ZG9tL3dlYmtpdGRvbS5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RE9NVHJlZVdh
bGtlcl9oCisjZGVmaW5lIFdlYktpdERPTVRyZWVXYWxrZXJfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9UUkVFX1dBTEtFUiAgICAgICAgICAgICh3ZWJraXRfZG9tX3Ry
ZWVfd2Fsa2VyX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVFJFRV9XQUxLRVIob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1RSRUVfV0FMS0VSLCBXZWJLaXRET01UcmVlV2Fsa2VyKSkKKyNkZWZpbmUgV0VCS0lU
X0RPTV9UUkVFX1dBTEtFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVFJFRV9XQUxLRVIsIFdlYktpdERPTVRyZWVXYWxr
ZXJDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19UUkVFX1dBTEtFUihvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVFJFRV9X
QUxLRVIpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9UUkVFX1dB
TEtFUikpCisjZGVmaW5lIFdFQktJVF9ET01fVFJFRV9XQUxLRVJfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1RSRUVfV0FM
S0VSLCBXZWJLaXRET01UcmVlV2Fsa2VyQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRyZWVX
YWxrZXIgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1
Y3QgX1dlYktpdERPTVRyZWVXYWxrZXJDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90cmVlX3dh
bGtlcl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3Bh
cmVudF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9wYXJlbnRfbm9kZShXZWJLaXRE
T01UcmVlV2Fsa2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2Zp
cnN0X2NoaWxkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBX
ZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9maXJzdF9jaGlsZChXZWJLaXRE
T01UcmVlV2Fsa2VyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2xh
c3RfY2hpbGQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJldHVy
bnM6ICh0cmFuc2ZlciBub25lKTogQSAjV2ViS2l0RE9NTm9kZQorKiovCitXRUJLSVRfQVBJIFdl
YktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2xhc3RfY2hpbGQoV2ViS2l0RE9N
VHJlZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9wcmV2
aW91c19zaWJsaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAqCisgKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9wcmV2aW91c19zaWJsaW5n
KFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93
YWxrZXJfbmV4dF9zaWJsaW5nOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VC
S0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9uZXh0X3NpYmxp
bmcoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVl
X3dhbGtlcl9wcmV2aW91c19ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9wcmV2aW91
c19ub2RlKFdlYktpdERPTVRyZWVXYWxrZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
dHJlZV93YWxrZXJfbmV4dF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIK
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLwor
V0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9uZXh0X25v
ZGUoV2ViS2l0RE9NVHJlZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVl
X3dhbGtlcl9nZXRfcm9vdDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKgor
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJLaXRET01Ob2RlCisqKi8KK1dFQktJ
VF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0X3Jvb3QoV2Vi
S2l0RE9NVHJlZVdhbGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtl
cl9nZXRfd2hhdF90b19zaG93OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAq
CisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9k
b21fdHJlZV93YWxrZXJfZ2V0X3doYXRfdG9fc2hvdyhXZWJLaXRET01UcmVlV2Fsa2VyKiBzZWxm
KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9maWx0ZXI6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVHJlZVdhbGtlcgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxs
KTogQSAjV2ViS2l0RE9NTm9kZUZpbHRlcgorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTU5vZGVG
aWx0ZXIqCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9maWx0ZXIoV2ViS2l0RE9NVHJlZVdh
bGtlciogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfY3VycmVu
dF9ub2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRyZWVXYWxrZXIKKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01Ob2RlKgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfY3VycmVudF9ub2RlKFdlYktp
dERPTVRyZWVXYWxrZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdHJlZV93YWxrZXJf
c2V0X2N1cnJlbnRfbm9kZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UcmVlV2Fsa2VyCisgKiBA
dmFsdWU6IEEgI1dlYktpdERPTU5vZGUKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyoqLworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3NldF9jdXJyZW50X25vZGUoV2Vi
S2l0RE9NVHJlZVdhbGtlciogc2VsZiwgV2ViS2l0RE9NTm9kZSogdmFsdWUsIEdFcnJvcioqIGVy
cm9yKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVRyZWVXYWxrZXJfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01UcmVlV2Fsa2Vy
UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmFkMTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UcmVl
V2Fsa2VyUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRyZWVXYWxrZXJQcml2YXRlX2gKKwor
I2luY2x1ZGUgPFdlYkNvcmUvVHJlZVdhbGtlci5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01UcmVlV2Fsa2VyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVHJlZVdh
bGtlciogd3JhcFRyZWVXYWxrZXIoV2ViQ29yZTo6VHJlZVdhbGtlciopOworV2ViS2l0RE9NVHJl
ZVdhbGtlcioga2l0KFdlYkNvcmU6OlRyZWVXYWxrZXIqKTsKK1dlYkNvcmU6OlRyZWVXYWxrZXIq
IGNvcmUoV2ViS2l0RE9NVHJlZVdhbGtlciopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBXZWJLaXRET01UcmVlV2Fsa2VyUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVVJRXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wYmM0NTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50LmNwcApA
QCAtMCwwICsxLDMwNiBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVVJRXZlbnQuaCIKKworI2luY2x1ZGUg
PFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9u
Q29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJL
aXRET01ET01XaW5kb3dQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVVJ
RXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1
ZGUgIldlYktpdERPTVVJRXZlbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01VSUV2ZW50KiBraXQoV2ViQ29yZTo6VUlFdmVudCogb2JqKQoreworICAgIHJldHVybiBXRUJL
SVRfRE9NX1VJX0VWRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpFdmVudCo+KG9iaikpKTsK
K30KKworV2ViQ29yZTo6VUlFdmVudCogY29yZShXZWJLaXRET01VSUV2ZW50KiByZXF1ZXN0KQor
eworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VUlFdmVudCo+KFdF
QktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERP
TVVJRXZlbnQqIHdyYXBVSUV2ZW50KFdlYkNvcmU6OlVJRXZlbnQqIGNvcmVPYmplY3QpCit7Cisg
ICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1VJX0VWRU5UKGdf
b2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQsICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NVUlFdmVudCwgd2Via2l0X2RvbV91aV9ldmVudCwgV0VCS0lUX0RPTV9U
WVBFX0VWRU5UKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9WSUVXLAorICAgIFBS
T1BfREVUQUlMLAorICAgIFBST1BfS0VZX0NPREUsCisgICAgUFJPUF9DSEFSX0NPREUsCisgICAg
UFJPUF9MQVlFUl9YLAorICAgIFBST1BfTEFZRVJfWSwKKyAgICBQUk9QX1BBR0VfWCwKKyAgICBQ
Uk9QX1BBR0VfWSwKKyAgICBQUk9QX1dISUNILAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV91aV9ldmVudF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01VSUV2
ZW50KiBzZWxmID0gV0VCS0lUX0RPTV9VSV9FVkVOVChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZJRVc6CisgICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfdmlldyhzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVRBSUw6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmco
dmFsdWUsIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2RldGFpbChzZWxmKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9LRVlfQ09ERToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfa2V5X2NvZGUoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQ0hBUl9DT0RFOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25n
KHZhbHVlLCB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9jaGFyX2NvZGUoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfTEFZRVJfWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9u
Zyh2YWx1ZSwgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfbGF5ZXJfeChzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9MQVlFUl9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25n
KHZhbHVlLCB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9sYXllcl95KHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1BBR0VfWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV94KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1BBR0VfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1dISUNIOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3
ZWJraXRfZG9tX3VpX2V2ZW50X2dldF93aGljaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3VpX2V2ZW50X2NsYXNzX2luaXQoV2ViS2l0RE9NVUlFdmVudENs
YXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV91aV9ldmVudF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfVklFVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJ2aWV3
IiwKKyAgICAgICAgICAgICJVSUV2ZW50OnZpZXciLAorICAgICAgICAgICAgInJlYWQtb25seSBX
ZWJLaXRET01ET01XaW5kb3cqIFVJRXZlbnQ6dmlldyIsCisgICAgICAgICAgICBXRUJLSVRfRE9N
X1RZUEVfRE9NX1dJTkRPVywKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX0RFVEFJTCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisg
ICAgICAgICAgICAiZGV0YWlsIiwKKyAgICAgICAgICAgICJVSUV2ZW50OmRldGFpbCIsCisgICAg
ICAgICAgICAicmVhZC1vbmx5IGdsb25nIFVJRXZlbnQ6ZGV0YWlsIiwKKyAgICAgICAgICAgIEdf
TUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfS0VZX0NPREUsCisgICAgICAgIGdfcGFyYW1fc3BlY19s
b25nKAorICAgICAgICAgICAgImtleS1jb2RlIiwKKyAgICAgICAgICAgICJVSUV2ZW50OmtleS1j
b2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgVUlFdmVudDprZXktY29kZSIsCisg
ICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
KyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0NIQVJfQ09ERSwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAiY2hhci1jb2RlIiwKKyAgICAgICAgICAg
ICJVSUV2ZW50OmNoYXItY29kZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFVJRXZl
bnQ6Y2hhci1jb2RlIiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfTEFZ
RVJfWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAibGF5ZXIteCIs
CisgICAgICAgICAgICAiVUlFdmVudDpsYXllci14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z2xvbmcgVUlFdmVudDpsYXllci14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05H
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfTEFZRVJfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAi
bGF5ZXIteSIsCisgICAgICAgICAgICAiVUlFdmVudDpsYXllci15IiwKKyAgICAgICAgICAgICJy
ZWFkLW9ubHkgZ2xvbmcgVUlFdmVudDpsYXllci15IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywg
R19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfUEFHRV9YLAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygKKyAgICAg
ICAgICAgICJwYWdlLXgiLAorICAgICAgICAgICAgIlVJRXZlbnQ6cGFnZS14IiwKKyAgICAgICAg
ICAgICJyZWFkLW9ubHkgZ2xvbmcgVUlFdmVudDpwYWdlLXgiLAorICAgICAgICAgICAgR19NSU5M
T05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9QQUdFX1ksCisgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKAor
ICAgICAgICAgICAgInBhZ2UteSIsCisgICAgICAgICAgICAiVUlFdmVudDpwYWdlLXkiLAorICAg
ICAgICAgICAgInJlYWQtb25seSBnbG9uZyBVSUV2ZW50OnBhZ2UteSIsCisgICAgICAgICAgICBH
X01JTkxPTkcsIEdfTUFYTE9ORywgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJM
RSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29i
amVjdENsYXNzLAorICAgICAgICBQUk9QX1dISUNILAorICAgICAgICBnX3BhcmFtX3NwZWNfbG9u
ZygKKyAgICAgICAgICAgICJ3aGljaCIsCisgICAgICAgICAgICAiVUlFdmVudDp3aGljaCIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFVJRXZlbnQ6d2hpY2giLAorICAgICAgICAgICAg
R19NSU5MT05HLCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3VpX2V2ZW50X2luaXQoV2ViS2l0
RE9NVUlFdmVudCogcmVxdWVzdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWVzdCk7Cit9CisK
K3ZvaWQgd2Via2l0X2RvbV91aV9ldmVudF9pbml0X3VpX2V2ZW50KFdlYktpdERPTVVJRXZlbnQq
IHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlLCBnYm9vbGVhbiBjYW5CdWJibGUsIGdib29sZWFuIGNh
bmNlbGFibGUsIFdlYktpdERPTURPTVdpbmRvdyogdmlldywgZ2xvbmcgZGV0YWlsKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9ET01fSVNfVUlfRVZFTlQoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dHlwZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RPTV9XSU5ET1codmll
dykpOworICAgIFdlYkNvcmU6OlVJRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkVHlwZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0eXBl
KTsKKyAgICBXZWJDb3JlOjpET01XaW5kb3cqIGNvbnZlcnRlZFZpZXcgPSBXZWJLaXQ6OmNvcmUo
dmlldyk7CisgICAgaXRlbS0+aW5pdFVJRXZlbnQoY29udmVydGVkVHlwZSwgY2FuQnViYmxlLCBj
YW5jZWxhYmxlLCBjb252ZXJ0ZWRWaWV3LCBkZXRhaWwpOworfQorCitXZWJLaXRET01ET01XaW5k
b3cqIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3ZpZXcoV2ViS2l0RE9NVUlFdmVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19VSV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2Vi
Q29yZTo6VUlFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6RE9NV2luZG93PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+dmlldygp
KTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK2ds
b25nIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2RldGFpbChXZWJLaXRET01VSUV2ZW50KiBzZWxm
KQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpVSUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJl
c3VsdCA9IGl0ZW0tPmRldGFpbCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdl
YmtpdF9kb21fdWlfZXZlbnRfZ2V0X2tleV9jb2RlKFdlYktpdERPTVVJRXZlbnQqIHNlbGYpCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVUlfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OlVJRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0
ID0gaXRlbS0+a2V5Q29kZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtp
dF9kb21fdWlfZXZlbnRfZ2V0X2NoYXJfY29kZShXZWJLaXRET01VSUV2ZW50KiBzZWxmKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3Jl
OjpVSUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9
IGl0ZW0tPmNoYXJDb2RlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0
X2RvbV91aV9ldmVudF9nZXRfbGF5ZXJfeChXZWJLaXRET01VSUV2ZW50KiBzZWxmKQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpV
SUV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0
ZW0tPmxheWVyWCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21f
dWlfZXZlbnRfZ2V0X2xheWVyX3koV2ViS2l0RE9NVUlFdmVudCogc2VsZikKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19VSV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VUlFdmVu
dCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5s
YXllclkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnbG9uZyB3ZWJraXRfZG9tX3VpX2V2
ZW50X2dldF9wYWdlX3goV2ViS2l0RE9NVUlFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19VSV9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VUlFdmVudCogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5wYWdlWCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0
X3BhZ2VfeShXZWJLaXRET01VSUV2ZW50KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1VJX0VWRU5UKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpVSUV2ZW50KiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlc3VsdCA9IGl0ZW0tPnBhZ2VZKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworZ2xvbmcgd2Via2l0X2RvbV91aV9ldmVudF9nZXRfd2hpY2go
V2ViS2l0RE9NVUlFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19VSV9F
VkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VUlFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT53aGljaCgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlNmZiNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVUlFdmVudC5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVRET01fSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoQlVJTERJTkdfV0VCS0lUKQorI2Vycm9yICJPbmx5IDx3ZWJraXRkb20vd2Via2l0
ZG9tLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRET01VSUV2ZW50X2gKKyNkZWZpbmUgV2ViS2l0RE9NVUlFdmVudF9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01FdmVudC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQgICAgICAgICAgICAod2Via2l0X2RvbV91
aV9ldmVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VJX0VWRU5UKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9VSV9FVkVOVCwgV2ViS2l0RE9NVUlFdmVudCkpCisjZGVmaW5lIFdFQktJVF9ET01fVUlfRVZF
TlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VC
S0lUX0RPTV9UWVBFX1VJX0VWRU5ULCBXZWJLaXRET01VSUV2ZW50Q2xhc3MpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfVUlfRVZFTlQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1VJX0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19VSV9FVkVOVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfRE9NX1RZUEVfVUlfRVZFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VJX0VW
RU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9ET01fVFlQRV9VSV9FVkVOVCwgV2ViS2l0RE9NVUlFdmVudENsYXNzKSkKKworc3RydWN0
IF9XZWJLaXRET01VSUV2ZW50IHsKKyAgICBXZWJLaXRET01FdmVudCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVVJRXZlbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NRXZl
bnRDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9t
X3VpX2V2ZW50X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdWlfZXZlbnRf
aW5pdF91aV9ldmVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01VSUV2ZW50CisgKiBAdHlwZTog
QSAjZ2NoYXIKKyAqIEBjYW5CdWJibGU6IEEgI2dib29sZWFuCisgKiBAY2FuY2VsYWJsZTogQSAj
Z2Jvb2xlYW4KKyAqIEB2aWV3OiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBkZXRhaWw6IEEg
I2dsb25nCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdWlfZXZlbnRfaW5p
dF91aV9ldmVudChXZWJLaXRET01VSUV2ZW50KiBzZWxmLCBjb25zdCBnY2hhciogdHlwZSwgZ2Jv
b2xlYW4gY2FuQnViYmxlLCBnYm9vbGVhbiBjYW5jZWxhYmxlLCBXZWJLaXRET01ET01XaW5kb3cq
IHZpZXcsIGdsb25nIGRldGFpbCk7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9nZXRf
dmlldzoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01VSUV2ZW50CisgKgorICogUmV0dXJuczogKHRy
YW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01ET01XaW5kb3cKKyoqLworV0VCS0lUX0FQSSBXZWJL
aXRET01ET01XaW5kb3cqCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF92aWV3KFdlYktpdERPTVVJ
RXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2RldGFpbDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01VSUV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2xvbmcK
KyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV91aV9ldmVudF9nZXRfZGV0YWlsKFdl
YktpdERPTVVJRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0
X2tleV9jb2RlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dl
dF9rZXlfY29kZShXZWJLaXRET01VSUV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3VpX2V2ZW50X2dldF9jaGFyX2NvZGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVUlFdmVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dFQktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9k
b21fdWlfZXZlbnRfZ2V0X2NoYXJfY29kZShXZWJLaXRET01VSUV2ZW50KiBzZWxmKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9sYXllcl94OgorICogQHNlbGY6IEEgI1dlYktp
dERPTVVJRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGds
b25nCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9sYXllcl94KFdlYktpdERPTVVJRXZlbnQqIHNl
bGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2xheWVyX3k6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVUlFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisqKi8KK1dF
QktJVF9BUEkgZ2xvbmcKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X2xheWVyX3koV2ViS2l0RE9N
VUlFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9nZXRfcGFnZV94
OgorICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9u
ZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9wYWdlX3go
V2ViS2l0RE9NVUlFdmVudCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9n
ZXRfcGFnZV95OgorICogQHNlbGY6IEEgI1dlYktpdERPTVVJRXZlbnQKKyAqCisgKiBSZXR1cm5z
OiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dl
dF9wYWdlX3koV2ViS2l0RE9NVUlFdmVudCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXZWJLaXRET01VSUV2ZW50X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVUlFdmVudFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lOWU0MzY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50UHJpdmF0ZS5o
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0RE9NVUlFdmVudFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01VSUV2ZW50UHJp
dmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1VJRXZlbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NVUlFdmVudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVVJ
RXZlbnQqIHdyYXBVSUV2ZW50KFdlYkNvcmU6OlVJRXZlbnQqKTsKK1dlYktpdERPTVVJRXZlbnQq
IGtpdChXZWJDb3JlOjpVSUV2ZW50Kik7CitXZWJDb3JlOjpVSUV2ZW50KiBjb3JlKFdlYktpdERP
TVVJRXZlbnQqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogV2ViS2l0RE9N
VUlFdmVudFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01VSUV2ZW50VW5zdGFibGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVUlFdmVudFVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWFkMTkxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVUlFdmVudFVuc3RhYmxlLmgKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRET01VSUV2ZW50VW5zdGFibGVfaAorI2RlZmluZSBXZWJLaXRET01VSUV2ZW50VW5zdGFi
bGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3
ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisK
Ky8qKgorICogd2Via2l0X2RvbV91aV9ldmVudF9nZXRfd2hpY2g6CisgKiBAc2VsZjogQSAjV2Vi
S2l0RE9NVUlFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dsb25nCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dl
dF93aGljaChXZWJLaXRET01VSUV2ZW50KiBzZWxmKTsKKworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
VUlFdmVudFVuc3RhYmxlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iN2NmZjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVXNlck1lc3Nh
Z2VIYW5kbGVyLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNs
dWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVXNlck1lc3Nh
Z2VIYW5kbGVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5l
IFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hB
TkRMRVIsIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZhdGUpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlIHsKKyNpZiBFTkFCTEUoVVNF
Ul9NRVNTQUdFX0hBTkRMRVJTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRs
ZXI+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykK
K30gV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZTsKKworI2lmIEVOQUJMRShVU0VS
X01FU1NBR0VfSEFORExFUlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01Vc2Vy
TWVzc2FnZUhhbmRsZXIqIGtpdChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXIqIG9iaikKK3sK
KyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9V
U0VSX01FU1NBR0VfSEFORExFUihyZXQpOworCisgICAgcmV0dXJuIHdyYXBVc2VyTWVzc2FnZUhh
bmRsZXIob2JqKTsKK30KKworV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyKiBjb3JlKFdlYktp
dERPTVVzZXJNZXNzYWdlSGFuZGxlciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcio+KFdFQktJVF9ET01fT0JK
RUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlciogd3JhcFVzZXJNZXNzYWdlSGFuZGxlcihXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRs
ZXIqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfVVNFUl9NRVNTQUdFX0hBTkRMRVIsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoVVNF
Ul9NRVNTQUdFX0hBTkRMRVJTKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlciwgd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlciwgV0VCS0lUX0RPTV9UWVBF
X09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5k
bGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJfR0VUX1BS
SVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIFdl
YktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNl
bmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIHByaXYtPn5XZWJLaXRE
T01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9j
b25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdP
YmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0
KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVy
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgY29uc3RydWN0UHJvcGVydGllcyk7CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVS
UykKKyAgICBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9VU0VSX01FU1NBR0VfSEFORExFUl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYt
PmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXIqPihX
RUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9i
amVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAv
LyBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfY2xhc3NfaW5pdChX
ZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3Ry
dWN0b3IgPSB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX2NvbnN0cnVjdG9yOworICAg
IGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVy
X2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5k
bGVyX2luaXQoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyKiByZXF1ZXN0KQoreworICAgIFdl
YktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1VTRVJf
TUVTU0FHRV9IQU5ETEVSX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZSgpOworfQorCit2b2lkIHdlYmtpdF9kb21f
dXNlcl9tZXNzYWdlX2hhbmRsZXJfcG9zdF9tZXNzYWdlKFdlYktpdERPTVVzZXJNZXNzYWdlSGFu
ZGxlciogc2VsZiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIEdFcnJvcioqIGVycm9yKQoreworI2lm
IEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19VU0VS
X01FU1NBR0VfSEFORExFUihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChtZXNzYWdlKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAgICBXZWJDb3JlOjpV
c2VyTWVzc2FnZUhhbmRsZXIqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+cG9zdE1lc3NhZ2UoV2ViQ29yZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1lc3Nh
Z2UpKSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJv
ciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNj
Lm5hbWUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNF
RF9QQVJBTShtZXNzYWdlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlVzZXIgTWVzc2FnZSBIYW5kbGVycyIpCisjZW5kaWYg
LyogRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01Vc2VyTWVzc2FnZUhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3MDQyYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJf
aAorI2RlZmluZSBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJfaAorCisjaWZkZWYgV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Vi
a2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSICAgICAgICAgICAgKHdlYmtpdF9kb21f
dXNlcl9tZXNzYWdlX2hhbmRsZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9VU0VS
X01FU1NBR0VfSEFORExFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVIsIFdlYktpdERP
TVVzZXJNZXNzYWdlSGFuZGxlcikpCisjZGVmaW5lIFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hB
TkRMRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSLCBXZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXJDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19VU0VSX01FU1NBR0VfSEFORExF
UihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
RE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVIpKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1VT
RVJfTUVTU0FHRV9IQU5ETEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUikpCisjZGVmaW5l
IFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9I
QU5ETEVSLCBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJDbGFzcykpCisKK3N0cnVjdCBfV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyIHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJDbGFzcyB7
CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQ
SSBHVHlwZQord2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcl9nZXRfdHlwZSh2b2lkKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyX3Bvc3RfbWVzc2FnZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXIKKyAqIEBtZXNzYWdlOiBB
ICNnY2hhcgorICogQGVycm9yOiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJfcG9z
dF9tZXNzYWdlKFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlciogc2VsZiwgY29uc3QgZ2NoYXIq
IG1lc3NhZ2UsIEdFcnJvcioqIGVycm9yKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdlYktpdERPTVVzZXJNZXNz
YWdlSGFuZGxlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI0YWJhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJN
ZXNzYWdlSGFuZGxlclByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlclByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJQcml2YXRlX2gKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvVXNlck1lc3NhZ2VIYW5kbGVyLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlci5oPgorI2lmIEVOQUJMRShVU0VSX01FU1NBR0Vf
SEFORExFUlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5k
bGVyKiB3cmFwVXNlck1lc3NhZ2VIYW5kbGVyKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlciop
OworV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyKiBraXQoV2ViQ29yZTo6VXNlck1lc3NhZ2VI
YW5kbGVyKik7CitXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXIqIGNvcmUoV2ViS2l0RE9NVXNl
ck1lc3NhZ2VIYW5kbGVyKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVO
QUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01Vc2Vy
TWVzc2FnZUhhbmRsZXJQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVXNlck1lc3NhZ2VI
YW5kbGVyc05hbWVzcGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMTdiZDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuY3BwCkBAIC0wLDAg
KzEsMTEwIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5o
IgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgor
I2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Vc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCisjZGVmaW5lIFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRV9H
RVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9E
T01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFLCBXZWJLaXRET01Vc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlIHsKKyNpZiBFTkFCTEUoVVNFUl9N
RVNTQUdFX0hBTkRMRVJTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlPiBjb3JlT2JqZWN0OworI2VuZGlmIC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFO
RExFUlMpCit9IFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlOwor
CisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqIGtpdChXZWJDb3JlOjpV
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpn
ZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fVVNFUl9NRVNTQUdFX0hBTkRMRVJT
X05BTUVTUEFDRShyZXQpOworCisgICAgcmV0dXJuIHdyYXBVc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlKG9iaik7Cit9CisKK1dlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uq
IGNvcmUoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSogcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkg
OiAwOworfQorCitXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiB3cmFwVXNl
ck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZShXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFt
ZXNwYWNlKiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1
cm4gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFKGdfb2JqZWN0X25l
dyhXRUJLSVRfRE9NX1RZUEVfVVNFUl9NRVNTQUdFX0hBTkRMRVJTX05BTUVTUEFDRSwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSwgd2Via2l0X2RvbV91
c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFtZXNwYWNlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyc19uYW1lc3BhY2Vf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVVzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2VQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFO
RExFUlNfTkFNRVNQQUNFX0dFVF9QUklWQVRFKG9iamVjdCk7CisjaWYgRU5BQkxFKFVTRVJfTUVT
U0FHRV9IQU5ETEVSUykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+
Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVS
UykKKyAgICBwcml2LT5+V2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZh
dGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVy
c19uYW1lc3BhY2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGlj
IEdPYmplY3QqIHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9jb25z
dHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmpl
Y3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBv
YmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyc19u
YW1lc3BhY2VfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVy
dGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdF
X0hBTkRMRVJTKQorICAgIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFX0dF
VF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqPihXRUJLSVRfRE9NX09CSkVDVChv
YmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKyNlbmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9jbGFzc19pbml0KFdlYktpdERP
TVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGUpKTsKKyAgICBnb2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV91c2VyX21lc3NhZ2VfaGFuZGxlcnNfbmFt
ZXNwYWNlX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZG9tX3VzZXJfbWVzc2FnZV9oYW5kbGVyc19uYW1lc3BhY2VfZmluYWxpemU7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9pbml0KFdl
YktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqIHJlcXVlc3QpCit7CisgICAgV2Vi
S2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCk7
CisgICAgbmV3IChwcml2KSBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJp
dmF0ZSgpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3Bh
Y2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0N2JhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVz
ZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2VfaAorI2RlZmluZSBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNw
YWNlX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUN1c3RvbVVuc3RhYmxlLmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNF
ICAgICAgICAgICAgKHdlYmtpdF9kb21fdXNlcl9tZXNzYWdlX2hhbmRsZXJzX25hbWVzcGFjZV9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1F
U1BBQ0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UsIFdlYktpdERP
TVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UpKQorI2RlZmluZSBXRUJLSVRfRE9NX1VTRVJf
TUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVS
U19OQU1FU1BBQ0UsIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDbGFzcykK
KyNkZWZpbmUgV0VCS0lUX0RPTV9JU19VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01f
VFlQRV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9JU19VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNFX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0Vf
SEFORExFUlNfTkFNRVNQQUNFKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9VU0VSX01FU1NBR0VfSEFO
RExFUlNfTkFNRVNQQUNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9VU0VSX01FU1NBR0VfSEFORExFUlNfTkFNRVNQQUNF
LCBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlQ2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UgeworICAgIFdlYktpdERPTU9i
amVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVVzZXJNZXNzYWdl
SGFuZGxlcnNOYW1lc3BhY2VDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV91c2VyX21lc3NhZ2Vf
aGFuZGxlcnNfbmFtZXNwYWNlX2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9N
VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNO
YW1lc3BhY2VQcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENsYXNz
V2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVVzZXJNZXNz
YWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlLmgKaW5kZXggODc4YjYyMi4uMDI0MWUwYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGUuaApAQCAtMTgsMTYgKzE4LDE5
IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JQcml2YXRlX2gKLSNkZWZpbmUg
V2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0ZV9oCisjaWZu
ZGVmIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlX2gKKyNkZWZp
bmUgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZVByaXZhdGVfaAogCi0jaW5j
bHVkZSAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTVRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmg+CisjaWYg
RU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJL
aXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIHdyYXBUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0
cnVjdG9yKik7Ci1XZWJLaXRET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqIGtp
dChXZWJDb3JlOjpUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKTsKLVdlYkNvcmU6
OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29yZShXZWJLaXRET01UZXN0Q2xh
c3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IqKTsKK1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2UqIHdyYXBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKFdlYkNvcmU6OlVz
ZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqKTsKK1dlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxl
cnNOYW1lc3BhY2UqIGtpdChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKik7
CitXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKiBjb3JlKFdlYktpdERPTVVz
ZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0j
ZW5kaWYgLyogV2ViS2l0RE9NVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJpdmF0
ZV9oICovCisjZW5kaWYgLyogRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykgKi8KKworI2Vu
ZGlmIC8qIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VQcml2YXRlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTUyZjcxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01WVFRDdWUuY3BwCkBAIC0wLDAgKzEsNTkyIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJl
ZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVlRUQ3VlLmgi
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmpl
Y3RDYWNoZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0V4Y2VwdGlvbkNvZGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oPgorI2luY2x1ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Eb2N1
bWVudEZyYWdtZW50UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTUV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRleHRUcmFja0N1ZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01WVFRDdWVQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRG
OFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitX
ZWJLaXRET01WVFRDdWUqIGtpdChXZWJDb3JlOjpWVFRDdWUqIG9iaikKK3sKKyAgICByZXR1cm4g
V0VCS0lUX0RPTV9WVFRfQ1VFKGtpdChzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXh0VHJhY2tDdWUq
PihvYmopKSk7Cit9CisKK1dlYkNvcmU6OlZUVEN1ZSogY29yZShXZWJLaXRET01WVFRDdWUqIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWVFRD
dWUqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitX
ZWJLaXRET01WVFRDdWUqIHdyYXBWVFRDdWUoV2ViQ29yZTo6VlRUQ3VlKiBjb3JlT2JqZWN0KQor
eworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9WVFRfQ1VF
KGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVlRUX0NVRSwgImNvcmUtb2JqZWN0IiwgY29y
ZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShWSURFT19UUkFDSykKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9kb21fdnR0
X2N1ZV9kaXNwYXRjaF9ldmVudChXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBXZWJLaXRE
T01FdmVudCogZXZlbnQsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICBXZWJDb3JlOjpFdmVudCogY29yZUV2ZW50ID0gV2ViS2l0Ojpjb3JlKGV2ZW50KTsK
KyAgICBpZiAoIWNvcmVFdmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYkNvcmU6
OlZUVEN1ZSogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZUVEN1ZSo+KFdFQktJ
VF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworCisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gY29yZVRhcmdldC0+ZGlzcGF0
Y2hFdmVudEZvckJpbmRpbmdzKCpjb3JlRXZlbnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBkZXNjcmlwdGlvbi5jb2RlLCBkZXNjcmlwdGlvbi5uYW1lKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAg
VU5VU0VEX1BBUkFNKGV2ZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2RvbV92dHRfY3VlX2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9v
bGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3Jl
OjpWVFRDdWUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWVFRDdWUqPihXRUJL
SVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0OjpH
T2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQpLCBj
b3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAgICBV
TlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X2RvbV92dHRfY3VlX3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJLaXRET01F
dmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5k
bGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICBXZWJDb3JlOjpWVFRDdWUqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWVFRD
dWUqPihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4g
V2ViS2l0OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihHX09CSkVD
VCh0YXJnZXQpLCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnRO
YW1lKTsKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNh
cHR1cmUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNr
IikKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50
VGFyZ2V0SWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5kaXNwYXRjaF9ldmVudCA9IHdlYmtp
dF9kb21fdnR0X2N1ZV9kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRkX2V2ZW50X2xpc3Rl
bmVyID0gd2Via2l0X2RvbV92dHRfY3VlX2FkZF9ldmVudF9saXN0ZW5lcjsKKyAgICBpZmFjZS0+
cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV92dHRfY3VlX3JlbW92ZV9ldmVudF9s
aXN0ZW5lcjsKK30KKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0RE9NVlRUQ3VlLCB3
ZWJraXRfZG9tX3Z0dF9jdWUsIFdFQktJVF9ET01fVFlQRV9URVhUX1RSQUNLX0NVRSwgR19JTVBM
RU1FTlRfSU5URVJGQUNFKFdFQktJVF9ET01fVFlQRV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21f
ZXZlbnRfdGFyZ2V0X2luaXQpKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9WRVJU
SUNBTCwKKyAgICBQUk9QX1NOQVBfVE9fTElORVMsCisgICAgUFJPUF9MSU5FLAorICAgIFBST1Bf
UE9TSVRJT04sCisgICAgUFJPUF9TSVpFLAorICAgIFBST1BfQUxJR04sCisgICAgUFJPUF9URVhU
LAorICAgIFBST1BfUkVHSU9OX0lELAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92dHRf
Y3VlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0
IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVZUVEN1
ZSogc2VsZiA9IFdFQktJVF9ET01fVlRUX0NVRShvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9w
ZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZFUlRJQ0FMOgorICAgICAgICB3ZWJraXRfZG9tX3Z0
dF9jdWVfc2V0X3ZlcnRpY2FsKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxw
dHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU05BUF9UT19MSU5FUzoKKyAgICAg
ICAgd2Via2l0X2RvbV92dHRfY3VlX3NldF9zbmFwX3RvX2xpbmVzKHNlbGYsIGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0xJTkU6Cisg
ICAgICAgIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfbGluZShzZWxmLCBnX3ZhbHVlX2dldF9kb3Vi
bGUodmFsdWUpLCBudWxscHRyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BPU0lU
SU9OOgorICAgICAgICB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3Bvc2l0aW9uKHNlbGYsIGdfdmFs
dWVfZ2V0X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfU0laRToKKyAgICAgICAgd2Via2l0X2RvbV92dHRfY3VlX3NldF9zaXplKHNlbGYsIGdf
dmFsdWVfZ2V0X2RvdWJsZSh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQUxJR046CisgICAgICAgIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfYWxpZ24oc2Vs
ZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0cik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9URVhUOgorICAgICAgICB3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3RleHQo
c2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9SRUdJT05fSUQ6CisgICAgICAgIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcmVnaW9u
X2lkKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV92dHRfY3VlX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTVZUVEN1ZSogc2VsZiA9IFdFQktJVF9ET01fVlRUX0NVRShvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1ZFUlRJQ0FMOgorICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Zl
cnRpY2FsKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NOQVBfVE9fTElO
RVM6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdnR0X2N1
ZV9nZXRfc25hcF90b19saW5lcyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9MSU5FOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb21fdnR0
X2N1ZV9nZXRfbGluZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QT1NJ
VElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9j
dWVfZ2V0X3Bvc2l0aW9uKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NJ
WkU6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV92dHRfY3Vl
X2dldF9zaXplKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FMSUdOOgor
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0
X2FsaWduKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RFWFQ6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfdGV4
dChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9SRUdJT05fSUQ6CisgICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfcmVn
aW9uX2lkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdnR0
X2N1ZV9jbGFzc19pbml0KFdlYktpdERPTVZUVEN1ZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xh
c3MpOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV92dHRfY3Vl
X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fdnR0X2N1ZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVkVSVElDQUwsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAidmVydGljYWwiLAorICAg
ICAgICAgICAgIlZUVEN1ZTp2ZXJ0aWNhbCIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hh
ciogVlRUQ3VlOnZlcnRpY2FsIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NOQVBfVE9fTElORVMsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInNuYXAtdG8tbGluZXMi
LAorICAgICAgICAgICAgIlZUVEN1ZTpzbmFwLXRvLWxpbmVzIiwKKyAgICAgICAgICAgICJyZWFk
LXdyaXRlIGdib29sZWFuIFZUVEN1ZTpzbmFwLXRvLWxpbmVzIiwKKyAgICAgICAgICAgIEZBTFNF
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0xJTkUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAibGlu
ZSIsCisgICAgICAgICAgICAiVlRUQ3VlOmxpbmUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2RvdWJsZSBWVFRDdWU6bGluZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9V
QkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1BPU0lUSU9OLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAg
ICAgICAgInBvc2l0aW9uIiwKKyAgICAgICAgICAgICJWVFRDdWU6cG9zaXRpb24iLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2RvdWJsZSBWVFRDdWU6cG9zaXRpb24iLAorICAgICAgICAgICAg
LUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TSVpFLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfZG91YmxlKAorICAgICAgICAgICAgInNpemUiLAorICAgICAgICAgICAgIlZUVEN1ZTpzaXpl
IiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdkb3VibGUgVlRUQ3VlOnNpemUiLAorICAgICAg
ICAgICAgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMCwKKyAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
CisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9BTElHTiwKKyAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJhbGlnbiIsCisgICAgICAgICAgICAiVlRU
Q3VlOmFsaWduIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGdjaGFyKiBWVFRDdWU6YWxpZ24i
LAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfVEVYVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygK
KyAgICAgICAgICAgICJ0ZXh0IiwKKyAgICAgICAgICAgICJWVFRDdWU6dGV4dCIsCisgICAgICAg
ICAgICAicmVhZC13cml0ZSBnY2hhciogVlRUQ3VlOnRleHQiLAorICAgICAgICAgICAgIiIsCisg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
UkVHSU9OX0lELAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInJl
Z2lvbi1pZCIsCisgICAgICAgICAgICAiVlRUQ3VlOnJlZ2lvbi1pZCIsCisgICAgICAgICAgICAi
cmVhZC13cml0ZSBnY2hhciogVlRUQ3VlOnJlZ2lvbi1pZCIsCisgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Z0dF9jdWVfaW5pdChXZWJLaXRET01WVFRDdWUqIHJlcXVlc3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHJlcXVlc3QpOworfQorCitXZWJLaXRET01Eb2N1bWVudEZyYWdtZW50KiB3
ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X2N1ZV9hc19odG1sKFdlYktpdERPTVZUVEN1ZSogc2VsZikK
K3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRU
X0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50PiBnb2JqZWN0UmVz
dWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0Q3VlQXNIVE1MKCkpOworICAgIHJldHVybiBXZWJL
aXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikK
KyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3ZlcnRpY2FsKFdlYktpdERPTVZUVEN1ZSogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VlRUX0NVRShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnZlcnRpY2FsKCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFj
ayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQor
Cit2b2lkIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfdmVydGljYWwoV2ViS2l0RE9NVlRUQ3VlKiBz
ZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEq
ZXJyb3IpOworICAgIFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0
VmVydGljYWwoY29udmVydGVkVmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJv
cik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQor
I2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV92dHRfY3VlX2dldF9zbmFwX3RvX2xpbmVzKFdlYktpdERPTVZUVEN1ZSogc2VsZikKK3sKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShz
ZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5zbmFwVG9MaW5lcygpOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9
CisKK3ZvaWQgd2Via2l0X2RvbV92dHRfY3VlX3NldF9zbmFwX3RvX2xpbmVzKFdlYktpdERPTVZU
VEN1ZSogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxmKSk7CisgICAgV2ViQ29yZTo6VlRUQ3Vl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFNuYXBUb0xpbmVzKHZh
bHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2si
KQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRf
ZG9tX3Z0dF9jdWVfZ2V0X2xpbmUoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKQoreworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpLCAw
KTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2RvdWJsZSByZXN1bHQgPSBpdGVtLT5saW5lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7
CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21f
dnR0X2N1ZV9zZXRfbGluZShXZWJLaXRET01WVFRDdWUqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdF
cnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
RE9NX0lTX1ZUVF9DVUUoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEq
ZXJyb3IpOworICAgIFdlYkNvcmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRMaW5lKHZh
bHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklE
RU9fVFJBQ0spICovCit9CisKK2dkb3VibGUgd2Via2l0X2RvbV92dHRfY3VlX2dldF9wb3NpdGlv
bihXZWJLaXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZU
VEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0
ZW0tPnBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyogRU5B
QkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcG9z
aXRpb24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRf
Q1VFKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCFlcnJvciB8fCAhKmVycm9yKTsKKyAg
ICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0UG9zaXRpb24odmFsdWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFD
SykgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3NpemUoV2ViS2l0RE9N
VlRUQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5zaXplKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNL
KSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfc2l6ZShXZWJLaXRET01WVFRD
dWUqIHNlbGYsIGdkb3VibGUgdmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZikpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNvcmU6OlZUVEN1ZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5zZXRTaXplKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0oZXJyb3IpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRy
YWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2djaGFyKiB3ZWJr
aXRfZG9tX3Z0dF9jdWVfZ2V0X2FsaWduKFdlYktpdERPTVZUVEN1ZSogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NVRShzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6VlRUQ3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmFsaWduKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJu
IDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9k
b21fdnR0X2N1ZV9zZXRfYWxpZ24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUsIEdFcnJvcioqIGVycm9yKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IpOworICAgIFdlYkNv
cmU6OlZUVEN1ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0QWxpZ24oY29udmVydGVkVmFs
dWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURF
T19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRfdGV4dChXZWJL
aXRET01WVFRDdWUqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1ZUVF9DVUUoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZUVEN1ZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT50ZXh0KCkpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RS
QUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfdGV4dChXZWJLaXRET01W
VFRDdWUqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFRleHQoY29udmVydGVkVmFsdWUpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisjZW5kaWYgLyog
RU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnY2hhciogd2Via2l0X2RvbV92dHRfY3VlX2dl
dF9yZWdpb25faWQoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WVFRfQ1VFKHNlbGYpLCAwKTsKKyAgICBX
ZWJDb3JlOjpWVFRDdWUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJl
c3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cmVnaW9uSWQoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK3ZvaWQgd2Via2l0X2RvbV92dHRfY3Vl
X3NldF9yZWdpb25faWQoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUp
Cit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVlRUX0NV
RShzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VlRU
Q3VlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRSZWdp
b25JZChjb252ZXJ0ZWRWYWx1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIlZpZGVvIFRyYWNrIikKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZUVEN1ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZWRlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZU
VEN1ZS5oCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFdlYktpdERPTVZUVEN1ZV9oCisjZGVmaW5lIFdlYktpdERPTVZUVEN1ZV9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVRleHRUcmFja0N1ZS5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVlRUX0NVRSAgICAgICAgICAgICh3ZWJr
aXRfZG9tX3Z0dF9jdWVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9WVFRfQ1VFKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9E
T01fVFlQRV9WVFRfQ1VFLCBXZWJLaXRET01WVFRDdWUpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZU
VF9DVUVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1ZUVF9DVUUsIFdlYktpdERPTVZUVEN1ZUNsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1ZUVF9DVUUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1ZUVF9DVUUpKQorI2RlZmluZSBXRUJLSVRfRE9N
X0lTX1ZUVF9DVUVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1ZUVF9DVUUpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZUVF9DVUVf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X0RPTV9UWVBFX1ZUVF9DVUUsIFdlYktpdERPTVZUVEN1ZUNsYXNzKSkKKworc3RydWN0IF9XZWJL
aXRET01WVFRDdWUgeworICAgIFdlYktpdERPTVRleHRUcmFja0N1ZSBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVZUVEN1ZUNsYXNzIHsKKyAgICBXZWJLaXRET01UZXh0
VHJhY2tDdWVDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG9tX3Z0dF9jdWVfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRf
Y3VlX2dldF9jdWVfYXNfaHRtbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IEEgI1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NRG9j
dW1lbnRGcmFnbWVudCoKK3dlYmtpdF9kb21fdnR0X2N1ZV9nZXRfY3VlX2FzX2h0bWwoV2ViS2l0
RE9NVlRUQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3ZlcnRp
Y2FsOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJldHVybnM6IEEgI2dj
aGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgor
d2Via2l0X2RvbV92dHRfY3VlX2dldF92ZXJ0aWNhbChXZWJLaXRET01WVFRDdWUqIHNlbGYpOwor
CisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9zZXRfdmVydGljYWw6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVlRUQ3VlCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKiBAZXJyb3I6ICNHRXJyb3IK
KyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2RvbV92dHRfY3VlX3NldF92ZXJ0aWNhbChXZWJLaXRET01WVFRDdWUqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1
ZV9nZXRfc25hcF90b19saW5lczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqCisg
KiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV92dHRfY3VlX2dldF9zbmFwX3RvX2xpbmVz
KFdlYktpdERPTVZUVEN1ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX3Nl
dF9zbmFwX3RvX2xpbmVzOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICogQHZhbHVl
OiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3NuYXBfdG9fbGluZXMoV2ViS2l0RE9NVlRU
Q3VlKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3Vl
X2dldF9saW5lOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJldHVybnM6
IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2RvdWJsZQord2Via2l0X2RvbV92dHRfY3VlX2dldF9saW5lKFdlYktpdERPTVZUVEN1ZSogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX3NldF9saW5lOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVZUVEN1ZQorICogQHZhbHVlOiBBICNnZG91YmxlCisgKiBAZXJyb3I6ICNHRXJy
b3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2RvbV92dHRfY3VlX3NldF9saW5lKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgZ2RvdWJsZSB2
YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1ZV9nZXRf
cG9zaXRpb246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJuczog
QSAjZ2RvdWJsZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBn
ZG91YmxlCit3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X3Bvc2l0aW9uKFdlYktpdERPTVZUVEN1ZSog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX3NldF9wb3NpdGlvbjoKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqIEB2YWx1ZTogQSAjZ2RvdWJsZQorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9kb21fdnR0X2N1ZV9zZXRfcG9zaXRpb24oV2ViS2l0RE9NVlRUQ3VlKiBzZWxm
LCBnZG91YmxlIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV92
dHRfY3VlX2dldF9zaXplOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJl
dHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV92dHRfY3VlX2dldF9zaXplKFdlYktpdERPTVZUVEN1
ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX3NldF9zaXplOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICogQHZhbHVlOiBBICNnZG91YmxlCisgKiBAZXJyb3I6
ICNHRXJyb3IKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV92dHRfY3VlX3NldF9zaXplKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgZ2Rv
dWJsZSB2YWx1ZSwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21fdnR0X2N1
ZV9nZXRfYWxpZ246CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVlRUQ3VlCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX3Z0dF9jdWVfZ2V0X2FsaWduKFdlYktpdERPTVZUVEN1ZSogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX3NldF9hbGlnbjoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01WVFRDdWUKKyAqIEB2YWx1ZTogQSAjZ2NoYXIKKyAqIEBlcnJvcjogI0dFcnJv
cgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Z0dF9jdWVfc2V0X2FsaWduKFdlYktpdERPTVZUVEN1ZSogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlLCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3Vl
X2dldF90ZXh0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVZUVEN1ZQorICoKKyAqIFJldHVybnM6
IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdj
aGFyKgord2Via2l0X2RvbV92dHRfY3VlX2dldF90ZXh0KFdlYktpdERPTVZUVEN1ZSogc2VsZik7
CisKKy8qKgorICogd2Via2l0X2RvbV92dHRfY3VlX3NldF90ZXh0OgorICogQHNlbGY6IEEgI1dl
YktpdERPTVZUVEN1ZQorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Z0dF9jdWVfc2V0X3RleHQo
V2ViS2l0RE9NVlRUQ3VlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdnR0X2N1ZV9nZXRfcmVnaW9uX2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZU
VEN1ZQorICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV92dHRfY3VlX2dldF9yZWdpb25f
aWQoV2ViS2l0RE9NVlRUQ3VlKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Z0dF9jdWVf
c2V0X3JlZ2lvbl9pZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WVFRDdWUKKyAqIEB2YWx1ZTog
QSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV92dHRfY3VlX3NldF9yZWdpb25faWQoV2ViS2l0RE9NVlRUQ3VlKiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVlRUQ3VlX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NVlRUQ3VlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WVFRDdWVQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiYmFkZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NVlRUQ3VlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVlRUQ3VlUHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTVZUVEN1ZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9WVFRD
dWUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVlRUQ3VlLmg+CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVZUVEN1ZSogd3Jh
cFZUVEN1ZShXZWJDb3JlOjpWVFRDdWUqKTsKK1dlYktpdERPTVZUVEN1ZSoga2l0KFdlYkNvcmU6
OlZUVEN1ZSopOworV2ViQ29yZTo6VlRUQ3VlKiBjb3JlKFdlYktpdERPTVZUVEN1ZSopOworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCisK
KyNlbmRpZiAvKiBXZWJLaXRET01WVFRDdWVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VmFsaWRpdHlTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5U3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NmM1ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZh
bGlkaXR5U3RhdGUuY3BwCkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNT
dGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01WYWxpZGl0eVN0YXRlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisj
ZGVmaW5lIFdFQktJVF9ET01fVkFMSURJVFlfU1RBVEVfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUs
IFdlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpWYWxpZGl0eVN0
YXRlPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVZhbGlkaXR5U3RhdGUqIGtpdChXZWJDb3JlOjpW
YWxpZGl0eVN0YXRlKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAg
ICAgcmV0dXJuIFdFQktJVF9ET01fVkFMSURJVFlfU1RBVEUocmV0KTsKKworICAgIHJldHVybiB3
cmFwVmFsaWRpdHlTdGF0ZShvYmopOworfQorCitXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBjb3Jl
KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qg
PyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
cmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSog
d3JhcFZhbGlkaXR5U3RhdGUoV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogY29yZU9iamVjdCkKK3sK
KyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVkFMSURJVFlf
U1RBVEUoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01WYWxpZGl0eVN0YXRlLCB3ZWJraXRfZG9tX3Zh
bGlkaXR5X3N0YXRlLCBXRUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisgICAgUFJPUF9WQUxVRV9NSVNTSU5HLAorICAgIFBST1BfVFlQRV9NSVNNQVRDSCwKKyAg
ICBQUk9QX1BBVFRFUk5fTUlTTUFUQ0gsCisgICAgUFJPUF9UT09fTE9ORywKKyAgICBQUk9QX1JB
TkdFX1VOREVSRkxPVywKKyAgICBQUk9QX1JBTkdFX09WRVJGTE9XLAorICAgIFBST1BfU1RFUF9N
SVNNQVRDSCwKKyAgICBQUk9QX0JBRF9JTlBVVCwKKyAgICBQUk9QX0NVU1RPTV9FUlJPUiwKKyAg
ICBQUk9QX1ZBTElELAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0
ZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVmFsaWRpdHlTdGF0
ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZBTElESVRZX1NUQVRFX0dFVF9QUklWQVRFKG9i
amVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmFs
aWRpdHlfc3RhdGVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVmFs
aWRpdHlTdGF0ZSogc2VsZiA9IFdFQktJVF9ET01fVkFMSURJVFlfU1RBVEUob2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9WQUxVRV9NSVNTSU5HOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0
YXRlX2dldF92YWx1ZV9taXNzaW5nKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX1RZUEVfTUlTTUFUQ0g6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdl
YmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3R5cGVfbWlzbWF0Y2goc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUEFUVEVSTl9NSVNNQVRDSDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcGF0dGVy
bl9taXNtYXRjaChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT09fTE9O
RzoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV92YWxpZGl0
eV9zdGF0ZV9nZXRfdG9vX2xvbmcoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfUkFOR0VfVU5ERVJGTE9XOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3
ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9yYW5nZV91bmRlcmZsb3coc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkFOR0VfT1ZFUkZMT1c6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3Jhbmdl
X292ZXJmbG93KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NURVBfTUlT
TUFUQ0g6CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdmFs
aWRpdHlfc3RhdGVfZ2V0X3N0ZXBfbWlzbWF0Y2goc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQkFEX0lOUFVUOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9iYWRfaW5wdXQoc2VsZikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQ1VTVE9NX0VSUk9SOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9jdXN0b21fZXJy
b3Ioc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSUQ6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0
X3ZhbGlkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9t
X3ZhbGlkaXR5X3N0YXRlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFBy
b3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdmFs
aWRpdHlfc3RhdGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVZhbGlk
aXR5U3RhdGVQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9WQUxJRElUWV9TVEFURV9HRVRfUFJJ
VkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpWYWxpZGl0eVN0YXRlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCks
IG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3ZhbGlkaXR5X3N0YXRlX2NsYXNzX2luaXQoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZUNsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01WYWxpZGl0eVN0YXRlUHJpdmF0ZSkpOworICAg
IGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2Nv
bnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3ZhbGlk
aXR5X3N0YXRlX2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
VkFMVUVfTUlTU0lORywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAg
ICAidmFsdWUtbWlzc2luZyIsCisgICAgICAgICAgICAiVmFsaWRpdHlTdGF0ZTp2YWx1ZS1taXNz
aW5nIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gVmFsaWRpdHlTdGF0ZTp2YWx1
ZS1taXNzaW5nIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVFlQRV9NSVNNQVRDSCwKKyAgICAgICAg
Z19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAidHlwZS1taXNtYXRjaCIsCisgICAg
ICAgICAgICAiVmFsaWRpdHlTdGF0ZTp0eXBlLW1pc21hdGNoIiwKKyAgICAgICAgICAgICJyZWFk
LW9ubHkgZ2Jvb2xlYW4gVmFsaWRpdHlTdGF0ZTp0eXBlLW1pc21hdGNoIiwKKyAgICAgICAgICAg
IEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfUEFUVEVSTl9NSVNNQVRDSCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAicGF0dGVybi1taXNtYXRjaCIsCisgICAgICAgICAgICAiVmFsaWRpdHlT
dGF0ZTpwYXR0ZXJuLW1pc21hdGNoIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4g
VmFsaWRpdHlTdGF0ZTpwYXR0ZXJuLW1pc21hdGNoIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVE9P
X0xPTkcsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInRvby1s
b25nIiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0YXRlOnRvby1sb25nIiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2Jvb2xlYW4gVmFsaWRpdHlTdGF0ZTp0b28tbG9uZyIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX1JBTkdFX1VOREVSRkxPVywKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4o
CisgICAgICAgICAgICAicmFuZ2UtdW5kZXJmbG93IiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0
YXRlOnJhbmdlLXVuZGVyZmxvdyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFZh
bGlkaXR5U3RhdGU6cmFuZ2UtdW5kZXJmbG93IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfUkFOR0Vf
T1ZFUkZMT1csCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInJh
bmdlLW92ZXJmbG93IiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0YXRlOnJhbmdlLW92ZXJmbG93
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gVmFsaWRpdHlTdGF0ZTpyYW5nZS1v
dmVyZmxvdyIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NURVBfTUlTTUFUQ0gsCisgICAgICAgIGdf
cGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgInN0ZXAtbWlzbWF0Y2giLAorICAgICAg
ICAgICAgIlZhbGlkaXR5U3RhdGU6c3RlcC1taXNtYXRjaCIsCisgICAgICAgICAgICAicmVhZC1v
bmx5IGdib29sZWFuIFZhbGlkaXR5U3RhdGU6c3RlcC1taXNtYXRjaCIsCisgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0JBRF9JTlBVVCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAg
ICAgICAiYmFkLWlucHV0IiwKKyAgICAgICAgICAgICJWYWxpZGl0eVN0YXRlOmJhZC1pbnB1dCIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFZhbGlkaXR5U3RhdGU6YmFkLWlucHV0
IiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQ1VTVE9NX0VSUk9SLAorICAgICAgICBnX3BhcmFtX3Nw
ZWNfYm9vbGVhbigKKyAgICAgICAgICAgICJjdXN0b20tZXJyb3IiLAorICAgICAgICAgICAgIlZh
bGlkaXR5U3RhdGU6Y3VzdG9tLWVycm9yIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xl
YW4gVmFsaWRpdHlTdGF0ZTpjdXN0b20tZXJyb3IiLAorICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9WQUxJ
RCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAidmFsaWQiLAor
ICAgICAgICAgICAgIlZhbGlkaXR5U3RhdGU6dmFsaWQiLAorICAgICAgICAgICAgInJlYWQtb25s
eSBnYm9vbGVhbiBWYWxpZGl0eVN0YXRlOnZhbGlkIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9pbml0KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHJlcXVl
c3QpCit7CisgICAgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1ZBTElESVRZX1NUQVRFX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikg
V2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUoKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0X2Rv
bV92YWxpZGl0eV9zdGF0ZV9nZXRfdmFsdWVfbWlzc2luZyhXZWJLaXRET01WYWxpZGl0eVN0YXRl
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKHNlbGYp
LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT52YWx1ZU1pc3NpbmcoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRl
X2dldF90eXBlX21pc21hdGNoKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdi
b29sZWFuIHJlc3VsdCA9IGl0ZW0tPnR5cGVNaXNtYXRjaCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3BhdHRlcm5fbWlz
bWF0Y2goV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0RPTV9JU19WQUxJRElUWV9TVEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZhbGlk
aXR5U3RhdGUqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0
ID0gaXRlbS0+cGF0dGVybk1pc21hdGNoKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZ2Jv
b2xlYW4gd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdG9vX2xvbmcoV2ViS2l0RE9NVmFs
aWRpdHlTdGF0ZSogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WQUxJRElUWV9T
VEFURShzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZhbGlkaXR5U3RhdGUqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+dG9vTG9uZygp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlf
c3RhdGVfZ2V0X3JhbmdlX3VuZGVyZmxvdyhXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKQor
eworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKHNlbGYpLCBGQUxTRSk7
CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5yYW5nZVVuZGVyZmxvdygpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3Jh
bmdlX292ZXJmbG93KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpCit7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpWYWxpZGl0eVN0YXRlKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFu
IHJlc3VsdCA9IGl0ZW0tPnJhbmdlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitnYm9vbGVhbiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF9zdGVwX21pc21hdGNoKFdl
YktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VkFMSURJVFlfU1RBVEUoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpWYWxpZGl0eVN0YXRl
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0t
PnN0ZXBNaXNtYXRjaCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtp
dF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X2JhZF9pbnB1dChXZWJLaXRET01WYWxpZGl0eVN0YXRl
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKHNlbGYp
LCBGQUxTRSk7CisgICAgV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5iYWRJbnB1dCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0
X2N1c3RvbV9lcnJvcihXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBzZWxmKQoreworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6VmFsaWRpdHlTdGF0ZSogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVh
biByZXN1bHQgPSBpdGVtLT5jdXN0b21FcnJvcigpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dib29sZWFuIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3ZhbGlkKFdlYktpdERPTVZh
bGlkaXR5U3RhdGUqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVkFMSURJVFlf
U1RBVEUoc2VsZiksIEZBTFNFKTsKKyAgICBXZWJDb3JlOjpWYWxpZGl0eVN0YXRlKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPnZhbGlkKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0eVN0YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVZhbGlkaXR5U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jNDYxOWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WYWxpZGl0eVN0YXRlLmgKQEAg
LTAsMCArMSwxNjMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0RE9NVmFsaWRpdHlTdGF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVZhbGlkaXR5U3RhdGVf
aAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFICAgICAgICAgICAg
KHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9WQUxJRElUWV9TVEFURShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUsIFdlYktpdERPTVZhbGlk
aXR5U3RhdGUpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZBTElESVRZX1NUQVRFX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9W
QUxJRElUWV9TVEFURSwgV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZUNsYXNzKQorI2RlZmluZSBXRUJL
SVRfRE9NX0lTX1ZBTElESVRZX1NUQVRFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9WQUxJRElUWV9TVEFURSkpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfVkFMSURJVFlfU1RBVEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZBTElESVRZX1NUQVRFKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9WQUxJRElUWV9TVEFURV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVkFMSURJVFlfU1RBVEUs
IFdlYktpdERPTVZhbGlkaXR5U3RhdGVDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0
cnVjdCBfV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZUNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Zh
bGlkaXR5X3N0YXRlX2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmFsaWRp
dHlfc3RhdGVfZ2V0X3ZhbHVlX21pc3Npbmc6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmFsaWRp
dHlTdGF0ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBV
bnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0
YXRlX2dldF92YWx1ZV9taXNzaW5nKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3R5cGVfbWlzbWF0Y2g6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29s
ZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF90eXBlX21pc21hdGNoKFdlYktpdERPTVZh
bGlkaXR5U3RhdGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVf
Z2V0X3BhdHRlcm5fbWlzbWF0Y2g6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmFsaWRpdHlTdGF0
ZQorICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJs
ZQorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dl
dF9wYXR0ZXJuX21pc21hdGNoKFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3Rvb19sb25nOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoK
KyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfdG9vX2xvbmcoV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSog
c2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcmFuZ2VfdW5k
ZXJmbG93OgorICogQHNlbGY6IEEgI1dlYktpdERPTVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1
cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfcmFuZ2VfdW5kZXJm
bG93KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
dmFsaWRpdHlfc3RhdGVfZ2V0X3JhbmdlX292ZXJmbG93OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVZhbGlkaXR5U3RhdGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV92YWxp
ZGl0eV9zdGF0ZV9nZXRfcmFuZ2Vfb3ZlcmZsb3coV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZSogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9nZXRfc3RlcF9taXNtYXRj
aDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3N0ZXBfbWlzbWF0Y2goV2Vi
S2l0RE9NVmFsaWRpdHlTdGF0ZSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92YWxpZGl0
eV9zdGF0ZV9nZXRfYmFkX2lucHV0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVZhbGlkaXR5U3Rh
dGUKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2RvbV92YWxpZGl0eV9zdGF0ZV9n
ZXRfYmFkX2lucHV0KFdlYktpdERPTVZhbGlkaXR5U3RhdGUqIHNlbGYpOworCisvKioKKyAqIHdl
YmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X2N1c3RvbV9lcnJvcjoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9k
b21fdmFsaWRpdHlfc3RhdGVfZ2V0X2N1c3RvbV9lcnJvcihXZWJLaXRET01WYWxpZGl0eVN0YXRl
KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZhbGlkaXR5X3N0YXRlX2dldF92YWxpZDoK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01WYWxpZGl0eVN0YXRlCisgKgorICogUmV0dXJuczogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Jv
b2xlYW4KK3dlYmtpdF9kb21fdmFsaWRpdHlfc3RhdGVfZ2V0X3ZhbGlkKFdlYktpdERPTVZhbGlk
aXR5U3RhdGUqIHNlbGYpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9V
U0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZV9oICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5U3RhdGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZhbGlkaXR5
U3RhdGVQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2OGRm
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZVByaXZhdGUuaApAQCAtMCww
ICsxLDMzIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dERPTVZhbGlkaXR5U3RhdGVQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVmFsaWRpdHlTdGF0
ZVByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9WYWxpZGl0eVN0YXRlLmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTVZhbGlkaXR5U3RhdGUuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiB3cmFwVmFsaWRpdHlTdGF0ZShXZWJDb3JlOjpW
YWxpZGl0eVN0YXRlKik7CitXZWJLaXRET01WYWxpZGl0eVN0YXRlKiBraXQoV2ViQ29yZTo6VmFs
aWRpdHlTdGF0ZSopOworV2ViQ29yZTo6VmFsaWRpdHlTdGF0ZSogY29yZShXZWJLaXRET01WYWxp
ZGl0eVN0YXRlKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERP
TVZhbGlkaXR5U3RhdGVQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9QbGF5YmFj
a1F1YWxpdHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5MzY2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
VmlkZW9QbGF5YmFja1F1YWxpdHkuY3BwCkBAIC0wLDAgKzEsMjcyIEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0
UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
b2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9K
U01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlLmgiCisjaW5jbHVk
ZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9WSURFT19QTEFZQkFDS19R
VUFMSVRZX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9iaiwg
V0VCS0lUX0RPTV9UWVBFX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFksIFdlYktpdERPTVZpZGVvUGxh
eWJhY2tRdWFsaXR5UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZpZGVvUGxh
eWJhY2tRdWFsaXR5UHJpdmF0ZSB7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1YWxpdHk+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NPVVJDRSkKK30gV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2
YXRlOworCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBraXQoV2ViQ29yZTo6VmlkZW9QbGF5YmFj
a1F1YWxpdHkqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICBy
ZXR1cm4gV0VCS0lUX0RPTV9WSURFT19QTEFZQkFDS19RVUFMSVRZKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcFZpZGVvUGxheWJhY2tRdWFsaXR5KG9iaik7Cit9CisKK1dlYkNvcmU6OlZpZGVvUGxh
eWJhY2tRdWFsaXR5KiBjb3JlKFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9QbGF5
YmFja1F1YWxpdHkqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogd3JhcFZpZGVvUGxheWJhY2tR
dWFsaXR5KFdlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5KiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9WSURFT19QTEFZQkFD
S19RVUFMSVRZKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVklERU9fUExBWUJBQ0tfUVVB
TElUWSwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHksIHdlYmtpdF9kb21fdmlkZW9f
cGxheWJhY2tfcXVhbGl0eSwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAg
UFJPUF8wLAorICAgIFBST1BfQ1JFQVRJT05fVElNRSwKKyAgICBQUk9QX1RPVEFMX1ZJREVPX0ZS
QU1FUywKKyAgICBQUk9QX0RST1BQRURfVklERU9fRlJBTUVTLAorICAgIFBST1BfQ09SUlVQVEVE
X1ZJREVPX0ZSQU1FUywKKyAgICBQUk9QX1RPVEFMX0ZSQU1FX0RFTEFZLAorfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfRE9NX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFlfR0VUX1BSSVZBVEUob2JqZWN0
KTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U09VUkNFKQorICAgIHByaXYtPn5XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBzZWxmID0gV0VCS0lUX0RPTV9WSURF
T19QTEFZQkFDS19RVUFMSVRZKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfQ1JFQVRJT05fVElNRToKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91Ymxl
KHZhbHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2NyZWF0aW9uX3Rp
bWUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVE9UQUxfVklERU9fRlJB
TUVTOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgd2Via2l0X2RvbV92aWRlb19w
bGF5YmFja19xdWFsaXR5X2dldF90b3RhbF92aWRlb19mcmFtZXMoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRFJPUFBFRF9WSURFT19GUkFNRVM6CisgICAgICAgIGdfdmFs
dWVfc2V0X3Vsb25nKHZhbHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0
X2Ryb3BwZWRfdmlkZW9fZnJhbWVzKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0NPUlJVUFRFRF9WSURFT19GUkFNRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZh
bHVlLCB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2NvcnJ1cHRlZF92aWRl
b19mcmFtZXMoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVE9UQUxfRlJB
TUVfREVMQVk6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV92
aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF90b3RhbF9mcmFtZV9kZWxheShzZWxmKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFs
aXR5X2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3Vu
dCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdP
YmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tf
cXVhbGl0eV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0
aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
CisgICAgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9WSURFT19QTEFZQkFDS19RVUFMSVRZX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJp
di0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5
Kj4oV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpE
T01PYmplY3RDYWNoZTo6cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfY2xhc3NfaW5pdChXZWJL
aXRET01WaWRlb1BsYXliYWNrUXVhbGl0eUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRE
T01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdG9yID0gd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2NvbnN0cnVjdG9yOwor
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1
YWxpdHlfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQ
Uk9QX0NSRUFUSU9OX1RJTUUsCisgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAg
ICAgICAiY3JlYXRpb24tdGltZSIsCisgICAgICAgICAgICAiVmlkZW9QbGF5YmFja1F1YWxpdHk6
Y3JlYXRpb24tdGltZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgVmlkZW9QbGF5
YmFja1F1YWxpdHk6Y3JlYXRpb24tdGltZSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdf
TUFYRE9VQkxFLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3Ms
CisgICAgICAgIFBST1BfVE9UQUxfVklERU9fRlJBTUVTLAorICAgICAgICBnX3BhcmFtX3NwZWNf
dWxvbmcoCisgICAgICAgICAgICAidG90YWwtdmlkZW8tZnJhbWVzIiwKKyAgICAgICAgICAgICJW
aWRlb1BsYXliYWNrUXVhbGl0eTp0b3RhbC12aWRlby1mcmFtZXMiLAorICAgICAgICAgICAgInJl
YWQtb25seSBndWxvbmcgVmlkZW9QbGF5YmFja1F1YWxpdHk6dG90YWwtdmlkZW8tZnJhbWVzIiwK
KyAgICAgICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9EUk9QUEVEX1ZJREVPX0ZSQU1FUywKKyAg
ICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAgICAgICAgICAgImRyb3BwZWQtdmlkZW8tZnJh
bWVzIiwKKyAgICAgICAgICAgICJWaWRlb1BsYXliYWNrUXVhbGl0eTpkcm9wcGVkLXZpZGVvLWZy
YW1lcyIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGd1bG9uZyBWaWRlb1BsYXliYWNrUXVhbGl0
eTpkcm9wcGVkLXZpZGVvLWZyYW1lcyIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAor
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1Bf
Q09SUlVQVEVEX1ZJREVPX0ZSQU1FUywKKyAgICAgICAgZ19wYXJhbV9zcGVjX3Vsb25nKAorICAg
ICAgICAgICAgImNvcnJ1cHRlZC12aWRlby1mcmFtZXMiLAorICAgICAgICAgICAgIlZpZGVvUGxh
eWJhY2tRdWFsaXR5OmNvcnJ1cHRlZC12aWRlby1mcmFtZXMiLAorICAgICAgICAgICAgInJlYWQt
b25seSBndWxvbmcgVmlkZW9QbGF5YmFja1F1YWxpdHk6Y29ycnVwdGVkLXZpZGVvLWZyYW1lcyIs
CisgICAgICAgICAgICAwLCBHX01BWFVMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAg
ICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfVE9UQUxfRlJBTUVfREVMQVksCisgICAg
ICAgIGdfcGFyYW1fc3BlY19kb3VibGUoCisgICAgICAgICAgICAidG90YWwtZnJhbWUtZGVsYXki
LAorICAgICAgICAgICAgIlZpZGVvUGxheWJhY2tRdWFsaXR5OnRvdGFsLWZyYW1lLWRlbGF5IiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2RvdWJsZSBWaWRlb1BsYXliYWNrUXVhbGl0eTp0b3Rh
bC1mcmFtZS1kZWxheSIsCisgICAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAw
LAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2luaXQoV2ViS2l0RE9NVmlkZW9Q
bGF5YmFja1F1YWxpdHkqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1
YWxpdHlQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9WSURFT19QTEFZQkFDS19RVUFMSVRZX0dF
VF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVmlkZW9QbGF5YmFj
a1F1YWxpdHlQcml2YXRlKCk7Cit9CisKK2dkb3VibGUgd2Via2l0X2RvbV92aWRlb19wbGF5YmFj
a19xdWFsaXR5X2dldF9jcmVhdGlvbl90aW1lKFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5
KiBzZWxmKQoreworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVklERU9fUExBWUJBQ0tfUVVBTElUWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Vmlk
ZW9QbGF5YmFja1F1YWxpdHkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJs
ZSByZXN1bHQgPSBpdGVtLT5jcmVhdGlvblRpbWUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiTWVkaWEgU291cmNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4o
MCk7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NPVVJDRSkgKi8KK30KKworZ3Vsb25nIHdlYmtp
dF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfdG90YWxfdmlkZW9fZnJhbWVzKFdlYktp
dERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBzZWxmKQoreworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9fUExBWUJBQ0tfUVVBTElUWShzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1YWxpdHkqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPnRvdGFsVmlkZW9GcmFtZXMo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7Cisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiTWVkaWEgU291cmNlIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU09V
UkNFKSAqLworfQorCitndWxvbmcgd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dl
dF9kcm9wcGVkX3ZpZGVvX2ZyYW1lcyhXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogc2Vs
ZikKK3sKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1ZJREVPX1BMQVlCQUNLX1FVQUxJVFkoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvUGxh
eWJhY2tRdWFsaXR5KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXN1
bHQgPSBpdGVtLT5kcm9wcGVkVmlkZW9GcmFtZXMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiTWVkaWEgU291cmNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z3Vsb25nPigw
KTsKKyNlbmRpZiAvKiBFTkFCTEUoTUVESUFfU09VUkNFKSAqLworfQorCitndWxvbmcgd2Via2l0
X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF9jb3JydXB0ZWRfdmlkZW9fZnJhbWVzKFdl
YktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5KiBzZWxmKQoreworI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9fUExBWUJBQ0tfUVVBTElUWShz
ZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VmlkZW9QbGF5YmFja1F1YWxpdHkqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0tPmNvcnJ1cHRlZFZpZGVv
RnJhbWVzKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIk1lZGlhIFNvdXJjZSIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKE1F
RElBX1NPVVJDRSkgKi8KK30KKworZ2RvdWJsZSB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1
YWxpdHlfZ2V0X3RvdGFsX2ZyYW1lX2RlbGF5KFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5
KiBzZWxmKQoreworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVklERU9fUExBWUJBQ0tfUVVBTElUWShzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Vmlk
ZW9QbGF5YmFja1F1YWxpdHkqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2RvdWJs
ZSByZXN1bHQgPSBpdGVtLT50b3RhbEZyYW1lRGVsYXkoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiTWVkaWEgU291cmNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJs
ZT4oMCk7CisjZW5kaWYgLyogRU5BQkxFKE1FRElBX1NPVVJDRSkgKi8KK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzM2JhNzFjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eS5oCkBAIC0wLDAgKzEsMTA4IEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVZpZGVv
UGxheWJhY2tRdWFsaXR5X2gKKyNkZWZpbmUgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlf
aAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFkgICAg
ICAgICAgICAod2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fVklERU9fUExBWUJBQ0tfUVVBTElUWShvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVklERU9f
UExBWUJBQ0tfUVVBTElUWSwgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkpKQorI2RlZmlu
ZSBXRUJLSVRfRE9NX1ZJREVPX1BMQVlCQUNLX1FVQUxJVFlfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1BMQVlC
QUNLX1FVQUxJVFksIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5Q2xhc3MpCisjZGVmaW5l
IFdFQktJVF9ET01fSVNfVklERU9fUExBWUJBQ0tfUVVBTElUWShvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVklERU9fUExBWUJB
Q0tfUVVBTElUWSkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVklERU9fUExBWUJBQ0tfUVVBTElU
WV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfVklERU9fUExBWUJBQ0tfUVVBTElUWSkpCisjZGVmaW5lIFdFQktJVF9ET01fVklE
RU9fUExBWUJBQ0tfUVVBTElUWV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVklERU9fUExBWUJBQ0tfUVVBTElUWSwgV2Vi
S2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHlDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVmlk
ZW9QbGF5YmFja1F1YWxpdHkgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7
Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5Q2xhc3MgeworICAg
IFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfdHlwZSh2b2lkKTsKKwor
LyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X2NyZWF0aW9uX3Rp
bWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkKKyAqCisgKiBS
ZXR1cm5zOiBBICNnZG91YmxlCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJL
SVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfY3Jl
YXRpb25fdGltZShXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF90b3RhbF92aWRlb19mcmFt
ZXM6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkKKyAqCisgKiBS
ZXR1cm5zOiBBICNndWxvbmcKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ3Vsb25nCit3ZWJraXRfZG9tX3ZpZGVvX3BsYXliYWNrX3F1YWxpdHlfZ2V0X3RvdGFs
X3ZpZGVvX2ZyYW1lcyhXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSogc2VsZik7CisKKy8q
KgorICogd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5X2dldF9kcm9wcGVkX3ZpZGVv
X2ZyYW1lczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eQorICoK
KyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRf
ZHJvcHBlZF92aWRlb19mcmFtZXMoV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1YWxpdHkqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVhbGl0eV9nZXRfY29ycnVw
dGVkX3ZpZGVvX2ZyYW1lczoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1BsYXliYWNrUXVh
bGl0eQorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFi
bGUKKyoqLworV0VCS0lUX0FQSSBndWxvbmcKK3dlYmtpdF9kb21fdmlkZW9fcGxheWJhY2tfcXVh
bGl0eV9nZXRfY29ycnVwdGVkX3ZpZGVvX2ZyYW1lcyhXZWJLaXRET01WaWRlb1BsYXliYWNrUXVh
bGl0eSogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV92aWRlb19wbGF5YmFja19xdWFsaXR5
X2dldF90b3RhbF9mcmFtZV9kZWxheToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1BsYXli
YWNrUXVhbGl0eQorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2RvbV92aWRlb19wbGF5
YmFja19xdWFsaXR5X2dldF90b3RhbF9mcmFtZV9kZWxheShXZWJLaXRET01WaWRlb1BsYXliYWNr
UXVhbGl0eSogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VT
RV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0
eV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01WaWRlb1BsYXliYWNrUXVhbGl0eVByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iOGRjZTdiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1BsYXli
YWNrUXVhbGl0eVByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5UHJpdmF0ZV9oCisKKyNp
bmNsdWRlIDxXZWJDb3JlL1ZpZGVvUGxheWJhY2tRdWFsaXR5Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5Lmg+CisjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0
eSogd3JhcFZpZGVvUGxheWJhY2tRdWFsaXR5KFdlYkNvcmU6OlZpZGVvUGxheWJhY2tRdWFsaXR5
Kik7CitXZWJLaXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSoga2l0KFdlYkNvcmU6OlZpZGVvUGxh
eWJhY2tRdWFsaXR5Kik7CitXZWJDb3JlOjpWaWRlb1BsYXliYWNrUXVhbGl0eSogY29yZShXZWJL
aXRET01WaWRlb1BsYXliYWNrUXVhbGl0eSopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvKiBFTkFCTEUoTUVESUFfU09VUkNFKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NVmlk
ZW9QbGF5YmFja1F1YWxpdHlQcml2YXRlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFj
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVZpZGVvVHJhY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVhYjhkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2suY3BwCkBA
IC0wLDAgKzEsMzAxIEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NVmlkZW9UcmFjay5oIgorCisjaW5jbHVk
ZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRp
b25Db2RlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldl
YktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fVklERU9f
VFJBQ0tfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBX
RUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0ssIFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUgeworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmlkZW9UcmFjaz4gY29yZU9iamVj
dDsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9IFdlYktpdERPTVZpZGVvVHJhY2tQ
cml2YXRlOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViS2l0RE9NVmlkZW9UcmFjayoga2l0KFdlYkNvcmU6OlZpZGVvVHJhY2sqIG9iaikKK3sK
KyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0
ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gV0VCS0lUX0RPTV9W
SURFT19UUkFDSyhyZXQpOworCisgICAgcmV0dXJuIHdyYXBWaWRlb1RyYWNrKG9iaik7Cit9CisK
K1dlYkNvcmU6OlZpZGVvVHJhY2sqIGNvcmUoV2ViS2l0RE9NVmlkZW9UcmFjayogcmVxdWVzdCkK
K3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZpZGVvVHJhY2sq
PihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJL
aXRET01WaWRlb1RyYWNrKiB3cmFwVmlkZW9UcmFjayhXZWJDb3JlOjpWaWRlb1RyYWNrKiBjb3Jl
T2JqZWN0KQoreworICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RP
TV9WSURFT19UUkFDSyhnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLLCAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCitHX0RFRklORV9UWVBF
KFdlYktpdERPTVZpZGVvVHJhY2ssIHdlYmtpdF9kb21fdmlkZW9fdHJhY2ssIFdFQktJVF9ET01f
VFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX0lELAorICAgIFBS
T1BfS0lORCwKKyAgICBQUk9QX0xBQkVMLAorICAgIFBST1BfTEFOR1VBR0UsCisgICAgUFJPUF9T
RUxFQ1RFRCwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlKiBw
cml2ID0gV0VCS0lUX0RPTV9WSURFT19UUkFDS19HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJp
di0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IHByaXYtPn5XZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV92aWRlb190cmFja19zZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01WaWRlb1RyYWNrKiBzZWxmID0gV0VCS0lU
X0RPTV9WSURFT19UUkFDSyhvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7Cisg
ICAgY2FzZSBQUk9QX1NFTEVDVEVEOgorICAgICAgICB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX3Nl
dF9zZWxlY3RlZChzZWxmLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYgPSBXRUJLSVRfRE9NX1ZJ
REVPX1RSQUNLKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNl
IFBST1BfSUQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21f
dmlkZW9fdHJhY2tfZ2V0X2lkKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0tJTkQ6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdmlk
ZW9fdHJhY2tfZ2V0X2tpbmQoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
TEFCRUw6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdmlk
ZW9fdHJhY2tfZ2V0X2xhYmVsKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0xBTkdVQUdFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2dldF9sYW5ndWFnZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TRUxFQ1RFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X2RvbV92aWRlb190cmFja19nZXRfc2VsZWN0ZWQoc2VsZikpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfY29uc3RydWN0b3IoR1R5cGUg
dHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFy
YW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV92aWRlb190cmFja19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rv
cih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVklERU9fVFJBQ0tfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBw
cml2LT5jb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFjayo+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2NsYXNzX2luaXQoV2ViS2l0RE9NVmlkZW9UcmFja0NsYXNz
KiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShn
b2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSkpOworICAgIGdv
YmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2NvbnN0cnVj
dG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNr
X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV92
aWRlb190cmFja19zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9JRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJpZCIsCisg
ICAgICAgICAgICAiVmlkZW9UcmFjazppZCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFy
KiBWaWRlb1RyYWNrOmlkIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAor
ICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfS0lORCwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJraW5kIiwKKyAgICAgICAgICAgICJWaWRlb1Ry
YWNrOmtpbmQiLAorICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVmlkZW9UcmFjazpraW5k
IiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0
Q2xhc3MsCisgICAgICAgIFBST1BfTEFCRUwsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAibGFiZWwiLAorICAgICAgICAgICAgIlZpZGVvVHJhY2s6bGFiZWwiLAor
ICAgICAgICAgICAgInJlYWQtb25seSBnY2hhciogVmlkZW9UcmFjazpsYWJlbCIsCisgICAgICAg
ICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAg
ICAgICBQUk9QX0xBTkdVQUdFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImxhbmd1YWdlIiwKKyAgICAgICAgICAgICJWaWRlb1RyYWNrOmxhbmd1YWdlIiwKKyAg
ICAgICAgICAgICJyZWFkLW9ubHkgZ2NoYXIqIFZpZGVvVHJhY2s6bGFuZ3VhZ2UiLAorICAgICAg
ICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAg
ICAgICAgUFJPUF9TRUxFQ1RFRCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAg
ICAgICAgICAic2VsZWN0ZWQiLAorICAgICAgICAgICAgIlZpZGVvVHJhY2s6c2VsZWN0ZWQiLAor
ICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2Jvb2xlYW4gVmlkZW9UcmFjazpzZWxlY3RlZCIsCisg
ICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2luaXQoV2ViS2l0RE9N
VmlkZW9UcmFjayogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9ET01fVklERU9fVFJBQ0tfR0VUX1BSSVZBVEUocmVxdWVzdCk7CisgICAg
bmV3IChwcml2KSBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZSgpOworfQorCitnY2hhciogd2Vi
a2l0X2RvbV92aWRlb190cmFja19nZXRfaWQoV2ViS2l0RE9NVmlkZW9UcmFjayogc2VsZikKK3sK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9f
VFJBQ0soc2VsZiksIDApOworICAgIFdlYkNvcmU6OlZpZGVvVHJhY2sqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRl
bS0+aWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNl
bGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikK
KyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2dj
aGFyKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9raW5kKFdlYktpdERPTVZpZGVvVHJhY2sq
IHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9N
X0lTX1ZJREVPX1RSQUNLKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmtpbmQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZp
ZGVvIFRyYWNrIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0sp
ICovCit9CisKK2djaGFyKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9sYWJlbChXZWJLaXRE
T01WaWRlb1RyYWNrKiBzZWxmKQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0RPTV9JU19WSURFT19UUkFDSyhzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6Vmlk
ZW9UcmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5sYWJlbCgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiAwOworI2VuZGlmIC8qIEVOQUJM
RShWSURFT19UUkFDSykgKi8KK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0
X2xhbmd1YWdlKFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYpCit7CisjaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmxhbmd1YWdlKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJu
IDA7CisjZW5kaWYgLyogRU5BQkxFKFZJREVPX1RSQUNLKSAqLworfQorCitnYm9vbGVhbiB3ZWJr
aXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9zZWxlY3RlZChXZWJLaXRET01WaWRlb1RyYWNrKiBzZWxm
KQoreworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19W
SURFT19UUkFDSyhzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OlZpZGVvVHJhY2sqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+c2VsZWN0
ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2VsZik7
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiVmlkZW8gVHJhY2siKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFZJREVP
X1RSQUNLKSAqLworfQorCit2b2lkIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfc2V0X3NlbGVjdGVk
KFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLKHNlbGYpKTsK
KyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnNldFNlbGVjdGVkKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYp
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiVmlkZW8gVHJhY2siKQorI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFDSykgKi8K
K30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2suaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTdmODVkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01WaWRlb1RyYWNrLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVmlkZW9UcmFja19oCisjZGVmaW5l
IFdlYktpdERPTVZpZGVvVHJhY2tfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVf
QVBJCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01PYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0
YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1ZJREVP
X1RSQUNLICAgICAgICAgICAgKHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPTV9WSURFT19UUkFDSyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0ssIFdlYktp
dERPTVZpZGVvVHJhY2spKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9WSURFT19UUkFDSywgV2ViS2l0RE9NVmlkZW9UcmFja0NsYXNzKQorI2RlZmluZSBXRUJLSVRf
RE9NX0lTX1ZJREVPX1RSQUNLKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDSykpCisjZGVmaW5lIFdFQktJVF9E
T01fSVNfVklERU9fVFJBQ0tfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLKSkKKyNkZWZpbmUgV0VCS0lUX0RP
TV9WSURFT19UUkFDS19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mo
KG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVklERU9fVFJBQ0ssIFdlYktpdERPTVZpZGVvVHJhY2tD
bGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9NVmlkZW9UcmFjayB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NVmlkZW9UcmFja0Ns
YXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF90eXBlKHZvaWQpOworCisv
KioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X2lkOgorICogQHNlbGY6IEEgI1dlYktp
dERPTVZpZGVvVHJhY2sKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdmlkZW9fdHJh
Y2tfZ2V0X2lkKFdlYktpdERPTVZpZGVvVHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fdmlkZW9fdHJhY2tfZ2V0X2tpbmQ6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlkZW9UcmFj
aworICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV92aWRlb190cmFja19nZXRfa2luZChX
ZWJLaXRET01WaWRlb1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVvX3Ry
YWNrX2dldF9sYWJlbDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1RyYWNrCisgKgorICog
UmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJ
VF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9sYWJlbChXZWJLaXRET01W
aWRlb1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9s
YW5ndWFnZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1RyYWNrCisgKgorICogUmV0dXJu
czogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2NoYXIqCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9sYW5ndWFnZShXZWJLaXRET01WaWRl
b1RyYWNrKiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2dldF9zZWxl
Y3RlZDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01WaWRlb1RyYWNrCisgKgorICogUmV0dXJuczog
QSAjZ2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9kb21fdmlkZW9fdHJhY2tfZ2V0X3NlbGVjdGVkKFdlYktpdERPTVZp
ZGVvVHJhY2sqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfc2V0X3Nl
bGVjdGVkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2sKKyAqIEB2YWx1ZTogQSAj
Z2Jvb2xlYW4KKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X2RvbV92aWRlb190cmFja19zZXRfc2VsZWN0ZWQoV2ViS2l0RE9NVmlkZW9UcmFj
ayogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VC
S0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVmlkZW9UcmFj
a19oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tMaXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9U
cmFja0xpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NzVkOGQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tMaXN0LmNwcApAQCAtMCwwICsxLDI4
NCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTVZpZGVvVHJhY2tMaXN0LmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NTU0ltcG9ydFJ1bGUuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oPgorI2luY2x1
ZGUgIkdPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJl
YWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01FdmVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01FdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhT
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCisjZGVmaW5lIFdFQktJVF9ET01fVklERU9fVFJBQ0tfTElTVF9HRVRfUFJJVkFURShvYmop
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9WSURFT19U
UkFDS19MSVNULCBXZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUgeworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBSZWZQdHI8V2ViQ29yZTo6VmlkZW9UcmFja0xpc3Q+IGNvcmVPYmplY3Q7Cisj
ZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfSBXZWJLaXRET01WaWRlb1RyYWNrTGlzdFBy
aXZhdGU7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJLaXRET01WaWRlb1RyYWNrTGlzdCoga2l0KFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBv
YmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2lu
dGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJ
VF9ET01fVklERU9fVFJBQ0tfTElTVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBWaWRlb1RyYWNr
TGlzdChvYmopOworfQorCitXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogY29yZShXZWJLaXRET01W
aWRlb1RyYWNrTGlzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCkt
PmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHdyYXBWaWRl
b1RyYWNrTGlzdChXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogY29yZU9iamVjdCkKK3sKKyAgICBB
U1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVklERU9fVFJBQ0tfTElT
VChnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLX0xJU1QsICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJn
ZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBHRXJyb3IqKiBlcnJvcikKK3sKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdl
YktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFjb3JlRXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogY29yZVRhcmdldCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0KS0+
Y29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBn
Ym9vbGVhbiByZXN1bHQgPSBjb3JlVGFyZ2V0LT5kaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoKmNv
cmVFdmVudCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGRlc2NyaXB0aW9u
LmNvZGUsIGRlc2NyaXB0aW9uLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQpOwor
ICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiVmlkZW8gVHJhY2siKQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBFTkFCTEUo
VklERU9fVFJBQ0spCit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNr
X2xpc3RfYWRkX2V2ZW50X2xpc3RlbmVyKFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIGNv
bnN0IGNoYXIqIGV2ZW50TmFtZSwgR0Nsb3N1cmUqIGhhbmRsZXIsIGdib29sZWFuIHVzZUNhcHR1
cmUpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFdlYkNvcmU6OlZpZGVvVHJhY2tM
aXN0KiBjb3JlVGFyZ2V0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqPihX
RUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV2ViS2l0
OjpHT2JqZWN0RXZlbnRMaXN0ZW5lcjo6YWRkRXZlbnRMaXN0ZW5lcihHX09CSkVDVCh0YXJnZXQp
LCBjb3JlVGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIHVzZUNhcHR1cmUpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnROYW1lKTsKKyAg
ICBVTlVTRURfUEFSQU0oaGFuZGxlcik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUNhcHR1cmUpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorfQorCitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X3JlbW92ZV9ldmVudF9saXN0ZW5l
cihXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdD
bG9zdXJlKiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogY29yZVRhcmdldCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9PQkpFQ1QodGFyZ2V0
KS0+Y29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdlYktpdDo6R09iamVjdEV2ZW50TGlzdGVuZXI6
OnJlbW92ZUV2ZW50TGlzdGVuZXIoR19PQkpFQ1QodGFyZ2V0KSwgY29yZVRhcmdldCwgZXZlbnRO
YW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKGV2ZW50TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRs
ZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
IC8vIEVOQUJMRShWSURFT19UUkFDSykKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFjZSkKK3sKKyAgICBp
ZmFjZS0+ZGlzcGF0Y2hfZXZlbnQgPSB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZGlzcGF0
Y2hfZXZlbnQ7CisgICAgaWZhY2UtPmFkZF9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdmlk
ZW9fdHJhY2tfbGlzdF9hZGRfZXZlbnRfbGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9yZW1vdmVfZXZlbnRfbGlz
dGVuZXI7Cit9CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdERPTVZpZGVvVHJhY2tM
aXN0LCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3QsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1Qs
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJr
aXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfTEVOR1RILAorICAgIFBST1BfU0VMRUNURURfSU5ERVgsCit9OworCitzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQorewor
ICAgIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVklE
RU9fVFJBQ0tfTElTVF9HRVRfUFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShWSURFT19UUkFD
SykKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5n
ZXQoKSk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHByaXYtPn5XZWJLaXRE
T01WaWRlb1RyYWNrTGlzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2xpc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQoreworICAgIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBzZWxmID0gV0VCS0lUX0RP
TV9WSURFT19UUkFDS19MSVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfTEVOR1RIOgorICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwg
d2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9sZW5ndGgoc2VsZikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfU0VMRUNURURfSU5ERVg6CisgICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfc2VsZWN0ZWRfaW5k
ZXgoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21fdmlk
ZW9fdHJhY2tfbGlzdF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykK
K3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3ZpZGVv
X3RyYWNrX2xpc3RfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJv
cGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVzKTsKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3RQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9WSURFT19UUkFDS19MSVNUX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlZpZGVvVHJhY2tMaXN0Kj4oV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6
cHV0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdmlkZW9fdHJhY2tfbGlzdF9jbGFzc19pbml0KFdlYktpdERPTVZpZGVvVHJhY2tMaXN0Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZSkpOwor
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xp
c3RfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21f
dmlkZW9fdHJhY2tfbGlzdF9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfcHJvcGVydHk7CisKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAg
ICAgIFBST1BfTEVOR1RILAorICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAg
ICAibGVuZ3RoIiwKKyAgICAgICAgICAgICJWaWRlb1RyYWNrTGlzdDpsZW5ndGgiLAorICAgICAg
ICAgICAgInJlYWQtb25seSBndWxvbmcgVmlkZW9UcmFja0xpc3Q6bGVuZ3RoIiwKKyAgICAgICAg
ICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9TRUxFQ1RFRF9JTkRFWCwKKyAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoCisgICAgICAgICAgICAic2VsZWN0ZWQtaW5kZXgiLAorICAgICAgICAgICAgIlZp
ZGVvVHJhY2tMaXN0OnNlbGVjdGVkLWluZGV4IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xv
bmcgVmlkZW9UcmFja0xpc3Q6c2VsZWN0ZWQtaW5kZXgiLAorICAgICAgICAgICAgR19NSU5MT05H
LCBHX01BWExPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfaW5pdChXZWJLaXRE
T01WaWRlb1RyYWNrTGlzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01WaWRlb1RyYWNrTGlz
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0xJU1RfR0VUX1BSSVZBVEUo
cmVxdWVzdCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUo
KTsKK30KKworV2ViS2l0RE9NVmlkZW9UcmFjayogd2Via2l0X2RvbV92aWRlb190cmFja19saXN0
X2l0ZW0oV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QqIHNlbGYsIGd1bG9uZyBpbmRleCkKK3sKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfVklERU9fVFJB
Q0tfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFja0xpc3QqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJhY2s+IGdvYmpl
Y3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAgcmV0dXJuIFdl
YktpdDo6a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
c2VsZik7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJWaWRlbyBUcmFjayIpCisgICAgcmV0dXJuIDA7CisjZW5kaWYgLyogRU5B
QkxFKFZJREVPX1RSQUNLKSAqLworfQorCitXZWJLaXRET01WaWRlb1RyYWNrKiB3ZWJraXRfZG9t
X3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X3RyYWNrX2J5X2lkKFdlYktpdERPTVZpZGVvVHJhY2tMaXN0
KiBzZWxmLCBjb25zdCBnY2hhciogaWQpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLX0xJU1Qoc2VsZiksIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGlkLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRJZCA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChpZCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJh
Y2s+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5nZXRUcmFja0J5SWQoY29udmVy
dGVkSWQpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBVTlVTRURfUEFSQU0oaWQpOworICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICByZXR1
cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9fVFJBQ0spICovCit9CisKK2d1bG9uZyB3ZWJr
aXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X2xlbmd0aChXZWJLaXRET01WaWRlb1RyYWNrTGlz
dCogc2VsZikKK3sKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfVklERU9fVFJBQ0tfTElTVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VmlkZW9UcmFj
a0xpc3QqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0
ZW0tPmxlbmd0aCgpOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJWaWRlbyBUcmFj
ayIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGd1bG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxF
KFZJREVPX1RSQUNLKSAqLworfQorCitnbG9uZyB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3Rf
Z2V0X3NlbGVjdGVkX2luZGV4KFdlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBzZWxmKQoreworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19WSURFT19UUkFD
S19MSVNUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpWaWRlb1RyYWNrTGlzdCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT5zZWxlY3RlZEluZGV4
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlbGYpOwor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlZpZGVvIFRyYWNrIikKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShWSURFT19UUkFD
SykgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrTGlzdC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRl
b1RyYWNrTGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTdkMDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tMaXN0LmgKQEAgLTAsMCArMSw5OSBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01WaWRl
b1RyYWNrTGlzdF9oCisjZGVmaW5lIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0X2gKKworI2lmZGVm
IFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9ET01fVFlQRV9WSURFT19UUkFDS19MSVNUICAgICAgICAgICAgKHdlYmtpdF9k
b21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVP
X1RSQUNLX0xJU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLX0xJU1QsIFdlYktpdERPTVZpZGVvVHJh
Y2tMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9WSURFT19UUkFDS19MSVNUX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9W
SURFT19UUkFDS19MSVNULCBXZWJLaXRET01WaWRlb1RyYWNrTGlzdENsYXNzKQorI2RlZmluZSBX
RUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNLX0xJU1QpKQor
I2RlZmluZSBXRUJLSVRfRE9NX0lTX1ZJREVPX1RSQUNLX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1ZJREVPX1RSQUNL
X0xJU1QpKQorI2RlZmluZSBXRUJLSVRfRE9NX1ZJREVPX1RSQUNLX0xJU1RfR0VUX0NMQVNTKG9i
aikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX0RPTV9UWVBFX1ZJ
REVPX1RSQUNLX0xJU1QsIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0Q2xhc3MpKQorCitzdHJ1Y3Qg
X1dlYktpdERPTVZpZGVvVHJhY2tMaXN0IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2lu
c3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNrTGlzdENsYXNzIHsKKyAg
ICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgor
ICogd2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2l0ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0
RE9NVmlkZW9UcmFja0xpc3QKKyAqIEBpbmRleDogQSAjZ3Vsb25nCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRET01WaWRlb1RyYWNrCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVZpZGVvVHJhY2sqCit3ZWJraXRf
ZG9tX3ZpZGVvX3RyYWNrX2xpc3RfaXRlbShXZWJLaXRET01WaWRlb1RyYWNrTGlzdCogc2VsZiwg
Z3Vsb25nIGluZGV4KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0
X3RyYWNrX2J5X2lkOgorICogQHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2tMaXN0CisgKiBA
aWQ6IEEgI2djaGFyCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRE
T01WaWRlb1RyYWNrCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTVZpZGVvVHJhY2sqCit3ZWJraXRfZG9tX3ZpZGVvX3RyYWNrX2xpc3RfZ2V0X3Ry
YWNrX2J5X2lkKFdlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBzZWxmLCBjb25zdCBnY2hhciogaWQp
OworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRfbGVuZ3RoOgorICog
QHNlbGY6IEEgI1dlYktpdERPTVZpZGVvVHJhY2tMaXN0CisgKgorICogUmV0dXJuczogQSAjZ3Vs
b25nCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1bG9uZwor
d2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9sZW5ndGgoV2ViS2l0RE9NVmlkZW9UcmFj
a0xpc3QqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdmlkZW9fdHJhY2tfbGlzdF9nZXRf
c2VsZWN0ZWRfaW5kZXg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QKKyAq
CisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV92aWRlb190cmFja19saXN0X2dldF9zZWxlY3Rl
ZF9pbmRleChXZWJLaXRET01WaWRlb1RyYWNrTGlzdCogc2VsZik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJL
aXRET01WaWRlb1RyYWNrTGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tMaXN0
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01WaWRlb1RyYWNrTGlzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41MGVmM2IxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01WaWRl
b1RyYWNrTGlzdFByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJD
b3JlL1ZpZGVvVHJhY2tMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVZpZGVv
VHJhY2tMaXN0Lmg+CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKK1dlYktpdERPTVZpZGVvVHJhY2tMaXN0KiB3cmFwVmlkZW9UcmFja0xpc3QoV2ViQ29yZTo6
VmlkZW9UcmFja0xpc3QqKTsKK1dlYktpdERPTVZpZGVvVHJhY2tMaXN0KiBraXQoV2ViQ29yZTo6
VmlkZW9UcmFja0xpc3QqKTsKK1dlYkNvcmU6OlZpZGVvVHJhY2tMaXN0KiBjb3JlKFdlYktpdERP
TVZpZGVvVHJhY2tMaXN0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVO
QUJMRShWSURFT19UUkFDSykgKi8KKworI2VuZGlmIC8qIFdlYktpdERPTVZpZGVvVHJhY2tMaXN0
UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVZpZGVvVHJhY2tQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVZpZGVvVHJhY2tQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OWM5MTA1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NVmlkZW9UcmFja1ByaXZhdGUuaApAQCAt
MCwwICsxLDM2IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3Bl
biBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdl
bmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdl
YktpdERPTVZpZGVvVHJhY2tQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVmlkZW9UcmFja1By
aXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9WaWRlb1RyYWNrLmg+CisjaW5jbHVkZSA8d2Vi
a2l0ZG9tL1dlYktpdERPTVZpZGVvVHJhY2suaD4KKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisK
K25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVmlkZW9UcmFjayogd3JhcFZpZGVvVHJhY2so
V2ViQ29yZTo6VmlkZW9UcmFjayopOworV2ViS2l0RE9NVmlkZW9UcmFjayoga2l0KFdlYkNvcmU6
OlZpZGVvVHJhY2sqKTsKK1dlYkNvcmU6OlZpZGVvVHJhY2sqIGNvcmUoV2ViS2l0RE9NVmlkZW9U
cmFjayopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBFTkFCTEUoVklERU9f
VFJBQ0spICovCisKKyNlbmRpZiAvKiBXZWJLaXRET01WaWRlb1RyYWNrUHJpdmF0ZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVdlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYkFuaW1hdGlvbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJmOGQyNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NV2ViQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdERPTVdlYkFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBvcnRSdWxl
Lmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTUFuaW1hdGlvbkVmZmVjdFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01BbmltYXRpb25UaW1lbGluZVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NV2ViQW5p
bWF0aW9uUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkNvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdF
QktJVF9ET01fV0VCX0FOSU1BVElPTl9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9XRUJfQU5JTUFUSU9OLCBXZWJLaXRET01X
ZWJBbmltYXRpb25Qcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2ViQW5pbWF0
aW9uUHJpdmF0ZSB7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIFJlZlB0cjxXZWJD
b3JlOjpXZWJBbmltYXRpb24+IGNvcmVPYmplY3Q7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BTklN
QVRJT05TKQorfSBXZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlOworCisjaWYgRU5BQkxFKFdF
Ql9BTklNQVRJT05TKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NV2ViQW5pbWF0
aW9uKiBraXQoV2ViQ29yZTo6V2ViQW5pbWF0aW9uKiBvYmopCit7CisgICAgaWYgKCFvYmopCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hl
OjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fV0VCX0FOSU1BVElPTihyZXQp
OworCisgICAgcmV0dXJuIHdyYXBXZWJBbmltYXRpb24ob2JqKTsKK30KKworV2ViQ29yZTo6V2Vi
QW5pbWF0aW9uKiBjb3JlKFdlYktpdERPTVdlYkFuaW1hdGlvbiogcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYkFuaW1hdGlvbio+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVdl
YkFuaW1hdGlvbiogd3JhcFdlYkFuaW1hdGlvbihXZWJDb3JlOjpXZWJBbmltYXRpb24qIGNvcmVP
YmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9N
X1dFQl9BTklNQVRJT04oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9XRUJfQU5JTUFUSU9O
LCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BTklNQVRJT05TKQorCitHX0RFRklO
RV9UWVBFKFdlYktpdERPTVdlYkFuaW1hdGlvbiwgd2Via2l0X2RvbV93ZWJfYW5pbWF0aW9uLCBX
RUJLSVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9F
RkZFQ1QsCisgICAgUFJPUF9USU1FTElORSwKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
d2ViX2FuaW1hdGlvbl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9N
V2ViQW5pbWF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fV0VCX0FOSU1BVElPTl9HRVRf
UFJJVkFURShvYmplY3QpOworI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICBXZWJLaXQ6
OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSk7CisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIHByaXYtPn5XZWJLaXRET01XZWJBbmltYXRp
b25Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV93ZWJfYW5pbWF0aW9u
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fd2ViX2FuaW1hdGlvbl9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01XZWJBbmltYXRpb24qIHNlbGYgPSBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT04ob2JqZWN0
KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9FRkZFQ1Q6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV93ZWJfYW5pbWF0aW9u
X2dldF9lZmZlY3Qoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVElNRUxJ
TkU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV93ZWJfYW5p
bWF0aW9uX2dldF90aW1lbGluZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3Bl
cnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVj
dCogd2Via2l0X2RvbV93ZWJfYW5pbWF0aW9uX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50
IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1
Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fd2ViX2FuaW1hdGlvbl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBj
b25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJM
RShXRUJfQU5JTUFUSU9OUykKKyAgICBXZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9XRUJfQU5JTUFUSU9OX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJp
di0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYkFuaW1hdGlvbio+KFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0
Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworI2VuZGlmIC8vIEVO
QUJMRShXRUJfQU5JTUFUSU9OUykKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fY2xhc3NfaW5pdChXZWJLaXRET01XZWJBbmltYXRp
b25DbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZSkp
OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3dlYl9hbmltYXRp
b25fY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21f
d2ViX2FuaW1hdGlvbl9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fd2ViX2FuaW1hdGlvbl9nZXRfcHJvcGVydHk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBS
T1BfRUZGRUNULAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgImVm
ZmVjdCIsCisgICAgICAgICAgICAiV2ViQW5pbWF0aW9uOmVmZmVjdCIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdCogV2ViQW5pbWF0aW9uOmVmZmVjdCIs
CisgICAgICAgICAgICBXRUJLSVRfRE9NX1RZUEVfQU5JTUFUSU9OX0VGRkVDVCwKKyAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1RJTUVMSU5F
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgInRpbWVsaW5lIiwK
KyAgICAgICAgICAgICJXZWJBbmltYXRpb246dGltZWxpbmUiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZSogV2ViQW5pbWF0aW9uOnRpbWVsaW5lIiwK
KyAgICAgICAgICAgIFdFQktJVF9ET01fVFlQRV9BTklNQVRJT05fVElNRUxJTkUsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3dlYl9hbmltYXRpb25faW5pdChXZWJLaXRET01XZWJBbmltYXRpb24qIHJlcXVlc3QpCit7
CisgICAgV2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fV0VC
X0FOSU1BVElPTl9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERP
TVdlYkFuaW1hdGlvblByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NQW5pbWF0aW9uRWZmZWN0KiB3
ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZ2V0X2VmZmVjdChXZWJLaXRET01XZWJBbmltYXRpb24q
IHNlbGYpCit7CisjaWYgRU5BQkxFKFdFQl9BTklNQVRJT05TKQorICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
RE9NX0lTX1dFQl9BTklNQVRJT04oc2VsZiksIDApOworICAgIFdlYkNvcmU6OldlYkFuaW1hdGlv
biogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6QW5pbWF0
aW9uRWZmZWN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZWZmZWN0KCkpOwor
ICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IldlYiBBbmltYXRpb25zIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX0FO
SU1BVElPTlMpICovCit9CisKK1dlYktpdERPTUFuaW1hdGlvblRpbWVsaW5lKiB3ZWJraXRfZG9t
X3dlYl9hbmltYXRpb25fZ2V0X3RpbWVsaW5lKFdlYktpdERPTVdlYkFuaW1hdGlvbiogc2VsZikK
K3sKKyNpZiBFTkFCTEUoV0VCX0FOSU1BVElPTlMpCisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
V0VCX0FOSU1BVElPTihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2ViQW5pbWF0aW9uKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpBbmltYXRpb25UaW1l
bGluZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRpbWVsaW5lKCkpOworICAg
IHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKHNlbGYpOworICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIldl
YiBBbmltYXRpb25zIikKKyAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBFTkFCTEUoV0VCX0FOSU1B
VElPTlMpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViQW5pbWF0aW9uLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdl
YkFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2FmMGQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYkFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNzUgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NV2ViQW5p
bWF0aW9uX2gKKyNkZWZpbmUgV2ViS2l0RE9NV2ViQW5pbWF0aW9uX2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9XRUJfQU5JTUFUSU9OICAgICAgICAgICAgKHdlYmtpdF9kb21fd2ViX2Fu
aW1hdGlvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQl9BTklNQVRJT04ob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RP
TV9UWVBFX1dFQl9BTklNQVRJT04sIFdlYktpdERPTVdlYkFuaW1hdGlvbikpCisjZGVmaW5lIFdF
QktJVF9ET01fV0VCX0FOSU1BVElPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0VCX0FOSU1BVElPTiwgV2ViS2l0RE9N
V2ViQW5pbWF0aW9uQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfV0VCX0FOSU1BVElPTihv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9N
X1RZUEVfV0VCX0FOSU1BVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfV0VCX0FOSU1BVElP
Tl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
RE9NX1RZUEVfV0VCX0FOSU1BVElPTikpCisjZGVmaW5lIFdFQktJVF9ET01fV0VCX0FOSU1BVElP
Tl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfRE9NX1RZUEVfV0VCX0FOSU1BVElPTiwgV2ViS2l0RE9NV2ViQW5pbWF0aW9uQ2xhc3MpKQor
CitzdHJ1Y3QgX1dlYktpdERPTVdlYkFuaW1hdGlvbiB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBh
cmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NV2ViQW5pbWF0aW9uQ2xhc3Mg
eworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9kb21fd2ViX2FuaW1hdGlvbl9nZXRfdHlwZSh2b2lkKTsKKworLyoq
CisgKiB3ZWJraXRfZG9tX3dlYl9hbmltYXRpb25fZ2V0X2VmZmVjdDoKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01XZWJBbmltYXRpb24KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEg
I1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBXZWJLaXRET01BbmltYXRpb25FZmZlY3QqCit3ZWJraXRfZG9tX3dlYl9h
bmltYXRpb25fZ2V0X2VmZmVjdChXZWJLaXRET01XZWJBbmltYXRpb24qIHNlbGYpOworCisvKioK
KyAqIHdlYmtpdF9kb21fd2ViX2FuaW1hdGlvbl9nZXRfdGltZWxpbmU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NV2ViQW5pbWF0aW9uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBB
ICNXZWJLaXRET01BbmltYXRpb25UaW1lbGluZQorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01BbmltYXRpb25UaW1lbGluZSoKK3dlYmtpdF9kb21f
d2ViX2FuaW1hdGlvbl9nZXRfdGltZWxpbmUoV2ViS2l0RE9NV2ViQW5pbWF0aW9uKiBzZWxmKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAq
LworI2VuZGlmIC8qIFdlYktpdERPTVdlYkFuaW1hdGlvbl9oICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVdlYkFuaW1hdGlvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzODE1MjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVdlYkFuaW1hdGlvblByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVdlYkFuaW1hdGlvblByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01XZWJBbmltYXRpb25Qcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvV2ViQW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTVdl
YkFuaW1hdGlvbi5oPgorI2lmIEVOQUJMRShXRUJfQU5JTUFUSU9OUykKKworbmFtZXNwYWNlIFdl
YktpdCB7CitXZWJLaXRET01XZWJBbmltYXRpb24qIHdyYXBXZWJBbmltYXRpb24oV2ViQ29yZTo6
V2ViQW5pbWF0aW9uKik7CitXZWJLaXRET01XZWJBbmltYXRpb24qIGtpdChXZWJDb3JlOjpXZWJB
bmltYXRpb24qKTsKK1dlYkNvcmU6OldlYkFuaW1hdGlvbiogY29yZShXZWJLaXRET01XZWJBbmlt
YXRpb24qKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyogRU5BQkxFKFdFQl9B
TklNQVRJT05TKSAqLworCisjZW5kaWYgLyogV2ViS2l0RE9NV2ViQW5pbWF0aW9uUHJpdmF0ZV9o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVkRmxvdy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5h
bWVkRmxvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkMjMxZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93LmNwcApAQCAtMCwwICsxLDI1
OSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTVdlYktpdE5hbWVkRmxvdy5oIgorCisjaW5jbHVkZSA8V2Vi
Q29yZS9DU1NJbXBvcnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2Rl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNs
dWRlICJHT2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg+CisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0RE9NRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlTGlz
dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQ
cml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX0RP
TV9XRUJLSVRfTkFNRURfRkxPV19HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRURfRkxPVywgV2ViS2l0RE9N
V2ViS2l0TmFtZWRGbG93UHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktp
dE5hbWVkRmxvd1ByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3c+
IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIGtpdChXZWJDb3JlOjpX
ZWJLaXROYW1lZEZsb3cqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRURfRkxPVyhyZXQpOworCisgICAgcmV0
dXJuIHdyYXBXZWJLaXROYW1lZEZsb3cob2JqKTsKK30KKworV2ViQ29yZTo6V2ViS2l0TmFtZWRG
bG93KiBjb3JlKFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVdl
YktpdE5hbWVkRmxvdyogd3JhcFdlYktpdE5hbWVkRmxvdyhXZWJDb3JlOjpXZWJLaXROYW1lZEZs
b3cqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVf
V0VCS0lUX05BTUVEX0ZMT1csICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lZF9mbG93X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0
YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
Q29yZTo6RXZlbnQqIGNvcmVFdmVudCA9IFdlYktpdDo6Y29yZShldmVudCk7CisgICAgaWYgKCFj
b3JlRXZlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJDb3JlOjpXZWJLaXROYW1l
ZEZsb3cqIGNvcmVUYXJnZXQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cq
PihXRUJLSVRfRE9NX09CSkVDVCh0YXJnZXQpLT5jb3JlT2JqZWN0KTsKKworICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdib29sZWFuIHJlc3VsdCA9IGNvcmVUYXJnZXQt
PmRpc3BhdGNoRXZlbnRGb3JCaW5kaW5ncygqY29yZUV2ZW50LCBlYyk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZGVzY3JpcHRpb24uY29kZSwgZGVzY3JpcHRpb24ubmFtZSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lZF9mbG93X2FkZF9ldmVudF9saXN0ZW5lcihXZWJLaXRET01FdmVudFRhcmdl
dCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJlKiBoYW5kbGVyLCBnYm9v
bGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyogY29yZVRh
cmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyo+KFdFQktJVF9ET01f
T0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBXZWJLaXQ6OkdPYmplY3RF
dmVudExpc3RlbmVyOjphZGRFdmVudExpc3RlbmVyKEdfT0JKRUNUKHRhcmdldCksIGNvcmVUYXJn
ZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X3JlbW92ZV9ldmVudF9saXN0ZW5lcihXZWJL
aXRET01FdmVudFRhcmdldCogdGFyZ2V0LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIEdDbG9zdXJl
KiBoYW5kbGVyLCBnYm9vbGVhbiB1c2VDYXB0dXJlKQoreworICAgIFdlYkNvcmU6OldlYktpdE5h
bWVkRmxvdyogY29yZVRhcmdldCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYktpdE5hbWVkRmxv
dyo+KFdFQktJVF9ET01fT0JKRUNUKHRhcmdldCktPmNvcmVPYmplY3QpOworICAgIHJldHVybiBX
ZWJLaXQ6OkdPYmplY3RFdmVudExpc3RlbmVyOjpyZW1vdmVFdmVudExpc3RlbmVyKEdfT0JKRUNU
KHRhcmdldCksIGNvcmVUYXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgdXNlQ2FwdHVyZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZl
bnRUYXJnZXRJZmFjZSogaWZhY2UpCit7CisgICAgaWZhY2UtPmRpc3BhdGNoX2V2ZW50ID0gd2Vi
a2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19kaXNwYXRjaF9ldmVudDsKKyAgICBpZmFjZS0+YWRk
X2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19hZGRfZXZlbnRf
bGlzdGVuZXI7CisgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21f
d2Via2l0X25hbWVkX2Zsb3dfcmVtb3ZlX2V2ZW50X2xpc3RlbmVyOworfQorCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERShXZWJLaXRET01XZWJLaXROYW1lZEZsb3csIHdlYmtpdF9kb21fd2Via2l0
X25hbWVkX2Zsb3csIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RShXRUJLSVRfRE9NX1RZUEVfRVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9p
bml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTkFNRSwKKyAgICBQUk9QX09W
RVJTRVQsCisgICAgUFJPUF9GSVJTVF9FTVBUWV9SRUdJT05fSU5ERVgsCit9OworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2ZpbmFsaXplKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9XRUJLSVRfTkFNRURfRkxPV19HRVRfUFJJVkFURShvYmplY3QpOworCisgICAgV2ViS2l0
OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0KCkpOworCisgICAg
cHJpdi0+fldlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3df
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93
KiBzZWxmID0gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRURfRkxPVyhvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX05BTUU6CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X25hbWUo
c2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1ZFUlNFVDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19n
ZXRfb3ZlcnNldChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GSVJTVF9F
TVBUWV9SRUdJT05fSU5ERVg6CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIHdlYmtp
dF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X2ZpcnN0X2VtcHR5X3JlZ2lvbl9pbmRleChzZWxm
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV93ZWJraXRfbmFt
ZWRfZmxvd19jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
Q291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAg
ICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3dlYmtpdF9uYW1l
ZF9mbG93X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRp
ZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01XZWJLaXROYW1l
ZEZsb3dQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRURfRkxPV19HRVRfUFJJ
VkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpXZWJLaXROYW1lZEZsb3cqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fd2Via2l0X25hbWVkX2Zsb3dfY2xhc3NfaW5pdChXZWJLaXRET01XZWJLaXROYW1lZEZs
b3dDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0
ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9tX3dlYmtpdF9u
YW1lZF9mbG93X2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfTkFNRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJuYW1lIiwKKyAgICAgICAgICAgICJXZWJLaXROYW1lZEZsb3c6bmFtZSIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdjaGFyKiBXZWJLaXROYW1lZEZsb3c6bmFtZSIsCisgICAg
ICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAor
ICAgICAgICBQUk9QX09WRVJTRVQsCisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAg
ICAgICAgICAgIm92ZXJzZXQiLAorICAgICAgICAgICAgIldlYktpdE5hbWVkRmxvdzpvdmVyc2V0
IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2Jvb2xlYW4gV2ViS2l0TmFtZWRGbG93Om92ZXJz
ZXQiLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9GSVJTVF9FTVBUWV9SRUdJT05fSU5ERVgsCisgICAg
ICAgIGdfcGFyYW1fc3BlY19sb25nKAorICAgICAgICAgICAgImZpcnN0LWVtcHR5LXJlZ2lvbi1p
bmRleCIsCisgICAgICAgICAgICAiV2ViS2l0TmFtZWRGbG93OmZpcnN0LWVtcHR5LXJlZ2lvbi1p
bmRleCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdsb25nIFdlYktpdE5hbWVkRmxvdzpmaXJz
dC1lbXB0eS1yZWdpb24taW5kZXgiLAorICAgICAgICAgICAgR19NSU5MT05HLCBHX01BWExPTkcs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2luaXQoV2ViS2l0RE9NV2ViS2l0TmFt
ZWRGbG93KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVdlYktpdE5hbWVkRmxvd1ByaXZhdGUq
IHByaXYgPSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XX0dFVF9QUklWQVRFKHJlcXVlc3Qp
OworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0ZSgpOworfQor
CitXZWJLaXRET01Ob2RlTGlzdCogd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfcmVn
aW9uc19ieV9jb250ZW50KFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZiwgV2ViS2l0RE9N
Tm9kZSogY29udGVudE5vZGUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX05B
TUVEX0ZMT1coc2VsZiksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01f
SVNfTk9ERShjb250ZW50Tm9kZSksIDApOworICAgIFdlYkNvcmU6OldlYktpdE5hbWVkRmxvdyog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBjb252ZXJ0ZWRD
b250ZW50Tm9kZSA9IFdlYktpdDo6Y29yZShjb250ZW50Tm9kZSk7CisgICAgUmVmUHRyPFdlYkNv
cmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+Z2V0UmVnaW9u
c0J5Q29udGVudChjb252ZXJ0ZWRDb250ZW50Tm9kZSkpOworICAgIHJldHVybiBXZWJLaXQ6Omtp
dChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworV2ViS2l0RE9NTm9kZUxpc3QqIHdlYmtpdF9k
b21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X3JlZ2lvbnMoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93
KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQktJVF9OQU1FRF9GTE9XKHNl
bGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVMaXN0PiBnb2JqZWN0UmVzdWx0ID0g
V1RGOjpnZXRQdHIoaXRlbS0+Z2V0UmVnaW9ucygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQo
Z29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGVMaXN0KiB3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lZF9mbG93X2dldF9jb250ZW50KFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyog
c2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfTkFNRURfRkxPVyhzZWxm
KSwgMCk7CisgICAgV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93KiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlTGlzdD4gZ29iamVjdFJlc3VsdCA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmdldENvbnRlbnQoKSk7CisgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOworfQorCitnY2hhciogd2Via2l0X2RvbV93ZWJraXRfbmFtZWRf
Zmxvd19nZXRfbmFtZShXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYpCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX05BTUVEX0ZMT1coc2VsZiksIDApOworICAgIFdlYkNv
cmU6OldlYktpdE5hbWVkRmxvdyogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hh
ciogcmVzdWx0ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5uYW1lKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0
X292ZXJzZXQoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfRE9NX0lTX1dFQktJVF9OQU1FRF9GTE9XKHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29y
ZTo6V2ViS2l0TmFtZWRGbG93KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IGl0ZW0tPm92ZXJzZXQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
bG9uZyB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9maXJzdF9lbXB0eV9yZWdpb25f
aW5kZXgoV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93KiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1dFQktJVF9OQU1FRF9GTE9XKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpXZWJL
aXROYW1lZEZsb3cqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0
ID0gaXRlbS0+Zmlyc3RFbXB0eVJlZ2lvbkluZGV4KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRG
bG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NDdkMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93LmgKQEAgLTAsMCArMSwxMjAgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NV2ViS2l0TmFt
ZWRGbG93X2gKKyNkZWZpbmUgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93X2gKKworI2lmZGVmIFdF
QktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L3dlYmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9ET01fVFlQRV9XRUJLSVRfTkFNRURfRkxPVyAgICAgICAgICAgICh3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lZF9mbG93X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fV0VCS0lU
X05BTUVEX0ZMT1cob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FRF9GTE9XLCBXZWJLaXRET01XZWJLaXRO
YW1lZEZsb3cpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9XRUJLSVRfTkFNRURfRkxPVywgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93Q2xhc3MpCisjZGVm
aW5lIFdFQktJVF9ET01fSVNfV0VCS0lUX05BTUVEX0ZMT1cob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBFX1dFQktJVF9OQU1FRF9G
TE9XKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19XRUJLSVRfTkFNRURfRkxPV19DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0VC
S0lUX05BTUVEX0ZMT1cpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FRF9GTE9XX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9E
T01fVFlQRV9XRUJLSVRfTkFNRURfRkxPVywgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93Q2xhc3Mp
KQorCitzdHJ1Y3QgX1dlYktpdERPTVdlYktpdE5hbWVkRmxvdyB7CisgICAgV2ViS2l0RE9NT2Jq
ZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0RE9NV2ViS2l0TmFtZWRG
bG93Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X3R5cGUo
dm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfcmVnaW9u
c19ieV9jb250ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTVdlYktpdE5hbWVkRmxvdworICog
QGNvbnRlbnROb2RlOiBBICNXZWJLaXRET01Ob2RlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IGZ1bGwpOiBBICNXZWJLaXRET01Ob2RlTGlzdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlTGlzdCoKK3dlYmtpdF9kb21fd2Via2l0X25h
bWVkX2Zsb3dfZ2V0X3JlZ2lvbnNfYnlfY29udGVudChXZWJLaXRET01XZWJLaXROYW1lZEZsb3cq
IHNlbGYsIFdlYktpdERPTU5vZGUqIGNvbnRlbnROb2RlKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lZF9mbG93X2dldF9yZWdpb25zOgorICogQHNlbGY6IEEgI1dlYktpdERPTVdl
YktpdE5hbWVkRmxvdworICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0
RE9NTm9kZUxpc3QKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkg
V2ViS2l0RE9NTm9kZUxpc3QqCit3ZWJraXRfZG9tX3dlYmtpdF9uYW1lZF9mbG93X2dldF9yZWdp
b25zKFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZik7CisKKy8qKgorICogd2Via2l0X2Rv
bV93ZWJraXRfbmFtZWRfZmxvd19nZXRfY29udGVudDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01X
ZWJLaXROYW1lZEZsb3cKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktp
dERPTU5vZGVMaXN0CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IFdlYktpdERPTU5vZGVMaXN0Kgord2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfY29u
dGVudChXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9k
b21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0X25hbWU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2Vi
S2l0TmFtZWRGbG93CisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3dlYmtpdF9uYW1l
ZF9mbG93X2dldF9uYW1lKFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyogc2VsZik7CisKKy8qKgor
ICogd2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfb3ZlcnNldDoKKyAqIEBzZWxmOiBB
ICNXZWJLaXRET01XZWJLaXROYW1lZEZsb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnYm9vbGVhbgor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X2RvbV93ZWJraXRfbmFtZWRfZmxvd19nZXRfb3ZlcnNldChXZWJLaXRET01XZWJLaXROYW1l
ZEZsb3cqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2Via2l0X25hbWVkX2Zsb3dfZ2V0
X2ZpcnN0X2VtcHR5X3JlZ2lvbl9pbmRleDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XZWJLaXRO
YW1lZEZsb3cKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworICoKKyAqIFN0YWJpbGl0eTogVW5z
dGFibGUKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV93ZWJraXRfbmFtZWRfZmxv
d19nZXRfZmlyc3RfZW1wdHlfcmVnaW9uX2luZGV4KFdlYktpdERPTVdlYktpdE5hbWVkRmxvdyog
c2VsZik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01XZWJLaXROYW1lZEZsb3dfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVkRmxv
d1ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2EwYWU0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3dQcml2YXRlLmgKQEAgLTAsMCAr
MSwzMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRE
T01XZWJLaXROYW1lZEZsb3dQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NV2ViS2l0TmFtZWRG
bG93UHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1dlYktpdE5hbWVkRmxvdy5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01XZWJLaXROYW1lZEZsb3cuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CitXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIHdyYXBXZWJLaXROYW1lZEZsb3co
V2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93Kik7CitXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqIGtp
dChXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3cqKTsKK1dlYkNvcmU6OldlYktpdE5hbWVkRmxvdyog
Y29yZShXZWJLaXRET01XZWJLaXROYW1lZEZsb3cqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLyogV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93UHJpdmF0ZV9oICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVdlYktpdE5hbWVzcGFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVzcGFjZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhODQ1YgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdERPTVdlYktpdE5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DU1NJbXBv
cnRSdWxlLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oPgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FU1BBQ0Vf
R0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRf
RE9NX1RZUEVfV0VCS0lUX05BTUVTUEFDRSwgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0
ZSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGUgewor
I2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgUmVmUHRyPFdlYkNvcmU6Oldl
YktpdE5hbWVzcGFjZT4gY29yZU9iamVjdDsKKyNlbmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNTQUdF
X0hBTkRMRVJTKQorfSBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlOworCisjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYktp
dERPTVdlYktpdE5hbWVzcGFjZSoga2l0KFdlYkNvcmU6OldlYktpdE5hbWVzcGFjZSogb2JqKQor
eworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9pbnRlciBy
ZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJLSVRfRE9N
X1dFQktJVF9OQU1FU1BBQ0UocmV0KTsKKworICAgIHJldHVybiB3cmFwV2ViS2l0TmFtZXNwYWNl
KG9iaik7Cit9CisKK1dlYkNvcmU6OldlYktpdE5hbWVzcGFjZSogY29yZShXZWJLaXRET01XZWJL
aXROYW1lc3BhY2UqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpXZWJLaXROYW1lc3BhY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+
Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01XZWJLaXROYW1lc3BhY2UqIHdyYXBXZWJL
aXROYW1lc3BhY2UoV2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKiBjb3JlT2JqZWN0KQoreworICAg
IEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9XRUJLSVRfTkFNRVNQ
QUNFKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVTUEFDRSwgImNvcmUt
b2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlLCB3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3Bh
Y2UsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQ
Uk9QX01FU1NBR0VfSEFORExFUlMsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYmtp
dF9uYW1lc3BhY2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVdl
YktpdE5hbWVzcGFjZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FU1BBQ0Vf
R0VUX1BSSVZBVEUob2JqZWN0KTsKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQor
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgp
KTsKKyNlbmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIHByaXYtPn5X
ZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01XZWJLaXROYW1lc3BhY2UqIHNlbGYgPSBX
RUJLSVRfRE9NX1dFQktJVF9OQU1FU1BBQ0Uob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVy
dHlJZCkgeworICAgIGNhc2UgUFJPUF9NRVNTQUdFX0hBTkRMRVJTOgorICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9nZXRfbWVzc2Fn
ZV9oYW5kbGVycyhzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0
X2RvbV93ZWJraXRfbmFtZXNwYWNlX2NvbnN0cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0
cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fd2Via2l0X25hbWVzcGFjZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rvcih0eXBlLCBjb25z
dHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMpOworI2lmIEVOQUJMRShV
U0VSX01FU1NBR0VfSEFORExFUlMpCisgICAgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9ET01fV0VCS0lUX05BTUVTUEFDRV9HRVRfUFJJVkFURShvYmplY3Qp
OworICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpXZWJLaXROYW1l
c3BhY2UqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJL
aXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsK
KyNlbmRpZiAvLyBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9jbGFzc19p
bml0KFdlYktpdERPTVdlYktpdE5hbWVzcGFjZUNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJL
aXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1
Y3RvciA9IHdlYmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9jb25zdHJ1Y3RvcjsKKyAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2ZpbmFsaXpl
OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV93ZWJraXRfbmFt
ZXNwYWNlX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9NRVNTQUdFX0hBTkRMRVJT
LAorICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm1lc3NhZ2UtaGFu
ZGxlcnMiLAorICAgICAgICAgICAgIldlYktpdE5hbWVzcGFjZTptZXNzYWdlLWhhbmRsZXJzIiwK
KyAgICAgICAgICAgICJyZWFkLW9ubHkgV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZSogV2ViS2l0TmFtZXNwYWNlOm1lc3NhZ2UtaGFuZGxlcnMiLAorICAgICAgICAgICAgV0VC
S0lUX0RPTV9UWVBFX1VTRVJfTUVTU0FHRV9IQU5ETEVSU19OQU1FU1BBQ0UsCisgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3dlYmtpdF9uYW1lc3BhY2VfaW5pdChXZWJLaXRET01XZWJLaXROYW1lc3BhY2UqIHJlcXVlc3Qp
Cit7CisgICAgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9E
T01fV0VCS0lUX05BTUVTUEFDRV9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYp
IFdlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZhdGUoKTsKK30KKworV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZSogd2Via2l0X2RvbV93ZWJraXRfbmFtZXNwYWNlX2dldF9t
ZXNzYWdlX2hhbmRsZXJzKFdlYktpdERPTVdlYktpdE5hbWVzcGFjZSogc2VsZikKK3sKKyNpZiBF
TkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQorICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dF
QktJVF9OQU1FU1BBQ0Uoc2VsZiksIDApOworICAgIFdlYkNvcmU6OldlYktpdE5hbWVzcGFjZSog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VXNlck1lc3Nh
Z2VIYW5kbGVyc05hbWVzcGFjZT4gZ29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1l
c3NhZ2VIYW5kbGVycygpKTsKKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5n
ZXQoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzZWxmKTsKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJVc2VyIE1lc3NhZ2UgSGFuZGxlcnMiKQorICAgIHJldHVybiAw
OworI2VuZGlmIC8qIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpICovCit9CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVzcGFjZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZGVlNWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVdlYktpdE5hbWVzcGFjZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlX2gK
KyNkZWZpbmUgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlX2gKKworI2lmZGVmIFdFQktJVF9ET01f
VVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRv
bWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9XRUJLSVRfTkFNRVNQQUNFICAgICAgICAgICAgKHdlYmtpdF9kb21fd2Via2l0X25h
bWVzcGFjZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9NX1dFQktJVF9OQU1FU1BBQ0Uo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X0RPTV9UWVBFX1dFQktJVF9OQU1FU1BBQ0UsIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX05BTUVTUEFDRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVT
UEFDRSwgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlQ2xhc3MpCisjZGVmaW5lIFdFQktJVF9ET01f
SVNfV0VCS0lUX05BTUVTUEFDRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVTUEFDRSkpCisjZGVmaW5lIFdF
QktJVF9ET01fSVNfV0VCS0lUX05BTUVTUEFDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVTUEFDRSkpCisj
ZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX05BTUVTUEFDRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX05BTUVT
UEFDRSwgV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERP
TVdlYktpdE5hbWVzcGFjZSB7CisgICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsK
K307CisKK3N0cnVjdCBfV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlQ2xhc3MgeworICAgIFdlYktp
dERPTU9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb21fd2Via2l0X25hbWVzcGFjZV9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfZ2V0X21lc3NhZ2VfaGFuZGxlcnM6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBICNXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlCisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIFdlYktpdERPTVVzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2UqCit3ZWJraXRfZG9tX3dlYmtpdF9uYW1lc3BhY2VfZ2V0X21lc3NhZ2Vf
aGFuZGxlcnMoV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKiBzZWxmKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTVdlYktpdE5hbWVzcGFjZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdE5hbWVz
cGFjZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYjhmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TVdlYktpdE5hbWVzcGFjZVByaXZhdGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVdlYktpdE5hbWVzcGFjZVByaXZh
dGVfaAorI2RlZmluZSBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlX2gKKworI2luY2x1
ZGUgPFdlYkNvcmUvV2ViS2l0TmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktp
dERPTVdlYktpdE5hbWVzcGFjZS5oPgorI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMp
CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKiB3cmFwV2Vi
S2l0TmFtZXNwYWNlKFdlYkNvcmU6OldlYktpdE5hbWVzcGFjZSopOworV2ViS2l0RE9NV2ViS2l0
TmFtZXNwYWNlKiBraXQoV2ViQ29yZTo6V2ViS2l0TmFtZXNwYWNlKik7CitXZWJDb3JlOjpXZWJL
aXROYW1lc3BhY2UqIGNvcmUoV2ViS2l0RE9NV2ViS2l0TmFtZXNwYWNlKik7Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpICov
CisKKyNlbmRpZiAvKiBXZWJLaXRET01XZWJLaXROYW1lc3BhY2VQcml2YXRlX2ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9E
T00vV2ViS2l0RE9NV2ViS2l0UG9pbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXRQb2ludC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhNTc3OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NV2ViS2l0UG9pbnQuY3BwCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9N
V2ViS2l0UG9pbnQuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRF
eGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9XRUJLSVRfUE9JTlRfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX1BPSU5ULCBX
ZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01X
ZWJLaXRQb2ludFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpXZWJLaXRQb2ludD4gY29y
ZU9iamVjdDsKK30gV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViS2l0RE9NV2ViS2l0UG9pbnQqIGtpdChXZWJDb3JlOjpXZWJLaXRQb2ludCog
b2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChncG9p
bnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAgICAgIHJldHVybiBXRUJL
SVRfRE9NX1dFQktJVF9QT0lOVChyZXQpOworCisgICAgcmV0dXJuIHdyYXBXZWJLaXRQb2ludChv
YmopOworfQorCitXZWJDb3JlOjpXZWJLaXRQb2ludCogY29yZShXZWJLaXRET01XZWJLaXRQb2lu
dCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6
OldlYktpdFBvaW50Kj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHdyYXBXZWJLaXRQb2ludChXZWJDb3JlOjpX
ZWJLaXRQb2ludCogY29yZU9iamVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAg
cmV0dXJuIFdFQktJVF9ET01fV0VCS0lUX1BPSU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZ
UEVfV0VCS0lUX1BPSU5ULCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVdlYktp
dFBvaW50LCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludCwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkK
KworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfWCwKKyAgICBQUk9QX1ksCit9OworCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlKiBwcml2ID0gV0VCS0lUX0RP
TV9XRUJLSVRfUE9JTlRfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2Jq
ZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5X
ZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX3dlYmtpdF9wb2ludF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9zZXRfcHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
KiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01XZWJLaXRQb2ludCogc2VsZiA9IFdFQktJVF9ET01f
V0VCS0lUX1BPSU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBj
YXNlIFBST1BfWDoKKyAgICAgICAgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfc2V0X3goc2VsZiwg
Z192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X1k6CisgICAgICAgIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X3NldF95KHNlbGYsIGdfdmFsdWVf
Z2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3dlYmtpdF9wb2ludF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01X
ZWJLaXRQb2ludCogc2VsZiA9IFdFQktJVF9ET01fV0VCS0lUX1BPSU5UKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfWDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfZmxvYXQodmFsdWUsIHdlYmtpdF9kb21fd2Via2l0X3BvaW50X2dldF94KHNlbGYpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zs
b2F0KHZhbHVlLCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9nZXRfeShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfY29uc3RydWN0
b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29u
c3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0
ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV93ZWJraXRfcG9pbnRfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9w
ZXJ0aWVzKTsKKworICAgIFdlYktpdERPTVdlYktpdFBvaW50UHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9ET01fV0VCS0lUX1BPSU5UX0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9i
amVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OldlYktpdFBvaW50Kj4oV0VCS0lUX0RPTV9PQkpF
Q1Qob2JqZWN0KS0+Y29yZU9iamVjdCk7CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6cHV0
KHByaXYtPmNvcmVPYmplY3QuZ2V0KCksIG9iamVjdCk7CisKKyAgICByZXR1cm4gb2JqZWN0Owor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9jbGFzc19pbml0KFdlYktp
dERPTVdlYktpdFBvaW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVdlYktpdFBv
aW50UHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9t
X3dlYmtpdF9wb2ludF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5zZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9zZXRfcHJvcGVydHk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9nZXRfcHJv
cGVydHk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0
KAorICAgICAgICAgICAgIngiLAorICAgICAgICAgICAgIldlYktpdFBvaW50OngiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Zsb2F0IFdlYktpdFBvaW50OngiLAorICAgICAgICAgICAgLUdf
TUFYRkxPQVQsIEdfTUFYRkxPQVQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0
KAorICAgICAgICAgICAgInkiLAorICAgICAgICAgICAgIldlYktpdFBvaW50OnkiLAorICAgICAg
ICAgICAgInJlYWQtd3JpdGUgZ2Zsb2F0IFdlYktpdFBvaW50OnkiLAorICAgICAgICAgICAgLUdf
TUFYRkxPQVQsIEdfTUFYRkxPQVQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfaW5pdChX
ZWJLaXRET01XZWJLaXRQb2ludCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01XZWJLaXRQb2lu
dFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1dFQktJVF9QT0lOVF9HRVRfUFJJVkFURShyZXF1
ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVdlYktpdFBvaW50UHJpdmF0ZSgpOworfQor
CitnZmxvYXQgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3goV2ViS2l0RE9NV2ViS2l0UG9p
bnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX1BPSU5UKHNlbGYp
LCAwKTsKKyAgICBXZWJDb3JlOjpXZWJLaXRQb2ludCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnZmxvYXQgcmVzdWx0ID0gaXRlbS0+eCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfc2V0X3goV2ViS2l0RE9NV2ViS2l0UG9p
bnQqIHNlbGYsIGdmbG9hdCB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1dFQktJVF9Q
T0lOVChzZWxmKSk7CisgICAgV2ViQ29yZTo6V2ViS2l0UG9pbnQqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgaXRlbS0+c2V0WCh2YWx1ZSk7Cit9CisKK2dmbG9hdCB3ZWJraXRfZG9t
X3dlYmtpdF9wb2ludF9nZXRfeShXZWJLaXRET01XZWJLaXRQb2ludCogc2VsZikKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0RPTV9JU19XRUJLSVRfUE9JTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6
OldlYktpdFBvaW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCByZXN1
bHQgPSBpdGVtLT55KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9t
X3dlYmtpdF9wb2ludF9zZXRfeShXZWJLaXRET01XZWJLaXRQb2ludCogc2VsZiwgZ2Zsb2F0IHZh
bHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0VCS0lUX1BPSU5UKHNlbGYpKTsKKyAgICBX
ZWJDb3JlOjpXZWJLaXRQb2ludCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5zZXRZKHZhbHVlKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XZWJLaXRQb2ludC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRE
T01XZWJLaXRQb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYmU3
ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdlYktpdFBvaW50LmgKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01XZWJL
aXRQb2ludF9oCisjZGVmaW5lIFdlYktpdERPTVdlYktpdFBvaW50X2gKKworI2lmZGVmIFdFQktJ
VF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dl
YmtpdGRvbWRlZmluZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9ET01fVFlQRV9XRUJLSVRfUE9JTlQgICAgICAgICAgICAod2Via2l0X2RvbV93ZWJraXRf
cG9pbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XRUJLSVRfUE9JTlQob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9U
WVBFX1dFQktJVF9QT0lOVCwgV2ViS2l0RE9NV2ViS2l0UG9pbnQpKQorI2RlZmluZSBXRUJLSVRf
RE9NX1dFQktJVF9QT0lOVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfV0VCS0lUX1BPSU5ULCBXZWJLaXRET01XZWJLaXRQ
b2ludENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1dFQktJVF9QT0lOVChvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfV0VC
S0lUX1BPSU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19XRUJLSVRfUE9JTlRfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1dF
QktJVF9QT0lOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fV0VCS0lUX1BPSU5UX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9X
RUJLSVRfUE9JTlQsIFdlYktpdERPTVdlYktpdFBvaW50Q2xhc3MpKQorCitzdHJ1Y3QgX1dlYktp
dERPTVdlYktpdFBvaW50IHsKKyAgICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOwor
fTsKKworc3RydWN0IF9XZWJLaXRET01XZWJLaXRQb2ludENsYXNzIHsKKyAgICBXZWJLaXRET01P
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
ZG9tX3dlYmtpdF9wb2ludF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3dl
YmtpdF9wb2ludF9nZXRfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XZWJLaXRQb2ludAorICoK
KyAqIFJldHVybnM6IEEgI2dmbG9hdAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLwor
V0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF9kb21fd2Via2l0X3BvaW50X2dldF94KFdlYktpdERP
TVdlYktpdFBvaW50KiBzZWxmKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9z
ZXRfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XZWJLaXRQb2ludAorICogQHZhbHVlOiBBICNn
ZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV93ZWJraXRfcG9pbnRfc2V0X3goV2ViS2l0RE9NV2ViS2l0UG9pbnQqIHNlbGYs
IGdmbG9hdCB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfZ2V0X3k6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2ViS2l0UG9pbnQKKyAqCisgKiBSZXR1cm5zOiBBICNn
ZmxvYXQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2Zsb2F0
Cit3ZWJraXRfZG9tX3dlYmtpdF9wb2ludF9nZXRfeShXZWJLaXRET01XZWJLaXRQb2ludCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV93ZWJraXRfcG9pbnRfc2V0X3k6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NV2ViS2l0UG9pbnQKKyAqIEB2YWx1ZTogQSAjZ2Zsb2F0CisgKgorICogU3Rh
YmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fd2Via2l0
X3BvaW50X3NldF95KFdlYktpdERPTVdlYktpdFBvaW50KiBzZWxmLCBnZmxvYXQgdmFsdWUpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICov
CisjZW5kaWYgLyogV2ViS2l0RE9NV2ViS2l0UG9pbnRfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01X
ZWJLaXRQb2ludFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NV2ViS2l0UG9pbnRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViZWFmMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0
RE9NV2ViS2l0UG9pbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRET01XZWJLaXRQb2ludFByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29y
ZS9XZWJLaXRQb2ludC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01XZWJLaXRQb2lu
dC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVdlYktpdFBvaW50KiB3cmFwV2Vi
S2l0UG9pbnQoV2ViQ29yZTo6V2ViS2l0UG9pbnQqKTsKK1dlYktpdERPTVdlYktpdFBvaW50KiBr
aXQoV2ViQ29yZTo6V2ViS2l0UG9pbnQqKTsKK1dlYkNvcmU6OldlYktpdFBvaW50KiBjb3JlKFdl
YktpdERPTVdlYktpdFBvaW50Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IFdlYktpdERPTVdlYktpdFBvaW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVs
RXZlbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xOTlkZThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50LmNw
cApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVdoZWVsRXZlbnQuaCIKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhj
ZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRl
ICJXZWJLaXRET01ET01XaW5kb3dQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NRXZlbnRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dERPTVdoZWVsRXZlbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5o
IgorI2luY2x1ZGUgIldlYktpdERPTVdoZWVsRXZlbnRVbnN0YWJsZS5oIgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJLaXRET01XaGVlbEV2ZW50KiBraXQoV2ViQ29yZTo6V2hlZWxFdmVudCogb2JqKQor
eworICAgIHJldHVybiBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UKGtpdChzdGF0aWNfY2FzdDxXZWJD
b3JlOjpFdmVudCo+KG9iaikpKTsKK30KKworV2ViQ29yZTo6V2hlZWxFdmVudCogY29yZShXZWJL
aXRET01XaGVlbEV2ZW50KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6V2hlZWxFdmVudCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVdoZWVsRXZlbnQqIHdyYXBXaGVlbEV2ZW50
KFdlYkNvcmU6OldoZWVsRXZlbnQqIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmpl
Y3QpOworICAgIHJldHVybiBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UKGdfb2JqZWN0X25ldyhXRUJL
SVRfRE9NX1RZUEVfV0hFRUxfRVZFTlQsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxw
dHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NV2hlZWxFdmVudCwgd2Via2l0X2RvbV93aGVlbF9ldmVudCwgV0VCS0lUX0RPTV9UWVBFX01P
VVNFX0VWRU5UKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9ERUxUQV9YLAorICAg
IFBST1BfREVMVEFfWSwKKyAgICBQUk9QX0RFTFRBX1osCisgICAgUFJPUF9ERUxUQV9NT0RFLAor
ICAgIFBST1BfV0hFRUxfREVMVEFfWCwKKyAgICBQUk9QX1dIRUVMX0RFTFRBX1ksCisgICAgUFJP
UF9XSEVFTF9ERUxUQSwKKyAgICBQUk9QX1dFQktJVF9ESVJFQ1RJT05fSU5WRVJURURfRlJPTV9E
RVZJQ0UsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYgPSBXRUJL
SVRfRE9NX1dIRUVMX0VWRU5UKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfREVMVEFfWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlKHZhbHVl
LCB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV94KHNlbGYpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0RFTFRBX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSh2
YWx1ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9ERUxUQV9aOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3Vi
bGUodmFsdWUsIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3ooc2VsZikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVMVEFfTU9ERToKKyAgICAgICAgZ192YWx1ZV9z
ZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX21vZGUoc2Vs
ZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0hFRUxfREVMVEFfWDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hl
ZWxfZGVsdGFfeChzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSEVFTF9E
RUxUQV9ZOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJraXRfZG9tX3doZWVs
X2V2ZW50X2dldF93aGVlbF9kZWx0YV95KHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1dIRUVMX0RFTFRBOgorICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCB3ZWJr
aXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YShzZWxmKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9XRUJLSVRfRElSRUNUSU9OX0lOVkVSVEVEX0ZST01fREVWSUNFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfZG9tX3doZWVsX2V2ZW50
X2dldF93ZWJraXRfZGlyZWN0aW9uX2ludmVydGVkX2Zyb21fZGV2aWNlKHNlbGYpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfY2xhc3NfaW5pdChX
ZWJLaXRET01XaGVlbEV2ZW50Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9wcm9w
ZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUxUQV9YLAorICAgICAgICBnX3BhcmFtX3NwZWNf
ZG91YmxlKAorICAgICAgICAgICAgImRlbHRhLXgiLAorICAgICAgICAgICAgIldoZWVsRXZlbnQ6
ZGVsdGEteCIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgV2hlZWxFdmVudDpkZWx0
YS14IiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUxUQV9Z
LAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAorICAgICAgICAgICAgImRlbHRhLXkiLAor
ICAgICAgICAgICAgIldoZWVsRXZlbnQ6ZGVsdGEteSIsCisgICAgICAgICAgICAicmVhZC1vbmx5
IGdkb3VibGUgV2hlZWxFdmVudDpkZWx0YS15IiwKKyAgICAgICAgICAgIC1HX01BWERPVUJMRSwg
R19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFz
cywKKyAgICAgICAgUFJPUF9ERUxUQV9aLAorICAgICAgICBnX3BhcmFtX3NwZWNfZG91YmxlKAor
ICAgICAgICAgICAgImRlbHRhLXoiLAorICAgICAgICAgICAgIldoZWVsRXZlbnQ6ZGVsdGEteiIs
CisgICAgICAgICAgICAicmVhZC1vbmx5IGdkb3VibGUgV2hlZWxFdmVudDpkZWx0YS16IiwKKyAg
ICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9ERUxUQV9NT0RFLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAiZGVsdGEtbW9kZSIsCisgICAg
ICAgICAgICAiV2hlZWxFdmVudDpkZWx0YS1tb2RlIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkg
Z3Vsb25nIFdoZWVsRXZlbnQ6ZGVsdGEtbW9kZSIsCisgICAgICAgICAgICAwLCBHX01BWFVMT05H
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfV0hFRUxfREVMVEFfWCwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAg
ICAgICAid2hlZWwtZGVsdGEteCIsCisgICAgICAgICAgICAiV2hlZWxFdmVudDp3aGVlbC1kZWx0
YS14IiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgV2hlZWxFdmVudDp3aGVlbC1kZWx0
YS14IiwKKyAgICAgICAgICAgIEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0hFRUxfREVMVEFf
WSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoCisgICAgICAgICAgICAid2hlZWwtZGVsdGEt
eSIsCisgICAgICAgICAgICAiV2hlZWxFdmVudDp3aGVlbC1kZWx0YS15IiwKKyAgICAgICAgICAg
ICJyZWFkLW9ubHkgZ2xvbmcgV2hlZWxFdmVudDp3aGVlbC1kZWx0YS15IiwKKyAgICAgICAgICAg
IEdfTUlOTE9ORywgR19NQVhMT05HLCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfV0hFRUxfREVMVEEsCisgICAgICAgIGdfcGFyYW1f
c3BlY19sb25nKAorICAgICAgICAgICAgIndoZWVsLWRlbHRhIiwKKyAgICAgICAgICAgICJXaGVl
bEV2ZW50OndoZWVsLWRlbHRhIiwKKyAgICAgICAgICAgICJyZWFkLW9ubHkgZ2xvbmcgV2hlZWxF
dmVudDp3aGVlbC1kZWx0YSIsCisgICAgICAgICAgICBHX01JTkxPTkcsIEdfTUFYTE9ORywgMCwK
KyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9Q
X1dFQktJVF9ESVJFQ1RJT05fSU5WRVJURURfRlJPTV9ERVZJQ0UsCisgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKAorICAgICAgICAgICAgIndlYmtpdC1kaXJlY3Rpb24taW52ZXJ0ZWQtZnJv
bS1kZXZpY2UiLAorICAgICAgICAgICAgIldoZWVsRXZlbnQ6d2Via2l0LWRpcmVjdGlvbi1pbnZl
cnRlZC1mcm9tLWRldmljZSIsCisgICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFdoZWVs
RXZlbnQ6d2Via2l0LWRpcmVjdGlvbi1pbnZlcnRlZC1mcm9tLWRldmljZSIsCisgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfaW5pdChXZWJLaXRET01XaGVlbEV2ZW50
KiByZXF1ZXN0KQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0KTsKK30KKwordm9pZCB3ZWJr
aXRfZG9tX3doZWVsX2V2ZW50X2luaXRfd2hlZWxfZXZlbnQoV2ViS2l0RE9NV2hlZWxFdmVudCog
c2VsZiwgZ2xvbmcgd2hlZWxEZWx0YVgsIGdsb25nIHdoZWVsRGVsdGFZLCBXZWJLaXRET01ET01X
aW5kb3cqIHZpZXcsIGdsb25nIHNjcmVlblgsIGdsb25nIHNjcmVlblksIGdsb25nIGNsaWVudFgs
IGdsb25nIGNsaWVudFksIGdib29sZWFuIGN0cmxLZXksIGdib29sZWFuIGFsdEtleSwgZ2Jvb2xl
YW4gc2hpZnRLZXksIGdib29sZWFuIG1ldGFLZXkpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19X
SEVFTF9FVkVOVChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX0RP
TV9XSU5ET1codmlldykpOworICAgIFdlYkNvcmU6OldoZWVsRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RE9NV2luZG93KiBjb252ZXJ0ZWRWaWV3ID0gV2Vi
S2l0Ojpjb3JlKHZpZXcpOworICAgIGl0ZW0tPmluaXRXaGVlbEV2ZW50KHdoZWVsRGVsdGFYLCB3
aGVlbERlbHRhWSwgY29udmVydGVkVmlldywgc2NyZWVuWCwgc2NyZWVuWSwgY2xpZW50WCwgY2xp
ZW50WSwgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSk7Cit9CisKK2dkb3VibGUg
d2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeChXZWJLaXRET01XaGVlbEV2ZW50KiBz
ZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UKHNlbGYpLCAwKTsK
KyAgICBXZWJDb3JlOjpXaGVlbEV2ZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+ZGVsdGFYKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZ2RvdWJsZSB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV95KFdlYktpdERPTVdo
ZWVsRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlQo
c2VsZiksIDApOworICAgIFdlYkNvcmU6OldoZWVsRXZlbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5kZWx0YVkoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitnZG91YmxlIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3oo
V2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19X
SEVFTF9FVkVOVChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVudCogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnZG91YmxlIHJlc3VsdCA9IGl0ZW0tPmRlbHRhWigpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2d1bG9uZyB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dl
dF9kZWx0YV9tb2RlKFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfV0hFRUxfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OldoZWVsRXZl
bnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ3Vsb25nIHJlc3VsdCA9IGl0ZW0t
PmRlbHRhTW9kZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21f
d2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhX3goV2ViS2l0RE9NV2hlZWxFdmVudCogc2VsZikK
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XSEVFTF9FVkVOVChzZWxmKSwgMCk7CisgICAg
V2ViQ29yZTo6V2hlZWxFdmVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9u
ZyByZXN1bHQgPSBpdGVtLT53aGVlbERlbHRhWCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2dsb25nIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVsX2RlbHRhX3koV2ViS2l0RE9N
V2hlZWxFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XSEVFTF9FVkVO
VChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6V2hlZWxFdmVudCogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnbG9uZyByZXN1bHQgPSBpdGVtLT53aGVlbERlbHRhWSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2dsb25nIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3doZWVs
X2RlbHRhKFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfV0hFRUxfRVZFTlQoc2VsZiksIDApOworICAgIFdlYkNvcmU6OldoZWVsRXZlbnQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzdWx0ID0gaXRlbS0+d2hlZWxE
ZWx0YSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2dib29sZWFuIHdlYmtpdF9kb21fd2hl
ZWxfZXZlbnRfZ2V0X3dlYmtpdF9kaXJlY3Rpb25faW52ZXJ0ZWRfZnJvbV9kZXZpY2UoV2ViS2l0
RE9NV2hlZWxFdmVudCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19XSEVFTF9F
VkVOVChzZWxmKSwgRkFMU0UpOworICAgIFdlYkNvcmU6OldoZWVsRXZlbnQqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+d2Via2l0RGlyZWN0
aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01XaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZlbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTNlOTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01X
aGVlbEV2ZW50LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVdoZWVs
RXZlbnRfaAorI2RlZmluZSBXZWJLaXRET01XaGVlbEV2ZW50X2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU1vdXNlRXZlbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1dIRUVMX0VWRU5UICAgICAgICAgICAgKHdlYmtpdF9k
b21fd2hlZWxfZXZlbnRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XSEVFTF9FVkVO
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfV0hFRUxfRVZFTlQsIFdlYktpdERPTVdoZWVsRXZlbnQpKQorI2RlZmluZSBX
RUJLSVRfRE9NX1dIRUVMX0VWRU5UX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9XSEVFTF9FVkVOVCwgV2ViS2l0RE9NV2hl
ZWxFdmVudENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1dIRUVMX0VWRU5UKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9X
SEVFTF9FVkVOVCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfV0hFRUxfRVZFTlRfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1dI
RUVMX0VWRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfV0hF
RUxfRVZFTlQsIFdlYktpdERPTVdoZWVsRXZlbnRDbGFzcykpCisKK3N0cnVjdCBfV2ViS2l0RE9N
V2hlZWxFdmVudCB7CisgICAgV2ViS2l0RE9NTW91c2VFdmVudCBwYXJlbnRfaW5zdGFuY2U7Cit9
OworCitzdHJ1Y3QgX1dlYktpdERPTVdoZWVsRXZlbnRDbGFzcyB7CisgICAgV2ViS2l0RE9NTW91
c2VFdmVudENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtp
dF9kb21fd2hlZWxfZXZlbnRfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV93
aGVlbF9ldmVudF9pbml0X3doZWVsX2V2ZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTVdoZWVs
RXZlbnQKKyAqIEB3aGVlbERlbHRhWDogQSAjZ2xvbmcKKyAqIEB3aGVlbERlbHRhWTogQSAjZ2xv
bmcKKyAqIEB2aWV3OiBBICNXZWJLaXRET01ET01XaW5kb3cKKyAqIEBzY3JlZW5YOiBBICNnbG9u
ZworICogQHNjcmVlblk6IEEgI2dsb25nCisgKiBAY2xpZW50WDogQSAjZ2xvbmcKKyAqIEBjbGll
bnRZOiBBICNnbG9uZworICogQGN0cmxLZXk6IEEgI2dib29sZWFuCisgKiBAYWx0S2V5OiBBICNn
Ym9vbGVhbgorICogQHNoaWZ0S2V5OiBBICNnYm9vbGVhbgorICogQG1ldGFLZXk6IEEgI2dib29s
ZWFuCisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfaW5p
dF93aGVlbF9ldmVudChXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmLCBnbG9uZyB3aGVlbERlbHRh
WCwgZ2xvbmcgd2hlZWxEZWx0YVksIFdlYktpdERPTURPTVdpbmRvdyogdmlldywgZ2xvbmcgc2Ny
ZWVuWCwgZ2xvbmcgc2NyZWVuWSwgZ2xvbmcgY2xpZW50WCwgZ2xvbmcgY2xpZW50WSwgZ2Jvb2xl
YW4gY3RybEtleSwgZ2Jvb2xlYW4gYWx0S2V5LCBnYm9vbGVhbiBzaGlmdEtleSwgZ2Jvb2xlYW4g
bWV0YUtleSk7CisKKy8qKgorICogd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hlZWxfZGVs
dGFfeDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01XaGVlbEV2ZW50CisgKgorICogUmV0dXJuczog
QSAjZ2xvbmcKKyoqLworV0VCS0lUX0FQSSBnbG9uZword2Via2l0X2RvbV93aGVlbF9ldmVudF9n
ZXRfd2hlZWxfZGVsdGFfeChXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsKKworLyoqCisgKiB3
ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YV95OgorICogQHNlbGY6IEEgI1dl
YktpdERPTVdoZWVsRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRf
QVBJIGdsb25nCit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YV95KFdlYktp
dERPTVdoZWVsRXZlbnQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRf
Z2V0X3doZWVsX2RlbHRhOgorICogQHNlbGY6IEEgI1dlYktpdERPTVdoZWVsRXZlbnQKKyAqCisg
KiBSZXR1cm5zOiBBICNnbG9uZworKiovCitXRUJLSVRfQVBJIGdsb25nCit3ZWJraXRfZG9tX3do
ZWVsX2V2ZW50X2dldF93aGVlbF9kZWx0YShXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTVdoZWVsRXZlbnRfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01XaGVlbEV2ZW50UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50UHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGMxZTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL1dlYktpdERPTVdoZWVsRXZlbnRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
KiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01XaGVlbEV2ZW50UHJp
dmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVdoZWVsRXZlbnRQcml2YXRlX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvV2hlZWxFdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01XaGVl
bEV2ZW50Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NV2hlZWxFdmVudCogd3Jh
cFdoZWVsRXZlbnQoV2ViQ29yZTo6V2hlZWxFdmVudCopOworV2ViS2l0RE9NV2hlZWxFdmVudCog
a2l0KFdlYkNvcmU6OldoZWVsRXZlbnQqKTsKK1dlYkNvcmU6OldoZWVsRXZlbnQqIGNvcmUoV2Vi
S2l0RE9NV2hlZWxFdmVudCopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBX
ZWJLaXRET01XaGVlbEV2ZW50UHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVdoZWVsRXZl
bnRVbnN0YWJsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01XaGVlbEV2ZW50VW5zdGFibGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43ODA2NTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01XaGVl
bEV2ZW50VW5zdGFibGUuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01XaGVlbEV2ZW50VW5zdGFibGVfaAorI2RlZmlu
ZSBXZWJLaXRET01XaGVlbEV2ZW50VW5zdGFibGVfaAorCisjaWZkZWYgV0VCS0lUX0RPTV9VU0Vf
VU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0
YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKy8qKgorICogV0VCS0lUX0RPTV9XSEVFTF9FVkVO
VF9ET01fREVMVEFfUElYRUw6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9E
T01fREVMVEFfUElYRUwgMHgwMAorCisvKioKKyAqIFdFQktJVF9ET01fV0hFRUxfRVZFTlRfRE9N
X0RFTFRBX0xJTkU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9ET01fREVM
VEFfTElORSAweDAxCisKKy8qKgorICogV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9ET01fREVMVEFf
UEFHRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1dIRUVMX0VWRU5UX0RPTV9ERUxUQV9QQUdF
IDB4MDIKKworLyoqCisgKiB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV94OgorICog
QHNlbGY6IEEgI1dlYktpdERPTVdoZWVsRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNnZG91Ymxl
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGdkb3VibGUKK3dl
YmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3goV2ViS2l0RE9NV2hlZWxFdmVudCogc2Vs
Zik7CisKKy8qKgorICogd2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeToKKyAqIEBz
ZWxmOiBBICNXZWJLaXRET01XaGVlbEV2ZW50CisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQor
ICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJr
aXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV95KFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X2RlbHRhX3o6CisgKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NV2hlZWxFdmVudAorICoKKyAqIFJldHVybnM6IEEgI2dkb3VibGUKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0
X2RvbV93aGVlbF9ldmVudF9nZXRfZGVsdGFfeihXZWJLaXRET01XaGVlbEV2ZW50KiBzZWxmKTsK
KworLyoqCisgKiB3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV9tb2RlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVdoZWVsRXZlbnQKKyAqCisgKiBSZXR1cm5zOiBBICNndWxvbmcKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ3Vsb25nCit3ZWJraXRf
ZG9tX3doZWVsX2V2ZW50X2dldF9kZWx0YV9tb2RlKFdlYktpdERPTVdoZWVsRXZlbnQqIHNlbGYp
OworCisvKioKKyAqIHdlYmtpdF9kb21fd2hlZWxfZXZlbnRfZ2V0X3dlYmtpdF9kaXJlY3Rpb25f
aW52ZXJ0ZWRfZnJvbV9kZXZpY2U6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NV2hlZWxFdmVudAor
ICoKKyAqIFJldHVybnM6IEEgI2dib29sZWFuCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQor
KiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9tX3doZWVsX2V2ZW50X2dldF93ZWJr
aXRfZGlyZWN0aW9uX2ludmVydGVkX2Zyb21fZGV2aWNlKFdlYktpdERPTVdoZWVsRXZlbnQqIHNl
bGYpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJM
RV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01XaGVlbEV2ZW50VW5zdGFibGVfaCAqLwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS9XZWJLaXRET01YUGF0aEV4cHJlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aEV4cHJlc3Npb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkN2M5MzkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9n
dGsvRE9NL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5jcHAKQEAgLTAsMCArMSwxMjUgQEAKKy8q
CisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXRET01YUGF0aEV4cHJlc3Npb24uaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQ1NT
SW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNpbmNsdWRlICJXZWJLaXRET01Ob2RlUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
T01YUGF0aEV4cHJlc3Npb25Qcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhSZXN1
bHRQcml2YXRlLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lU
X0RPTV9YUEFUSF9FWFBSRVNTSU9OX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1hQQVRIX0VYUFJFU1NJT04sIFdlYktpdERP
TVhQYXRoRXhwcmVzc2lvblByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01YUGF0
aEV4cHJlc3Npb25Qcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6WFBhdGhFeHByZXNzaW9u
PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uKiBraXQoV2ViQ29yZTo6
WFBhdGhFeHByZXNzaW9uKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAg
ICAgICAgcmV0dXJuIFdFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTihyZXQpOworCisgICAgcmV0
dXJuIHdyYXBYUGF0aEV4cHJlc3Npb24ob2JqKTsKK30KKworV2ViQ29yZTo6WFBhdGhFeHByZXNz
aW9uKiBjb3JlKFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbiogcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gcmVxdWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbio+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVhQ
YXRoRXhwcmVzc2lvbiogd3JhcFhQYXRoRXhwcmVzc2lvbihXZWJDb3JlOjpYUGF0aEV4cHJlc3Np
b24qIGNvcmVPYmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBX
RUJLSVRfRE9NX1hQQVRIX0VYUFJFU1NJT04oZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9Y
UEFUSF9FWFBSRVNTSU9OLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVhQYXRo
RXhwcmVzc2lvbiwgd2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uLCBXRUJLSVRfRE9NX1RZUEVf
T0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVhQYXRoRXhwcmVzc2lvblByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX1hQQVRIX0VYUFJFU1NJT05fR0VUX1BSSVZBVEUob2JqZWN0
KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0
LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9t
X3hwYXRoX2V4cHJlc3Npb25fY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3VpbnQgY29uc3RydWN0
UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0cnVjdFByb3BlcnRp
ZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV94
cGF0aF9leHByZXNzaW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVj
dFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01Y
UGF0aEV4cHJlc3Npb25Qcml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9YUEFUSF9FWFBSRVNTSU9O
X0dFVF9QUklWQVRFKG9iamVjdCk7CisgICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbio+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNv
cmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2NsYXNzX2luaXQoV2ViS2l0RE9NWFBhdGhF
eHByZXNzaW9uQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVhQYXRoRXhwcmVzc2lv
blByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2RvbV94
cGF0aF9leHByZXNzaW9uX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfZG9tX3hwYXRoX2V4cHJlc3Npb25fZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9pbml0KFdlYktpdERPTVhQYXRoRXhwcmVzc2lv
biogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX0RPTV9YUEFUSF9FWFBSRVNTSU9OX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAg
IG5ldyAocHJpdikgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZSgpOworfQorCitXZWJL
aXRET01YUGF0aFJlc3VsdCogd2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2V2YWx1YXRlKFdl
YktpdERPTVhQYXRoRXhwcmVzc2lvbiogc2VsZiwgV2ViS2l0RE9NTm9kZSogY29udGV4dE5vZGUs
IGd1c2hvcnQgdHlwZSwgV2ViS2l0RE9NWFBhdGhSZXN1bHQqIGluUmVzdWx0LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19YUEFUSF9FWFBSRVNTSU9OKHNlbGYp
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX05PREUoY29udGV4
dE5vZGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRI
X1JFU1VMVChpblJlc3VsdCksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFlcnJvciB8
fCAhKmVycm9yLCAwKTsKKyAgICBXZWJDb3JlOjpYUGF0aEV4cHJlc3Npb24qIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6Tm9kZSogY29udmVydGVkQ29udGV4dE5vZGUg
PSBXZWJLaXQ6OmNvcmUoY29udGV4dE5vZGUpOworICAgIFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBj
b252ZXJ0ZWRJblJlc3VsdCA9IFdlYktpdDo6Y29yZShpblJlc3VsdCk7CisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6OlhQYXRoUmVzdWx0PiBn
b2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQdHIoaXRlbS0+ZXZhbHVhdGUoY29udmVydGVkQ29udGV4
dE5vZGUsIHR5cGUsIGNvbnZlcnRlZEluUmVzdWx0LCBlYykpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2Vi
S2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBh
dGhFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmYwNjZhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTVhQYXRo
RXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChC
VUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRkb20uaD4gY2Fu
IGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERPTVhQYXRo
RXhwcmVzc2lvbl9oCisjZGVmaW5lIFdlYktpdERPTVhQYXRoRXhwcmVzc2lvbl9oCisKKyNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1hQQVRIX0VYUFJFU1NJT04gICAgICAgICAg
ICAod2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9ET01fWFBBVEhfRVhQUkVTU0lPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfRVhQUkVTU0lPTiwgV2ViS2l0
RE9NWFBhdGhFeHByZXNzaW9uKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9FWFBSRVNTSU9O
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJ
VF9ET01fVFlQRV9YUEFUSF9FWFBSRVNTSU9OLCBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25DbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19YUEFUSF9FWFBSRVNTSU9OKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9ET01fVFlQRV9YUEFUSF9F
WFBSRVNTSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19YUEFUSF9FWFBSRVNTSU9OX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQ
RV9YUEFUSF9FWFBSRVNTSU9OKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9FWFBSRVNTSU9O
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9ET01fVFlQRV9YUEFUSF9FWFBSRVNTSU9OLCBXZWJLaXRET01YUGF0aEV4cHJlc3Npb25DbGFz
cykpCisKK3N0cnVjdCBfV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uIHsKKyAgICBXZWJLaXRET01P
YmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01YUGF0aEV4cHJl
c3Npb25DbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2dldF90eXBl
KHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9ldmFsdWF0ZToK
KyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aEV4cHJlc3Npb24KKyAqIEBjb250ZXh0Tm9kZTog
QSAjV2ViS2l0RE9NTm9kZQorICogQHR5cGU6IEEgI2d1c2hvcnQKKyAqIEBpblJlc3VsdDogQSAj
V2ViS2l0RE9NWFBhdGhSZXN1bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQKKyoqLworV0VCS0lUX0FQ
SSBXZWJLaXRET01YUGF0aFJlc3VsdCoKK3dlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9ldmFs
dWF0ZShXZWJLaXRET01YUGF0aEV4cHJlc3Npb24qIHNlbGYsIFdlYktpdERPTU5vZGUqIGNvbnRl
eHROb2RlLCBndXNob3J0IHR5cGUsIFdlYktpdERPTVhQYXRoUmVzdWx0KiBpblJlc3VsdCwgR0Vy
cm9yKiogZXJyb3IpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NWFBhdGhF
eHByZXNzaW9uX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01YUGF0aEV4cHJlc3Npb25Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjBlOGRjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhFeHByZXNz
aW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdERPTVhQYXRoRXhwcmVzc2lvblByaXZhdGVfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9Y
UGF0aEV4cHJlc3Npb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NWFBhdGhFeHBy
ZXNzaW9uLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9u
KiB3cmFwWFBhdGhFeHByZXNzaW9uKFdlYkNvcmU6OlhQYXRoRXhwcmVzc2lvbiopOworV2ViS2l0
RE9NWFBhdGhFeHByZXNzaW9uKiBraXQoV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uKik7CitXZWJD
b3JlOjpYUGF0aEV4cHJlc3Npb24qIGNvcmUoV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uKik7Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVhQYXRoRXhwcmVzc2lv
blByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuY3Bw
CnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmNwcApyZW5hbWUgdG8gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0
aE5TUmVzb2x2ZXIuY3BwCmluZGV4IGFjMjgyMDguLmM0YmUzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5jcHAKQEAgLTIxLDEwICsyMSwxMCBAQAogCiAjaW5j
bHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJHT2JqZWN0WFBhdGhOU1Jlc29sdmVy
LmgiCi0jaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KICNpbmNsdWRlICJXZWJLaXRET01PYmplY3QuaCIK
ICNpbmNsdWRlICJXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAi
Z29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAiQ29udmVydFRvVVRGOFN0
cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKQEAgLTExNyw3ICsxMTcsNyBAQCBSZWZQdHI8V2ViQ29yZTo6WFBhdGhOU1Jlc29sdmVyPiBj
b3JlKFdlYktpdERPTVhQYXRoTlNSZXNvbHZlciogeFBhdGhOU1Jlc29sdmVyKQogICAgIGlmIChX
RUJLSVRfRE9NX0lTX05BVElWRV9YUEFUSF9OU19SRVNPTFZFUih4UGF0aE5TUmVzb2x2ZXIpKQog
ICAgICAgICBjb3JlUmVzb2x2ZXIgPSBjb3JlKFdFQktJVF9ET01fTkFUSVZFX1hQQVRIX05TX1JF
U09MVkVSKHhQYXRoTlNSZXNvbHZlcikpOwogICAgIGVsc2UKLSAgICAgICAgY29yZVJlc29sdmVy
ID0gV2ViQ29yZTo6R09iamVjdFhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKHhQYXRoTlNSZXNvbHZl
cik7CisgICAgICAgIGNvcmVSZXNvbHZlciA9IFdlYktpdDo6R09iamVjdFhQYXRoTlNSZXNvbHZl
cjo6Y3JlYXRlKHhQYXRoTlNSZXNvbHZlcik7CiAgICAgcmV0dXJuIGNvcmVSZXNvbHZlcjsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Y
UGF0aE5TUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmgKc2ltaWxhcml0eSBpbmRl
eCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0
RE9NWFBhdGhOU1Jlc29sdmVyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBhdGhO
U1Jlc29sdmVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJQcml2YXRlLmgKc2ltaWxh
cml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJQcml2YXRlLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhO
U1Jlc29sdmVyUHJpdmF0ZS5oCmluZGV4IGZmYmE2YzQuLjgyYjBkOTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyUHJpdmF0ZS5oCkBAIC0yMSw3ICsyMSw3
IEBACiAjaWZuZGVmIFdlYktpdERPTVhQYXRoTlNSZXNvbHZlclByaXZhdGVfaAogI2RlZmluZSBX
ZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJQcml2YXRlX2gKIAotI2luY2x1ZGUgIlhQYXRoTlNSZXNv
bHZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvWFBhdGhOU1Jlc29sdmVyLmg+CiAjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTVhQYXRoTlNSZXNvbHZlci5oPgogCiAjZGVmaW5lIFdFQktJVF9E
T01fVFlQRV9OQVRJVkVfWFBBVEhfTlNfUkVTT0xWRVIgICAgICAgICAgICAod2Via2l0X2RvbV9u
YXRpdmVfeHBhdGhfbnNfcmVzb2x2ZXJfZ2V0X3R5cGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBh
dGhSZXN1bHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTE5ZjBhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1
bHQuY3BwCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NWFBhdGhSZXN1bHQuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvQ1NTSW1wb3J0UnVsZS5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRXhjZXB0aW9uQ29kZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU01haW5UaHJlYWRFeGVjU3RhdGUuaD4KKyNp
bmNsdWRlICJXZWJLaXRET01Ob2RlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJDb252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9HRVRf
UFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmosIFdFQktJVF9ET01f
VFlQRV9YUEFUSF9SRVNVTFQsIFdlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNv
cmU6OlhQYXRoUmVzdWx0PiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01YUGF0aFJlc3VsdFByaXZh
dGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRET01YUGF0aFJlc3VsdCoga2l0KFdl
YkNvcmU6OlhQYXRoUmVzdWx0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVy
biAwOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUKHJldCk7CisKKyAgICByZXR1
cm4gd3JhcFhQYXRoUmVzdWx0KG9iaik7Cit9CisKK1dlYkNvcmU6OlhQYXRoUmVzdWx0KiBjb3Jl
KFdlYktpdERPTVhQYXRoUmVzdWx0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0ID8g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6WFBhdGhSZXN1bHQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCkgOiAwOworfQorCitXZWJLaXRET01YUGF0aFJlc3VsdCogd3JhcFhQ
YXRoUmVzdWx0KFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBjb3JlT2JqZWN0KQoreworICAgIEFTU0VS
VChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFQoZ19vYmpl
Y3RfbmV3KFdFQktJVF9ET01fVFlQRV9YUEFUSF9SRVNVTFQsICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIG51bGxwdHIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NWFBhdGhSZXN1bHQsIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0LCBXRUJL
SVRfRE9NX1RZUEVfT0JKRUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9SRVNV
TFRfVFlQRSwKKyAgICBQUk9QX05VTUJFUl9WQUxVRSwKKyAgICBQUk9QX1NUUklOR19WQUxVRSwK
KyAgICBQUk9QX0JPT0xFQU5fVkFMVUUsCisgICAgUFJPUF9TSU5HTEVfTk9ERV9WQUxVRSwKKyAg
ICBQUk9QX0lOVkFMSURfSVRFUkFUT1JfU1RBVEUsCisgICAgUFJPUF9TTkFQU0hPVF9MRU5HVEgs
Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9maW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlKiBwcml2ID0g
V0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIFdlYktp
dDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2JqZWN0LmdldCgpKTsKKworICAg
IHByaXYtPn5XZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiA9IFdFQktJVF9E
T01fWFBBVEhfUkVTVUxUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAg
ICBjYXNlIFBST1BfUkVTVUxUX1RZUEU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUs
IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9yZXN1bHRfdHlwZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9OVU1CRVJfVkFMVUU6CisgICAgICAgIGdfdmFsdWVfc2V0
X2RvdWJsZSh2YWx1ZSwgd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X251bWJlcl92YWx1ZShz
ZWxmLCBudWxscHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TVFJJTkdfVkFM
VUU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21feHBhdGhf
cmVzdWx0X2dldF9zdHJpbmdfdmFsdWUoc2VsZiwgbnVsbHB0cikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQk9PTEVBTl9WQUxVRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVh
bih2YWx1ZSwgd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2Jvb2xlYW5fdmFsdWUoc2VsZiwg
bnVsbHB0cikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0lOR0xFX05PREVfVkFM
VUU6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2RvbV94cGF0aF9y
ZXN1bHRfZ2V0X3NpbmdsZV9ub2RlX3ZhbHVlKHNlbGYsIG51bGxwdHIpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0lOVkFMSURfSVRFUkFUT1JfU1RBVEU6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9pbnZhbGlk
X2l0ZXJhdG9yX3N0YXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NO
QVBTSE9UX0xFTkdUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIHdlYmtpdF9k
b21feHBhdGhfcmVzdWx0X2dldF9zbmFwc2hvdF9sZW5ndGgoc2VsZiwgbnVsbHB0cikpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIEdPYmplY3QqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2NvbnN0
cnVjdG9yKEdUeXBlIHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVj
dENvbnN0cnVjdFBhcmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9i
amVjdCA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0
UHJvcGVydGllcyk7CisKKyAgICBXZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNv
cmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpYUGF0aFJlc3VsdCo+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfY2xhc3NfaW5pdChX
ZWJLaXRET01YUGF0aFJlc3VsdENsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRET01YUGF0
aFJlc3VsdFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0
X2RvbV94cGF0aF9yZXN1bHRfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2ZpbmFsaXplOworICAgIGdvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3Byb3BlcnR5OworCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1JFU1VMVF9UWVBFLAorICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgK
KyAgICAgICAgICAgICJyZXN1bHQtdHlwZSIsCisgICAgICAgICAgICAiWFBhdGhSZXN1bHQ6cmVz
dWx0LXR5cGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBndXNob3J0IFhQYXRoUmVzdWx0OnJl
c3VsdC10eXBlIiwKKyAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX05VTUJFUl9WQUxVRSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgKKyAgICAgICAgICAgICJudW1iZXItdmFsdWUi
LAorICAgICAgICAgICAgIlhQYXRoUmVzdWx0Om51bWJlci12YWx1ZSIsCisgICAgICAgICAgICAi
cmVhZC1vbmx5IGdkb3VibGUgWFBhdGhSZXN1bHQ6bnVtYmVyLXZhbHVlIiwKKyAgICAgICAgICAg
IC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAg
ICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVFJJTkdfVkFMVUUsCisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3RyaW5nLXZhbHVlIiwKKyAgICAgICAg
ICAgICJYUGF0aFJlc3VsdDpzdHJpbmctdmFsdWUiLAorICAgICAgICAgICAgInJlYWQtb25seSBn
Y2hhciogWFBhdGhSZXN1bHQ6c3RyaW5nLXZhbHVlIiwKKyAgICAgICAgICAgICIiLAorICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfQk9PTEVB
Tl9WQUxVRSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiYm9v
bGVhbi12YWx1ZSIsCisgICAgICAgICAgICAiWFBhdGhSZXN1bHQ6Ym9vbGVhbi12YWx1ZSIsCisg
ICAgICAgICAgICAicmVhZC1vbmx5IGdib29sZWFuIFhQYXRoUmVzdWx0OmJvb2xlYW4tdmFsdWUi
LAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgUFJPUF9TSU5HTEVfTk9ERV9WQUxVRSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgKKyAgICAgICAgICAgICJzaW5nbGUtbm9kZS12YWx1ZSIsCisgICAgICAg
ICAgICAiWFBhdGhSZXN1bHQ6c2luZ2xlLW5vZGUtdmFsdWUiLAorICAgICAgICAgICAgInJlYWQt
b25seSBXZWJLaXRET01Ob2RlKiBYUGF0aFJlc3VsdDpzaW5nbGUtbm9kZS12YWx1ZSIsCisgICAg
ICAgICAgICBXRUJLSVRfRE9NX1RZUEVfTk9ERSwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOVkFMSURfSVRFUkFUT1JfU1RBVEUsCisg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgImludmFsaWQtaXRlcmF0
b3Itc3RhdGUiLAorICAgICAgICAgICAgIlhQYXRoUmVzdWx0OmludmFsaWQtaXRlcmF0b3Itc3Rh
dGUiLAorICAgICAgICAgICAgInJlYWQtb25seSBnYm9vbGVhbiBYUGF0aFJlc3VsdDppbnZhbGlk
LWl0ZXJhdG9yLXN0YXRlIiwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfU05BUFNIT1RfTEVOR1RILAor
ICAgICAgICBnX3BhcmFtX3NwZWNfdWxvbmcoCisgICAgICAgICAgICAic25hcHNob3QtbGVuZ3Ro
IiwKKyAgICAgICAgICAgICJYUGF0aFJlc3VsdDpzbmFwc2hvdC1sZW5ndGgiLAorICAgICAgICAg
ICAgInJlYWQtb25seSBndWxvbmcgWFBhdGhSZXN1bHQ6c25hcHNob3QtbGVuZ3RoIiwKKyAgICAg
ICAgICAgIDAsIEdfTUFYVUxPTkcsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9pbml0KFdl
YktpdERPTVhQYXRoUmVzdWx0KiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVhQYXRoUmVzdWx0
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0dFVF9QUklWQVRFKHJlcXVl
c3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlKCk7Cit9CisK
K1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2l0ZXJhdGVfbmV4dChXZWJL
aXRET01YUGF0aFJlc3VsdCogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfWFBBVEhfUkVTVUxUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCghZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0
cihpdGVtLT5pdGVyYXRlTmV4dChlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29i
amVjdFJlc3VsdC5nZXQoKSk7Cit9CisKK1dlYktpdERPTU5vZGUqIHdlYmtpdF9kb21feHBhdGhf
cmVzdWx0X3NuYXBzaG90X2l0ZW0oV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIGd1bG9uZyBp
bmRleCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhf
UkVTVUxUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISpl
cnJvciwgMCk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPFdl
YkNvcmU6Ok5vZGU+IGdvYmplY3RSZXN1bHQgPSBXVEY6OmdldFB0cihpdGVtLT5zbmFwc2hvdEl0
ZW0oaW5kZXgsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0
LmdldCgpKTsKK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfcmVzdWx0
X3R5cGUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfWFBBVEhfUkVTVUxUKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPnJl
c3VsdFR5cGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnZG91YmxlIHdlYmtpdF9kb21f
eHBhdGhfcmVzdWx0X2dldF9udW1iZXJfdmFsdWUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYs
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VM
VChzZWxmKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IDApOworICAgIFdlYkNvcmU6OlhQYXRoUmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdkb3VibGUgcmVzdWx0
ID0gaXRlbS0+bnVtYmVyVmFsdWUoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitn
Y2hhciogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3N0cmluZ192YWx1ZShXZWJLaXRET01Y
UGF0aFJlc3VsdCogc2VsZiwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9E
T01fSVNfWFBBVEhfUkVTVUxUKHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCgh
ZXJyb3IgfHwgISplcnJvciwgMCk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nVmFsdWUo
ZWMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitnYm9vbGVhbiB3ZWJraXRfZG9tX3hwYXRo
X3Jlc3VsdF9nZXRfYm9vbGVhbl92YWx1ZShXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxUKHNl
bGYpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3Is
IEZBTFNFKTsKKyAgICBXZWJDb3JlOjpYUGF0aFJlc3VsdCogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5ib29sZWFuVmFsdWUoZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitXZWJLaXRET01Ob2RlKiB3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfc2luZ2xlX25v
ZGVfdmFsdWUoV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1hQQVRIX1JFU1VMVChzZWxmKSwgMCk7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoIWVycm9yIHx8ICEqZXJyb3IsIDApOworICAgIFdlYkNvcmU6OlhQ
YXRoUmVzdWx0KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxXZWJDb3JlOjpOb2RlPiBnb2JqZWN0UmVzdWx0
ID0gV1RGOjpnZXRQdHIoaXRlbS0+c2luZ2xlTm9kZVZhbHVlKGVjKSk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVy
biBXZWJLaXQ6OmtpdChnb2JqZWN0UmVzdWx0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gd2Via2l0
X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2ludmFsaWRfaXRlcmF0b3Jfc3RhdGUoV2ViS2l0RE9NWFBh
dGhSZXN1bHQqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxU
KHNlbGYpLCBGQUxTRSk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gaXRlbS0+aW52YWxpZEl0ZXJhdG9y
U3RhdGUoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitndWxvbmcgd2Via2l0X2RvbV94cGF0
aF9yZXN1bHRfZ2V0X3NuYXBzaG90X2xlbmd0aChXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxU
KHNlbGYpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCghZXJyb3IgfHwgISplcnJvciwg
MCk7CisgICAgV2ViQ29yZTo6WFBhdGhSZXN1bHQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ3Vsb25nIHJlc3VsdCA9
IGl0ZW0tPnNuYXBzaG90TGVuZ3RoKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01YUGF0aFJlc3VsdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTVhYWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dl
YktpdERPTVhQYXRoUmVzdWx0LmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVERPTV9IX0lOU0lERV9fKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19XRUJLSVQpCisjZXJyb3IgIk9ubHkgPHdlYmtpdGRvbS93ZWJraXRk
b20uaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktp
dERPTVhQYXRoUmVzdWx0X2gKKyNkZWZpbmUgV2ViS2l0RE9NWFBhdGhSZXN1bHRfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NT2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQRV9YUEFUSF9SRVNVTFQgICAgICAgICAgICAo
d2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9Y
UEFUSF9SRVNVTFQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX0RPTV9UWVBFX1hQQVRIX1JFU1VMVCwgV2ViS2l0RE9NWFBhdGhSZXN1bHQp
KQorI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfWFBBVEhfUkVTVUxU
LCBXZWJLaXRET01YUGF0aFJlc3VsdENsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1hQQVRI
X1JFU1VMVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfRE9NX1RZUEVfWFBBVEhfUkVTVUxUKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19YUEFU
SF9SRVNVTFRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX0RPTV9UWVBFX1hQQVRIX1JFU1VMVCkpCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhf
UkVTVUxUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9ET01fVFlQRV9YUEFUSF9SRVNVTFQsIFdlYktpdERPTVhQYXRoUmVzdWx0Q2xhc3Mp
KQorCisvKioKKyAqIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0FOWV9UWVBFOgorICovCisjZGVm
aW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0FOWV9UWVBFIDAKKworLyoqCisgKiBXRUJLSVRf
RE9NX1hQQVRIX1JFU1VMVF9OVU1CRVJfVFlQRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1hQ
QVRIX1JFU1VMVF9OVU1CRVJfVFlQRSAxCisKKy8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNV
TFRfU1RSSU5HX1RZUEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfU1RS
SU5HX1RZUEUgMgorCisvKioKKyAqIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0JPT0xFQU5fVFlQ
RToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9CT09MRUFOX1RZUEUgMwor
CisvKioKKyAqIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX1VOT1JERVJFRF9OT0RFX0lURVJBVE9S
X1RZUEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfVU5PUkRFUkVEX05P
REVfSVRFUkFUT1JfVFlQRSA0CisKKy8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfT1JE
RVJFRF9OT0RFX0lURVJBVE9SX1RZUEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9S
RVNVTFRfT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgNQorCisvKioKKyAqIFdFQktJVF9ET01f
WFBBVEhfUkVTVUxUX1VOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEU6CisgKi8KKyNkZWZpbmUg
V0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA2CisK
Ky8qKgorICogV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZ
UEU6CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUgNworCisvKioKKyAqIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0FOWV9VTk9S
REVSRURfTk9ERV9UWVBFOgorICovCisjZGVmaW5lIFdFQktJVF9ET01fWFBBVEhfUkVTVUxUX0FO
WV9VTk9SREVSRURfTk9ERV9UWVBFIDgKKworLyoqCisgKiBXRUJLSVRfRE9NX1hQQVRIX1JFU1VM
VF9GSVJTVF9PUkRFUkVEX05PREVfVFlQRToKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX1hQQVRI
X1JFU1VMVF9GSVJTVF9PUkRFUkVEX05PREVfVFlQRSA5CisKK3N0cnVjdCBfV2ViS2l0RE9NWFBh
dGhSZXN1bHQgeworICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitz
dHJ1Y3QgX1dlYktpdERPTVhQYXRoUmVzdWx0Q2xhc3MgeworICAgIFdlYktpdERPTU9iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb21feHBh
dGhfcmVzdWx0X2dldF90eXBlKHZvaWQpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhfcmVz
dWx0X2l0ZXJhdGVfbmV4dDoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorICog
QGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNXZWJL
aXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21feHBh
dGhfcmVzdWx0X2l0ZXJhdGVfbmV4dChXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwgR0Vycm9y
KiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X3NuYXBzaG90X2l0
ZW06CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NWFBhdGhSZXN1bHQKKyAqIEBpbmRleDogQSAjZ3Vs
b25nCisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6
IEEgI1dlYktpdERPTU5vZGUKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01Ob2RlKgord2Via2l0
X2RvbV94cGF0aF9yZXN1bHRfc25hcHNob3RfaXRlbShXZWJLaXRET01YUGF0aFJlc3VsdCogc2Vs
ZiwgZ3Vsb25nIGluZGV4LCBHRXJyb3IqKiBlcnJvcik7CisKKy8qKgorICogd2Via2l0X2RvbV94
cGF0aF9yZXN1bHRfZ2V0X3Jlc3VsdF90eXBlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVhQYXRo
UmVzdWx0CisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorKiovCitXRUJLSVRfQVBJIGd1c2hv
cnQKK3dlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9yZXN1bHRfdHlwZShXZWJLaXRET01YUGF0
aFJlc3VsdCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X251
bWJlcl92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAorICogQGVycm9y
OiAjR0Vycm9yCisgKgorICogUmV0dXJuczogQSAjZ2RvdWJsZQorKiovCitXRUJLSVRfQVBJIGdk
b3VibGUKK3dlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9udW1iZXJfdmFsdWUoV2ViS2l0RE9N
WFBhdGhSZXN1bHQqIHNlbGYsIEdFcnJvcioqIGVycm9yKTsKKworLyoqCisgKiB3ZWJraXRfZG9t
X3hwYXRoX3Jlc3VsdF9nZXRfc3RyaW5nX3ZhbHVlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVhQ
YXRoUmVzdWx0CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgor
KiovCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3N0cmlu
Z192YWx1ZShXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisv
KioKKyAqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF9ib29sZWFuX3ZhbHVlOgorICogQHNl
bGY6IEEgI1dlYktpdERPTVhQYXRoUmVzdWx0CisgKiBAZXJyb3I6ICNHRXJyb3IKKyAqCisgKiBS
ZXR1cm5zOiBBICNnYm9vbGVhbgorKiovCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfZG9t
X3hwYXRoX3Jlc3VsdF9nZXRfYm9vbGVhbl92YWx1ZShXZWJLaXRET01YUGF0aFJlc3VsdCogc2Vs
ZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dl
dF9zaW5nbGVfbm9kZV92YWx1ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01YUGF0aFJlc3VsdAor
ICogQGVycm9yOiAjR0Vycm9yCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBBICNX
ZWJLaXRET01Ob2RlCisqKi8KK1dFQktJVF9BUEkgV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21f
eHBhdGhfcmVzdWx0X2dldF9zaW5nbGVfbm9kZV92YWx1ZShXZWJLaXRET01YUGF0aFJlc3VsdCog
c2VsZiwgR0Vycm9yKiogZXJyb3IpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhfcmVzdWx0
X2dldF9pbnZhbGlkX2l0ZXJhdG9yX3N0YXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVhQYXRo
UmVzdWx0CisgKgorICogUmV0dXJuczogQSAjZ2Jvb2xlYW4KKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X2ludmFsaWRfaXRlcmF0b3Jfc3RhdGUo
V2ViS2l0RE9NWFBhdGhSZXN1bHQqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21feHBhdGhf
cmVzdWx0X2dldF9zbmFwc2hvdF9sZW5ndGg6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NWFBhdGhS
ZXN1bHQKKyAqIEBlcnJvcjogI0dFcnJvcgorICoKKyAqIFJldHVybnM6IEEgI2d1bG9uZworKiov
CitXRUJLSVRfQVBJIGd1bG9uZword2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3NuYXBzaG90
X2xlbmd0aChXZWJLaXRET01YUGF0aFJlc3VsdCogc2VsZiwgR0Vycm9yKiogZXJyb3IpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NWFBhdGhSZXN1bHRfaCAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzZWRmNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NWFBhdGhSZXN1bHRQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01YUGF0aFJlc3Vs
dFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01YUGF0aFJlc3VsdFByaXZhdGVfaAorCisjaW5j
bHVkZSA8V2ViQ29yZS9YUGF0aFJlc3VsdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01YUGF0aFJlc3VsdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTVhQYXRoUmVz
dWx0KiB3cmFwWFBhdGhSZXN1bHQoV2ViQ29yZTo6WFBhdGhSZXN1bHQqKTsKK1dlYktpdERPTVhQ
YXRoUmVzdWx0KiBraXQoV2ViQ29yZTo6WFBhdGhSZXN1bHQqKTsKK1dlYkNvcmU6OlhQYXRoUmVz
dWx0KiBjb3JlKFdlYktpdERPTVhQYXRoUmVzdWx0Kik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8qIFdlYktpdERPTVhQYXRoUmVzdWx0UHJpdmF0ZV9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL2Rv
Y3Mvd2Via2l0ZG9tZ3RrLTQuMC1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL2RvY3Mvd2Via2l0ZG9tZ3RrLTQuMC1zZWN0
aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwNzM1NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vZG9jcy93ZWJraXRkb21ndGstNC4wLXNlY3Rpb25zLnR4dApAQCAtMCwwICsx
LDMwMTkgQEAKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NQ3VzdG9tPC9GSUxFPgorPFRJVExF
PldlYktpdERPTUN1c3RvbTwvVElUTEU+CisKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxl
bWVudF9pc19lZGl0ZWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2lzX2VkaXRlZAor
d2Via2l0X2RvbV9kb21fd2luZG93X3dlYmtpdF9tZXNzYWdlX2hhbmRsZXJzX3Bvc3RfbWVzc2Fn
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUV2ZW50VGFyZ2V0PC9G
SUxFPgorPFRJVExFPldlYktpdERPTUV2ZW50VGFyZ2V0PC9USVRMRT4KKword2Via2l0X2RvbV9l
dmVudF90YXJnZXRfZGlzcGF0Y2hfZXZlbnQKK3dlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9l
dmVudF9saXN0ZW5lcgord2Via2l0X2RvbV9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3Rl
bmVyCit3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9hZGRfZXZlbnRfbGlzdGVuZXJfd2l0aF9jbG9z
dXJlCit3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXJfd2l0aF9j
bG9zdXJlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZQorV0VCS0lUX0RPTV9UWVBFX0VWRU5UX1RBUkdFVAorV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQK
K1dFQktJVF9ET01fSVNfRVZFTlRfVEFSR0VUCitXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVF9DTEFT
UworV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVRfR0VUX0lGQUNFCisKKzxTVUJTRUNUSU9OIFByaXZh
dGU+Cit3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VD
VElPTj4KKzxGSUxFPldlYktpdERPTU5vZGVGaWx0ZXI8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
Tm9kZUZpbHRlcjwvVElUTEU+CisKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfQUNDRVBUCitXRUJL
SVRfRE9NX05PREVfRklMVEVSX1JFSkVDVAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FM
TAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FUVFJJQlVURQorV0VCS0lUX0RPTV9OT0RF
X0ZJTFRFUl9TSE9XX0NEQVRBX1NFQ1RJT04KK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19D
T01NRU5UCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRE9DVU1FTlQKK1dFQktJVF9ET01f
Tk9ERV9GSUxURVJfU0hPV19ET0NVTUVOVF9GUkFHTUVOVAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRF
Ul9TSE9XX0RPQ1VNRU5UX1RZUEUKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19FTEVNRU5U
CitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRU5USVRZCitXRUJLSVRfRE9NX05PREVfRklM
VEVSX1NIT1dfRU5USVRZX1JFRkVSRU5DRQorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX05P
VEFUSU9OCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElP
TgorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX1RFWFQKK1dFQktJVF9ET01fTk9ERV9GSUxU
RVJfU0tJUAord2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9hY2NlcHRfbm9kZQorCis8U1VCU0VDVElP
TiBTdGFuZGFyZD4KK1dlYktpdERPTU5vZGVGaWx0ZXJJZmFjZQorV0VCS0lUX0RPTV9UWVBFX05P
REVfRklMVEVSCitXRUJLSVRfRE9NX05PREVfRklMVEVSCitXRUJLSVRfRE9NX0lTX05PREVfRklM
VEVSCitXRUJLSVRfRE9NX05PREVfRklMVEVSX0NMQVNTCitXRUJLSVRfRE9NX05PREVfRklMVEVS
X0dFVF9JRkFDRQorCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9ub2RlX2ZpbHRl
cl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTU9iamVj
dDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01PYmplY3Q8L1RJVExFPgorV2ViS2l0RE9NT2JqZWN0
CisKKworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTU9iamVjdENsYXNzCitXRUJL
SVRfRE9NX1RZUEVfT0JKRUNUCitXRUJLSVRfRE9NX09CSkVDVAorV0VCS0lUX0RPTV9JU19PQkpF
Q1QKK1dFQktJVF9ET01fT0JKRUNUX0NMQVNTCitXRUJLSVRfRE9NX0lTX09CSkVDVF9DTEFTUwor
V0VCS0lUX0RPTV9PQkpFQ1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJL
aXRET01PYmplY3RQcml2YXRlCit3ZWJraXRfZG9tX29iamVjdF9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVhQYXRoTlNSZXNvbHZlcjwvRklMRT4KKzxU
SVRMRT5XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXI8L1RJVExFPgorCit3ZWJraXRfZG9tX3hwYXRo
X25zX3Jlc29sdmVyX2xvb2t1cF9uYW1lc3BhY2VfdXJpCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVySWZhY2UKK1dFQktJVF9ET01fVFlQRV9YUEFUSF9O
U19SRVNPTFZFUgorV0VCS0lUX0RPTV9YUEFUSF9OU19SRVNPTFZFUgorV0VCS0lUX0RPTV9JU19Y
UEFUSF9OU19SRVNPTFZFUgorV0VCS0lUX0RPTV9YUEFUSF9OU19SRVNPTFZFUl9DTEFTUworV0VC
S0lUX0RPTV9YUEFUSF9OU19SRVNPTFZFUl9HRVRfSUZBQ0UKKworPFNVQlNFQ1RJT04gUHJpdmF0
ZT4KK3dlYmtpdF9kb21feHBhdGhfbnNfcmVzb2x2ZXJfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01DU1NSdWxlPC9GSUxFPgorPFRJVExFPldlYktpdERP
TUNTU1J1bGU8L1RJVExFPgorV2ViS2l0RE9NQ1NTUnVsZQorCitXRUJLSVRfRE9NX0NTU19SVUxF
X1VOS05PV05fUlVMRQorV0VCS0lUX0RPTV9DU1NfUlVMRV9TVFlMRV9SVUxFCitXRUJLSVRfRE9N
X0NTU19SVUxFX0NIQVJTRVRfUlVMRQorV0VCS0lUX0RPTV9DU1NfUlVMRV9JTVBPUlRfUlVMRQor
V0VCS0lUX0RPTV9DU1NfUlVMRV9NRURJQV9SVUxFCitXRUJLSVRfRE9NX0NTU19SVUxFX0ZPTlRf
RkFDRV9SVUxFCitXRUJLSVRfRE9NX0NTU19SVUxFX1BBR0VfUlVMRQord2Via2l0X2RvbV9jc3Nf
cnVsZV9nZXRfcnVsZV90eXBlCit3ZWJraXRfZG9tX2Nzc19ydWxlX2dldF9jc3NfdGV4dAord2Vi
a2l0X2RvbV9jc3NfcnVsZV9zZXRfY3NzX3RleHQKK3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3Bh
cmVudF9zdHlsZV9zaGVldAord2Via2l0X2RvbV9jc3NfcnVsZV9nZXRfcGFyZW50X3J1bGUKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01DU1NSdWxlQ2xhc3MKK1dFQktJVF9ET01f
VFlQRV9DU1NfUlVMRQorV0VCS0lUX0RPTV9DU1NfUlVMRQorV0VCS0lUX0RPTV9JU19DU1NfUlVM
RQorV0VCS0lUX0RPTV9DU1NfUlVMRV9DTEFTUworV0VCS0lUX0RPTV9JU19DU1NfUlVMRV9DTEFT
UworV0VCS0lUX0RPTV9DU1NfUlVMRV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21fY3NzX3J1bGVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01DU1NSdWxlTGlzdDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01DU1NSdWxl
TGlzdDwvVElUTEU+CitXZWJLaXRET01DU1NSdWxlTGlzdAorCit3ZWJraXRfZG9tX2Nzc19ydWxl
X2xpc3RfaXRlbQord2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF9sZW5ndGgKKworPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01DU1NSdWxlTGlzdENsYXNzCitXRUJLSVRfRE9NX1RZ
UEVfQ1NTX1JVTEVfTElTVAorV0VCS0lUX0RPTV9DU1NfUlVMRV9MSVNUCitXRUJLSVRfRE9NX0lT
X0NTU19SVUxFX0xJU1QKK1dFQktJVF9ET01fQ1NTX1JVTEVfTElTVF9DTEFTUworV0VCS0lUX0RP
TV9JU19DU1NfUlVMRV9MSVNUX0NMQVNTCitXRUJLSVRfRE9NX0NTU19SVUxFX0xJU1RfR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2Nzc19ydWxlX2xpc3RfZ2V0
X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01DU1NTdHlsZURl
Y2xhcmF0aW9uPC9GSUxFPgorPFRJVExFPldlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb248L1RJ
VExFPgorV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgorCit3ZWJraXRfZG9tX2Nzc19zdHls
ZV9kZWNsYXJhdGlvbl9nZXRfcHJvcGVydHlfdmFsdWUKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2Rl
Y2xhcmF0aW9uX3JlbW92ZV9wcm9wZXJ0eQord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRp
b25fZ2V0X3Byb3BlcnR5X3ByaW9yaXR5Cit3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlv
bl9zZXRfcHJvcGVydHkKK3dlYmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2l0ZW0KK3dl
YmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV9zaG9ydGhhbmQKK3dl
YmtpdF9kb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX2lzX3Byb3BlcnR5X2ltcGxpY2l0Cit3ZWJr
aXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfY3NzX3RleHQKK3dlYmtpdF9kb21fY3Nz
X3N0eWxlX2RlY2xhcmF0aW9uX3NldF9jc3NfdGV4dAord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVj
bGFyYXRpb25fZ2V0X2xlbmd0aAord2Via2l0X2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fZ2V0
X3BhcmVudF9ydWxlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbkNsYXNzCitXRUJLSVRfRE9NX1RZUEVfQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OCitX
RUJLSVRfRE9NX0NTU19TVFlMRV9ERUNMQVJBVElPTgorV0VCS0lUX0RPTV9JU19DU1NfU1RZTEVf
REVDTEFSQVRJT04KK1dFQktJVF9ET01fQ1NTX1NUWUxFX0RFQ0xBUkFUSU9OX0NMQVNTCitXRUJL
SVRfRE9NX0lTX0NTU19TVFlMRV9ERUNMQVJBVElPTl9DTEFTUworV0VCS0lUX0RPTV9DU1NfU1RZ
TEVfREVDTEFSQVRJT05fR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRf
ZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTUNTU1N0eWxlU2hlZXQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
Q1NTU3R5bGVTaGVldDwvVElUTEU+CitXZWJLaXRET01DU1NTdHlsZVNoZWV0CisKK3dlYmtpdF9k
b21fY3NzX3N0eWxlX3NoZWV0X2luc2VydF9ydWxlCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9zaGVl
dF9kZWxldGVfcnVsZQord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfYWRkX3J1bGUKK3dlYmtp
dF9kb21fY3NzX3N0eWxlX3NoZWV0X3JlbW92ZV9ydWxlCit3ZWJraXRfZG9tX2Nzc19zdHlsZV9z
aGVldF9nZXRfb3duZXJfcnVsZQord2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X2Nzc19y
dWxlcword2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfZ2V0X3J1bGVzCisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RE9NQ1NTU3R5bGVTaGVldENsYXNzCitXRUJLSVRfRE9NX1RZUEVf
Q1NTX1NUWUxFX1NIRUVUCitXRUJLSVRfRE9NX0NTU19TVFlMRV9TSEVFVAorV0VCS0lUX0RPTV9J
U19DU1NfU1RZTEVfU0hFRVQKK1dFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUX0NMQVNTCitXRUJL
SVRfRE9NX0lTX0NTU19TVFlMRV9TSEVFVF9DTEFTUworV0VCS0lUX0RPTV9DU1NfU1RZTEVfU0hF
RVRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2Nzc19zdHls
ZV9zaGVldF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUNTU1ZhbHVlPC9GSUxFPgorPFRJVExFPldlYktpdERPTUNTU1ZhbHVlPC9USVRMRT4KK1dlYktp
dERPTUNTU1ZhbHVlCisKK1dFQktJVF9ET01fQ1NTX1ZBTFVFX0NTU19JTkhFUklUCitXRUJLSVRf
RE9NX0NTU19WQUxVRV9DU1NfUFJJTUlUSVZFX1ZBTFVFCitXRUJLSVRfRE9NX0NTU19WQUxVRV9D
U1NfVkFMVUVfTElTVAorV0VCS0lUX0RPTV9DU1NfVkFMVUVfQ1NTX0NVU1RPTQord2Via2l0X2Rv
bV9jc3NfdmFsdWVfZ2V0X2Nzc190ZXh0Cit3ZWJraXRfZG9tX2Nzc192YWx1ZV9zZXRfY3NzX3Rl
eHQKK3dlYmtpdF9kb21fY3NzX3ZhbHVlX2dldF9jc3NfdmFsdWVfdHlwZQorCis8U1VCU0VDVElP
TiBTdGFuZGFyZD4KK1dlYktpdERPTUNTU1ZhbHVlQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9DU1Nf
VkFMVUUKK1dFQktJVF9ET01fQ1NTX1ZBTFVFCitXRUJLSVRfRE9NX0lTX0NTU19WQUxVRQorV0VC
S0lUX0RPTV9DU1NfVkFMVUVfQ0xBU1MKK1dFQktJVF9ET01fSVNfQ1NTX1ZBTFVFX0NMQVNTCitX
RUJLSVRfRE9NX0NTU19WQUxVRV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dl
YmtpdF9kb21fY3NzX3ZhbHVlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NTWVkaWFMaXN0PC9GSUxFPgorPFRJVExFPldlYktpdERPTU1lZGlhTGlzdDwv
VElUTEU+CitXZWJLaXRET01NZWRpYUxpc3QKKword2Via2l0X2RvbV9tZWRpYV9saXN0X2l0ZW0K
K3dlYmtpdF9kb21fbWVkaWFfbGlzdF9kZWxldGVfbWVkaXVtCit3ZWJraXRfZG9tX21lZGlhX2xp
c3RfYXBwZW5kX21lZGl1bQord2Via2l0X2RvbV9tZWRpYV9saXN0X2dldF9tZWRpYV90ZXh0Cit3
ZWJraXRfZG9tX21lZGlhX2xpc3Rfc2V0X21lZGlhX3RleHQKK3dlYmtpdF9kb21fbWVkaWFfbGlz
dF9nZXRfbGVuZ3RoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NTWVkaWFMaXN0
Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9NRURJQV9MSVNUCitXRUJLSVRfRE9NX01FRElBX0xJU1QK
K1dFQktJVF9ET01fSVNfTUVESUFfTElTVAorV0VCS0lUX0RPTV9NRURJQV9MSVNUX0NMQVNTCitX
RUJLSVRfRE9NX0lTX01FRElBX0xJU1RfQ0xBU1MKK1dFQktJVF9ET01fTUVESUFfTElTVF9HRVRf
Q0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fbWVkaWFfbGlzdF9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVN0eWxlU2hlZXQ8
L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NU3R5bGVTaGVldDwvVElUTEU+CitXZWJLaXRET01TdHls
ZVNoZWV0CisKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X2NvbnRlbnRfdHlwZQord2Via2l0
X2RvbV9zdHlsZV9zaGVldF9nZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfc2V0
X2Rpc2FibGVkCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2dldF9vd25lcl9ub2RlCit3ZWJraXRf
ZG9tX3N0eWxlX3NoZWV0X2dldF9wYXJlbnRfc3R5bGVfc2hlZXQKK3dlYmtpdF9kb21fc3R5bGVf
c2hlZXRfZ2V0X2hyZWYKK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfZ2V0X3RpdGxlCit3ZWJraXRf
ZG9tX3N0eWxlX3NoZWV0X2dldF9tZWRpYQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktp
dERPTVN0eWxlU2hlZXRDbGFzcworV0VCS0lUX0RPTV9UWVBFX1NUWUxFX1NIRUVUCitXRUJLSVRf
RE9NX1NUWUxFX1NIRUVUCitXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUCitXRUJLSVRfRE9NX1NU
WUxFX1NIRUVUX0NMQVNTCitXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUX0NMQVNTCitXRUJLSVRf
RE9NX1NUWUxFX1NIRUVUX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9zdHlsZV9zaGVldF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxF
PldlYktpdERPTVN0eWxlU2hlZXRMaXN0PC9GSUxFPgorPFRJVExFPldlYktpdERPTVN0eWxlU2hl
ZXRMaXN0PC9USVRMRT4KK1dlYktpdERPTVN0eWxlU2hlZXRMaXN0CisKK3dlYmtpdF9kb21fc3R5
bGVfc2hlZXRfbGlzdF9pdGVtCit3ZWJraXRfZG9tX3N0eWxlX3NoZWV0X2xpc3RfZ2V0X2xlbmd0
aAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTVN0eWxlU2hlZXRMaXN0Q2xhc3MK
K1dFQktJVF9ET01fVFlQRV9TVFlMRV9TSEVFVF9MSVNUCitXRUJLSVRfRE9NX1NUWUxFX1NIRUVU
X0xJU1QKK1dFQktJVF9ET01fSVNfU1RZTEVfU0hFRVRfTElTVAorV0VCS0lUX0RPTV9TVFlMRV9T
SEVFVF9MSVNUX0NMQVNTCitXRUJLSVRfRE9NX0lTX1NUWUxFX1NIRUVUX0xJU1RfQ0xBU1MKK1dF
QktJVF9ET01fU1RZTEVfU0hFRVRfTElTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0
ZT4KK3dlYmtpdF9kb21fc3R5bGVfc2hlZXRfbGlzdF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUF0dHI8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NQXR0
cjwvVElUTEU+CitXZWJLaXRET01BdHRyCisKK3dlYmtpdF9kb21fYXR0cl9nZXRfbmFtZQord2Vi
a2l0X2RvbV9hdHRyX2dldF9zcGVjaWZpZWQKK3dlYmtpdF9kb21fYXR0cl9nZXRfdmFsdWUKK3dl
YmtpdF9kb21fYXR0cl9zZXRfdmFsdWUKK3dlYmtpdF9kb21fYXR0cl9nZXRfb3duZXJfZWxlbWVu
dAord2Via2l0X2RvbV9hdHRyX2dldF9uYW1lc3BhY2VfdXJpCit3ZWJraXRfZG9tX2F0dHJfZ2V0
X3ByZWZpeAord2Via2l0X2RvbV9hdHRyX2dldF9sb2NhbF9uYW1lCisKKzxTVUJTRUNUSU9OIFN0
YW5kYXJkPgorV2ViS2l0RE9NQXR0ckNsYXNzCitXRUJLSVRfRE9NX1RZUEVfQVRUUgorV0VCS0lU
X0RPTV9BVFRSCitXRUJLSVRfRE9NX0lTX0FUVFIKK1dFQktJVF9ET01fQVRUUl9DTEFTUworV0VC
S0lUX0RPTV9JU19BVFRSX0NMQVNTCitXRUJLSVRfRE9NX0FUVFJfR0VUX0NMQVNTCisKKzxTVUJT
RUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2F0dHJfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01DREFUQVNlY3Rpb248L0ZJTEU+Cis8VElUTEU+V2Vi
S2l0RE9NQ0RBVEFTZWN0aW9uPC9USVRMRT4KK1dlYktpdERPTUNEQVRBU2VjdGlvbgorCisKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01DREFUQVNlY3Rpb25DbGFzcworV0VCS0lU
X0RPTV9UWVBFX0NEQVRBX1NFQ1RJT04KK1dFQktJVF9ET01fQ0RBVEFfU0VDVElPTgorV0VCS0lU
X0RPTV9JU19DREFUQV9TRUNUSU9OCitXRUJLSVRfRE9NX0NEQVRBX1NFQ1RJT05fQ0xBU1MKK1dF
QktJVF9ET01fSVNfQ0RBVEFfU0VDVElPTl9DTEFTUworV0VCS0lUX0RPTV9DREFUQV9TRUNUSU9O
X0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9jZGF0YV9zZWN0
aW9uX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NQ2hh
cmFjdGVyRGF0YTwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01DaGFyYWN0ZXJEYXRhPC9USVRMRT4K
K1dlYktpdERPTUNoYXJhY3RlckRhdGEKKword2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9zdWJz
dHJpbmdfZGF0YQord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9hcHBlbmRfZGF0YQord2Via2l0
X2RvbV9jaGFyYWN0ZXJfZGF0YV9pbnNlcnRfZGF0YQord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0
YV9kZWxldGVfZGF0YQord2Via2l0X2RvbV9jaGFyYWN0ZXJfZGF0YV9yZXBsYWNlX2RhdGEKK3dl
YmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2RhdGEKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2Rh
dGFfc2V0X2RhdGEKK3dlYmtpdF9kb21fY2hhcmFjdGVyX2RhdGFfZ2V0X2xlbmd0aAorCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUNoYXJhY3RlckRhdGFDbGFzcworV0VCS0lUX0RP
TV9UWVBFX0NIQVJBQ1RFUl9EQVRBCitXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBCitXRUJLSVRf
RE9NX0lTX0NIQVJBQ1RFUl9EQVRBCitXRUJLSVRfRE9NX0NIQVJBQ1RFUl9EQVRBX0NMQVNTCitX
RUJLSVRfRE9NX0lTX0NIQVJBQ1RFUl9EQVRBX0NMQVNTCitXRUJLSVRfRE9NX0NIQVJBQ1RFUl9E
QVRBX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9jaGFyYWN0
ZXJfZGF0YV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUNvbW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NQ29tbWVudDwvVElUTEU+CitXZWJLaXRE
T01Db21tZW50CisKKworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUNvbW1lbnRD
bGFzcworV0VCS0lUX0RPTV9UWVBFX0NPTU1FTlQKK1dFQktJVF9ET01fQ09NTUVOVAorV0VCS0lU
X0RPTV9JU19DT01NRU5UCitXRUJLSVRfRE9NX0NPTU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNf
Q09NTUVOVF9DTEFTUworV0VCS0lUX0RPTV9DT01NRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV9jb21tZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb248L0ZJTEU+Cis8VElUTEU+
V2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb248L1RJVExFPgorV2ViS2l0RE9NRE9NSW1wbGVtZW50
YXRpb24KKword2Via2l0X2RvbV9kb21faW1wbGVtZW50YXRpb25faGFzX2ZlYXR1cmUKK3dlYmtp
dF9kb21fZG9tX2ltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVudF90eXBlCit3ZWJraXRfZG9t
X2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnQKK3dlYmtpdF9kb21fZG9tX2ltcGxl
bWVudGF0aW9uX2NyZWF0ZV9jc3Nfc3R5bGVfc2hlZXQKK3dlYmtpdF9kb21fZG9tX2ltcGxlbWVu
dGF0aW9uX2NyZWF0ZV9odG1sX2RvY3VtZW50CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NRE9NSW1wbGVtZW50YXRpb25DbGFzcworV0VCS0lUX0RPTV9UWVBFX0RPTV9JTVBMRU1F
TlRBVElPTgorV0VCS0lUX0RPTV9ET01fSU1QTEVNRU5UQVRJT04KK1dFQktJVF9ET01fSVNfRE9N
X0lNUExFTUVOVEFUSU9OCitXRUJLSVRfRE9NX0RPTV9JTVBMRU1FTlRBVElPTl9DTEFTUworV0VC
S0lUX0RPTV9JU19ET01fSU1QTEVNRU5UQVRJT05fQ0xBU1MKK1dFQktJVF9ET01fRE9NX0lNUExF
TUVOVEFUSU9OX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9k
b21faW1wbGVtZW50YXRpb25fZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklM
RT5XZWJLaXRET01Eb2N1bWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01Eb2N1bWVudDwvVElU
TEU+CitXZWJLaXRET01Eb2N1bWVudAorCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9lbGVt
ZW50Cit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9kb2N1bWVudF9mcmFnbWVudAord2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfdGV4dF9ub2RlCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9jb21tZW50Cit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jZGF0YV9zZWN0aW9uCit3ZWJr
aXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9wcm9jZXNzaW5nX2luc3RydWN0aW9uCit3ZWJraXRfZG9t
X2RvY3VtZW50X2NyZWF0ZV9hdHRyaWJ1dGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1l
bnRzX2J5X3RhZ19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbgord2Via2l0X2RvbV9kb2N1bWVudF9p
bXBvcnRfbm9kZQord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudF9ucword2Via2l0
X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0cmlidXRlX25zCit3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9lbGVtZW50c19ieV90YWdfbmFtZV9uc19hc19odG1sX2NvbGxlY3Rpb24KK3dlYmtpdF9kb21f
ZG9jdW1lbnRfYWRvcHRfbm9kZQord2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQKK3dl
YmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3JhbmdlCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9ub2RlX2l0ZXJhdG9yCit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90cmVlX3dhbGtlcgor
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfb3ZlcnJpZGVfc3R5bGUKK3dlYmtpdF9kb21fZG9jdW1l
bnRfY3JlYXRlX2V4cHJlc3Npb24KK3dlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX25zX3Jlc29s
dmVyCit3ZWJraXRfZG9tX2RvY3VtZW50X2V2YWx1YXRlCit3ZWJraXRfZG9tX2RvY3VtZW50X2V4
ZWNfY29tbWFuZAord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9jb21tYW5kX2VuYWJsZWQKK3dl
YmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfY29tbWFuZF9pbmRldGVybQord2Via2l0X2RvbV9kb2N1
bWVudF9xdWVyeV9jb21tYW5kX3N0YXRlCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1h
bmRfc3VwcG9ydGVkCit3ZWJraXRfZG9tX2RvY3VtZW50X3F1ZXJ5X2NvbW1hbmRfdmFsdWUKK3dl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X25hbWUKK3dlYmtpdF9kb21fZG9jdW1l
bnRfZWxlbWVudF9mcm9tX3BvaW50Cit3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV9jc3Nfc3R5
bGVfZGVjbGFyYXRpb24KK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNz
X25hbWVfYXNfaHRtbF9jb2xsZWN0aW9uCit3ZWJraXRfZG9tX2RvY3VtZW50X2hhc19mb2N1cwor
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZAord2Via2l0X2RvbV9kb2N1bWVu
dF9xdWVyeV9zZWxlY3Rvcgord2Via2l0X2RvbV9kb2N1bWVudF9xdWVyeV9zZWxlY3Rvcl9hbGwK
K3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RvY3R5cGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2ltcGxlbWVudGF0aW9uCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9kb2N1bWVudF9lbGVtZW50
Cit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9pbnB1dF9lbmNvZGluZword2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfeG1sX2VuY29kaW5nCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF94bWxfdmVyc2lv
bgord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfeG1sX3ZlcnNpb24KK3dlYmtpdF9kb21fZG9jdW1l
bnRfZ2V0X3htbF9zdGFuZGFsb25lCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF94bWxfc3RhbmRh
bG9uZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZG9jdW1lbnRfdXJpCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X3NldF9kb2N1bWVudF91cmkKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRf
dmlldword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc3R5bGVfc2hlZXRzCit3ZWJraXRfZG9tX2Rv
Y3VtZW50X2dldF90aXRsZQord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfdGl0bGUKK3dlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X2Rlc2lnbl9tb2RlCit3ZWJraXRfZG9tX2RvY3VtZW50X3NldF9kZXNp
Z25fbW9kZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfcmVmZXJyZXIKK3dlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2RvbWFpbgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdXJsCit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9jb29raWUKK3dlYmtpdF9kb21fZG9jdW1lbnRfc2V0X2Nvb2tpZQord2Vi
a2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keQord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfYm9keQor
d2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZAord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaW1h
Z2VzCit3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9hcHBsZXRzCit3ZWJraXRfZG9tX2RvY3VtZW50
X2dldF9saW5rcword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZm9ybXMKK3dlYmtpdF9kb21fZG9j
dW1lbnRfZ2V0X2FuY2hvcnMKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VtYmVkcword2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfcGx1Z2lucword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2NyaXB0
cword2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGFzdF9tb2RpZmllZAord2Via2l0X2RvbV9kb2N1
bWVudF9nZXRfY2hhcnNldAord2Via2l0X2RvbV9kb2N1bWVudF9zZXRfY2hhcnNldAord2Via2l0
X2RvbV9kb2N1bWVudF9nZXRfcmVhZHlfc3RhdGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2No
YXJhY3Rlcl9zZXQKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X3ByZWZlcnJlZF9zdHlsZXNoZWV0
X3NldAord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfc2VsZWN0ZWRfc3R5bGVzaGVldF9zZXQKK3dl
YmtpdF9kb21fZG9jdW1lbnRfc2V0X3NlbGVjdGVkX3N0eWxlc2hlZXRfc2V0Cit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9hY3RpdmVfZWxlbWVudAord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfY29t
cGF0X21vZGUKK3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUK
K3dlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lCit3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9ucword2Via2l0X2RvbV9kb2N1bWVu
dF9jcmVhdGVfZW50aXR5X3JlZmVyZW5jZQord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVmYXVs
dF9jaGFyc2V0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NRG9jdW1lbnRDbGFz
cworV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UCitXRUJLSVRfRE9NX0RPQ1VNRU5UCitXRUJLSVRf
RE9NX0lTX0RPQ1VNRU5UCitXRUJLSVRfRE9NX0RPQ1VNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lT
X0RPQ1VNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0RPQ1VNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9kb2N1bWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgor
Cis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTURvY3VtZW50RnJhZ21lbnQ8L0ZJTEU+Cis8VElU
TEU+V2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudDwvVElUTEU+CitXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50CisKKworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTURvY3VtZW50RnJh
Z21lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX0ZSQUdNRU5UCitXRUJLSVRfRE9N
X0RPQ1VNRU5UX0ZSQUdNRU5UCitXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX0ZSQUdNRU5UCitXRUJL
SVRfRE9NX0RPQ1VNRU5UX0ZSQUdNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UX0ZS
QUdNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0RPQ1VNRU5UX0ZSQUdNRU5UX0dFVF9DTEFTUworCis8
U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9kb2N1bWVudF9mcmFnbWVudF9nZXRfdHlw
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTURvY3VtZW50VHlwZTwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01Eb2N1bWVudFR5cGU8L1RJVExFPgorV2ViS2l0RE9NRG9j
dW1lbnRUeXBlCisKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfbmFtZQord2Via2l0X2Rv
bV9kb2N1bWVudF90eXBlX2dldF9lbnRpdGllcword2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dl
dF9ub3RhdGlvbnMKK3dlYmtpdF9kb21fZG9jdW1lbnRfdHlwZV9nZXRfaW50ZXJuYWxfc3Vic2V0
Cit3ZWJraXRfZG9tX2RvY3VtZW50X3R5cGVfZ2V0X3B1YmxpY19pZAord2Via2l0X2RvbV9kb2N1
bWVudF90eXBlX2dldF9zeXN0ZW1faWQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRE
T01Eb2N1bWVudFR5cGVDbGFzcworV0VCS0lUX0RPTV9UWVBFX0RPQ1VNRU5UX1RZUEUKK1dFQktJ
VF9ET01fRE9DVU1FTlRfVFlQRQorV0VCS0lUX0RPTV9JU19ET0NVTUVOVF9UWVBFCitXRUJLSVRf
RE9NX0RPQ1VNRU5UX1RZUEVfQ0xBU1MKK1dFQktJVF9ET01fSVNfRE9DVU1FTlRfVFlQRV9DTEFT
UworV0VCS0lUX0RPTV9ET0NVTUVOVF9UWVBFX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9kb2N1bWVudF90eXBlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01F
bGVtZW50PC9USVRMRT4KK1dlYktpdERPTUVsZW1lbnQKKword2Via2l0X2RvbV9lbGVtZW50X2dl
dF9hdHRyaWJ1dGUKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlCit3ZWJraXRfZG9t
X2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1
dGVfbm9kZQord2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZQord2Via2l0X2Rv
bV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZQord2Via2l0X2RvbV9lbGVtZW50X2dldF9l
bGVtZW50c19ieV90YWdfbmFtZV9hc19odG1sX2NvbGxlY3Rpb24KK3dlYmtpdF9kb21fZWxlbWVu
dF9oYXNfYXR0cmlidXRlcword2Via2l0X2RvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbnMKK3dl
YmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zCit3ZWJraXRfZG9tX2VsZW1lbnRfcmVt
b3ZlX2F0dHJpYnV0ZV9ucword2Via2l0X2RvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdf
bmFtZV9uc19hc19odG1sX2NvbGxlY3Rpb24KK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfYXR0cmli
dXRlX25vZGVfbnMKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMKK3dl
YmtpdF9kb21fZWxlbWVudF9oYXNfYXR0cmlidXRlCit3ZWJraXRfZG9tX2VsZW1lbnRfaGFzX2F0
dHJpYnV0ZV9ucword2Via2l0X2RvbV9lbGVtZW50X2ZvY3VzCit3ZWJraXRfZG9tX2VsZW1lbnRf
Ymx1cgord2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9pbnRvX3ZpZXcKK3dlYmtpdF9kb21fZWxl
bWVudF9zY3JvbGxfaW50b192aWV3X2lmX25lZWRlZAord2Via2l0X2RvbV9lbGVtZW50X3Njcm9s
bF9ieV9saW5lcword2Via2l0X2RvbV9lbGVtZW50X3Njcm9sbF9ieV9wYWdlcword2Via2l0X2Rv
bV9lbGVtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lX2FzX2h0bWxfY29sbGVjdGlvbgor
d2Via2l0X2RvbV9lbGVtZW50X3F1ZXJ5X3NlbGVjdG9yCit3ZWJraXRfZG9tX2VsZW1lbnRfcXVl
cnlfc2VsZWN0b3JfYWxsCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lCit3ZWJraXRf
ZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZXMKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfc3R5bGUK
K3dlYmtpdF9kb21fZWxlbWVudF9nZXRfaWQKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfaWQKK3dl
YmtpdF9kb21fZWxlbWVudF9nZXRfbmFtZXNwYWNlX3VyaQord2Via2l0X2RvbV9lbGVtZW50X2dl
dF9wcmVmaXgKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfbG9jYWxfbmFtZQord2Via2l0X2RvbV9l
bGVtZW50X2dldF9vZmZzZXRfbGVmdAord2Via2l0X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfdG9w
Cit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNldF93aWR0aAord2Via2l0X2RvbV9lbGVtZW50
X2dldF9vZmZzZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0Cit3
ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF90b3AKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRf
Y2xpZW50X3dpZHRoCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9oZWlnaHQKK3dlYmtp
dF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX2xlZnQKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfc2Ny
b2xsX2xlZnQKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfc2Nyb2xsX3RvcAord2Via2l0X2RvbV9l
bGVtZW50X3NldF9zY3JvbGxfdG9wCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3Njcm9sbF93aWR0
aAord2Via2l0X2RvbV9lbGVtZW50X2dldF9zY3JvbGxfaGVpZ2h0Cit3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X29mZnNldF9wYXJlbnQKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfaW5uZXJfaHRtbAor
d2Via2l0X2RvbV9lbGVtZW50X3NldF9pbm5lcl9odG1sCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0
X291dGVyX2h0bWwKK3dlYmtpdF9kb21fZWxlbWVudF9zZXRfb3V0ZXJfaHRtbAord2Via2l0X2Rv
bV9lbGVtZW50X2dldF9jbGFzc19uYW1lCit3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2NsYXNzX25h
bWUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfcHJldmlvdXNfZWxlbWVudF9zaWJsaW5nCit3ZWJr
aXRfZG9tX2VsZW1lbnRfZ2V0X25leHRfZWxlbWVudF9zaWJsaW5nCit3ZWJraXRfZG9tX2VsZW1l
bnRfZ2V0X2NoaWxkcmVuCit3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2ZpcnN0X2VsZW1lbnRfY2hp
bGQKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfbGFzdF9lbGVtZW50X2NoaWxkCit3ZWJraXRfZG9t
X2VsZW1lbnRfZ2V0X2NoaWxkX2VsZW1lbnRfY291bnQKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRf
ZWxlbWVudHNfYnlfdGFnX25hbWUKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlf
dGFnX25hbWVfbnMKK3dlYmtpdF9kb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFt
ZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUVsZW1lbnRDbGFzcworV0VCS0lU
X0RPTV9UWVBFX0VMRU1FTlQKK1dFQktJVF9ET01fRUxFTUVOVAorV0VCS0lUX0RPTV9JU19FTEVN
RU5UCitXRUJLSVRfRE9NX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgor
d2Via2l0X2RvbV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NRXZlbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NRXZlbnQ8L1RJVExFPgor
V2ViS2l0RE9NRXZlbnQKKworV0VCS0lUX0RPTV9FVkVOVF9OT05FCitXRUJLSVRfRE9NX0VWRU5U
X0NBUFRVUklOR19QSEFTRQorV0VCS0lUX0RPTV9FVkVOVF9BVF9UQVJHRVQKK1dFQktJVF9ET01f
RVZFTlRfQlVCQkxJTkdfUEhBU0UKK1dFQktJVF9ET01fRVZFTlRfTU9VU0VET1dOCitXRUJLSVRf
RE9NX0VWRU5UX01PVVNFVVAKK1dFQktJVF9ET01fRVZFTlRfTU9VU0VPVkVSCitXRUJLSVRfRE9N
X0VWRU5UX01PVVNFT1VUCitXRUJLSVRfRE9NX0VWRU5UX01PVVNFTU9WRQorV0VCS0lUX0RPTV9F
VkVOVF9NT1VTRURSQUcKK1dFQktJVF9ET01fRVZFTlRfQ0xJQ0sKK1dFQktJVF9ET01fRVZFTlRf
REJMQ0xJQ0sKK1dFQktJVF9ET01fRVZFTlRfS0VZRE9XTgorV0VCS0lUX0RPTV9FVkVOVF9LRVlV
UAorV0VCS0lUX0RPTV9FVkVOVF9LRVlQUkVTUworV0VCS0lUX0RPTV9FVkVOVF9EUkFHRFJPUAor
V0VCS0lUX0RPTV9FVkVOVF9GT0NVUworV0VCS0lUX0RPTV9FVkVOVF9CTFVSCitXRUJLSVRfRE9N
X0VWRU5UX1NFTEVDVAorV0VCS0lUX0RPTV9FVkVOVF9DSEFOR0UKK3dlYmtpdF9kb21fZXZlbnRf
c3RvcF9wcm9wYWdhdGlvbgord2Via2l0X2RvbV9ldmVudF9wcmV2ZW50X2RlZmF1bHQKK3dlYmtp
dF9kb21fZXZlbnRfaW5pdF9ldmVudAord2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfdHlwZQor
d2Via2l0X2RvbV9ldmVudF9nZXRfdGFyZ2V0Cit3ZWJraXRfZG9tX2V2ZW50X2dldF9jdXJyZW50
X3RhcmdldAord2Via2l0X2RvbV9ldmVudF9nZXRfZXZlbnRfcGhhc2UKK3dlYmtpdF9kb21fZXZl
bnRfZ2V0X2J1YmJsZXMKK3dlYmtpdF9kb21fZXZlbnRfZ2V0X2NhbmNlbGFibGUKK3dlYmtpdF9k
b21fZXZlbnRfZ2V0X3RpbWVfc3RhbXAKK3dlYmtpdF9kb21fZXZlbnRfZ2V0X3NyY19lbGVtZW50
Cit3ZWJraXRfZG9tX2V2ZW50X2dldF9yZXR1cm5fdmFsdWUKK3dlYmtpdF9kb21fZXZlbnRfc2V0
X3JldHVybl92YWx1ZQord2Via2l0X2RvbV9ldmVudF9nZXRfY2FuY2VsX2J1YmJsZQord2Via2l0
X2RvbV9ldmVudF9zZXRfY2FuY2VsX2J1YmJsZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdERPTUV2ZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9FVkVOVAorV0VCS0lUX0RPTV9FVkVO
VAorV0VCS0lUX0RPTV9JU19FVkVOVAorV0VCS0lUX0RPTV9FVkVOVF9DTEFTUworV0VCS0lUX0RP
TV9JU19FVkVOVF9DTEFTUworV0VCS0lUX0RPTV9FVkVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fZXZlbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRET01LZXlib2FyZEV2ZW50PC9GSUxFPgorPFRJVExFPldlYktp
dERPTUtleWJvYXJkRXZlbnQ8L1RJVExFPgorV2ViS2l0RE9NS2V5Ym9hcmRFdmVudAorCitXRUJL
SVRfRE9NX0tFWUJPQVJEX0VWRU5UX0tFWV9MT0NBVElPTl9TVEFOREFSRAorV0VCS0lUX0RPTV9L
RVlCT0FSRF9FVkVOVF9LRVlfTE9DQVRJT05fTEVGVAorV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVO
VF9LRVlfTE9DQVRJT05fUklHSFQKK1dFQktJVF9ET01fS0VZQk9BUkRfRVZFTlRfS0VZX0xPQ0FU
SU9OX05VTVBBRAord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfbW9kaWZpZXJfc3RhdGUK
K3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfaW5pdF9rZXlib2FyZF9ldmVudAord2Via2l0X2Rv
bV9rZXlib2FyZF9ldmVudF9nZXRfa2V5X2lkZW50aWZpZXIKK3dlYmtpdF9kb21fa2V5Ym9hcmRf
ZXZlbnRfZ2V0X2tleV9sb2NhdGlvbgord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9nZXRfY3Ry
bF9rZXkKK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X3NoaWZ0X2tleQord2Via2l0X2Rv
bV9rZXlib2FyZF9ldmVudF9nZXRfYWx0X2tleQord2Via2l0X2RvbV9rZXlib2FyZF9ldmVudF9n
ZXRfbWV0YV9rZXkKK3dlYmtpdF9kb21fa2V5Ym9hcmRfZXZlbnRfZ2V0X2FsdF9ncmFwaF9rZXkK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01LZXlib2FyZEV2ZW50Q2xhc3MKK1dF
QktJVF9ET01fVFlQRV9LRVlCT0FSRF9FVkVOVAorV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVAor
V0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVAorV0VCS0lUX0RPTV9LRVlCT0FSRF9FVkVOVF9D
TEFTUworV0VCS0lUX0RPTV9JU19LRVlCT0FSRF9FVkVOVF9DTEFTUworV0VCS0lUX0RPTV9LRVlC
T0FSRF9FVkVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
a2V5Ym9hcmRfZXZlbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5X
ZWJLaXRET01Nb3VzZUV2ZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTU1vdXNlRXZlbnQ8L1RJ
VExFPgorV2ViS2l0RE9NTW91c2VFdmVudAorCit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXRf
bW91c2VfZXZlbnQKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3NjcmVlbl94Cit3ZWJraXRf
ZG9tX21vdXNlX2V2ZW50X2dldF9zY3JlZW5feQord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRf
Y2xpZW50X3gKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X2NsaWVudF95Cit3ZWJraXRfZG9t
X21vdXNlX2V2ZW50X2dldF9jdHJsX2tleQord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfc2hp
ZnRfa2V5Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9hbHRfa2V5Cit3ZWJraXRfZG9tX21v
dXNlX2V2ZW50X2dldF9tZXRhX2tleQord2Via2l0X2RvbV9tb3VzZV9ldmVudF9nZXRfYnV0dG9u
Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9yZWxhdGVkX3RhcmdldAord2Via2l0X2RvbV9t
b3VzZV9ldmVudF9nZXRfb2Zmc2V0X3gKK3dlYmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X29mZnNl
dF95Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF94Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50
X2dldF95Cit3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2dldF9mcm9tX2VsZW1lbnQKK3dlYmtpdF9k
b21fbW91c2VfZXZlbnRfZ2V0X3RvX2VsZW1lbnQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitX
ZWJLaXRET01Nb3VzZUV2ZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9NT1VTRV9FVkVOVAorV0VC
S0lUX0RPTV9NT1VTRV9FVkVOVAorV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVAorV0VCS0lUX0RP
TV9NT1VTRV9FVkVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19NT1VTRV9FVkVOVF9DTEFTUworV0VC
S0lUX0RPTV9NT1VTRV9FVkVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dl
YmtpdF9kb21fbW91c2VfZXZlbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01OYW1lZE5vZGVNYXA8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NTmFtZWRO
b2RlTWFwPC9USVRMRT4KK1dlYktpdERPTU5hbWVkTm9kZU1hcAorCit3ZWJraXRfZG9tX25hbWVk
X25vZGVfbWFwX2dldF9uYW1lZF9pdGVtCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3NldF9u
YW1lZF9pdGVtCit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX3JlbW92ZV9uYW1lZF9pdGVtCit3
ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2l0ZW0KK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBf
Z2V0X25hbWVkX2l0ZW1fbnMKK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfc2V0X25hbWVkX2l0
ZW1fbnMKK3dlYmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnMKK3dl
YmtpdF9kb21fbmFtZWRfbm9kZV9tYXBfZ2V0X2xlbmd0aAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTU5hbWVkTm9kZU1hcENsYXNzCitXRUJLSVRfRE9NX1RZUEVfTkFNRURfTk9E
RV9NQVAKK1dFQktJVF9ET01fTkFNRURfTk9ERV9NQVAKK1dFQktJVF9ET01fSVNfTkFNRURfTk9E
RV9NQVAKK1dFQktJVF9ET01fTkFNRURfTk9ERV9NQVBfQ0xBU1MKK1dFQktJVF9ET01fSVNfTkFN
RURfTk9ERV9NQVBfQ0xBU1MKK1dFQktJVF9ET01fTkFNRURfTk9ERV9NQVBfR0VUX0NMQVNTCisK
KzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX25hbWVkX25vZGVfbWFwX2dldF90eXBl
Cis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NTm9kZTwvRklMRT4KKzxU
SVRMRT5XZWJLaXRET01Ob2RlPC9USVRMRT4KK1dlYktpdERPTU5vZGUKKworV0VCS0lUX0RPTV9O
T0RFX0VMRU1FTlRfTk9ERQorV0VCS0lUX0RPTV9OT0RFX0FUVFJJQlVURV9OT0RFCitXRUJLSVRf
RE9NX05PREVfVEVYVF9OT0RFCitXRUJLSVRfRE9NX05PREVfQ0RBVEFfU0VDVElPTl9OT0RFCitX
RUJLSVRfRE9NX05PREVfRU5USVRZX1JFRkVSRU5DRV9OT0RFCitXRUJLSVRfRE9NX05PREVfRU5U
SVRZX05PREUKK1dFQktJVF9ET01fTk9ERV9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUKK1dF
QktJVF9ET01fTk9ERV9DT01NRU5UX05PREUKK1dFQktJVF9ET01fTk9ERV9ET0NVTUVOVF9OT0RF
CitXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfVFlQRV9OT0RFCitXRUJLSVRfRE9NX05PREVfRE9D
VU1FTlRfRlJBR01FTlRfTk9ERQorV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0RJ
U0NPTk5FQ1RFRAorV0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORwor
V0VCS0lUX0RPTV9OT0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORworV0VCS0lUX0RPTV9O
T0RFX0RPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TCitXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRf
UE9TSVRJT05fQ09OVEFJTkVEX0JZCitXRUJLSVRfRE9NX05PREVfRE9DVU1FTlRfUE9TSVRJT05f
SU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMKK3dlYmtpdF9kb21fbm9kZV9pbnNlcnRfYmVmb3JlCit3
ZWJraXRfZG9tX25vZGVfcmVwbGFjZV9jaGlsZAord2Via2l0X2RvbV9ub2RlX3JlbW92ZV9jaGls
ZAord2Via2l0X2RvbV9ub2RlX2FwcGVuZF9jaGlsZAord2Via2l0X2RvbV9ub2RlX2hhc19jaGls
ZF9ub2Rlcword2Via2l0X2RvbV9ub2RlX2Nsb25lX25vZGVfd2l0aF9lcnJvcgord2Via2l0X2Rv
bV9ub2RlX25vcm1hbGl6ZQord2Via2l0X2RvbV9ub2RlX2lzX3N1cHBvcnRlZAord2Via2l0X2Rv
bV9ub2RlX2lzX3NhbWVfbm9kZQord2Via2l0X2RvbV9ub2RlX2lzX2VxdWFsX25vZGUKK3dlYmtp
dF9kb21fbm9kZV9sb29rdXBfcHJlZml4Cit3ZWJraXRfZG9tX25vZGVfbG9va3VwX25hbWVzcGFj
ZV91cmkKK3dlYmtpdF9kb21fbm9kZV9pc19kZWZhdWx0X25hbWVzcGFjZQord2Via2l0X2RvbV9u
b2RlX2NvbXBhcmVfZG9jdW1lbnRfcG9zaXRpb24KK3dlYmtpdF9kb21fbm9kZV9jb250YWlucwor
d2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUKK3dlYmtpdF9kb21fbm9kZV9nZXRfbm9kZV92
YWx1ZQord2Via2l0X2RvbV9ub2RlX3NldF9ub2RlX3ZhbHVlCit3ZWJraXRfZG9tX25vZGVfZ2V0
X25vZGVfdHlwZQord2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfbm9kZQord2Via2l0X2RvbV9u
b2RlX2dldF9jaGlsZF9ub2Rlcword2Via2l0X2RvbV9ub2RlX2dldF9maXJzdF9jaGlsZAord2Vi
a2l0X2RvbV9ub2RlX2dldF9sYXN0X2NoaWxkCit3ZWJraXRfZG9tX25vZGVfZ2V0X3ByZXZpb3Vz
X3NpYmxpbmcKK3dlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nCit3ZWJraXRfZG9tX25v
ZGVfZ2V0X293bmVyX2RvY3VtZW50Cit3ZWJraXRfZG9tX25vZGVfZ2V0X2Jhc2VfdXJpCit3ZWJr
aXRfZG9tX25vZGVfZ2V0X3RleHRfY29udGVudAord2Via2l0X2RvbV9ub2RlX3NldF90ZXh0X2Nv
bnRlbnQKK3dlYmtpdF9kb21fbm9kZV9nZXRfcGFyZW50X2VsZW1lbnQKK3dlYmtpdF9kb21fbm9k
ZV9jbG9uZV9ub2RlCit3ZWJraXRfZG9tX25vZGVfZ2V0X25hbWVzcGFjZV91cmkKK3dlYmtpdF9k
b21fbm9kZV9nZXRfcHJlZml4Cit3ZWJraXRfZG9tX25vZGVfc2V0X3ByZWZpeAord2Via2l0X2Rv
bV9ub2RlX2dldF9sb2NhbF9uYW1lCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9N
Tm9kZUNsYXNzCitXRUJLSVRfRE9NX1RZUEVfTk9ERQorV0VCS0lUX0RPTV9OT0RFCitXRUJLSVRf
RE9NX0lTX05PREUKK1dFQktJVF9ET01fTk9ERV9DTEFTUworV0VCS0lUX0RPTV9JU19OT0RFX0NM
QVNTCitXRUJLSVRfRE9NX05PREVfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3
ZWJraXRfZG9tX25vZGVfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5X
ZWJLaXRET01Ob2RlSXRlcmF0b3I8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NTm9kZUl0ZXJhdG9y
PC9USVRMRT4KK1dlYktpdERPTU5vZGVJdGVyYXRvcgorCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0
b3JfbmV4dF9ub2RlCit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfcHJldmlvdXNfbm9kZQord2Vi
a2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2RldGFjaAord2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX2dl
dF9yb290Cit3ZWJraXRfZG9tX25vZGVfaXRlcmF0b3JfZ2V0X3doYXRfdG9fc2hvdword2Via2l0
X2RvbV9ub2RlX2l0ZXJhdG9yX2dldF9maWx0ZXIKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9n
ZXRfcmVmZXJlbmNlX25vZGUKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfcG9pbnRlcl9i
ZWZvcmVfcmVmZXJlbmNlX25vZGUKK3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfZXhwYW5k
X2VudGl0eV9yZWZlcmVuY2VzCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NTm9k
ZUl0ZXJhdG9yQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9OT0RFX0lURVJBVE9SCitXRUJLSVRfRE9N
X05PREVfSVRFUkFUT1IKK1dFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUgorV0VCS0lUX0RPTV9O
T0RFX0lURVJBVE9SX0NMQVNTCitXRUJLSVRfRE9NX0lTX05PREVfSVRFUkFUT1JfQ0xBU1MKK1dF
QktJVF9ET01fTk9ERV9JVEVSQVRPUl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTU5vZGVMaXN0PC9GSUxFPgorPFRJVExFPldlYktpdERPTU5vZGVM
aXN0PC9USVRMRT4KK1dlYktpdERPTU5vZGVMaXN0CisKK3dlYmtpdF9kb21fbm9kZV9saXN0X2l0
ZW0KK3dlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXZWJLaXRET01Ob2RlTGlzdENsYXNzCitXRUJLSVRfRE9NX1RZUEVfTk9ERV9MSVNUCitX
RUJLSVRfRE9NX05PREVfTElTVAorV0VCS0lUX0RPTV9JU19OT0RFX0xJU1QKK1dFQktJVF9ET01f
Tk9ERV9MSVNUX0NMQVNTCitXRUJLSVRfRE9NX0lTX05PREVfTElTVF9DTEFTUworV0VCS0lUX0RP
TV9OT0RFX0xJU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9t
X25vZGVfbGlzdF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktp
dERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbjwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01Qcm9jZXNz
aW5nSW5zdHJ1Y3Rpb248L1RJVExFPgorV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uCisK
K3dlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9nZXRfdGFyZ2V0Cit3ZWJraXRfZG9t
X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fZ2V0X3NoZWV0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJk
PgorV2ViS2l0RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9Q
Uk9DRVNTSU5HX0lOU1RSVUNUSU9OCitXRUJLSVRfRE9NX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04K
K1dFQktJVF9ET01fSVNfUFJPQ0VTU0lOR19JTlNUUlVDVElPTgorV0VCS0lUX0RPTV9QUk9DRVNT
SU5HX0lOU1RSVUNUSU9OX0NMQVNTCitXRUJLSVRfRE9NX0lTX1BST0NFU1NJTkdfSU5TVFJVQ1RJ
T05fQ0xBU1MKK1dFQktJVF9ET01fUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9n
ZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVJhbmdlPC9G
SUxFPgorPFRJVExFPldlYktpdERPTVJhbmdlPC9USVRMRT4KK1dlYktpdERPTVJhbmdlCisKK1dF
QktJVF9ET01fUkFOR0VfU1RBUlRfVE9fU1RBUlQKK1dFQktJVF9ET01fUkFOR0VfU1RBUlRfVE9f
RU5ECitXRUJLSVRfRE9NX1JBTkdFX0VORF9UT19FTkQKK1dFQktJVF9ET01fUkFOR0VfRU5EX1RP
X1NUQVJUCitXRUJLSVRfRE9NX1JBTkdFX05PREVfQkVGT1JFCitXRUJLSVRfRE9NX1JBTkdFX05P
REVfQUZURVIKK1dFQktJVF9ET01fUkFOR0VfTk9ERV9CRUZPUkVfQU5EX0FGVEVSCitXRUJLSVRf
RE9NX1JBTkdFX05PREVfSU5TSURFCit3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydAord2Via2l0
X2RvbV9yYW5nZV9zZXRfZW5kCit3ZWJraXRfZG9tX3JhbmdlX3NldF9zdGFydF9iZWZvcmUKK3dl
YmtpdF9kb21fcmFuZ2Vfc2V0X3N0YXJ0X2FmdGVyCit3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmRf
YmVmb3JlCit3ZWJraXRfZG9tX3JhbmdlX3NldF9lbmRfYWZ0ZXIKK3dlYmtpdF9kb21fcmFuZ2Vf
Y29sbGFwc2UKK3dlYmtpdF9kb21fcmFuZ2Vfc2VsZWN0X25vZGUKK3dlYmtpdF9kb21fcmFuZ2Vf
c2VsZWN0X25vZGVfY29udGVudHMKK3dlYmtpdF9kb21fcmFuZ2VfY29tcGFyZV9ib3VuZGFyeV9w
b2ludHMKK3dlYmtpdF9kb21fcmFuZ2VfZGVsZXRlX2NvbnRlbnRzCit3ZWJraXRfZG9tX3Jhbmdl
X2V4dHJhY3RfY29udGVudHMKK3dlYmtpdF9kb21fcmFuZ2VfY2xvbmVfY29udGVudHMKK3dlYmtp
dF9kb21fcmFuZ2VfaW5zZXJ0X25vZGUKK3dlYmtpdF9kb21fcmFuZ2Vfc3Vycm91bmRfY29udGVu
dHMKK3dlYmtpdF9kb21fcmFuZ2VfY2xvbmVfcmFuZ2UKK3dlYmtpdF9kb21fcmFuZ2VfdG9fc3Ry
aW5nCit3ZWJraXRfZG9tX3JhbmdlX2RldGFjaAord2Via2l0X2RvbV9yYW5nZV9jcmVhdGVfY29u
dGV4dHVhbF9mcmFnbWVudAord2Via2l0X2RvbV9yYW5nZV9jb21wYXJlX25vZGUKK3dlYmtpdF9k
b21fcmFuZ2VfaW50ZXJzZWN0c19ub2RlCit3ZWJraXRfZG9tX3JhbmdlX2NvbXBhcmVfcG9pbnQK
K3dlYmtpdF9kb21fcmFuZ2VfaXNfcG9pbnRfaW5fcmFuZ2UKK3dlYmtpdF9kb21fcmFuZ2VfZ2V0
X3N0YXJ0X2NvbnRhaW5lcgord2Via2l0X2RvbV9yYW5nZV9nZXRfc3RhcnRfb2Zmc2V0Cit3ZWJr
aXRfZG9tX3JhbmdlX2dldF9lbmRfY29udGFpbmVyCit3ZWJraXRfZG9tX3JhbmdlX2dldF9lbmRf
b2Zmc2V0Cit3ZWJraXRfZG9tX3JhbmdlX2dldF9jb2xsYXBzZWQKK3dlYmtpdF9kb21fcmFuZ2Vf
Z2V0X2NvbW1vbl9hbmNlc3Rvcl9jb250YWluZXIKK3dlYmtpdF9kb21fcmFuZ2VfZ2V0X3RleHQK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01SYW5nZUNsYXNzCitXRUJLSVRfRE9N
X1RZUEVfUkFOR0UKK1dFQktJVF9ET01fUkFOR0UKK1dFQktJVF9ET01fSVNfUkFOR0UKK1dFQktJ
VF9ET01fUkFOR0VfQ0xBU1MKK1dFQktJVF9ET01fSVNfUkFOR0VfQ0xBU1MKK1dFQktJVF9ET01f
UkFOR0VfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX3Jhbmdl
X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NVGV4dDwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01UZXh0PC9USVRMRT4KK1dlYktpdERPTVRleHQKKword2Vi
a2l0X2RvbV90ZXh0X3NwbGl0X3RleHQKK3dlYmtpdF9kb21fdGV4dF9nZXRfd2hvbGVfdGV4dAor
d2Via2l0X2RvbV90ZXh0X3JlcGxhY2Vfd2hvbGVfdGV4dAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTVRleHRDbGFzcworV0VCS0lUX0RPTV9UWVBFX1RFWFQKK1dFQktJVF9ET01f
VEVYVAorV0VCS0lUX0RPTV9JU19URVhUCitXRUJLSVRfRE9NX1RFWFRfQ0xBU1MKK1dFQktJVF9E
T01fSVNfVEVYVF9DTEFTUworV0VCS0lUX0RPTV9URVhUX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV90ZXh0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNU
SU9OPgorPEZJTEU+V2ViS2l0RE9NVHJlZVdhbGtlcjwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01U
cmVlV2Fsa2VyPC9USVRMRT4KK1dlYktpdERPTVRyZWVXYWxrZXIKKword2Via2l0X2RvbV90cmVl
X3dhbGtlcl9wYXJlbnRfbm9kZQord2Via2l0X2RvbV90cmVlX3dhbGtlcl9maXJzdF9jaGlsZAor
d2Via2l0X2RvbV90cmVlX3dhbGtlcl9sYXN0X2NoaWxkCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2Vy
X3ByZXZpb3VzX3NpYmxpbmcKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfbmV4dF9zaWJsaW5nCit3
ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX3ByZXZpb3VzX25vZGUKK3dlYmtpdF9kb21fdHJlZV93YWxr
ZXJfbmV4dF9ub2RlCit3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9yb290Cit3ZWJraXRfZG9t
X3RyZWVfd2Fsa2VyX2dldF93aGF0X3RvX3Nob3cKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJfZ2V0
X2ZpbHRlcgord2Via2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfY3VycmVudF9ub2RlCit3ZWJraXRf
ZG9tX3RyZWVfd2Fsa2VyX3NldF9jdXJyZW50X25vZGUKK3dlYmtpdF9kb21fdHJlZV93YWxrZXJf
Z2V0X2V4cGFuZF9lbnRpdHlfcmVmZXJlbmNlcworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdERPTVRyZWVXYWxrZXJDbGFzcworV0VCS0lUX0RPTV9UWVBFX1RSRUVfV0FMS0VSCitXRUJL
SVRfRE9NX1RSRUVfV0FMS0VSCitXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSCitXRUJLSVRfRE9N
X1RSRUVfV0FMS0VSX0NMQVNTCitXRUJLSVRfRE9NX0lTX1RSRUVfV0FMS0VSX0NMQVNTCitXRUJL
SVRfRE9NX1RSRUVfV0FMS0VSX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Vi
a2l0X2RvbV90cmVlX3dhbGtlcl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxG
SUxFPldlYktpdERPTVVJRXZlbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NVUlFdmVudDwvVElU
TEU+CitXZWJLaXRET01VSUV2ZW50CisKK3dlYmtpdF9kb21fdWlfZXZlbnRfaW5pdF91aV9ldmVu
dAord2Via2l0X2RvbV91aV9ldmVudF9nZXRfdmlldword2Via2l0X2RvbV91aV9ldmVudF9nZXRf
ZGV0YWlsCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9rZXlfY29kZQord2Via2l0X2RvbV91aV9l
dmVudF9nZXRfY2hhcl9jb2RlCit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9sYXllcl94Cit3ZWJr
aXRfZG9tX3VpX2V2ZW50X2dldF9sYXllcl95Cit3ZWJraXRfZG9tX3VpX2V2ZW50X2dldF9wYWdl
X3gKK3dlYmtpdF9kb21fdWlfZXZlbnRfZ2V0X3BhZ2VfeQorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTVVJRXZlbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX1VJX0VWRU5UCitXRUJL
SVRfRE9NX1VJX0VWRU5UCitXRUJLSVRfRE9NX0lTX1VJX0VWRU5UCitXRUJLSVRfRE9NX1VJX0VW
RU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX1VJX0VWRU5UX0NMQVNTCitXRUJLSVRfRE9NX1VJX0VW
RU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV91aV9ldmVu
dF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVdoZWVs
RXZlbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NV2hlZWxFdmVudDwvVElUTEU+CitXZWJLaXRE
T01XaGVlbEV2ZW50CisKK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRfaW5pdF93aGVlbF9ldmVudAor
d2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hlZWxfZGVsdGFfeAord2Via2l0X2RvbV93aGVl
bF9ldmVudF9nZXRfd2hlZWxfZGVsdGFfeQord2Via2l0X2RvbV93aGVlbF9ldmVudF9nZXRfd2hl
ZWxfZGVsdGEKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01XaGVlbEV2ZW50Q2xh
c3MKK1dFQktJVF9ET01fVFlQRV9XSEVFTF9FVkVOVAorV0VCS0lUX0RPTV9XSEVFTF9FVkVOVAor
V0VCS0lUX0RPTV9JU19XSEVFTF9FVkVOVAorV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9DTEFTUwor
V0VCS0lUX0RPTV9JU19XSEVFTF9FVkVOVF9DTEFTUworV0VCS0lUX0RPTV9XSEVFTF9FVkVOVF9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21fd2hlZWxfZXZlbnRf
Z2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01CbG9iPC9G
SUxFPgorPFRJVExFPldlYktpdERPTUJsb2I8L1RJVExFPgorV2ViS2l0RE9NQmxvYgorCit3ZWJr
aXRfZG9tX2Jsb2JfZ2V0X3NpemUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01C
bG9iQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9CTE9CCitXRUJLSVRfRE9NX0JMT0IKK1dFQktJVF9E
T01fSVNfQkxPQgorV0VCS0lUX0RPTV9CTE9CX0NMQVNTCitXRUJLSVRfRE9NX0lTX0JMT0JfQ0xB
U1MKK1dFQktJVF9ET01fQkxPQl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dl
YmtpdF9kb21fYmxvYl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldl
YktpdERPTUZpbGU8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NRmlsZTwvVElUTEU+CitXZWJLaXRE
T01GaWxlCisKK3dlYmtpdF9kb21fZmlsZV9nZXRfbmFtZQorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUZpbGVDbGFzcworV0VCS0lUX0RPTV9UWVBFX0ZJTEUKK1dFQktJVF9ET01f
RklMRQorV0VCS0lUX0RPTV9JU19GSUxFCitXRUJLSVRfRE9NX0ZJTEVfQ0xBU1MKK1dFQktJVF9E
T01fSVNfRklMRV9DTEFTUworV0VCS0lUX0RPTV9GSUxFX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV9maWxlX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNU
SU9OPgorPEZJTEU+V2ViS2l0RE9NRmlsZUxpc3Q8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NRmls
ZUxpc3Q8L1RJVExFPgorV2ViS2l0RE9NRmlsZUxpc3QKKword2Via2l0X2RvbV9maWxlX2xpc3Rf
aXRlbQord2Via2l0X2RvbV9maWxlX2xpc3RfZ2V0X2xlbmd0aAorCis8U1VCU0VDVElPTiBTdGFu
ZGFyZD4KK1dlYktpdERPTUZpbGVMaXN0Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9GSUxFX0xJU1QK
K1dFQktJVF9ET01fRklMRV9MSVNUCitXRUJLSVRfRE9NX0lTX0ZJTEVfTElTVAorV0VCS0lUX0RP
TV9GSUxFX0xJU1RfQ0xBU1MKK1dFQktJVF9ET01fSVNfRklMRV9MSVNUX0NMQVNTCitXRUJLSVRf
RE9NX0ZJTEVfTElTVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9k
b21fZmlsZV9saXN0X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2Vi
S2l0RE9NSFRNTEFuY2hvckVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEFuY2hv
ckVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQKKword2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9jaGFyc2V0Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X2NoYXJzZXQKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRf
Y29vcmRzCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2Nvb3Jkcword2Via2l0
X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVmbGFuZword2Via2l0X2RvbV9odG1sX2Fu
Y2hvcl9lbGVtZW50X3NldF9ocmVmbGFuZword2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X25hbWUKK3dlYmtp
dF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcmVsCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9y
X2VsZW1lbnRfc2V0X3JlbAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9yZXYK
K3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfcmV2Cit3ZWJraXRfZG9tX2h0bWxf
YW5jaG9yX2VsZW1lbnRfZ2V0X3NoYXBlCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRf
c2V0X3NoYXBlCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3RhcmdldAord2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF90YXJnZXQKK3dlYmtpdF9kb21faHRtbF9h
bmNob3JfZWxlbWVudF9nZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfc2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF90ZXh0
Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X2hyZWYKK3dlYmtpdF9kb21faHRt
bF9hbmNob3JfZWxlbWVudF9zZXRfaHJlZgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50
X2dldF9wcm90b2NvbAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9wcm90b2Nv
bAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ob3N0Cit3ZWJraXRfZG9tX2h0
bWxfYW5jaG9yX2VsZW1lbnRfc2V0X2hvc3QKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVu
dF9nZXRfaG9zdG5hbWUKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9zZXRfaG9zdG5h
bWUKK3dlYmtpdF9kb21faHRtbF9hbmNob3JfZWxlbWVudF9nZXRfcG9ydAord2Via2l0X2RvbV9o
dG1sX2FuY2hvcl9lbGVtZW50X3NldF9wb3J0Cit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1l
bnRfZ2V0X3BhdGhuYW1lCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfc2V0X3BhdGhu
YW1lCit3ZWJraXRfZG9tX2h0bWxfYW5jaG9yX2VsZW1lbnRfZ2V0X3NlYXJjaAord2Via2l0X2Rv
bV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9zZWFyY2gKK3dlYmtpdF9kb21faHRtbF9hbmNob3Jf
ZWxlbWVudF9nZXRfaGFzaAord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X3NldF9oYXNo
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnRDbGFz
cworV0VCS0lUX0RPTV9UWVBFX0hUTUxfQU5DSE9SX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9B
TkNIT1JfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0FOQ0hPUl9FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfQU5DSE9SX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9BTkNIT1Jf
RUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0FOQ0hPUl9FTEVNRU5UX0dFVF9DTEFTUwor
Cis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEFwcGxl
dEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQ8L1RJVExF
PgorV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2FwcGxldF9l
bGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9hbGln
bgord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9hbHQKK3dlYmtpdF9kb21faHRt
bF9hcHBsZXRfZWxlbWVudF9zZXRfYWx0Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRf
Z2V0X2FyY2hpdmUKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfYXJjaGl2ZQor
d2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9jb2RlCit3ZWJraXRfZG9tX2h0bWxf
YXBwbGV0X2VsZW1lbnRfc2V0X2NvZGUKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9n
ZXRfY29kZV9iYXNlCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1lbnRfc2V0X2NvZGVfYmFz
ZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X2dldF9oZWlnaHQKK3dlYmtpdF9kb21f
aHRtbF9hcHBsZXRfZWxlbWVudF9zZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2Vs
ZW1lbnRfZ2V0X2hzcGFjZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9oc3Bh
Y2UKK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9o
dG1sX2FwcGxldF9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfYXBwbGV0X2VsZW1l
bnRfZ2V0X29iamVjdAord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF9vYmplY3QK
K3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRfdnNwYWNlCit3ZWJraXRfZG9tX2h0
bWxfYXBwbGV0X2VsZW1lbnRfc2V0X3ZzcGFjZQord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVt
ZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX2FwcGxldF9lbGVtZW50X3NldF93aWR0aAor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxBcHBsZXRFbGVtZW50Q2xhc3MK
K1dFQktJVF9ET01fVFlQRV9IVE1MX0FQUExFVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQVBQ
TEVUX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9BUFBMRVRfRUxFTUVOVAorV0VCS0lUX0RP
TV9IVE1MX0FQUExFVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQVBQTEVUX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9BUFBMRVRfRUxFTUVOVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9hcHBsZXRfZWxlbWVudF9nZXRf
dHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxBcmVhRWxl
bWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQXJlYUVsZW1lbnQ8L1RJVExFPgorV2Vi
S2l0RE9NSFRNTEFyZWFFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0
X2FsdAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfYWx0Cit3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X2dldF9jb29yZHMKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRf
c2V0X2Nvb3Jkcword2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfbm9faHJlZgord2Vi
a2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfbm9faHJlZgord2Via2l0X2RvbV9odG1sX2Fy
ZWFfZWxlbWVudF9nZXRfc2hhcGUKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfc2V0X3No
YXBlCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF90YXJnZXQKK3dlYmtpdF9kb21f
aHRtbF9hcmVhX2VsZW1lbnRfc2V0X3RhcmdldAord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9nZXRfaHJlZgord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVudF9zZXRfaHJlZgord2Via2l0
X2RvbV9odG1sX2FyZWFfZWxlbWVudF9nZXRfcHJvdG9jb2wKK3dlYmtpdF9kb21faHRtbF9hcmVh
X2VsZW1lbnRfZ2V0X2hvc3QKK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X2hvc3Ru
YW1lCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9wb3J0Cit3ZWJraXRfZG9tX2h0
bWxfYXJlYV9lbGVtZW50X2dldF9wYXRobmFtZQord2Via2l0X2RvbV9odG1sX2FyZWFfZWxlbWVu
dF9nZXRfc2VhcmNoCit3ZWJraXRfZG9tX2h0bWxfYXJlYV9lbGVtZW50X2dldF9oYXNoCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50Q2xhc3MKK1dFQktJ
VF9ET01fVFlQRV9IVE1MX0FSRUFfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVO
VAorV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0FSRUFf
RUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0FSRUFfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX0FSRUFfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0
ZT4KK3dlYmtpdF9kb21faHRtbF9hcmVhX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MQlJFbGVtZW50PC9GSUxFPgorPFRJVExFPldl
YktpdERPTUhUTUxCUkVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEJSRWxlbWVudAorCit3
ZWJraXRfZG9tX2h0bWxfYnJfZWxlbWVudF9nZXRfY2xlYXIKK3dlYmtpdF9kb21faHRtbF9icl9l
bGVtZW50X3NldF9jbGVhcgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxC
UkVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlJfRUxFTUVOVAorV0VCS0lUX0RP
TV9IVE1MX0JSX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9CUl9FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfQlJfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0JSX0VMRU1FTlRf
Q0xBU1MKK1dFQktJVF9ET01fSFRNTF9CUl9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2JyX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElP
Tj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MQmFzZUVsZW1lbnQ8L0ZJTEU+Cis8
VElUTEU+V2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxCYXNl
RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF9ocmVmCit3ZWJraXRf
ZG9tX2h0bWxfYmFzZV9lbGVtZW50X3NldF9ocmVmCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVt
ZW50X2dldF90YXJnZXQKK3dlYmtpdF9kb21faHRtbF9iYXNlX2VsZW1lbnRfc2V0X3RhcmdldAor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxCYXNlRWxlbWVudENsYXNzCitX
RUJLSVRfRE9NX1RZUEVfSFRNTF9CQVNFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CQVNFX0VM
RU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9CQVNFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9C
QVNFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9CQVNFX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSFRNTF9CQVNFX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfYmFzZV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+
CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50PC9GSUxFPgorPFRJ
VExFPldlYktpdERPTUhUTUxCb2R5RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MQm9keUVs
ZW1lbnQKKword2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfYV9saW5rCit3ZWJraXRf
ZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9hX2xpbmsKK3dlYmtpdF9kb21faHRtbF9ib2R5X2Vs
ZW1lbnRfZ2V0X2JhY2tncm91bmQKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfc2V0X2Jh
Y2tncm91bmQKK3dlYmtpdF9kb21faHRtbF9ib2R5X2VsZW1lbnRfZ2V0X2JnX2NvbG9yCit3ZWJr
aXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF9iZ19jb2xvcgord2Via2l0X2RvbV9odG1sX2Jv
ZHlfZWxlbWVudF9nZXRfbGluaword2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9zZXRfbGlu
aword2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfdGV4dAord2Via2l0X2RvbV9odG1s
X2JvZHlfZWxlbWVudF9zZXRfdGV4dAord2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRf
dl9saW5rCit3ZWJraXRfZG9tX2h0bWxfYm9keV9lbGVtZW50X3NldF92X2xpbmsKKworPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MQm9keUVsZW1lbnRDbGFzcworV0VCS0lUX0RP
TV9UWVBFX0hUTUxfQk9EWV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVNRU5UCitX
RUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQk9EWV9FTEVN
RU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfQk9EWV9FTEVNRU5UX0NMQVNTCitXRUJLSVRf
RE9NX0hUTUxfQk9EWV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgor
d2Via2l0X2RvbV9odG1sX2JvZHlfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VD
VElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxCdXR0b25FbGVtZW50PC9GSUxFPgorPFRJVExFPldl
YktpdERPTUhUTUxCdXR0b25FbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxCdXR0b25FbGVt
ZW50CisKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9nZXRfYXV0b2ZvY3VzCit3ZWJr
aXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2F1dG9mb2N1cword2Via2l0X2RvbV9odG1s
X2J1dHRvbl9lbGVtZW50X2dldF9kaXNhYmxlZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVt
ZW50X3NldF9kaXNhYmxlZAord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF9mb3Jt
Cit3ZWJraXRfZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfZ2V0X2J1dHRvbl90eXBlCit3ZWJraXRf
ZG9tX2h0bWxfYnV0dG9uX2VsZW1lbnRfc2V0X2J1dHRvbl90eXBlCit3ZWJraXRfZG9tX2h0bWxf
YnV0dG9uX2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9idXR0b25fZWxlbWVudF9z
ZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF92YWx1ZQord2Via2l0
X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X3NldF92YWx1ZQord2Via2l0X2RvbV9odG1sX2J1dHRv
bl9lbGVtZW50X2dldF93aWxsX3ZhbGlkYXRlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfQlVUVE9O
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9CVVRUT05fRUxFTUVOVAorV0VCS0lUX0RPTV9JU19I
VE1MX0JVVFRPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfQlVUVE9OX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSVNfSFRNTF9CVVRUT05fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1M
X0JVVFRPTl9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9odG1sX2J1dHRvbl9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9O
PgorPEZJTEU+V2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0
RE9NSFRNTENhbnZhc0VsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnQK
Kword2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9o
dG1sX2NhbnZhc19lbGVtZW50X3NldF93aWR0aAord2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVt
ZW50X2dldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9jYW52YXNfZWxlbWVudF9zZXRfaGVpZ2h0
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1lbnRDbGFz
cworV0VCS0lUX0RPTV9UWVBFX0hUTUxfQ0FOVkFTX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9D
QU5WQVNfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0NBTlZBU19FTEVNRU5UCitXRUJLSVRf
RE9NX0hUTUxfQ0FOVkFTX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9DQU5WQVNf
RUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0NBTlZBU19FTEVNRU5UX0dFVF9DTEFTUwor
Cis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2NhbnZhc19lbGVtZW50X2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTENvbGxl
Y3Rpb248L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTENvbGxlY3Rpb248L1RJVExFPgorV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24KKword2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25faXRlbQor
d2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fbmFtZWRfaXRlbQord2Via2l0X2RvbV9odG1sX2Nv
bGxlY3Rpb25fZ2V0X2xlbmd0aAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhU
TUxDb2xsZWN0aW9uQ2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0NPTExFQ1RJT04KK1dFQktJ
VF9ET01fSFRNTF9DT0xMRUNUSU9OCitXRUJLSVRfRE9NX0lTX0hUTUxfQ09MTEVDVElPTgorV0VC
S0lUX0RPTV9IVE1MX0NPTExFQ1RJT05fQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9DT0xMRUNU
SU9OX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfQ09MTEVDVElPTl9HRVRfQ0xBU1MKKworPFNVQlNF
Q1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudDwvRklM
RT4KKzxUSVRMRT5XZWJLaXRET01IVE1MRExpc3RFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhU
TUxETGlzdEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2RfbGlzdF9lbGVtZW50X2dldF9jb21w
YWN0Cit3ZWJraXRfZG9tX2h0bWxfZF9saXN0X2VsZW1lbnRfc2V0X2NvbXBhY3QKKworPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRExpc3RFbGVtZW50Q2xhc3MKK1dFQktJVF9E
T01fVFlQRV9IVE1MX0RfTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRF9MSVNUX0VMRU1F
TlQKK1dFQktJVF9ET01fSVNfSFRNTF9EX0xJU1RfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0Rf
TElTVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfRF9MSVNUX0VMRU1FTlRfQ0xB
U1MKK1dFQktJVF9ET01fSFRNTF9EX0xJU1RfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9kX2xpc3RfZWxlbWVudF9nZXRfdHlwZQorPC9T
RUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50
PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50PC9USVRMRT4KK1dl
YktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9kaXJlY3Rvcnlf
ZWxlbWVudF9nZXRfY29tcGFjdAord2Via2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X3Nl
dF9jb21wYWN0CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTERpcmVjdG9y
eUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfRElSRUNUT1JZX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9ESVJFQ1RPUllfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0RJUkVD
VE9SWV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRElSRUNUT1JZX0VMRU1FTlRfQ0xBU1MKK1dF
QktJVF9ET01fSVNfSFRNTF9ESVJFQ1RPUllfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1M
X0RJUkVDVE9SWV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Vi
a2l0X2RvbV9odG1sX2RpcmVjdG9yeV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTERpdkVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2Vi
S2l0RE9NSFRNTERpdkVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQKKwor
d2Via2l0X2RvbV9odG1sX2Rpdl9lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2Rp
dl9lbGVtZW50X3NldF9hbGlnbgorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhU
TUxEaXZFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0RJVl9FTEVNRU5UCitXRUJL
SVRfRE9NX0hUTUxfRElWX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9ESVZfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX0RJVl9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfRElW
X0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9ESVZfRUxFTUVOVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9kaXZfZWxlbWVudF9nZXRfdHlw
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxEb2N1bWVudDwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MRG9jdW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRN
TERvY3VtZW50CisKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9jbG9zZQord2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X2NsZWFyCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfY2FwdHVyZV9ldmVu
dHMKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9yZWxlYXNlX2V2ZW50cword2Via2l0X2RvbV9o
dG1sX2RvY3VtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9oZWln
aHQKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZGlyCit3ZWJraXRfZG9tX2h0bWxfZG9j
dW1lbnRfc2V0X2Rpcgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9iZ19jb2xvcgord2Vi
a2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9iZ19jb2xvcgord2Via2l0X2RvbV9odG1sX2RvY3Vt
ZW50X2dldF9mZ19jb2xvcgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X3NldF9mZ19jb2xvcgor
d2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9hbGlua19jb2xvcgord2Via2l0X2RvbV9odG1s
X2RvY3VtZW50X3NldF9hbGlua19jb2xvcgord2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9s
aW5rX2NvbG9yCit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfc2V0X2xpbmtfY29sb3IKK3dlYmtp
dF9kb21faHRtbF9kb2N1bWVudF9nZXRfdmxpbmtfY29sb3IKK3dlYmtpdF9kb21faHRtbF9kb2N1
bWVudF9zZXRfdmxpbmtfY29sb3IKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9zZXRfZGVzaWdu
X21vZGUKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVudF9nZXRfZGVzaWduX21vZGUKK3dlYmtpdF9k
b21faHRtbF9kb2N1bWVudF9nZXRfY29tcGF0X21vZGUKK3dlYmtpdF9kb21faHRtbF9kb2N1bWVu
dF9nZXRfc2NyaXB0cword2Via2l0X2RvbV9odG1sX2RvY3VtZW50X2dldF9lbWJlZHMKK3dlYmtp
dF9kb21faHRtbF9kb2N1bWVudF9nZXRfcGx1Z2lucworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4K
K1dlYktpdERPTUhUTUxEb2N1bWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9ET0NVTUVO
VAorV0VCS0lUX0RPTV9IVE1MX0RPQ1VNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfRE9DVU1FTlQK
K1dFQktJVF9ET01fSFRNTF9ET0NVTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0RPQ1VN
RU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRE9DVU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNU
SU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfZG9jdW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElP
Tj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MRWxlbWVudDwvRklMRT4KKzxUSVRM
RT5XZWJLaXRET01IVE1MRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MRWxlbWVudAorCit3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9jbGljaword2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0
X3RpdGxlCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfdGl0bGUKK3dlYmtpdF9kb21faHRt
bF9lbGVtZW50X2dldF9sYW5nCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfbGFuZword2Vi
a2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2Rpcgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0
X2Rpcgord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X3RhYl9pbmRleAord2Via2l0X2RvbV9o
dG1sX2VsZW1lbnRfc2V0X3RhYl9pbmRleAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfZ2V0X2Fj
Y2Vzc19rZXkKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9hY2Nlc3Nfa2V5Cit3ZWJraXRf
ZG9tX2h0bWxfZWxlbWVudF9nZXRfaW5uZXJfdGV4dAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRf
c2V0X2lubmVyX3RleHQKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9vdXRlcl90ZXh0Cit3
ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9zZXRfb3V0ZXJfdGV4dAord2Via2l0X2RvbV9odG1sX2Vs
ZW1lbnRfZ2V0X2NvbnRlbnRfZWRpdGFibGUKK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X3NldF9j
b250ZW50X2VkaXRhYmxlCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9nZXRfaXNfY29udGVudF9l
ZGl0YWJsZQord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X2lubmVyX2h0bWwKK3dlYmtpdF9k
b21faHRtbF9lbGVtZW50X2dldF9vdXRlcl9odG1sCit3ZWJraXRfZG9tX2h0bWxfZWxlbWVudF9n
ZXRfaW5uZXJfaHRtbAord2Via2l0X2RvbV9odG1sX2VsZW1lbnRfc2V0X291dGVyX2h0bWwKK3dl
YmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9jaGlsZHJlbgorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUhUTUxFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04g
UHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisK
KzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudDwvRklMRT4KKzxUSVRM
RT5XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxFbWJlZEVs
ZW1lbnQKKword2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRf
ZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9lbWJlZF9l
bGVtZW50X2dldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X3NldF9oZWln
aHQKK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0
bWxfZW1iZWRfZWxlbWVudF9zZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRf
Z2V0X3NyYword2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfc2V0X3NyYword2Via2l0X2Rv
bV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX2VtYmVk
X2VsZW1lbnRfc2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX2VtYmVkX2VsZW1lbnRfZ2V0
X3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfZW1iZWRfZWxlbWVudF9zZXRfd2lkdGgKKworPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50Q2xhc3MKK1dFQktJVF9E
T01fVFlQRV9IVE1MX0VNQkVEX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9FTUJFRF9FTEVNRU5U
CitXRUJLSVRfRE9NX0lTX0hUTUxfRU1CRURfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0VNQkVE
X0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9FTUJFRF9FTEVNRU5UX0NMQVNTCitX
RUJLSVRfRE9NX0hUTUxfRU1CRURfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJp
dmF0ZT4KK3dlYmtpdF9kb21faHRtbF9lbWJlZF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+
CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVudDwvRklMRT4K
KzxUSVRMRT5XZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhU
TUxGaWVsZFNldEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2ZpZWxkX3NldF9lbGVtZW50X2dl
dF9mb3JtCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxl
bWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9GSUVMRF9TRVRfRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfRklFTERfU0VU
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9GSUVMRF9TRVRfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9JU19IVE1MX0ZJRUxEX1NFVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRklF
TERfU0VUX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRf
ZG9tX2h0bWxfZmllbGRfc2V0X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRET01IVE1MRm9udEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0
RE9NSFRNTEZvbnRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxGb250RWxlbWVudAorCit3
ZWJraXRfZG9tX2h0bWxfZm9udF9lbGVtZW50X2dldF9jb2xvcgord2Via2l0X2RvbV9odG1sX2Zv
bnRfZWxlbWVudF9zZXRfY29sb3IKK3dlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfZ2V0X2Zh
Y2UKK3dlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0X2ZhY2UKK3dlYmtpdF9kb21faHRt
bF9mb250X2VsZW1lbnRfZ2V0X3NpemUKK3dlYmtpdF9kb21faHRtbF9mb250X2VsZW1lbnRfc2V0
X3NpemUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRm9udEVsZW1lbnRD
bGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfRk9OVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
Rk9OVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5UCitXRUJLSVRfRE9N
X0hUTUxfRk9OVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfRk9OVF9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfRk9OVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2ZvbnRfZWxlbWVudF9nZXRfdHlwZQorPC9T
RUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxGb3JtRWxlbWVudDwvRklM
RT4KKzxUSVRMRT5XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRN
TEZvcm1FbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc3VibWl0Cit3ZWJr
aXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3Jlc2V0Cit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X2dldF9hY2NlcHRfY2hhcnNldAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRf
YWNjZXB0X2NoYXJzZXQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfZ2V0X2FjdGlvbgor
d2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfYWN0aW9uCit3ZWJraXRfZG9tX2h0bWxf
Zm9ybV9lbGVtZW50X2dldF9lbmN0eXBlCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X3Nl
dF9lbmN0eXBlCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9lbmNvZGluZword2Vi
a2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRfZW5jb2RpbmcKK3dlYmtpdF9kb21faHRtbF9m
b3JtX2VsZW1lbnRfZ2V0X21ldGhvZAord2Via2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zZXRf
bWV0aG9kCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9t
X2h0bWxfZm9ybV9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVtZW50
X2dldF90YXJnZXQKK3dlYmtpdF9kb21faHRtbF9mb3JtX2VsZW1lbnRfc2V0X3RhcmdldAord2Vi
a2l0X2RvbV9odG1sX2Zvcm1fZWxlbWVudF9nZXRfZWxlbWVudHMKK3dlYmtpdF9kb21faHRtbF9m
b3JtX2VsZW1lbnRfZ2V0X2xlbmd0aAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERP
TUhUTUxGb3JtRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9GT1JNX0VMRU1FTlQK
K1dFQktJVF9ET01fSFRNTF9GT1JNX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9GT1JNX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9GT1JNX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNf
SFRNTF9GT1JNX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9GT1JNX0VMRU1FTlRfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfZm9ybV9lbGVt
ZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRN
TEZyYW1lRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MRnJhbWVFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxGcmFtZUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2ZyYW1l
X2VsZW1lbnRfZ2V0X2ZyYW1lX2JvcmRlcgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRf
c2V0X2ZyYW1lX2JvcmRlcgord2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X2xvbmdf
ZGVzYword2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X2xvbmdfZGVzYword2Via2l0
X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl9oZWlnaHQKK3dlYmtpdF9kb21faHRt
bF9mcmFtZV9lbGVtZW50X3NldF9tYXJnaW5faGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfZnJhbWVf
ZWxlbWVudF9nZXRfbWFyZ2luX3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9z
ZXRfbWFyZ2luX3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfbmFtZQor
d2Via2l0X2RvbV9odG1sX2ZyYW1lX2VsZW1lbnRfc2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9m
cmFtZV9lbGVtZW50X2dldF9ub19yZXNpemUKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50
X3NldF9ub19yZXNpemUKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9zY3JvbGxp
bmcKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X3NldF9zY3JvbGxpbmcKK3dlYmtpdF9k
b21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9zcmMKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVt
ZW50X3NldF9zcmMKK3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF9jb250ZW50X2Rv
Y3VtZW50Cit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfZWxlbWVudF9nZXRfY29udGVudF93aW5kb3cK
K3dlYmtpdF9kb21faHRtbF9mcmFtZV9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X2hlaWdodAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktp
dERPTUhUTUxGcmFtZUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfRlJBTUVfRUxF
TUVOVAorV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9G
UkFNRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfRlJBTUVfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9JU19IVE1MX0ZSQU1FX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9GUkFNRV9F
TEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1s
X2ZyYW1lX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5X
ZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxG
cmFtZVNldEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudAorCit3
ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfZ2V0X2NvbHMKK3dlYmtpdF9kb21faHRt
bF9mcmFtZV9zZXRfZWxlbWVudF9zZXRfY29scword2Via2l0X2RvbV9odG1sX2ZyYW1lX3NldF9l
bGVtZW50X2dldF9yb3dzCit3ZWJraXRfZG9tX2h0bWxfZnJhbWVfc2V0X2VsZW1lbnRfc2V0X3Jv
d3MKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50
Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UCitXRUJLSVRfRE9N
X0hUTUxfRlJBTUVfU0VUX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9GUkFNRV9TRVRfRUxF
TUVOVAorV0VCS0lUX0RPTV9IVE1MX0ZSQU1FX1NFVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9N
X0lTX0hUTUxfRlJBTUVfU0VUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9GUkFNRV9T
RVRfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21f
aHRtbF9mcmFtZV9zZXRfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4K
KzxGSUxFPldlYktpdERPTUhUTUxIUkVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRN
TEhSRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MSFJFbGVtZW50CisKK3dlYmtpdF9kb21f
aHRtbF9ocl9lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfc2V0
X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfbm9fc2hhZGUKK3dlYmtpdF9k
b21faHRtbF9ocl9lbGVtZW50X3NldF9ub19zaGFkZQord2Via2l0X2RvbV9odG1sX2hyX2VsZW1l
bnRfZ2V0X3NpemUKK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50X3NldF9zaXplCit3ZWJraXRf
ZG9tX2h0bWxfaHJfZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9ocl9lbGVtZW50
X3NldF93aWR0aAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxIUkVsZW1l
bnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFJfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1M
X0hSX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9IUl9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfSFJfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0hSX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSFRNTF9IUl9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9odG1sX2hyX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKwor
PFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MSGVhZEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+
V2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxIZWFkRWxlbWVu
dAorCit3ZWJraXRfZG9tX2h0bWxfaGVhZF9lbGVtZW50X2dldF9wcm9maWxlCit3ZWJraXRfZG9t
X2h0bWxfaGVhZF9lbGVtZW50X3NldF9wcm9maWxlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
V2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0hFQURf
RUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1M
X0hFQURfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxFTUVOVF9DTEFTUworV0VCS0lU
X0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0hFQURfRUxF
TUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9o
ZWFkX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJL
aXRET01IVE1MSGVhZGluZ0VsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTEhlYWRp
bmdFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfaGVhZGluZ19lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2hlYWRp
bmdfZWxlbWVudF9zZXRfYWxpZ24KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01I
VE1MSGVhZGluZ0VsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfSEVBRElOR19FTEVN
RU5UCitXRUJLSVRfRE9NX0hUTUxfSEVBRElOR19FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxf
SEVBRElOR19FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfSEVBRElOR19FTEVNRU5UX0NMQVNTCitX
RUJLSVRfRE9NX0lTX0hUTUxfSEVBRElOR19FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxf
SEVBRElOR19FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9odG1sX2hlYWRpbmdfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTUhUTUxIdG1sRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRE
T01IVE1MSHRtbEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50CisKK3dl
YmtpdF9kb21faHRtbF9odG1sX2VsZW1lbnRfZ2V0X3ZlcnNpb24KK3dlYmtpdF9kb21faHRtbF9o
dG1sX2VsZW1lbnRfc2V0X3ZlcnNpb24KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRE
T01IVE1MSHRtbEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfSFRNTF9FTEVNRU5U
CitXRUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfSFRNTF9F
TEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lT
X0hUTUxfSFRNTF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfSFRNTF9FTEVNRU5UX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2h0bWxfZWxl
bWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhU
TUxJRnJhbWVFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50
PC9USVRMRT4KK1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9p
ZnJhbWVfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9z
ZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfZnJhbWVfYm9yZGVy
Cit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X2ZyYW1lX2JvcmRlcgord2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9pZnJh
bWVfZWxlbWVudF9zZXRfaGVpZ2h0Cit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0
X2xvbmdfZGVzYword2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9sb25nX2Rlc2MK
K3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVudF9nZXRfbWFyZ2luX2hlaWdodAord2Via2l0
X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9tYXJnaW5faGVpZ2h0Cit3ZWJraXRfZG9tX2h0
bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X21hcmdpbl93aWR0aAord2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X3NldF9tYXJnaW5fd2lkdGgKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxlbWVu
dF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X3NldF9uYW1lCit3ZWJr
aXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X3Njcm9sbGluZword2Via2l0X2RvbV9odG1s
X2lmcmFtZV9lbGVtZW50X3NldF9zY3JvbGxpbmcKK3dlYmtpdF9kb21faHRtbF9pZnJhbWVfZWxl
bWVudF9nZXRfc3JjCit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfc2V0X3NyYword2Vi
a2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX2lm
cmFtZV9lbGVtZW50X3NldF93aWR0aAord2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dl
dF9jb250ZW50X2RvY3VtZW50Cit3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2Nv
bnRlbnRfd2luZG93CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTElGcmFt
ZUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfSUZSQU1FX0VMRU1FTlQKK1dFQktJ
VF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX0lGUkFNRV9FTEVN
RU5UCitXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNf
SFRNTF9JRlJBTUVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX0lGUkFNRV9FTEVNRU5U
X0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2lmcmFt
ZV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0
RE9NSFRNTEltYWdlRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MSW1hZ2VFbGVt
ZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQKKword2Via2l0X2RvbV9odG1s
X2ltYWdlX2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X3Nl
dF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9k
b21faHRtbF9pbWFnZV9lbGVtZW50X3NldF9hbGlnbgord2Via2l0X2RvbV9odG1sX2ltYWdlX2Vs
ZW1lbnRfZ2V0X2FsdAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2FsdAord2Vi
a2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2JvcmRlcgord2Via2l0X2RvbV9odG1sX2lt
YWdlX2VsZW1lbnRfc2V0X2JvcmRlcgord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0
X2hlaWdodAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2hlaWdodAord2Via2l0
X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2hzcGFjZQord2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfc2V0X2hzcGFjZQord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2lz
X21hcAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X2lzX21hcAord2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2xvbmdfZGVzYword2Via2l0X2RvbV9odG1sX2ltYWdl
X2VsZW1lbnRfc2V0X2xvbmdfZGVzYword2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0
X3NyYword2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfc2V0X3NyYword2Via2l0X2RvbV9o
dG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3VzZV9tYXAKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVt
ZW50X3NldF91c2VfbWFwCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfdnNwYWNl
Cit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9zZXRfdnNwYWNlCit3ZWJraXRfZG9tX2h0
bWxfaW1hZ2VfZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50
X3NldF93aWR0aAord2Via2l0X2RvbV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X2NvbXBsZXRlCit3
ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfbG93c3JjCit3ZWJraXRfZG9tX2h0bWxf
aW1hZ2VfZWxlbWVudF9zZXRfbG93c3JjCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9n
ZXRfbmF0dXJhbF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9pbWFnZV9lbGVtZW50X2dldF9uYXR1
cmFsX3dpZHRoCit3ZWJraXRfZG9tX2h0bWxfaW1hZ2VfZWxlbWVudF9nZXRfeAord2Via2l0X2Rv
bV9odG1sX2ltYWdlX2VsZW1lbnRfZ2V0X3kKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJL
aXRET01IVE1MSW1hZ2VFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0lNQUdFX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9JTUFHRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxf
SU1BR0VfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0lNQUdFX0VMRU1FTlRfQ0xBU1MKK1dFQktJ
VF9ET01fSVNfSFRNTF9JTUFHRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfSU1BR0Vf
RUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRt
bF9pbWFnZV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MSW5w
dXRFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQKKword2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfc2VsZWN0Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVu
dF9nZXRfYWNjZXB0Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYWNjZXB0Cit3
ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYWx0Cit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9zZXRfYWx0Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfYXV0
b2ZvY3VzCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfYXV0b2ZvY3VzCit3ZWJr
aXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZGVmYXVsdF9jaGVja2VkCit3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2hlY2tlZAord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X2NoZWNrZWQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9kaXNh
YmxlZAord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2Rpc2FibGVkCit3ZWJraXRf
ZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfZm9ybQord2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfZ2V0X2ZpbGVzCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfZmlsZXMK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9oZWlnaHQKK3dlYmtpdF9kb21faHRt
bF9pbnB1dF9lbGVtZW50X3NldF9oZWlnaHQKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF9pbmRldGVybWluYXRlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5k
ZXRlcm1pbmF0ZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X21heF9sZW5ndGgK
K3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9tYXhfbGVuZ3RoCit3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfbXVsdGlwbGUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF9tdWx0aXBsZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X25h
bWUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0
bWxfaW5wdXRfZWxlbWVudF9zZXRfcmVhZF9vbmx5Cit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxl
bWVudF9nZXRfc2l6ZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3NpemUKK3dl
YmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9zcmMKK3dlYmtpdF9kb21faHRtbF9pbnB1
dF9lbGVtZW50X3NldF9zcmMKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9pbnB1
dF90eXBlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfaW5wdXRfdHlwZQord2Vi
a2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X2RlZmF1bHRfdmFsdWUKK3dlYmtpdF9kb21f
aHRtbF9pbnB1dF9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfaW5w
dXRfZWxlbWVudF9nZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF92
YWx1ZQord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dpZHRoCit3ZWJraXRfZG9t
X2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVt
ZW50X2dldF93aWxsX3ZhbGlkYXRlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRf
YWxpZ24KK3dlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X3NldF9hbGlnbgord2Via2l0X2Rv
bV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3VzZV9tYXAKK3dlYmtpdF9kb21faHRtbF9pbnB1dF9l
bGVtZW50X3NldF91c2VfbWFwCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2Fw
dHVyZV90eXBlCit3ZWJraXRfZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9nZXRfY2FwdHVyZQorCis8
U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRDbGFzcworV0VC
S0lUX0RPTV9UWVBFX0hUTUxfSU5QVVRfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0lOUFVUX0VM
RU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9JTlBVVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
SU5QVVRfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlRfQ0xB
U1MKK1dFQktJVF9ET01fSFRNTF9JTlBVVF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElP
TiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MTElFbGVtZW50PC9GSUxFPgor
PFRJVExFPldlYktpdERPTUhUTUxMSUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTExJRWxl
bWVudAorCit3ZWJraXRfZG9tX2h0bWxfbGlfZWxlbWVudF9nZXRfdHlwZV9hdHRyCit3ZWJraXRf
ZG9tX2h0bWxfbGlfZWxlbWVudF9zZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfbGlfZWxl
bWVudF9nZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9saV9lbGVtZW50X3NldF92YWx1ZQorCis8
U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxMSUVsZW1lbnRDbGFzcworV0VCS0lU
X0RPTV9UWVBFX0hUTUxfTElfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0xJX0VMRU1FTlQKK1dF
QktJVF9ET01fSVNfSFRNTF9MSV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTElfRUxFTUVOVF9D
TEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0xJX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRN
TF9MSV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2Rv
bV9odG1sX2xpX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklM
RT5XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxM
YWJlbEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9nZXRfZm9ybQord2Via2l0X2RvbV9odG1sX2xhYmVsX2Vs
ZW1lbnRfZ2V0X2h0bWxfZm9yCit3ZWJraXRfZG9tX2h0bWxfbGFiZWxfZWxlbWVudF9zZXRfaHRt
bF9mb3IKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MTGFiZWxFbGVtZW50
Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX0xBQkVMX0VMRU1FTlQKK1dFQktJVF9ET01fSFRN
TF9MQUJFTF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfTEFCRUxfRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX0xBQkVMX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9MQUJFTF9F
TEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfTEFCRUxfRUxFTUVOVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9sYWJlbF9lbGVtZW50X2dldF90
eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTExlZ2VuZEVs
ZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQ8L1RJVExFPgor
V2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVt
ZW50X2dldF9mb3JtCit3ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfZ2V0X2FsaWduCit3
ZWJraXRfZG9tX2h0bWxfbGVnZW5kX2VsZW1lbnRfc2V0X2FsaWduCisKKzxTVUJTRUNUSU9OIFN0
YW5kYXJkPgorV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBF
X0hUTUxfTEVHRU5EX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9MRUdFTkRfRUxFTUVOVAorV0VC
S0lUX0RPTV9JU19IVE1MX0xFR0VORF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTEVHRU5EX0VM
RU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9MRUdFTkRfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9IVE1MX0xFR0VORF9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2
YXRlPgord2Via2l0X2RvbV9odG1sX2xlZ2VuZF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+
CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTExpbmtFbGVtZW50PC9GSUxFPgorPFRJ
VExFPldlYktpdERPTUhUTUxMaW5rRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MTGlua0Vs
ZW1lbnQKKword2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRfZGlzYWJsZWQKK3dlYmtp
dF9kb21faHRtbF9saW5rX2VsZW1lbnRfc2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfbGlu
a19lbGVtZW50X2dldF9jaGFyc2V0Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9j
aGFyc2V0Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF9ocmVmCit3ZWJraXRfZG9t
X2h0bWxfbGlua19lbGVtZW50X3NldF9ocmVmCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50
X2dldF9ocmVmbGFuZword2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRfaHJlZmxhbmcK
K3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X21lZGlhCit3ZWJraXRfZG9tX2h0bWxf
bGlua19lbGVtZW50X3NldF9tZWRpYQord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9nZXRf
cmVsCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF9yZWwKK3dlYmtpdF9kb21faHRt
bF9saW5rX2VsZW1lbnRfZ2V0X3Jldgord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVudF9zZXRf
cmV2Cit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X2dldF90YXJnZXQKK3dlYmtpdF9kb21f
aHRtbF9saW5rX2VsZW1lbnRfc2V0X3RhcmdldAord2Via2l0X2RvbV9odG1sX2xpbmtfZWxlbWVu
dF9nZXRfdHlwZV9hdHRyCit3ZWJraXRfZG9tX2h0bWxfbGlua19lbGVtZW50X3NldF90eXBlX2F0
dHIKK3dlYmtpdF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3NoZWV0CisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQ
RV9IVE1MX0xJTktfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVAorV0VCS0lU
X0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX0xJTktfRUxFTUVOVF9D
TEFTUworV0VCS0lUX0RPTV9JU19IVE1MX0xJTktfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9I
VE1MX0xJTktfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtp
dF9kb21faHRtbF9saW5rX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRET01IVE1MTWFwRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01I
VE1MTWFwRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MTWFwRWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfbWFwX2VsZW1lbnRfZ2V0X2FyZWFzCit3ZWJraXRfZG9tX2h0bWxfbWFwX2VsZW1l
bnRfZ2V0X25hbWUKK3dlYmtpdF9kb21faHRtbF9tYXBfZWxlbWVudF9zZXRfbmFtZQorCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxNYXBFbGVtZW50Q2xhc3MKK1dFQktJVF9E
T01fVFlQRV9IVE1MX01BUF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTUFQX0VMRU1FTlQKK1dF
QktJVF9ET01fSVNfSFRNTF9NQVBfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX01BUF9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfTUFQX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01f
SFRNTF9NQVBfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtp
dF9kb21faHRtbF9tYXBfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4K
KzxGSUxFPldlYktpdERPTUhUTUxNYXJxdWVlRWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
CisKK3dlYmtpdF9kb21faHRtbF9tYXJxdWVlX2VsZW1lbnRfc3RhcnQKK3dlYmtpdF9kb21faHRt
bF9tYXJxdWVlX2VsZW1lbnRfc3RvcAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERP
TUhUTUxNYXJxdWVlRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9NQVJRVUVFX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9NQVJRVUVFX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRN
TF9NQVJRVUVFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9NQVJRVUVFX0VMRU1FTlRfQ0xBU1MK
K1dFQktJVF9ET01fSVNfSFRNTF9NQVJRVUVFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRN
TF9NQVJRVUVFX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJr
aXRfZG9tX2h0bWxfbWFycXVlZV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNU
SU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTE1lbnVFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktp
dERPTUhUTUxNZW51RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MTWVudUVsZW1lbnQKKwor
d2Via2l0X2RvbV9odG1sX21lbnVfZWxlbWVudF9nZXRfY29tcGFjdAord2Via2l0X2RvbV9odG1s
X21lbnVfZWxlbWVudF9zZXRfY29tcGFjdAorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktp
dERPTUhUTUxNZW51RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9NRU5VX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9NRU5VX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9NRU5V
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9NRU5VX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01f
SVNfSFRNTF9NRU5VX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9NRU5VX0VMRU1FTlRf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfbWVudV9l
bGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9N
SFRNTE1ldGFFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxNZXRhRWxlbWVudDwv
VElUTEU+CitXZWJLaXRET01IVE1MTWV0YUVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX21ldGFf
ZWxlbWVudF9nZXRfY29udGVudAord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfY29u
dGVudAord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfaHR0cF9lcXVpdgord2Via2l0
X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfaHR0cF9lcXVpdgord2Via2l0X2RvbV9odG1sX21l
dGFfZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9zZXRfbmFt
ZQord2Via2l0X2RvbV9odG1sX21ldGFfZWxlbWVudF9nZXRfc2NoZW1lCit3ZWJraXRfZG9tX2h0
bWxfbWV0YV9lbGVtZW50X3NldF9zY2hlbWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJL
aXRET01IVE1MTWV0YUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxfTUVUQV9FTEVN
RU5UCitXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfTUVU
QV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9N
X0lTX0hUTUxfTUVUQV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfTUVUQV9FTEVNRU5U
X0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX21ldGFf
ZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERP
TUhUTUxNb2RFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxNb2RFbGVtZW50PC9U
SVRMRT4KK1dlYktpdERPTUhUTUxNb2RFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9tb2RfZWxl
bWVudF9nZXRfY2l0ZQord2Via2l0X2RvbV9odG1sX21vZF9lbGVtZW50X3NldF9jaXRlCit3ZWJr
aXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0X2RhdGVfdGltZQord2Via2l0X2RvbV9odG1sX21v
ZF9lbGVtZW50X3NldF9kYXRlX3RpbWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRE
T01IVE1MTW9kRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9NT0RfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX01PRF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfTU9EX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9NT0RfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1M
X01PRF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfTU9EX0VMRU1FTlRfR0VUX0NMQVNT
CisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfbW9kX2VsZW1lbnRfZ2V0
X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MT0xpc3RF
bGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQ8L1RJVExFPgor
V2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1l
bnRfZ2V0X2NvbXBhY3QKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfY29tcGFj
dAord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVtZW50X2dldF9zdGFydAord2Via2l0X2RvbV9o
dG1sX29fbGlzdF9lbGVtZW50X3NldF9zdGFydAord2Via2l0X2RvbV9odG1sX29fbGlzdF9lbGVt
ZW50X2dldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9vX2xpc3RfZWxlbWVudF9zZXRfdHlw
ZV9hdHRyCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVu
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9PX0xJU1RfRUxFTUVOVAorV0VCS0lUX0RPTV9I
VE1MX09fTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfT19MSVNUX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9PX0xJU1RfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX09f
TElTVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfT19MSVNUX0VMRU1FTlRfR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfb19saXN0X2VsZW1l
bnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1M
T2JqZWN0RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudDwv
VElUTEU+CitXZWJLaXRET01IVE1MT2JqZWN0RWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxfb2Jq
ZWN0X2VsZW1lbnRfZ2V0X2Zvcm0KK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRf
Y29kZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlCit3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfc2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2FyY2hp
dmUKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfYXJjaGl2ZQord2Via2l0X2Rv
bV9odG1sX29iamVjdF9lbGVtZW50X2dldF9ib3JkZXIKK3dlYmtpdF9kb21faHRtbF9vYmplY3Rf
ZWxlbWVudF9zZXRfYm9yZGVyCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfZ2V0X2Nv
ZGVfYmFzZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9jb2RlX2Jhc2UKK3dl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfY29kZV90eXBlCit3ZWJraXRfZG9tX2h0
bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2NvZGVfdHlwZQord2Via2l0X2RvbV9odG1sX29iamVjdF9l
bGVtZW50X2dldF9kYXRhCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2RhdGEK
K3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfZGVjbGFyZQord2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X3NldF9kZWNsYXJlCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfZ2V0X2hlaWdodAord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF9oZWln
aHQKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfaHNwYWNlCit3ZWJraXRfZG9t
X2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X2hzcGFjZQord2Via2l0X2RvbV9odG1sX29iamVjdF9l
bGVtZW50X2dldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2VsZW1lbnRfc2V0X25hbWUK
K3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfc3RhbmRieQord2Via2l0X2RvbV9o
dG1sX29iamVjdF9lbGVtZW50X3NldF9zdGFuZGJ5Cit3ZWJraXRfZG9tX2h0bWxfb2JqZWN0X2Vs
ZW1lbnRfZ2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF90
eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdXNlX21hcAord2Vi
a2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50X3NldF91c2VfbWFwCit3ZWJraXRfZG9tX2h0bWxf
b2JqZWN0X2VsZW1lbnRfZ2V0X3ZzcGFjZQord2Via2l0X2RvbV9odG1sX29iamVjdF9lbGVtZW50
X3NldF92c3BhY2UKK3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfd2lkdGgKK3dl
YmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9zZXRfd2lkdGgKK3dlYmtpdF9kb21faHRtbF9v
YmplY3RfZWxlbWVudF9nZXRfY29udGVudF9kb2N1bWVudAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUhUTUxPYmplY3RFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1M
X09CSkVDVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT0JKRUNUX0VMRU1FTlQKK1dFQktJVF9E
T01fSVNfSFRNTF9PQkpFQ1RfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX09CSkVDVF9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfT0JKRUNUX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSFRNTF9PQkpFQ1RfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21faHRtbF9vYmplY3RfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxPcHRHcm91cEVsZW1lbnQ8L0ZJTEU+Cis8VElU
TEU+V2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MT3B0
R3JvdXBFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfZGlz
YWJsZWQKK3dlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfZGlzYWJsZWQKK3dl
YmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfbGFiZWwKK3dlYmtpdF9kb21faHRt
bF9vcHRfZ3JvdXBfZWxlbWVudF9zZXRfbGFiZWwKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitX
ZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX09Q
VF9HUk9VUF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT1BUX0dST1VQX0VMRU1FTlQKK1dFQktJ
VF9ET01fSVNfSFRNTF9PUFRfR1JPVVBfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX09QVF9HUk9V
UF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfT1BUX0dST1VQX0VMRU1FTlRfQ0xB
U1MKK1dFQktJVF9ET01fSFRNTF9PUFRfR1JPVVBfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNF
Q1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9vcHRfZ3JvdXBfZWxlbWVudF9nZXRfdHlw
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxPcHRpb25FbGVt
ZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxPcHRpb25FbGVtZW50PC9USVRMRT4KK1dl
YktpdERPTUhUTUxPcHRpb25FbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVu
dF9nZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfZGlzYWJs
ZWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfZm9ybQord2Via2l0X2RvbV9o
dG1sX29wdGlvbl9lbGVtZW50X2dldF9sYWJlbAord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVt
ZW50X3NldF9sYWJlbAord2Via2l0X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9kZWZhdWx0
X3NlbGVjdGVkCit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uX2VsZW1lbnRfc2V0X2RlZmF1bHRfc2Vs
ZWN0ZWQKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfc2VsZWN0ZWQKK3dlYmtp
dF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9zZXRfc2VsZWN0ZWQKK3dlYmtpdF9kb21faHRtbF9v
cHRpb25fZWxlbWVudF9nZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9z
ZXRfdmFsdWUKK3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfdGV4dAord2Via2l0
X2RvbV9odG1sX29wdGlvbl9lbGVtZW50X2dldF9pbmRleAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUhUTUxPcHRpb25FbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1M
X09QVElPTl9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfT1BUSU9OX0VMRU1FTlQKK1dFQktJVF9E
T01fSVNfSFRNTF9PUFRJT05fRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX09QVElPTl9FTEVNRU5U
X0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSFRNTF9PUFRJT05fRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21faHRtbF9vcHRpb25fZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbjwvRklMRT4KKzxU
SVRMRT5XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb248L1RJVExFPgorV2ViS2l0RE9NSFRN
TE9wdGlvbnNDb2xsZWN0aW9uCisKK3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25f
bmFtZWRfaXRlbQord2Via2l0X2RvbV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfc2VsZWN0
ZWRfaW5kZXgKK3dlYmtpdF9kb21faHRtbF9vcHRpb25zX2NvbGxlY3Rpb25fc2V0X3NlbGVjdGVk
X2luZGV4Cit3ZWJraXRfZG9tX2h0bWxfb3B0aW9uc19jb2xsZWN0aW9uX2dldF9sZW5ndGgKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb25DbGFz
cworV0VCS0lUX0RPTV9UWVBFX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OCitXRUJLSVRfRE9NX0hU
TUxfT1BUSU9OU19DT0xMRUNUSU9OCitXRUJLSVRfRE9NX0lTX0hUTUxfT1BUSU9OU19DT0xMRUNU
SU9OCitXRUJLSVRfRE9NX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OX0NMQVNTCitXRUJLSVRfRE9N
X0lTX0hUTUxfT1BUSU9OU19DT0xMRUNUSU9OX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfT1BUSU9O
U19DT0xMRUNUSU9OX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2Rv
bV9odG1sX29wdGlvbnNfY29sbGVjdGlvbl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KKzxGSUxFPldlYktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50PC9GSUxFPgorPFRJVExFPldl
YktpdERPTUhUTUxQYXJhZ3JhcGhFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxQYXJhZ3Jh
cGhFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9nZXRfYWxpZ24K
K3dlYmtpdF9kb21faHRtbF9wYXJhZ3JhcGhfZWxlbWVudF9zZXRfYWxpZ24KKworPFNVQlNFQ1RJ
T04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudENsYXNzCitXRUJLSVRf
RE9NX1RZUEVfSFRNTF9QQVJBR1JBUEhfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1BBUkFHUkFQ
SF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlQKK1dFQktJVF9E
T01fSFRNTF9QQVJBR1JBUEhfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX1BBUkFH
UkFQSF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfUEFSQUdSQVBIX0VMRU1FTlRfR0VU
X0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfcGFyYWdyYXBo
X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRE
T01IVE1MUGFyYW1FbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxQYXJhbUVsZW1l
bnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxf
cGFyYW1fZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0
X25hbWUKK3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF90eXBlX2F0dHIKK3dlYmtp
dF9kb21faHRtbF9wYXJhbV9lbGVtZW50X3NldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9w
YXJhbV9lbGVtZW50X2dldF92YWx1ZQord2Via2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0
X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfcGFyYW1fZWxlbWVudF9nZXRfdmFsdWVfdHlwZQord2Vi
a2l0X2RvbV9odG1sX3BhcmFtX2VsZW1lbnRfc2V0X3ZhbHVlX3R5cGUKKworPFNVQlNFQ1RJT04g
U3RhbmRhcmQ+CitXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQ
RV9IVE1MX1BBUkFNX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9QQVJBTV9FTEVNRU5UCitXRUJL
SVRfRE9NX0lTX0hUTUxfUEFSQU1fRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1BBUkFNX0VMRU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9QQVJBTV9FTEVNRU5UX0NMQVNTCitXRUJLSVRf
RE9NX0hUTUxfUEFSQU1fRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K3dlYmtpdF9kb21faHRtbF9wYXJhbV9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFByZUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2Vi
S2l0RE9NSFRNTFByZUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQKKwor
d2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX3By
ZV9lbGVtZW50X3NldF93aWR0aAord2Via2l0X2RvbV9odG1sX3ByZV9lbGVtZW50X2dldF93cmFw
Cit3ZWJraXRfZG9tX2h0bWxfcHJlX2VsZW1lbnRfc2V0X3dyYXAKKworPFNVQlNFQ1RJT04gU3Rh
bmRhcmQ+CitXZWJLaXRET01IVE1MUHJlRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRN
TF9QUkVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1BSRV9FTEVNRU5UCitXRUJLSVRfRE9NX0lT
X0hUTUxfUFJFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9QUkVfRUxFTUVOVF9DTEFTUworV0VC
S0lUX0RPTV9JU19IVE1MX1BSRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfUFJFX0VM
RU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxf
cHJlX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJL
aXRET01IVE1MUXVvdGVFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxRdW90ZUVs
ZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVudAorCit3ZWJraXRfZG9tX2h0
bWxfcXVvdGVfZWxlbWVudF9nZXRfY2l0ZQord2Via2l0X2RvbV9odG1sX3F1b3RlX2VsZW1lbnRf
c2V0X2NpdGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MUXVvdGVFbGVt
ZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1FVT1RFX0VMRU1FTlQKK1dFQktJVF9ET01f
SFRNTF9RVU9URV9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfUVVPVEVfRUxFTUVOVAorV0VC
S0lUX0RPTV9IVE1MX1FVT1RFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9RVU9U
RV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfUVVPVEVfRUxFTUVOVF9HRVRfQ0xBU1MK
KworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9xdW90ZV9lbGVtZW50X2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFNjcmlw
dEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQ8L1RJVExF
PgorV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X2dldF90ZXh0Cit3ZWJraXRfZG9tX2h0bWxfc2NyaXB0X2VsZW1lbnRfc2V0X3RleHQK
K3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfaHRtbF9mb3IKK3dlYmtpdF9kb21f
aHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfaHRtbF9mb3IKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRf
ZWxlbWVudF9nZXRfZXZlbnQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfZXZl
bnQKK3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9nZXRfY2hhcnNldAord2Via2l0X2Rv
bV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9kZWZlcgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9l
bGVtZW50X3NldF9kZWZlcgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVtZW50X2dldF9zcmMK
K3dlYmtpdF9kb21faHRtbF9zY3JpcHRfZWxlbWVudF9zZXRfc3JjCit3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfZ2V0X3R5cGVfYXR0cgord2Via2l0X2RvbV9odG1sX3NjcmlwdF9lbGVt
ZW50X3NldF90eXBlX2F0dHIKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1M
U2NyaXB0RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9TQ1JJUFRfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX1NDUklQVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfU0NSSVBU
X0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9TQ1JJUFRfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RP
TV9JU19IVE1MX1NDUklQVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfU0NSSVBUX0VM
RU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxf
c2NyaXB0X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5X
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudAorCit3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfaXRlbQord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X25hbWVkX2l0ZW0KK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQKK3dlYmtp
dF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9yZW1vdmUKK3dlYmtpdF9kb21faHRtbF9zZWxlY3Rf
ZWxlbWVudF9nZXRfYXV0b2ZvY3VzCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0
X2F1dG9mb2N1cword2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2dldF9kaXNhYmxlZAor
d2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X3NldF9kaXNhYmxlZAord2Via2l0X2RvbV9o
dG1sX3NlbGVjdF9lbGVtZW50X2dldF9mb3JtCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1l
bnRfZ2V0X211bHRpcGxlCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X211bHRp
cGxlCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X25hbWUKK3dlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbmFtZQord2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X2dldF9zaXplCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NpemUKK3dl
YmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfc2VsZWN0X3R5cGUKK3dlYmtpdF9kb21f
aHRtbF9zZWxlY3RfZWxlbWVudF9nZXRfb3B0aW9ucword2Via2l0X2RvbV9odG1sX3NlbGVjdF9l
bGVtZW50X2dldF9sZW5ndGgKK3dlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9zZXRfbGVu
Z3RoCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3NlbGVjdGVkX2luZGV4Cit3
ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfc2V0X3NlbGVjdGVkX2luZGV4Cit3ZWJraXRf
ZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0
X2VsZW1lbnRfc2V0X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfZ2V0X3dp
bGxfdmFsaWRhdGUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MU2VsZWN0
RWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9TRUxFQ1RfRUxFTUVOVAorV0VCS0lU
X0RPTV9IVE1MX1NFTEVDVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfU0VMRUNUX0VMRU1F
TlQKK1dFQktJVF9ET01fSFRNTF9TRUxFQ1RfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19I
VE1MX1NFTEVDVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfU0VMRUNUX0VMRU1FTlRf
R0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfc2VsZWN0
X2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRE
T01IVE1MU3R5bGVFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERPTUhUTUxTdHlsZUVsZW1l
bnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxf
c3R5bGVfZWxlbWVudF9nZXRfZGlzYWJsZWQKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50
X3NldF9kaXNhYmxlZAord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X21lZGlhCit3
ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9zZXRfbWVkaWEKK3dlYmtpdF9kb21faHRtbF9z
dHlsZV9lbGVtZW50X2dldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50
X3NldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF9zdHlsZV9lbGVtZW50X2dldF9zaGVldAor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnRDbGFzcwor
V0VCS0lUX0RPTV9UWVBFX0hUTUxfU1RZTEVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1NUWUxF
X0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9TVFlMRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfU1RZTEVfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX1NUWUxFX0VMRU1FTlRf
Q0xBU1MKK1dFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3N0eWxlX2VsZW1lbnRfZ2V0X3R5cGUKKzwv
U0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxl
bWVudDwvRklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudDwvVElU
TEU+CitXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudAorCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfY2FwdGlvbl9lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2Nh
cHRpb25fZWxlbWVudF9zZXRfYWxpZ24KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRE
T01IVE1MVGFibGVDYXB0aW9uRWxlbWVudENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJM
RV9DQVBUSU9OX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQK
K1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1FTlQKK1dFQktJVF9ET01fSFRN
TF9UQUJMRV9DQVBUSU9OX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9D
QVBUSU9OX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9DQVBUSU9OX0VMRU1F
TlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2FwdGlvbl9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJ
TEU+V2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1l
bnQKKword2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfY2VsbF9pbmRleAor
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21f
aHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X2dldF9heGlzCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X3NldF9heGlzCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9iZ19jb2xv
cgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfYmdfY29sb3IKK3dlYmtp
dF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NoCit3ZWJraXRfZG9tX2h0bWxfdGFi
bGVfY2VsbF9lbGVtZW50X3NldF9jaAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVu
dF9nZXRfY2hfb2ZmCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jaF9v
ZmYKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfZ2V0X2NvbF9zcGFuCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3NldF9jb2xfc3Bhbgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfcm93X3NwYW4KK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9jZWxsX2VsZW1lbnRfc2V0X3Jvd19zcGFuCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9l
bGVtZW50X2dldF9oZWFkZXJzCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X3Nl
dF9oZWFkZXJzCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9oZWlnaHQK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X2hlaWdodAord2Via2l0X2Rv
bV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfbm9fd3JhcAord2Via2l0X2RvbV9odG1sX3Rh
YmxlX2NlbGxfZWxlbWVudF9zZXRfbm9fd3JhcAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxf
ZWxlbWVudF9nZXRfdl9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9z
ZXRfdl9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9nZXRfd2lkdGgK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9jZWxsX2VsZW1lbnRfc2V0X3dpZHRoCit3ZWJraXRfZG9t
X2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF9hYmJyCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
Y2VsbF9lbGVtZW50X3NldF9hYmJyCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50
X2dldF9zY29wZQord2Via2l0X2RvbV9odG1sX3RhYmxlX2NlbGxfZWxlbWVudF9zZXRfc2NvcGUK
KworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudENs
YXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQKK1dFQktJVF9ET01f
SFRNTF9UQUJMRV9DRUxMX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DRUxMX0VM
RU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSVNfSFRNTF9UQUJMRV9DRUxMX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9UQUJM
RV9DRUxMX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY2VsbF9lbGVtZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNU
SU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudDwvRklMRT4KKzxUSVRMRT5X
ZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50PC9USVRMRT4KK1dlYktpdERPTUhUTUxUYWJsZUNv
bEVsZW1lbnQKKword2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9hbGlnbgor
d2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X3NldF9hbGlnbgord2Via2l0X2RvbV9o
dG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9jaAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9l
bGVtZW50X3NldF9jaAord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50X2dldF9jaF9v
ZmYKK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfY2hfb2ZmCit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfZ2V0X3NwYW4KK3dlYmtpdF9kb21faHRtbF90YWJs
ZV9jb2xfZWxlbWVudF9zZXRfc3Bhbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2NvbF9lbGVtZW50
X2dldF92X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfY29sX2VsZW1lbnRfc2V0X3ZfYWxp
Z24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9nZXRfd2lkdGgKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9zZXRfd2lkdGgKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9I
VE1MX1RBQkxFX0NPTF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfQ09MX0VMRU1FTlQK
K1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9DT0xfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RB
QkxFX0NPTF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfQ09MX0VMRU1F
TlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9DT0xfRUxFTUVOVF9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF90YWJsZV9jb2xfZWxlbWVudF9n
ZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudDwvVElUTEU+
CitXZWJLaXRET01IVE1MVGFibGVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X2NyZWF0ZV90X2hlYWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV90
X2hlYWQKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2NyZWF0ZV90X2Zvb3QKK3dlYmtp
dF9kb21faHRtbF90YWJsZV9lbGVtZW50X2RlbGV0ZV90X2Zvb3QKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X2NyZWF0ZV9jYXB0aW9uCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVu
dF9kZWxldGVfY2FwdGlvbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfaW5zZXJ0X3Jv
dword2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZGVsZXRlX3Jvdword2Via2l0X2RvbV9o
dG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2NhcHRpb24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X3NldF9jYXB0aW9uCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdF9oZWFk
Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfdF9oZWFkCit3ZWJraXRfZG9tX2h0
bWxfdGFibGVfZWxlbWVudF9nZXRfdF9mb290Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVu
dF9zZXRfdF9mb290Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfcm93cword2Vi
a2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3RfYm9kaWVzCit3ZWJraXRfZG9tX2h0bWxf
dGFibGVfZWxlbWVudF9nZXRfYWxpZ24KK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3Nl
dF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X2JnX2NvbG9yCit3ZWJr
aXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9zZXRfYmdfY29sb3IKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X2dldF9ib3JkZXIKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3Nl
dF9ib3JkZXIKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3BhZGRpbmcK
K3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50X3NldF9jZWxsX3BhZGRpbmcKK3dlYmtpdF9k
b21faHRtbF90YWJsZV9lbGVtZW50X2dldF9jZWxsX3NwYWNpbmcKK3dlYmtpdF9kb21faHRtbF90
YWJsZV9lbGVtZW50X3NldF9jZWxsX3NwYWNpbmcKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVt
ZW50X2dldF9ydWxlcword2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3J1bGVzCit3
ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfc3VtbWFyeQord2Via2l0X2RvbV9odG1s
X3RhYmxlX2VsZW1lbnRfc2V0X3N1bW1hcnkKK3dlYmtpdF9kb21faHRtbF90YWJsZV9lbGVtZW50
X2dldF93aWR0aAord2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfc2V0X3dpZHRoCisKKzxT
VUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudENsYXNzCitXRUJL
SVRfRE9NX1RZUEVfSFRNTF9UQUJMRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxF
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9U
QUJMRV9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVEFCTEVfRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9IVE1MX1RBQkxFX0VMRU1FTlRfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9O
IFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNU
SU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnQ8L0ZJ
TEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudDwvVElUTEU+CitXZWJLaXRE
T01IVE1MVGFibGVSb3dFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVu
dF9pbnNlcnRfY2VsbAord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2RlbGV0ZV9j
ZWxsCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3Jvd19pbmRleAord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9zZWN0aW9uX3Jvd19pbmRleAord2Vi
a2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jZWxscword2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X2dldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19l
bGVtZW50X3NldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9i
Z19jb2xvcgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X3NldF9iZ19jb2xvcgor
d2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVtZW50X2dldF9jaAord2Via2l0X2RvbV9odG1s
X3RhYmxlX3Jvd19lbGVtZW50X3NldF9jaAord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVt
ZW50X2dldF9jaF9vZmYKK3dlYmtpdF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfY2hf
b2ZmCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfcm93X2VsZW1lbnRfZ2V0X3ZfYWxpZ24KK3dlYmtp
dF9kb21faHRtbF90YWJsZV9yb3dfZWxlbWVudF9zZXRfdl9hbGlnbgorCis8U1VCU0VDVElPTiBT
dGFuZGFyZD4KK1dlYktpdERPTUhUTUxUYWJsZVJvd0VsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9U
WVBFX0hUTUxfVEFCTEVfUk9XX0VMRU1FTlQKK1dFQktJVF9ET01fSFRNTF9UQUJMRV9ST1dfRUxF
TUVOVAorV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1JPV19FTEVNRU5UCitXRUJLSVRfRE9NX0hU
TUxfVEFCTEVfUk9XX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1df
RUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1JPV19FTEVNRU5UX0dFVF9DTEFT
UworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9odG1sX3RhYmxlX3Jvd19lbGVt
ZW50X2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQ8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKwor
d2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9pbnNlcnRfcm93Cit3ZWJraXRf
ZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2RlbGV0ZV9yb3cKK3dlYmtpdF9kb21faHRt
bF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X2FsaWduCit3ZWJraXRfZG9tX2h0bWxfdGFibGVf
c2VjdGlvbl9lbGVtZW50X3NldF9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxlX3NlY3Rpb25f
ZWxlbWVudF9nZXRfY2gKK3dlYmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0
X2NoCit3ZWJraXRfZG9tX2h0bWxfdGFibGVfc2VjdGlvbl9lbGVtZW50X2dldF9jaF9vZmYKK3dl
YmtpdF9kb21faHRtbF90YWJsZV9zZWN0aW9uX2VsZW1lbnRfc2V0X2NoX29mZgord2Via2l0X2Rv
bV9odG1sX3RhYmxlX3NlY3Rpb25fZWxlbWVudF9nZXRfdl9hbGlnbgord2Via2l0X2RvbV9odG1s
X3RhYmxlX3NlY3Rpb25fZWxlbWVudF9zZXRfdl9hbGlnbgord2Via2l0X2RvbV9odG1sX3RhYmxl
X3NlY3Rpb25fZWxlbWVudF9nZXRfcm93cworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktp
dERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1RB
QkxFX1NFQ1RJT05fRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVO
VAorV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVAorV0VCS0lUX0RPTV9I
VE1MX1RBQkxFX1NFQ1RJT05fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX1RBQkxF
X1NFQ1RJT05fRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9IVE1MX1RBQkxFX1NFQ1RJT05fRUxF
TUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF90
YWJsZV9zZWN0aW9uX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERP
TUhUTUxUZXh0QXJlYUVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVu
dAorCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2VsZWN0Cit3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9yYW5nZQord2Via2l0X2RvbV9o
dG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9hdXRvZm9jdXMKK3dlYmtpdF9kb21faHRtbF90ZXh0
X2FyZWFfZWxlbWVudF9zZXRfYXV0b2ZvY3VzCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0
X2Rpc2FibGVkCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2Zvcm0KK3dl
YmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfbmFtZQord2Via2l0X2RvbV9odG1s
X3RleHRfYXJlYV9lbGVtZW50X3NldF9uYW1lCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfZ2V0X3JlYWRfb25seQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3Nl
dF9yZWFkX29ubHkKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfcm93cwor
d2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9yb3dzCit3ZWJraXRfZG9tX2h0
bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X2NvbHMKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9zZXRfY29scword2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X2dldF9h
cmVhX3R5cGUKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfZGVmYXVsdF92
YWx1ZQord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVtZW50X3NldF9kZWZhdWx0X3ZhbHVl
Cit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfZ2V0X3ZhbHVlCit3ZWJraXRfZG9t
X2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRfc2V0X3ZhbHVlCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9h
cmVhX2VsZW1lbnRfZ2V0X3dpbGxfdmFsaWRhdGUKK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFf
ZWxlbWVudF9nZXRfc2VsZWN0aW9uX3N0YXJ0Cit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2Vs
ZW1lbnRfc2V0X3NlbGVjdGlvbl9zdGFydAord2Via2l0X2RvbV9odG1sX3RleHRfYXJlYV9lbGVt
ZW50X2dldF9zZWxlY3Rpb25fZW5kCit3ZWJraXRfZG9tX2h0bWxfdGV4dF9hcmVhX2VsZW1lbnRf
c2V0X3NlbGVjdGlvbl9lbmQKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9IVE1MX1RFWFRfQVJFQV9FTEVN
RU5UCitXRUJLSVRfRE9NX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRN
TF9URVhUX0FSRUFfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RFWFRfQVJFQV9FTEVNRU5UX0NM
QVNTCitXRUJLSVRfRE9NX0lTX0hUTUxfVEVYVF9BUkVBX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9E
T01fSFRNTF9URVhUX0FSRUFfRUxFTUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0
ZT4KK3dlYmtpdF9kb21faHRtbF90ZXh0X2FyZWFfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQ8L0ZJTEU+Cis8
VElUTEU+V2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudDwvVElUTEU+CitXZWJLaXRET01IVE1MVGl0
bGVFbGVtZW50CisKK3dlYmtpdF9kb21faHRtbF90aXRsZV9lbGVtZW50X2dldF90ZXh0Cit3ZWJr
aXRfZG9tX2h0bWxfdGl0bGVfZWxlbWVudF9zZXRfdGV4dAorCis8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KK1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRDbGFzcworV0VCS0lUX0RPTV9UWVBFX0hUTUxf
VElUTEVfRUxFTUVOVAorV0VCS0lUX0RPTV9IVE1MX1RJVExFX0VMRU1FTlQKK1dFQktJVF9ET01f
SVNfSFRNTF9USVRMRV9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxfVElUTEVfRUxFTUVOVF9DTEFT
UworV0VCS0lUX0RPTV9JU19IVE1MX1RJVExFX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRN
TF9USVRMRV9FTEVNRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2RvbV9odG1sX3RpdGxlX2VsZW1lbnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRET01IVE1MVUxpc3RFbGVtZW50PC9GSUxFPgorPFRJVExFPldlYktpdERP
TUhUTUxVTGlzdEVsZW1lbnQ8L1RJVExFPgorV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudAorCit3
ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1lbnRfZ2V0X2NvbXBhY3QKK3dlYmtpdF9kb21faHRt
bF91X2xpc3RfZWxlbWVudF9zZXRfY29tcGFjdAord2Via2l0X2RvbV9odG1sX3VfbGlzdF9lbGVt
ZW50X2dldF90eXBlX2F0dHIKK3dlYmtpdF9kb21faHRtbF91X2xpc3RfZWxlbWVudF9zZXRfdHlw
ZV9hdHRyCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVu
dENsYXNzCitXRUJLSVRfRE9NX1RZUEVfSFRNTF9VX0xJU1RfRUxFTUVOVAorV0VCS0lUX0RPTV9I
VE1MX1VfTElTVF9FTEVNRU5UCitXRUJLSVRfRE9NX0lTX0hUTUxfVV9MSVNUX0VMRU1FTlQKK1dF
QktJVF9ET01fSFRNTF9VX0xJU1RfRUxFTUVOVF9DTEFTUworV0VCS0lUX0RPTV9JU19IVE1MX1Vf
TElTVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0hUTUxfVV9MSVNUX0VMRU1FTlRfR0VUX0NM
QVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+Cit3ZWJraXRfZG9tX2h0bWxfdV9saXN0X2VsZW1l
bnRfZ2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRET01ET01X
aW5kb3c8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NRE9NV2luZG93PC9USVRMRT4KK1dlYktpdERP
TURPTVdpbmRvdworCisKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRET01ET01XaW5k
b3dDbGFzcworV0VCS0lUX0RPTV9UWVBFX0RPTV9XSU5ET1cKK1dFQktJVF9ET01fRE9NX1dJTkRP
VworV0VCS0lUX0RPTV9JU19ET01fV0lORE9XCitXRUJLSVRfRE9NX0RPTV9XSU5ET1dfQ0xBU1MK
K1dFQktJVF9ET01fSVNfRE9NX1dJTkRPV19DTEFTUworV0VCS0lUX0RPTV9ET01fV0lORE9XX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2RvbV9kb21fd2luZG93X2dl
dF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NWFBhdGhFeHBy
ZXNzaW9uPC9GSUxFPgorPFRJVExFPldlYktpdERPTVhQYXRoRXhwcmVzc2lvbjwvVElUTEU+CitX
ZWJLaXRET01YUGF0aEV4cHJlc3Npb24KKword2Via2l0X2RvbV94cGF0aF9leHByZXNzaW9uX2V2
YWx1YXRlCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9u
Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9YUEFUSF9FWFBSRVNTSU9OCitXRUJLSVRfRE9NX1hQQVRI
X0VYUFJFU1NJT04KK1dFQktJVF9ET01fSVNfWFBBVEhfRVhQUkVTU0lPTgorV0VCS0lUX0RPTV9Y
UEFUSF9FWFBSRVNTSU9OX0NMQVNTCitXRUJLSVRfRE9NX0lTX1hQQVRIX0VYUFJFU1NJT05fQ0xB
U1MKK1dFQktJVF9ET01fWFBBVEhfRVhQUkVTU0lPTl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04g
UHJpdmF0ZT4KK3dlYmtpdF9kb21feHBhdGhfZXhwcmVzc2lvbl9nZXRfdHlwZQorPC9TRUNUSU9O
PgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdERPTVhQYXRoUmVzdWx0PC9GSUxFPgorPFRJVExF
PldlYktpdERPTVhQYXRoUmVzdWx0PC9USVRMRT4KK1dlYktpdERPTVhQYXRoUmVzdWx0CisKK1dF
QktJVF9ET01fWFBBVEhfUkVTVUxUX0FOWV9UWVBFCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9O
VU1CRVJfVFlQRQorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfU1RSSU5HX1RZUEUKK1dFQktJVF9E
T01fWFBBVEhfUkVTVUxUX0JPT0xFQU5fVFlQRQorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfVU5P
UkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRQorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfT1JERVJF
RF9OT0RFX0lURVJBVE9SX1RZUEUKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUX1VOT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUX09SREVSRURfTk9ERV9T
TkFQU0hPVF9UWVBFCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9BTllfVU5PUkRFUkVEX05PREVf
VFlQRQorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfRklSU1RfT1JERVJFRF9OT0RFX1RZUEUKK3dl
YmtpdF9kb21feHBhdGhfcmVzdWx0X2l0ZXJhdGVfbmV4dAord2Via2l0X2RvbV94cGF0aF9yZXN1
bHRfc25hcHNob3RfaXRlbQord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3Jlc3VsdF90eXBl
Cit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfbnVtYmVyX3ZhbHVlCit3ZWJraXRfZG9tX3hw
YXRoX3Jlc3VsdF9nZXRfc3RyaW5nX3ZhbHVlCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRf
Ym9vbGVhbl92YWx1ZQord2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3NpbmdsZV9ub2RlX3Zh
bHVlCit3ZWJraXRfZG9tX3hwYXRoX3Jlc3VsdF9nZXRfaW52YWxpZF9pdGVyYXRvcl9zdGF0ZQor
d2Via2l0X2RvbV94cGF0aF9yZXN1bHRfZ2V0X3NuYXBzaG90X2xlbmd0aAorCis8U1VCU0VDVElP
TiBTdGFuZGFyZD4KK1dlYktpdERPTVhQYXRoUmVzdWx0Q2xhc3MKK1dFQktJVF9ET01fVFlQRV9Y
UEFUSF9SRVNVTFQKK1dFQktJVF9ET01fWFBBVEhfUkVTVUxUCitXRUJLSVRfRE9NX0lTX1hQQVRI
X1JFU1VMVAorV0VCS0lUX0RPTV9YUEFUSF9SRVNVTFRfQ0xBU1MKK1dFQktJVF9ET01fSVNfWFBB
VEhfUkVTVUxUX0NMQVNTCitXRUJLSVRfRE9NX1hQQVRIX1JFU1VMVF9HRVRfQ0xBU1MKKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21feHBhdGhfcmVzdWx0X2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NRW50aXR5UmVmZXJlbmNlPC9GSUxF
PgorPFRJVExFPldlYktpdERPTUVudGl0eVJlZmVyZW5jZTwvVElUTEU+CisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV0VCS0lUX0RPTV9UWVBFX0VOVElUWV9SRUZFUkVOQ0UKK1dFQktJVF9ET01f
RU5USVRZX1JFRkVSRU5DRQorV0VCS0lUX0RPTV9JU19FTlRJVFlfUkVGRVJFTkNFCitXRUJLSVRf
RE9NX0VOVElUWV9SRUZFUkVOQ0VfQ0xBU1MKK1dFQktJVF9ET01fSVNfRU5USVRZX1JFRkVSRU5D
RV9DTEFTUworV0VCS0lUX0RPTV9FTlRJVFlfUkVGRVJFTkNFX0dFVF9DTEFTUworCis8U1VCU0VD
VElPTiBQcml2YXRlPgord2Via2l0X2RvbV9lbnRpdHlfcmVmZXJlbmNlX2dldF90eXBlCis8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RE9NSFRNTEJhc2VGb250RWxlbWVudDwv
RklMRT4KKzxUSVRMRT5XZWJLaXRET01IVE1MQmFzZUZvbnRFbGVtZW50PC9USVRMRT4KK3dlYmtp
dF9kb21faHRtbF9iYXNlX2ZvbnRfZWxlbWVudF9nZXRfY29sb3IKK3dlYmtpdF9kb21faHRtbF9i
YXNlX2ZvbnRfZWxlbWVudF9nZXRfZmFjZQord2Via2l0X2RvbV9odG1sX2Jhc2VfZm9udF9lbGVt
ZW50X2dldF9zaXplCit3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfc2V0X2NvbG9y
Cit3ZWJraXRfZG9tX2h0bWxfYmFzZV9mb250X2VsZW1lbnRfc2V0X2ZhY2UKK3dlYmtpdF9kb21f
aHRtbF9iYXNlX2ZvbnRfZWxlbWVudF9zZXRfc2l6ZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4K
K1dFQktJVF9ET01fVFlQRV9IVE1MX0JBU0VfRk9OVF9FTEVNRU5UCitXRUJLSVRfRE9NX0hUTUxf
QkFTRV9GT05UX0VMRU1FTlQKK1dFQktJVF9ET01fSVNfSFRNTF9CQVNFX0ZPTlRfRUxFTUVOVAor
V0VCS0lUX0RPTV9IVE1MX0JBU0VfRk9OVF9FTEVNRU5UX0NMQVNTCitXRUJLSVRfRE9NX0lTX0hU
TUxfQkFTRV9GT05UX0VMRU1FTlRfQ0xBU1MKK1dFQktJVF9ET01fSFRNTF9CQVNFX0ZPTlRfRUxF
TUVOVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK3dlYmtpdF9kb21faHRtbF9i
YXNlX2ZvbnRfZWxlbWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxF
PndlYmtpdGRvbWRlZmluZXM8L0ZJTEU+Cis8VElUTEU+V2ViS2l0RE9NRGVmaW5lczwvVElUTEU+
Cis8U1VCU0VDVElPTiBQcml2YXRlPgorV0VCS0lUX0FQSQorV0VCS0lUX0RFUFJFQ0FURUQKK1dF
QktJVF9ERVBSRUNBVEVEX0ZPUgorPC9TRUNUSU9OPgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL2RvY3Mvd2Via2l0ZG9t
Z3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vZG9jcy93ZWJraXRkb21ndGstZG9jcy5zZ21sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjc5YTI1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL2RvY3Mvd2Via2l0ZG9t
Z3RrLWRvY3Muc2dtbApAQCAtMCwwICsxLDEyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8
IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9F
TiIKKyAgICAgICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1s
LzQuMS4yL2RvY2Jvb2t4LmR0ZCIgWworPCFFTlRJVFkgdmVyc2lvbiBTWVNURU0gInZlcnNpb24u
eG1sIj4KK10+Cis8Ym9vayBpZD0iaW5kZXgiIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAzL1hJbmNsdWRlIj4KKyAgPGJvb2tpbmZvPgorICAgIDx0aXRsZT5XZWJLaXRET01HVEsrIFJl
ZmVyZW5jZSBNYW51YWw8L3RpdGxlPgorICAgIDxyZWxlYXNlaW5mbz5mb3IgV2ViS2l0RE9NR1RL
KyAmdmVyc2lvbjs8L3JlbGVhc2VpbmZvPgorICA8L2Jvb2tpbmZvPgorCisgIDxjaGFwdGVyPgor
ICAgIDx0aXRsZT5DbGFzcyBPdmVydmlldzwvdGl0bGU+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdERPTUN1c3RvbS54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2Vi
S2l0RE9NRXZlbnRUYXJnZXQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dERPTU5vZGVGaWx0ZXIueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TU9iamVjdC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NWFBhdGhO
U1Jlc29sdmVyLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01DU1NS
dWxlLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01DU1NSdWxlTGlz
dC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ1NTU3R5
bGVTaGVldC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ1NTVmFs
dWUueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTU1lZGlhTGlzdC54
bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NU3R5bGVTaGVldC54bWwi
Lz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NU3R5bGVTaGVldExpc3QueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUF0dHIueG1sIi8+CisgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUNEQVRBU2VjdGlvbi54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ2hhcmFjdGVyRGF0YS54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NQ29tbWVudC54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24ueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTURvY3VtZW50LnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01Eb2N1bWVudFR5cGUueG1sIi8+CisgICAgPHhpOmlu
Y2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTUV2ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRET01LZXlib2FyZEV2ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRET01Nb3VzZUV2ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01OYW1lZE5vZGVNYXAueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdERPTU5vZGUueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTU5v
ZGVJdGVyYXRvci54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NTm9k
ZUxpc3QueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVByb2Nlc3Np
bmdJbnN0cnVjdGlvbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9N
UmFuZ2UueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVRleHQueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVRyZWVXYWxrZXIueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVVJRXZlbnQueG1sIi8+CisgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVdoZWVsRXZlbnQueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUJsb2IueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTUZpbGUueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdERPTUZpbGVMaXN0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRET01IVE1MQW5jaG9yRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv
V2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0RE9NSFRNTEJSRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRET01IVE1MQm9keUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MQ2FudmFzRWxlbWVudC54bWwiLz4KKyAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24ueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQueG1sIi8+CisgICAg
PHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxEaXJlY3RvcnlFbGVtZW50LnhtbCIv
PgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRGl2RWxlbWVudC54bWwi
Lz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTERvY3VtZW50LnhtbCIv
PgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRWxlbWVudC54bWwiLz4K
KyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudC54bWwi
Lz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVu
dC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTEZvbnRFbGVt
ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MRm9ybUVs
ZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxGcmFt
ZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxG
cmFtZVNldEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TUhUTUxIUkVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERP
TUhUTUxIZWFkRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RE9NSFRNTEhlYWRpbmdFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01IVE1MSHRtbEVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRET01IVE1MTElFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRl
IGhyZWY9InhtbC9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC54bWwiLz4KKyAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50LnhtbCIvPgorICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MTWFwRWxlbWVudC54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50LnhtbCIvPgor
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxNZXRhRWxlbWVudC54bWwi
Lz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQueG1s
Ii8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQu
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxPYmplY3RFbGVt
ZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MT3B0R3Jv
dXBFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1M
T3B0aW9uRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9N
SFRNTE9wdGlvbnNDb2xsZWN0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFByZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQueG1sIi8+CisgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudC54bWwiLz4KKyAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQu
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxUYWJsZUNlbGxF
bGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01IVE1MVGFi
bGVDb2xFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01I
VE1MVGFibGVFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRE
T01IVE1MVGFibGVSb3dFbGVtZW50LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRleHRBcmVhRWxlbWVudC54bWwiLz4KKyAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFRpdGxlRWxlbWVudC54bWwiLz4KKyAgICA8eGk6
aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudC54bWwiLz4KKyAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RE9NRE9NV2luZG93LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01YUGF0aEV4cHJlc3Npb24ueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTVhQYXRoUmVzdWx0LnhtbCIvPgorICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRET01FbnRpdHlSZWZlcmVuY2UueG1sIi8+CisgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdERPTUhUTUxCYXNlRm9udEVsZW1lbnQueG1sIi8+Cisg
IDwvY2hhcHRlcj4KKworICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+CisgICAgPHRpdGxlPkluZGV4
PC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LWZ1bGwueG1sIj48
eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CisgIDwvaW5kZXg+CisgIDxpbmRleCBpZD0iYXBp
LWluZGV4LWRlcHJlY2F0ZWQiIHJvbGU9ImRlcHJlY2F0ZWQiPgorICAgIDx0aXRsZT5JbmRleCBv
ZiBkZXByZWNhdGVkIHN5bWJvbHM8L3RpdGxlPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9h
cGktaW5kZXgtZGVwcmVjYXRlZC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KKyAg
PC9pbmRleD4KKworICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYW5ub3RhdGlvbi1nbG9zc2FyeS54
bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KKzwvYm9vaz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0
ZG9tLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsv
RE9NL3dlYmtpdGRvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODlj
YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbS5oCkBAIC0wLDAgKzEsMTI3IEBACisvKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdvYmplY3QtZ2VuZXJhdGUtaGVhZGVycy5wbC4g
IERPIE5PVCBNT0RJRlkhCisgICAKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2lmbmRlZiB3ZWJraXRkb21faAorI2RlZmluZSB3ZWJraXRkb21faAorCisj
ZGVmaW5lIF9fV0VCS0lURE9NX0hfSU5TSURFX18KKworI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01BdHRyLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUJsb2IuaD4KKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUNTU1J1bGUuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ1NT
UnVsZUxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DU1NTdHlsZVNoZWV0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUNTU1ZhbHVlLmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTUNoYXJhY3RlckRhdGEuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0
RE9NQ29tbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01DdXN0b20uaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24uaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NRE9NV2luZG93Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTURlcHJlY2F0ZWQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRG9jdW1l
bnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Eb2N1bWVudFR5cGUuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01FdmVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01FdmVudFRhcmdldC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01GaWxlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTUZpbGVMaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxB
bmNob3JFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxBcHBsZXRF
bGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MQlJFbGVtZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxCYXNlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01IVE1MQm9keUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTEJ1dHRvbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTENhbnZhc0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTENv
bGxlY3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRGlyZWN0b3J5RWxlbWVudC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRGl2RWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9N
SFRNTEVtYmVkRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRmll
bGRTZXRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxGb250RWxl
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnQuaD4K
KyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudC5oPgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50Lmg+CisjaW5jbHVkZSA8
d2Via2l0ZG9tL1dlYktpdERPTUhUTUxIUkVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERP
TUhUTUxIZWFkaW5nRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
SHRtbEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTElGcmFtZUVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudC5o
PgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MSW5wdXRFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxMSUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJr
aXRkb20vV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9X
ZWJLaXRET01IVE1MTGVnZW5kRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRE
T01IVE1MTGlua0VsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1h
cEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxNZW51RWxlbWVudC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnQuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJL
aXRET01IVE1MT2JqZWN0RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MT3B0R3JvdXBFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxP
cHRpb25FbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxPcHRpb25z
Q29sbGVjdGlvbi5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MUGFyYWdyYXBo
RWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MUGFyYW1FbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxQcmVFbGVtZW50Lmg+CisjaW5j
bHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxRdW90ZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3
ZWJraXRkb20vV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NSFRNTFN0eWxlRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MVGFibGVDYXB0aW9uRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01I
VE1MVGFibGVDZWxsRWxlbWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1M
VGFibGVDb2xFbGVtZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUYWJs
ZUVsZW1lbnQuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxl
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGFibGVTZWN0aW9uRWxl
bWVudC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50
Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQuaD4KKyNp
bmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS9XZWJLaXRET01LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTU1lZGlhTGlzdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Nb3Vz
ZUV2ZW50Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5hbWVkTm9kZU1hcC5oPgor
I2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01Ob2RlLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9t
L1dlYktpdERPTU5vZGVGaWx0ZXIuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NTm9k
ZUl0ZXJhdG9yLmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGVMaXN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20v
V2ViS2l0RE9NUmFuZ2UuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NU3R5bGVTaGVl
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01TdHlsZVNoZWV0TGlzdC5oPgorI2lu
Y2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXh0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dl
YktpdERPTVRyZWVXYWxrZXIuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVUlFdmVu
dC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01XaGVlbEV2ZW50Lmg+CisjaW5jbHVk
ZSA8d2Via2l0ZG9tL1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPHdlYmtp
dGRvbS9XZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIuaD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vV2Vi
S2l0RE9NWFBhdGhSZXN1bHQuaD4KKworI3VuZGVmIF9fV0VCS0lURE9NX0hfSU5TSURFX18KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L3dlYmtp
dGRvbS5zeW1ib2xzIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL0RPTS93ZWJraXRkb20uc3ltYm9scwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1l
IGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC93ZWJraXRkb20uc3ltYm9scwpy
ZW5hbWUgdG8gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L0RPTS93ZWJraXRkb20uc3ltYm9scwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21hdXRvY2xlYW51cHMtdW5z
dGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vd2Via2l0ZG9tYXV0b2NsZWFudXBzLXVuc3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uODUzOWQ5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tYXV0b2Ns
ZWFudXBzLXVuc3RhYmxlLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ29iamVjdC1nZW5lcmF0ZS1oZWFkZXJzLnBsLiAgRE8gTk9UIE1PRElG
WSEKKyAgIAorICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aWZuZGVmIHdlYmtpdGRvbWF1dG9jbGVhbnVwc19oCisjZGVmaW5lIHdlYmtpdGRvbWF1dG9jbGVh
bnVwc19oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaWZkZWYgR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMKKyNpZm5kZWYgX19HSV9TQ0FOTkVSX18KKworR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUFuaW1hdGFibGUsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
QW5pbWF0aW9uVGltZWxpbmUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTUF1ZGlvVHJhY2ssIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0LCBnX29iamVjdF91
bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01CYXJQcm9wLCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01C
YXR0ZXJ5TWFuYWdlciwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZSwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NQ1NTTmFtZXNwYWNlLCBnX29i
amVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01N
aW1lVHlwZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRP
UFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NUGx1
Z2luLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01ET01QbHVnaW5BcnJheSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NU2VsZWN0aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01TdHJpbmdMaXN0LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01TdHJp
bmdNYXAsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdERPTURPTVRva2VuTGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLCBnX29iamVjdF91
bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01EYXRhQ3VlLCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01E
YXRhYmFzZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0RE9NRG9jdW1lbnRBbmltYXRpb24sIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURvY3VtZW50VGltZWxpbmUsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUdhbWVwYWQsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUdh
bWVwYWRMaXN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01HZW9sb2NhdGlvbiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudCwgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTERldGFpbHNFbGVt
ZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01IVE1MS2V5Z2VuRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCwgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVu
dCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NSGlzdG9yeSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUxvY2F0aW9uLCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01NZWRpYUNvbnRyb2xsZXIsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU1l
ZGlhRGV2aWNlcywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVO
QyAoV2ViS2l0RE9NTWVkaWFFcnJvciwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3QsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0
ZWRDb25zdHJhaW50cywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NTWVzc2FnZVBvcnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTU5hdmlnYXRvciwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZp
Y2VzLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01QZXJmb3JtYW5jZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeSwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9u
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01QZXJmb3JtYW5jZVRpbWluZywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NU2NyZWVuLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01TcGVlY2hTeW50aGVzaXMsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVNwZWVjaFN5bnRo
ZXNpc0V2ZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UsIGdfb2JqZWN0X3VucmVmKQorR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNl
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01TdG9yYWdlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXRET01TdG9yYWdlSW5mbywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NU3RvcmFnZVF1b3RhLCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01TdHlsZU1lZGlhLCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01UZXh0VHJh
Y2ssIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dERPTVRleHRUcmFja0N1ZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVGV4dFRyYWNrTGlzdCwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVGltZVJh
bmdlcywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NVG91Y2gsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdERPTVRyYWNrRXZlbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BU
Ul9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlciwgZ19vYmplY3RfdW5y
ZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVXNlck1lc3NhZ2VI
YW5kbGVyc05hbWVzcGFjZSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NVlRUQ3VlLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9Q
VFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01WYWxpZGl0eVN0YXRlLCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01WaWRlb1BsYXliYWNrUXVh
bGl0eSwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NVmlkZW9UcmFjaywgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NVmlkZW9UcmFja0xpc3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJ
TkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVdlYkFuaW1hdGlvbiwgZ19vYmplY3Rf
dW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NV2ViS2l0TmFt
ZWRGbG93LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01XZWJLaXROYW1lc3BhY2UsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BU
Ul9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVdlYktpdFBvaW50LCBnX29iamVjdF91bnJlZikKKwor
I2VuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWF1dG9jbGVhbnVwcy5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93
ZWJraXRkb21hdXRvY2xlYW51cHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mZWRjNjAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS93ZWJraXRkb21hdXRvY2xlYW51cHMuaApAQCAtMCww
ICsxLDEyOSBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnb2JqZWN0LWdl
bmVyYXRlLWhlYWRlcnMucGwuICBETyBOT1QgTU9ESUZZIQorICAgCisgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgd2Via2l0ZG9tYXV0b2NsZWFu
dXBzX2gKKyNkZWZpbmUgd2Via2l0ZG9tYXV0b2NsZWFudXBzX2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisKKyNpZmRlZiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQworI2lmbmRl
ZiBfX0dJX1NDQU5ORVJfXworCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
RE9NQXR0ciwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0RE9NQmxvYiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NQ0RBVEFTZWN0aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01DU1NSdWxlLCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01DU1NSdWxlTGlzdCwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbiwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NQ1NTU3R5bGVTaGVldCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NQ1NTVmFsdWUsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUNoYXJhY3RlckRhdGEsIGdf
b2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUNv
bW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdERPTURPTUltcGxlbWVudGF0aW9uLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9Q
VFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01ET01XaW5kb3csIGdfb2JqZWN0X3VucmVmKQorR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTURvY3VtZW50LCBnX29iamVjdF91
bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01Eb2N1bWVudEZy
YWdtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01Eb2N1bWVudFR5cGUsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9D
TEVBTlVQX0ZVTkMgKFdlYktpdERPTUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUV2ZW50LCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01FdmVudFRhcmdldCwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NRmlsZSwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
RmlsZUxpc3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCwgZ19vYmplY3Rf
dW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEFyZWFF
bGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01IVE1MQlJFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MQmFzZUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxCb2R5RWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0df
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MQ29sbGVjdGlvbiwgZ19v
YmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRN
TERMaXN0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxEaXZFbGVtZW50LCBnX29i
amVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1M
RG9jdW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdERPTUhUTUxFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MRW1iZWRFbGVtZW50LCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MRmllbGRTZXRFbGVt
ZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01IVE1MRm9udEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9D
TEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxGb3JtRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTEZyYW1lU2V0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NM
RUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEhSRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50LCBnX29i
amVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1M
SGVhZGluZ0VsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTUhUTUxIdG1sRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnQsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxJ
bWFnZUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVf
QVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxMSUVsZW1lbnQsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxMYWJlbEVs
ZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdERPTUhUTUxMZWdlbmRFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9Q
VFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MTGlua0VsZW1lbnQsIGdfb2JqZWN0X3VucmVm
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxNYXBFbGVtZW50
LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRE
T01IVE1MTWFycXVlZUVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9D
TEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxNZW51RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitH
X0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50LCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01I
VE1MTW9kRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NSFRNTE9MaXN0RWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklO
RV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQsIGdfb2Jq
ZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxP
cHRHcm91cEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24s
IGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERP
TUhUTUxQYXJhZ3JhcGhFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MUGFyYW1FbGVtZW50LCBnX29iamVjdF91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MUHJlRWxlbWVudCwg
Z19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9N
SFRNTFF1b3RlRWxlbWVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0RE9NSFRNTFNjcmlwdEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19E
RUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01I
VE1MU3R5bGVFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudCwgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdERPTUhUTUxUYWJsZUNvbEVsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVU
T1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxUYWJsZUVsZW1lbnQsIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTUhUTUxUYWJsZVJv
d0VsZW1lbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdERPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50LCBn
X29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01I
VE1MVGl0bGVFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5V
UF9GVU5DIChXZWJLaXRET01IVE1MVUxpc3RFbGVtZW50LCBnX29iamVjdF91bnJlZikKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01LZXlib2FyZEV2ZW50LCBnX29iamVj
dF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01NZWRpYUxp
c3QsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dERPTU1vdXNlRXZlbnQsIGdfb2JqZWN0X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQ
X0ZVTkMgKFdlYktpdERPTU5hbWVkTm9kZU1hcCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTm9kZSwgZ19vYmplY3RfdW5yZWYpCitHX0RF
RklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTm9kZUZpbHRlciwgZ19vYmplY3Rf
dW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NTm9kZUl0ZXJh
dG9yLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJL
aXRET01Ob2RlTGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0RE9NT2JqZWN0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIGdfb2JqZWN0X3Vu
cmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVJhbmdlLCBnX29i
amVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRET01TdHls
ZVNoZWV0LCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRET01TdHlsZVNoZWV0TGlzdCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRS
X0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVGV4dCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVHJlZVdhbGtlciwgZ19vYmplY3RfdW5yZWYp
CitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NVUlFdmVudCwgZ19vYmpl
Y3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0RE9NV2hlZWxF
dmVudCwgZ19vYmplY3RfdW5yZWYpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0RE9NWFBhdGhFeHByZXNzaW9uLCBnX29iamVjdF91bnJlZikKK0dfREVGSU5FX0FVVE9QVFJf
Q0xFQU5VUF9GVU5DIChXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIsIGdfb2JqZWN0X3VucmVmKQor
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdERPTVhQYXRoUmVzdWx0LCBnX29i
amVjdF91bnJlZikKKworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRv
bWRlZmluZXMtdW5zdGFibGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZmZhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRv
bWRlZmluZXMtdW5zdGFibGUuaApAQCAtMCwwICsxLDI1MSBAQAorLyogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgVGhpcyBmaWxlIGhhcyBi
ZWVuIGdlbmVyYXRlZCBieSBnb2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwuICBETyBOT1QgTU9E
SUZZIQorICAgCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgd2Via2l0ZG9tZGVmaW5lc191bnN0YWJsZV9oCisjZGVmaW5lIHdlYmtpdGRvbWRl
ZmluZXNfdW5zdGFibGVfaAorCisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmluZXMu
aD4KKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSQorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NQW5pbWF0YWJsZSBXZWJLaXRET01BbmltYXRhYmxlOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTUFuaW1hdGFibGVDbGFzcyBXZWJLaXRET01BbmltYXRhYmxlQ2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01BbmltYXRpb25FZmZlY3QgV2ViS2l0RE9NQW5pbWF0
aW9uRWZmZWN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUFuaW1hdGlvbkVmZmVjdENsYXNz
IFdlYktpdERPTUFuaW1hdGlvbkVmZmVjdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NQW5pbWF0aW9uVGltZWxpbmUgV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmU7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NQW5pbWF0aW9uVGltZWxpbmVDbGFzcyBXZWJLaXRET01BbmltYXRp
b25UaW1lbGluZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQXVkaW9UcmFjayBX
ZWJLaXRET01BdWRpb1RyYWNrOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUF1ZGlvVHJhY2tD
bGFzcyBXZWJLaXRET01BdWRpb1RyYWNrQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01BdWRpb1RyYWNrTGlzdCBXZWJLaXRET01BdWRpb1RyYWNrTGlzdDsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01BdWRpb1RyYWNrTGlzdENsYXNzIFdlYktpdERPTUF1ZGlvVHJhY2tMaXN0Q2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01CYXJQcm9wIFdlYktpdERPTUJhclByb3A7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQmFyUHJvcENsYXNzIFdlYktpdERPTUJhclByb3BD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUJhdHRlcnlNYW5hZ2VyIFdlYktpdERP
TUJhdHRlcnlNYW5hZ2VyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUJhdHRlcnlNYW5hZ2Vy
Q2xhc3MgV2ViS2l0RE9NQmF0dGVyeU1hbmFnZXJDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTURPTUFwcGxpY2F0aW9uQ2FjaGUgV2ViS2l0RE9NRE9NQXBwbGljYXRpb25DYWNoZTsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01BcHBsaWNhdGlvbkNhY2hlQ2xhc3MgV2ViS2l0
RE9NRE9NQXBwbGljYXRpb25DYWNoZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
RE9NQ1NTTmFtZXNwYWNlIFdlYktpdERPTURPTUNTU05hbWVzcGFjZTsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01ET01DU1NOYW1lc3BhY2VDbGFzcyBXZWJLaXRET01ET01DU1NOYW1lc3BhY2VD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTU1pbWVUeXBlIFdlYktpdERPTURP
TU1pbWVUeXBlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTU1pbWVUeXBlQ2xhc3MgV2Vi
S2l0RE9NRE9NTWltZVR5cGVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTU1p
bWVUeXBlQXJyYXkgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheTsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01ET01NaW1lVHlwZUFycmF5Q2xhc3MgV2ViS2l0RE9NRE9NTWltZVR5cGVBcnJheUNs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbiBX
ZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TURPTU5hbWVkRmxvd0NvbGxlY3Rpb25DbGFzcyBXZWJLaXRET01ET01OYW1lZEZsb3dDb2xsZWN0
aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01QbHVnaW4gV2ViS2l0RE9N
RE9NUGx1Z2luOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVBsdWdpbkNsYXNzIFdlYktp
dERPTURPTVBsdWdpbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NUGx1Z2lu
QXJyYXkgV2ViS2l0RE9NRE9NUGx1Z2luQXJyYXk7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
RE9NUGx1Z2luQXJyYXlDbGFzcyBXZWJLaXRET01ET01QbHVnaW5BcnJheUNsYXNzOworCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NU2VsZWN0aW9uIFdlYktpdERPTURPTVNlbGVjdGlvbjsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01TZWxlY3Rpb25DbGFzcyBXZWJLaXRET01ET01T
ZWxlY3Rpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVN0cmluZ0xpc3Qg
V2ViS2l0RE9NRE9NU3RyaW5nTGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01TdHJp
bmdMaXN0Q2xhc3MgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRE9NU3RyaW5nTWFwIFdlYktpdERPTURPTVN0cmluZ01hcDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01ET01TdHJpbmdNYXBDbGFzcyBXZWJLaXRET01ET01TdHJpbmdNYXBD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVRva2VuTGlzdCBXZWJLaXRET01E
T01Ub2tlbkxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NVG9rZW5MaXN0Q2xhc3Mg
V2ViS2l0RE9NRE9NVG9rZW5MaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01E
T01XaW5kb3dTcGVlY2hTeW50aGVzaXMgV2ViS2l0RE9NRE9NV2luZG93U3BlZWNoU3ludGhlc2lz
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpc0NsYXNz
IFdlYktpdERPTURPTVdpbmRvd1NwZWVjaFN5bnRoZXNpc0NsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRGF0YUN1ZSBXZWJLaXRET01EYXRhQ3VlOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTURhdGFDdWVDbGFzcyBXZWJLaXRET01EYXRhQ3VlQ2xhc3M7CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01EYXRhYmFzZSBXZWJLaXRET01EYXRhYmFzZTsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01EYXRhYmFzZUNsYXNzIFdlYktpdERPTURhdGFiYXNlQ2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbiBXZWJLaXRET01Eb2N1bWVudEFu
aW1hdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudEFuaW1hdGlvbkNsYXNz
IFdlYktpdERPTURvY3VtZW50QW5pbWF0aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01Eb2N1bWVudFRpbWVsaW5lIFdlYktpdERPTURvY3VtZW50VGltZWxpbmU7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NRG9jdW1lbnRUaW1lbGluZUNsYXNzIFdlYktpdERPTURvY3VtZW50
VGltZWxpbmVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUdhbWVwYWQgV2ViS2l0
RE9NR2FtZXBhZDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01HYW1lcGFkQ2xhc3MgV2ViS2l0
RE9NR2FtZXBhZENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NR2FtZXBhZExpc3Qg
V2ViS2l0RE9NR2FtZXBhZExpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NR2FtZXBhZExp
c3RDbGFzcyBXZWJLaXRET01HYW1lcGFkTGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NR2VvbG9jYXRpb24gV2ViS2l0RE9NR2VvbG9jYXRpb247Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NR2VvbG9jYXRpb25DbGFzcyBXZWJLaXRET01HZW9sb2NhdGlvbkNsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEF1ZGlvRWxlbWVudCBXZWJLaXRET01IVE1MQXVk
aW9FbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnRDbGFz
cyBXZWJLaXRET01IVE1MQXVkaW9FbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01IVE1MRGV0YWlsc0VsZW1lbnQgV2ViS2l0RE9NSFRNTERldGFpbHNFbGVtZW50OwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxEZXRhaWxzRWxlbWVudENsYXNzIFdlYktpdERPTUhU
TUxEZXRhaWxzRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEtl
eWdlbkVsZW1lbnQgV2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTEtleWdlbkVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MS2V5Z2VuRWxlbWVu
dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE1lZGlhRWxlbWVudCBXZWJL
aXRET01IVE1MTWVkaWFFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZWRp
YUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MTWVkaWFFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MVmlkZW9FbGVtZW50IFdlYktpdERPTUhUTUxWaWRlb0VsZW1l
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFZpZGVvRWxlbWVudENsYXNzIFdlYktp
dERPTUhUTUxWaWRlb0VsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhp
c3RvcnkgV2ViS2l0RE9NSGlzdG9yeTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IaXN0b3J5
Q2xhc3MgV2ViS2l0RE9NSGlzdG9yeUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
S2V5ZnJhbWVFZmZlY3QgV2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3Q7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NS2V5ZnJhbWVFZmZlY3RDbGFzcyBXZWJLaXRET01LZXlmcmFtZUVmZmVjdENsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTG9jYXRpb24gV2ViS2l0RE9NTG9jYXRpb247
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTG9jYXRpb25DbGFzcyBXZWJLaXRET01Mb2NhdGlv
bkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFDb250cm9sbGVyIFdlYktp
dERPTU1lZGlhQ29udHJvbGxlcjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYUNvbnRy
b2xsZXJDbGFzcyBXZWJLaXRET01NZWRpYUNvbnRyb2xsZXJDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTU1lZGlhRGV2aWNlcyBXZWJLaXRET01NZWRpYURldmljZXM7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFEZXZpY2VzQ2xhc3MgV2ViS2l0RE9NTWVkaWFEZXZpY2Vz
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYUVycm9yIFdlYktpdERPTU1l
ZGlhRXJyb3I7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTWVkaWFFcnJvckNsYXNzIFdlYktp
dERPTU1lZGlhRXJyb3JDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhUXVl
cnlMaXN0IFdlYktpdERPTU1lZGlhUXVlcnlMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TU1lZGlhUXVlcnlMaXN0Q2xhc3MgV2ViS2l0RE9NTWVkaWFRdWVyeUxpc3RDbGFzczsKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyBXZWJL
aXRET01NZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHM7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzQ2xhc3MgV2ViS2l0RE9NTWVkaWFU
cmFja1N1cHBvcnRlZENvbnN0cmFpbnRzQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01NZXNzYWdlUG9ydCBXZWJLaXRET01NZXNzYWdlUG9ydDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01NZXNzYWdlUG9ydENsYXNzIFdlYktpdERPTU1lc3NhZ2VQb3J0Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01OYXZpZ2F0b3IgV2ViS2l0RE9NTmF2aWdhdG9yOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTU5hdmlnYXRvckNsYXNzIFdlYktpdERPTU5hdmlnYXRvckNsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTmF2aWdhdG9yTWVkaWFEZXZpY2VzIFdlYktp
dERPTU5hdmlnYXRvck1lZGlhRGV2aWNlczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01OYXZp
Z2F0b3JNZWRpYURldmljZXNDbGFzcyBXZWJLaXRET01OYXZpZ2F0b3JNZWRpYURldmljZXNDbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlIFdlYktpdERPTVBlcmZv
cm1hbmNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlQ2xhc3MgV2ViS2l0
RE9NUGVyZm9ybWFuY2VDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1h
bmNlRW50cnkgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeTsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01QZXJmb3JtYW5jZUVudHJ5Q2xhc3MgV2ViS2l0RE9NUGVyZm9ybWFuY2VFbnRyeUNsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NUGVyZm9ybWFuY2VOYXZpZ2F0aW9uIFdlYktp
dERPTVBlcmZvcm1hbmNlTmF2aWdhdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01QZXJm
b3JtYW5jZU5hdmlnYXRpb25DbGFzcyBXZWJLaXRET01QZXJmb3JtYW5jZU5hdmlnYXRpb25DbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNlVGltaW5nIFdlYktpdERP
TVBlcmZvcm1hbmNlVGltaW5nOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVBlcmZvcm1hbmNl
VGltaW5nQ2xhc3MgV2ViS2l0RE9NUGVyZm9ybWFuY2VUaW1pbmdDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTVNjcmVlbiBXZWJLaXRET01TY3JlZW47Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NU2NyZWVuQ2xhc3MgV2ViS2l0RE9NU2NyZWVuQ2xhc3M7CisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXMgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc0NsYXNzIFdlYktpdERPTVNw
ZWVjaFN5bnRoZXNpc0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3lu
dGhlc2lzRXZlbnQgV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnQ7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NU3BlZWNoU3ludGhlc2lzRXZlbnRDbGFzcyBXZWJLaXRET01TcGVlY2hTeW50
aGVzaXNFdmVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VDbGFzcyBXZWJLaXRET01T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2VDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVNwZWVjaFN5bnRoZXNpc1ZvaWNlIFdlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVNwZWVjaFN5bnRoZXNpc1ZvaWNlQ2xhc3MgV2ViS2l0RE9N
U3BlZWNoU3ludGhlc2lzVm9pY2VDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0
b3JhZ2UgV2ViS2l0RE9NU3RvcmFnZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdG9yYWdl
Q2xhc3MgV2ViS2l0RE9NU3RvcmFnZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
U3RvcmFnZUluZm8gV2ViS2l0RE9NU3RvcmFnZUluZm87Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NU3RvcmFnZUluZm9DbGFzcyBXZWJLaXRET01TdG9yYWdlSW5mb0NsYXNzOworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NU3RvcmFnZVF1b3RhIFdlYktpdERPTVN0b3JhZ2VRdW90YTsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdG9yYWdlUXVvdGFDbGFzcyBXZWJLaXRET01TdG9yYWdl
UXVvdGFDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxlTWVkaWEgV2ViS2l0
RE9NU3R5bGVNZWRpYTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdHlsZU1lZGlhQ2xhc3Mg
V2ViS2l0RE9NU3R5bGVNZWRpYUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4
dFRyYWNrIFdlYktpdERPTVRleHRUcmFjazsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0
VHJhY2tDbGFzcyBXZWJLaXRET01UZXh0VHJhY2tDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVRleHRUcmFja0N1ZSBXZWJLaXRET01UZXh0VHJhY2tDdWU7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NVGV4dFRyYWNrQ3VlQ2xhc3MgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlQ2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tDdWVMaXN0IFdlYktpdERPTVRl
eHRUcmFja0N1ZUxpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4dFRyYWNrQ3VlTGlz
dENsYXNzIFdlYktpdERPTVRleHRUcmFja0N1ZUxpc3RDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTVRleHRUcmFja0xpc3QgV2ViS2l0RE9NVGV4dFRyYWNrTGlzdDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01UZXh0VHJhY2tMaXN0Q2xhc3MgV2ViS2l0RE9NVGV4dFRyYWNrTGlz
dENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGltZVJhbmdlcyBXZWJLaXRET01U
aW1lUmFuZ2VzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRpbWVSYW5nZXNDbGFzcyBXZWJL
aXRET01UaW1lUmFuZ2VzQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ub3VjaCBX
ZWJLaXRET01Ub3VjaDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ub3VjaENsYXNzIFdlYktp
dERPTVRvdWNoQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UcmFja0V2ZW50IFdl
YktpdERPTVRyYWNrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVHJhY2tFdmVudENs
YXNzIFdlYktpdERPTVRyYWNrRXZlbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVVzZXJNZXNzYWdlSGFuZGxlciBXZWJLaXRET01Vc2VyTWVzc2FnZUhhbmRsZXI7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyQ2xhc3MgV2ViS2l0RE9NVXNlck1l
c3NhZ2VIYW5kbGVyQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Vc2VyTWVzc2Fn
ZUhhbmRsZXJzTmFtZXNwYWNlIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZUNs
YXNzIFdlYktpdERPTVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VDbGFzczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTVZUVEN1ZSBXZWJLaXRET01WVFRDdWU7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NVlRUQ3VlQ2xhc3MgV2ViS2l0RE9NVlRUQ3VlQ2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01WYWxpZGl0eVN0YXRlIFdlYktpdERPTVZhbGlkaXR5U3RhdGU7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmFsaWRpdHlTdGF0ZUNsYXNzIFdlYktpdERPTVZhbGlk
aXR5U3RhdGVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZpZGVvUGxheWJhY2tR
dWFsaXR5IFdlYktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTVZpZGVvUGxheWJhY2tRdWFsaXR5Q2xhc3MgV2ViS2l0RE9NVmlkZW9QbGF5YmFja1F1
YWxpdHlDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVZpZGVvVHJhY2sgV2ViS2l0
RE9NVmlkZW9UcmFjazsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01WaWRlb1RyYWNrQ2xhc3Mg
V2ViS2l0RE9NVmlkZW9UcmFja0NsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVmlk
ZW9UcmFja0xpc3QgV2ViS2l0RE9NVmlkZW9UcmFja0xpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NVmlkZW9UcmFja0xpc3RDbGFzcyBXZWJLaXRET01WaWRlb1RyYWNrTGlzdENsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2ViQW5pbWF0aW9uIFdlYktpdERPTVdlYkFuaW1h
dGlvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XZWJBbmltYXRpb25DbGFzcyBXZWJLaXRE
T01XZWJBbmltYXRpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdE5h
bWVkRmxvdyBXZWJLaXRET01XZWJLaXROYW1lZEZsb3c7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NV2ViS2l0TmFtZWRGbG93Q2xhc3MgV2ViS2l0RE9NV2ViS2l0TmFtZWRGbG93Q2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01XZWJLaXROYW1lc3BhY2UgV2ViS2l0RE9NV2ViS2l0
TmFtZXNwYWNlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdlYktpdE5hbWVzcGFjZUNsYXNz
IFdlYktpdERPTVdlYktpdE5hbWVzcGFjZUNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RE9NV2ViS2l0UG9pbnQgV2ViS2l0RE9NV2ViS2l0UG9pbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NV2ViS2l0UG9pbnRDbGFzcyBXZWJLaXRET01XZWJLaXRQb2ludENsYXNzOworCisjaW5j
bHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWF1dG9jbGVhbnVwcy11bnN0YWJsZS5oPgorCisjZW5k
aWYgLyogV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9N
L3dlYmtpdGRvbWRlZmluZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vd2Via2l0ZG9tZGVmaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZkODJiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL3dlYmtpdGRvbWRlZmluZXMu
aApAQCAtMCwwICsxLDMzNCBAQAorLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
b2JqZWN0LWdlbmVyYXRlLWhlYWRlcnMucGwuICBETyBOT1QgTU9ESUZZIQorICAgCisgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgd2Via2l0ZG9t
ZGVmaW5lc19oCisjZGVmaW5lIHdlYmtpdGRvbWRlZmluZXNfaAorCisjaW5jbHVkZSA8Z2xpYi5o
PgorCisjaWZkZWYgR19PU19XSU4zMgorICAgICNpZmRlZiBCVUlMRElOR19XRUJLSVQKKyAgICAg
ICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICAgICNlbHNlCisg
ICAgICAgICNkZWZpbmUgV0VCS0lUX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgICAjZW5k
aWYKKyNlbHNlCisgICAgI2RlZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkoImRlZmF1bHQiKSkpCisjZW5kaWYKKworI2RlZmluZSBXRUJLSVRfREVQUkVDQVRFRCBXRUJL
SVRfQVBJIEdfREVQUkVDQVRFRAorI2RlZmluZSBXRUJLSVRfREVQUkVDQVRFRF9GT1IoZikgV0VC
S0lUX0FQSSBHX0RFUFJFQ0FURURfRk9SKGYpCisKKyNpZm5kZWYgV0VCS0lUX0FQSQorICAgICNk
ZWZpbmUgV0VCS0lUX0FQSQorI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQXR0ciBX
ZWJLaXRET01BdHRyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUF0dHJDbGFzcyBXZWJLaXRE
T01BdHRyQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01CbG9iIFdlYktpdERPTUJs
b2I7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQmxvYkNsYXNzIFdlYktpdERPTUJsb2JDbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNEQVRBU2VjdGlvbiBXZWJLaXRET01DREFU
QVNlY3Rpb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ0RBVEFTZWN0aW9uQ2xhc3MgV2Vi
S2l0RE9NQ0RBVEFTZWN0aW9uQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NS
dWxlIFdlYktpdERPTUNTU1J1bGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ1NTUnVsZUNs
YXNzIFdlYktpdERPTUNTU1J1bGVDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUNT
U1J1bGVMaXN0IFdlYktpdERPTUNTU1J1bGVMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUNTU1J1bGVMaXN0Q2xhc3MgV2ViS2l0RE9NQ1NTUnVsZUxpc3RDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24gV2ViS2l0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NTdHlsZURlY2xhcmF0aW9uQ2xh
c3MgV2ViS2l0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NQ1NTU3R5bGVTaGVldCBXZWJLaXRET01DU1NTdHlsZVNoZWV0OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUNTU1N0eWxlU2hlZXRDbGFzcyBXZWJLaXRET01DU1NTdHlsZVNoZWV0
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NWYWx1ZSBXZWJLaXRET01DU1NW
YWx1ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DU1NWYWx1ZUNsYXNzIFdlYktpdERPTUNT
U1ZhbHVlQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01DaGFyYWN0ZXJEYXRhIFdl
YktpdERPTUNoYXJhY3RlckRhdGE7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NQ2hhcmFjdGVy
RGF0YUNsYXNzIFdlYktpdERPTUNoYXJhY3RlckRhdGFDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUNvbW1lbnQgV2ViS2l0RE9NQ29tbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01Db21tZW50Q2xhc3MgV2ViS2l0RE9NQ29tbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb24gV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb247
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9NSW1wbGVtZW50YXRpb25DbGFzcyBXZWJLaXRE
T01ET01JbXBsZW1lbnRhdGlvbkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRE9N
V2luZG93IFdlYktpdERPTURPTVdpbmRvdzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01ET01X
aW5kb3dDbGFzcyBXZWJLaXRET01ET01XaW5kb3dDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTURvY3VtZW50IFdlYktpdERPTURvY3VtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTURvY3VtZW50Q2xhc3MgV2ViS2l0RE9NRG9jdW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTURvY3VtZW50RnJhZ21lbnQgV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudDsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Eb2N1bWVudEZyYWdtZW50Q2xhc3MgV2ViS2l0RE9N
RG9jdW1lbnRGcmFnbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRG9jdW1l
bnRUeXBlIFdlYktpdERPTURvY3VtZW50VHlwZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01E
b2N1bWVudFR5cGVDbGFzcyBXZWJLaXRET01Eb2N1bWVudFR5cGVDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUVsZW1lbnQgV2ViS2l0RE9NRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01FbGVtZW50Q2xhc3MgV2ViS2l0RE9NRWxlbWVudENsYXNzOworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NRXZlbnQgV2ViS2l0RE9NRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NRXZlbnRDbGFzcyBXZWJLaXRET01FdmVudENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NRXZlbnRUYXJnZXQgV2ViS2l0RE9NRXZlbnRUYXJnZXQ7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSBXZWJLaXRET01FdmVudFRhcmdldElmYWNl
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NRmlsZSBXZWJLaXRET01GaWxlOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUZpbGVDbGFzcyBXZWJLaXRET01GaWxlQ2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01GaWxlTGlzdCBXZWJLaXRET01GaWxlTGlzdDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01GaWxlTGlzdENsYXNzIFdlYktpdERPTUZpbGVMaXN0Q2xhc3M7CisK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCBXZWJLaXRET01IVE1M
QW5jaG9yRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dENsYXNzIFdlYktpdERPTUhUTUxBbmNob3JFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudCBXZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudDsK
K3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudENsYXNzIFdlYktpdERP
TUhUTUxBcHBsZXRFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1M
QXJlYUVsZW1lbnQgV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERPTUhUTUxBcmVhRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxBcmVhRWxlbWVudENsYXNz
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEJSRWxlbWVudCBXZWJLaXRET01IVE1M
QlJFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxCUkVsZW1lbnRDbGFzcyBX
ZWJLaXRET01IVE1MQlJFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01I
VE1MQmFzZUVsZW1lbnQgV2ViS2l0RE9NSFRNTEJhc2VFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxCYXNlRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxCYXNlRWxlbWVudENs
YXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEJvZHlFbGVtZW50IFdlYktpdERP
TUhUTUxCb2R5RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MQm9keUVsZW1l
bnRDbGFzcyBXZWJLaXRET01IVE1MQm9keUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50IFdlYktpdERPTUhUTUxCdXR0b25FbGVtZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxCdXR0b25FbGVtZW50Q2xhc3MgV2ViS2l0RE9N
SFRNTEJ1dHRvbkVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxD
YW52YXNFbGVtZW50IFdlYktpdERPTUhUTUxDYW52YXNFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxDYW52YXNFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTENhbnZhc0VsZW1l
bnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxDb2xsZWN0aW9uIFdlYktp
dERPTUhUTUxDb2xsZWN0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxDb2xsZWN0
aW9uQ2xhc3MgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxETGlzdEVsZW1lbnQgV2ViS2l0RE9NSFRNTERMaXN0RWxlbWVudDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRExpc3RFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRN
TERMaXN0RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTERpcmVj
dG9yeUVsZW1lbnQgV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NSFRNTERpcmVjdG9yeUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRGlyZWN0
b3J5RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTERpdkVsZW1l
bnQgV2ViS2l0RE9NSFRNTERpdkVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TERpdkVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRGl2RWxlbWVudENsYXNzOworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTERvY3VtZW50IFdlYktpdERPTUhUTUxEb2N1bWVudDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRG9jdW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRG9j
dW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxFbGVtZW50IFdlYktp
dERPTUhUTUxFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxFbGVtZW50Q2xh
c3MgV2ViS2l0RE9NSFRNTEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxFbWJlZEVsZW1lbnQgV2ViS2l0RE9NSFRNTEVtYmVkRWxlbWVudDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRET01IVE1MRW1iZWRFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEVtYmVkRWxl
bWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEZpZWxkU2V0RWxlbWVu
dCBXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxGaWVsZFNldEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRmllbGRTZXRFbGVtZW50Q2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRm9udEVsZW1lbnQgV2ViS2l0RE9N
SFRNTEZvbnRFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxGb250RWxlbWVu
dENsYXNzIFdlYktpdERPTUhUTUxGb250RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTEZvcm1FbGVtZW50IFdlYktpdERPTUhUTUxGb3JtRWxlbWVudDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MRm9ybUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRm9y
bUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxGcmFtZUVsZW1l
bnQgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01I
VE1MRnJhbWVFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEZyYW1lRWxlbWVudENsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEZyYW1lU2V0RWxlbWVudCBXZWJLaXRET01IVE1M
RnJhbWVTZXRFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxGcmFtZVNldEVs
ZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MRnJhbWVTZXRFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MSFJFbGVtZW50IFdlYktpdERPTUhUTUxIUkVsZW1lbnQ7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTEhSRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxI
UkVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxIZWFkRWxlbWVu
dCBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TEhlYWRFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTEhlYWRFbGVtZW50Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MSGVhZGluZ0VsZW1lbnQgV2ViS2l0RE9NSFRNTEhlYWRp
bmdFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudENs
YXNzIFdlYktpdERPTUhUTUxIZWFkaW5nRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTEh0bWxFbGVtZW50IFdlYktpdERPTUhUTUxIdG1sRWxlbWVudDsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MSHRtbEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MSHRt
bEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxJRnJhbWVFbGVt
ZW50IFdlYktpdERPTUhUTUxJRnJhbWVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TUhUTUxJRnJhbWVFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTElGcmFtZUVsZW1lbnRDbGFzczsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxJbWFnZUVsZW1lbnQgV2ViS2l0RE9NSFRN
TEltYWdlRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MSW1hZ2VFbGVtZW50
Q2xhc3MgV2ViS2l0RE9NSFRNTEltYWdlRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCBXZWJLaXRET01IVE1MSW5wdXRFbGVtZW50OwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxJbnB1dEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1M
SW5wdXRFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTElFbGVt
ZW50IFdlYktpdERPTUhUTUxMSUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TExJRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxMSUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUhUTUxMYWJlbEVsZW1lbnQgV2ViS2l0RE9NSFRNTExhYmVsRWxlbWVu
dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTGFiZWxFbGVtZW50Q2xhc3MgV2ViS2l0
RE9NSFRNTExhYmVsRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRN
TExlZ2VuZEVsZW1lbnQgV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NSFRNTExlZ2VuZEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MTGVnZW5kRWxl
bWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTExpbmtFbGVtZW50IFdl
YktpdERPTUhUTUxMaW5rRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTGlu
a0VsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MTGlua0VsZW1lbnRDbGFzczsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTUhUTUxNYXBFbGVtZW50IFdlYktpdERPTUhUTUxNYXBFbGVtZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNYXBFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRN
TE1hcEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNYXJxdWVl
RWxlbWVudCBXZWJLaXRET01IVE1MTWFycXVlZUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTE1hcnF1ZWVFbGVtZW50
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTWVudUVsZW1lbnQgV2ViS2l0
RE9NSFRNTE1lbnVFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNZW51RWxl
bWVudENsYXNzIFdlYktpdERPTUhUTUxNZW51RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NSFRNTE1ldGFFbGVtZW50IFdlYktpdERPTUhUTUxNZXRhRWxlbWVudDsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MTWV0YUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1M
TWV0YUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxNb2RFbGVt
ZW50IFdlYktpdERPTUhUTUxNb2RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhU
TUxNb2RFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTE1vZEVsZW1lbnRDbGFzczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPTGlzdEVsZW1lbnQgV2ViS2l0RE9NSFRNTE9MaXN0RWxl
bWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT0xpc3RFbGVtZW50Q2xhc3MgV2Vi
S2l0RE9NSFRNTE9MaXN0RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
SFRNTE9iamVjdEVsZW1lbnQgV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnQ7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RE9NSFRNTE9iamVjdEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MT2JqZWN0
RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTE9wdEdyb3VwRWxl
bWVudCBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dERPTUhUTUxPcHRHcm91cEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MT3B0R3JvdXBFbGVtZW50
Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT3B0aW9uRWxlbWVudCBXZWJL
aXRET01IVE1MT3B0aW9uRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT3B0
aW9uRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxPcHRpb25FbGVtZW50Q2xhc3M7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRET01IVE1MT3B0aW9uc0NvbGxlY3Rpb24gV2ViS2l0RE9NSFRNTE9w
dGlvbnNDb2xsZWN0aW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxPcHRpb25zQ29s
bGVjdGlvbkNsYXNzIFdlYktpdERPTUhUTUxPcHRpb25zQ29sbGVjdGlvbkNsYXNzOworCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVsZW1lbnQgV2ViS2l0RE9NSFRNTFBh
cmFncmFwaEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFBhcmFncmFwaEVs
ZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MUGFyYWdyYXBoRWxlbWVudENsYXNzOworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTFBhcmFtRWxlbWVudCBXZWJLaXRET01IVE1MUGFyYW1FbGVt
ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxQYXJhbUVsZW1lbnRDbGFzcyBXZWJL
aXRET01IVE1MUGFyYW1FbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01I
VE1MUHJlRWxlbWVudCBXZWJLaXRET01IVE1MUHJlRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRET01IVE1MUHJlRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxQcmVFbGVtZW50Q2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MUXVvdGVFbGVtZW50IFdlYktpdERPTUhU
TUxRdW90ZUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFF1b3RlRWxlbWVu
dENsYXNzIFdlYktpdERPTUhUTUxRdW90ZUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50IFdlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxTY3JpcHRFbGVtZW50Q2xhc3MgV2ViS2l0RE9N
SFRNTFNjcmlwdEVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxT
ZWxlY3RFbGVtZW50IFdlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxTdHlsZUVsZW1lbnQgV2Vi
S2l0RE9NSFRNTFN0eWxlRWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MU3R5
bGVFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFN0eWxlRWxlbWVudENsYXNzOworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgV2ViS2l0RE9NSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MVGFibGVDYXB0aW9uRWxlbWVudENsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgV2ViS2l0RE9N
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxl
Q2VsbEVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MVGFibGVDZWxsRWxlbWVudENsYXNzOworCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlQ29sRWxlbWVudCBXZWJLaXRET01IVE1M
VGFibGVDb2xFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUYWJsZUNvbEVs
ZW1lbnRDbGFzcyBXZWJLaXRET01IVE1MVGFibGVDb2xFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVFbGVtZW50IFdlYktpdERPTUhUTUxUYWJsZUVsZW1l
bnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlRWxlbWVudENsYXNzIFdlYktp
dERPTUhUTUxUYWJsZUVsZW1lbnRDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhU
TUxUYWJsZVJvd0VsZW1lbnQgV2ViS2l0RE9NSFRNTFRhYmxlUm93RWxlbWVudDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01IVE1MVGFibGVSb3dFbGVtZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFRh
YmxlUm93RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQgV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRDbGFzcyBXZWJLaXRET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
SFRNTFRleHRBcmVhRWxlbWVudCBXZWJLaXRET01IVE1MVGV4dEFyZWFFbGVtZW50OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxUZXh0QXJlYUVsZW1lbnRDbGFzcyBXZWJLaXRET01IVE1M
VGV4dEFyZWFFbGVtZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVGl0
bGVFbGVtZW50IFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RE9NSFRNTFRpdGxlRWxlbWVudENsYXNzIFdlYktpdERPTUhUTUxUaXRsZUVsZW1lbnRDbGFz
czsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTUhUTUxVTGlzdEVsZW1lbnQgV2ViS2l0RE9N
SFRNTFVMaXN0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01IVE1MVUxpc3RFbGVt
ZW50Q2xhc3MgV2ViS2l0RE9NSFRNTFVMaXN0RWxlbWVudENsYXNzOworCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NS2V5Ym9hcmRFdmVudCBXZWJLaXRET01LZXlib2FyZEV2ZW50OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdERPTUtleWJvYXJkRXZlbnRDbGFzcyBXZWJLaXRET01LZXlib2FyZEV2
ZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01NZWRpYUxpc3QgV2ViS2l0RE9N
TWVkaWFMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1lZGlhTGlzdENsYXNzIFdlYktp
dERPTU1lZGlhTGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTW91c2VFdmVu
dCBXZWJLaXRET01Nb3VzZUV2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU1vdXNlRXZl
bnRDbGFzcyBXZWJLaXRET01Nb3VzZUV2ZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRET01OYW1lZE5vZGVNYXAgV2ViS2l0RE9NTmFtZWROb2RlTWFwOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTU5hbWVkTm9kZU1hcENsYXNzIFdlYktpdERPTU5hbWVkTm9kZU1hcENsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZSBXZWJLaXRET01Ob2RlOwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTU5vZGVDbGFzcyBXZWJLaXRET01Ob2RlQ2xhc3M7CisKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRET01Ob2RlRmlsdGVyIFdlYktpdERPTU5vZGVGaWx0ZXI7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NTm9kZUZpbHRlcklmYWNlIFdlYktpdERPTU5vZGVGaWx0ZXJJZmFj
ZTsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU5vZGVJdGVyYXRvciBXZWJLaXRET01Ob2Rl
SXRlcmF0b3I7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NTm9kZUl0ZXJhdG9yQ2xhc3MgV2Vi
S2l0RE9NTm9kZUl0ZXJhdG9yQ2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ob2Rl
TGlzdCBXZWJLaXRET01Ob2RlTGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01Ob2RlTGlz
dENsYXNzIFdlYktpdERPTU5vZGVMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01PYmplY3QgV2ViS2l0RE9NT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTU9iamVj
dENsYXNzIFdlYktpdERPTU9iamVjdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
UHJvY2Vzc2luZ0luc3RydWN0aW9uIFdlYktpdERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DbGFzcyBXZWJLaXRE
T01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25DbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERP
TVJhbmdlIFdlYktpdERPTVJhbmdlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVJhbmdlQ2xh
c3MgV2ViS2l0RE9NUmFuZ2VDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVN0eWxl
U2hlZXQgV2ViS2l0RE9NU3R5bGVTaGVldDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01TdHls
ZVNoZWV0Q2xhc3MgV2ViS2l0RE9NU3R5bGVTaGVldENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RE9NU3R5bGVTaGVldExpc3QgV2ViS2l0RE9NU3R5bGVTaGVldExpc3Q7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RE9NU3R5bGVTaGVldExpc3RDbGFzcyBXZWJLaXRET01TdHlsZVNoZWV0
TGlzdENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVGV4dCBXZWJLaXRET01UZXh0
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVRleHRDbGFzcyBXZWJLaXRET01UZXh0Q2xhc3M7
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01UcmVlV2Fsa2VyIFdlYktpdERPTVRyZWVXYWxr
ZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NVHJlZVdhbGtlckNsYXNzIFdlYktpdERPTVRy
ZWVXYWxrZXJDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVVJRXZlbnQgV2ViS2l0
RE9NVUlFdmVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01VSUV2ZW50Q2xhc3MgV2ViS2l0
RE9NVUlFdmVudENsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NV2hlZWxFdmVudCBX
ZWJLaXRET01XaGVlbEV2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERPTVdoZWVsRXZlbnRD
bGFzcyBXZWJLaXRET01XaGVlbEV2ZW50Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
T01YUGF0aEV4cHJlc3Npb24gV2ViS2l0RE9NWFBhdGhFeHByZXNzaW9uOwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTVhQYXRoRXhwcmVzc2lvbkNsYXNzIFdlYktpdERPTVhQYXRoRXhwcmVzc2lv
bkNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyIFdlYktp
dERPTVhQYXRoTlNSZXNvbHZlcjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01YUGF0aE5TUmVz
b2x2ZXJJZmFjZSBXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXJJZmFjZTsKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdERPTVhQYXRoUmVzdWx0IFdlYktpdERPTVhQYXRoUmVzdWx0OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdERPTVhQYXRoUmVzdWx0Q2xhc3MgV2ViS2l0RE9NWFBhdGhSZXN1bHRDbGFz
czsKKworI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21hdXRvY2xlYW51cHMuaD4KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDIxMTAyYmIuLmFjYmE1YmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
R1RLLmNtYWtlCkBAIC00MjUsMTAgKzQyNSw4IEBAIGlmIChBUFBMRSkKICAgICBzZXQoRU5BQkxF
X0dUS0RPQyBPRkYpCiBlbmRpZiAoKQogCi1zZXQoREVSSVZFRF9TT1VSQ0VTX0dPQkpFQ1RfRE9N
X0JJTkRJTkdTX0RJUiAke0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdGRvbSkKIHNldChERVJJ
VkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUiAke0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdGd0
aykKIHNldChERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0FQSV9ESVIgJHtERVJJVkVEX1NPVVJD
RVNfV0VCS0lUR1RLX0RJUn0vd2Via2l0KQotc2V0KERFUklWRURfU09VUkNFU19HT0JKRUNUX0RP
TV9CSU5ESU5HU19ESVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS93ZWJraXRkb20pCiBzZXQoREVS
SVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vd2Via2l0
Mmd0aykKIHNldChERVJJVkVEX1NPVVJDRVNfV0VCS0lUMkdUS19BUElfRElSICR7REVSSVZFRF9T
T1VSQ0VTX1dFQktJVDJHVEtfRElSfS93ZWJraXQyKQogc2V0KEZPUldBUkRJTkdfSEVBREVSU19E
SVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS9Gb3J3YXJkaW5nSGVhZGVycykKZGlmZiAtLWdpdCBh
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5j
ZmcgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0
ZXIuY2ZnCmluZGV4IDhjYmI5NjYuLjQ4OGQ4MjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3Rlci5jZmcKKysrIGIvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyLmNmZwpAQCAt
NjMzLDM3ICs2MzMsNiBAQCBjbGFzcyBSdW5HdGtBUElUZXN0cyhzaGVsbC5UZXN0KToKIAogICAg
ICAgICByZXR1cm4gW3NlbGYubmFtZV0KIAotY2xhc3MgUnVuR3RrV2ViS2l0R09iamVjdERPTUJp
bmRpbmdzQVBJQnJlYWtUZXN0cyhzaGVsbC5UZXN0KToKLSAgICBuYW1lID0gIldlYktpdCBHT2Jq
ZWN0IERPTSBiaW5kaW5ncyBBUEkgYnJlYWsgdGVzdHMiCi0gICAgZGVzY3JpcHRpb24gPSBbIldl
YktpdCBHT2JqZWN0IERPTSBiaW5kaW5ncyBBUEkgYnJlYWsgdGVzdHMgcnVubmluZyJdCi0gICAg
ZGVzY3JpcHRpb25Eb25lID0gWyJXZWJLaXQgR09iamVjdCBET00gYmluZGluZ3MgQVBJIGJyZWFr
IHRlc3RzIl0KLSAgICBjb21tYW5kID0gWyIuL1Rvb2xzL2d0ay9jaGVjay1mb3Itd2Via2l0ZG9t
LWFwaS1icmVha3MiXQotCi0gICAgZGVmIGNvbW1hbmRDb21wbGV0ZShzZWxmLCBjbWQpOgotICAg
ICAgICBzaGVsbC5UZXN0LmNvbW1hbmRDb21wbGV0ZShzZWxmLCBjbWQpCi0KLSAgICAgICAgbG9n
VGV4dCA9IGNtZC5sb2dzWydzdGRpbyddLmdldFRleHQoKQotCi0gICAgICAgIHNlbGYubWlzc2lu
Z0FQSSA9IGJvb2wocmUuZmluZGFsbCgiTWlzc2luZyBBUEkiLCBsb2dUZXh0KSkKLSAgICAgICAg
c2VsZi5uZXdBUEkgPSBib29sKHJlLmZpbmRhbGwoIk5ldyBBUEkiLCBsb2dUZXh0KSkKLQotICAg
ICAgICBsaW5lID0gIiIKLSAgICAgICAgaWYgc2VsZi5uZXdBUEk6Ci0gICAgICAgICAgICBsaW5l
ICs9ICJGb3VuZCBuZXcgQVBJLiIKLSAgICAgICAgaWYgc2VsZi5taXNzaW5nQVBJOgotICAgICAg
ICAgICAgbGluZSArPSAiRm91bmQgbWlzc2luZyBBUEkuIgotICAgICAgICBpZiBsaW5lOgotICAg
ICAgICAgICAgc2VsZi5zdGF0dXNMaW5lID0gWyBsaW5lIF0KLQotICAgIGRlZiBldmFsdWF0ZUNv
bW1hbmQoc2VsZiwgY21kKToKLSAgICAgICAgaWYgc2VsZi5taXNzaW5nQVBJOgotICAgICAgICAg
ICAgcmV0dXJuIEZBSUxVUkUKLSAgICAgICAgaWYgc2VsZi5uZXdBUEk6Ci0gICAgICAgICAgICBy
ZXR1cm4gV0FSTklOR1MKLSAgICAgICAgaWYgY21kLnJjICE9IDA6Ci0gICAgICAgICAgICByZXR1
cm4gRkFJTFVSRQotICAgICAgICByZXR1cm4gU1VDQ0VTUwotCiBjbGFzcyBSdW5XZWJLaXQxVGVz
dHMoUnVuV2ViS2l0VGVzdHMpOgogICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAgc2VsZi5z
ZXRDb21tYW5kKHNlbGYuY29tbWFuZCArIFsiLS1kdW1wLXJlbmRlci10cmVlIl0pCkBAIC04NjMs
NyArODMyLDYgQEAgY2xhc3MgVGVzdEZhY3RvcnkoRmFjdG9yeSk6CiAgICAgICAgICAgICBzZWxm
LmFkZFN0ZXAoUnVuRWZsQVBJVGVzdHMoKSkKICAgICAgICAgaWYgcGxhdGZvcm0gPT0gImd0ayI6
CiAgICAgICAgICAgICBzZWxmLmFkZFN0ZXAoUnVuR3RrQVBJVGVzdHMoKSkKLSAgICAgICAgICAg
IHNlbGYuYWRkU3RlcChSdW5HdGtXZWJLaXRHT2JqZWN0RE9NQmluZGluZ3NBUElCcmVha1Rlc3Rz
KCkpCiAKIGNsYXNzIEJ1aWxkQW5kVGVzdEZhY3RvcnkoVGVzdEZhY3RvcnkpOgogICAgIGRlZiBn
ZXRQcm9kdWN0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVp
bGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyY2ZnX3VuaXR0ZXN0LnB5IGIvVG9vbHMvQnVpbGRT
bGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvbWFzdGVyY2ZnX3VuaXR0ZXN0LnB5
CmluZGV4IDJhZjM2MDEuLjJlOGFlNTkgMTAwNzU1Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL21hc3RlcmNmZ191bml0dGVzdC5weQorKysgYi9U
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9tYXN0ZXJjZmdf
dW5pdHRlc3QucHkKQEAgLTQxNSwxMyArNDE1LDEzIEBAIGV4cGVjdGVkX2J1aWxkX3N0ZXBzID0g
ewogICAgICdKU0NPbmx5IExpbnV4IEFSTXY3IFRyYWRpdGlvbmFsIFJlbGVhc2UnIDogWydjb25m
aWd1cmUgYnVpbGQnLCAnd2FpdC1mb3Itc3ZuLXNlcnZlcicsICdzdm4nLCAnZGVsZXRlIFdlYktp
dEJ1aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnY29tcGlsZS13
ZWJraXQnLCAnanNjb3JlLXRlc3QnXSwKICAgICAnSlNDT25seSBMaW51eCBBQXJjaDY0IFJlbGVh
c2UnIDogWydjb25maWd1cmUgYnVpbGQnLCAnd2FpdC1mb3Itc3ZuLXNlcnZlcicsICdzdm4nLCAn
ZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMn
LCAnY29tcGlsZS13ZWJraXQnLCAnanNjb3JlLXRlc3QnXSwKIAotICAgICdHVEsgTGludXggMzIt
Yml0IFJlbGVhc2UnIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tpbGwgb2xkIHByb2Nl
c3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBzdGFsZSBidWls
ZCBmaWxlcycsICdqaGJ1aWxkJywgJ2NvbXBpbGUtd2Via2l0JywgJ2pzY29yZS10ZXN0JywgJ3dl
YmtpdHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0JywgJ2JpbmRpbmdzLWdlbmVyYXRpb24tdGVz
dHMnLCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycsICdBUEkgdGVzdHMnLCAnV2ViS2l0IEdP
YmplY3QgRE9NIGJpbmRpbmdzIEFQSSBicmVhayB0ZXN0cyddLAorICAgICdHVEsgTGludXggMzIt
Yml0IFJlbGVhc2UnIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tpbGwgb2xkIHByb2Nl
c3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBzdGFsZSBidWls
ZCBmaWxlcycsICdqaGJ1aWxkJywgJ2NvbXBpbGUtd2Via2l0JywgJ2pzY29yZS10ZXN0JywgJ3dl
YmtpdHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0JywgJ2JpbmRpbmdzLWdlbmVyYXRpb24tdGVz
dHMnLCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycsICdBUEkgdGVzdHMnXSwKICAgICAnR1RL
IExpbnV4IDY0LWJpdCBEZWJ1ZyAoQnVpbGQpJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2bics
ICdraWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdk
ZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdjb21waWxlLXdlYmtpdCcsICdh
cmNoaXZlLWJ1aWx0LXByb2R1Y3QnLCAndXBsb2FkJywgJ3RyaWdnZXInXSwKLSAgICAnR1RLIExp
bnV4IDY0LWJpdCBEZWJ1ZyAoVGVzdHMpJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2bicsICdr
aWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScsICdkZWxl
dGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdkb3dubG9hZC1idWlsdC1wcm9kdWN0
JywgJ2V4dHJhY3QtYnVpbHQtcHJvZHVjdCcsICdqc2NvcmUtdGVzdCcsICdsYXlvdXQtdGVzdCcs
ICd3ZWJraXRweS10ZXN0JywgJ3dlYmtpdHBlcmwtdGVzdCcsICdiaW5kaW5ncy1nZW5lcmF0aW9u
LXRlc3RzJywgJ2J1aWx0aW5zLWdlbmVyYXRpb24tdGVzdHMnLCAnYXJjaGl2ZS10ZXN0LXJlc3Vs
dHMnLCAndXBsb2FkJywgJ01hc3RlclNoZWxsQ29tbWFuZCcsICdBUEkgdGVzdHMnLCAnV2ViS2l0
IEdPYmplY3QgRE9NIGJpbmRpbmdzIEFQSSBicmVhayB0ZXN0cyddLAorICAgICdHVEsgTGludXgg
NjQtYml0IERlYnVnIChUZXN0cyknIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywgJ2tpbGwg
b2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2RlbGV0ZSBz
dGFsZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2Rvd25sb2FkLWJ1aWx0LXByb2R1Y3QnLCAn
ZXh0cmFjdC1idWlsdC1wcm9kdWN0JywgJ2pzY29yZS10ZXN0JywgJ2xheW91dC10ZXN0JywgJ3dl
YmtpdHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0JywgJ2JpbmRpbmdzLWdlbmVyYXRpb24tdGVz
dHMnLCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycsICdhcmNoaXZlLXRlc3QtcmVzdWx0cycs
ICd1cGxvYWQnLCAnTWFzdGVyU2hlbGxDb21tYW5kJywgJ0FQSSB0ZXN0cyddLAogICAgICdHVEsg
TGludXggNjQtYml0IFJlbGVhc2UgKEJ1aWxkKScgOiBbJ2NvbmZpZ3VyZSBidWlsZCcsICdzdm4n
LCAna2lsbCBvbGQgcHJvY2Vzc2VzJywgJ2RlbGV0ZSBXZWJLaXRCdWlsZCBkaXJlY3RvcnknLCAn
ZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywgJ2poYnVpbGQnLCAnY29tcGlsZS13ZWJraXQnLCAn
YXJjaGl2ZS1idWlsdC1wcm9kdWN0JywgJ3VwbG9hZCcsICd0cmlnZ2VyJ10sCiAgICAgJ0dUSyBM
aW51eCA2NC1iaXQgUmVsZWFzZSAoUGVyZiknIDogWydjb25maWd1cmUgYnVpbGQnLCAnc3ZuJywg
J2tpbGwgb2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0b3J5JywgJ2Rl
bGV0ZSBzdGFsZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2Rvd25sb2FkLWJ1aWx0LXByb2R1
Y3QnLCAnZXh0cmFjdC1idWlsdC1wcm9kdWN0JywgJ3BlcmYtdGVzdCcsICdiZW5jaG1hcmstdGVz
dCddLAotICAgICdHVEsgTGludXggNjQtYml0IFJlbGVhc2UgKFRlc3RzKScgOiBbJ2NvbmZpZ3Vy
ZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJvY2Vzc2VzJywgJ2RlbGV0ZSBXZWJLaXRCdWls
ZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywgJ2poYnVpbGQnLCAnZG93
bmxvYWQtYnVpbHQtcHJvZHVjdCcsICdleHRyYWN0LWJ1aWx0LXByb2R1Y3QnLCAnanNjb3JlLXRl
c3QnLCAnbGF5b3V0LXRlc3QnLCAnd2Via2l0cHktdGVzdCcsICd3ZWJraXRwZXJsLXRlc3QnLCAn
YmluZGluZ3MtZ2VuZXJhdGlvbi10ZXN0cycsICdidWlsdGlucy1nZW5lcmF0aW9uLXRlc3RzJywg
J2FyY2hpdmUtdGVzdC1yZXN1bHRzJywgJ3VwbG9hZCcsICdNYXN0ZXJTaGVsbENvbW1hbmQnLCAn
QVBJIHRlc3RzJywgJ1dlYktpdCBHT2JqZWN0IERPTSBiaW5kaW5ncyBBUEkgYnJlYWsgdGVzdHMn
XSwKLSAgICAnR1RLIExpbnV4IEFSTSBSZWxlYXNlJyA6IFsnY29uZmlndXJlIGJ1aWxkJywgJ3N2
bicsICdraWxsIG9sZCBwcm9jZXNzZXMnLCAnZGVsZXRlIFdlYktpdEJ1aWxkIGRpcmVjdG9yeScs
ICdkZWxldGUgc3RhbGUgYnVpbGQgZmlsZXMnLCAnamhidWlsZCcsICdjb21waWxlLXdlYmtpdCcs
ICdqc2NvcmUtdGVzdCcsICd3ZWJraXRweS10ZXN0JywgJ3dlYmtpdHBlcmwtdGVzdCcsICdiaW5k
aW5ncy1nZW5lcmF0aW9uLXRlc3RzJywgJ2J1aWx0aW5zLWdlbmVyYXRpb24tdGVzdHMnLCAnQVBJ
IHRlc3RzJywgJ1dlYktpdCBHT2JqZWN0IERPTSBiaW5kaW5ncyBBUEkgYnJlYWsgdGVzdHMnXSwK
KyAgICAnR1RLIExpbnV4IDY0LWJpdCBSZWxlYXNlIChUZXN0cyknIDogWydjb25maWd1cmUgYnVp
bGQnLCAnc3ZuJywgJ2tpbGwgb2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGly
ZWN0b3J5JywgJ2RlbGV0ZSBzdGFsZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2Rvd25sb2Fk
LWJ1aWx0LXByb2R1Y3QnLCAnZXh0cmFjdC1idWlsdC1wcm9kdWN0JywgJ2pzY29yZS10ZXN0Jywg
J2xheW91dC10ZXN0JywgJ3dlYmtpdHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0JywgJ2JpbmRp
bmdzLWdlbmVyYXRpb24tdGVzdHMnLCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycsICdhcmNo
aXZlLXRlc3QtcmVzdWx0cycsICd1cGxvYWQnLCAnTWFzdGVyU2hlbGxDb21tYW5kJywgJ0FQSSB0
ZXN0cyddLAorICAgICdHVEsgTGludXggQVJNIFJlbGVhc2UnIDogWydjb25maWd1cmUgYnVpbGQn
LCAnc3ZuJywgJ2tpbGwgb2xkIHByb2Nlc3NlcycsICdkZWxldGUgV2ViS2l0QnVpbGQgZGlyZWN0
b3J5JywgJ2RlbGV0ZSBzdGFsZSBidWlsZCBmaWxlcycsICdqaGJ1aWxkJywgJ2NvbXBpbGUtd2Vi
a2l0JywgJ2pzY29yZS10ZXN0JywgJ3dlYmtpdHB5LXRlc3QnLCAnd2Via2l0cGVybC10ZXN0Jywg
J2JpbmRpbmdzLWdlbmVyYXRpb24tdGVzdHMnLCAnYnVpbHRpbnMtZ2VuZXJhdGlvbi10ZXN0cycs
ICdBUEkgdGVzdHMnXSwKIAogICAgICdXaW5DYWlybyA2NC1CaXQgUmVsZWFzZScgOiBbJ2NvbmZp
Z3VyZSBidWlsZCcsICdzdm4nLCAna2lsbCBvbGQgcHJvY2Vzc2VzJywgJ2RlbGV0ZSBXZWJLaXRC
dWlsZCBkaXJlY3RvcnknLCAnZGVsZXRlIHN0YWxlIGJ1aWxkIGZpbGVzJywgJ2NvbXBpbGUtd2Vi
a2l0J10sCiB9CkBAIC00NTQsNTEgKzQ1NCw2IEBAIGNsYXNzIEJ1aWxkU3RlcHNUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShidWlsZGVyIGluIGJ1
aWxkZXJzLCAiQnVpbGRlciAlcyBkb2Vzbid0IGV4aXN0LCBidXQgaGFzIHVubmVjZXNzYXJ5IGV4
cGVjdGVkIHJlc3VsdHMiICUgYnVpbGRlcikKIAogCi1jbGFzcyBSdW5HdGtXZWJLaXRHT2JqZWN0
RE9NQmluZGluZ3NBUElCcmVha1Rlc3RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVm
IGFzc2VydFJlc3VsdHMoc2VsZiwgZXhwZWN0ZWRfbWlzc2luZywgZXhwZWN0ZWRfbmV3LCBzdGRp
byk6Ci0gICAgICAgIGV4cGVjdGVkX3RleHQgPSAiIgotICAgICAgICBleHBlY3RlZF9yZXN1bHRz
ID0gU1VDQ0VTUwotICAgICAgICBpZiBleHBlY3RlZF9uZXc6Ci0gICAgICAgICAgICBleHBlY3Rl
ZF9yZXN1bHRzID0gV0FSTklOR1MKLSAgICAgICAgaWYgZXhwZWN0ZWRfbWlzc2luZzoKLSAgICAg
ICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSBGQUlMVVJFCi0KLSAgICAgICAgY21kID0gU3R1YlJl
bW90ZUNvbW1hbmQoMCwgc3RkaW8pCi0gICAgICAgIHN0ZXAgPSBSdW5HdGtXZWJLaXRHT2JqZWN0
RE9NQmluZGluZ3NBUElCcmVha1Rlc3RzKCkKLSAgICAgICAgc3RlcC5jb21tYW5kQ29tcGxldGUo
Y21kKQotCi0gICAgICAgIGFjdHVhbF9yZXN1bHRzID0gc3RlcC5ldmFsdWF0ZUNvbW1hbmQoY21k
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3Jlc3VsdHMsIGFjdHVhbF9yZXN1
bHRzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX21pc3NpbmcsIHN0ZXAubWlz
c2luZ0FQSSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9uZXcsIHN0ZXAubmV3
QVBJKQotCi0gICAgZGVmIHRlc3RfbWlzc2luZ19hbmRfbmV3X2FwaShzZWxmKToKLSAgICAgICAg
c2VsZi5hc3NlcnRSZXN1bHRzKGV4cGVjdGVkX21pc3Npbmc9VHJ1ZSwgZXhwZWN0ZWRfbmV3PVRy
dWUsIHN0ZGlvPSIiIk1pc3NpbmcgQVBJIChBUEkgYnJlYWshKSBkZXRlY3RlZCBpbiBHT2JqZWN0
IERPTSBiaW5kaW5ncwotICAgIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50
X2dldF93ZWJraXRkaXJlY3RvcnkoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCopCi0gICAgZ2No
YXIqIHdlYmtpdF9kb21fdGV4dF90cmFja19jdWVfZ2V0X3RleHQoV2ViS2l0RE9NVGV4dFRyYWNr
Q3VlKikKLQotTmV3IEFQSSBkZXRlY3RlZCBpbiBHT2JqZWN0IERPTSBiaW5kaW5ncwotICAgIHZv
aWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X2NhcHR1cmUoV2ViS2l0RE9NSFRN
TElucHV0RWxlbWVudCosIGdib29sZWFuKQotICAgIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9p
bnB1dF9lbGVtZW50X2dldF9jYXB0dXJlKFdlYktpdERPTUhUTUxJbnB1dEVsZW1lbnQqKQotICAg
IHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNrX2FkZF9jdWUoV2ViS2l0RE9NVGV4dFRyYWNrKiwg
V2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiwgR0Vycm9yKiopCi0gICAgZ2NoYXIqIHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X29yaWdpbihXZWJLaXRET01Eb2N1bWVudCopIiIiKQotCi0gICAgZGVmIHRl
c3RfbWlzc2luZ19hcGkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmVzdWx0cyhleHBlY3Rl
ZF9taXNzaW5nPVRydWUsIGV4cGVjdGVkX25ldz1GYWxzZSwgc3RkaW89IiIiTWlzc2luZyBBUEkg
KEFQSSBicmVhayEpIGRldGVjdGVkIGluIEdPYmplY3QgRE9NIGJpbmRpbmdzCi0gICAgZ2Jvb2xl
YW4gd2Via2l0X2RvbV9odG1sX2lucHV0X2VsZW1lbnRfZ2V0X3dlYmtpdGRpcmVjdG9yeShXZWJL
aXRET01IVE1MSW5wdXRFbGVtZW50KikKLSAgICBnY2hhciogd2Via2l0X2RvbV90ZXh0X3RyYWNr
X2N1ZV9nZXRfdGV4dChXZWJLaXRET01UZXh0VHJhY2tDdWUqKSIiIikKLQotICAgIGRlZiB0ZXN0
X25ld19hcGkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmVzdWx0cyhleHBlY3RlZF9taXNz
aW5nPUZhbHNlLCBleHBlY3RlZF9uZXc9VHJ1ZSwgc3RkaW89IiIiTmV3IEFQSSBkZXRlY3RlZCBp
biBHT2JqZWN0IERPTSBiaW5kaW5ncwotICAgIHZvaWQgd2Via2l0X2RvbV9odG1sX2lucHV0X2Vs
ZW1lbnRfc2V0X2NhcHR1cmUoV2ViS2l0RE9NSFRNTElucHV0RWxlbWVudCosIGdib29sZWFuKQot
ICAgIGdib29sZWFuIHdlYmtpdF9kb21faHRtbF9pbnB1dF9lbGVtZW50X2dldF9jYXB0dXJlKFdl
YktpdERPTUhUTUxJbnB1dEVsZW1lbnQqKQotICAgIHZvaWQgd2Via2l0X2RvbV90ZXh0X3RyYWNr
X2FkZF9jdWUoV2ViS2l0RE9NVGV4dFRyYWNrKiwgV2ViS2l0RE9NVGV4dFRyYWNrQ3VlKiwgR0Vy
cm9yKiopCi0gICAgZ2NoYXIqIHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X29yaWdpbihXZWJLaXRE
T01Eb2N1bWVudCopIiIiKQotCi0gICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKLSAgICAgICAg
c2VsZi5hc3NlcnRSZXN1bHRzKGV4cGVjdGVkX21pc3Npbmc9RmFsc2UsIGV4cGVjdGVkX25ldz1G
YWxzZSwgc3RkaW89IiIpCi0KLQogY2xhc3MgUnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2VydFJlc3VsdHMoc2VsZiwgcmMsIGV4cGVjdGVk
X3RleHQpOgogICAgICAgICBjbWQgPSBTdHViUmVtb3RlQ29tbWFuZChyYywgZXhwZWN0ZWRfdGV4
dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBl
YmFjYWJmLi5kOWYyM2JjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTYtMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgR09iamVjdCBE
T00gYmluZGluZ3MgdG8gV2ViS2l0MiBsYXllciBhbmQgc3RvcCBhdXRvIGdlbmVyYXRpbmcgdGhl
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxNDM4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBDYXRhbnphcm8uCisKKyAgICAgICAgUmVt
b3ZlIHNjcmlwdHMgcmVsYXRlZCB0byB0aGUgR09iamVjdCBET00gYmluZGluZ3MgYXV0by1nZW5l
cmF0aW9uLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvbWFzdGVyLmNmZzoKKyAgICAgICAgKFJ1bkd0a0FQSVRlc3RzLmdldFRleHQyKToKKyAg
ICAgICAgKFRlc3RGYWN0b3J5Ll9faW5pdF9fKToKKyAgICAgICAgKFJ1bldlYktpdDFUZXN0cyk6
IERlbGV0ZWQuCisgICAgICAgIChSdW5XZWJLaXQxVGVzdHMuc3RhcnQpOiBEZWxldGVkLgorICAg
ICAgICAoUnVuV2ViS2l0MUxlYWtUZXN0cyk6IERlbGV0ZWQuCisgICAgICAgIChSdW5XZWJLaXQx
TGVha1Rlc3RzLnN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0
cyk6IERlbGV0ZWQuCisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJmVGVzdHMuc3RhcnQpOiBEZWxl
dGVkLgorICAgICAgICAoQnVpbGRBbmRSZW1vdGVKU0NUZXN0c0ZhY3RvcnkuX19pbml0X18pOiBE
ZWxldGVkLgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL21hc3RlcmNmZ191bml0dGVzdC5weToKKyAgICAgICAgKEJ1aWxkU3RlcHNUZXN0LnRlc3Rf
dW5uZWNlc3NhcnlfZXhwZWN0ZWRfcmVzdWx0cyk6CisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJm
VGVzdHNUZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3Qu
YXNzZXJ0UmVzdWx0cyk6IERlbGV0ZWQuCisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJmVGVzdHNU
ZXN0LnRlc3Rfc3VjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJmVGVz
dHNUZXN0LnRlc3RfdGVzdHNfZmFpbGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9h
ZFBlcmZUZXN0c1Rlc3QudGVzdF9idWlsZF9iYWRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAo
UnVuQW5kVXBsb2FkUGVyZlRlc3RzVGVzdC50ZXN0X2J1aWxkX2JhZF9zb3VyY2VfanNvbik6IERl
bGV0ZWQuCisgICAgICAgIChSdW5BbmRVcGxvYWRQZXJmVGVzdHNUZXN0LnRlc3RfYnVpbGRfYmFk
X21hcmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3QudGVz
dF9idWlsZF9iYWRfZmFpbGVkX3VwbG9hZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChSdW5BbmRV
cGxvYWRQZXJmVGVzdHNUZXN0LnRlc3RfYnVpbGRfYmFkX3ByZXBhcmF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFJ1bkFuZFVwbG9hZFBlcmZUZXN0c1Rlc3QudGVzdF9idWlsZGJvdF90aW1lb3V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFJ1bkJlbmNobWFya1Rlc3QpOiBEZWxldGVkLgorICAgICAg
ICAoUnVuQmVuY2htYXJrVGVzdC5hc3NlcnRSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKFJ1
bkJlbmNobWFya1Rlc3QudGVzdF9zdWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3J1bi1iaW5kaW5ncy10ZXN0czoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKyAgICAgICAgKiBndGsvY2hlY2stZm9yLXdlYmtp
dGRvbS1hcGktYnJlYWtzOiBSZW1vdmVkLgorICAgICAgICAqIGd0ay9nZW5lcmF0ZS1ndGtkb2M6
CisgICAgICAgICogZ3RrL3dlYmtpdGRvbS5weTogUmVtb3ZlZC4KKwogMjAxNi0wOC0zMSAgR3l1
eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF0gU21h
bGwgY2xlYW4gdXAgaW4gTWluaUJyb3dzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVu
LWJpbmRpbmdzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMKaW5kZXgg
ZmMyMGFmZS4uZmRlOTA1MSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3Mt
dGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tYmluZGluZ3MtdGVzdHMKQEAgLTQyLDEwICs0
Miw3IEBAIGRlZiBtYWluKGFyZ3YpOgogICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNldC1yZXN1
bHRzIiBpbiBhcmd2CiAgICAgdmVyYm9zZSA9IG5vdCAiLS1uby12ZXJib3NlIiBpbiBhcmd2CiAK
LSAgICBnZW5lcmF0b3JzID0gWwotICAgICAgICAnSlMnLAotICAgICAgICAnR09iamVjdCcKLSAg
ICBdCisgICAgZ2VuZXJhdG9ycyA9IFsgJ0pTJyBdCiAKICAgICBmcm9tIHdlYmtpdHB5LmJpbmRp
bmdzLm1haW4gaW1wb3J0IEJpbmRpbmdzVGVzdHMKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyLnB5CmluZGV4IDA5YmE0MDcuLjliN2JkMTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTE0NSwyNSArMTQ1LDYgQEAgX1BBVEhfUlVMRVNfU1BF
Q0lGSUVSID0gWwogICAgICAgb3MucGF0aC5qb2luKCdUb29scycsICdUZXN0V2ViS2l0QVBJJyld
LAogICAgICBbIi1yZWFkYWJpbGl0eS9uYW1pbmciXSksCiAKLSAgICAoWyMgVGhlIEdUSysgQVBJ
cyB1c2UgR1RLKyBuYW1pbmcgc3R5bGUsIHdoaWNoIGluY2x1ZGVzCi0gICAgICAjIGxvd2VyLWNh
c2VkLCB1bmRlcnNjb3JlLXNlcGFyYXRlZCB2YWx1ZXMsIHdoaXRlc3BhY2UgYmVmb3JlCi0gICAg
ICAjIHBhcmVucyBmb3IgZnVuY3Rpb24gY2FsbHMsIGFuZCBhbHdheXMgaGF2aW5nIHZhcmlhYmxl
IG5hbWVzLgotICAgICAgIyBBbHNvLCBHVEsrIGFsbG93cyB0aGUgdXNlIG9mIE5VTEwuCi0gICAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3Qn
LCAnV2ViS2l0RE9NQ3VzdG9tLmgnKSwKLSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dl
YkNvcmUnLCAnYmluZGluZ3MnLCAnZ29iamVjdCcsICdXZWJLaXRET01EZXByZWNhdGVkLmgnKSwK
LSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnZ29i
amVjdCcsICdXZWJLaXRET01FdmVudFRhcmdldC5oJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NTm9kZUZp
bHRlci5oJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRp
bmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NWFBhdGhOU1Jlc29sdmVyLmgnKSwKLSAgICAgIG9z
LnBhdGguam9pbignU291cmNlJywgJ1dlYktpdCcsICdndGsnLCAnd2Via2l0JyksCi0gICAgICBv
cy5wYXRoLmpvaW4oJ1Rvb2xzJywgJ0R1bXBSZW5kZXJUcmVlJywgJ2d0aycpXSwKLSAgICAgWyIt
cmVhZGFiaWxpdHkvbmFtaW5nIiwKLSAgICAgICItcmVhZGFiaWxpdHkvcGFyYW1ldGVyX25hbWUi
LAotICAgICAgIi1yZWFkYWJpbGl0eS9udWxsIiwKLSAgICAgICItcmVhZGFiaWxpdHkvZW51bV9j
YXNpbmciLAotICAgICAgIi13aGl0ZXNwYWNlL2RlY2xhcmF0aW9uIiwKLSAgICAgICItd2hpdGVz
cGFjZS9pbmRlbnQiLAotICAgICAgIi13aGl0ZXNwYWNlL3BhcmVucyJdKSwKLQogICAgIChbIyBU
aGUgR1RLKyBBUEkgdXNlIHVwcGVyIGNhc2UsIHVuZGVyc2NvcmUgc2VwYXJhdGVkLCB3b3JkcyBp
bgogICAgICAgIyBjZXJ0YWluIHR5cGVzIG9mIGVudW1zIChlLmcuIHNpZ25hbHMsIHByb3BlcnRp
ZXMpLgogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nlc3Mn
LCAnQVBJJywgJ2d0aycpLApAQCAtMjI0LDExICsyMDUsNiBAQCBfUEFUSF9SVUxFU19TUEVDSUZJ
RVIgPSBbCiAgICAgICAiLXdoaXRlc3BhY2UvZGVjbGFyYXRpb24iXSksCiAgICAgKFsjIFRoZXNl
IGZpbGVzIGRlZmluZSBHT2JqZWN0cywgd2hpY2ggaW1wbGllcyBzb21lIGRlZmluaXRpb25zIG9m
CiAgICAgICAjIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMu
Ci0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dv
YmplY3QnLCAnV2ViS2l0RE9NQ3VzdG9tLmNwcCcpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViQ29yZScsICdiaW5kaW5ncycsICdnb2JqZWN0JywgJ1dlYktpdERPTURlcHJlY2F0
ZWQuY3BwJyksCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRp
bmdzJywgJ2dvYmplY3QnLCAnV2ViS2l0RE9NRXZlbnRUYXJnZXQuY3BwJyksCi0gICAgICBvcy5w
YXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdzJywgJ2dvYmplY3QnLCAnV2Vi
S2l0RE9NTm9kZUZpbHRlci5jcHAnKSwKLSAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dl
YkNvcmUnLCAnYmluZGluZ3MnLCAnZ29iamVjdCcsICdXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXIu
Y3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3Jt
JywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdWaWRlb1NpbmtHU3RyZWFtZXIuY3BwJyksCiAg
ICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBo
aWNzJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwJyksCiAgICAg
ICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2F1ZGlvJywg
J2dzdHJlYW1lcicsICdXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAnKSwKQEAgLTMy
Niw2ICszMDIsOSBAQCBfU0tJUFBFRF9GSUxFU19XSVRIX1dBUk5JTkcgPSBbCiAgICAgcmUuY29t
cGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nl
c3MnLCAnQVBJJywgJ2d0aycpICsgb3MucGF0aC5zZXApICsgcidXZWJLaXQoPyEuKlByaXZhdGVc
LmgpLipcLmgkJyksCiAgICAgcmUuY29tcGlsZShyZS5lc2NhcGUob3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViS2l0MicsICdXZWJQcm9jZXNzJywgJ0luamVjdGVkQnVuZGxlJywgJ0FQSScsICdn
dGsnKSArIG9zLnBhdGguc2VwKSArIHInV2ViS2l0KD8hLipQcml2YXRlXC5oKS4qXC5oJCcpLAog
CisgICAgIyBHT2JqZWN0IERPTSBiaW5kaW5ncyBjb3BpZWQgZnJvbSBnZW5lcmF0ZWQgY29kZSB1
c2luZyBkaWZmZXJlbnQgY29kaW5nIHN0eWxlLgorICAgIG9zLnBhdGguam9pbignU291cmNlJywg
J1dlYktpdDInLCAnV2ViUHJvY2VzcycsICdJbmplY3RlZEJ1bmRsZScsICdBUEknLCAnZ3RrJywg
J0RPTScpLAorCiAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViS2l0MicsICdVSVByb2Nl
c3MnLCAnQVBJJywgJ2d0aycsICd3ZWJraXQyLmgnKSwKICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdXZWJLaXQyJywgJ1dlYlByb2Nlc3MnLCAnSW5qZWN0ZWRCdW5kbGUnLCAnQVBJJywgJ2d0
aycsICd3ZWJraXQtd2ViLWV4dGVuc2lvbi5oJyldCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9j
aGVjay1mb3Itd2Via2l0ZG9tLWFwaS1icmVha3MgYi9Ub29scy9ndGsvY2hlY2stZm9yLXdlYmtp
dGRvbS1hcGktYnJlYWtzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiMjM1NGYxLi4w
MDAwMDAwCi0tLSBhL1Rvb2xzL2d0ay9jaGVjay1mb3Itd2Via2l0ZG9tLWFwaS1icmVha3MKKysr
IC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IElnYWxpYSBTLkwuCi0jIENvcHlyaWdodCAoQykgMjAxMyBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0jCi0jIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotIyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
IyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotCi1pbXBvcnQgY29tbW9uCi1p
bXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB3ZWJraXRkb20KLQotRVhQRUNURURfQVBJX1BB
VEggPSBjb21tb24udG9wX2xldmVsX3BhdGgoJ1NvdXJjZScsICdXZWJDb3JlJywgJ2JpbmRpbmdz
JywgJ2dvYmplY3QnLCAnd2Via2l0ZG9tLnN5bWJvbHMnKQotCi1kZWYgcmVhZF9idWlsdF9hcGko
KToKLSAgICBhcGlzID0gc2V0KCkKLSAgICBmb3IgZmlsZV9wYXRoIGluIHdlYmtpdGRvbS5nZXRf
YWxsX3dlYmtpdGRvbV9zeW1ib2xfZmlsZXMoKToKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0
aCkgYXMgZmlsZV9oYW5kbGU6Ci0gICAgICAgICAgICBhcGlzLnVwZGF0ZShzZXQoZmlsZV9oYW5k
bGUucmVhZGxpbmVzKCkpKQotICAgIHJldHVybiBhcGlzCi0KLWRlZiByZWFkX2V4cGVjdGVkX2Fw
aSgpOgotICAgIHdpdGggb3BlbihFWFBFQ1RFRF9BUElfUEFUSCkgYXMgZmlsZV9oYW5kbGU6Ci0g
ICAgICAgIHJldHVybiBzZXQoW3N5bWJvbC5zdHJpcCgnXG4nKS5zcGxpdCgnQCcsIDEpWzBdICsg
J1xuJyBmb3Igc3ltYm9sIGluIGZpbGVfaGFuZGxlLnJlYWRsaW5lcygpXSkKLQotZGVmIGNoZWNr
X2FwaShleHBlY3RlZF9hcGksIGJ1aWx0X2FwaSk6Ci0gICAgbWlzc2luZ19hcGkgPSBleHBlY3Rl
ZF9hcGkuZGlmZmVyZW5jZShidWlsdF9hcGkpCi0gICAgbmV3X2FwaSA9IGJ1aWx0X2FwaS5kaWZm
ZXJlbmNlKGV4cGVjdGVkX2FwaSkKLQotICAgIGlmIG1pc3NpbmdfYXBpOgotICAgICAgICBzeXMu
c3RkZXJyLndyaXRlKCJNaXNzaW5nIEFQSSAoQVBJIGJyZWFrISkgZGV0ZWN0ZWQgaW4gR09iamVj
dCBET00gYmluZGluZ3NcbiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiAgICAlc1xuIiAl
ICIgICAgIi5qb2luKG1pc3NpbmdfYXBpKSkKLSAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0K
LSAgICBpZiBuZXdfYXBpOgotICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJOZXcgQVBJIGRldGVj
dGVkIGluIEdPYmplY3QgRE9NIGJpbmRpbmdzXG4iKQotICAgICAgICBzeXMuc3Rkb3V0LndyaXRl
KCIgICAgJXNcbiIgJSAiICAgICIuam9pbihuZXdfYXBpKSkKLQotICAgIGlmIG1pc3NpbmdfYXBp
OgotICAgICAgICAjIFRoaXMgdGVzdCBjYW4gZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgYmVjYXVzZSB0
aGUgR09iamVjdAotICAgICAgICAjIERPTSBiaW5kaW5ncyBBUEkgdmFyaWVzIGRlcGVuZGluZyBv
biB0aGUgY29tcGlsYXRpb24gb3B0aW9ucy4KLSAgICAgICAgIyBTbyB0aGlzIHNob3VsZG4ndCBi
ZSBtYWRlIGZhdGFsIHVudGlsIHdlIGZpZ3VyZSBvdXQgYSB3YXkgdG8gaGFuZGxlIGl0LgotICAg
ICAgICAjIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNDgx
Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBpZiBuZXdfYXBpOgotICAgICAgICBzeXMuc3Rkb3V0
LndyaXRlKCJBUEkgY29tcGF0aWJsZSBjaGFuZ2VzIGZvdW5kIGluIEdPYmplY3QgRE9NIGJpbmRp
bmdzLlxuIikKLQotICAgIHJldHVybiAwCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0g
ICAgc3lzLmV4aXQoY2hlY2tfYXBpKHJlYWRfZXhwZWN0ZWRfYXBpKCksIHJlYWRfYnVpbHRfYXBp
KCkpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYyBiL1Rvb2xzL2d0ay9n
ZW5lcmF0ZS1ndGtkb2MKaW5kZXggNzA0NGQyYS4uMmFiZDk1YiAxMDA3NTUKLS0tIGEvVG9vbHMv
Z3RrL2dlbmVyYXRlLWd0a2RvYworKysgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCkBAIC0y
Niw3ICsyNiw2IEBAIGltcG9ydCBndGtkb2MKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MucGF0
aAogaW1wb3J0IHN5cwotaW1wb3J0IHdlYmtpdGRvbQogCiBzeXMuc3Rkb3V0ID0gY29kZWNzLmdl
dHdyaXRlcigidXRmLTgiKShzeXMuc3Rkb3V0KQogc3lzLnN0ZGVyciA9IGNvZGVjcy5nZXR3cml0
ZXIoInV0Zi04Iikoc3lzLnN0ZGVycikKQEAgLTE5Nyw3ICsxOTYsNiBAQCBpZiBfX25hbWVfXyA9
PSAiX19tYWluX18iOgogICAgIGlmIG5vdCB3ZWJraXRkb21fZ2VuZXJhdG9yOgogICAgICAgICBw
cmludCgiZ3RrZG9jLXdlYmtpdGRvbS5jZmcgZG9lcyBub3QgZXhpc3QhIFNraXBwaW5nIHRoYXQg
ZG9jdW1lbnRhdGlvbiIpCiAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgd2Via2l0ZG9tLndyaXRl
X2RvY19maWxlcyh3ZWJraXRkb21fZ2VuZXJhdG9yLm1vZHVsZV9uYW1lKQogICAgIHNhd193YXJu
aW5ncyA9IGdlbmVyYXRlX2RvY3VtZW50YXRpb24od2Via2l0ZG9tX2dlbmVyYXRvcikKICAgICBp
ZiBzYXdfd2FybmluZ3M6CiAgICAgICAgIHN5cy5leGl0KHNhd193YXJuaW5ncykKZGlmZiAtLWdp
dCBhL1Rvb2xzL2d0ay93ZWJraXRkb20ucHkgYi9Ub29scy9ndGsvd2Via2l0ZG9tLnB5CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxNGZkOWIxLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2d0
ay93ZWJraXRkb20ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgotIwotIyBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0jIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0jIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0jIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0j
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKLSMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEgIFVTQQotCi1pbXBv
cnQgY29tbW9uCi1pbXBvcnQgZXJybm8KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lz
Ci0KLWZyb20gQ29uZmlnUGFyc2VyIGltcG9ydCBTYWZlQ29uZmlnUGFyc2VyCi0KLQotY2xhc3Mg
V2ViS2l0RE9NRG9jR2VuZXJhdG9yKG9iamVjdCk6Ci0KLSAgICBERUxFVEVEX0NMQVNTRVMgPSBb
IldlYktpdERPTUVudGl0eVJlZmVyZW5jZSIsICJXZWJLaXRET01IVE1MQmFzZUZvbnRFbGVtZW50
Il0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeW1ib2xfZmlsZXMsIGZpbGVfaGFuZGxlKToK
LSAgICAgICAgc2VsZi5fc3ltYm9sX2ZpbGVzID0gc3ltYm9sX2ZpbGVzCi0gICAgICAgIHNlbGYu
X2ZpbGVfaGFuZGxlID0gZmlsZV9oYW5kbGUKLQotICAgIGRlZiB3cml0ZV9oZWFkZXIoc2VsZik6
Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiB3cml0ZV9zZWN0aW9uKHNlbGYsIHN5bWJvbF9maWxl
KToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIHdyaXRlX2Rl
bGV0ZWRfY2xhc3NlcyhzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgot
Ci0gICAgZGVmIHdyaXRlX2Zvb3RlcihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHdy
aXRlKHNlbGYsIHN0cmluZyk6Ci0gICAgICAgIHNlbGYuX2ZpbGVfaGFuZGxlLndyaXRlKHN0cmlu
ZykKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgaXNfZGVwcmVjYXRlZF9zeW1ib2xfZmls
ZShmaWxlX3BhdGgpOgotICAgICAgICByZXR1cm4gJ1dlYktpdERPTURlcHJlY2F0ZWQnIGluIGZp
bGVfcGF0aAotCi0gICAgZGVmIGdlbmVyYXRlKHNlbGYpOgotICAgICAgICBzZWxmLndyaXRlX2hl
YWRlcigpCi0gICAgICAgIGZvciBzeW1ib2xfZmlsZSBpbiBzZWxmLl9zeW1ib2xfZmlsZXM6Ci0g
ICAgICAgICAgICBpZiBXZWJLaXRET01Eb2NHZW5lcmF0b3IuaXNfZGVwcmVjYXRlZF9zeW1ib2xf
ZmlsZShzeW1ib2xfZmlsZSk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAg
IHNlbGYud3JpdGVfc2VjdGlvbihzeW1ib2xfZmlsZSkKLSAgICAgICAgc2VsZi53cml0ZV9kZWxl
dGVkX2NsYXNzZXMoKQotICAgICAgICBzZWxmLndyaXRlX2Zvb3RlcigpCi0KLQotY2xhc3MgV2Vi
S2l0RE9NRG9jR2VuZXJhdG9yU0dNTChXZWJLaXRET01Eb2NHZW5lcmF0b3IpOgotICAgIGRlZiB3
cml0ZV9oZWFkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYud3JpdGUoJycnPD94bWwgdmVyc2lvbj0i
MS4wIj8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwg
VjQuMS4yLy9FTiIKLSAgICAgICAgICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2Rv
Y2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgWwotPCFFTlRJVFkgdmVyc2lvbiBTWVNURU0g
InZlcnNpb24ueG1sIj4KLV0+Ci08Ym9vayBpZD0iaW5kZXgiIHhtbG5zOnhpPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAzL1hJbmNsdWRlIj4KLSAgPGJvb2tpbmZvPgotICAgIDx0aXRsZT5XZWJLaXRE
T01HVEsrIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotICAgIDxyZWxlYXNlaW5mbz5mb3IgV2Vi
S2l0RE9NR1RLKyAmdmVyc2lvbjs8L3JlbGVhc2VpbmZvPgotICA8L2Jvb2tpbmZvPgotCi0gIDxj
aGFwdGVyPgotICAgIDx0aXRsZT5DbGFzcyBPdmVydmlldzwvdGl0bGU+Ci0nJycpCi0KLSAgICBk
ZWYgd3JpdGVfc2VjdGlvbihzZWxmLCBzeW1ib2xfZmlsZSk6Ci0gICAgICAgIGJhc2VuYW1lID0g
b3MucGF0aC5iYXNlbmFtZShzeW1ib2xfZmlsZSkKLSAgICAgICAgc2VsZi53cml0ZSgnICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC8lcyIvPlxuJyAlIGJhc2VuYW1lLnJlcGxhY2UoIi5zeW1ib2xz
IiwgIi54bWwiKSkKLQotICAgIGRlZiB3cml0ZV9kZWxldGVkX2NsYXNzZXMoc2VsZik6Ci0gICAg
ICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuREVMRVRFRF9DTEFTU0VTOgotICAgICAgICAgICAg
c2VsZi53cml0ZSgnICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC8lcy54bWwiLz5cbicgJSBjbGFz
c19uYW1lKQotCi0gICAgZGVmIHdyaXRlX2Zvb3RlcihzZWxmKToKLSAgICAgICAgc2VsZi53cml0
ZSgnJycgIDwvY2hhcHRlcj4KLQotICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+Ci0gICAgPHRpdGxl
PkluZGV4PC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LWZ1bGwu
eG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+Ci0gIDwvaW5kZXg+Ci0gIDxpbmRleCBp
ZD0iYXBpLWluZGV4LWRlcHJlY2F0ZWQiIHJvbGU9ImRlcHJlY2F0ZWQiPgotICAgIDx0aXRsZT5J
bmRleCBvZiBkZXByZWNhdGVkIHN5bWJvbHM8L3RpdGxlPgotICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9hcGktaW5kZXgtZGVwcmVjYXRlZC54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVk
ZT4KLSAgPC9pbmRleD4KLQotICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYW5ub3RhdGlvbi1nbG9z
c2FyeS54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KLTwvYm9vaz4KLScnJykKLQot
Ci1jbGFzcyBXZWJLaXRET01Eb2NHZW5lcmF0b3JTZWN0aW9ucyhXZWJLaXRET01Eb2NHZW5lcmF0
b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeW1ib2xfZmlsZXMsIGZpbGVfaGFuZGxlKToK
LSAgICAgICAgc3VwZXIoV2ViS2l0RE9NRG9jR2VuZXJhdG9yU2VjdGlvbnMsIHNlbGYpLl9faW5p
dF9fKHN5bWJvbF9maWxlcywgZmlsZV9oYW5kbGUpCi0KLSAgICAgICAgc2VsZi5fZmlyc3RfZGVj
YW1lbGl6ZV9yZSA9IHJlLmNvbXBpbGUoJyguKShbQS1aXVthLXpdKyknKQotICAgICAgICBzZWxm
Ll9zZWNvbmRfZGVjYW1lbGl6ZV9yZSA9IHJlLmNvbXBpbGUoJyhbYS16MC05XSkoW0EtWl0pJykK
LSAgICAgICAgc2VsZi5fZG9tX2NsYXNzX3JlID0gcmUuY29tcGlsZSgnKF5XZWJLaXRET00pKC4r
KSQnKQotICAgICAgICBzZWxmLl9mdW5jdGlvbl9yZSA9IHJlLmNvbXBpbGUoJ14uKyAoLispXCgo
LispXCkkJykKLSAgICAgICAgc2VsZi5fY29uc3RhbnRfcmUgPSByZS5jb21waWxlKCdeW0EtWl9d
KyQnKQotCi0gICAgICAgIHNlbGYuZGVwcmVjYXRlZF9zeW1ib2xzID0ge30KLSAgICAgICAgZm9y
IHN5bWJvbF9maWxlIGluIHN5bWJvbF9maWxlczoKLSAgICAgICAgICAgIGlmIFdlYktpdERPTURv
Y0dlbmVyYXRvci5pc19kZXByZWNhdGVkX3N5bWJvbF9maWxlKHN5bWJvbF9maWxlKToKLSAgICAg
ICAgICAgICAgICBzZWxmLl9kZXByZWNhdGVkX3N5bWJvbHMgPSBzZWxmLl9maW5kX2RlcHJlY2F0
ZWRfc3ltYm9scyhzeW1ib2xfZmlsZSkKLQotICAgIGRlZiBfZG9tX2NsYXNzKHNlbGYsIGNsYXNz
X25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fZG9tX2NsYXNzX3JlLnN1YihyJ1wyJywgY2xh
c3NfbmFtZSkKLQotICAgIGRlZiBfZG9tX2NsYXNzX2RlY2FtZWxpemUoc2VsZiwgY2xhc3NfbmFt
ZSk6Ci0gICAgICAgIHMxID0gc2VsZi5fZmlyc3RfZGVjYW1lbGl6ZV9yZS5zdWIocidcMV9cMics
IHNlbGYuX2RvbV9jbGFzcyhjbGFzc19uYW1lKSkKLSAgICAgICAgcmV0dmFsID0gc2VsZi5fc2Vj
b25kX2RlY2FtZWxpemVfcmUuc3ViKHInXDFfXDInLCBzMSkKLQotICAgICAgICAjIEZpeCBzb21l
IGV4Y2VwdGlvbnMuCi0gICAgICAgIHJldHZhbCA9IHJldHZhbC5yZXBsYWNlKCdXZWJfS2l0Jywg
J1dlYktpdCcpCi0gICAgICAgIHJldHZhbCA9IHJldHZhbC5yZXBsYWNlKCdYX1BhdGgnLCAnWFBh
dGgnKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgnSFRNTElfRnJhbWUnLCAnSFRN
TF9JRnJhbWUnKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgnSFRNTEJSJywgJ0hU
TUxfQlInKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgnSFRNTEhSJywgJ0hUTUxf
SFInKQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgnSFRNTExJJywgJ0hUTUxfTEkn
KQotICAgICAgICByZXR2YWwgPSByZXR2YWwucmVwbGFjZSgnSFRNTEQnLCAnSFRNTF9EJykKLSAg
ICAgICAgcmV0dmFsID0gcmV0dmFsLnJlcGxhY2UoJ0hUTUxPJywgJ0hUTUxfTycpCi0gICAgICAg
IHJldHZhbCA9IHJldHZhbC5yZXBsYWNlKCdIVE1MVScsICdIVE1MX1UnKQotCi0gICAgICAgIHJl
dHVybiByZXR2YWwKLQotICAgIGRlZiBfZGVsZXRlZF9jbGFzcyhzZWxmLCBmdW5jdGlvbik6Ci0g
ICAgICAgIGZvciBkZWxldGVkX2NsYXNzIGluIHNlbGYuREVMRVRFRF9DTEFTU0VTOgotICAgICAg
ICAgICAgZGVjYW1lbGl6ZWQgPSAnd2Via2l0X2RvbV8lcycgJSBzZWxmLl9kb21fY2xhc3NfZGVj
YW1lbGl6ZShkZWxldGVkX2NsYXNzKS5sb3dlcigpCi0gICAgICAgICAgICBpZiBmdW5jdGlvbi5z
dGFydHN3aXRoKGRlY2FtZWxpemVkKToKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlZF9j
bGFzcwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9maW5kX2RlcHJlY2F0ZWRfc3lt
Ym9scyhzZWxmLCBzeW1ib2xfZmlsZSk6Ci0gICAgICAgIHJldHZhbCA9IHt9Ci0gICAgICAgIGYg
PSBvcGVuKHN5bWJvbF9maWxlLCAncicpCi0gICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVz
KCk6Ci0gICAgICAgICAgICBtYXRjaCA9IHNlbGYuX2Z1bmN0aW9uX3JlLm1hdGNoKGxpbmUpCi0g
ICAgICAgICAgICBpZiBub3QgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAg
ICAgICAgICAgZnVuY3Rpb24gPSBtYXRjaC5ncm91cCgxKQotICAgICAgICAgICAgYXJncyA9IG1h
dGNoLmdyb3VwKDIpLnNwbGl0KCcsICcpCi0gICAgICAgICAgICBjbGFzc19uYW1lID0gYXJnc1sw
XS5zdHJpcCgnKicpCi0gICAgICAgICAgICByZXR2YWwuc2V0ZGVmYXVsdChjbGFzc19uYW1lLCBb
XSkuYXBwZW5kKGZ1bmN0aW9uKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICByZXR1cm4g
cmV0dmFsCi0KLSAgICBkZWYgX3N5bWJvbF9saXN0KHNlbGYsIHN5bWJvbF9maWxlKToKLSAgICAg
ICAgcmV0dmFsID0gW10KLSAgICAgICAgZiA9IG9wZW4oc3ltYm9sX2ZpbGUsICdyJykKLSAgICAg
ICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKLSAgICAgICAgICAgIG1hdGNoID0gc2VsZi5f
Y29uc3RhbnRfcmUubWF0Y2gobGluZSkKLSAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAg
ICAgICAgIHJldHZhbC5hcHBlbmQobGluZS5zdHJpcCgnXG4nKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZQotCi0gICAgICAgICAgICBtYXRjaCA9IHNlbGYuX2Z1bmN0aW9uX3JlLm1hdGNoKGxp
bmUpCi0gICAgICAgICAgICBpZiBub3QgbWF0Y2ggb3IgbWF0Y2guZ3JvdXAoMSkuZW5kc3dpdGgo
J2dldF90eXBlJyk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHJldHZh
bC5hcHBlbmQobWF0Y2guZ3JvdXAoMSkpCi0KLSAgICAgICAgcmV0dXJuIHJldHZhbAotCi0gICAg
ZGVmIHdyaXRlX3NlY3Rpb24oc2VsZiwgc3ltYm9sX2ZpbGUpOgotICAgICAgICBjbGFzc19uYW1l
ID0gb3MucGF0aC5iYXNlbmFtZShzeW1ib2xfZmlsZSkucmVwbGFjZSgiLnN5bWJvbHMiLCAiIikK
LSAgICAgICAgaXNfY3VzdG9tID0gY2xhc3NfbmFtZSA9PSAnV2ViS2l0RE9NQ3VzdG9tJwotICAg
ICAgICBpc19pbnRlcmZhY2UgPSBjbGFzc19uYW1lIGluIFsnV2ViS2l0RE9NRXZlbnRUYXJnZXQn
LCAnV2ViS2l0RE9NTm9kZUZpbHRlcicsICdXZWJLaXRET01YUGF0aE5TUmVzb2x2ZXInXQotICAg
ICAgICBpc19vYmplY3QgPSBjbGFzc19uYW1lID09ICdXZWJLaXRET01PYmplY3QnCi0gICAgICAg
IHNlbGYud3JpdGUoJzxTRUNUSU9OPlxuJykKLSAgICAgICAgc2VsZi53cml0ZSgnPEZJTEU+JXM8
L0ZJTEU+XG48VElUTEU+JXM8L1RJVExFPlxuJyAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkK
LSAgICAgICAgaWYgbm90IGlzX2N1c3RvbToKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJyVzXG4n
ICUgY2xhc3NfbmFtZSkKLSAgICAgICAgc2VsZi53cml0ZSgnXG4nKQotICAgICAgICBzZWxmLndy
aXRlKCdcbicuam9pbihzZWxmLl9zeW1ib2xfbGlzdChzeW1ib2xfZmlsZSkpICsgJ1xuJykKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgZGVwcmVjYXRlZF9mdW5jdGlvbnMgPSBzZWxmLl9kZXBy
ZWNhdGVkX3N5bWJvbHNbY2xhc3NfbmFtZV0KLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1xuJy5q
b2luKGRlcHJlY2F0ZWRfZnVuY3Rpb25zKSArICdcbicpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJv
cjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgaWYgbm90IGlzX2N1c3RvbToKLSAgICAgICAg
ICAgIHNlbGYud3JpdGUoJ1xuPFNVQlNFQ1RJT04gU3RhbmRhcmQ+XG4nKQotICAgICAgICAgICAg
aWYgaXNfaW50ZXJmYWNlOgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJyVzSWZhY2Vcbicg
JSBjbGFzc19uYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLndy
aXRlKCclc0NsYXNzXG4nICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgIGRvbV9jbGFzcyA9IHNl
bGYuX2RvbV9jbGFzc19kZWNhbWVsaXplKGNsYXNzX25hbWUpLnVwcGVyKCkKLSAgICAgICAgICAg
IHNlbGYud3JpdGUoJ1dFQktJVF9ET01fVFlQRV8lc1xuJyAlIGRvbV9jbGFzcykKLSAgICAgICAg
ICAgIHNlbGYud3JpdGUoJ1dFQktJVF9ET01fJXNcbicgJSBkb21fY2xhc3MpCi0gICAgICAgICAg
ICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NX0lTXyVzXG4nICUgZG9tX2NsYXNzKQotICAgICAgICAg
ICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV8lc19DTEFTU1xuJyAlIGRvbV9jbGFzcykKLSAgICAg
ICAgICAgIGlmIGlzX2ludGVyZmFjZToKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJL
SVRfRE9NXyVzX0dFVF9JRkFDRVxuJyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV9JU18lc19DTEFTU1xuJyAlIGRv
bV9jbGFzcykKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NXyVzX0dFVF9D
TEFTU1xuJyAlIGRvbV9jbGFzcykKLSAgICAgICAgICAgIHNlbGYud3JpdGUoJ1xuPFNVQlNFQ1RJ
T04gUHJpdmF0ZT5cbicpCi0gICAgICAgICAgICBpZiBpc19vYmplY3Q6Ci0gICAgICAgICAgICAg
ICAgc2VsZi53cml0ZSgnJXNQcml2YXRlXG4nICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgIHNl
bGYud3JpdGUoJ3dlYmtpdF9kb21fJXNfZ2V0X3R5cGVcbicgJSBkb21fY2xhc3MubG93ZXIoKSkK
LSAgICAgICAgc2VsZi53cml0ZSgnPC9TRUNUSU9OPlxuXG4nKQotCi0gICAgZGVmIHdyaXRlX2Rl
bGV0ZWRfY2xhc3NlcyhzZWxmKToKLSAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5ERUxF
VEVEX0NMQVNTRVM6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCc8U0VDVElPTj5cbicpCi0gICAg
ICAgICAgICBzZWxmLndyaXRlKCc8RklMRT4lczwvRklMRT5cbjxUSVRMRT4lczwvVElUTEU+XG4n
ICUgKGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgICAgIHNlbGYud3JpdGUoJ1xuJy5qb2luKFtuYW1lIGZvciBuYW1lIGluIHNlbGYuX2RlcHJl
Y2F0ZWRfc3ltYm9sc1tjbGFzc19uYW1lXSBpZiBub3QgbmFtZS5lbmRzd2l0aCgnZ2V0X3R5cGUn
KV0pICsgJ1xuJykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAg
ICAjIEEgZGVsZXRlZCBjbGFzcyB3aXRoIG5vIHB1YmxpYyBtZXRob2RzIGRvZXNuJ3QgaGF2ZSBk
ZXByZWNhdGVkIHN5bWJvbHMuCi0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgc2Vs
Zi53cml0ZSgnXG48U1VCU0VDVElPTiBTdGFuZGFyZD5cbicpCi0gICAgICAgICAgICBkb21fY2xh
c3MgPSBzZWxmLl9kb21fY2xhc3NfZGVjYW1lbGl6ZShjbGFzc19uYW1lKS51cHBlcigpCi0gICAg
ICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NX1RZUEVfJXNcbicgJSBkb21fY2xhc3MpCi0g
ICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NXyVzXG4nICUgZG9tX2NsYXNzKQotICAg
ICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV9JU18lc1xuJyAlIGRvbV9jbGFzcykKLSAg
ICAgICAgICAgIHNlbGYud3JpdGUoJ1dFQktJVF9ET01fJXNfQ0xBU1NcbicgJSBkb21fY2xhc3Mp
Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCdXRUJLSVRfRE9NX0lTXyVzX0NMQVNTXG4nICUgZG9t
X2NsYXNzKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0RPTV8lc19HRVRfQ0xBU1Nc
bicgJSBkb21fY2xhc3MpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCdcbjxTVUJTRUNUSU9OIFBy
aXZhdGU+XG4nKQotICAgICAgICAgICAgc2VsZi53cml0ZSgnd2Via2l0X2RvbV8lc19nZXRfdHlw
ZVxuJyAlIHNlbGYuX2RvbV9jbGFzc19kZWNhbWVsaXplKGNsYXNzX25hbWUpLmxvd2VyKCkpCi0g
ICAgICAgICAgICBzZWxmLndyaXRlKCc8L1NFQ1RJT04+XG5cbicpCi0KLSAgICBkZWYgd3JpdGVf
Zm9vdGVyKHNlbGYpOgotICAgICAgICBzZWxmLndyaXRlKCc8U0VDVElPTj5cbicpCi0gICAgICAg
IHNlbGYud3JpdGUoJzxGSUxFPndlYmtpdGRvbWRlZmluZXM8L0ZJTEU+XG48VElUTEU+V2ViS2l0
RE9NRGVmaW5lczwvVElUTEU+XG4nKQotICAgICAgICBzZWxmLndyaXRlKCc8U1VCU0VDVElPTiBQ
cml2YXRlPlxuJykKLSAgICAgICAgc2VsZi53cml0ZSgnV0VCS0lUX0FQSVxuV0VCS0lUX0RFUFJF
Q0FURURcbldFQktJVF9ERVBSRUNBVEVEX0ZPUlxuJykKLSAgICAgICAgc2VsZi53cml0ZSgnPC9T
RUNUSU9OPlxuXG4nKQotCi0KLWRlZiB3cml0ZV9kb2NfZmlsZXMobW9kdWxlX25hbWUpOgotICAg
IGRvY19kaXIgPSBjb21tb24uYnVpbGRfcGF0aCgnRGVyaXZlZFNvdXJjZXMnLCAnd2Via2l0ZG9t
JywgJ2RvY3MnKQotCi0gICAgdHJ5OgotICAgICAgICBvcy5ta2Rpcihkb2NfZGlyKQotICAgIGV4
Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVCBvciBu
b3Qgb3MucGF0aC5pc2Rpcihkb2NfZGlyKToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUo
IkNvdWxkIG5vdCBjcmVhdGUgZG9jIGRpciBhdCAlczogJXNcbiIgJSAoZG9jX2Rpciwgc3RyKGUp
KSkKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2lu
KGRvY19kaXIsICclcy1zZWN0aW9ucy50eHQnICUgbW9kdWxlX25hbWUpLCAndycpIGFzIHNlY3Rp
b25zX2ZpbGU6Ci0gICAgICAgIGdlbmVyYXRvciA9IFdlYktpdERPTURvY0dlbmVyYXRvclNlY3Rp
b25zKGdldF9hbGxfd2Via2l0ZG9tX3N5bWJvbF9maWxlcygpLCBzZWN0aW9uc19maWxlKQotICAg
ICAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKQotICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZG9j
X2RpciwgJ3dlYmtpdGRvbWd0ay1kb2NzLnNnbWwnKSwgJ3cnKSBhcyBzZ21sX2ZpbGU6Ci0gICAg
ICAgIGdlbmVyYXRvciA9IFdlYktpdERPTURvY0dlbmVyYXRvclNHTUwoZ2V0X2FsbF93ZWJraXRk
b21fc3ltYm9sX2ZpbGVzKCksIHNnbWxfZmlsZSkKLSAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRl
KCkKLQotCi1kZWYgaGVhZGVyX25hbWVfbGlzdF9mcm9tX2d0a2RvY19jb25maWdfZmlsZSgpOgot
ICAgIGNvbmZpZ19maWxlID0gY29tbW9uLmJ1aWxkX3BhdGgoJ2d0a2RvYy13ZWJraXRkb20uY2Zn
JykKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoY29uZmlnX2ZpbGUpOgotICAgICAgICBzeXMu
c3RkZXJyLndyaXRlKCJDb3VsZCBub3QgZmluZCBjb25maWcgZmlsZSBhdCAlc1xuIiAlIGNvbmZp
Z19maWxlKQotICAgICAgICByZXR1cm4gc3lzLmV4aXQoMSkKLQotICAgIGNvbmZpZyA9IFNhZmVD
b25maWdQYXJzZXIoKQotICAgIGNvbmZpZy5yZWFkKGNvbmZpZ19maWxlKQotICAgIG1vZHVsZV9u
YW1lID0gY29uZmlnLnNlY3Rpb25zKClbMF0KLSAgICByZXR1cm4gW29zLnBhdGguYmFzZW5hbWUo
ZikgZm9yIGYgaW4gc3RyKGNvbmZpZy5nZXQobW9kdWxlX25hbWUsICdoZWFkZXJzJykpLnJlcGxh
Y2UoJzsnLCAnICcpLnNwbGl0KCldCi0KLQotZGVmIGdldF9hbGxfd2Via2l0ZG9tX3N5bWJvbF9m
aWxlcygpOgotICAgIHN0YXRpY19zeW1ib2xfZmlsZXNfcGF0aCA9IGNvbW1vbi50b3BfbGV2ZWxf
cGF0aCgnU291cmNlJywgJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnZ29iamVjdCcpCi0gICAgZ2Vu
ZXJhdGVkX3N5bWJvbF9maWxlc19wYXRoID0gY29tbW9uLmJ1aWxkX3BhdGgoJ0Rlcml2ZWRTb3Vy
Y2VzJywgJ3dlYmtpdGRvbScpCi0KLSAgICBzeW1ib2xfZmlsZXMgPSBbXQotICAgIGZvciBoZWFk
ZXJfbmFtZSBpbiBoZWFkZXJfbmFtZV9saXN0X2Zyb21fZ3RrZG9jX2NvbmZpZ19maWxlKCk6Ci0g
ICAgICAgICMgd2Via2l0ZG9tZGVmaW5lcy5oIGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcg
c3ltYm9scyBmaWxlIGFuZCB3ZWJraXRkb20uc3ltYm9scyBpcyBhCi0gICAgICAgICMgZmlsZSBj
b250YWluaW5nIHRoZSBleHBlY3RlZCBzeW1ib2xzIHJlc3VsdHMuCi0gICAgICAgIGlmIGhlYWRl
cl9uYW1lIGluICgid2Via2l0ZG9tLmgiLCAid2Via2l0ZG9tZGVmaW5lcy5oIik6Ci0gICAgICAg
ICAgICBjb250aW51ZQotCi0gICAgICAgIHN5bWJvbF9maWxlID0gaGVhZGVyX25hbWUucmVwbGFj
ZSgiLmgiLCAiLnN5bWJvbHMiKQotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHN0YXRpY19z
eW1ib2xfZmlsZXNfcGF0aCwgc3ltYm9sX2ZpbGUpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3Rz
KHBhdGgpOgotICAgICAgICAgICAgc3ltYm9sX2ZpbGVzLmFwcGVuZChwYXRoKQotICAgICAgICAg
ICAgY29udGludWUKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihnZW5lcmF0ZWRfc3ltYm9s
X2ZpbGVzX3BhdGgsIHN5bWJvbF9maWxlKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRo
KToKLSAgICAgICAgICAgIHN5bWJvbF9maWxlcy5hcHBlbmQocGF0aCkKLSAgICAgICAgICAgIGNv
bnRpbnVlCi0KLSAgICByZXR1cm4gc3ltYm9sX2ZpbGVzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>